<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" content="http://purl.org/rss/1.0/modules/content/" atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>iAgosto Blog</title>
    <link>https://blog.iagosto.dev</link>
    <description>Programación, SysAdmin, GNU/Linux y otras cosillas</description>
    <language>es-MX</language>
    <lastBuildDate>Fri, 27 Feb 2026 16:20:29 -0600</lastBuildDate>
    <item>
      <title>Migre mi blog a PHP!</title>
      <link>https://blog.iagosto.dev/entradas/migre-mi-blog-a-php</link>
      <description>&lt;p&gt;En esta ocasión quiero contarles los motivos por los que decidí migrar mi blog; de estar en Typescript, con Deno, en un entorno de tecnología moderna. A PHP con Codeigniter, un framework de hace mas de 19 años.&lt;/p&gt;</description>
      <pubDate>Fri, 27 Feb 2026 16:01:22 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/migre-mi-blog-a-php</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>En esta ocasión quiero contarles los motivos por los que decidí migrar mi blog; de estar en Typescript, con Deno, en un entorno de tecnología moderna. A PHP con Codeigniter, un framework de hace mas de 19 años.</p>
<hr />
<h2>Typescript y Deno</h2>
<p>Typescript es un lenguaje de de programación tipado, muy fácil de usar y de extender. Mientras que Deno es un entorno (alternativa a Nodejs). Muy potente, escrito en Rust.</p>
<p>Este blog había sido creado en estas tecnologías, con resultados muy satisfactorios.</p>
<p>Entonces, ¿Porque decidí migrar a PHP?</p>
<h2>La encrucijada</h2>
<p>Después de llevar varios años en el mundo de la programación web. Acabo de entender, que un lenguaje de programación no es superior a otro. Sino que mas bien, cada lenguaje puede tener un uso particular.</p>
<p>En este caso, sentí que un pequeño blog como el mio, donde en realidad se manejan 4 o 5 vistas. No tenia ninguna necesidad de tener un ecosistema que en realidad esta pensado para sistemas de alta demanda y trafico.</p>
<p>Además al ser tecnologías nuevas, cambian demasiado rápido, mas de lo que yo puedo seguirles el ritmo.</p>
<h2>PHP y Codeigniter</h2>
<p>En este caso, decidí usar PHP. Un lenguaje muy sencillo dedicado principalmente a servicios web y API’s, que ha sobrevivido con el tiempo lenguajes mucho mas potentes como Nodejs, Go, Ruby, Java, entre otros.</p>
<p>Considero que este esta destinado a aplicaciones sencillas, como e-commerce, CMS, y otros sistemas de gestión de menos de 1,000 usuarios.</p>
<p>Por otro lado Codeigniter es un framework MVC, muy fácil de usar y flexible. Lo que permite desarrollar aplicaciones web muy rápidamente. Lo use hace mas de 10 años cuando comencé en este mundo de la programación y al día de hoy sigue recibiendo actualizaciones.</p>
<p>Este tipo se “stacks” con PHP son compatibles con cualquier hosting web, que ademas son super baratos de alojar. Para quien no tiene un servidor en casa, un hosting web puede costar alrededor de $25 usd al año ¡Con dominio incluido! Así que además de las otras ventajas este opción es mucho mas económica.</p>
<h2>Proceso</h2>
<p>Entonces decidí que lo mejor para mantener este blog sencillo y fácil de seguir extendiendo tenia que migrarlo a estas ultimas tecnologías mencionadas.</p>
<p>Al ser un sitio ligero y sin tanta información solo me tomo unos días lograrlo. Con resultados muy satisfactorios.</p>
<p>Ahora lo aloje en un hosting web, en vez de mi home server. Encontré varias ventajas, entre ellas:</p>
<ul>
<li>Mas disponibilidad: Ya no me tengo que preocupar porque mi sitio se encuentre caído</li>
<li>Mas velocidad: Mi sitio carga mucho mas rápido gracias al hosting y a PHP</li>
</ul>
<p>Adopte git-ftp para controlar mis cambios en el hosting. Que hace que todo sea muy fácil de manejar (algo de lo que hablare en otra entrada).</p>
<hr />
<p>Al final, quede satisfecho con esta migración, por lo que me dio interés comentarlo aquí. Y aunque no detallo del todo como fue el proceso. Lo que quiero transmitir es que a veces damos por hecho o vemos por ahí gente decir “este lenguaje es el mejor de todos porque..” y no nos damos cuenta que puede ser muy bueno para una tarea en especifico. Pero no por eso deberíamos usarlo para todo.</p>
<blockquote>
<p>Por ejemplo en cuanto a desarrollo web y API’s:</p>
<p>Java con Springboot: Lo usaría para proyectos empresariales que requieran soporte prioritario<br />
Nodejs con X framework: Para proyectos de startups o servicios que requieren velocidad de desarrollo<br />
Ruby con Ruby on rails: Lo he visto mas en startups fintech<br />
PHP con X framework: Perfecto para pequeñas empresas, proyectos personales pequeños.</p>
</blockquote>
<p>De esta manera podemos evitar un montón de problemas en el futuro:</p>
<blockquote>
<p>Si tu proyecto es algo pequeño: Para que vas a usar un tecnología que es mas difícil o costosa mantener</p>
<p>Si tu proyecto es grande: Para que vas a usar una tecnología que no puede escalar</p>
</blockquote>]]></encoded>
      <category>blog</category>
    </item>
    <item>
      <title>Pelea para liberar JavaScript de Oracle</title>
      <link>https://blog.iagosto.dev/entradas/pelea-para-liberar-javascript-de-oracle</link>
      <description>&lt;p&gt;Probablemente no lo sabias. Pero "JavaScript" es una marca comercial de Oracle. Y se ha logrado un fase de "investigación" para solicitar la cancelación del nombre como marca de Oracle. Y que sea reconocida como un termino genérico tratándose de un lenguaje de programación.&lt;/p&gt;</description>
      <pubDate>Fri, 19 Sep 2025 20:01:38 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/pelea-para-liberar-javascript-de-oracle</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Probablemente no lo sabias. Pero "JavaScript" es una marca comercial de Oracle. Y se ha logrado un fase de "investigación" para solicitar la cancelación del nombre como marca de Oracle. Y que sea reconocida como un termino genérico tratándose de un lenguaje de programación.</p>
<hr />
<p><strong>Deno Land</strong> creadores de "Deno". Ha impulsado esta solicitud llevándola a una litigio federal donde se solicita la cancelación. Todo el proceso requiere de muchos recursos. Por eso, Deno Land ha levantado una ronda de donaciones, para hacer esto posible:</p>
<p><a href="https://deno.com/blog/javascript-tm-gofundme" rel="noopener noreferrer">https://deno.com/blog/javascript-tm-gofundme</a></p>
<h2 id="pero-porque-esto-es-importante">¿Pero porque esto es importante?</h2><p>Deno Land nos lo explica:</p>
<blockquote>
<p>Si ganamos, "JavaScript" seria de dominio publico. Libre para todos los developers, conferencistas, autores de libros, y compañías para utilizar sin temor a amenazas relacionadas con marcas registradas.</p>
</blockquote>
<p>Al día de hoy cuando pensamos en "JavaScript", lo que menos nos viene a la mente es "una marca registrada". Como sucede con marcas como "Apple", "Meta", "Java", "Google", etc. Sino mas bien algo mas genérico como código de programación, un lenguaje de programación o cualquier otras cosa.</p>
<p>Por este motivo lo que se exige es que se libere ya que <em>Oracle ha abandonado la marca</em>, y ademas <em>JavaScript representa un nombre genérico</em>. Que son puntos cruciales e importantes para que el litigio proceda y se haga valida la cancelación de ese nombre como marca comercial.</p>
<p>Por otra parte. Oracle ha negado las acusaciones, aunque evidentemente jamas ha aportado nada al desarrollo de "JavaScript" como lenguaje de programación. Por que actualmente las actualizaciones que lograron transformarlo a lo que es hoy en dia es gracias a <code>ECMAScript</code> llevando nuevos estándares que son adoptados por todos; navegadores (Chromium, Firefox, Safari), entornos (NodeJS, Deno, Bum), etc.</p>
<p><a href="https://es.wikipedia.org/wiki/ECMAScript" rel="noopener noreferrer">https://es.wikipedia.org/wiki/ECMAScript</a></p>
<h3 id="historial-de-claves-legales">Historial de claves legales</h3><p>- <strong>1997</strong> – Sun Microsystems registra JavaScript.</p>
<p>- <strong>2009</strong> – Oracle adquiere Sun, transfiriendo la marca.</p>
<p>- <strong>2019</strong> – Oracle renueva la marca, usando una captura de Node.js (proyecto que no le pertenece) como evidencia de uso.</p>
<p>- <strong>Sept 2024</strong> – Ryan Dahl (creador de Node.js y co-fundador y CEO de Deno) <a href="https://javascript.tm" rel="noopener noreferrer">escribe una carta abierta</a>, firmada por Brendan Eich y 26,000+ desarrolladores, demandando a que Oracle suelte la marca.</p>
<p>- <strong>Nov 22, 2024</strong> – <a href="https://deno.com/blog/deno-v-oracle" rel="noopener noreferrer">Deno crea petición formal para la cancelación </a>basada en tres puntos <em>nombre genérico, abandono y fraude.</em></p>
<p>- <strong>Feb 2025</strong> – <a href="https://deno.com/blog/deno-v-oracle2" rel="noopener noreferrer">Oracle responde para desestimarla</a>, argumentando que sus evidencias son validas.</p>
<p>- <strong>Jun 18, 2025</strong> – The Trademark Trial and Appeal Board (TTAB) desestima el "fraude". La pelea continua con la acusación de "nombre genérico y abandono" — el corazón del caso.</p>
<p>- <strong>Aug 7, 2025</strong> – <a href="https://ttabvue.uspto.gov/ttabvue/v?pno=92086835&amp;pty=CAN&amp;eno=16" rel="noopener noreferrer">Oracle responde</a> a la petición de Deno, negando que «existe un amplio consenso en la industria y entre el público en general de que el término «JavaScript» es genérico».</p>
<p>- <strong>Sept 6, 2025</strong> – Comienza la fase de presentación de pruebas: ambas partes intercambian documentos, pruebas y declaraciones.</p>
<h3 id="apoyemos-la-causa">Apoyemos la causa</h3><p>Hay diferentes vías a apoyar a esta gran causa:</p>
<ul>
<li>Firmando la carta a Oracle: <a href="https://javascript.tm/" rel="noopener noreferrer">https://javascript.tm/</a></li>
<li>Apoyando con la financiación legal: <a href="https://www.gofundme.com/f/help-us-challenge-oracles-javascript-trademark" rel="noopener noreferrer">https://www.gofundme.com/f/help-us-challenge-oracles-javascript-trademark</a></li>
</ul>
<p>Deno Land que es el principal autor de esta causa. Esta necesitando fondos para continuar con esta causa y lograr que JavaScript sea ahora completamente de Dominio Publico.</p>
<p>Personalmente he hecho mi pequeña donación:</p>
<p><a href="https://gofund.me/c1cde778a" rel="noopener noreferrer">https://gofund.me/c1cde778a</a></p>
<p>Si tienes la posibilidad, te invito a hacer una donación también!</p>
<p><strong>¿Y tu sabias de JavaScript es una marca comercial de Oracle?</strong></p>
]]></encoded>
      <category>noticias</category>
      <category>hacktivismo</category>
      <category>programacion</category>
    </item>
    <item>
      <title>Deno: La alternativa a NodeJS</title>
      <link>https://blog.iagosto.dev/entradas/deno-la-alternativa-a-nodejs</link>
      <description>&lt;p&gt;Deno es un runtime de Javascript y Typescript. Que ha ganado popularidad y madurez durante los últimos años.&lt;/p&gt;
&lt;p&gt;Con mejoras de seguridad, estabilidad y rapidez comparado con Nodejs, promete ser el entorno de reemplazo para miles de aplicaciones nuevas y actuales.&lt;/p&gt;</description>
      <pubDate>Mon, 01 Sep 2025 15:51:28 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/deno-la-alternativa-a-nodejs</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Deno es un runtime de Javascript y Typescript. Que ha ganado popularidad y madurez durante los últimos años.</p>
<p>Con mejoras de seguridad, estabilidad y rapidez comparado con Nodejs, promete ser el entorno de reemplazo para miles de aplicaciones nuevas y actuales.</p>
<hr />
<h2 id="que-es-deno">¿Que es Deno?</h2><p>Desde su sitio web <a href="https://deno.com" rel="noopener noreferrer">https://deno.com</a>.</p>
<blockquote>
<p>Deno es el entorno de ejecución de JavaScript de código abierto para la web moderna.</p>
</blockquote>
<p>Con una base construida en <code>rust</code>, Deno ofrece Typescript nativo, mejores opciones de seguridad y un montón de utilerías incluidas en la base del código.</p>
<p>Todo esto basado en estándares web, con la intensión de poder reutilizar y estandarizar código para back-end y front-end.</p>
<p>Algunas herramientas ya incluidas en Deno:</p>
<ul>
<li>Linter: Ayuda a encontrar errores de código y sintaxis</li>
<li>Test runner: Funciones de testing fáciles de usar</li>
<li>Code formatter: Formateo de código</li>
<li>Ejecutables: Una manera fácil de construir aplicaciones ejecutables</li>
</ul>
<p>Ademas, Deno prioriza la seguridad. Por lo que las aplicaciones por default tienen permisos limitados, a menos que sean definidos. Entre ellas; el acceso a internet, lectura/escritura de archivos, lectura de variables de entorno, información del sistema, entre otros.</p>
<p>Por si fuera poco. Deno implementa una capa de compatibilidad con <code>Nodejs</code> por lo que puedes usar la mayoría de librerías y frameworks disponibles. Incluso usar paquetes de <code>npm</code> directamente.</p>
<p>Si nada de esto te convence. Gracias a la base y arquitectura, Deno tiene un gran performance en peticiones de red ¡Superando a Nodejs por mucho!</p>
<h2 id="como-se-instala">¿Como se instala?</h2><p>Dependiendo del sistema operativo podrás encontrar diferentes maneras de instalar Deno.</p>
<p>Ya sea con el gestor de paquetes de tu sistema o con un simple comando en tu terminal.</p>
<p>En Linux/MacOS</p>
<pre><code>$ curl -fsSL https://deno.land/install.sh | sh</code></pre><p>En Windows 💀:</p>
<pre><code>$ irm https://deno.land/install.ps1 | iex</code></pre><h2 id="hola-mundo-con-deno">Hola mundo con Deno</h2><p>Ejecutar codigo con Deno es muy facil. Ejecutaremos de varias formas un "Hola mundo!".</p>
<h3 id="mensaje-en-consola">Mensaje en consola</h3><p>Para "Hola mundo!" mostrado en consola, crearemos nuestro archivo <code>index.js</code> con el siguiente codigo:</p>
<pre><code>console.log("Hola mundo!");</code></pre><p>Y ejecutaremos nuestro archivo con Deno:</p>
<pre><code>$ deno run index.js</code></pre><p>Y veremos el mensaje en la consola donde lo ejecutamos.</p>
<h3 id="mensaje-en-el-navegador">Mensaje en el navegador</h3><p>Para crear un webserver que devuelva "Hola mundo!". Crearemos el archivo <code>server.js</code> con el siguiente código:</p>
<pre><code>Deno.serve((_req) =&gt; {
  return new Response("Hola mundo!");
});</code></pre><p>Ejecutaremos nuestro archivo con Deno:</p>
<pre><code>$ deno run --allow-net server.ts</code></pre><p>Y se creara un webserver. Por lo que ahora podremos ir a nuestro sitio en <code>localhost:8000</code>.</p>
<p>Por defecto, los webserver se ejecutan en el puerto <code>8000</code>, para cambiarlo podemos definir nuestro puerto y host también:</p>
<pre><code>Deno.serve({ port: 4242, hostname: "0.0.0.0" }, handler);</code></pre><h2 id="fresh---un-framework-ligero">Fresh - Un framework ligero</h2><p>Desde el equipo de <code>Deno land</code>, han creado Fresh. Un framework para crear aplicaciones web y API's muy fácil de usar y ligero.</p>
<p>Que a su vez integra funciones avanzadas como SSR (Server side render), arquitectura de islas interactivas y estrategias de actualización de HTML dinámicas.</p>
<p><strong>De hecho, este blog esta contruido bajo Deno y Fresh. Y aunque no utilice todo su potencial (por la naturaleza del blog). ¡Es muy fácil de mantener, ejecutar y crear nuevas funciones!</strong></p>
<p>Puedes encontrar mas información en su sitio web oficial:</p>
<p><a href="https://fresh.deno.dev" rel="noopener noreferrer">https://fresh.deno.dev</a></p>
]]></encoded>
      <category>programacion</category>
      <category>alternativas</category>
    </item>
    <item>
      <title>Protege tu sitio de la IA con Anubis</title>
      <link>https://blog.iagosto.dev/entradas/protege-tu-sitio-de-la-ia-con-anubis</link>
      <description>&lt;p&gt;Evita que tu sitio web sea utilizado para el entrenamiento de las "IA". Muy útil para proteger blogs, podcasts, y cualquier otro sitio web con contenido de valor generado por humanos.&lt;/p&gt;</description>
      <pubDate>Fri, 18 Jul 2025 06:40:11 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/protege-tu-sitio-de-la-ia-con-anubis</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Evita que tu sitio web sea utilizado para el entrenamiento de las "IA". Muy útil para proteger blogs, podcasts, y cualquier otro sitio web con contenido de valor generado por humanos.</p>
<hr />
<p>Hoy en día ya no solo existen los bots y spiders que escanean los sitios web en busca de vulnerabilidades o simplemente indexación y cacheo de los sitios web. Con la llegada de la "IA" ahora existen nuevos robots que utilizan el contenido del sitio web para alimentar sus bases de datos de entrenamiento.</p>
<h2 id="que-es-y-como-funciona-anubis">¿Que es y como funciona Anubis?</h2><p>En su sitio web:</p>
<blockquote>
<p>Anubis es una utilidad IA Firewall que pesa el alma de las conexiones con uno o mas retos con la intención de proteger los recursos en linea de scraper bots</p>
</blockquote>
<p>Anubis es un software que nos ayudara a impedir que bots de la "IA" escarben en nuestros sitios web, impidiendo el acceso a ellos. Esto se hace por medio de una verificación del navegador.</p>
<p>Actua como un proxy o un intermediario. Por lo que la experiencia final del usuario no se ve comprometida.</p>
<p>Para saber si un visitante es real o bot, Anubis implementa retos o "Challenges". Que consta de hacer calculos mediante Javascript para verificar si el visitante es real o se trata de algún bot.  </p>
<p><span>Mapa de como funciona Anubis</span></p>
<h2 id="porque-debería-usarlo">¿Porque debería usarlo?</h2><p>Si quieres evitar que el contenido en tu sitio sea usado por las corporaciones para sus LLM. Esta es de las mejores opciones para hacerlo.</p>
<p>Ademas, Anubis es configurable. Por lo que puedes poner tus propias reglas. Ya sea para ser mas permisivo o menos permisivo. Es decir, puedes decidir bloquear mas bots (como buscadores, spiders, etc). O tener reglas especificas para un bot en especial.</p>
<p>Anubis tiene 3 características especiales:</p>
<ul>
<li>Fácil de usar y no intrusivo para el usuario (el visitante)</li>
<li>Ligero. Usa menos de 128MB de RAM</li>
<li>Bloqueador de scrapers, identifica y bloquea ataques</li>
<li>Open source bajo la licencia MIT</li>
</ul>
<p>Instalarlo es rápido y no requiere mantenimiento.</p>
<h2 id="instalación">Instalación</h2><p>La forma estándar que los desarrolladores de Anubis proponen es a traves de <em>docker</em>.</p>
<p>El primer paso es hacer pull de la imagen:</p>
<pre><code>docker pull ghcr.io/techarohq/anubis:sha256-a33b6c898baf2d71003bed0104529bf444d8bb5a0795f90a06333d4d8614d95d</code></pre><p>Y como siguiente paso levantar el servicio, esta es la configuración mínima:</p>
<pre><code>docker run --name=anubis -e SERVE_ROBOTS_TXT=true -e TARGET=http://tusitio.com -p 8923:8923 -d anubis</code></pre><p>Donde:</p>
<ul>
<li><code>--name</code>: El nombre de tu contenedor</li>
<li><code>-e SERVE_ROBOTS_TXT=true</code>: Configura el archivo <code>robots.txt</code> con bloqueo de IA scrapers</li>
<li><code>-e TARGET=http://tusitio.com</code>: Este es tu sitio web ya sea dentro de tu máquina, red o internet a donde quieras que sea redirigido después de pasar el "Challenge"</li>
<li><code>-p 8923:8923</code>: Este es el puerto donde corre Anubis</li>
</ul>
<p>Ahora ya tenemos el software corriendo y protegiendo nuestro sitio web.</p>
<p>Dependiendo de la infraestructura de tu sitio, deberas redirigir el trafico de tu server a Anubis, y el se encargara de cargar el sitio final.</p>
<p>Aquí podran encontrar algunos ejemplos para Caddy, Nginx, Apache, y otros mas:</p>
<p><a href="https://anubis.techaro.lol/docs/category/environments" rel="noopener noreferrer">https://anubis.techaro.lol/docs/category/environments</a></p>
<h3 id="sitios-que-usan-anubis">Sitios que usan Anubis</h3><p>Existe una lista grande de compañías que han adoptado Anubis. Sobre todo del mundo del software libre y el open source.</p>
<p>Entre ellas; GNOME, Devuan, Gitea, Codeberg, e incluso algunos sitios de "The Linux Foundation".</p>
<p>La lista completa aquí:</p>
<p><a href="https://anubis.techaro.lol/docs/user/known-instances" rel="noopener noreferrer">https://anubis.techaro.lol/docs/user/known-instances</a></p>
<hr />
<p>Así que si tienes un sitio web que quieras proteger, Anubis es una excelente opción.</p>
<p>Si aun no te convence, aquí te dejo una platica del creador de este software y un articulo muy completo hecho también por el:</p>
<p><a href="https://xeiaso.net/talks/2025/bsdcan-anubis/" rel="noopener noreferrer">https://xeiaso.net/talks/2025/bsdcan-anubis/</a></p>
<p>¿Que te parece este software?</p>
]]></encoded>
      <category>tecnologia</category>
      <category>servidores</category>
      <category>ia</category>
    </item>
    <item>
      <title>Actualizar jails con Bastille en FreeBSD</title>
      <link>https://blog.iagosto.dev/entradas/actualizar-jails-con-bastille-en-freebsd</link>
      <description>&lt;p&gt;Si ya empezaste a usar &lt;strong&gt;BastilleBSD&lt;/strong&gt; para aislar tus servicios en FreeBSD. Vas a necesitar actualizar la version de FreeBSD de tus jails de vez en cuando.&lt;/p&gt;
&lt;p&gt;Bastille nos ayuda a hacer esa actualizacion de manera facil. Vamos a ver el paso a paso para hacerlo.&lt;/p&gt;</description>
      <pubDate>Wed, 19 Feb 2025 04:39:53 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/actualizar-jails-con-bastille-en-freebsd</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Si ya empezaste a usar <strong>BastilleBSD</strong> para aislar tus servicios en FreeBSD. Vas a necesitar actualizar la version de FreeBSD de tus jails de vez en cuando.</p>
<p>Bastille nos ayuda a hacer esa actualizacion de manera facil. Vamos a ver el paso a paso para hacerlo.</p>
<hr />
<h2 id="revisar-la-version">Revisar la version</h2><p>Primero ingresaremos a nuestro Jail y veremos que version tenemos.</p>
<p>Para ingresar a nuestro Jail:</p>
<pre><code># bastille console SERVICE</code></pre><p>Para ver la version que esta ejecutando:</p>
<pre><code>-&gt; uname -r</code></pre><p>Ahora podemos ir a la pagina oficial de FreeBSD y revisar si necesitamos una actualizacion: <a href="https://www.freebsd.org/releases/" rel="noopener noreferrer">https://www.freebsd.org/releases/</a></p>
<h1 id="actualizando-jails">Actualizando jails</h1><p>Una vez confimando que necesitemos una actualizacion, vamos a primero descargarla con el comando:</p>
<pre><code># bastille bootstrap XX.x-RELEASE update</code></pre><p>Vamos a reemplazar <code>XX.x</code> por la ultima version (al dia de esta entrada 14.2).</p>
<p>Una vez descargada la nueva version vamos a parar nuestro jail:</p>
<pre><code># bastille stop SERVICE</code></pre><p>Y editaremos el archivo <code>fstab</code> de nuestro jail, ubicado en <code>/usr/local/bastille/jails/SERVICE/</code>.</p>
<p>Usando vim:</p>
<pre><code># vim /usr/local/bastille/jails/SERVICE/fstab</code></pre><p>Y cambiaremos en la primer linea la version de FreeBSD, por ejemplo de 14.0 a 14.2. Y quedaria la primer linea asi:</p>
<pre><code>/usr/local/bastille/releases/14.2-RELEASE /usr.....</code></pre><p>Ahora iniciaremos nuestro jail y lo vamos a actualizar:</p>
<pre><code># bastille start SERVICE
# bastille console SERVICE
-&gt; pkg update
-&gt; pkg upgrade -f</code></pre><p>Una vez terminado reiniciaremos el jail:</p>
<pre><code># bastille restart SERVICE</code></pre><p>Y si entramos de nuevo al jail y ejecuitamos <code>uname -r</code> tendriamos que ver la nueva version de FreeBSD.</p>
<p>Y eso es todo, tenemos nuestro Jail actualizado!</p>
]]></encoded>
      <category>tutorial</category>
      <category>freebsd</category>
      <category>bastillebsd</category>
    </item>
    <item>
      <title>Personalizando Emacs</title>
      <link>https://blog.iagosto.dev/entradas/personalizando-emacs</link>
      <description>&lt;p&gt;Emacs en su versión original (vainilla), siendo honestos tiene un aspecto anticuado. Vamos a hacer algunos ajustes para modernizarlo y optimizarlo.&lt;/p&gt;</description>
      <pubDate>Wed, 05 Feb 2025 20:33:51 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/personalizando-emacs</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Emacs en su versión original (vainilla), siendo honestos tiene un aspecto anticuado. Vamos a hacer algunos ajustes para modernizarlo y optimizarlo.</p>
<hr />
<p>Vamos a presionar <code>C-x C-f</code> y editaremos el archivo <code>~/.emacs</code>.</p>
<p>Al final del archivo iremos agregando los siguientes comandos:</p>
<h3 id="aumentar-la-memoria">Aumentar la memoria</h3><p>Para que Emacs no tenga problemas de rendimiento agregaremos las siguientes lineas:</p>
<pre><code>(setq read-process-output-max (* 1024 1024))
(setq gc-cons-threshold 100000000)</code></pre><h3 id="puliendo-la-interfaz">Puliendo la interfaz</h3><p>Hay algunos elementos poco útiles que ademas hacen que la interfaz luzca poco atractiva. Vamos a hacerle algunos cambios:</p>
<pre><code>;; Oculta la barra de herramientas
(tool-bar-mode 0)
;; Oculta el scroll
(scroll-bar-mode 0)
;; Elimina el modo pestañas
(tab-bar-mode 0)
;; Elimina el menu de opciones
(menu-bar-mode 0)</code></pre><h3 id="ajustes-útiles">Ajustes útiles</h3><p>Vamos a agregar algunos ajustes que le darán a Emacs una mejor vista:</p>
<pre><code>;; Muestra la barra de números de linea
(global-display-line-numbers-mode 1)

;; Autocompleta el cierre de paréntesis, corchetes, llaves y comillas ()[]{}
(electric-pair-mode 1)

;; Para marcar la linea de edición
(global-hl-line-mode 1)

;; Al seleccionar texto lo elimina si tecleamos
(delete-selection-mode 1)

;; Cambia los tab por espacios
(setq-default indent-tabs-mode nil)
;; Configura el tab a 2 espacios
(setq tab-width 2)</code></pre><h2 id="cambiar-el-tema-de-emacs">Cambiar el tema de Emacs</h2><p>Ahora podemos guardar los cambios anteriores y reiniciar Emacs. Con eso tendremos una interfaz mas limpia.</p>
<p>Ahora podemos elegir un tema e instalarlo. Puedes encontrar un montón de temas en:</p>
<p><a href="https://emacsthemes.com/" rel="noopener noreferrer">https://emacsthemes.com/</a></p>
<p>Personalmente me gusta el tema <code>catppuccin-theme</code>: <a href="https://emacsthemes.com/themes/catppuccin-theme.html" rel="noopener noreferrer">https://emacsthemes.com/themes/catppuccin-theme.html</a></p>
<p>Para instalarlo tecleamos <code>M-x</code> y escribimos <code>package-install</code> y después <code>catppuccin-theme</code>.</p>
<p>Ahora volvemos abrir nuestro archivo <code>.emacs</code> y añadimos:</p>
<pre><code>(setq catppuccin-flavor 'frappe)
(load-theme 'catppuccin)</code></pre><p>Puedes cambiar para Catppuccin el sabor <code>frappe</code> por <code>latte</code>, <code>mocha</code> y <code>macchiato</code>.</p>
<p>Para poder alternar entre los temas instalados puedes usar el comando <code>customize-themes</code>.</p>
<hr />
<p>Y eso es todo por el momento. Ahora nuestro Emacs, deberá lucir mas moderno y atractivo.</p>
]]></encoded>
      <category>emacs</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Como actualizar FreeBSD</title>
      <link>https://blog.iagosto.dev/entradas/como-actualizar-freebsd</link>
      <description>&lt;p&gt;FreeBSD es un sistema operativo muy robusto y estable. Sobre todo hablando de servidores.&lt;/p&gt;
&lt;p&gt;Para que nuestra instalación de FreeBSD trabaje actualizado y con los últimos parches de seguridad, es necesario actualizarlo manualmente de vez en cuando.&lt;/p&gt;
&lt;p&gt;En este tutorial, les mostrare como actualizar los paquetes en FreeBSD, instalar parches de seguridad e instalar actualizaciones del sistema operativo.&lt;/p&gt;</description>
      <pubDate>Thu, 10 Oct 2024 05:16:22 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/como-actualizar-freebsd</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>FreeBSD es un sistema operativo muy robusto y estable. Sobre todo hablando de servidores.</p>
<p>Para que nuestra instalación de FreeBSD trabaje actualizado y con los últimos parches de seguridad, es necesario actualizarlo manualmente de vez en cuando.</p>
<p>En este tutorial, les mostrare como actualizar los paquetes en FreeBSD, instalar parches de seguridad e instalar actualizaciones del sistema operativo.</p>
<hr />
<p>Rápidamente para actualizar los paquetes del sistema tenemos que ejecutar 2 comandos.</p>
<ol>
<li>Actualizar los datos del repositorio:</li>
</ol>
<pre><code># pkg update</code></pre><ol>
<li>Actualizar los paquetes nuevos:</li>
</ol>
<pre><code># pkg upgrade</code></pre><p>Aquí nos mostrara la lista de paquetes a actualizar. Y nos confirmara si queremos actualizar los paquetes.</p>
<p>Y así de fácil ya tenemos los paquetes del sistema actualizados.</p>
<h2 id="instalando-parches-de-seguridad">Instalando parches de seguridad</h2><p>Los parches de seguridad, son actualizaciones rápidas. Que normalmente corrigen errores o vulnerabilidades del sistema. Por lo que es recomendable hacer estos pasos de vez en cuando para asegurarnos de tener un sistema seguro. Sobre todo si utilizas FreeBSD como servidor.</p>
<p>Podemos revisar la versión actual que tenemos ejecutando el comando:</p>
<pre><code>% uname -a</code></pre><p>Esto nos devolverá algo como <code>FreeBSD freebsd 1X.X-RELEASE-pX</code>.</p>
<p>Después obtendremos las actualizaciones con el siguiente comando:</p>
<pre><code># freebsd-update fetch</code></pre><p>Esto podría tardar un rato en lo que descarga los parches.</p>
<p>Una vez terminado podemos instalarlas:</p>
<pre><code># freebsd-update install</code></pre><p>Al igual solo seria esperar por las actualizaciones y reiniciar al terminar.</p>
<p>Al final podrán ejecutar otra vez el comando <code>uname -a</code> y verán que el numero después de la <code>p</code> aumento.</p>
<h2 id="actualizando-la-versión-de-freebsd">Actualizando la versión de FreeBSD</h2><p>Ya por ultimo si queremos actualizar la versión de FreeBSD. Tenemos que hacer un proceso mas manual. Y ver si existen actualizaciones para nuestra versión en su pagina:</p>
<p><a href="https://www.freebsd.org/releases/" rel="noopener noreferrer">https://www.freebsd.org/releases/</a></p>
<p>Aquí en la parte de <code>Production</code> veremos las versiones mas actuales. Así que podemos ver que versión vamos a instalar.</p>
<p>Por ejemplo:</p>
<blockquote>
<p>Si tienes la versión 13.1-RELEASE y en la pagina existe la versión 13.4-RELEASE podemos actualizar</p>
<p>También podríamos saltar de versión mayor. Es decir, si tenemos la versión 13.0-RELEASE, podemos actualizar a la 14.1-RELEASE.</p>
</blockquote>
<p>Una vez identificada la actualización la descargaremos con el siguiente comando:</p>
<pre><code># freebsd-update update -r 1X.X-RELEASE</code></pre><p>El sistema podría pedirnos algunas confirmaciones en el proceso.</p>
<p>Después ya podríamos instalarla:</p>
<pre><code># freebsd-update install</code></pre><p>Después de esto dependiendo la actualización nos pida reiniciar y ejecutar este mismo comando para terminar de actualizar.</p>
<p>Pero si es importante <strong>leer las instrucciones al finalizar la instalación</strong>. Sino hay mas por hacer, el mensaje final sera <code>done</code> o <code>hecho</code>.</p>
<hr />
<p>Ahora ya sabemos como mantener actualizado nuestro sistema. Es importante no abandonar las actualizaciones, ya que podría causar que a largo plazo sea mas difícil de actualizar, además de que nuestro equipo podría ser vulnerable a fallos.</p>
]]></encoded>
      <category>tutorial</category>
      <category>freebsd</category>
    </item>
    <item>
      <title>Fish una shell facil de usar</title>
      <link>https://blog.iagosto.dev/entradas/fish-una-shell-facil-de-usar</link>
      <description>&lt;p&gt;&lt;strong&gt;Fish&lt;/strong&gt; es una Shell re-escrita en Rust. Que ya viene supercargada por default. Es muy "customizable".&lt;/p&gt;</description>
      <pubDate>Thu, 26 Sep 2024 03:28:00 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/fish-una-shell-facil-de-usar</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p><strong>Fish</strong> es una Shell re-escrita en Rust. Que ya viene supercargada por default. Es muy "customizable".</p>
<hr />
<p>Existen diferentes "Shell" que puedes usar en los sistemas Unix. Entre ellos esta <code>bash</code> comúnmente en Linux, <code>zsh</code> en MacOs y <code>csh</code> usado en FreeBSD. Entre otros.</p>
<p>Estos Shell por si solos no son muy intuitivos. Por lo que hay que supercargarlos con paquetes extras, como <code>oh-my-zsh</code> y <code>oh-my-bash</code>. Que ayudan a mejorar la experiencia de usuario.</p>
<p>Fish ya viene con esto incluido, sin modificar ya ofrece mucho mas que el resto de alternativas. Una buena opción si estas iniciando en Linux o en el uso de la terminal.</p>
<p><a href="https://fishshell.com/" rel="noopener noreferrer">https://fishshell.com/</a></p>
<p>Algunas características:</p>
<ul>
<li>Auto-completado por tu historial</li>
<li>Auto-completado por sugerencia</li>
<li>Configuración de abreviaciones</li>
<li>Fácil de personalizar</li>
<li>Configuración por GUI web</li>
</ul>
<h2 id="instalación">Instalación</h2><p><strong>Fish</strong> esta disponible para casi cualquier sistema operativo así que para instalarlo deberemos usar el gestor de paquete de nuestro sistema operativo.</p>
<p>Ubuntu/Debian:</p>
<pre><code># apt install fish</code></pre><p>Arch Linux:</p>
<pre><code># pacman -S fish</code></pre><p>Fedora:</p>
<pre><code># dnf install fish</code></pre><p>FreeBSD:</p>
<pre><code># pkg install fish</code></pre><p>MacOS:</p>
<pre><code># brew install fish</code></pre><h2 id="uso">Uso</h2><p>Una vez instalado podemos empezar a usarlo y probar algunas de sus características. </p>
<p>Basta con ejecutar en la terminal el comando <code>fish</code>. Esto ejecutara un nuevo prompt y ¡Estaremos dentro de Fish!</p>
<p>Ahora podemos escribir cualquier comando, e inmediatamente veremos que Fish nos auto-completara. Puede ser un comando que ya hayamos usado anteriormente o un comando muy común como sugerencia. Para aceptarlo bastara presionar la tecla <code>tab</code>.</p>
<h2 id="atajos">Atajos</h2><p>Por defecto Fish cuenta con algunos atajos al estilo <em>Emacs</em>. Por lo que te podrían resultar familiares:</p>
<table>
<thead>
<tr>
<th>Combinación</th>
<th>Acción</th>
</tr>
</thead>
<tbody><tr>
<td align="left"><code>Home</code> o <code>Control+a</code></td>
<td align="center">Mueve el cursor al inicio del la linea</td>
</tr>
<tr>
<td align="left"><code>End</code> o <code>Control+e</code></td>
<td align="center">Mueve el cursor al final del la linea</td>
</tr>
<tr>
<td align="left"><code>Up</code> o <code>Control+p</code></td>
<td align="center">Navega hacia atrás en el historial de comandos</td>
</tr>
<tr>
<td align="left"><code>Down</code> o <code>Control+n</code></td>
<td align="center">Navega hacia adelante en el historial de comandos</td>
</tr>
<tr>
<td align="left"><code>Alt+Backspace</code></td>
<td align="center">Elimina la ultima palabra detrás del cursor</td>
</tr>
<tr>
<td align="left"><code>Control+k</code></td>
<td align="center">Elimina a partir del cursor hasta el final de la linea</td>
</tr>
<tr>
<td align="left"><code>Alt+/</code></td>
<td align="center">Deshace el ultimo cambio</td>
</tr>
<tr>
<td align="left"><code>Control+w</code></td>
<td align="center">Corta la ultima linea detrás del cursor</td>
</tr>
<tr>
<td align="left"><code>Control+y</code></td>
<td align="center">Pega lo ultimo copiado</td>
</tr>
</tbody></table>
<p>Entre un montón mas de combinaciones. Que ademas puedes configurar para que sean mas parecidas a <code>Vi/Vim</code> para los que están acostumbrados. Puedes encontrar mas información en:</p>
<p><a href="https://fishshell.com/docs/current/interactive.html" rel="noopener noreferrer">https://fishshell.com/docs/current/interactive.html</a></p>
<h2 id="personalización">Personalización</h2><p>Fish ofrece una personalización fácil para nuestro "Prompt" y para la gama de colores en la consola.</p>
<p>Para configurar lo vía GUI en su versión web, solo tenemos que ejecutar el comando <code>fish_config</code>. En automático se abrirá una ventana en el navegador, y desde ahí podremos configurar varias cosas sin necesidad de programar o modificar algún archivo.</p>
<p>La otra forma rápida es mediante la misma consola. Con los siguientes comandos:</p>
<pre><code>$ fish_config prompt show      // Nos mostrara la lista de prompt's

$ fish_config prompt choose PROMPT // Para seleccionar un prompt

$ fish_config prompt save // Para guardar los cambios</code></pre><p>Y para los temas de colores:</p>
<pre><code>$ fish_config theme show      // Nos mostrara la lista de temas

$ fish_config theme choose THEME // Para seleccionar un tema

$ fish_config theme save // Para guardar los cambios</code></pre><hr />
<p>¿Que te parece Fish? Si te ha gustado y quieres usarlo como tu Shell principal. Puedes hacerlo con el siguiente comando:</p>
<pre><code>$ chsh</code></pre><p>Te pedirá tu contraseña y luego preguntara por la shell que quieres, ahí podrás <code>/usr/bin/fish</code>.</p>
<p><strong>¿Tu que Shell configurada tienes en tu terminal?</strong></p>
]]></encoded>
      <category>fish</category>
      <category>shell</category>
      <category>tutorial</category>
      <category>review</category>
    </item>
    <item>
      <title>Como instalar y manejar paquetes en Emacs</title>
      <link>https://blog.iagosto.dev/entradas/como-instalar-y-manejar-paquetes-en-emacs</link>
      <description>&lt;p&gt;Ya vimos como Emacs por si solo puede servirnos como un editor de texto, un entorno de programación, corrector ortográfico y otras cosas por si solo.&lt;/p&gt;
&lt;p&gt;Pero eso no es todo. Podemos &lt;em&gt;supercargarlo&lt;/em&gt; agregando "paquetes". Que seria como extensiones para nuestro Emacs y podemos tener mas funcionalidades.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Aug 2024 03:48:44 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/como-instalar-y-manejar-paquetes-en-emacs</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Ya vimos como Emacs por si solo puede servirnos como un editor de texto, un entorno de programación, corrector ortográfico y otras cosas por si solo.</p>
<p>Pero eso no es todo. Podemos <em>supercargarlo</em> agregando "paquetes". Que seria como extensiones para nuestro Emacs y podemos tener mas funcionalidades.</p>
<hr />
<p>Emacs viene integrado con un gestor de paquetes que nos ayuda de una manera fácil instalar, actualizar, ver o remover paquetes.</p>
<p>Esto puede ser por medio de nuestro archivo de configuración, o por medio de comandos dentro de Emacs.</p>
<p>Para iniciar podemos usar algunos comandos, tecleando <code>M-x</code> y ahí podremos teclear:</p>
<ul>
<li><code>list-packages</code> - Con este comando podremos listar todos los paquetes disponibles</li>
<li><code>package-install</code> - Podremos instalar un paquete, indicando el nombre</li>
<li><code>package-delete</code> - Con este comando podemos eliminar un paquete instalado</li>
</ul>
<p>Usando estos comandos, Emacs en automático actualizara nuestro archivo de configuración.</p>
<p>Por si solo Emacs solo tiene incluido el repositorio "Elpa". Que es el oficial de <strong>GNU</strong>.</p>
<h2 id="agregando-el-repositorio-melpa">Agregando el repositorio MELPA</h2><p>"Melpa" es un repositorio no oficial, donde la comunidad agrega sus propios paquetes y los mantienen en constante actualización.</p>
<p>Para agregarlo es muy sencillo, basta con seguir estos pasos.</p>
<h3 id="1-modificar-nuestro-archivo-de-configuración">1. Modificar nuestro archivo de configuración</h3><p>Vamos a modificar el archivo de configuración de Emacs, podría ser el archivo <code>~/.emacs.d/init.el</code> o  el archivo <code>~/.emacs</code>, en este caso usaremos la 2da opción.</p>
<p>Con nuestro editor preferido o el mismo Emacs presionando <code>C-x C-f</code> abriremos el archivo <code>~/.emacs</code>. Y al inicio de el agregaremos el siguiente texto:</p>
<pre><code>(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)</code></pre><p>Después guardamos y reiniciamos Emacs.</p>
<h3 id="2-actualizamos-los-repositorios">2. Actualizamos los repositorios</h3><p>Después de reiniciar Emacs. Vamos a presionar <code>M-x</code> y ejecutaremos el comando <code>package-refresh-contents</code>.</p>
<p>Después de eso si ejecutamos el comando <code>M-x</code> <code>list-packages</code> podremos ver que ahora existen muchos mas paquetes. Algunos dicen "gnu", otros "elpa" y ahora tendremos otros que dicen <code>melpa</code>. De esta manera podemos confirmar que el repositorio se agrego correctamente.</p>
<h2 id="paquetes-populares">Paquetes populares</h2><p>Según para lo que vayas a usar Emacs. Existen muchos paquetes básicos que no deberían faltar en ninguna instalación.</p>
<h3 id="lenguajes-básicos">Lenguajes básicos</h3><p>Para que Emacs pueda detectar que tipo de archivo estas editando, algunos paquetes fundamentales son:</p>
<ul>
<li><code>markdown-mode</code> - Para poder modificar archivos markdown</li>
<li><code>json-mode</code> - Para archivos de tipo JSON</li>
<li><code>yaml-mode</code> - Para archivos de configuración ".yml"</li>
<li><code>plantuml-mode</code> - Para editar diagramas y archivos tipo "plantuml"</li>
<li><code>web-mode</code> - Para editar archivos "js", "html" y "css"</li>
</ul>
<h3 id="herramientas-útiles">Herramientas útiles</h3><p>Existen muchas herramientas útiles que de seguro quieres tener en Emacs:</p>
<ul>
<li><code>company-mode</code> - Este paquete sirve para agregar un auto-completado en Emacs</li>
<li><code>flyspell</code> - Es un corrector ortográfico que nos ayudara a revisar errores en tiempo real</li>
<li><code>eglot</code> - Cliente LSP, útil si utilizar Emacs para programar</li>
</ul>
<h3 id="personalización">Personalización</h3><p>Emacs es muy personalizable, así que existen muchos paquetes que nos ayudan a modificar las cosas que no nos gusten de Emacs:</p>
<ul>
<li><code>catppuccin-theme</code> - Un tema inspirado en "Catppuccin"</li>
<li><code>neotree</code> - Un paquete para poder visualizar el directorio donde te encuentras</li>
<li><code>all-the-icons</code> - Agrega iconos a Emacs, compatible con la mayoría de paquetes</li>
<li><code>magit</code> - Un increíble paquete para la gestión de repositorios Git.</li>
</ul>
<hr />
<p>Si aun no conoces Emacs y estas interesado en aprender mas sobre este poderoso editor de texto. Te invito a leer mi articulo de introducción a Emacs:
<a href="https://blog.iagosto.dev/entradas/primeros-pasos-con-emacs" rel="noopener noreferrer">https://blog.iagosto.dev/entradas/primeros-pasos-con-emacs</a></p>
<p>¿Que otros paquetes interesantes conocer para Emacs?</p>
]]></encoded>
      <category>emacs</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Jails en FreeBSD con Bastille</title>
      <link>https://blog.iagosto.dev/entradas/jails-en-freebsd-con-bastille</link>
      <description>&lt;p&gt;En el mundo de la administración de sistemas. Se ha hecho muy popular el aislar servicios. Esto ayuda a tener una mejor seguridad y un mejor manejo de servicios, poder darle mantenimiento por separado sin necesidad de afectar algún otro servicio.&lt;/p&gt;
&lt;p&gt;Conocemos herramientas como &lt;em&gt;Docker&lt;/em&gt; de las mas populares actualmente. Sin embargo, FreeBSD ha incorporado desde hace mas de 20 años en su versión 4.0 (actualmente 14.1) el concepto de "Jails". Que es un espacio aislado al sistema principal con el que podemos montar servicios de manera segura.&lt;/p&gt;</description>
      <pubDate>Mon, 01 Jul 2024 15:41:03 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/jails-en-freebsd-con-bastille</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>En el mundo de la administración de sistemas. Se ha hecho muy popular el aislar servicios. Esto ayuda a tener una mejor seguridad y un mejor manejo de servicios, poder darle mantenimiento por separado sin necesidad de afectar algún otro servicio.</p>
<p>Conocemos herramientas como <em>Docker</em> de las mas populares actualmente. Sin embargo, FreeBSD ha incorporado desde hace mas de 20 años en su versión 4.0 (actualmente 14.1) el concepto de "Jails". Que es un espacio aislado al sistema principal con el que podemos montar servicios de manera segura.</p>
<hr />
<p>Al día de hoy las Jails de FreeBSD son comparables y hasta superiores en algunos aspectos a los contenedores de Docker.</p>
<p>Aquí veremos como empezar a utilizar Jails en FreeBSD gracias a <strong>Bastille</strong>, que es una herramienta para manejar nuestras Jails de una forma muy rápida y muy parecida también a Docker. Por lo que si ya lo dominas no te costara entender los comandos de Bastille.</p>
<h2 id="preparación---actualizar-el-sistema-opcional">Preparación - Actualizar el sistema (opcional)</h2><p>Aunque es opcional. Bastille recomienda actualizar nuestro sistema para garantizar la seguridad en nuestras Jails.</p>
<p>Para ello ejecutaremos lo siguientes comandos:</p>
<pre><code>freebsd-update fetch
freebsd-update install</code></pre><p>Terminada la actualización reiniciaremos el sistema:</p>
<pre><code># reboot</code></pre><h2 id="instalación">Instalación</h2><p>La instalación es muy fácil. Basta con ejecutar los siguientes comandos.</p>
<pre><code># pkg update
# pkg install bastille</code></pre><p>También necesitaremos el paquete <em>bootstrap</em>:</p>
<pre><code># pkg install bootstrap</code></pre><p>Si queremos que Bastille inicie junto a nuestro sistema, ejecutaremos las siguientes lineas:</p>
<pre><code># sysrc bastille_enable=YES
# sysrc bastille_rcorder=YES</code></pre><h2 id="configuración-de-red">Configuración de red</h2><p>Como en Docker. Las Jails de FreeBSD son como pequeñas maquinas, por lo que requieren tener una IP virtual y una conexión de tipo puente (bridge) o NAT. En este caso configuraremos una red NAT para Bastille.</p>
<p>Primero crearemos la interfaz que se utilizara con los siguientes comandos:</p>
<pre><code># sysrc cloned_interfaces+=lo1
# sysrc ifconfig_lo1_name="bastille0"
# service netif cloneup</code></pre><p>Ahora crearemos nuestras reglas de redirección de red. Crearemos o modificaremos el archivo <code>/etc/pg.conf</code> con el siguiente contenido:</p>
<pre><code>ext_if="vtnet0"

set block-policy return
scrub in on $ext_if all fragment reassemble
set skip on lo

table &lt;jails&gt; persist
nat on $ext_if from &lt;jails&gt; to any -&gt; ($ext_if:0)
rdr-anchor "rdr/*"

block in all
pass out quick keep state
antispoof for $ext_if inet
pass in inet proto tcp from any to any port ssh flags S/SA keep state</code></pre><blockquote>
<p>Importante: Actualizar la linea <em>ext_if="vtnet0"</em> y reemplazar vtnet0 por la interfaz de tu red externa.</p>
</blockquote>
<p>Por ultimo iniciaremos el servicio <strong>PF</strong>:</p>
<pre><code># sysrc pf_enable=YES
# service pf start</code></pre><h2 id="creando-jails-con-bastille">Creando Jails con Bastille</h2><p>Ahora ya podemos crear Jails. Lo primero que haremos sera desempaquetar la versión mas reciente de FreeBSD. Al día de hoy la versión es la <em>14.1</em>:</p>
<pre><code># bastille bootstrap 14.1-RELEASE</code></pre><p>Ahora ya podemos crear nuestra primera Jail:</p>
<pre><code># bastille create NAME 14.1-RELEASE IP</code></pre><p>Donde el "NAME" sera el nombre que quieras ponerle a tu Jail.
Y la "IP" puede ser entre <code>10.0.0.0/8</code>, <code>172.16.0.0/12</code> y <code>192.168.0.0/16</code>.</p>
<p>Por ejemplo:</p>
<pre><code># bastille create myJail 14.1-RELEASE 10.0.0.1</code></pre><p>Podemos ver nuestras Jails que están activas con el comando:</p>
<pre><code># bastille list</code></pre><p>Para detener un Jail:</p>
<pre><code># bastille stop NAME</code></pre><p>Para iniciar un Jail:</p>
<pre><code># bastille start NAME</code></pre><p>Para ver todos los comandos solo ejecuta:</p>
<pre><code># bastille</code></pre><h2 id="manipulando-nuestro-jail">Manipulando nuestro Jail</h2><p>Para instalar paquetes, iniciar servicios o manipular la maquina de nuestro Jail podemos ejecutar los siguientes comandos:</p>
<pre><code>;; Instalar un paquete al contenedor
# bastille pkg NAME install PACKAGE
;; Ejemplo
# bastille pkg myJail install htop

;; Ver los procesos de un Jail
# bastille htop NAME

;; Iniciar un servicio dentro del Jail
# bastille service NAME SERVICE start
;; Ejemplo
# bastille service myJail sshd start

;; Ejecutar un comando arbitrario:
# bastille cmd NAME COMMAND</code></pre><p>Y si quieres manipular todo desde la terminal interna puedes entrar con el comando:</p>
<pre><code># bastille console NAME</code></pre><h2 id="redireccionando-conexiones">Redireccionando conexiones</h2><p>Con tus Jail activas puedes comunicarte directamente a través de su IP. Pero si quieres que algún puerto o servicio sea expuesto (a la interfaz configurada en pasos anteriores). Hará falta redireccionar los puertos.</p>
<p>Para ello Bastille incorpora el comando "rdr":</p>
<pre><code># bastille rdr NAME [tcp/udp] HOST_PORT JAIL_PORT</code></pre><p>Si por ejemplo queremos que nuestra maquina muestre un sitio web en el puerto 80 y nuestro Jail ejecuta la web en el puerto 8000. Entonces ejecutaremos:</p>
<pre><code># bastille rdr myJail tcp 80 8000</code></pre><p>Podemos ver las redirección que tiene activa un Jail con el comando:</p>
<pre><code># bastille rdr NAME list</code></pre><p>Y limpiar las redirecciones con:</p>
<pre><code># bastille rdr NAME clear</code></pre><hr />
<p>¡Y eso es todo! Ahora ya podemos orquestar y montar los servicios que queramos en Jails gracias a Bastille.</p>
<p>Pronto subiré algunos tutoriales montando servicios populares como <em>Nextcloud, servidor Jabber, Gotosocial, etc</em>. ¿Cual te gustaría aprender a montar?</p>
]]></encoded>
      <category>tutorial</category>
      <category>freebsd</category>
      <category>bastille</category>
      <category>jails</category>
    </item>
    <item>
      <title>Guia Diet Pi en Raspberry Pi</title>
      <link>https://blog.iagosto.dev/entradas/guia-diet-pi-en-raspberry-pi</link>
      <description>&lt;p&gt;Diet-pi es un sistema muy ligero para convertir tu Raspberry PI en lo que tu quieras. Un ad-blocker para tu red, una nube local, un centro multimedia, un centro de videojuegos, un servidor PHP para tu blog, o cualquier otra cosa. De una manera automatizada.&lt;/p&gt;</description>
      <pubDate>Thu, 13 Jun 2024 17:03:58 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/guia-diet-pi-en-raspberry-pi</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Diet-pi es un sistema muy ligero para convertir tu Raspberry PI en lo que tu quieras. Un ad-blocker para tu red, una nube local, un centro multimedia, un centro de videojuegos, un servidor PHP para tu blog, o cualquier otra cosa. De una manera automatizada.</p>
<hr />
<p>Diet-pi ofrece un sistema completo. Con el que es muy fácil administrar tu Raspberry PI y todos los servicios que quieras ejecutar. Entre ellos:</p>
<ul>
<li>Pi-hole: Un ad-blocker para filtrar anuncios en toda tu red.</li>
<li>Kodi: Centro multimedia para ver películas y series.</li>
<li>Emby: Un servidor multimedia, se puede acceder desde cualquier dispositivo (recomendado).</li>
<li>Jellyfin: Otro servidor multimedia.</li>
<li>CUPS: Controlador de impresoras en la red.</li>
<li>qBittorrent y Transmission: Descarga torrents en tu Raspberry de manera remota.</li>
<li>Sonarr: Descarga series de TV en automático.</li>
<li>Raddar: Descarga películas de manera automática.</li>
<li>YaCy: Buscador web descentralizado.</li>
<li>Owncloud y Nextcloud: Nubes personales y locales.</li>
</ul>
<p>Y un montón de servicios mas. Puedes ver todos en este enlace; <a href="https://dietpi.com/docs/software/" rel="noopener noreferrer">https://dietpi.com/docs/software/</a></p>
<h2 id="instalación">Instalación</h2><p>La instalación es muy fácil, yo personalmente recomendaría una tarjeta SD de por lo menos 8GB y un disco duro externo USB (si lo vas a usar como servidor multimedia, juegos o nube).</p>
<ol>
<li><p>Lo primero es descargar la ISO según tu dispositivo: <a href="https://dietpi.com/#download" rel="noopener noreferrer">https://dietpi.com/#download</a></p>
</li>
<li><p>Una vez descargado. Hay que conectar la tarjeta SD e identificar el dispositivo. En GNU/Linux y BSD puedes hacerlo con <code>gparted</code>. En Windows y MacOS puedes hacerlo desde la herramienta de discos.</p>
</li>
</ol>
<p>Una vez identificado el dispositivo hay que abrir la terminal y clonar el ISO a la tarjeta SD. En GNU/Linux, BSD y MacOS:</p>
<pre><code>$ xz -d Dietpi.img.xz
# dd if=Dietpi.img of=/dev/sdX bs=10M</code></pre><p>Donde <code>sdX</code> sera tu unidad SD (puede ser <code>sdb</code>, <code>sdc</code>, <code>sdd</code>, ..).</p>
<p>Si no te gusta usar la terminal puedes utilizar también <code>Balena</code> disponible en todos los SO (incluido Windows); <a href="https://etcher.balena.io/" rel="noopener noreferrer">https://etcher.balena.io/</a></p>
<h2 id="primeros-pasos">Primeros pasos</h2><p>Si quieres modificar cosas como el <code>hostname</code> y la contraseña <code>root</code> puedes hacerlo accediendo a la SD y modificando el archivo <code>dietpi.txt</code>.</p>
<p>Una vez conectada la tarjeta SD. Ya podemos encender la Raspberry Pi. Donde el primer inicio de sesión sera con:</p>
<pre><code>User: root
Password: dietpi</code></pre><h3 id="opcional-creación-de-usuario">(Opcional) Creación de usuario</h3><p>Para crear un usuario nuevo que no sea el <code>root</code>. Podemos ejecutar el siguiente comando:</p>
<pre><code># adduser USUARIO</code></pre><p>Donde <code>USUARIO</code> sera el nombre que quieras para tu usuario personal.</p>
<h3 id="actualizando-el-software">Actualizando el software</h3><p>Antes de instalar algo. Es recomendable hacer una actualización, tanto de Diet Pi como del software del sistema.</p>
<p>Para actualizar ejecutaremos los siguientes comandos:</p>
<p>Para actualizar Diet Pi</p>
<pre><code># dietpi-update </code></pre><p>Para actualizar el software:</p>
<pre><code># apt update
# apt upgrade</code></pre><h3 id="administrar-software">Administrar software</h3><p>Para instalar algún servicio o eliminarlo. Utilizaremos el comando:</p>
<pre><code># dietpi-software</code></pre><p>Este comando nos abrirá un menú <code>TUI</code> donde lo podremos manejar con las flechas del teclado y la tecla <code>Enter</code> o <code>Return</code>. ¡Muy fácil!</p>
<h3 id="configurar-raspberry">Configurar Raspberry</h3><p>Diet Pi tiene incorporada una herramienta para configurar tu Raspberry, configuración de Ethernet, wifi, bluetooth, audio, pantalla, lenguaje, etc.</p>
<p>Para iniciar el menú, ejecuta el comando:</p>
<pre><code># dietpi-config</code></pre><h3 id="necesitas-algo-mas">¿Necesitas algo mas?</h3><p>Si quieres explorar todas las opciones de Diet Pi. Como copias de seguridad, auto arranque, control de leds, tareas cron y mas. Existe un menú donde encontraras cualquier acción que quieras hacer.</p>
<p>Ejecuta el comando:</p>
<pre><code># dietpi-launcher</code></pre><hr />
<p>Con eso ya tienes un Raspberry Pi. Lista para ser usada como mas prefieras. En próximas entradas explicare como configurar fácilmente algunos servicios. Entre ellos:</p>
<ul>
<li>Emby: Servidor multimedia</li>
<li>Nextcloud: Nube en casa</li>
<li>Pi-hole: Bloqueador de anuncios para toda tu red</li>
</ul>
<p>¿Necesitas ayuda con algún servicio? Escríbeme y puedo ayudarte con ello:</p>
<p><a href="https://blog.iagosto.dev/acerca#contacto" rel="noopener noreferrer">https://blog.iagosto.dev/acerca#contacto</a></p>
]]></encoded>
      <category>Tutorial</category>
      <category>guia</category>
      <category>dietpi</category>
      <category>raspberry</category>
    </item>
    <item>
      <title>Instalar PostgreSQL en FreeBSD</title>
      <link>https://blog.iagosto.dev/entradas/instalar-postgresql-en-freebsd</link>
      <description>&lt;p&gt;Postgresql es una base de datos relacional que se ha popularizado en los últimos años. Y en este tutorial les mostrare como instalarlo en nuestro sistema &lt;strong&gt;FreeBSD&lt;/strong&gt;, ya sea en el servidor principal o en un "&lt;em&gt;Jail&lt;/em&gt;".&lt;/p&gt;</description>
      <pubDate>Mon, 06 May 2024 23:30:52 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/instalar-postgresql-en-freebsd</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Postgresql es una base de datos relacional que se ha popularizado en los últimos años. Y en este tutorial les mostrare como instalarlo en nuestro sistema <strong>FreeBSD</strong>, ya sea en el servidor principal o en un "<em>Jail</em>".</p>
<hr />
<h2 id="requerimientos">Requerimientos:</h2><p>Tener instalado <code>pkg</code>. Si aun no lo tienes ejecuta el siguiente comando:</p>
<pre><code># pkg install</code></pre><p>Tener actualizado el sistema. Para ello ejecutaremos los comandos:</p>
<pre><code># pkg update
# pkg upgrade</code></pre><h2 id="instalación">Instalación</h2><p>Al día que se escribió este articulo la versión mas reciente de Postgresql en FreeBSD es la versión 16. Por lo que su instalación sera la siguiente:</p>
<pre><code># pkg install postgresql16-server postgresql16-client</code></pre><p>Puedes instalar la versión 14 o 15 replazandolo por el 16.</p>
<p>Inicializar la base de datos con el siguiente comando:</p>
<pre><code># /usr/local/etc/rc.d/postgresql initdb</code></pre><h2 id="arranque">Arranque</h2><p>Para iniciar el servidor de postgres tenemos 2 opciones.</p>
<ol>
<li>Si quieres que postgres inicie en el arranque del sistema:</li>
</ol>
<p>Ejecutar el comando para habilitar el arranque:</p>
<pre><code># sysrc postgresql_enable="YES"</code></pre><p>Y ahora ya podemos iniciar el servicio:</p>
<pre><code># service postgresql start</code></pre><ol>
<li>Si queremos iniciar Postgres manualmente:</li>
</ol>
<p>Iniciamos el servicio con el siguiente comando:</p>
<pre><code># service postgresql onestart</code></pre><p>Y por ultimo verifiquemos que Postgres haya iniciado correctamente con el comando:</p>
<pre><code>$ sockstat -46 | grep 5432</code></pre><h2 id="configuración">Configuración</h2><p>Ahora configuraremos los usuarios de Postgres.</p>
<p>Postgres tiene un sistema de autenticación basado en los usuarios en el sistema. Por lo que al instalar Postgres también se creo un usuario "postgres".</p>
<p>Ahora cambiaremos su contraseña con el comando:</p>
<pre><code># passwd postgres</code></pre><p>Y ahora iniciaremos con la nueva contraseña:</p>
<pre><code># su - postgres</code></pre><p>Desde el usuario de postgres podemos crear mas usuarios y bases de datos:</p>
<pre><code>$ createuser admin
$ createdb foo_db -O admin</code></pre><p>Aquí indicamos que la base de datos <code>foo_db</code> pertenece al usuario <code>admin</code>.</p>
<p>Ahora tenemos que darle una contraseña al usuario <code>admin</code>.</p>
<p>Iniciamos el cliente de Postgres:</p>
<pre><code>$ psql foo_db</code></pre><p>Y dentro lo de consola ejecutaremos las siguiente consultas:</p>
<pre><code>foo_db=# alter role admin with encrypted password 'yourpassword';
foo_db=# grant all privileges on database foo_db to admin;
foo_db=# exit</code></pre><p>Por ultimo reiniciamos nuestro servicio:</p>
<pre><code># service postgresql restart</code></pre><p>Listo, ahora ya podemos iniciar en nuestra base de datos!</p>
<h2 id="permitir-acceso-de-la-red">Permitir acceso de la red</h2><p>Para poder acceder a Postgres desde fuera de <code>localhost</code> haremos las siguientes modificaciones al siguiente archivo.</p>
<p>En <code>/var/db/postgres/data16/postgresql.conf</code>:</p>
<pre><code>listen_addresses = '*'</code></pre><p>Cambiaremos la configuración <code>listen_addresses</code> por <code>'*'</code>.</p>
<p>Y en el archivo <code>/var/db/postgres/data15/pg_hba.conf</code> cambiaremos todos los métodos a <code>md5</code>:</p>
<pre><code># "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5</code></pre><p>Y por ultimo reiniciamos el servicio:</p>
<pre><code># service postgresql restart</code></pre><hr />
<p>Eso es todo. Ahora nos podemos conectar remotamente a nuestro servicio de Postgres con nuestro cliente favorito ya sea <code>pgAdmin</code>, <code>DBeaver</code> o cualquier otro.</p>
]]></encoded>
      <category>postgresql</category>
      <category>freebsd</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Threads en el fediverso - ¿Que consecuencias habrá?</title>
      <link>https://blog.iagosto.dev/entradas/threads-en-el-fediverso--que-consecuencias-habr</link>
      <description>&lt;p&gt;El fediverso consta de varios protocolos de comunicación, y &lt;code&gt;ActivityPub&lt;/code&gt; fue el protocolo seleccionado por Threads. ¿Que consecuencias podría traer al Fediverso la integración de una plataforma privativa? &lt;/p&gt;</description>
      <pubDate>Fri, 22 Mar 2024 15:33:41 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/threads-en-el-fediverso--que-consecuencias-habr</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>El fediverso consta de varios protocolos de comunicación, y <code>ActivityPub</code> fue el protocolo seleccionado por Threads. ¿Que consecuencias podría traer al Fediverso la integración de una plataforma privativa? </p>
<hr />
<h2 id="que-es-threads">Que es Threads</h2><p>Threads es una red social de tipo microblogging propiedad de <code>Meta</code> la misma dueña de Facebook, Whatsapp e Instagram. Cuenta con mas de 100 millones de usuarios y es la competencia directa de Twitter/X tras la adquisición hecha por Elon Musk.</p>
<p>Su funcionalidad es igual a Twitter con la opción de comentar, responder comentarios, compartir y dale a favorito. Cuenta además con un diseño similar a instagram y se requiere una cuenta del mismo para poder usar esta red social. Podríamos decir que es una extensión de Instagram incluso.</p>
<h2 id="quien-es-meta">Quien es Meta</h2><p>Meta es un conglomerado de tecnología que tiene como productos principales servicios de redes sociales y de comunicación. También muy conocida por el escandalo de Cambridge Analytica en donde esta ultima utilizo datos recavados de Facebook para lanzar campanas de manipulación para las elecciones presidenciales de Estados Unidos en 2016.</p>
<p>También ha sido multada en múltiples países por infringir leyes sobre privacidad y seguridad de los datos.</p>
<p>Actualmente Mark Zuckemberg a dicho públicamente durante juicios en Estados Unidos que el modelos de negocio es a través de anuncios. </p>
<p>¿Pero como funciona ese modelo?</p>
<p>La recabacion de millones de datos de usuarios, sobre gustos, sexo, edad, costumbres, rutinas, búsquedas, localización, entre otras cosas mas. Da como resultado el poder segmentar usuarios para poder ofrecer anuncios dirigidos a públicos en específico.</p>
<h2 id="las-bondades-de-activitypub">Las bondades de ActivityPub</h2><p>ActivityPub es un protocolo de comunicación enfocada a redes sociales de manera descentralizada. Por lo que no depende de ninguna empresa o servicio principal. Este protocolo puede ser implementado por cualquier programa y aplicación. Actualmente se ha integrado en:</p>
<ul>
<li>Mastodon: Red social mas conocida del fediverso con mas de 15 millones de usuarios</li>
<li>Friendica: un software robusto con varios protocolos implementados</li>
<li>PixelFed: Red social de imágenes</li>
<li>Pleroma: Red social de microblogging</li>
<li>Lemmy: Agregador de URL y noticias</li>
<li>Peertube: Servicio de streaming de vídeo</li>
<li>Y muchos mas softwares.</li>
</ul>
<p>La facilidad de comunicación hace que cualquier software se adapte de manera fácil.</p>
<h2 id="threads-se-integra-al-fediverso">Threads se integra al fediverso</h2><p>El día de ayer (21-03-2024) desde la cuenta @<a href="mailto:zuck@threads.net" rel="noopener noreferrer">zuck@threads.net</a> Mark Zuckemberg mando un estado al fediverso desde Threads con el texto:</p>
<blockquote>
<p>First post in the fediverse! 👋</p>
</blockquote>
<p>Con lo que daba la presentación de la nueva característica de Threads.</p>
<p>Rápidamente tuvo mas de 4 mil likes y mil comentarios (en combinación con Threads y el fediverso).</p>
<h2 id="consecuencias">Consecuencias</h2><p>Ahora que tenemos una noción mas clara. A simple vista no tiene nada de malo que la red social Threads se integre al fediverso, ya que esta utilizando un protocolo abierto. Y no hay manera de negar su acceso.</p>
<p>Aun así seria la primer vez que una empresa de ese tamaño se integra. Por lo que es seguro que habrá consecuencias y debemos estar preparados para ello.</p>
<h3 id="70-millones-vs-15-millones">70 millones vs 15 millones</h3><p>La red social mas grande hasta ayer en el fediverso era Mastodon, que celebraba la llegada de mas de 15 millones de usuarios. Y por la que muchos consideramos un triunfo del protocolo y de esta red social en si.</p>
<p>¿Que implicaría la llegada de 70 millones de usuarios al fediverso?</p>
<h3 id="una-red-mas-lenta">Una red mas lenta</h3><p>Si nos ponemos a pensar que la mayoría de los nodos del fediverso son servidores pequeños mantenidos por personas en sus tiempos libres. La interacción masiva podría hacer que este tipo de nodos tarde mas en responder.</p>
<p>Existe en la mayoría de los softwares que implementan ActivityPub una linea del tiempo "Federada" con la que puedes ver todos los estados de todos los nodos que ese servidor esta recibiendo. Por lo que el simple hecho de aceptar la conexión con <code>threads.net</code> podría implicar el procesamiento de muchísima información, mas de la que muchos servidores pueden aguantar.</p>
<h3 id="cambio-de-clima">Cambio de clima</h3><p>Actualmente en el fediverso la convivencia es mas sana que en otras redes sociales (como Twitter/X) y con ideas muy diferentes enfocadas a la libertad, la seguridad, el software libre, feminismo, entre otras cosas. La llegada de una red de usuarios que provienen de Instagram hará que las conversaciones y los "Thrending" sean muy diferentes.</p>
<p>Quizá se pudiera dar el caso de spam, trolls, usuarios caóticos y conversaciones mas hostiles.</p>
<h3 id="privacidad">Privacidad</h3><p>Definitivamente la privacidad se vera seriamente afectada, donde aun sin tener alguna cuenta de la empresa Meta, nuestros datos podrían llegar a ella. Ya que el protocolo ActivityPub envía los datos a los servidores que tenga registrados. </p>
<p>Claramente esto solo sucede si publicas tus estados como "Públicos". Aun así hasta el día de ayer, la mayoría de nosotros compartíamos sin problemas nuestros estados. Sin temor a que la información llegara a manos equivocadas.</p>
<p>Ahora, podremos seguir siendo trackeados (seguidos) por Meta aun sin estar en ella y donde no tienen que rendir cuentas a nadie sobre que hacen con estos datos, ya que es propio del protocolo.</p>
<p>Sin duda también veremos la llegada de empresas al fediverso, por lo que podríamos encontrarnos las lineas "Federadas" llenas de anuncios y spam.</p>
<h2 id="que-podemos-hacer">Que podemos hacer</h2><p>No todo esta perdido ya que el protocolo nos puede proteger de este tipo de situaciones.</p>
<p>Podemos bloquear la comunicación con el servidor que queramos para no enviar ni recibir datos de ella. Sino eres dueño de tu instancia puedes pedirlo a administrador (claramente si tu cuenta vive en <code>mastodon.social</code> eso no va a pasar).</p>
<p>Otra medida que se puede tomar para evitar que tu información termine en manos equivocadas es:</p>
<ul>
<li>No seguir cuentas de <code>threads.net</code></li>
<li>Desactivar la casilla "Aceptar seguidores automáticamente" para poder controlar quien nos puede seguir</li>
</ul>
<p>De esta manera podríamos contener la mayoría de nuestros datos, pero eso no implica que Threads no pueda leernos del todo.</p>
<p>¿Tu que opinas de esta nueva integración?</p>
]]></encoded>
      <category>noticias</category>
      <category>fediverso</category>
    </item>
    <item>
      <title>Primeros pasos con Emacs</title>
      <link>https://blog.iagosto.dev/entradas/primeros-pasos-con-emacs</link>
      <description>&lt;p&gt;Para los que aun no lo conocen, &lt;code&gt;GNU Emacs&lt;/code&gt; es un editor de texto que se basa en atajos. Por si solo tiene muchas herramientas que te pueden ser útiles. Ya sea para editar algún archivo, escribir, programar y hasta como un organizador.&lt;/p&gt;
&lt;p&gt;En esta primer entrada vamos a ver como iniciar con emacs, los atajos básicos y como ir aprendiendo.&lt;/p&gt;</description>
      <pubDate>Tue, 19 Mar 2024 15:08:59 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/primeros-pasos-con-emacs</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Para los que aun no lo conocen, <code>GNU Emacs</code> es un editor de texto que se basa en atajos. Por si solo tiene muchas herramientas que te pueden ser útiles. Ya sea para editar algún archivo, escribir, programar y hasta como un organizador.</p>
<p>En esta primer entrada vamos a ver como iniciar con emacs, los atajos básicos y como ir aprendiendo.</p>
<hr />
<h2 id="instalación">Instalación</h2><p>Emacs esta disponible para casi cualquier sistema operativo. Por lo que su instalación de manera muy sencilla:</p>
<p><strong>Ubuntu / Debian</strong>:</p>
<pre><code># apt install emacs</code></pre><p><strong>ArchLinux</strong>:</p>
<pre><code># pacman -Sy emacs</code></pre><p><strong>Fedora</strong>:</p>
<pre><code># dnf install emacs</code></pre><p><strong>FreeBSD</strong>:</p>
<pre><code># pkg install emacs</code></pre><p><strong>MacOS</strong>:</p>
<pre><code>$ brew install --cask emacs </code></pre><p><strong>Otros</strong>:</p>
<p>Para otros sistemas operativos Linux podrás instalarlo sea cual sea su gestor de paquetes.</p>
<p>En el caso de Windows puedes descargar la aplicación desde el servidor FTP de GNU: <a href="http://ftp.gnu.org/gnu/emacs/windows/" rel="noopener noreferrer">http://ftp.gnu.org/gnu/emacs/windows/</a></p>
<h2 id="bases-de-emacs">Bases de Emacs</h2><p>Por si solo GNU Emacs puede parecer un programa raro y no queda claro como utilizarse. Podemos utilizar el menú que viene en la parte superior, desde ahí podríamos abrir archivos, guardarlos, usar el mouse, etc. Pero la intención es que se utilicen los atajos de teclado para aumentar la velocidad cuando usas este editor de texto.</p>
<p>A partir de ahora vamos a ver algunos atajos de teclado con una nomenclatura donde:</p>
<table>
<thead>
<tr>
<th>Tecla</th>
<th>Equivalente</th>
<th>Comentario</th>
</tr>
</thead>
<tbody><tr>
<td align="center">Ctrl</td>
<td align="center">C</td>
<td align="center">Para MacOS la tecla <code>Command</code></td>
</tr>
<tr>
<td align="center">Alt</td>
<td align="center">M</td>
<td align="center">Para MacOS la tecla <code>option</code></td>
</tr>
<tr>
<td align="center">SPC</td>
<td align="center">Space</td>
<td align="center">-</td>
</tr>
</tbody></table>
<p>Además el guión medio significa unión de teclas y el espacio significa combinación. Por ejemplo:</p>
<table>
<thead>
<tr>
<th>Atajo emacs</th>
<th>Traduccion</th>
<th>Comentario</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>C-x</code></td>
<td align="center"><code>Ctrl+x</code></td>
<td align="center">Una presión de ambas teclas al mismo tiempo</td>
</tr>
<tr>
<td align="center"><code>C-x s</code></td>
<td align="center"><code>Ctrl+x s</code></td>
<td align="center">Presión al mismo tiempo de <code>Ctrl+x</code> luego presión de <code>s</code></td>
</tr>
<tr>
<td align="center"><code>C-x C-s</code></td>
<td align="center"><code>Ctrl+x Ctrl+s</code></td>
<td align="center">Presión al mismo tiempo de <code>Ctrl+x</code> luego presión de teclas al mismo tiempo de <code>Ctrl+s</code></td>
</tr>
</tbody></table>
<h2 id="atajos-básicos">Atajos básicos</h2><p>Ahora para poder usar GNU Emacs de manera básica aquí esta una lista de atajos junto a sus traducciones.</p>
<table>
<thead>
<tr>
<th>Atajo emacs</th>
<th>Traducción</th>
<th>Acción</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>C-x C-f</code></td>
<td align="center"><code>Ctrl+x Ctrl+f</code></td>
<td align="center">Abrir un archivo</td>
</tr>
<tr>
<td align="center"><code>C-x C-s</code></td>
<td align="center"><code>Ctrl+x Ctrl+s</code></td>
<td align="center">Guardar archivo actual</td>
</tr>
<tr>
<td align="center"><code>C-a</code></td>
<td align="center"><code>Ctrl+a</code></td>
<td align="center">Ir al inicio de la linea</td>
</tr>
<tr>
<td align="center"><code>C-e</code></td>
<td align="center"><code>Ctrl+e</code></td>
<td align="center">Ir al final de la linea</td>
</tr>
<tr>
<td align="center"><code>C-s</code></td>
<td align="center"><code>Ctrl+s</code></td>
<td align="center">Realizar búsqueda de texto</td>
</tr>
<tr>
<td align="center"><code>C-w</code></td>
<td align="center"><code>Ctrl+w</code></td>
<td align="center">Cortar</td>
</tr>
<tr>
<td align="center"><code>M-w</code></td>
<td align="center"><code>Alt+w</code></td>
<td align="center">Copiar</td>
</tr>
<tr>
<td align="center"><code>C-y</code></td>
<td align="center"><code>Ctrl+y</code></td>
<td align="center">Pegar</td>
</tr>
<tr>
<td align="center"><code>C-x u</code></td>
<td align="center"><code>Ctrl+x u</code></td>
<td align="center">Deshacer</td>
</tr>
<tr>
<td align="center"><code>M-%</code></td>
<td align="center"><code>Alt+%</code></td>
<td align="center">Buscar y remplazar</td>
</tr>
<tr>
<td align="center"><code>C-x C-c</code></td>
<td align="center"><code>Ctrl+x Ctrl+c</code></td>
<td align="center">Cerrar emacs</td>
</tr>
</tbody></table>
<p>Con estos comandos podemos ya utilizar emacs como un editor de texto común y corriente. Pero es apenas el inicio, con los días este tipo de comandos se empiezan a memorizar y comienzas a necesitar de mas atajos!</p>
<h2 id="múltiples-archivos">Múltiples archivos</h2><p>Con eglot puedes abrir varios archivos a la vez, cada archivo que abras se denomina "buffer". Para poder cambiar entre buffers (archivos) tenemos los atajos:</p>
<table>
<thead>
<tr>
<th>Atajo emacs</th>
<th>Acción</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>C-x b</code></td>
<td align="center">Cambiar a otro buffer</td>
</tr>
<tr>
<td align="center"><code>C-x C-b</code></td>
<td align="center">Abrir lista de buffers</td>
</tr>
<tr>
<td align="center"><code>C-x k</code></td>
<td align="center">Eliminar un buffer (si hay cambios pendientes te avisara)</td>
</tr>
<tr>
<td align="center"><code>C-x Right</code></td>
<td align="center">Siguiente buffer</td>
</tr>
<tr>
<td align="center"><code>C-x Left</code></td>
<td align="center">Buffer anterior</td>
</tr>
</tbody></table>
<h2 id="múltiples-ventanas">Múltiples ventanas</h2><p>Podemos dividir la pantalla de emacs para poder ver dos (o mas) archivos a la vez, muy útil cuando configuraciones dependen de otros archivos:</p>
<table>
<thead>
<tr>
<th>Atajo emacs</th>
<th>Acción</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>C-x 3</code></td>
<td align="center">Dividir pantalla horizontalmente</td>
</tr>
<tr>
<td align="center"><code>C-x 2</code></td>
<td align="center">Dividir pantalla verticalmente</td>
</tr>
<tr>
<td align="center"><code>C-x 1</code></td>
<td align="center">Quitar todas las divisiones excepto la actual (no elimina buffers)</td>
</tr>
<tr>
<td align="center"><code>C-x 0</code></td>
<td align="center">Quitar división actual (no eliminar el buffer)</td>
</tr>
</tbody></table>
<h2 id="el-kill-ring">El kill-ring</h2><p>GNU Emacs tiene una característica llamada "Kill Ring" con el que todo lo que hayas copiado (M-w) o cortado (C-w) se guarda y puedes utilizarlo para después con el atajo (M-y). Un ejemplo practico.</p>
<blockquote>
<p>Si copiamos un texto con el comando (M-w) el texto "Hola mundo!".
Nuestro kill ring tendrá:</p>
<ul>
<li>Hola mundo!</li>
</ul>
<p>Luego cortamos con el comando (C-w) la palabra "programación"
Nuestro kill ring tendrá</p>
<ul>
<li>programación</li>
<li>Hola mundo!</li>
</ul>
<p>Si volvemos a copiar o cortar cualquier otro texto se agregara al kill ring</p>
<ul>
<li>nuevo texto copiado</li>
<li>programación</li>
<li>Hola mundo!</li>
</ul>
<p>Ahora al intentar pegar el texto con el comando (C-y) pegara en el editor la palabra "nuevo texto copiado"
Pero si utilizamos el Kill Ring con el comando (M-y) cambiara el pegado de la palabra "nuevo texto copiado" por "programación".
Volviendo a usar el comando (M-y) cambiara el pegado de la palabra "programación" por "Hola mundo!".</p>
</blockquote>
<p>Al final el Kill ring tiene un ciclo repetitivo. Al llegar al final se reinicia.</p>
<h2 id="plugins-incorporados">Plugins incorporados</h2><p>Emacs tiene varios plugins ya incorporados que pueden ser de utilidad para cualquiera:</p>
<h3 id="org">Org</h3><p>Org es un modo (mode) de Emacs para edición de texto plano pero con características enriquecidas. En pocas palabras lo que ya hace Markdown pero con muchas mas características como:</p>
<ul>
<li>Seguimiento de tareas (con estatus)</li>
<li>Organizador de tareas por prioridades</li>
<li>Atajos fáciles para tomar notas</li>
<li>Plantillas para toma de notas rápida</li>
</ul>
<p>Entre un montón mas de características, que con un par de plugins mas podemos organizar nuestro calendario, crear nuestro organizador de cerebro (como Notion), ejecutar bloques de código y mas.</p>
<p>Para activarlo basta abrir un archivo con la extensión <code>.org</code>.</p>
<p>En otra entrada hablare de como utilizarlo mas a detalle.</p>
<h3 id="eglot">Eglot</h3><p>Eglot es un plugin para la edición de programas, con características como:</p>
<ul>
<li>Detección de errores</li>
<li>Auto completado</li>
<li>Importación automática (depende el lenguaje de programación)</li>
</ul>
<p>Y todo lo necesario para programar en lenguajes como:</p>
<ul>
<li>Javascript</li>
<li>Python</li>
<li>C</li>
<li>C++</li>
<li>Lisp</li>
</ul>
<p>Y cualquier otro lenguaje (instalando algunos plugins extras).</p>
<hr />
<p>Estos son los primeros pasos para utilizar GNU Emacs. Ahora nos falta empezar a utilizarlo para acostumbrarnos a los atajos y darnos cuenta que ahora somos mas rápidos editando con Emacs.</p>
<p>Después veremos como personalizarlo, darle un "look" mas moderno y bonito. Además de instalar plugins que nos ayudaran a aumentar la productividad y ahorrar tiempo en acciones del día a día.</p>
]]></encoded>
      <category>emacs</category>
      <category>tutorial</category>
      <category>gnu/linux</category>
    </item>
    <item>
      <title>Que es FreeBSD - Un gran sistema operativo</title>
      <link>https://blog.iagosto.dev/entradas/que-es-freebsd--un-gran-sistema-operativo</link>
      <description>&lt;p&gt;FreeBSD es un sistema operativo que actualmente pasa desapercibido por los usuarios de escritorio. Pero que quizá mas de uno este ejecutando ese sistema operativo sin darse cuenta.&lt;/p&gt;</description>
      <pubDate>Tue, 05 Mar 2024 06:28:28 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/que-es-freebsd--un-gran-sistema-operativo</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>FreeBSD es un sistema operativo que actualmente pasa desapercibido por los usuarios de escritorio. Pero que quizá mas de uno este ejecutando ese sistema operativo sin darse cuenta.</p>
<hr />
<p>Para no dar una introducción muy larga resumo; FreeBSD proviene de la familia BSD (Darwin, OpenBSD, NetBSD). Y da inicio en 1993 y sigue estando muy vigente hasta la fecha con el lanzamiento de FreeBSD 14.</p>
<p>Además, esta bajo la licencia BSD, que a diferencia de GNUPL (la licencia de GNU/Linux). Es aun mas permisiva, dejando poder copiar el código, modificarlo, darle uso comercial y no publicar los cambios, además de incluso no mencionar o dar atribución al origen del código.</p>
<p>Este ultimo punto en la clausula de la licencia BSD, da puerta a que muchas compañías han utilizado este sistema operativo para sus propios productos, y así ni siquiera nos hemos dado cuenta de que probablemente estemos ejecutando un sistema basado en FreeBSD en nuestro día a día.</p>
<h2 id="bondades-de-freebsd">Bondades de FreeBSD</h2><p>En este caso me enfocare a las bondades que nos da FreeBSD ejecutándolo para un servidor y una PC de escritorio.</p>
<h3 id="estabilidad">Estabilidad</h3><p>La comunidad es muy minuciosa con los cambios al sistema y rara vez sale algún cambio sin haber sido comprobado que es 100% funcional. Por lo que es muy estable para servidores y sistemas críticos.</p>
<p>También esto nos da la flexibilidad de usarlo en una computadora de escritorio de uso diario como; oficina, trabajo, programación, escuela, etc.</p>
<h3 id="seguridad">Seguridad</h3><p>Este punto también enfocado a servidores, cuenta con un sistema de jaulas (jails) o lo que podríamos llamar hoy en día contenedores. Que es una función integrada desde FreeeBSD 4.0 en el año 2000 (13 años antes de que existiera el concepto. Por ejemplo Docker).</p>
<p>Además de sistemas cortafuegos eficaces y fáciles de configurar (y por supuesto ya integrados desde su instalación).</p>
<h3 id="documentación">Documentación</h3><p>La comunidad en FreeBSD es bastante activa, por lo que si no encuentras algo en su documentación oficial, probablemente lo encuentres en el foro de FreeBSD donde probablemente alguien ya pregunto lo que estas buscando.</p>
<h2 id="sistemas-basados-en-freebsd-que-probablemente-ejecutas">Sistemas basados en FreeBSD que probablemente ejecutas</h2><p>Con lo antes mencionado y sobre todo con lo permisiva que es la licencia BSD. Muchas compañías han optado por tomar el código y crear sus propios sistemas. En algunos ejemplos:</p>
<ul>
<li><strong>Nintendo</strong>: En su consola de videojuegos portátil <code>Nintendo Switch</code>.</li>
<li><strong>Sony</strong>: En sus consolas; <code>Playstation 3</code>, <code>Playstation 4</code> y <code>Playstation Vita</code>.</li>
<li><strong>Netflix</strong>: En su sistema <code>Open Connect</code> que distribuye su contenido.</li>
<li><strong>Panasonic</strong>: En sus televisores <code>Viera</code>.</li>
<li><strong>Apple</strong>: Si bien no proviene directamente de FreeBSD sino de Darwin, Apple a tomado algunas partes de FreeBSD para sus sistemas operativos como <code>MacOS</code>, <code>iOS</code>, y <code>WatchOS</code>.</li>
</ul>
<h2 id="compatibilidad-con-linux">Compatibilidad con Linux</h2><p>FreeBSD no tiene la misma compatibilidad con GNU/Linux. Es decir, no podrías descargar un programa para Ubuntu (por ejemplo) y ejecutarlo en FreeBSD. Por lo que la cantidad de software se reduce aun mas que con GNU/Linux.</p>
<p>Aun así, gracias a la versatilidad de FreeBSD, incorpora una capa de compatibilidad, con la que da apertura a casi todas las aplicaciones de GNU/Linux (aunque no al 100%). Aun así, serán contadas y mayormente software propietario el software que no podrás ejecutar (sobre todo aplicaciones basadas en Electron).</p>
<h2 id="comentarios-extras">Comentarios extras</h2><p>Me gustaría agregar algunas cosas que personalmente me han gustado y por lo que al día de hoy FreeBSD es mi sistema operativo principal:</p>
<ul>
<li>Filosofía UNIX: Los principios UNIX existen desde hace mucho tiempo y promueven la simplicidad, cosa que sigue muy de cerca FreeBSD</li>
<li>Alternativa a Linux: Los sistemas BSD tienen su propio Kernel en este caso <code>FreeBSD Kernel</code> y tiene una alta compatibilidad.</li>
<li>Portable: FreeBSD puede ser instalado casi en cualquier computador, incluido Raspberry Pi y otras boards de desarrollo.</li>
<li>No SystemD: Por problemas con la filosofía UNIX y licencias, FreeBSD utiliza como gestor de servicios <code>RC</code> que es muy ligero y fácil de usar.</li>
<li>Fácil de usar: Si eres un usuario nuevo podrás usar FreeBSD ya que en su instalación podrás elegir instalar GNOME, XFCE o KDE. Aunque si eres avanzado también podrás instalar manualmente tu gestor de ventanas preferido (en mi caso fue <code>Hyprland</code>)</li>
</ul>
<p>De esta manera invito a los lectores a que se den el tiempo de probar por lo menos en una maquina virtual FreeBSD y ustedes mismos juzguen si es un sistema que pueda incluso reemplazar al actual que ya tienen.</p>
]]></encoded>
      <category>FreeBSD</category>
      <category>tecnologia</category>
      <category>servidores</category>
      <category>sistemas operativos</category>
    </item>
    <item>
      <title>Primeros pasos en Hyprland</title>
      <link>https://blog.iagosto.dev/entradas/primeros-pasos-en-hyprland</link>
      <description>&lt;p&gt;Veremos como instalar, iniciar y configurar Hyprland. Un compositor que sea ha vuelto muy popular y que avanza de una manera increible.&lt;/p&gt;</description>
      <pubDate>Fri, 01 Mar 2024 04:50:08 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/primeros-pasos-en-hyprland</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Veremos como instalar, iniciar y configurar Hyprland. Un compositor que sea ha vuelto muy popular y que avanza de una manera increible.</p>
<hr />
<p>Hyprland es un compositor para Wayland. Que ofrece las ultimas características del protocolo.
Entre algunas están:</p>
<ul>
<li>Animaciones: Suaves transiciones sin afectar el rendimiento</li>
<li>Fácil de configurar: Desde un archivo de texto o con una interfaz gráfica</li>
<li>Mosaicos dinámicos</li>
</ul>
<p>Entre otras características esta el soporte de plugins e IPC, soporta los cambios en vivo, además de una buena sensación de fluidez. La combinación de animaciones da vida a un gestor de ventanas moderno.</p>
<p>Algunas capturas y vídeos de su funcionamiento los puedes encontrar en su pagina oficial: <a href="https://hyprland.org/" rel="noopener noreferrer">https://hyprland.org/</a></p>
<h2 id="instalación">Instalación</h2><p>La instalación depende del sistema operativo que te encuentres, tiene mejor soporte para distros "Rolling Release" como:</p>
<p>Arch:</p>
<pre><code># yay -Sy hyprland</code></pre><p>OpenSuse:</p>
<pre><code># zypper in hyprland</code></pre><p>Freebsd:</p>
<pre><code># pkg install hyprland</code></pre><p>Para otras distribuciones puedes visitar la documentacion oficial: <a href="https://wiki.hyprland.org/Getting-Started/Installation/" rel="noopener noreferrer">https://wiki.hyprland.org/Getting-Started/Installation/</a></p>
<h2 id="como-iniciar-hyprland">Como iniciar Hyprland</h2><p>Para iniciar Hyprland tenemos varias opciones. Una es utilizar un "Login Manager" como SDDM. Que es el que mas común y el que mejor funciona con Hyprland.</p>
<p>Para iniciar Hyprland con SDDM solo hará falta seleccionarlo antes de iniciar sesión.</p>
<p>Por otra parte si inicias con una terminal VT (linea de comandos). Solo hará falta ejecutar el comando <code>Hyprland</code>.</p>
<h2 id="configuración-inicial">Configuración inicial</h2><p>Hyprland incorpora varias herramientas por lo que muchas configuraciones de hardware se pueden hacer desde Hyprland. Para personalizar la configuración hará falta modificar el archivo <code>~/.config/hypr/hyprland.conf</code>, este ya se debió de generar de manera automática.</p>
<p>Este es un archivo ejemplo de configuración: <a href="https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.conf" rel="noopener noreferrer">https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.conf</a></p>
<p>Y aquí explicare algunas configuración de interés:</p>
<pre><code># Para ejecutar un programa al iniciar
# Puede ser aplicación o comando
# exec = CMD
# Ejemplo:
exec-once = firefox

# Para indicar variables
# $NAME = VARIABLE_CONTENT
# Ejemplo:
$menu = wofi --show drun

# Para indicar algunas variables de entorno
# env = VARIABLE_NAME,VALUE
# Ejemplo:
env = XCURSOR_SIZE,24</code></pre><h2 id="shortcuts">Shortcuts</h2><p>Los shortcuts son algo importante en gestores de mosaico, ya que esencialmente están diseñados para utilizarse sin el mouse (o con el menor uso de mouse posible). Por lo que los shortcuts o atajos de teclas son tema importante aquí.</p>
<p>Para configurar atajos de teclas:</p>
<pre><code>bind=MODS,key,dispatcher,params</code></pre><p>Ejemplos:</p>
<pre><code># Ejecutar un programa con
# Super + d
# Ejemplo (con la variable $menu del ejemplo de arriba):
bind = SUPER,d,exec,$menu

# Cerrar el programa activo
# Super + q
bind = SUPER,q,killactive

# Cerrar Hyprland
# Super + e
bind = SUPER,e,exit</code></pre><h2 id="programas-básicos-para-hyprland">Programas básicos para Hyprland</h2><p>Hyprland es solo un compositor y gestor de mosaicos en esencia, por lo que le hacen falta algunos complementos para nosotros tener un escritorio completo. Por lo que aquí te voy a listar algunas recomendaciones de programas básicos:</p>
<p><em>Notificaciones</em> - <code>mako</code>
Con mako tendremos un servicio de notificaciones básicas, pero personalizables. Para iniciarlo lo haremos a través de <code>exec-once</code> en la configuración de Hyprland:</p>
<pre><code>exec-once = mako</code></pre><p><em>Barra de estado</em> - <code>waybar</code>
Para nuestra barra de estado, un programa fácil de usar y altamente configurable es waybar. Para iniciarlo lo harás también a través de <code>exec-once</code> en la configuración de Hyprland:</p>
<pre><code>exec-once = waybar</code></pre><p><em>Launcher</em> - <code>wofi</code>
Para poder lanzar aplicaciones hay varias alternativas compatibles con Wayland. Pero un programa fácil de usar y al igual muy configurable es wofi. Para mayor comodidad podemos configurar la ejecución de wofi a través de un atajo de teclas en la configuración de hyprland:</p>
<pre><code># Ejemplo de atajo
# Super + d
bind = SUPER,d,exec,wofi --show drun</code></pre><p><em>Autenticación</em> - <code>polkit-kde-agent</code>
Algunas aplicaciones requieren una autenticación root para funcionar, esencialmente aplicaciones que modifican el sistema, por ejemplo <code>GParted</code>. Por lo que requerimos un agente de autenticación. El agente que provee KDE nos puede servir para ello. Solo hace falta ejecutar el demonio a través de la configuración de Hyprland:</p>
<pre><code>exec-once = /usr/lib/polkit-kde-authentication-agent-1</code></pre><p>Para mas programas altamente compatibles con Hyprland puedes visitar esta recopilación llamada <code>Awesome Hyprland</code>: <a href="https://github.com/hyprland-community/awesome-hyprland" rel="noopener noreferrer">https://github.com/hyprland-community/awesome-hyprland</a></p>
<h2 id="plugins">Plugins</h2><p>Hyprland además tiene soporte para plugins para ampliar las posibilidades. Los plugins recopilados en <code>Awesome Hyprland</code> y los oficiales están:</p>
<h3 id="hyprbars">Hyprbars</h3><p>Este plugin añade barras a las ventanas como cualquier gestor de ventanas, para poder maximizar o cerrar cada una de ellas.</p>
<p><a href="https://github.com/hyprwm/hyprland-plugins/tree/main/hyprbars" rel="noopener noreferrer">https://github.com/hyprwm/hyprland-plugins/tree/main/hyprbars</a></p>
<h3 id="hyprtrails">Hyprtrails</h3><p>Este plugin es un ejemplo para desarrolladores y las posibilidades en los plugins. Este añade un rastro en las ventanas al ser arrastradas.</p>
<p><a href="https://github.com/hyprwm/hyprland-plugins/tree/main/hyprtrails" rel="noopener noreferrer">https://github.com/hyprwm/hyprland-plugins/tree/main/hyprtrails</a></p>
<h3 id="hycov">Hycov</h3><p>Este plugin es uno no-oficial incorpora en Hyprland la posibilidad de tener una vista previa de todas las ventanas abiertas. Un poco al estilo MacOS.</p>
<p><a href="https://github.com/DreamMaoMao/hycov" rel="noopener noreferrer">https://github.com/DreamMaoMao/hycov</a></p>
]]></encoded>
      <category>hyprland</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Actualizar Debian a la ultima versión</title>
      <link>https://blog.iagosto.dev/entradas/actualizar-debian-a-la-ultima-versin</link>
      <description>&lt;p&gt;Debian es una distribución GNU/Linux que es estable por excelencia. Por lo que existirán instalaciones en PC personales y servidores que tengan mucho tiempo y requieran una actualización del sistema operativo. &lt;/p&gt;
&lt;p&gt;En este tutoría veremos como hacerlo!&lt;/p&gt;</description>
      <pubDate>Tue, 27 Feb 2024 22:57:28 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/actualizar-debian-a-la-ultima-versin</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Debian es una distribución GNU/Linux que es estable por excelencia. Por lo que existirán instalaciones en PC personales y servidores que tengan mucho tiempo y requieran una actualización del sistema operativo. </p>
<p>En este tutoría veremos como hacerlo!</p>
<hr />
<p>Actualmente la utilizo en un VPS desde hace algunos años. Y estaba en la versión 10 (buster).</p>
<p>Ahora veremos como actualizar a la versión mas reciente estable (o la que prefieras). En este caso sera la versión 12 (bookworm).</p>
<h2 id="consideraciones">Consideraciones</h2><p>Antes de actualizar, asegúrate de hacer un backup de datos que consideres importantes. Ya que hay posibilidades de que la actualización no salga bien (esto depende mucho de que tanto has modificado tu sistema, o que tan desactualizado esta).</p>
<p>También es importante tener actualizada la versión de Debian que corres actualmente. Para eso ejecutaremos estos comandos:</p>
<pre><code>$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get full-upgrade
$ sudo reboot</code></pre><p>Una vez hecho eso estamos listos para actualizar.</p>
<h2 id="actualizar-repositorios">Actualizar repositorios</h2><p>Lo primero que debemos hacer es actualizar los repositorios que utiliza <code>apt</code> por lo que modificaremos estos ficheros con tu editor favorito. En este caso sera VIM:</p>
<pre><code>$ sudo vim /etc/apt/sources.list</code></pre><p>Dentro del archivo veremos algo parecido a esto:</p>
<pre><code>deb http://deb.debian.org/debian/ buster main
deb-src http://deb.debian.org/debian/ buster main
deb http://deb.debian.org/debian/ buster-updates main
deb-src http://deb.debian.org/debian/ buster-updates main
deb http://security.debian.org/debian-security buster/updates main
deb-src http://security.debian.org/debian-security buster/updates main</code></pre><p>Aquí debemos cambiar todo lo que dice <code>buster</code> por <code>bookworm</code>, y además actualizaremos el repositorio "security", por lo que el archivo debería de quedarnos mas o menos así:</p>
<pre><code>deb http://deb.debian.org/debian/ bookworm main
deb-src http://deb.debian.org/debian/ bookworm main
deb http://deb.debian.org/debian/ bookworm-updates main
deb-src http://deb.debian.org/debian/ bookworm-updates main
deb http://security.debian.org/debian-security bookworm-security main
deb-src http://security.debian.org/debian-security bookworm-security main</code></pre><p>En caso de tener otras listas en el directorio <code>/etc/apt/sources.list.d/</code> también hay que actualizarlas de la misma manera.</p>
<h3 id="agregar-repositorio-non-free-opcional">Agregar repositorio non-free (opcional)</h3><p>Como paso opcional podemos agregar software que no es libre (o no del todo). </p>
<p>Para eso editaremos de nuevo el archivo <code>/etc/apt/sources.list</code> y agregaremos al final de cada linea agregaremos "non-free-firmware":</p>
<pre><code>deb http://deb.debian.org/debian/ bookworm main non-freee-firmware
deb-src http://deb.debian.org/debian/ bookworm main non-freee-firmware
deb http://deb.debian.org/debian/ bookworm-updates main non-freee-firmware
deb-src http://deb.debian.org/debian/ bookworm-updates main non-freee-firmware
deb http://security.debian.org/debian-security bookworm-security main non-freee-firmware
deb-src http://security.debian.org/debian-security bookworm-security main non-freee-firmware</code></pre><h2 id="actualizando-el-sistema">Actualizando el sistema</h2><p>Ahora que hicimos eso es momento de actualizar.</p>
<h3 id="limpiando-paquetes">Limpiando paquetes</h3><p>Vamos a limpiar el cache que tengamos y actualizaremos la información de <code>apt</code>. </p>
<p>Para eso ejecutaremos los siguientes comandos:</p>
<pre><code>$ sudo apt-get clean
$ sudo apt-get update</code></pre><h3 id="lanzar-update">Lanzar update</h3><p>Ahora para actualizar Debian, ejecutaremos los comandos de actualización:</p>
<pre><code>$ sudo apt-get upgrade
$ sudo apt-get full-upgrade</code></pre><p>Esto puede tardar algunos minutos, depende de tu conexión de internet, tu computadora, y los paquetes que sean necesarios actualizar.</p>
<p>En mi caso fueron 129 paquetes en el <code>update</code> y 283 en el <code>full-upgrade</code>. Tardo unos X minutos ya que es una VPS con un procesador de solo 1 core, pero internet de alta velocidad.</p>
<h3 id="error-al-actualizar">Error al actualizar</h3><p>En mi caso me sucedió que el comando <code>sudo apt-get full-upgrade</code> fallara.
Para esos casos lo que me funciono fue reiniciar y pedirle a apt que arreglara los paquetes rotos.</p>
<pre><code>$ sudo reboot
$ sudo apt --fix-broken install</code></pre><h3 id="remover-software-innecesario">Remover software innecesario</h3><p>Con las actualizaciones hay software que ya no se utiliza mas o que simplemente fue remplazado por otro.</p>
<p>Para limpiar tu sistema de ese software innecesario ejecutaremos lo siguiente:</p>
<pre><code>$ sudo apt-get autoremove</code></pre><h2 id="reiniciar-tu-sistema-actualizado">Reiniciar tu sistema actualizado</h2><p>Para finalizar, tendremos que reiniciar y ver que todo este funcionando correctamente:</p>
<pre><code>$ sudo reboot</code></pre><p>Ahora tendrás tu sistema Debian actualizado a la ultima versión estable!</p>
<h3 id="referencias">Referencias</h3><p>DebianUpgrade: <a href="https://wiki.debian.org/DebianUpgrade" rel="noopener noreferrer">https://wiki.debian.org/DebianUpgrade</a></p>
<p>source.list(5): <a href="https://manpages.debian.org/bookworm/apt/sources.list.5.en.html" rel="noopener noreferrer">https://manpages.debian.org/bookworm/apt/sources.list.5.en.html</a></p>
]]></encoded>
      <category>tutorial</category>
      <category>gnu/linux</category>
      <category>debian</category>
    </item>
    <item>
      <title>Piloto</title>
      <link>https://blog.iagosto.dev/entradas/piloto</link>
      <description>&lt;p&gt;Solo para abrir este blog. Me gustaría compartir los planes que hay para este pequeño espacio. Y así ustedes lectores puedan tener una idea si el contenido que se publicara aquí es de su interés o no.&lt;/p&gt;</description>
      <pubDate>Sat, 24 Feb 2024 10:14:18 -0600</pubDate>
      <guid isPermaLink="true">https://blog.iagosto.dev/entradas/piloto</guid>
      <author>Ivan Agosto</author>
      <encoded><![CDATA[<p>Solo para abrir este blog. Me gustaría compartir los planes que hay para este pequeño espacio. Y así ustedes lectores puedan tener una idea si el contenido que se publicara aquí es de su interés o no.</p>
<hr />
<p>Mi nombre es Ivan Agosto y seré el autor principal de este espacio (quizá en el futuro haya mas autores). Aun no lo hago pero después dedicare una pagina donde hablare mas sobre mi (porque realmente a nadie le importa ahora).</p>
<p>Ahora quiero hablar un poco sobre el futuro de este espacio.</p>
<h2 id="primeras-entradas">Primeras entradas</h2><p>Ya lo dice la cabecera de la pagina. Los temas serán tutórales sobre tecnología y software.</p>
<p>Las primeras entradas para este blog serán tutórales sencillos de instalación. Listados por orden:</p>
<ul>
<li>Como actualizar Debian a su ultima versión</li>
<li>Primeros pasos con Hyprland</li>
<li>Que es BastilleBSD y como usarlo</li>
<li>Como instalar Nextcloud en FreeBSD</li>
</ul>
<p>La propuesta es poder subir una entrada cada semana (o máximo dos). Para poder tiempo de armar artículos de calidad y no nada mas publicar algo nuevo para rellenar.</p>
<h2 id="nuevos-espacios">Nuevos espacios</h2><p>Este sitio corre a través de un servidor con <code>FreeBSD</code> y un hardware medianamente potente. Por lo que seria un desperdicio utilizarlo solo para montar este blog (que es muy liviano).</p>
<p>Por lo que tengo pensado alojar mas servicios, una vez viendo su estabilidad y usabilidad abrirlos parcialmente para que otros usuarios puedan darle uso.</p>
<p>Los servicios son:</p>
<ul>
<li>Nextcloud: Me gustaría ofrecer a un numero limitado de usuarios por lo menos 1GB de espacio en Nextcloud donde puedan respaldar sus datos importantes en un lugar seguro.</li>
<li>Gemini: Una vez montado este sitio en el Gemini espacio, me gustaría ofrecer este servidor como host para sus cápsulas (ya que Gemini igual es muy liviano)</li>
<li>Funkwale (quizá): Seria interesante montar una instancia de Funkwhale y brindar un espacio en español para podcasts de todo tipo.</li>
</ul>
<p>Tengo en mente quizá algunos server de videojuegos (minetest, tuxkarts, etc). Donde nos podamos reunir a jugar un rato (cuando tenga el tiempo de hacerlo).</p>
<h2 id="realidad">Realidad</h2><p>Y bueno, todo lo escrito anteriormente esta estrictamente condicionado a mi tiempo libre. Por lo que estos planes pudieran cambiar de un día a otro. El futuro es impredecible y la idea de tener este blog es también plasmar los pensamientos y proyectos que tengo a futuro.</p>
<p>Y con esto también espero aportar un granito de arena mas a un internet mas descentralizado y apoyar a la comunidad en español. Que realmente es poca comparada a la comunidad en ingles (de software libre, redes libres, etc).</p>
<p>Si has llegado hasta aquí. Gracias invertir tu tiempo leyendo esto. Espero que el contenido sea de tu interés y te sirva como inspiración para tus propios proyectos.</p>
<p>Sin mas me despido.</p>
]]></encoded>
      <category>blog</category>
    </item>
  </channel>
</rss>
