# Andros Fenollosa > I'm Product Owner and Full Stack Developer with extensive experience in Web Development and as a Mobile Developer (for iOS and Android), as well as specializing in real-time backends and RESTful APIs. My strengths include the design of scalable software architectures, agile organizations, and the refinement of user experiences. > > I've developed software for renowned companies, helped startups take their first steps, and collaborated with organizations in locations as diverse as the United States, France, Germany, Norway, Australia, and Spain. > > In my free time, I maintain several open-source projects, write technical books, create free courses, give talks and workshops, and enthusiastically accept any invitation to a podcast or event. > > Additionally, I'm passionate about functional programming and have an unconditional love for Emacs. Available in Spanish (andros.dev) and English (en.andros.dev). The language is determined by the subdomain. ## API Blog articles can be retrieved as clean Markdown (with YAML frontmatter) by sending the header: Accept: text/markdown Example: curl -H "Accept: text/markdown" https://andros.dev/blog/{uuid}/{slug}/ Full courses and books can be retrieved as Markdown (with YAML frontmatter) by adding `?format=markdown`: curl https://andros.dev/cursos/{course-slug}/?format=markdown curl https://andros.dev/book/{book-slug}/?format=markdown ## Blog (Spanish) - [Cuántos argumentos debe tener una función en Python](https://andros.dev/blog/6640702c/cuantos-argumentos-debe-tener-una-funcion-en-python/): Una de las señales más claras de que una función está haciendo demasiado es que tiene demasiados argumentos. Cuando hay muchos argumentos se vuelve el - [Cifrando y descifrando datos en Python](https://andros.dev/blog/918840bc/cifrando-y-descifrando-datos-en-python/): En ciertos momentos necesitamos cifrar datos en el backend para protegerlos. Si estás en el ecosistema de Python, tienes una biblioteca fantástica par - [Django LiveView vs Phoenix LiveView: auténtico rendimiento](https://andros.dev/blog/62e4ee11/django-liveview-vs-phoenix-liveview-autentico-rendimiento/): Tenía curiosidad: ¿cómo se comporta Django LiveView frente a la implementación original de Elixir cuando los comparas en condiciones idénticas? No con - [Construyendo un sistema multiagente desde cero: 50 líneas de bash + git](https://andros.dev/blog/06411102/construyendo-un-sistema-multiagente-desde-cero-50-lineas-de-bash-git/): Gradualmente se está extendiendo entre los desarrolladores el concepto de orquestar agentes. Claude tiene previsto, o ya puedes usar (dependiendo de c - [twtxt vs Org Social: la evolución de una idea](https://andros.dev/blog/105b0124/twtxt-vs-org-social-la-evolucion-de-una-idea/): twtxt fue una de las inspiraciones más fuertes de Org Social: un fichero de texto plano servido por HTTP, sin servidor activo, sin base de datos, sin - [Haciendo UIs como una aventura de texto](https://andros.dev/blog/8a3ceb36/haciendo-uis-como-una-aventura-de-texto/): En mi empresa estamos cambiando de paradigma interactivo. A pesar de que la lógica de negocio de nuestras herramientas internas sigue siendo la misma, - [Tutorial rápido para tener un blog online a partir de Org mode gracias a Org Social](https://andros.dev/blog/c45ae903/tutorial-rapido-para-tener-un-blog-online-a-partir-de-org-mode-gracias-a-org-social/): Tener un blog online a partir de un archivo en Org mode, sin servidor propio, con autodespliegue y sin mantener nada extra, es posible gracias a un se - [De cero a un sistema RAG: aciertos y errores](https://andros.dev/blog/fe3cb75b/de-cero-a-un-sistema-rag-aciertos-y-errores/): Hace unos meses me encargaron crear una herramienta interna para los ingenieros de la empresa: un Chat que usara un LLM local. Hasta aquí nada extraor - [Mi web ahora es ~2.8x más rápida al convertirla en SPA gracias a Django LiveView](https://andros.dev/blog/0b307aa9/mi-web-ahora-es-28x-mas-rapida-al-convertirla-en-spa-gracias-a-django-liveview/): Después de subir la actualización 2.2.0 de Django LiveView a PyPI que arreglaba algunos problemas menores, me animé a transformar toda mi web personal - [Construyendo catedrales técnicas para un público que ya no visita webs](https://andros.dev/blog/47db7547/construyendo-catedrales-tecnicas-para-un-publico-que-ya-no-visita-webs/): Ahora, mi web sirve los artículos y las lecciones en Markdown si usas la cabecera "Accept: text/markdown". Puedes intentarlo tú mismo con el artículo - [Emacs es una estación de trabajo de fantasía](https://andros.dev/blog/acdd4ed2/emacs-es-una-estacion-de-trabajo-de-fantasia/): Llevo tiempo usando Emacs y si algo me ha enseñado es a no conformarme. Cada vez que abro mi configuración descubro algo que puedo hacer mejor, un ata - [De htmx a Django LiveView](https://andros.dev/blog/785bf7ac/de-htmx-a-django-liveview/): Si usas htmx y estás evaluando Django LiveView, este artículo es para ti. Quiero enseñarte rápidamente las equivalencias de que sueles hacer con htmx - [Enviando parches via Email con Git](https://andros.dev/blog/ce42d654/enviando-parches-via-email-con-git/): Cuando pensamos en trabajar con un amigo en un proyecto pequeño, instintivamente creamos un repositorio en GitHub o GitLab. Esta práctica, o reflejo, - [¿He creado un motor de videjuegos para Django?](https://andros.dev/blog/35406565/he-creado-un-motor-de-videjuegos-para-django/): TL;DR: Juego multiplayer completo en el navegador formado por 270 líneas de Python y 0 de JavaScript funcionando sobre Django gracias a Django LiveVie - [Mi rutina matutina en Emacs](https://andros.dev/blog/ecbd6519/mi-rutina-matutina-en-emacs/): Este no es un tutorial, solo estoy compartiendo mi flujo de trabajo. Espero que te sea útil. 1. Noticias Revisar mis grupos de noticias: sh M-x gnus - [Por qué hice un fork en lugar de tomar el camino fácil](https://andros.dev/blog/87b1d81e/por-que-hice-un-fork-en-lugar-de-tomar-el-camino-facil/): Quería añadir un pequeño contador de visitantes presentes en mi web en tiempo real. En otras palabras, que se pueda ver abiertamente cuánta gente hay - [Tutorial rápido para empezar en Org Social](https://andros.dev/blog/8c654e18/tutorial-rapido-para-empezar-en-org-social/): Org Social es una red social descentralizada muy peculiar, ya que funciona a partir de archivos de texto en formato Org Mode. Cada usuario interactúa - [Tutorial rápido de Docker para ejecutar un script en Python](https://andros.dev/blog/5ec92c83/tutorial-rapido-de-docker-para-ejecutar-un-script-en-python/): Te encuentras ante un primer punto de partida para aprender Docker desde cero donde prima más la práctica que la teoría. El objetivo de este artículo - [Sass, el preprocesador que sobrevivió al apocalipsis CSS](https://andros.dev/blog/658a0794/sass-el-preprocesador-que-sobrevivio-al-apocalipsis-css/): En el vertiginoso mundo del desarrollo web, donde las tecnologías nacen y mueren a ritmo acelerado, hay herramientas que han demostrado una resistenci - [Configurando pre-commit con Ruff para un proyecto en Python](https://andros.dev/blog/fa7d1929/configurando-pre-commit-con-ruff-para-un-proyecto-en-python/): Cuando utilizas Git, dispones de una herramienta muy poderosa llamada hooks. Te permite lanzar scripts en diferentes momentos del ciclo de vida de un - [Guia rápida de herramientas modernas en Python](https://andros.dev/blog/c3ec3586/guia-rapida-de-herramientas-modernas-en-python/): Puedes considerarlo este artículo como unos apuntes rápidos de uv y ruff, dos herramientas modernas para gestionar proyectos y paquetes de Python. Amb - [Guía rápida para escribir buenos comentarios en Python](https://andros.dev/blog/be5439dc/guia-rapida-para-escribir-buenos-comentarios-en-python/): Los comentarios son la mitad de tu código. Son tan esenciales, que sin ellos pueden hacer un código incomprensible, y por lo tanto hacer que un proye - [Construyendo APIs RESTful robustas con Arquitectura Limpia y Hypermedia](https://andros.dev/blog/f3521f7e/construyendo-apis-restful-robustas-con-arquitectura-limpia-y-hypermedia/): Lo siento, pero no sabes qué es una API RESTful. Sé que estás curtido integrando APIs de todo tipo, y hasta puede ser que tengas en producción decenas - [Determina el tipo de archivo y genera nombres únicos en tu backend con Python](https://andros.dev/blog/c9bb4e4a/determina-el-tipo-de-archivo-y-genera-nombres-unicos-en-tu-backend-con-python/): Cuando desarrollas un backend, una de las tareas más triviales, y a menudo subestimadas, es recibir archivos enviados por usuarios. Es fácil asumir qu - [Primeros pasos con RabbitMQ usando Python](https://andros.dev/blog/c27b7516/primeros-pasos-con-rabbitmq-usando-python/): RabbitMQ es un broker de mensajería de código abierto que implementa el protocolo AMQP (Advanced Message Queuing Protocol). Permite la comunicación en - [IRC Bouncer para mantener el historial y sincronizar mis clientes](https://andros.dev/blog/52e84bf3/irc-bouncer-para-mantener-el-historial-y-sincronizar-mis-clientes/): IRC, Internet Relay Chat, es un protocolo de comunicación en tiempo real que permite la interacción entre usuarios a través de canales (o grupos). Aun - [Pruebas E2E con TestCafe sobre Docker](https://andros.dev/blog/2c45990e/pruebas-e2e-con-testcafe-sobre-docker/): TestCafe es un framework para realizar pruebas E2E. Destaca respecto a otros frameworks por su simplicidad, siendo ideal para realizar pruebas sencill - [twtxt, desplegar tu feed con Docker](https://andros.dev/blog/d4617d29/twtxt-desplegar-tu-feed-con-docker/): La mayor dificultad que vas a encontrarte con twtxt es la misma que con cualquier otra web: desplegarlo o hacerlo visible. Si tu intención es auto alo - [Obteniendo datos asíncronos de una API con Emacs Lisp](https://andros.dev/blog/94e69e19/obteniendo-datos-asincronos-de-una-api-con-emacs-lisp/): Emacs Lisp es un lenguaje tremendamente versátil. Puedes usarlo para gestionar el buffer o tareas comunes en otros lenguajes de programación. Entre el - [twtxt, la red social en texto plano, descentralizada y minimalista](https://andros.dev/blog/b9276294/twtxt-la-red-social-en-texto-plano-descentralizada-y-minimalista/): Hoy por hoy es difícil que te sorprenda una red social. Tenemos sabores y colores para todos los gustos, pasando por algunas donde se centran en el co - [Interfaz en Python para interactuar con SQLite](https://andros.dev/blog/15eb3e43/interfaz-en-python-para-interactuar-con-sqlite/): Me gustaría compartir un punto de partida, una plantilla, para interactuar con la base de datos. El código esta adaptado a un SQLite por medio de Pyth - [Ejemplo en Markdown de como documentar una API](https://andros.dev/blog/e6a134c6/ejemplo-en-markdown-de-como-documentar-una-api/): El siguiente artículo podría considerarse una segunda parte espiritual de Script en Bash y cURL para hacer comprensiva una API. En este caso, se trata - [Interfaz en Python para interactuar con Redis](https://andros.dev/blog/0e77de82/interfaz-en-python-para-interactuar-con-redis/): En estos momentos me encuentro trabajando en un proyecto con arquitectura limpia. Ha llegado un punto donde necesito interactuar con Redis, una base d - [Comunicando procesos en tiempo real con Redis](https://andros.dev/blog/d856f97d/comunicando-procesos-en-tiempo-real-con-redis/): Vamos a ver un ejemplo de cómo comunicar en tiempo real diferentes procesos, contenedores, servidores o incluso diferentes lenguajes, usando Redis. Si - [Emacs creando un widget para controlar mi enchufe inteligente](https://andros.dev/blog/3b71978c/emacs-creando-un-widget-para-controlar-mi-enchufe-inteligente/): A lo largo de los años he ido automatizando mi casa, y unos de los dispositivos que más uso es un enchufe inteligente. Para controlarlos uso scripts o - [Sala de espera para tareas largas en Django](https://andros.dev/blog/e9bfcece/sala-de-espera-para-tareas-largas-en-django/): Colócate en la siguiente situación: cuando un usuario pulsa un botón de tu web, se ejecuta una funcionalidad que tarda mucho tiempo en dar el resultad - [Creando un CRUD con Streamlit](https://andros.dev/blog/ca9c9e1c/creando-un-crud-con-streamlit/): Estoy trabajando en una herramienta interna que requiere un típico CRUD (Create, Read, Update, Delete) de varias tablas. Para ello, he decidido utiliz - [Sencillo sistema de cola de tareas en Python](https://andros.dev/blog/dac58747/sencillo-sistema-de-cola-de-tareas-en-python/): Una cola de tareas sirve para ejecutar tareas en segundo plano, de forma asíncrona, sin bloquear la ejecución del programa principal. Es muy útil para - [Crear pantalla de bienvenida mientras se levanta un sitio dinámico](https://andros.dev/blog/e6a90ebd/crear-pantalla-de-bienvenida-mientras-se-levanta-un-sitio-dinamico/): A la hora de levantar un sitio web dinámico, sobretodo si usas un servidor web como proxy inverso, es posible que visualices una página de error mient - [Script en Bash y cURL para hacer comprensiva una API](https://andros.dev/blog/5a4811fc/script-en-bash-y-curl-para-hacer-comprensiva-una-api/): Documentar una API, por mucho detalles que incluyas, siempre será insuficiente si no incluyes ejemplos de uso. Y si además son reales, que puedes ejec - [Crear miniaturas de imágenes en Django](https://andros.dev/blog/99c0e7f2/crear-miniaturas-de-imagenes-en-django/): Cuando permitimos subir imágenes subidas por un usuario, para posteriormente mostrarlas en un sitio web, encontraremos un problema de rendimiento. Los - [Crear previa o imagen miniatura de video en Django](https://andros.dev/blog/041a8a2c/crear-previa-o-imagen-miniatura-de-video-en-django/): Cuando se sube un vídeo a un servidor, es común que se quiera mostrar una previa. Es útil para enseñar un vistazo rápido del vídeo antes de reproducir - [Algoritmo para encontrar el camino más corto](https://andros.dev/blog/58ed81f9/algoritmo-para-encontrar-el-camino-mas-corto/): En otro artículo, «Algoritmo para saber si existe un camino posible», vimos como encontrar el camino más corto entre 2 nodos de un grafo. Funciona muy - [Algoritmo para saber si existe un camino posible](https://andros.dev/blog/7c6ed21e/algoritmo-para-saber-si-existe-un-camino-posible/): Cuando queremos comprobar si existe un camino posible entre 2 puntos, lo que queremos hacer es trabajar con grafos. Además, necesitaremos un algoritmo - [Creando tu propia cápsula de Gemini](https://andros.dev/blog/e3f6bada/creando-tu-propia-capsula-de-gemini/): Me gustaría compartir contigo el proceso para crear tu propia cápsula del protocolo Gemini. Usaré Agate, un servidor de Gemini escrito en Rust recomen - [Proxy inverso para el protocolo Gemini](https://andros.dev/blog/4185c8eb/proxy-inverso-para-el-protocolo-gemini/): Para redireccionar el tráfico de Gemini a un servidor específico, podemos crear un proxy inverso con Nginx de una manera relativamente sencilla. El ca - [Instalar un servidor rápido XMPP con Docker y Proxy Inverso](https://andros.dev/blog/ffc0aa45/instalar-un-servidor-rapido-xmpp-con-docker-y-proxy-inverso/): Gracias a Snikket podemos tener un servidor XMPP en minutos. Por debajo es un servidor Prosody con un frontend web y un proxy inverso. Además viene pr - [Python transformar base64 a archivo](https://andros.dev/blog/8128ad23/python-transformar-base64-a-archivo/): Últimamente estoy recibiendo muchos archivos en formato base64 desde un frontend, y necesito convertirlos a archivos reales para trabajar con ellos (g - [Redireccionando SSH](https://andros.dev/blog/4ef618fc/redireccionando-ssh/): Me encontraba en el siguiente escenario. Necesitaba conectarme por SSH a un servidor por el puerto 8666, pero a través de otro servidor que tenía acce - [Ejecutando scripts en Elisp con Docker](https://andros.dev/blog/bd792918/ejecutando-scripts-en-elisp-con-docker/): Me encontraba con la necesidad de ejecutar un script en Emacs Lisp en un workflow cada vez que subiera un cambio a un repositorio de Git. Y además, de - [Configurando FastAPI para recibir y devolver camelCase](https://andros.dev/blog/9196659e/configurando-fastapi-para-recibir-y-devolver-camelcase/): Hay un conflicto entre el formato de variables en Python (snake_case) y el formato de variables en JavaScript (camelCase). En este artículo, te enseña - [Desplegando un sitio estático con Docker](https://andros.dev/blog/f653e1c3/desplegando-un-sitio-estatico-con-docker/): A menudo me encuentro con la necesidad de desplegar sitios simples en HTML, muchos de ellos estáticos. Me gustaría enseñaros como podemos desplegar un - [LiveView con FastAPI](https://andros.dev/blog/eaa130f0/liveview-con-fastapi/): He estado jugando con FastAPI para entender como de factible es crear soluciones sitios con un enfoque de HTML sobre WebSockets (LiveView). Me ha sorp - [Aprende a estructurar un test](https://andros.dev/blog/f686b89f/aprende-a-estructurar-un-test/): Usar un flujo de testing de algún tipo (TDD, BDD, E2E...) es una buena medida de calidad. No porque te asegure que la función u objeto funcione como e - [Implementando arquitectura limpia en Python](https://andros.dev/blog/533bc8e0/implementando-arquitectura-limpia-en-python/): La Arquitectura Limpia es una variante de la arquitectura hexagonal de Alistair Cockburn. La idea principal es separar la lógica de negocio de la infr - [Compilar Emacs para Debian](https://andros.dev/blog/a881f7ce/compilar-emacs-para-debian/): Compilar Emacs proporciona una mejor experiencia ya que aumenta la velocidad gracias a las optimizaciones de rendimiento y la posibilidad de habilitar - [Gestionar árbol de datos o nodos conectados](https://andros.dev/blog/d724e431/gestionar-arbol-de-datos-o-nodos-conectados/): Un árbol de datos es una estructura jerárquica donde cada nodo tiene un valor y puede tener cero o más nodos hijos, que a su vez cada nodo posee sus p - [Razones para NO usar Tailwind CSS](https://andros.dev/blog/8a4eed17/razones-para-no-usar-tailwind-css/): Tailwind CSS es un framework de CSS muy popular entre los desarrolladores web. Sin conocimientos previos en diseño gráfico, te resuelve el estandariza - [Usar el protocolo ActivityPub en lugar de email](https://andros.dev/blog/1a0d3981/usar-el-protocolo-activitypub-en-lugar-de-email/): ¿Y si utilizamos el protocolo ActivityPub en sustitución al email (SMTP/POP/IMAP)? A priori parece una idea descabellada, pero ¿por qué no? El email e - [Lecciones aprendidas después de 15 años impartiendo clases de programación](https://andros.dev/blog/6aa24e82/lecciones-aprendidas-despues-de-15-anos-impartiendo-clases-de-programacion/): Una de las decisiones que más me han costado tomar en la vida, sin duda, ha sido dejar de impartir clases. Pero como siempre he dicho a mis alumnos: « - [Python estrategias para saber si un número es divisible por otro](https://andros.dev/blog/72179c15/python-estrategias-para-saber-si-un-numero-es-divisible-por-otro/): Rápidamente vamos a ver 2 técnicas elementales para saber si un número es divisible por otro en Python. No obstante, puedes utilizar estas estrategias - [Algoritmo de mezcla Fisher-Yates](https://andros.dev/blog/925174b3/algoritmo-de-mezcla-fisher-yates/): El algoritmo de desordenamiento Fisher-Yates es un algoritmo para generar una permutación aleatoria de un conjunto finito. O en otras palabras, es un - [Tutorial para compartir temporalmente un servidor local en un dominio público](https://andros.dev/blog/0a2f9e75/tutorial-para-compartir-temporalmente-un-servidor-local-en-un-dominio-publico/): Una herramienta básica para cualquier desarrollador web es la posibilidad de compartir un servidor local, o puerto, con cualquier persona o dispositiv - [¿Por qué los usuarios de Emacs lo usan para todo?](https://andros.dev/blog/ab508c53/por-que-los-usuarios-de-emacs-lo-usan-para-todo/): Es una pregunta que todo usuario de Emacs debe hacerse una vez en la vida. ¿Por qué uso Emacs para todo en lugar de diferentes software para tarea con - [Vim no es un editor, sino un marco de trabajo](https://andros.dev/blog/8211e87a/vim-no-es-un-editor-sino-un-marco-de-trabajo/): Vim se considera un editor de texto para terminal, pero ¿es realmente un editor? ¿O es un entorno de desarrollo? ¿Un juguete para devs? ¿Tal vez un co - [Crear un chat bot para XMPP](https://andros.dev/blog/a01eabd9/crear-un-chat-bot-para-xmpp/): Os voy a enseñar a crear un bot para XMPP usando Python y la librería slixmpp{: target="_blank"}. Me resulta de mucha utilidad para automatizar tareas - [Ejemplo UI HTML/CSS para chat](https://andros.dev/blog/1e8daf6a/ejemplo-ui-htmlcss-para-chat/): A continuación comparto un ejemplo de interfaz de usuario para un chat, utilizando HTML y CSS. El código aplica buenas prácticas de accesibilidad, com - [¿Por qué ya no quiero usar un generador de sitios estáticos para mi blog?](https://andros.dev/blog/f3e24a03/por-que-ya-no-quiero-usar-un-generador-de-sitios-estaticos-para-mi-blog/): Durante casi 8 años he usado un generador de sitios estáticos para mi blog pero ahora voy a mirar a un sitio dinámico. ¿Por qué? ¿Qué problemas he suf - [Instalar un servidor privado de mensajería instantánea (XMPP)](https://andros.dev/blog/db66fc65/instalar-un-servidor-privado-de-mensajeria-instantanea-xmpp/): Existe una alternativa a los servicios de mensajería instantánea como WhatsApp, Telegram, Signal, etc. Un sistema desentralizado, opensource, seguro, - [¿Cuál es el mejor navegador web? 2024](https://andros.dev/blog/5b939115/cual-es-el-mejor-navegador-web-2024/): Chrome, es el navegador más popular de la mayoría. Las causas son varias, entre ella por a su marketing, integración en ChromeBooks y Androids. Por ot - [El peligro de depender de Notion](https://andros.dev/blog/0dd57b61/el-peligro-de-depender-de-notion/): Hace unos días decidí migrar mis notas de Notion a Joplin. En este artículo te cuento las razones, los problemas que me encontré por el camino y como - [Técnica CSS para mostrar una imagen de baja de calidad mientras se descarga la final](https://andros.dev/blog/bd1a33a6/tecnica-css-para-mostrar-una-imagen-de-baja-de-calidad-mientras-se-descarga-la-final/): En este artículo vamos a ver una técnica CSS para mostrar una imagen de baja calidad mientras se descarga la final. Una forma muy inteligente para mej - [SEO en Django, configuraciones básicas](https://andros.dev/blog/6dbec944/seo-en-django-configuraciones-basicas/): Me gustaría compartir las configuraciones mínimas que utilizo en mis proyectos Django para mejorar el SEO. Desde la creación de un sitemap, robots.txt - [Transformar imágenes a AVIF en Linux (Debian/Ubuntu)](https://andros.dev/blog/852bceac/transformar-imagenes-a-avif-en-linux-debianubuntu/): AVIF es un formato de imagen de alta calidad, con una comprensión muy alta y libre de patentes. Es el sucesor del actual WEBP y JPEG. Se recomiendo su - [Telegram en Emacs](https://andros.dev/blog/b4e5f797/telegram-en-emacs/): Es un placer poder usar Telegram sin salir de Emacs, un sueño para todos aquellos adictos como yo al editor del Gnus. A día de hoy existe una fantásti - [Script para guardar una imagen copiada en el portapapeles](https://andros.dev/blog/a0d670c9/script-para-guardar-una-imagen-copiada-en-el-portapapeles/): En este artículo voy a explicar cómo guardar una imagen copiada en el portapapeles. Esto puede ser útil para guardar una captura de pantalla o una ima - [Django personalizar el campo Datetime en el panel administrativo](https://andros.dev/blog/08fa126d/django-personalizar-el-campo-datetime-en-el-panel-administrativo/): El selector de fechas y horas, o datepicker, que muestra por defecto el panel administrativo de Django es bastante bueno, pero ocasionalmente necesita - [Websocat, cliente de WebSocket para terminal](https://andros.dev/blog/7b48ad72/websocat-cliente-de-websocket-para-terminal/): Websocat es un cliente de WebSocket, TCP, UDP, Unix Socket, y STDIO para la terminal. Es el equivalente a Netcat, pero para WebSockets. Una herramient - [Levantar Cypress en modo gráfico sobre Docker](https://andros.dev/blog/239bdc16/levantar-cypress-en-modo-grafico-sobre-docker/): Cypress es un framework de testing end-to-end que nos permite realizar pruebas simulando la interacción de un usuario por medio de un navegador. Lamen - [Material que necesito antes implementar una Web](https://andros.dev/blog/d2853ff2/material-que-necesito-antes-implementar-una-web/): La mala organización cuesta dinero. Realizar un sitio web sin disponer del material creará cuellos de botella, frustración, retrasos, largos hilos de - [Guía de estudios en Python orientado a Web para autodidactas](https://andros.dev/blog/12985aca/guia-de-estudios-en-python-orientado-a-web-para-autodidactas/): Estas ante una guía de estudios en español con material gratuito y de gran calidad orientado a personas que quieran aprender Python con el objetivo de - [En Wagtail como crear páginas mediante un script de Python](https://andros.dev/blog/6309c9df/en-wagtail-como-crear-paginas-mediante-un-script-de-python/): Wagtail es un CMS que se integra con Django y nos permite crear páginas de forma visual. No obstante, hay situaciones donde debemos crear páginas de f - [Usando la API de MailHog](https://andros.dev/blog/a5bc6faf/usando-la-api-de-mailhog/): MailHog es un servidor de correo electrónico de desarrollo, escrito en Go, que permite enviar mensajes y capturarlos localmente para su visualización/ - [Publicar en Mastodon desde RSS usando IFTTT](https://andros.dev/blog/ba7607d8/publicar-en-mastodon-desde-rss-usando-ifttt/): Utilizando como base el conocimiento que adquirimos Publicar en Mastodon con CURL, vamos a utilizar IFTTT para publicar en Mastodon desde RSS. Una man - [Algoritmo sencillo para crear bosques procedurales](https://andros.dev/blog/1443734a/algoritmo-sencillo-para-crear-bosques-procedurales/): La generación procedural, o por procedimientos, es un enfoque de desarrollo que utiliza algoritmos para generar contenido de manera automática. Esto i - [Juego de la vida](https://andros.dev/blog/03bff8d9/juego-de-la-vida/): El Juego de la Vida es un autómata celular ideado por John Horton Conway en 1970 que ha cautivado a matemáticos y programadores durante décadas. Consi - [Publicar en Mastodon con CURL](https://andros.dev/blog/cbf8888c/publicar-en-mastodon-con-curl/): Voy a enseñarte a publicar en Mastodon desde la terminal utilizando CURL. Utilizaremos la API de Mastodon para realizar una petición POST y publicar u - [¿Qué es el Fediverso?](https://andros.dev/blog/ad60bacb/que-es-el-fediverso/): Si envías un correo electrónico a alguien, tu proveedor de correo electrónico (tal vez Gmail u Outlook) se conectará con el proveedor de correo electr - [Actualizar de Debian 11 (bullseye) a Debian 12 (bookworm)](https://andros.dev/blog/4484b374/actualizar-de-debian-11-bullseye-a-debian-12-bookworm/): Con la nueva versión estable de Debian toca actualizar de Debian 11 (bullseye) a Debian 12 (bookworm) para disponer de las últimas versiones del softw - [JavaScript IndexedDB](https://andros.dev/blog/c84dc8a5/javascript-indexeddb/): Es una base de datos de almacenamiento de objetos basada en JavaScript para aplicaciones web y dispositivos móviles. Está diseñado para proporcionar u - [Calcular la similitud de textos](https://andros.dev/blog/53c48042/calcular-la-similitud-de-textos/): La técnica de comparación de similitud de textos implica analizar y comparar los textos en busca de elementos comunes, estructuras similares o término - [JavaScript introducción a Web Workers](https://andros.dev/blog/f4bf1365/javascript-introduccion-a-web-workers/): Los Web Workers son la mejor manera de ejecutar funciones costosas que no requieran de la UI (interfaz gráfica). Con los Workers, nuestros usuarios po - [Android o iOS, ¿quién gestiona mejor la memoria RAM?](https://andros.dev/blog/14c12912/android-o-ios-quien-gestiona-mejor-la-memoria-ram/): Antes de responder a la pregunta debemos saber que cada sistema operativo usa una estrategia diferente para la liberación de memoria. Por un lado, And - [Protocolo NNTP o Network News Transfer Protocol](https://andros.dev/blog/2a862ead/protocolo-nntp-o-network-news-transfer-protocol/): NNTP te permite leer y publicar noticias (también llamado artículos) en la red Usenet (Users Network o Red de usuarios), un sistema global de discusió - [Pirámide de equipos de alto rendimiento (EAR)](https://andros.dev/blog/f9305741/piramide-de-equipos-de-alto-rendimiento-ear/): La pirámide de equipos de alto rendimiento (o sus siglas en inglés EAR) es un modelo que ilustra los pasos a seguir para conseguir un grupo de persona - [Listado de eventos tecnológicos en España para desarrolladores 2023](https://andros.dev/blog/480c727a/listado-de-eventos-tecnologicos-en-espana-para-desarrolladores-2023/): Si eres un desarrollador, programador o administrador de sistemas, y estas buscando asistir a conferencias o eventos tecnológicos en España en el año - [¿Qué es el algoritmo de Run-Length Encoding?](https://andros.dev/blog/f11f4cdd/que-es-el-algoritmo-de-run-length-encoding/): El algoritmo Run-Length Encoding, o RLE, comprime datos que contienen una gran cantidad de repeticiones consecutivas de un mismo valor o símbolo. En l - [Desplegara Nuxt 3 en GitHub Pages](https://andros.dev/blog/47aa5ac1/desplegara-nuxt-3-en-github-pages/): En este tutorial aprenderás cómo desplegar un sitio web estático generado con Nuxt.js en GitHub Pages. Para ello, te enseñaremos paso a paso cómo elim - [Enviar un correo desde el terminal por medio de SMTP](https://andros.dev/blog/1bdd23dc/enviar-un-correo-desde-el-terminal-por-medio-de-smtp/): Simple de Transferencia de Correo (SMTP, por sus siglas en inglés) es el protocolo de red más utilizado en la historia para la transmisión de correos - [Introducción al protocolo Gemini](https://andros.dev/blog/5d18461c/introduccion-al-protocolo-gemini/): El Protocolo Gemini (gemini://) es un protocolo moderno de red, iniciado en 2019, de código abierto, diseñado para permitir una navegación en la web m - [Compilar Emacs para Ubuntu o ElementaryOS](https://andros.dev/blog/b93ffbdf/compilar-emacs-para-ubuntu-o-elementaryos/): Compilar Emacs proporciona una mejor experiencia ya que aumenta la velocidad gracias a las optimizaciones de rendimiento y la posibilidad de habilitar - [¿Qué es FreeBSD?](https://andros.dev/blog/03957f2e/que-es-freebsd/): Los sistemas operativos BSD (Berkeley Software Distribution) son sistemas operativos derivados del código fuente original de Unix desarrollado en la U - [Descodificar JWT en JavaScript o Node](https://andros.dev/blog/d5bf6825/descodificar-jwt-en-javascript-o-node/): JSON Web Tokens (JWT) se utilizan comúnmente para autenticación y autorización en aplicaciones web y apps. Cuando un usuario inicia sesión, el servido - [JavaScript crear paginador con scroll infinito](https://andros.dev/blog/b1adb793/javascript-crear-paginador-con-scroll-infinito/): A continuación te ofrezco un tutorial para aprender a hacer un paginador infinito que sea moderno, eficiente y flexible ante cualquier navegador o dis - [JavaScript crear paginador](https://andros.dev/blog/81850263/javascript-crear-paginador/): Vamos a aprender como paginar datos con JavaScript, haciendo que sea perfectamente configurable por medio de variables como puede ser indicar cuantos - [Algoritmo Quicksort y como implementarlo en Python](https://andros.dev/blog/eea72544/algoritmo-quicksort-y-como-implementarlo-en-python/): QuickSort es un algoritmo de ordenamiento eficiente que utiliza un enfoque de “divide y vencerás” para ordenar una lista de elementos. Fue desarrollad - [Comprobar si existen todas las keys en un diccionario de Python](https://andros.dev/blog/44a02e5a/comprobar-si-existen-todas-las-keys-en-un-diccionario-de-python/): En algunas ocasiones debemos validar que un diccionario posea ciertas claves, o keys, existan antes de continuar nuestra lógica. Sino podría fallar la - [Pipe en Python o composición de funciones](https://andros.dev/blog/12f544d4/pipe-en-python-o-composicion-de-funciones/): Hace poco estuvimos hablando sobre como realizar un pipe en JavaScript, además de recorrer las ventajas de usar la composición de funciones. En esta o - [Pipe en JavaScript o composición de funciones](https://andros.dev/blog/33a58825/pipe-en-javascript-o-composicion-de-funciones/): La composición de funciones es una técnica que consiste en la creación de una nueva función a partir de dos o más funciones existentes. Se consigue en - [¿Qué es la evaluación perezosa y cuando usarlo?](https://andros.dev/blog/819b30bc/que-es-la-evaluacion-perezosa-y-cuando-usarlo/): Hablamos de una técnica de programación en la que una expresión o una función no se evalúa hasta que no sea necesario. Esto significa que la expresión - [Patrón de diseño Memoization](https://andros.dev/blog/310972db/patron-de-diseno-memoization/): El patrón de diseño Memoization es una técnica de optimización en programación en la cual se almacenan los resultados de funciones que requieren cálcu - [¿Qué es el currying?](https://andros.dev/blog/5c44a69d/que-es-el-currying/): El currying es una técnica de programación que consiste en transformar una función, que toma varios argumentos, en otras que pueden ser llamadas inclu - [Cómo formatear una etiqueta HTML](https://andros.dev/blog/4d272906/como-formatear-una-etiqueta-html/): Para mejorar la lectura del código, voy a enseñarte unas sencillas reglas para mejorar la legibilidad de tus documentos HTML. No son difíciles de apli - [WordPress, cuando usarlo y cuando no](https://andros.dev/blog/4df7d8b2/wordpress-cuando-usarlo-y-cuando-no/): Tomar la decisión de utilizar WordPress para realizar un sitio web no es tan evidente. Hay un gran falsedad generalizada de sentenciar dependiendo del - [Gemtext o sintáxis de Gemini con sus equivalencias HTML](https://andros.dev/blog/2791f6f5/gemtext-o-sintaxis-de-gemini-con-sus-equivalencias-html/): A continuación dejo un Gemtext cheatsheet o resumen de la sintáxis a la hora de construir sitios para el protocolo Gemini. Puedes tomarlo como una guí - [Los Diseñadores Web los agrupo en 4 niveles](https://andros.dev/blog/16bdedc1/los-disenadores-web-los-agrupo-en-4-niveles/): El Diseño Web es duro de aprender, ya que es un constante aprendizaje sin una meta definida. Muchos lo infravaloran por su sencillez de sintaxis, pero - [JavaScript modificar y devolver JSON nuevo](https://andros.dev/blog/d22841aa/javascript-modificar-y-devolver-json-nuevo/): Cuando intentamos poner en prácticas ciertas prácticas funcionales como la inmutabilidad en JavaScript se nos hace complejo por el propio diseño del l - [JavaScript obtener precio de gasolinera Española](https://andros.dev/blog/c3d63e97/javascript-obtener-precio-de-gasolinera-espanola/): A continuación voy a dejar un componente en JavaScript para obtener el precio de un tipo de combustible de cualquier gasolinera Española. El HTML nece - [Cómo hacer una base de datos inmutable](https://andros.dev/blog/00d86f6e/como-hacer-una-base-de-datos-inmutable/): Una base de datos en la que los datos no pueden ser modificados una vez que han sido agregados. Esto significa que todos los datos deben ser validados - [Enviando una fecha de Python a JavaScript](https://andros.dev/blog/424cef87/enviando-una-fecha-de-python-a-javascript/): En ciertas ocasiones debemos enviar una fecha u hora desde Python a JavaScript. Tal debes alimentar el frontend de fechas almacenadas en la base de da - [Desventajas del texto plano](https://andros.dev/blog/b29e7ef8/desventajas-del-texto-plano/): El amor hacia el texto plano es natural e inevitable entre los técnicos de redes, administradores de sistemas o desarrolladores de software. Es la bas - [Django modificar valores de un desplegable en Admin](https://andros.dev/blog/6e84897d/django-modificar-valores-de-un-desplegable-en-admin/): Cuando dispones de un panel Administrativo en Django, automáticamente se crear desplegables (Select) con las claves foráneas. El problema llega cuando - [Django repetir bloques HTML sin rangos](https://andros.dev/blog/3051f6ee/django-repetir-bloques-html-sin-rangos/): Una utilidad básica para crear bloques de HTML que se repitan es usar rangos. Lo incómodo es que deben ser declaradas como una variable de contexto o - [Python formatear precio](https://andros.dev/blog/66bfb29e/python-formatear-precio/): Independientemente del lenguaje, es bastante común formatear un precio de un formato familiar para los usuarios. Hay diferentes arreglos que siempre d - [Python transformar fechas](https://andros.dev/blog/eee50096/python-transformar-fechas/): Ejemplos sencillos de como convertir fechas usando Python. Puedes encontrar formatos típicos como Unix Time (los segundos transcurridos desde el 1 de - [Las 5 cualidades que he observado entre mis mejores alumnos](https://andros.dev/blog/17a32080/las-5-cualidades-que-he-observado-entre-mis-mejores-alumnos/): Cuando uno lleva tantos años impartiendo clases, al final acaba contemplando unos patrones regulares entres sus buenos y malos aprendices. Bueno, pues - [Focalizar mediante desenfoque](https://andros.dev/blog/82baa38b/focalizar-mediante-desenfoque/): Cuando queremos centrar la atención de un visitante en un lugar determinado, como puede ser un modal o un popup, disponemos de varias técnicas. Una de - [Crea tu propio Pi-hole en 10 comandos](https://andros.dev/blog/174f5908/crea-tu-propio-pi-hole-en-10-comandos/): Es realmente fácil crear un servidor DNS que filtre anuncios y enlaces maliciosos. La opción más popular es acudir a Pi-Hole, pero vas a ver por ti mi - [JavaScript reordenando lista arrastrando y soltando](https://andros.dev/blog/f982e561/javascript-reordenando-lista-arrastrando-y-soltando/): Una funcionalidad que más aprecio cuando estoy editando un contenido es poder arrastrar y soltar, o Drag and Drop, para ordenar una lista de elementos - [JavaScript investigando la mejor optimización para crear rangos](https://andros.dev/blog/1773e7e1/javascript-investigando-la-mejor-optimizacion-para-crear-rangos/): Tenía una duda técnica: ¿cual es la mejor forma de crear un rango en JavaScript? ¿Array.from? ¿[...Array]? ¿map? ¿Un bucle como for? Por ello decidí p - [JavaScript quitar acentos](https://andros.dev/blog/f94af27c/javascript-quitar-acentos/): Con la siguiente función en JavaScript podrás eliminar todos los acentos de un texto o string. ``` javascript /* * Devuelve un texto sin acentos * @ - [JavaScript generador de secuencia Fibonacci](https://andros.dev/blog/c4185786/javascript-generador-de-secuencia-fibonacci/): Con la siguiente función en JavaScript podrás crear secuencias de los números de Fibonacci con la longitud que necesites. Devolverá un Array. He usado - [JavaScript input file multiple sin repeticiones con previa](https://andros.dev/blog/53f4e79f/javascript-input-file-multiple-sin-repeticiones-con-previa/): Las limitaciones de un input de tipo file son múltiples: no es acumulativo, no evita repeticiones, no deja intercambiar el orden, no permite eliminar - [Django acortar el contenido o longitud de una columna](https://andros.dev/blog/02738cee/django-acortar-el-contenido-o-longitud-de-una-columna/): Un problema muy común cuando haces una migración, en concreto a la hora de acortar los carácteres máximos o longitud en una columna, es no poder hacer - [Django crear formulario de contacto en AJAX y asíncrono](https://andros.dev/blog/01e8ff0b/django-crear-formulario-de-contacto-en-ajax-y-asincrono/): Realizar un formulario de contacto en Django puede enfocarse de diferente formas. La más común es usar una vista y una plantilla HTML, en poco tiempo - [Convertir foto en Base64 URL](https://andros.dev/blog/17d129cf/convertir-foto-en-base64-url/): Cuando queremos mostrar una previa de una imagen desde JavaScript disponemos de una herramienta muy poderosa que todo FronEnd debe conocer: codificar - [Función de rango en Javascript](https://andros.dev/blog/5d9740df/funcion-de-rango-en-javascript/): Una de las funciones más prácticas a la hora de iterar es range(), muy común en lenguajes como Clojure, Python o PHP; pero en JavaScript no disponemos - [Ejemplo de metrónomo en Javascript](https://andros.dev/blog/525427c6/ejemplo-de-metronomo-en-javascript/): A continuación puedes ver un minimalista y sencillo metrónomo en JavaScript plano (Vainilla) adaptado a smartphone o escritorio. Con la ayuda de la et - [Python ejecutar funciones de forma asíncrona y en background](https://andros.dev/blog/8bb62f8f/python-ejecutar-funciones-de-forma-asincrona-y-en-background/): Disponemos de diversas bibliotecas y sintaxis nativa en Python para ejecutar instrucciones de fondo, permitiendo continuar las acciones mientras por d - [Python generador de secuencia Fibonacci](https://andros.dev/blog/c8d0f77b/python-generador-de-secuencia-fibonacci/): Con la siguiente función en Python podrás crear secuencias de los números de Fibonacci con la longitud que necesites. Devolverá una sencilla Tupla. He - [JavaScript loading hasta que las imágenes esten cargadas o descargadas](https://andros.dev/blog/3cd8ed15/javascript-loading-hasta-que-las-imagenes-esten-cargadas-o-descargadas/): Dejar ver como cargan las imágenes de un sitio web no es lo más elegante, sobre todo si queremos dar una buena impresión con una animación o efecto. P - [Ejecutar Gulp en Docker](https://andros.dev/blog/ce5d1385/ejecutar-gulp-en-docker/): Trabajar con Gulp automatiza tareas repetitivas en el desarrollo, y Docker facilita los procesos complejos en el desarrollo: ¡tenemos un match! Si tra - [Como usar kebab-case, camelCase, PascalCase o snake_case](https://andros.dev/blog/5d73a3f4/como-usar-kebab-case-camelcase-pascalcase-o-snake_case/): Las variables no deben llevar espacios, ya que rompe la sintaxis del lenguaje. Por ello existe, casi desde el origen de la informática, técnicas para - [Mantener aspecto cuadrado de imagen o elemento](https://andros.dev/blog/ddd27407/mantener-aspecto-cuadrado-de-imagen-o-elemento/): Cuando queremos dar una proporción, o una relación de aspecto, de una imagen o un elemento no podemos usar CSS porque lamentablemente no todos los nav - [Script en Python para generar DNI aleatorio](https://andros.dev/blog/63e0460a/script-en-python-para-generar-dni-aleatorio/): Cuando realizo testing, o debo generar mucha información falsa para rellenar una base de datos, me encuentro con la necesidad de crear DNIs españoles - [JavaScript cambiar anchura de un elemento HTML con el ratón](https://andros.dev/blog/a64baadf/javascript-cambiar-anchura-de-un-elemento-html-con-el-raton/): Para modificar la anchura de cualquier elemento en con cursor del ratón, o por medio de un dedo y una pantalla touch, disponemos de una opción en CSS - [Con CSS oscurecer imagen de fondo](https://andros.dev/blog/0faa6b09/con-css-oscurecer-imagen-de-fondo/): En algunos diseños necesitamos colocar una imagen de fondo que posee un mal contraste con los textos provocando que sean apenas legibles, como el sigu - [Actualizar de Debian 10 (buster) a Debian 11 (bullseye)](https://andros.dev/blog/168bc574/actualizar-de-debian-10-buster-a-debian-11-bullseye/): Con la nueva versión estable de Debian toca actualizar de Debian 10 (buster) a Debian 11 (bullseye) para disponer de las últimas versiones del softwar - [Importar CSV a SQLite](https://andros.dev/blog/5fc4c35d/importar-csv-a-sqlite/): Convertir un CSV, o una tabla en un Excel, es realmente sencillo y rápido de convertir en SQLite; y en consecuente en SQL. En el siguiente tutorial vo - [¿Cual es el mejor Framework CSS? 2022](https://andros.dev/blog/3b2ea188/cual-es-el-mejor-framework-css-2022/): Cuando adquieres experiencia construyendo varios sitios web, y tienes libertad de elegir tus herramientas, acabas buscando un conjunto de herramientas - [Carousel en CSS con Mandatory y diapositivas en bloques de HTML](https://andros.dev/blog/d9ac2990/carousel-en-css-con-mandatory-y-diapositivas-en-bloques-de-html/): En algunas ocasiones necesitamos que cada diapositiva tenga HTML, en lugar de ser únicamente una imagen. Queremos añadir textos, títulos, etc. Es rela - [¿Ser Freelance o trabajar para una empresa?](https://andros.dev/blog/853e00ab/ser-freelance-o-trabajar-para-una-empresa/): Una vez terminado tus estudios, con un lenguaje de programación debajo del brazo que hablas como si fuera tu lengua materna, con unos conocimientos bi - [Debian en Rolling Release o Testing](https://andros.dev/blog/d5052ef8/debian-en-rolling-release-o-testing/): Muchos no saben que puedes convertir Debian en una distribución Rolling Release, o permanecer en una rama de actualizaciones con paquetes actualizados - [Nombres de los símbolos en programación](https://andros.dev/blog/c5c9286d/nombres-de-los-simbolos-en-programacion/): Cuando programamos nos damos cuenta de la magnitud de símbolos que existen en el teclado. Muchos de ellos desconocemos su nombre porque no lo utilizam - [Comisiones cuando vendes en Apple Store](https://andros.dev/blog/8bfa89f6/comisiones-cuando-vendes-en-apple-store/): ¿Quieres vender en la Apple Store? Lo siento pero tenemos que hablar. Cuando decides poner a la venta algún elemento dentro de un App no todas las gan - [Django ordenar ignorando los acentos](https://andros.dev/blog/ea1d2317/django-ordenar-ignorando-los-acentos/): En caso que intentes ordenar una consulta de la base de datos y no uses PosgreSQL como base de datos principal te vas a encontrar un pequeño problema: - [Tutorial rápido de Twing para PHP](https://andros.dev/blog/61c0c2ec/tutorial-rapido-de-twing-para-php/): Trabajar con un motor de plantillas en PHP simplifica la labor de concadenar variables en ficheros con mucho texto, como puede ser un html. Cualquier - [Cómo cargar variables de entorno para un Back-End](https://andros.dev/blog/1cb03238/como-cargar-variables-de-entorno-para-un-back-end/): Una buena práctica es no dejar secretos, como contraseñas o Tokens, dentro del código. Y ni mencionar el peligro que conlleva subirlo a un repositorio - [Comandos esenciales de un Full Stack en Linux](https://andros.dev/blog/cd2e4c05/comandos-esenciales-de-un-full-stack-en-linux/): Si quieres ser un buen desarrollador Web, o simplemente un usuario de Linux competente, defenderte con el terminal es básico. Por suerte gran parte de - [¿Qué hacer después de instalar Debian en un VPS o servidor?](https://andros.dev/blog/d9cd4509/que-hacer-despues-de-instalar-debian-en-un-vps-o-servidor/): Estos son todos los pasos que realizo cuando creo un VPS o servidor en Debian. A lo largo del tiempo he ido añadiendo puntos, modificando y quitando e - [Comandos para comprimir y descomprimir](https://andros.dev/blog/e90ecaae/comandos-para-comprimir-y-descomprimir/): Dentro de Linux y MacOS disponemos de una herramientas preinstalada que es fantásticas para comprimir y descomprimir cualquier tipo de archivo: fotos, - [Cómo suavizar un scroll](https://andros.dev/blog/0edcb3be/como-suavizar-un-scroll/): Si queremos que al pulsar en un hipervínculo, o ancla, se desplace de manera suave y lenta, en lugar ser instantáneo, podemos optar por usar algunos d - [HTML sobre WebSockets](https://andros.dev/blog/ced7960b/html-sobre-websockets/): La forma tradicional de conseguir una SPA (Single-page Application) es dividir las responsabilidades, el Back-End sirve la información y el Front-End - [Ejemplo JavaScript cartel Cookies](https://andros.dev/blog/13699669/ejemplo-javascript-cartel-cookies/): Si vas a diseñar una página web donde posiblemente entrarán navegantes europeos, y quieres usar Cookies, no te quedará otra que avisar a tus usuarios - [Javascript ejecutar cuando una etiqueta sea visible](https://andros.dev/blog/280de801/javascript-ejecutar-cuando-una-etiqueta-sea-visible/): Si quieres lanzar una función de JavaScript cuando se muestre una etiqueta de HTML... ¡Estas de suerte! Con el nuevo API Observables evitarás cálculos - [Minimalismo digital para el escritorio con 710](https://andros.dev/blog/3fe2e5d9/minimalismo-digital-para-el-escritorio-con-710/): Hay una serie de pautas llamadas minimalismo digital que intentan guiar en un consumo de dispositivos eficiente eliminando aplicaciones innecesarias. - [Breve introducción a la programación funcional en Javascript](https://andros.dev/blog/18eab223/breve-introduccion-a-la-programacion-funcional-en-javascript/): No voy a realizar una extensa guía de las equivalencias o un tutorial que enseñe programación funcional, para ello puedes leer mi otro artículo ¿Qué e - [Emacs esenciales - Cheat Sheet básico](https://andros.dev/blog/c6e36115/emacs-esenciales-cheat-sheet-basico/): A continuación puedes ojear mis apuntes para usar Emacs vainilla, sin ninguna modificación en su configuración o alteración con plugins: comandos bási - [Tutorial en Django para hacer un Chat asincrono y salas](https://andros.dev/blog/bc22c1ca/tutorial-en-django-para-hacer-un-chat-asincrono-y-salas/): A diferencia que AJAX, el protocolo WebSocket proporciona una comunicación bidireccional entre el servidor y el cliente. Podemos intercambiar informac - [Tema oscuro con puro Sass](https://andros.dev/blog/155501ea/tema-oscuro-con-puro-sass/): Si queremos intercambiar diferentes temas en una web, como puede ser por el famoso tema oscuro (dark theme), nos encontramos una limitación de estruct - [Spacemacs forma correcta de instalar](https://andros.dev/blog/5a4013d2/spacemacs-forma-correcta-de-instalar/): Uno de los primeros errores que cometí al trabajar con Clojure fue Spacemacs, más concretamente al seguir las instrucciones de instalación que nos enc - [Instalar Ruby](https://andros.dev/blog/c427c711/instalar-ruby/): A la hora de gestionar Ruby suele ser problemático instalar librerías (gemas) cuando estamos trabajando con permisos de usuario. Por mucho que nos sed - [Usar Clojure con MongoDB](https://andros.dev/blog/fc1bb4a0/usar-clojure-con-mongodb/): MongoDB es una base de datos realmente rápida y bien adaptada a los tiempos que corren. No solo usa JSON como parte de su sintáxis, sino que aporta un - [Introducción a la programación funcional en Python](https://andros.dev/blog/2b4ede16/introduccion-a-la-programacion-funcional-en-python/): Desde hace unos años se ha vuelto a poner de moda trabajar con programación funcional, como si las nuevas generaciones hubieran re-descubierto las ven - [BSD vs Linux en escritorio](https://andros.dev/blog/cec5009a/bsd-vs-linux-en-escritorio/): Tanto los sistemas BSD como Linux son realmente excepcionales. Poseen muchas características en común, solo hay que utilizar el terminal para encontra - [WordPress script en Bash para hacer copia de seguridad](https://andros.dev/blog/f7fb560f/wordpress-script-en-bash-para-hacer-copia-de-seguridad/): Cuando deseamos crear un Backup en WordPress solemos tomar el camino fácil, buscando un plugin famoso que automatice la tarea: error. Debes tener cuid - [¡Deja de usar Cordova! Actualizate a Capacitor](https://andros.dev/blog/5ee15184/deja-de-usar-cordova-actualizate-a-capacitor/): Cuando hablamos de crear un APP híbrida nos referimos a realizar una aplicación para smartphones (iOS y Android) pero usando tecnología Web (HTML, CSS - [Gitlab despliegue automatico con Django](https://andros.dev/blog/efb28643/gitlab-despliegue-automatico-con-django/): Los sistemas CI/CD (continuous integration y continuous delivery o continuous deployment) son cómodos para un desarrollo, cuando se realiza un commit - [WordPress añadir paginador en plantilla](https://andros.dev/blog/ed17ce98/wordpress-anadir-paginador-en-plantilla/): En el siguiente ejemplo muestro como listar un post type y añadir un paginador para navegar por sus resultados. No es necesario comprender toda la lóg - [WordPress configurar Apache o Nginx en multisitio](https://andros.dev/blog/b82d4cf7/wordpress-configurar-apache-o-nginx-en-multisitio/): Para aquellos que deban montar un WordPress con multisitio voy a dejar un rápido tutorial para activar y configurarlo en los 2 servidores web más famo - [Tutorial Caddy, un servidor web con SSL incluido](https://andros.dev/blog/22b4aadc/tutorial-caddy-un-servidor-web-con-ssl-incluido/): Si eres un Diseñador Web estarás en la constante necesidad de utilizar un servidor web, un software esencial para que los visitantes puedan ver tus si - [Qué es Tadam, el nuevo Clojure Web Framework](https://andros.dev/blog/eb0e470b/que-es-tadam-el-nuevo-clojure-web-framework/): Clojure es un lenguaje de programación funcional realmente potente, no solo moderniza Lisp para acercarlo al siglo XXI sino aporta ideas muy interesan - [Lorem ipsum en el terminal sin instalar nada](https://andros.dev/blog/fcae92ce/lorem-ipsum-en-el-terminal-sin-instalar-nada/): Con el siguiente truco podrás obtener o generar un texto Lorem ipsum desde el terminal sin la necesidad de instalar ningún programa, solo usando las h - [Textarea crezca con el contenido solo CSS](https://andros.dev/blog/a1677118/textarea-crezca-con-el-contenido-solo-css/): Con el nuevo estándar de HTML5 podemos alcanzar lugares que antes era impensables o territorio de Javascript. A día de hoy, no hay nada nativo para co - [Los mejores editores en Diseño Web](https://andros.dev/blog/56952647/los-mejores-editores-en-diseno-web/): El desarrollo web es una profesión relativamente nueva, con apenas un par de décadas a sus espaldas. No obstante sus herramientas no han parado de cre - [¿Cómo hacer un proyecto Opensource de éxito?](https://andros.dev/blog/bb89786d/como-hacer-un-proyecto-opensource-de-exito/): Realizar un proyecto Opensource no es picar código y subirlo a un repositorio, a eso se le llama copia de seguridad. Si ya es complejo realizar softwa - [WordPress ejemplo paginador con VueJS y WP REST API](https://andros.dev/blog/fc5162df/wordpress-ejemplo-paginador-con-vuejs-y-wp-rest-api/): En el siguiente ejemplo vamos a realizar un paginador en Javascript para WordPress a través de WP REST API, solucionando el problema de obtener más ar - [VueJS paginador con filtro](https://andros.dev/blog/076691b6/vuejs-paginador-con-filtro/): Después de realizar un sencillo paginador en VueJS quería subir un nivel de complejidad, añadir la característica de poder filtrar resultados. En este - [Javascript cuenta atrás o contador regresivo](https://andros.dev/blog/e23dc2b7/javascript-cuenta-atras-o-contador-regresivo/): En el siguiente ejemplo comparto en Javascript una cuenta atrás o un contador regresivo, mostrando un tiempo que retroceda dinámicamente con: días, ho - [Botón on/off o switch en HTML y CSS](https://andros.dev/blog/ca2879b5/boton-onoff-o-switch-en-html-y-css/): Con la llegada de los dispositivos móviles se han hecho muy populares el uso de botones con dos opciones, también llamadas botones on/off o switch. Un - [Javascript y Typescript, ordenar array con algoritmo por burbuja](https://andros.dev/blog/f139402e/javascript-y-typescript-ordenar-array-con-algoritmo-por-burbuja/): Por diferentes razones la funcion sort() de Javascript no funciona como debería con números, por ello debemos usar algún algoritmo sencillo que nos ay - [Typescript tutorial rápido](https://andros.dev/blog/0c6c9423/typescript-tutorial-rapido/): Trabajar con Javascript implica una gran cantidad de ventajas, como la facilidad a la hora de desarrollar por su plasticidad o su ecosistema presente - [Typescript validar formulario](https://andros.dev/blog/11c599ff/typescript-validar-formulario/): Para aquellos que se encuentran aprendiendo Typescript con el objetivo de mejorar la calidad de su Javascript, o son meros curiosos, voy a dejar un ej - [Plantilla HTML5 para empezar una página Web](https://andros.dev/blog/97935a92/plantilla-html5-para-empezar-una-pagina-web/): Cuando inicias un proyecto web, por muy pequeña que sea la página, se dedica demasiado tiempo a encontrar la estructura mínima. Por ello comparto una - [Javascript generar número muy aleatorio y seguro](https://andros.dev/blog/4d86d081/javascript-generar-numero-muy-aleatorio-y-seguro/): Con la ayuda del API Web Cryptography podemos realizar operaciones de criptografía como generar un Hash, firmas, verificaciones, encriptación y desenc - [Javascript nombre del mes en castellano](https://andros.dev/blog/0056577b/javascript-nombre-del-mes-en-castellano/): En el ejemplo vamos a obtener el nombre del mes en español en una sola línea, sin complicaciones o arrays complejos. Además podríamos cambiar el idiom - [WordPress como hacer un tema o página estática multilenguaje](https://andros.dev/blog/a30669b2/wordpress-como-hacer-un-tema-o-pagina-estatica-multilenguaje/): En el siguiente tutorial vamos a hacer que una plantilla a medida, o página estática, de WordPress sea multidioma. Aprenderemos a utilizar un sistema - [Estudio sobre el uso real de Wordpress 2019](https://andros.dev/blog/c0d2405f/estudio-sobre-el-uso-real-de-wordpress-2019/): No hace mucho leí en un blog que el uso de WordPress superaba el 30%, pregunté ¿eso era cierto? Por ello seguí la fuente que mencionaba, la sorpresa f - [Cómo configurar Thunderbird con lo básico para trabajar](https://andros.dev/blog/2c1d2d9b/como-configurar-thunderbird-con-lo-basico-para-trabajar/): El correo electrónico es una herramientas que llevamos décadas utilizando y forma parte de nuestro día a día, en ciertos servicios es obligatorio como - [Instalar PostGIS con PostgreSQL en Mac OS X](https://andros.dev/blog/77287ef8/instalar-postgis-con-postgresql-en-mac-os-x/): PostGIS es una extensión de PostgreSQL que añade capacidades geográficas: tipos de datos espaciales, indicices espaciales y funciones propias. A pesar - [Instalar PostgreSQL en Mac OS X](https://andros.dev/blog/b44bd9ee/instalar-postgresql-en-mac-os-x/): Con el siguiente tutorial instalarás, configurarás y ejecutarás PostgreSQL en tu ordenador Mac OS X. Esta orientado a trabajar en un entorno de prueba - [Javascript recortar y previsualizar imagen](https://andros.dev/blog/75787438/javascript-recortar-y-previsualizar-imagen/): No siempre vamos a necesitar adjuntar una imagen en su totalidad, sería deseable facilitar la tarea al usuario antes de que pueda publicarla o subirla - [Clojure servidor web básico](https://andros.dev/blog/5fc102e0/clojure-servidor-web-basico/): Clojure es un dialecto de Lisp actualizado, robusto con más de 12 años, que se adapta como un guante al desarrollo web. En el Front-End podemos trabaj - [¿Qué es la programación funcional y por qué es tan especial?](https://andros.dev/blog/748183dd/que-es-la-programacion-funcional-y-por-que-es-tan-especial/): Cuando activas tu modo programador y picas la primera línea de código en el proyecto, aunque no lo sepas, te vas a convertir en arquitecto de software - [¿Cómo hacer un efecto cargando o loading moderno para mi web?](https://andros.dev/blog/59505f85/como-hacer-un-efecto-cargando-o-loading-moderno-para-mi-web/): ¿Quién no ha tenido problemas intentando que el sitio no se viera mientras se cargaba el contenido? Eso mismo ocurrió en mi última web. El diseño pose - [Optimizar Google Fonts para el español](https://andros.dev/blog/366c9a0c/optimizar-google-fonts-para-el-espanol/): El peso final de las fuentes son bastante molestas cuando empezamos a acumular. Os voy a explicar mi truco personal para reducir el tamaño total hacie - [PHP ejemplo sencillo de cartel o aviso de Cookies](https://andros.dev/blog/16378b17/php-ejemplo-sencillo-de-cartel-o-aviso-de-cookies/): Desde que se aprobó el apreciado artículo 22 de la Ley 34/2002, la ley de Cookies para los amigos, en Europa estamos obligados a notificar al usuario - [¿Cual es el mejor VPS del 2019?](https://andros.dev/blog/0a875dbc/cual-es-el-mejor-vps-del-2019/): Si estas trabajando con un lenguaje de programación orientado a Back-End (como puede ser Python, Ruby, Java, Go, Node...) necesitarás desplegarlo en a - [Cómo se hace en CSS un bocadillo de cómic con flecha o un triángulo](https://andros.dev/blog/a70b0986/como-se-hace-en-css-un-bocadillo-de-comic-con-flecha-o-un-triangulo/): Los bocadillos de cómic son fantásticos para mostrar un mensaje de ayuda, un aviso cuando se produce un problema o presentar un tutorial ameno. Son ll - [Galeria CSS Grid totalmente responsive al estilo Pinterest o Masonry](https://andros.dev/blog/86aae398/galeria-css-grid-totalmente-responsive-al-estilo-pinterest-o-masonry/): Podría enumerar un sin fin de posibilidades para ordenar y navegar entre varias imágenes, pero nos vamos a centrar en una de las más bonitas y comple - [Página multidioma con solo CSS3](https://andros.dev/blog/0b4e5eff/pagina-multidioma-con-solo-css3/): Para realizar una página multidioma, una web en varios idiomas, necesitas un lenguaje de programación de Back-End (como puede ser PHP, Python o Ruby) - [CSS valoración de estrellas animado](https://andros.dev/blog/2d3961c3/css-valoracion-de-estrellas-animado/): No nos damos cuenta del potencial de CSS3 hasta que construimos animaciones que parece obligatorio el uso de Javascript. Una de las herramientas que - [Dibujar usando el ratón o el dedo con HTML](https://andros.dev/blog/512ba7aa/dibujar-usando-el-raton-o-el-dedo-con-html/): En esta ocasión he querido compartir un script de Javascript para dibujar con el ratón o el dedo, al más estilo Paint (salvando las distancias). Simul - [12 consejos para ganar la confianza de un cliente que quiere un Diseño Web](https://andros.dev/blog/3b128d8d/12-consejos-para-ganar-la-confianza-de-un-cliente-que-quiere-un-diseno-web/): 1. Pagina web Sería extraño estar en un despacho de un carpintero con todos los muebles de metal o plástico, pues imagina meditar si contratar a un Di - [Ahorcado en Javascript ES6 comentado](https://andros.dev/blog/a69f9119/ahorcado-en-javascript-es6-comentado/): En apenas 60 líneas de Javascript, sin contar los comentarios o lodash, tendremos un juego perfectamente funcional y aleatorio del Ahorcado (también c - [PHP 7.3 ejemplo de validación de formulario](https://andros.dev/blog/268ca505/php-73-ejemplo-de-validacion-de-formulario/): Dejo un ejemplo sencillo de como validar con PHP 7 usando una sintaxis moderna y siguiendo las directrices de la guía oficial: tipos en las funciones, - [Charla sobre Python](https://andros.dev/blog/1a259042/charla-sobre-python/): {: .medium} En el episodio 69 de República Web, Podcast dirigido y escrito por Javier Archeni (@javierarcheni), he tenido el placer de ser invitado p - [WordPress, generación WP contra Viejos lobos](https://andros.dev/blog/ca8efef8/wordpress-generacion-wp-contra-viejos-lobos/): Dentro del ecosistema de WordPress nos podemos encontrar 2 perfiles predominantes: aquellos que lo adoran y aquellos que lo repudian. Una lucha sin fi - [Qué aporta Python para el desarrollo web](https://andros.dev/blog/ed01e547/que-aporta-python-para-el-desarrollo-web/): Python es un lenguaje sencillo y rápido de aprender. Su sintaxis es parecida a escribir cualquier texto en inglés, pero con la potencia de sus princip - [Las 12 preguntas obligatorias al encargar una página web](https://andros.dev/blog/53a7f03b/las-12-preguntas-obligatorias-al-encargar-una-pagina-web/): No es trivial la situación que te conduce a encargar una web. Es el primer paso para un gran proyecto: un negocio nuevo, una idea prodigiosa que decid - [VueJS vs JQuery](https://andros.dev/blog/8c5e0b33/vuejs-vs-jquery/): El origen de este artículo es oponerse, un poco, a la tendencia que hay ahora de "cambiar JQuery por VueJS". Sus capacidades y objetivos son diferente - [CSS checkbox y radios personalizados](https://andros.dev/blog/844407c8/css-checkbox-y-radios-personalizados/): No hay diseñador web que acabe agotado de personalizar los formularios. Son complejos y llenos de sutilezas que debes conocer. Y por si no fuera poco - [Como incluir JQuery en Vue-cli](https://andros.dev/blog/96f89235/como-incluir-jquery-en-vue-cli/): Con VueJS tenemos casi cualquier tipo de manipulación que necesitemos dentro de nuestro HTML o necesidades de renderizado. Desde los eventos pasando a - [Formulario de contacto en PHP cumpliendo la ley GDPR](https://andros.dev/blog/c0cfca34/formulario-de-contacto-en-php-cumpliendo-la-ley-gdpr/): Con la nueva normativa Europea es obligatorio realizar cambios en nuestras páginas web o de clientes. Uno de ellos regula la manera en que informamos - [VueJS ejemplo de CRUD sencillo](https://andros.dev/blog/c1e2de9d/vuejs-ejemplo-de-crud-sencillo/): VueJS es una herramienta fantástica para un rápido desarrollo. Te permite ahorrar mucho tiempo gracias a su magnífico renderizado de HTML. Una evoluci - [Menú sencillo y profesional con Flex](https://andros.dev/blog/63f85261/menu-sencillo-y-profesional-con-flex/): La estructura para realizar un menú moderno en web ha evolucionado. Debemos usar todo el potencial de HTML5 con sus etiquetas semánticas y CSS3 con su - [¿Es mejor Bootstrap o Bulma?](https://andros.dev/blog/71bd1943/es-mejor-bootstrap-o-bulma/): Los Diseñadores Web tenemos suerte de tener tantos, y tan buenos, Frameworks CSS con los que trabajar. Y entre todos ellos Bootstrap y Bulma son los q - [Javascript comprobar DNI o NIF](https://andros.dev/blog/13aa67ea/javascript-comprobar-dni-o-nif/): Después de usarlo en un proyecto, me gustaría compartir el código en Javascript para comprobar si un DNI es válido. También me he animado porque no es - [JavaScript ejemplo de carrito de compra](https://andros.dev/blog/65a35ab2/javascript-ejemplo-de-carrito-de-compra/): JavaScript es una tecnología básica en la construcción de sitios web. Puede ser usanda simplemente para añadir algunos efectos visuales, funcionalidad - [Diferencias entre Neovim y Vim](https://andros.dev/blog/3a8bae2f/diferencias-entre-neovim-y-vim/): Cuando hablamos de un gran editor de texto libre, siempre habrá alguien que levante la mano para hablar de Vim. Con casi 30 años de experiencias, y ce - [Javascript carousel sencillo con controles y autoreproducción](https://andros.dev/blog/4e9c1536/javascript-carousel-sencillo-con-controles-y-autoreproduccion/): Muchas veces queremos matar moscas a cañonazos. Gastamos energías buscando y configurando diferentes plugins para hacer una tarea en Javascript que se - [6 libros que recomiendo para Front-Ends y Diseñadores Web](https://andros.dev/blog/a16b07eb/6-libros-que-recomiendo-para-front-ends-y-disenadores-web/): 1 - HTML & Css: Design and Build Websites (Jon Duckett) Puede ser que seas el mejor con HTML5, Responsive, Flex y Grid... pero no comprenderás las ba - [Wallaviso, el servicio de avisos para Wallapop, se vuelve OpenSource](https://andros.dev/blog/85aa6790/wallaviso-el-servicio-de-avisos-para-wallapop-se-vuelve-opensource/): TL;DR Después de un año de desarrollo he liberado la plataforma para hacerla software libre. No habrá mantenimiento por mi parte, lo siento. Ahora la - [Los VPN gratuitos son peligrosos](https://andros.dev/blog/75da352d/los-vpn-gratuitos-son-peligrosos/): No hace mucho la principal fuente de ingresos de la web era la publicidad. Si un sitio tenías muchas visitas, lo más serio era encontrar un patrocinad - [Frontend, no te dejes seducir por el futuro](https://andros.dev/blog/b945e0f6/frontend-no-te-dejes-seducir-por-el-futuro/): Nos dejamos seducir por el futuro sin tener en cuenta que existe gente en el pasado. A todos nos gusta utilizar el último Framework, con el último len - [Tutorial Flask para crear un API REST con VueJS](https://andros.dev/blog/f079b0de/tutorial-flask-para-crear-un-api-rest-con-vuejs/): En el siguiente tutorial con Flask vamos a construir un API REST completa paso a paso en 18 sencillos temas. Aprenderemos a trabajar con Flask, a real - [Typescript importa tus modulos](https://andros.dev/blog/69de42cc/typescript-importa-tus-modulos/): Pongamos el caso que yo estoy trabajando en un documento Typescript, y necesito usar una variable o función de otro documento. ¿Cómo se hace? Importan - [Wordpress no es una opción profesional](https://andros.dev/blog/80604bc0/wordpress-no-es-una-opcion-profesional/): Cuando una profesión, como es ser diseño web, es opaco para la gran parte de la población es comprensible que sea infravalorada. Tampoco ayuda la sens - [Ejecutar Javascript en una versión de Safari](https://andros.dev/blog/b3b121e5/ejecutar-javascript-en-una-version-de-safari/): No encontrado nada parecido en foros, por lo que comparto mi solución. Es un pequeño script en Javascript para ejecutar alguna acción si estamos en un - [Bootstrap 4 como ocultar o mostrar en smartphone](https://andros.dev/blog/77be4606/bootstrap-4-como-ocultar-o-mostrar-en-smartphone/): A continuación dejo una pequeña ayuda con Bootstrap 4 para mostrar u ocultar ciertas secciones de una web. Hay ocasiones que necesitamos eliminar algú - [Cual es el mejor hosting para 2018](https://andros.dev/blog/bc51c4f0/cual-es-el-mejor-hosting-para-2018/): Si ya has terminado tu página web, ahora toca subirla a un hosting. Es el destino de cualquier obra en HTML. Pero... ¿A donde? Existe una gran cantida - [3 trucos para mejorar la carga de tus imagenes](https://andros.dev/blog/a92b98b3/3-trucos-para-mejorar-la-carga-de-tus-imagenes/): No descubro nada nuevo si comento en voz alta que nuestros sitios web tienen que pesar lo mínimo posible. Mejorará la velocidad para el usuario, nos a - [Inicio con Flask para realizar un API Rest](https://andros.dev/blog/916b8b40/inicio-con-flask-para-realizar-un-api-rest/): Antes de realizar tu API Rest con Flask, o con Python, debes conocer que bibliotecas existen y como debes estructurar tus rutas. Por supuesto, hay muc - [Affinity Photo, un editor de imágenes para Diseñadores Web](https://andros.dev/blog/1f0bbf26/affinity-photo-un-editor-de-imagenes-para-disenadores-web/): Cuando queremos optimizar una imagen, redimensionar, recortar, cambiar el balance de blancos, optimizar su tamaño… y un sin fin de pequeñas mejoras, a - [Migrate notes from Standard Notes to Joplin](https://andros.dev/blog/49eb5b06/migrate-notes-from-standard-notes-to-joplin/): Spanish I recently decided to make the leap from one note-taking software to another. In this case from Standard Notes to one with a better search eng - [Migrar notas desde Standard Notes a Joplin o Evernote](https://andros.dev/blog/96cd5df6/migrar-notas-desde-standard-notes-a-joplin-o-evernote/): En inglés Hace muy poco decidí dar el salto de un software para tomar notas a otro. En este caso de Standard Notes a uno con un mejor motor de busqued - [Resaltar sintaxis con Less en OSX](https://andros.dev/blog/3ed37359/resaltar-sintaxis-con-less-en-osx/): El comando less te permite mirar el contenido de un archivo plano. De forma rápida y sin tener que abrir editores de texto. Además, si sabes moverte c - [Analizando 1 millón de sitios para saber el autentico uso de Wordpress](https://andros.dev/blog/62f39349/analizando-1-millon-de-sitios-para-saber-el-autentico-uso-de-wordpress/): Cada cierto tiempo suelo escuchar que el porcentaje de uso de WordPress ha aumentado. La utilización en pequeñas y medianas empresas es indiscutible. - [¿Qué debe saber un Diseñador Web en el 2018?](https://andros.dev/blog/1988f7db/que-debe-saber-un-disenador-web-en-el-2018/): No debemos olvidar los orígenes del Diseñador Web. Al principio se "maquetaba" sin CSS. Con etiquetas y atributos especiales para dar algo de color. D - [Javascript coger u obtener valores por get](https://andros.dev/blog/45e9e342/javascript-coger-u-obtener-valores-por-get/): En los siguientes ejemplos vamos a ver como capturar un GET de la url de la página con Javascript. Además, también podremos comprobar si existe. Dos f - [Tutorial Flask para crear un chat con WebSockets y VueJS](https://andros.dev/blog/21d2c13e/tutorial-flask-para-crear-un-chat-con-websockets-y-vuejs/): Cuando queremos realizar un chat como toca, se nos debería pasar por la cabeza usar WebSockets. Perminte infinidad de conexiones, es asincrono, utiliz - [Botón para volver arriba con scroll animado o suave sin JQuery](https://andros.dev/blog/4295f77f/boton-para-volver-arriba-con-scroll-animado-o-suave-sin-jquery/): Cuanto más largas son nuestras páginas, más necesario se nos hace la necesidad de volver a arriba. Y nada más sencillo que un botón que al ser pulsado - [Flask desplagar con NGINX y UWSGI en Ubuntu 17.10 y Debian 9](https://andros.dev/blog/5e24fd27/flask-desplagar-con-nginx-y-uwsgi-en-ubuntu-1710-y-debian-9/): En el siguiente tutorial vamos a ver como desplegar Flask con Nginx y UWsgi tanto en Ubuntu 17.10 como en Debian 9. Es un procedimiento que he probado - [Menú para smartphone con HTML5 y CSS3](https://andros.dev/blog/06ca4c67/menu-para-smartphone-con-html5-y-css3/): Según nos vamos adaptado a los móviles, nos resulta más cómodo tener la misma interfaz en otros dispositivos. Insconscientemente buscamos una homogene - [Flask SQLAlchemy guia básica](https://andros.dev/blog/8cd68e39/flask-sqlalchemy-guia-basica/): Tengo una memoria terrible, por lo que me toca o tomar muchos apuntes o cambiar de profesión. Y por ahora estoy escribiendo mucho. A continuación dejo - [Macro en Flask para generar formularios con Bootstrap 4](https://andros.dev/blog/7e0b599e/macro-en-flask-para-generar-formularios-con-bootstrap-4/): El nuevo Bootstrap 4 viene cargado de actualizaciones. Lo cual significa que nos toca actualizar nuestros scripts en Python. En el siguiente ejemplo p - [3 archivos txt que no pueden faltar en tu web](https://andros.dev/blog/1f45e394/3-archivos-txt-que-no-pueden-faltar-en-tu-web/): No solo de HTML y CSS vive la web. Otros archivos planos son necesarios para mejorar nuestro posicionamiento o dar instrucciones a los visitantes. Est - [Juego del 7 y medio en Python](https://andros.dev/blog/a8efead1/juego-del-7-y-medio-en-python/): Con Python se puede realizar de forma muy sencilla. ``` python Bibliotecas import random Variables LIMITE = 7.5 baraja = [1, 2, 3, 4, 5, 6, 7, 0.5, 0. - [¿Cuales son las tendencias en el desarrollo web con Python?](https://andros.dev/blog/1e1f5e00/cuales-son-las-tendencias-en-el-desarrollo-web-con-python/): Ya ha terminado una de las reuniones anuales más importantes para programadores en España: PyConES17 (Coferencia de Python en España 2017) que se ha c - [Cómo usar Wasabi con awscli de amazon S3](https://andros.dev/blog/8aa0c579/como-usar-wasabi-con-awscli-de-amazon-s3/): Amazon S3 es una herramienta excelente para almacenar cualquier tipo de archivo. Desde imágenes hasta los elementos más pesados de nuestro sitio web o - [Python vs Node.js en desarrollo web](https://andros.dev/blog/1cb28e77/python-vs-nodejs-en-desarrollo-web/): En el momento de realizar una página web dinámica tendría que venirnos a la cabeza diversas opciones: Python, Node.js, PHP, Java, Ruby y Go. Como míni - [Django - Como añadir la clase active en tu menu automáticamente](https://andros.dev/blog/a62e4e38/django-como-anadir-la-clase-active-en-tu-menu-automaticamente/): Es bastante engorroso tener que añadir la clase active en cada página, en el enlace adecuado de tu menú. El recurso fácil de cualquier programador es - [Tutorial de flask para realizar un notificador de Wallapop](https://andros.dev/blog/97b84da7/tutorial-de-flask-para-realizar-un-notificador-de-wallapop/): El tutorial es un taller que realicé en la PyConES17. Su nombre original es Vigilante de Wallapop (Aplicación para vigilar precios en Wallapop). El có - [Truco para tener rápidamente una nueva dirección de email](https://andros.dev/blog/b15d7b4d/truco-para-tener-rapidamente-una-nueva-direccion-de-email/): Más de uno se sentirá identificado con la situación: queremos crear una segunda cuenta en un servicio o página web (spotify, netflix, facebook, twitte - [Django - Como tener la misma variable en todas las plantillas](https://andros.dev/blog/49b1af64/django-como-tener-la-misma-variable-en-todas-las-plantillas/): En alguna ocasión te preguntarás como tener la misma variable en todas las plantillas en Django. O lo que es lo mismo, poseer una variable presente en - [VueJS, paginador sencillo](https://andros.dev/blog/7268a91e/vuejs-paginador-sencillo/): En el siguiente tutorial podréis crear un sencillo paginador con VueJS 2. Una herramienda formidable para cualquier desarrollador de Frontend. Un suce - [20 plugins imprescindibles para desarrollar Django en vscode](https://andros.dev/blog/16e55c3b/20-plugins-imprescindibles-para-desarrollar-django-en-vscode/): Visual Studio Code es una gran herramienta para trabajar en cualquier lenguaje. Y en Python lo hace de maravilla. Pero si lo que queremos en centrarno - [Django - Login con Email y Contraseña](https://andros.dev/blog/d1c9f6f4/django-login-con-email-y-contrasena/): Por defecto Django solo nos deja identificarnos con el nombre de usuario (username) y la contraseña (password) . A priori práctico. Pero la realidad e - [Vim vs Visual Studio Code](https://andros.dev/blog/21a7f592/vim-vs-visual-studio-code/): A nivel de software, la herramienta más importante para un programador es un buen editor. No solo colorea tu código, sino que debe aportar una serie d - [Actualizar de Debian 8 (jessie) a Debian 9 (stretch)](https://andros.dev/blog/26cde709/actualizar-de-debian-8-jessie-a-debian-9-stretch/): Primero debemos comprobar la versión que tenemos actualmente instalada. bash cat /etc/debian_version Si es menor que 9, podemos continuar. Y lo segund - [Postproducción cuando subes una página web](https://andros.dev/blog/7847d18f/postproduccion-cuando-subes-una-pagina-web/): Cuando subimos nuestro sitio web al hosting no hemos terminado. Ni mucho menos. Aunque nuestro dominio esté pagado y tengamos el mejor hosting que nue - [Cómo estructurar una página web](https://andros.dev/blog/bb85634a/como-estructurar-una-pagina-web/): Si te has decidido por realizar una página web artesanal, o sin utilizar plantillas HTML5 o un CMS como Wordpress, quiero felicitarte. Acabas de inici - [Cómo hacer que funcione el botón de Nav de Bulma en Smartphone](https://andros.dev/blog/e23dd0bc/como-hacer-que-funcione-el-boton-de-nav-de-bulma-en-smartphone/): Bulma es un framework CSS fantástico. Pero eso no lo hace perfecto. Lamentablemente a la hora de hacer un botón de hamburguesa, o un botón para smartp - [Aplicaciones de organización para diferentes cantidades de tareas](https://andros.dev/blog/cb93b9ec/aplicaciones-de-organizacion-para-diferentes-cantidades-de-tareas/): Hay personas que tienen un talento natural para organizar las tareas a lo largo de su día. Con una eficiencia que sobrepasa la perfección. No hay máqu - [¿Cómo entregar una página web como un profesional?](https://andros.dev/blog/827c997b/como-entregar-una-pagina-web-como-un-profesional/): Hay dos maneras de entregar un proyecto: rápido o bien. Terminar con un proyecto no tiene porque ser el final de la relación con un cliente. Siempre s - [3 tutoriales para realizar menús HTML5](https://andros.dev/blog/7e341570/3-tutoriales-para-realizar-menus-html5/): Los siguiente enlaces son una compilación de tres tutoriales donde aprenderemos juntos a realizar menús en HTML5. Cada uno esta enfocado desde diferen - [Menú con hamburguesa o con botón desplegable sin Javascript](https://andros.dev/blog/33648c65/menu-con-hamburguesa-o-con-boton-desplegable-sin-javascript/): Es fácil recurrir a Javascript o a JQuery cuando queremos realizar ciertas acciones dinámicas. Como, por ejemplo, hacer un botón que muestre un menú e - [Generar contraseñas con Python 3.6](https://andros.dev/blog/7cfee096/generar-contrasenas-con-python-36/): Muchas veces me preguntan como generar contraseñas en Python de la manera más segura. Con Python 3.6 se ha añadido el módulo Secrets. De forma nativa, - [Flask mostrar mensajes de error con WTForms y Bootstrap](https://andros.dev/blog/668fdfd2/flask-mostrar-mensajes-de-error-con-wtforms-y-bootstrap/): El objetivo no es enseñarte Flask, ni WTForms, ni Bootstrap. Sino juntar estas tres tecnologías que ya conoces para realizar un formulario vistoso. En - [Como optimizar imagenes en Mac OS para web](https://andros.dev/blog/f9aeaedf/como-optimizar-imagenes-en-mac-os-para-web/): Optimizar tus imágenes mejorará la velocidad de carga, ayudará a tu SEO, y conseguirás más fluidez en smartphone. No hay razones para no hacerlo. Tal - [Entrevista con un experimentado programador en Go](https://andros.dev/blog/8a44d2a2/entrevista-con-un-experimentado-programador-en-go/): Nombre Mario Solis Repositorio público Github Ocupación Desarrollador de aplicaciones web en Go y Python Entrevista Mario Solis es un desarrollador de - [¿Cómo generar un secret key en Django?](https://andros.dev/blog/ede5a85b/como-generar-un-secret-key-en-django/): A la hora de desplegar tu web, o servicios, por medio de Django en un servidor llega el momento de generar un secret key. Y lo más complejo posible. F - [TODO en Python 3](https://andros.dev/blog/379c3db1/todo-en-python-3/): Siempre me gusta realizarme mis pequeños scripts en Python para automatizar tareas. Pero lo que más me gusta es sustituir un software que uso a diario - [Entrevista con un experimentado programador de Django](https://andros.dev/blog/ec8b3d67/entrevista-con-un-experimentado-programador-de-django/): Nombre Erick Navarro Repositorio público Github Ocupación Programador Senior, analista, y experto en Backend con Python Entrevista Erick Navarro es un - [10 pasos para hacer una web perfecta a un cliente](https://andros.dev/blog/31232fad/10-pasos-para-hacer-una-web-perfecta-a-un-cliente/): Es relativamente sencillo hacer una página web. Cuestión de práctica, dedicación y estudio. Como cualquier arte. Pero hay algo que no se suele enseñar - [Como optimizar tus imágenes para web por terminal](https://andros.dev/blog/215b1a9a/como-optimizar-tus-imagenes-para-web-por-terminal/): Cuando realizar una página web siempre hay dos elementos que son lo que más pesan: imágenes y fuentes. Si lo piensas friamente, al final toda tu web e - [Comandos básicos que debe conocer cualquier linuxero](https://andros.dev/blog/2a020150/comandos-basicos-que-debe-conocer-cualquier-linuxero/): A día de hoy, si quieres ser un buen desarrollador o simplemente un buen usuario de Linux, conocer el terminal es obligatorio. Estos comandos no son c - [Unity3D vs Love2D en el desarrollo de videojuegos](https://andros.dev/blog/77687c69/unity3d-vs-love2d-en-el-desarrollo-de-videojuegos/): Cuando deseamos realizar un juego en 2D nos damos cuenta que hay dos formas. O utilizar una biblioteca que te de la libertad absoluta, o aprender a ut - [Buenos portátiles para programar](https://andros.dev/blog/ff0cd424/buenos-portatiles-para-programar/): No siempre es fácil encontrar un ordenador para trabajar. Ya no solo debe traer con los requisitos mínimos que necesitaremos, sino que debemos tener l - [Arreglar FTP de Wordpress en Xampp](https://andros.dev/blog/603ccd2c/arreglar-ftp-de-wordpress-en-xampp/): Si instalaste Wordpress con Xampp en OSX, posiblemente tengas problemas. Al instalar te encontrarás con un texto como este. {: .medium} No se ha podid - [12 herramientas obligatorias para trabajar en equipo](https://andros.dev/blog/2c07053b/12-herramientas-obligatorias-para-trabajar-en-equipo/): A la hora de abordar un proyecto pequeño, como un portafolio o una app sin muchas funcionalidades, es relativamente fácil de llevar por una sola perso - [Apuntes para ES6](https://andros.dev/blog/2e351972/apuntes-para-es6/): Mantenerse actualizado con las últimas novedades en desarrollo web es complicado. Siempre están apareciendo nuevas versiones de todo tipo. Y cuando te - [Ejemplo de TODO en Javascript con ES6](https://andros.dev/blog/c4d18324/ejemplo-de-todo-en-javascript-con-es6/): El siguiente ejemplo es una implementación sencilla de una lista de tareas, un TODO. Realizado en pocas líneas con Javascript puro. Usando el estándar - [Pequeña introducción de Angular 2](https://andros.dev/blog/3bbe737e/pequena-introduccion-de-angular-2/): Angular 2 es un framework front-end para crear aplicaciones tipo SPA (Single-page application), es decir, nos ayuda a crear aplicaciones web de una só - [Menú desplegable con HTML5 y CSS3](https://andros.dev/blog/1a0e6353/menu-desplegable-con-html5-y-css3/): A continuación dejo un ejemplo de como realizar un menú con CSS3 usando la sintaxis de HTML5. Se utiliza el formato estándar para la estructura del HT - [Introdución a Rocket.chat](https://andros.dev/blog/323c18d4/introducion-a-rocketchat/): ¿Qué es Rocket.Chat exactamente? Cuando pensamos en crear un sistema de comunicación, es prácticamente imposible no pensar en la forma de la que lo Sl - [Django vs Flask](https://andros.dev/blog/a1995826/django-vs-flask/): Cuando desarrollas para web utilizando Python, te encuentras que existen son unos pesos pesados: Django, Pyramid, Bottle y Flask. No son los únicos, p - [De Mac a Ubuntu](https://andros.dev/blog/040d5fcc/de-mac-a-ubuntu/): Durante 3 buenos años he estado trabajando diariamente con Macbook, y por consiguiente con su sistema operativo OSX. Tengo que alabar el buen trabajo - [HTML no es programar](https://andros.dev/blog/373f0251/html-no-es-programar/): El título ya habla por si mismo: HTML no es programar. Y por lo tanto no deberías temerlo. Confundir a un diseñador web y a un programador es como met - [Django y Electron para aplicaciones multiplataforma](https://andros.dev/blog/d7dd55ab/django-y-electron-para-aplicaciones-multiplataforma/): Django esta diseñado, construido y enseñado para trabajar en un servidor. Su naturaleza es backend. Pero, aunque pareza mentira, también puede ser uti - [7 razones por las que Vim no es para programadores](https://andros.dev/blog/e132c8b5/7-razones-por-las-que-vim-no-es-para-programadores/): Vim es un maravilloso editor de texto. Posé unas cualidades que lo convierten en una navaja suiza. Tanto en servidor como en local. Su particular form - [Como generar un feed RSS/Atom con Jekyll](https://andros.dev/blog/2221ebb6/como-generar-un-feed-rssatom-con-jekyll/): Un canal RSS es una forma rápida de mantenerte actualizado. A través de un programa podrás obtener los nuevos contenidos sin la necesidad de ir direct - [¿Cual es el mejor sistema operativo para programar?](https://andros.dev/blog/990fb1d1/cual-es-el-mejor-sistema-operativo-para-programar/): Nos encontramos en una época dorada para los sistemas operativos. Existe una gran variedad y todos muy buenos. Es cierto que cada uno de ellos esta ce - [Tutorial Parte 2 Double Dragon](https://andros.dev/blog/8dd23a4b/tutorial-parte-2-double-dragon/): Continuando la anterior parte del tutorial, vamos a crear a nuestro héroe. Añadiento eventos de teclado de Love2d, colisiones para que no se salga del - [Tutorial Parte 1 Double Dragon](https://andros.dev/blog/9711d556/tutorial-parte-1-double-dragon/): Para desarrollar nuestro videojuego, y poder seguir el tutorial, asumo que tienes ciertos conocimientos de programación. Se utilizarán variable, bucle - [Jekyll vs WordPress](https://andros.dev/blog/68163238/jekyll-vs-wordpress/): El objetivo de Jekyll y de Wordpress es el mismo: gestionar un blog. Esta claro que luego se le pueden dar diferentes usos a través de plugins, pero e - [3 mejores navegadores más ligeros 2017](https://andros.dev/blog/b2560560/3-mejores-navegadores-mas-ligeros-2017/): No todos tenemos un equipo lo suficientemente potente para taner una bestia como Chrome o Firefox. Tenemos que explimir cada kb de nuestra RAM para te - [PHP vs Python en desarrollo web](https://andros.dev/blog/ece430c7/php-vs-python-en-desarrollo-web/): Actualmente, como programador web, hago proyectos en ambos lenguajes. Sinceramente sin ningún problema te puedes casar con uno de ellos. Los dos son e - [IA para ganar al Ahorcado](https://andros.dev/blog/ed3ab31a/ia-para-ganar-al-ahorcado/): Me encanta desarrollar pequeñas inteligencias artificiales. Sobretodo si es para superar a otras máquinas. En este caso quería ganar al videojuego "42 - [7 razones por lo que no nos gusta Wordpress](https://andros.dev/blog/1089bb59/7-razones-por-lo-que-no-nos-gusta-wordpress/): Wordpress no es un CMS, es EL CMS. Ayer se confirmaba que un 27,1% de los sitios web han elegido esta plataforma. Y lo sorprendente de esta estadístic - [Diseñador web una crónica a una muerte anunciada](https://andros.dev/blog/e86bc551/disenador-web-una-cronica-a-una-muerte-anunciada/): El desarrollo web ha madurado. Y las herramientas han ido a la par. El duro trabajo de diseñar una página web se ha vuelto cada vez más suave. No porq - [Vim vs Emacs vs Sublime Text en el 2017](https://andros.dev/blog/b2c8479c/vim-vs-emacs-vs-sublime-text-en-el-2017/): Durante casi un año he estado trabajando de forma real con los tres editores. Considerados por muchos los 3 mejores editores para programar. Los he us - [No importa el código, sino los resultados](https://andros.dev/blog/90ff912f/no-importa-el-codigo-sino-los-resultados/): Una de las eternas luchas que tenemos los desarrolladores Web es la elección de la herramienta perfecta. Del lenguaje mejor equilibrado. Del Framework - [Crear un menú con Flex y CSS3 Parte 2](https://andros.dev/blog/5198ce47/crear-un-menu-con-flex-y-css3-parte-2/): En esta segunda parte partimos del código de la primera parte . Cuando la pantalla sea inferior a 500px conseguiremos que se oculte el menú y se mues - [Crear un menú con Flex y CSS3 Parte 1](https://andros.dev/blog/359fe199/crear-un-menu-con-flex-y-css3-parte-1/): La forma adecuada de generar un menú correcto actual es utilizando las etiquetas de listas, las etiquetas de nav, y display Flex. A continuación dejo - [6 diferencias entre un diseñador web amateur y un profesional](https://andros.dev/blog/565daa10/6-diferencias-entre-un-disenador-web-amateur-y-un-profesional/): 1 El amateur aprende habilidades, el profesional amplia su portafolio. El patrón que suelo ver entre gente con experiencia en el sector y personas que - [Como colorear los bloques de código en Org-mode](https://andros.dev/blog/2e8f5a3c/como-colorear-los-bloques-de-codigo-en-org-mode/): Para pasar de un bloque de código en Org-mode neutro, en bruto como este: A una visualización más cómoda al ojo, coloreada (o con highlight code bloc - [¿Cual es el mejor lenguaje de programación para empezar?](https://andros.dev/blog/3d6a1b53/cual-es-el-mejor-lenguaje-de-programacion-para-empezar/): Origen de la pregunta Por regla general, los programadores somos autodidactas. A través de blogs, libros, videotutoriales o cursos intereactivos, sole - [Mi avisador de ofertas Rakuten en Python](https://andros.dev/blog/a3b7abd3/mi-avisador-de-ofertas-rakuten-en-python/): El siguiente script en Python te imprime si hay alguna oferta en Rakuten. Te muestra el título del artículo, que esta en descuento, y su enlace. Solam - [En que pienso cuando programo](https://andros.dev/blog/28c3fcb8/en-que-pienso-cuando-programo/): Cuando desarrollas una Web, un App, un API o un script; mi obsesión es que sea mantenible y esté optimizado. Mis compañeros solo piensas en la optimiz - [Propio avisador de ofertas de Wallapop](https://andros.dev/blog/e1ab6245/propio-avisador-de-ofertas-de-wallapop/): Para quien no lo conozca, Wallapop es un servicio Español para comprar articulos de segunda mano a otras personas con la App. Personalmente suelo comp - [Ahorcado en Python](https://andros.dev/blog/dedc663a/ahorcado-en-python/): A continuación dejo el juego del Ahorcado en Python realiado en clase con mis alumnos. Un perfecto ejemplo para los iniciados. Esta realizado en Pytho - [BitBar, crea tus scripts para la barra de Mac os x](https://andros.dev/blog/cfbd0439/bitbar-crea-tus-scripts-para-la-barra-de-mac-os-x/): Si trabajas con os x, y eres de los que les gusta hacer sus propios programas; estas de suerte. Un programador llamado Mat Ryer, a desarrollado un so - [Nuevo en Python 3.6: Concadenar variables con Strings](https://andros.dev/blog/baeb4d96/nuevo-en-python-36-concadenar-variables-con-strings/): Todos estamos acostumbrados a utilizar .format , pero ahora en la nueva versión podemos hacerlo más sencillo. python name = "Paco" text = f"Mi nombre - [5 bibliotecas de Python para empezar 2016](https://andros.dev/blog/0b162e54/5-bibliotecas-de-python-para-empezar-2016/): 1) Guías de Python Más que una biblioteca es una guía elemental de Python. Contiene una lista bien completa con: enlaces a las otras bibliotecas, guia - [Cine casero con Raspberry Pi](https://andros.dev/blog/d7443bb2/cine-casero-con-raspberry-pi/): Para realizar mi propio cine decidí utilizar una Raspberry Pi. Los materiales que utilicé fueron: Raspberry Pi 1, obviamente. En este caso decidí usa - [PyConES 2015](https://andros.dev/blog/dafbe049/pycones-2015/): Desde el 20 al 22 de Noviembre del 2015 se celebró la PyConES en Valencia. La PyCon es un evento de Python donde se celebran charlas y conferencias so - [JSON con las coordenadas GPS de los códigos postales de Valencia](https://andros.dev/blog/5bbb58f4/json-con-las-coordenadas-gps-de-los-codigos-postales-de-valencia/): Es un JSON con todas las coordenadas geográficas de los códigos postales en Valencia. Útil por si se quiere calcular distancias, dibujar en Google Ma - [1ª Edición de IdeFórum: Transmedia](https://andros.dev/blog/816160d7/1a-edicion-de-ideforum-transmedia/): El 22 de Octubre se estrenó IdeFórum, un evento organizado por Idecrea con el objetivo de la divulgación tecnológica. Para quién no la conozca, Idecre - [10 herramientas indispensables para un buen diseñador web](https://andros.dev/blog/2dc3bb7a/10-herramientas-indispensables-para-un-buen-disenador-web/): 1) Editor del siglo XXII No nos vale un editor de texto que funcione bien ahora, sino que lo haga también en el futuro. Debe ser cómodo para nosotros, - [¿Cuanta memoria RAM necesito?](https://andros.dev/blog/fd0fb255/cuanta-memoria-ram-necesito/): Hace mucho leí que el 85% de las personas elegían su ordenador por la apariencia. Simplemente si era bonito o no. Me parecía absurdo que la cifra fuer - [Web nativa vs Wordpress](https://andros.dev/blog/6ac8ae92/web-nativa-vs-wordpress/): En una reunión con unos clientes se comentó de hacer una tienda online personalizada. Debía tener unas singularidades muy concretas. Para más inri deb - [Django - Varias tablas unidas por claves foráneas](https://andros.dev/blog/7ad4353c/django-varias-tablas-unidas-por-claves-foraneas/): Es muy común que cuando trabajamos con una base de datos relacional acabemos teniendo muchas tablas que se relacionan unas con otras a través de clav - [5 razones para tener una página web personal](https://andros.dev/blog/94aa30df/5-razones-para-tener-una-pagina-web-personal/): Es tu tarjeta de visita. Cuando la gente quiera saber que has hecho o quien eres, lo primero que hará será buscarte en Google. Y la informaci - [¿Se puede hacer páginas webs con Raspberry Pi 2?](https://andros.dev/blog/80ef7bdd/se-puede-hacer-paginas-webs-con-raspberry-pi-2/): Para quien no lo conozca, Raspberry Pi 2 es un ordenador tan pequeño como una tarjeta de crédito de apenas unos 40 euros. Por 65 euros podrás encontra - [¿Diferencia entre Diseñador Gráfico, Diseñador Web, Programador Web y Webmaster?](https://andros.dev/blog/78dfd965/diferencia-entre-disenador-grafico-disenador-web-programador-web-y-webmaster/): Son 3 términos que se utilizan como si fueran sinónimos, pero en realidad hay un gran abismo entre ellos. El gran público cree que son las personas en - [Como dar soporte de Python en Vim](https://andros.dev/blog/cded418f/como-dar-soporte-de-python-en-vim/): Es realmente útil si necesitar activar los plugins vim-jedi o python-mode. Necesitaremos reinstalar vim indicando que al instalarlo active Python. Si - [Generar datos falsos para SQL](https://andros.dev/blog/95347f9e/generar-datos-falsos-para-sql/): En generatedata podemos encontrar una herramienta online la cual nos permite generar datos falsos para nuestra base de datos. Solo debemos elegir el p - [Aprender a ser diseñador de videojuegos](https://andros.dev/blog/d0125f05/aprender-a-ser-disenador-de-videojuegos/): ¿Quién nunca a deseado hacer videojuegos? ¿O ser diseñador de videojuegos? Pero claro, no es fácil. De hecho desde mi punto de vista me parece una de - [¿Qué software necesito para ser un Webmaster profesional?](https://andros.dev/blog/548103dc/que-software-necesito-para-ser-un-webmaster-profesional/): Según vas adquiriendo experiencia, vas teniendo nuevas necesidades. Cuando eres un diseñador web, o un programador web, tu ritmo de trabajo cada vez e - [Envíar un e-mail preguntando la dirección por Javascript](https://andros.dev/blog/b62a7eda/enviar-un-e-mail-preguntando-la-direccion-por-javascript/): A continuación he querido dejar un pequeño ejemplo de como enviar un e-mail desde el cliente de correo del usuario (Outlook, Thunderbird, Apple Mail. - [¿Qué necesito para empezar a ser un diseñador web o un programador web?](https://andros.dev/blog/de74c552/que-necesito-para-empezar-a-ser-un-disenador-web-o-un-programador-web/): Cuando termino de impartir un curso, y mi alumnado comienza ser consciente que tendrá que enfrentarse solo ante el insensible mundo, les entra pánico. - [Ejemplo de carrito en PHP con cookies](https://andros.dev/blog/5f02a9cc/ejemplo-de-carrito-en-php-con-cookies/): La página, del ejemplo, debe llamarse test.php. ``` php $value) { $sHTML .= '-> ' . $value['nombre'] . ' ' . $value['precio'] . ''; } ?> Eje - [Menú desplegable con varios niveles en JQuery](https://andros.dev/blog/6501c231/menu-desplegable-con-varios-niveles-en-jquery/): Demo Sitúate en Febrero y Semana 4. Horizontal Enero Semana 1 Semana 2 Semana 3 Febrero Semana 1 Semana 2 Semana 3 Semana 4 Lunes Martes Miercoles - [3 temas base de Wordpress en Bootstrap](https://andros.dev/blog/d5ad5839/3-temas-base-de-wordpress-en-bootstrap/): Muchos diseñadores utilizan el Framework Bootstrap, y muchos programadores el Framework de Wordpress. ¿Se puede tener las dos cosas juntas? ¿La facili - [Cómo hacer un presupuesto de una página web en Wordpress](https://andros.dev/blog/ce10fd92/como-hacer-un-presupuesto-de-una-pagina-web-en-wordpress/): El primer paso para hacer una página web a un cliente es hacer un presupuesto. Es un paso muy importante, tanto que puede marcar la diferencia entre e - [Crear un formulario de contacto en Wordpress (Contact Form 7)](https://andros.dev/blog/6d9794d8/crear-un-formulario-de-contacto-en-wordpress-contact-form-7/): En el siguiente tutorial vamos a implementar un formulario de contacto, una pieza clave en cualquier web que quiera mostrar cierta calidad. Nos da igu - [10 consejos para un diseñador web primerizo](https://andros.dev/blog/5e1f4d40/10-consejos-para-un-disenador-web-primerizo/): A continuación os dejo los consejos que doy a mis alumnos cuando tienen que hacer frente a su primera web. Más vale tener pocos botones que funcionan - [10 plugins de Sublime Text para programar](https://andros.dev/blog/16533be6/10-plugins-de-sublime-text-para-programar/): Cada cierto tiempo publico algún artículo relacionado con Sublime Text. No se debe a que me lleve una comisión bajo manga, sino que he empezado a util - [Como hacer una página web multidioma](https://andros.dev/blog/342f67ab/como-hacer-una-pagina-web-multidioma/): Cuando subimos una web inevitablemente será visible por cualquier persona con acceso a Internet. Y esto puede ser un arma de doble filo porque no tod - [Como hacer una tabulación en HTML o CSS](https://andros.dev/blog/07da2b32/como-hacer-una-tabulacion-en-html-o-css/): Es muy común la necesidad de hacer tabulación en HTML. Existen muchos trucos, pero se puede hacer de una forma sencilla con CSS. Solo necesitamos una - [12 plugins de Sublime text para un diseñador web](https://andros.dev/blog/9ea0f653/12-plugins-de-sublime-text-para-un-disenador-web/): En este blog ya se ha mencionado diversas veces a Sublime text , he incluso se incluyó en un artículo sobre editores HTML modernos para profesionales. - [2 maneras de evitar el spam sin captcha](https://andros.dev/blog/cc1efdd7/2-maneras-de-evitar-el-spam-sin-captcha/): Existen diferentes soluciones, unas de ellas son los verificadores de humanos. Tal vez te suene más si digo captcha. Es un sistemas donde tienes que i - [La primera página web de Internet](https://andros.dev/blog/c34ce4e4/la-primera-pagina-web-de-internet/): Aun se puede visitar en su sitio de origen. Link: http://info.cern.ch/hypertext/WWW/TheProject.html - [Programas para limpar la bandeja de entrada del e-mail](https://andros.dev/blog/46c2f98e/programas-para-limpar-la-bandeja-de-entrada-del-e-mail/): De vez en cuando suelo ver alguna bandeja de correo ajena. La gran mayoría suelen estar algo "desorganizadas". A veces son auténticos vertederos en n - [Mejor Linux para empezar](https://andros.dev/blog/b9a0316a/mejor-linux-para-empezar/): No hace mucho tuve una conversación con un amigo, el cual tiene un portátil. Y me dijo: Amigo: - ¿Linux es más ligero que Windows?- Yo - Emmm… sí (sup - [Reducir el ruido de hace tu ordenador.](https://andros.dev/blog/16136f08/reducir-el-ruido-de-hace-tu-ordenador/): Introducción Más de uno se sentirá identificado si digo que me paso muchas horas delante del ordenador. Y, debo reconocer, que lo más molesto de ello - [Office Web App: la versión gratuita de Office](https://andros.dev/blog/67fabb22/office-web-app-la-version-gratuita-de-office/): Introducción ¿Quien de los aquí presentes nunca se ha instalado una versión pirata del Office? Todos con mil excusas para legitimar nuestra estafa inf - [Instalar servidor NFS (crea carpetas compartidas en red)](https://andros.dev/blog/793b06c0/instalar-servidor-nfs-crea-carpetas-compartidas-en-red/): La forma más sencilla de compartir datos entre muchos usuarios, de forma online, suele ser utilizar Dropbox. Tienes una carpeta, la cual todo lo que d - [Nethogs: controlar el trafico de tu red por consola](https://andros.dev/blog/75163e9c/nethogs-controlar-el-trafico-de-tu-red-por-consola/): Nethogs es una aplicación para ver en vivo el tráfico de la red. Muy útil si tienes un servidor muy cargado (como es mi caso). Como podéis observar e - [Whatsapp con Pidgin](https://andros.dev/blog/6ee6dace/whatsapp-con-pidgin/): Pidgin es uno de los clientes de mensajería instantánea más querido y apoyado por la comunidad. Con este software podrás conectarte a multitud tipos d - [¿Cual es el mejor sistema operativo?](https://andros.dev/blog/48a08c25/cual-es-el-mejor-sistema-operativo/): La pregunta es injusta, ya que no se puede responder. Cada sistema operativo esta orientado a un público diferente. Es como si preguntara ¿cual es el - [10 servidores para Raspberry Pi](https://andros.dev/blog/ab5013c4/10-servidores-para-raspberry-pi/): Mucha gente que se haya comprado un Raspberry Pi se preguntará: ¿Ahora qué puedo hacer con él? Lo más normal es introducirle una imagen de Linux, un e - [Como entrar en la Deep Web: Parte 2](https://andros.dev/blog/2b956524/como-entrar-en-la-deep-web-parte-2/): Leer Parte 1 Software que necesitamos Virtualbox: Es máquina virtual. Su objetivo es emular un sistema operativo (Windows XP, OS X, Ubuntu...) en tu o - [Como entrar en la Deep Web: Parte 1](https://andros.dev/blog/8dd7dcd0/como-entrar-en-la-deep-web-parte-1/): Antes de bucear hay que aprender a nadar. ¿Qué es la Deep Web (o web profunda)? El otro Internet, dicho de otro modo: el lado oscuro de la red. Pagin - [2x0ng](https://andros.dev/blog/956b0a0b/2x0ng/): 2x0ng es un juego único. Los elementos que toma ya están presentes en otros géneros, sobretodo en los grandes clásicos. ¿Por qué digo que es único? P - [Sublime Text](https://andros.dev/blog/389cc09b/sublime-text/): Sublime Text es un editor de texto y de código fuente. Nacido originalmente como extensión de Vim, que poco a poco se ha convertido en un producto pr - [Formatear en Linux](https://andros.dev/blog/e4db6f42/formatear-en-linux/): La estructura del comando sería el siguiente. sudo mkfs -t formato -L 'Nombre como quieras poner como etiqueta' ruta/dispositivo Si yo quisiera ext4 - [5 bancos de imágenes gratuitas](https://andros.dev/blog/205b3a76/5-bancos-de-imagenes-gratuitas/): INTEF El Banco de imágenes y sonidos del INTEF (Instituto Nacional de Tecnologías Educativas y de Formación del Profesorado); cuenta con vídeos, ilus - [2 maneras de hacer una web en poco tiempo](https://andros.dev/blog/1792252f/2-maneras-de-hacer-una-web-en-poco-tiempo/): Plantilla Html No siempre tendremos que diseñar una página web desde cero, podremos utilizar una plantilla. ¿Qué es una plantilla HTML? Una página web - [Truco para rescordar tus contraseñas](https://andros.dev/blog/719560b2/truco-para-rescordar-tus-contrasenas/): Por poco que te muevas en internet, te acabas registrando en varios sitios: cuenta de correo, Facebook, Twitter... Y claro, en cada sitio te piden una - [3 clientes IRC](https://andros.dev/blog/881b40fa/3-clientes-irc/): A pesar de que estar en capa caída por otros servicios que le han robado muchos usuarios, en su momento fue Messenger y a día de hoy las redes sociale - [¿Y si cae un meteorito sobre Google?](https://andros.dev/blog/60665c40/y-si-cae-un-meteorito-sobre-google/): Supongamos que un fragmento de roca del cinturón de asteroides se desvía y cae sobre la Tierra. Y justamente impacta sobre Google. No sobre la sede d - [Calendario en consola: cal](https://andros.dev/blog/7cafe892/calendario-en-consola-cal/): Para ver en que día estamos, ver como los días del mes o ver el calendario de todo el año; solo nos hace falta una consola y el comando "cal".** ** No - [Comandos personalizados](https://andros.dev/blog/752cf469/comandos-personalizados/): Es muy común en Linux utilizar constantemente los mismos comandos para ciertas tareas diarias, lo cual a veces se hace tedioso si es muy larga la inst - [Editores de vídeo profesionales y libres](https://andros.dev/blog/45713696/editores-de-video-profesionales-y-libres/): Estamos muy mal acostumbrados a utilizar editores de vídeo de pago, y precisamente esta clase de software es realmente caro. Por ejemplo Adobe Premier - [WebP, alternativa perfecta del JPEG.](https://andros.dev/blog/6f2991fa/webp-alternativa-perfecta-del-jpeg/): Cualquier fotógrafo que se precie, amateur o profesional, trabaja con diversos formatos de imagen. Algunos prefieren JPEG (sin olvidar sus primos JPE - [Conectarte por SSH sin contraseña](https://andros.dev/blog/179ea783/conectarte-por-ssh-sin-contrasena/): Sencillo script para logearnos sin contraseña en un servidor con el protocolo SSH. ssh-keygen -t rsa && cat .ssh/id_rsa.pub | ssh -p 22 usuarioRemoto - [Reparar: Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(172,2)](https://andros.dev/blog/23da744e/reparar-kernel-panic-not-syncing-vfs-unable-to-mount-root-fs-on-unknown-block1722/): Si en Rasberry Pi nos salta el siguiente mensaje al arrancar... Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(172,2) ... - [Claws Mail: cliente de correo rápido y ligero](https://andros.dev/blog/6069b0e9/claws-mail-cliente-de-correo-rapido-y-ligero/): No nos engañemos, gestionar el correo por una web es lento; y eso suponiendo que tengamos una buena conexión a Internet. Rezando para que no se caig - [Celtx, escribe guiones de cine o novelas.](https://andros.dev/blog/d29f3332/celtx-escribe-guiones-de-cine-o-novelas/): Esta herramienta es ideal para escritores. Podrás redactar de forma profesional diferentes tipos de materiales como: guiones cinematográficos, obras - [6 formas de revivir tus juegos favoritos](https://andros.dev/blog/85639fce/6-formas-de-revivir-tus-juegos-favoritos/): Hay divertidísimos videojuegos difíciles de abandonar, independientemente de su antigüedad. Pueden cumplir sus 15 años, y seguir siendo tan adictivos - [Utilizar notificaciones de XFCE en LXDE](https://andros.dev/blog/24e7f5ed/utilizar-notificaciones-de-xfce-en-lxde/): LXDE es un entorno de escritorio que he llegado a respetar, muy por encima de Gnome o KDE. Personalmente trabajo a diario con Linux, y me he dado cuen - [Configuaración de escritorio LXDE](https://andros.dev/blog/e764d011/configuaracion-de-escritorio-lxde/): Dock: Cairo-dock Apariencia de controles: BSM Simple Iconos: Faenza Cursor del ratón: Openzone Fire Slim (xcursor-openzone) Borde de Ventana: Bear2 o - [Servidor Minecraft para Raspberry Pi (MCServer)](https://andros.dev/blog/40487682/servidor-minecraft-para-raspberry-pi-mcserver/): He observado que hay poca información por internet para montarte un servidor de Minecraft en un Raspberry Pi. Tiene cierta lógica ya que, hoy por hoy, - [Descargar archivos muy grandes](https://andros.dev/blog/df3cef36/descargar-archivos-muy-grandes/): JDownloader es utilizado para bajar archivos alojados en servidores, como Rapidshare o Mediafire. Lo que muchos desconocen es su amplia utilidad para - [Retoque fotográfico: Efecto vintage con Gimp](https://andros.dev/blog/e67dbf41/retoque-fotografico-efecto-vintage-con-gimp/): El efecto Vintage se utiliza para dar un toque antiguo a nuestras fotografías. Muy característico de los años 70 y 80, por quienes usaban una Poraloid - [Script para saber si un equipo esta encendido](https://andros.dev/blog/b841cb6a/script-para-saber-si-un-equipo-esta-encendido/): #!/bin/bash while : do if $(ping -c3 -i 2 192.168.X.X > /dev/null);then echo "Encendido" else echo "Apagado" fi sleep 5 done Verifica cada 5 segundo - [GNU Robbo](https://andros.dev/blog/3af285f6/gnu-robbo/): GNU Robbo es un remake, o mejor dicho una adaptación al siglo XXI, de Robbo; un juego escrito en 1989 por Janusza Pelca. Lo podíamos jugar en la Com - [Reducir tamaño de PDF](https://andros.dev/blog/a0fac340/reducir-tamano-de-pdf/): En Linux Utilizaremos ghostscript, una herramienta para manipular archivos con contenido PS y PDF. Instalamos en Debian/Ubuntu: sudo apt-get install - [Hacer gif de un vídeo](https://andros.dev/blog/4fadfdd1/hacer-gif-de-un-video/): Necesitarás tener instalado FFmpeg. Debian/Ubuntu: sudo apt-get install ffmpeg Archlinux: yaourt -S ffmpeg Windows: http://ffmpeg.org/download.ht - [Encriptar carpeta o archivo](https://andros.dev/blog/62a69518/encriptar-carpeta-o-archivo/): En ocasiones, por ciertas razones, necesitamos encriptar un fichero o una carpeta. Unas veces pueden ser para proteger algún documento importante, com - [Zork](https://andros.dev/blog/16881b57/zork/): Traducción. Este de la casa. Estas de pie en un campo abierto al oeste de una casa blanca, con una puerta tapiada. Hay un pequeño buzón. Intentamos - [Cambiar el tamaño de varias imágenes a la vez](https://andros.dev/blog/6211b95f/cambiar-el-tamano-de-varias-imagenes-a-la-vez/): Este post va dedicado a todos aquellos fotógrafos amateurs que tienen una reflex pero que cuando las van a pasar a sus amigos les toca bajar la calid - [Nethack](https://andros.dev/blog/d10904f2/nethack/): Presentación de la sección Damas y caballeros, niños y niñas; hoy tengo el placer de presentar una nueva sección dentro del blog: EPIC GAME LIST. ¡Así - [Grabar nuestro escritorio en Linux con FFmpeg](https://andros.dev/blog/b03c9c72/grabar-nuestro-escritorio-en-linux-con-ffmpeg/): Instalación Debian/Ubuntu: sudo apt-get install ffmpeg Archlinux: yaourt -S ffmpeg Ejecución Para grabar deberemos usar este comando en la consola ## Blog (English) - [How many arguments should a function have in Python?](https://en.andros.dev/blog/43e638f4/how-many-arguments-should-a-function-have-in-python/): One of the clearest signs that a function is doing too much is that it has too many arguments. When there are many arguments, the code becomes hard to - [Encrypting and decrypting data in Python](https://en.andros.dev/blog/158e0835/encrypting-and-decrypting-data-in-python/): At certain times we need to encrypt data in the backend to protect it. If you are in the Python ecosystem, you have a fantastic library for this: cryp - [Django LiveView vs Phoenix LiveView: a real benchmark](https://en.andros.dev/blog/80134668/django-liveview-vs-phoenix-liveview-a-real-benchmark/): I was curious: how does Django LiveView hold up against the original Elixir implementation when you compare them under identical conditions? Not with - [Building a multi-agent system from scratch: 50 lines of bash + git](https://en.andros.dev/blog/ed26ea98/building-a-multi-agent-system-from-scratch-50-lines-of-bash-git/): The concept of orchestrating agents is gradually spreading among developers. Claude has planned, or you may already be able to use (depending on when - [twtxt vs Org Social: the evolution of an idea](https://en.andros.dev/blog/ba142044/twtxt-vs-org-social-the-evolution-of-an-idea/): twtxt was one of the strongest inspirations behind Org Social: a plain text file served over HTTP, with no active server, no database, no signup. I pe - [Making UIs like text adventure games](https://en.andros.dev/blog/b5ba872a/making-uis-like-text-adventure-games/): At my company, we're shifting our interaction paradigm. Even though the business logic of our internal tools remains the same, the way we interact wit - [Quick tutorial to get a blog online from Org mode thanks to Org Social](https://en.andros.dev/blog/c68f00c3/quick-tutorial-to-get-a-blog-online-from-org-mode-thanks-to-org-social/): Having a blog online from an Org mode file, without your own server, with auto-deploy and no extra maintenance, is possible thanks to a service in the - [Learn how to structure a test](https://en.andros.dev/blog/d6eb1348/learn-how-to-structure-a-test/): Using a testing workflow of some kind (TDD, BDD, E2E...) is a good quality measure. Not because it guarantees that the function or object works as exp - [From zero to a RAG system: successes and failures](https://en.andros.dev/blog/aa31d744/from-zero-to-a-rag-system-successes-and-failures/): A few months ago I was tasked with creating an internal tool for the company's engineers: a Chat that used a local LLM. Nothing extraordinary so far. - [My website is now ~2.8x faster after converting it to a Django LiveView SPA](https://en.andros.dev/blog/dd5a0746/my-website-is-now-28x-faster-after-converting-it-to-a-django-liveview-spa/): After releasing the 2.2.0 update of Django LiveView to PyPI, which fixed some minor issues, I decided to transform my entire personal website (where y - [Building Technical Cathedrals for an Audience That No Longer Visits Webs](https://en.andros.dev/blog/58441321/building-technical-cathedrals-for-an-audience-that-no-longer-visits-webs/): Now, my website serves articles and lessons in Markdown if you use the "Accept: text/markdown" header. You can try it yourself with the article you ar - [Emacs is a Fantasy Workstation](https://en.andros.dev/blog/6aba9431/emacs-is-a-fantasy-workstation/): I've been using Emacs for a while now, and if it has taught me anything, it's not to settle. Every time I open my configuration, I discover something - [From htmx to Django LiveView](https://en.andros.dev/blog/94d14a9e/from-htmx-to-django-liveview/): If you're using htmx and evaluating Django LiveView, this article is for you. I want to quickly show you the equivalences of what you usually do with - [Sending patches via email with Git](https://en.andros.dev/blog/75beece9/sending-patches-via-email-with-git/): When thinking about working with a friend on a small project, we instinctively create a repository on GitHub or GitLab. This practice, or reflex, is r - [I created a game engine for Django?](https://en.andros.dev/blog/6e9e4485/i-created-a-game-engine-for-django/): TL;DR: Complete multiplayer game in the browser made of 270 lines of Python and 0 lines of JavaScript running on Django thanks to Django LiveView. Aft - [Performance comparison of Django's main interactive frameworks](https://en.andros.dev/blog/06892b5b/performance-comparison-of-djangos-main-interactive-frameworks/): Which Django interactive framework is actually the fastest? Django LiveView, HTMX, Unicorn, Reactor, or good old server-side rendering? I don't know, - [DOOM in Django: testing the limits of LiveView at 600.000 divs/seconds](https://en.andros.dev/blog/7b1b607b/doom-in-django-testing-the-limits-of-liveview-at-600000-divsseconds/): Based on the latest tests I've published, Django LiveView appears to be the fastest dynamic frontend (I'm sure more variables can be measured). OK... - [Why I forked instead of taking the easy way out](https://en.andros.dev/blog/7134f59f/why-i-forked-instead-of-taking-the-easy-way-out/): I wanted to add a small real-time visitor counter to my website. In other words, to openly display how many people are viewing my site at the exact mo - [Felisp, variant of Lisp](https://en.andros.dev/blog/ef5c7594/felisp-variant-of-lisp/): Felisp is a variant of Lisp where every the opening parenthesis is replaced with the word meow and every closing parenthesis is replaced with the word - [Guide to creating your Org Social client](https://en.andros.dev/blog/daf904a6/guide-to-creating-your-org-social-client/): Native Other languages Web App Requirements: Relay: - [Quick tutorial to get started on Org Social](https://en.andros.dev/blog/ddd78757/quick-tutorial-to-get-started-on-org-social/): Org Social is a very peculiar decentralized social network, as it works from text files in Org Mode format. Each user interacts through their own soci - [Quick Docker Tutorial to Run a Python Script](https://en.andros.dev/blog/5d4edfbf/quick-docker-tutorial-to-run-a-python-script/): You're facing a first starting point to learn Docker from scratch where practice takes priority over theory. The objective of this article is NOT to t - [Sass: The CSS Preprocessor That Survived the Apocalypse](https://en.andros.dev/blog/e9ded1a5/sass-the-css-preprocessor-that-survived-the-apocalypse/): In the fast-paced world of web development, where technologies are born and die at an accelerated pace, there are tools that have demonstrated extraor - [Why your social.org files can have millions of lines without any performance issues](https://en.andros.dev/blog/4e12225f/why-your-socialorg-files-can-have-millions-of-lines-without-any-performance-issues/): As Org Social grows, users follow more feeds, and individual social.org files accumulate hundreds of posts over time. Traditional approaches that down - [My Morning Routine in Emacs](https://en.andros.dev/blog/6cad402e/my-morning-routine-in-emacs/): This isn't a tutorial, I'm just sharing my workflow. I hope you find it useful. 1. News Check my news groups: sh M-x gnus Check my RSS list: sh M- - [Why Org Social when you can use... anything?](https://en.andros.dev/blog/8c640241/why-org-social-when-you-can-use-anything/): It is a good question. There are a lot of popular social networks like X/Twitter, Mastodon, Bluesky, or nerd networks like Nostr, Twtxt, Matrix, etc. - [Not all sites are valid for reporting a problem](https://en.andros.dev/blog/73994d46/not-all-sites-are-valid-for-reporting-a-problem/): When some of my Opensource projects became a little popular, I experienced the same situation. I received a lot of feedback and issues through many ch - [Python Comments and Docstrings Best Practices](https://en.andros.dev/blog/3225552c/python-comments-and-docstrings-best-practices/): Comments are half of your code. They are so essential that without them, code can become incomprehensible and therefore make a project impossible to m - [Lessons learned after 15 years teaching programming classes](https://en.andros.dev/blog/b1bdaf4b/lessons-learned-after-15-years-teaching-programming-classes/): One of the most difficult decisions I have had to make, without a doubt, has been to stop teaching. But as I usually say to my students «the water tha - [Elisp testing example](https://en.andros.dev/blog/f9b694cb/elisp-testing-example/): I would like a simple function that returns t if a number/string have decimals or nil if it does not have decimals ignoring the type of the number. So - [Creating desktop applications using the Emacs core](https://en.andros.dev/blog/409869f6/creating-desktop-applications-using-the-emacs-core/): I am studying widgets.el, it is a library with different components to make user interfaces. Currently, I am transforming my scripts, that I use daily - [Becoming commands in Bash folders](https://en.andros.dev/blog/aea1511b/becoming-commands-in-bash-folders/): I want to show my focus on execute commands in Bash using watchers and folders. I have named this trick Bash Folders. I have a problem. I needed to ru - [Create your own Pi-hole in 10 commands](https://en.andros.dev/blog/e4d3b7de/create-your-own-pi-hole-in-10-commands/): It's really easy to create a DNS server that filters out malicious ads and links. The most popular option is to turn to Pi-Hole, but you will see for ## Courses - [Testing](/cursos/testing/1/introduccion/): Curso gratuito de Testing: Aprende a crear pruebas empíricas para mejorar la calidad de tu código. Domina Unit Testing, TDD, pruebas E2E, pruebas de integración y técnicas de caja blanca para desarrollar software robusto, confiable y libre de errores. - [HTML](/cursos/html/1/introduccion/): Curso gratuito de HTML: Aprende a crear páginas web desde cero. Descubre qué es HTML, cómo funciona internet y crea tu primera página web con las herramientas profesionales de la industria. - [SQL](/cursos/sql/1/introduccion/): Curso gratuito de SQL: Aprende a gestionar bases de datos relacionales de forma eficiente. Domina consultas, filtros, relaciones, vistas, funciones, joins, inserción, actualización y eliminación de datos para trabajar con PostgreSQL, MySQL, Oracle y SQLite en proyectos web profesionales. - [Emacs Lisp UI](/cursos/emacs-lisp-ui/1/introduccion/): Curso gratuito de Interfaces con Emacs Lisp: Aprende a crear interfaces de usuario interactivas en Emacs. Domina widgets, botones, campos, validaciones, imágenes, arquitectura de componentes, layouts dinámicos y Grid para desarrollar aplicaciones y herramientas personalizadas dentro de Emacs. - [JavaScript](/cursos/javascript/1/introduccion/): Curso gratuito de JavaScript: Aprende a programar aplicaciones web dinámicas e interactivas. Domina variables, funciones, eventos, manipulación del DOM, formularios, almacenamiento, APIs, WebSockets y componentes para crear experiencias web profesionales compatibles con cualquier navegador. - [Django](/cursos/django/1/introduccion/): Curso gratuito de Django: Aprende a crear aplicaciones web profesionales con Python. Domina modelos, admin, rutas dinámicas, contenido estático, Docker y la arquitectura MVT para desarrollar proyectos escalables como blogs, redes sociales y sistemas web robustos. - [Common Lisp](/cursos/common-lisp/1/prologo/): Curso gratuito de Common Lisp desde un punto de vista práctico. Vamos a resolver 99 problemas utilizando Common Lisp. A medida que avancemos, irás aprendiendo los elementos básicos del lenguaje que necesitarás para solventar el problema. Además, iremos incorporando técnicas de programación funcional, así como buenas prácticas de desarrollo de software. - [PHP](/cursos/php/1/base/): Curso gratuito de PHP: Aprende a crear páginas web dinámicas y aplicaciones backend modernas. Domina variables, funciones, formularios, sesiones, cookies, bases de datos, CRUD, APIs y sistemas de login para desarrollar sitios web robustos y escalables con la última versión de PHP. - [Maquetación Web](/cursos/maquetacion-web/1/introduccion/): Curso gratuito de Maquetación Web: Aprende a crear diseños adaptativos con HTML y CSS. Domina Flex, Grid, media queries, posicionamiento y el patrón 7-1 para desarrollar páginas web responsivas compatibles con cualquier dispositivo. - [MongoDB](/cursos/mongodb/1/introduccion/): Curso completo de MongoDB: desde la instalación hasta técnicas avanzadas de agregación y modelado de datos - [Prompt Engineering](/cursos/prompt-engineering/1/introduccion/): Curso gratuito de Prompting: Aprende a comunicarte efectivamente con inteligencias artificiales. Domina técnicas esenciales y avanzadas, contexto, ejemplos, pensamiento paso a paso, formateo de salidas y casos prácticos para obtener respuestas precisas de cualquier IA generativa. - [Contribuciones con Git](/cursos/contribuciones-con-git/1/introduccion/): El objetivo de este curso es enseñarte las bases para usar Git con el objetivo de colaborar con otros amigos/compañeros usando una plataforma como GitHub o similares. También lo puedes usar como una guía rápida para aprender a colaborar en proyectos Opensource. - [Django REST Framework](/cursos/django-rest-framework/1/introduccion/): Curso gratuito de Django REST Framework: Aprende a crear APIs RESTful profesionales con Python y Django. Domina endpoints, serialización, vistas, CRUD completo, testing automatizado y mejores prácticas para desarrollar servicios web escalables y robustos. - [CSS](/cursos/css/1/introduccion/): Curso gratuito de CSS: Aprende a dar estilos a páginas web desde lo básico hasta lo avanzado. Descubre sintaxis, selectores, variables, animaciones, 3D, Sass y herramientas profesionales para crear diseños responsivos. - [Scrum](/cursos/scrum/1/introduccion/): Aprende los fundamentos de Scrum, el framework ágil más popular para gestión de proyectos. ## Books - [Don Clojure de la Mancha](https://andros.dev/books/2/don-clojure-de-la-mancha/): El objetivo del libro es servirte como una guía sencilla y moderna para entrar en Clojure, no hacer un análisis en profundidad de la programación declarativa contra imperativa. Aunque es cierto que con el uso de este lenguaje iremos explorando todas las ventajas que nos ofrece. | [Read online](/book/don-clojure-de-la-mancha/) - [Building SPAs with Django and HTML Over the Wire: Learn to build real-time single page applications with Python](https://andros.dev/books/1/building-spas-with-django-and-html-over-the-wire-learn-to-build-real-time-single-page-applications-with-python/): The HTML over WebSockets approach simplifies single-page application (SPA) development and lets you bypass learning a JavaScript rendering framework such as React, Vue, or Angular, moving the logic to Python. This web application development book provides you with all the Django tools you need to simplify your developments with real-time results. - [Desafíos de programación atemporales y multiparadigmáticos](https://andros.dev/books/3/desafios-de-programacion-atemporales-y-multiparadigmaticos/): Te encuentras ante un librillo de actividades, divididas en 2 niveles de dificultad. Te enfrentarás a los casos más comunes que te puedes encontrar en pruebas técnicas o aprender conceptos elementales de programación. | [Read online](/book/desafios-de-programacion-atemporales-y-multiparadigmaticos/) ## Other - [Talks](/talks/): Conferences and workshops - [CV (English)](/cv/): Professional experience and skills (Markdown) - [CV (Spanish)](/cv/?lang=es): Experiencia profesional y habilidades (Markdown) - [Terms and conditions](/terms/)