<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:wfw="http://wellformedweb.org/CommentAPI/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:atom="http://www.w3.org/2005/Atom"
 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
 xmlns:georss="http://www.georss.org/georss"
 xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
 xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<atom:link href="https://indymnv.xyz/posts/tooling/rss.xml" rel="self" type="application/rss+xml" />
<title>Indy Navarro post about tooling</title>
<link>https://indymnv.xyz/</link>
<description><![CDATA[Tooling and tinkering time]]></description>
<language>en</language>
<lastBuildDate>Mon, 01 Jun 2026 01:23:00 +0900</lastBuildDate>
<generator>Emacs 30.1 org-publish-rss.el 0.8</generator>
<item>
<title>¿Deseas Unirte a la Iglesia de Emacs?</title>
<link>https://indymnv.xyz/posts/tooling/20241123-emacs-church.html</link>
<pubDate>Sat, 23 Nov 2024 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20241123-emacs-church.html</guid>
<description>
<![CDATA[<p>
Probablemente si has leído esto desde hace un tiempo, has notado de que
usado consistentemente Vi para todo tipo de edición de textos, desde mi
blog hasta cuando me toca picar un poco de código, y la verdad es que me
gusta harto vim, a tal punto que busqué formas de extender sus bindings
en otros programas e incluso en mi administrador de ventanas Sway y dwm.
Pero por una curiosidad que venía creciendo decidí probar otro programa
que a menudo se le tiende a comparar: Emacs
</p>
<div id="outline-container-emacs-el-editor-de-texto-programable" class="outline-2">
<h2 id="emacs-el-editor-de-texto-programable"><span class="section-number-2">1.</span> Emacs: El editor de texto programable</h2>
<div class="outline-text-2" id="text-emacs-el-editor-de-texto-programable">
<p>
Emacs es un editor credo por el gigachad Richard Stallman por allá en
1984, es un software totalmente libre, esta presente en todas las
principales plataformas (Windows, MacOS, GNU/Linux), y se caracteriza
por ser también un interprete de ELisp (Emacs Lisp) que es basicamente
un lenguage de programación derivado de la familia de Lisp, esto lo hace
totalmente "hackeable" para cualquiera que quiera abrirse a editar sus
configuraciones, ese alto nivel de customización ha logrado que haya una
comunidad que este desarrollando librerías bastante convenientes para
Emacs
</p>

<p>
Hay varias cosas enormemente destacables sobre Emacs, pero tal vez una
de las cosas que la comunidad más se enorgullece, es que puedes usarlo
para un montón de cosas: escribir notas, programar, organizar una
agenda, administrar proyectos, leer libros, escuchar música, leer las
noticias a través de un RSS, chatear en IRC, jugar Tetris, etc. Todo
esto bajo el techo que la iglesia de Emacs puede proveer. Es por esto
que algunos tienden a asociar a Emacs como un sistema operativo
</p>


<div id="org144986f" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///emacs.png" alt="emacs.png" />
</p>
<p><span class="figure-number">Figure 1: </span>emacs</p>
</div>
</div>
</div>
<div id="outline-container-vim-vs-emacs" class="outline-2">
<h2 id="vim-vs-emacs"><span class="section-number-2">2.</span> Vim vs Emacs</h2>
<div class="outline-text-2" id="text-vim-vs-emacs">
<p>
Por alguna razón las comunidades de programadores les gusta comparar
estos editores, aunque a mi parecer hay demasiadas diferencias, que uno
puede preguntarse si los casos de uso son completamente los mismos, la
comparación entre vim e Emacs es como el buen cuchillo y la cocina, en
ese sentido mis razones para probar Emacs:
</p>

<ol class="org-ol">
<li><i>Lisp</i>: Desde hace un tiempo tenía un interés en aprender algún
lenguage de la familia de Lisp, es un lenguage imperativo/funcional,
altamente flexible, de hecho Scheme otro de los lenguajes Lisperos.
era usado como introducción a CS en el MIT, y uno de los libros más
cabezones fueron usados como base de enseñanza, <b>Structure and
Interpretation of Computer Programs</b> alias SICP, ha sido altamente
influyente para este tema. Entonces ciertamente vale la pena darle
una vuelta. Un código en Elisp se ve algo como esto:</li>
</ol>

<div class="org-src-container">
<pre class="src src-elisp">(<span style="font-weight: bold;">setq</span> eshell-prompt-function
  (<span style="font-weight: bold;">lambda</span> nil
    (concat
     (eshell/pwd)
     <span style="font-style: italic;">" $ "</span>)))
</pre>
</div>

<p>
como puedes notar los paréntesis son una parte previo a la definición de
la función y al final, lo hace un tipo de lenguage de programación
bastante peculiar en estos tiempos. No es lo único especial de este tipo
de lenguajes y hay muchas opiniones al respecto, pero si estás
acostumbrado a los lenguajes tipo Python, C o Java, entonces Lisp te va
a proveer otro tipo de paradigmas que podrás contrastar.
</p>

<ol class="org-ol">
<li value="2"><i>Ambiente productivo</i>: Usualmente cuando quieres hacer un
ambiente productivo en vim, tienes que usar Tmux como multiplexer, y
luego concatenar otros programass basados en termimnales, usarás
Newsboat para noticias, Ncmpcpp + Mpd para música, Mutt para correos
electrónicos, Zathura para leer PDFs, etc. No es un mal workflow,
pero tiene sus limitaciones, por ejemplo, si quieres leer blogs que
tienen imagenes, Newsboat estará limitado, también tendrás que setear
los shortcuts para estos programas para que sean afines a Vim, o los
colores de cada software en caso de que te importe lo estético,
siento que en general es más simple de abordar esto en Emacs.</li>

<li><i>Org Mode</i>: Probablemente si hay alguien que me pregunte si vale la
pena usar Emacs a pesar de que no programe, probablemente le diré que
si, solo por una cosa: Org Mode. Creo que todos independientes del
tipo de trabajo o estudio que hacemos, tenemos algunas necesidades de
tomar notas, agendar eventos, administrar proyectos con tareas y
deadlines, entre otros. Todo eso lo puedes hacer en Emacs con Org
Mode, la herramienta es altamente customimizable y es parte integra
del ecosistema de Emacs, y creo que no hay ningún usuario de Emacs
que no quiera aprovechar los beneficios de este ecosistema.</li>
</ol>
</div>
</div>
<div id="outline-container-algunas-impresiones-no-tan-positivas-de-emacs." class="outline-2">
<h2 id="algunas-impresiones-no-tan-positivas-de-emacs."><span class="section-number-2">3.</span> Algunas impresiones no tan positivas de Emacs.</h2>
<div class="outline-text-2" id="text-algunas-impresiones-no-tan-positivas-de-emacs.">
<p>
Por sobre todo Emacs es un gran software, este artículo lo he estado
escribiendo en Emacs, además de otras cosas, y ha sido divertido por
sobre todo, pero algunas cosas que vas a tener que considerar para
empezar:
</p>

<ol class="org-ol">
<li><i>Poco estético al inicio</i>: Si instalas Emacs y vas desde el
principio, verás una introducción con el logo bastante feo, además de
unos links a tutoriales, etc. No lo encontrarás atractivo para nada,
dependerá de ti, ir customizandolo para que quede un poco más
agradable visualmente</li>

<li><i>Nuevos atajos de teclado que aprender</i>: Si vienes de vim,
probablemente ya estas acostumbrado al sistema modal de edición, esa
memoria muscular tendrá que enfrentar un nuevo sistema de edición y
navegación que no tiene mucha relación con Vi, verás que tendrás que
usar la tecla Ctrl y Alt para llamar a distintos modos y ejecutar
comandos acordes, puede que cueste al principio, pero también tiene
sus fortalezas. Además existe una librería para emular los atajos de
teclado de vim, llamado evil mode, lo cual puede ayudar a que inicies
en Emacs, aunque yo no lo recomiendo, en mi opinión vale la pena que
empieces con los atajos originales hasta que logres tener un
entendimiento de ellos, y después puedes decidir usar evil mode.</li>

<li><i>Tiempo mayor en start ups</i>: vim es rápido, Emacs en esencia se toma
unos segundos dependiendo de la cantidad de plugins y otras
customizaciones que le hayas hecho, lo cual no lo es tanto, pero por
lo mismo, preferirás tener una sesión abierta todo el tiemmpo antes
que estar abriendo y cerrandolo constantemente, no es algo tan grave
en mi opinión, pero puede que haya gente que no le agrade mucho.</li>
</ol>
</div>
</div>
<div id="outline-container-qué-hay-de-doom-emacs-space-emacs-y-otros-amigos" class="outline-2">
<h2 id="qué-hay-de-doom-emacs-space-emacs-y-otros-amigos"><span class="section-number-2">4.</span> ¿Qué hay de Doom Emacs, Space Emacs y otros amigos?</h2>
<div class="outline-text-2" id="text-qué-hay-de-doom-emacs-space-emacs-y-otros-amigos">
<p>
Estas distribuciones de Emacs son basicamente Emacs con ciertas
opiniones de plugins y shortcuts ya establecidos, no tengo experiencia
con esas distribuciones, pero tampoco lo recomiendo mucho, a mi parecer
es mejor de que vayas creando tu propio config desde 0 y lo vayas
adaptando poco a poco a lo que realmente necesitas, eso también te hará
más consciente de lo que hace tu sistema.
</p>
</div>
</div>
<div id="outline-container-cómo-hago-entonces-para-partir" class="outline-2">
<h2 id="cómo-hago-entonces-para-partir"><span class="section-number-2">5.</span> ¿Cómo hago entonces para partir?</h2>
<div class="outline-text-2" id="text-cómo-hago-entonces-para-partir">
<p>
Te recomiendo instalar la distribución básica de Emacs, luego:
</p>

<ul class="org-ul">
<li>Lee el tutorial unas cuantas veces y acostumbrate a usar esos atajos
de teclado, por unos cuantos días.</li>
<li>También puedes leer el manual que hizo GNU para Emacs, que tiene un
cierto material que complementa al tutorial.</li>
<li>Aprender a navegar dentro de tu directorio con dired, abrir archivos,
editarlos y guardarlos.</li>
<li>Entender y quedar cómodo con lo de abrir y cerrar ventanas, operar con
los buffers</li>
<li>Explorar otras funcionalidades construídas internamente en Emacs como
navegar en la web con eww, navegar pdfs, etc.</li>
<li>Comienza a editar tu archivo init.el para agregar nuevas
customizaciones a tu Emacs, como por ejemplo el tamaño de la letra,
esquema de colores, etc</li>
<li>Explora Org Mode</li>
<li>Sigue disfrutando.</li>
</ul>

<p>
La verdad es que puede que mi experiencia con Vim y Neovim me hayan dado
cierta experiencia de como usar Emacs, eso no quiere decir que no he
quedado a veces estancado con algún asunto, pero dentro de todo el
proceso ha sido entrete y la verdad me llevado una grata experiencia
usando este software. Desde que empecé con el tutorial hasta ahora me ha
tomado una semana y media mas o menos de jugar en mi tiempo libre, así
que demás que cualquiera puede usarlo con cierta proficiencia en un par
de semanas a un mes probablemente.
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>From Mastodon to Free software: My little experience</title>
<link>https://indymnv.xyz/posts/tooling/20230921-intro-free-software.html</link>
<pubDate>Thu, 21 Sep 2023 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20230921-intro-free-software.html</guid>
<description>
<![CDATA[
<div id="org92e58a6" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///007_free_software/Sec6Yei.png" alt="Sec6Yei.png" />
</p>
<p><span class="figure-number">Figure 1: </span>chadfree</p>
</div>
<div id="outline-container-introduction" class="outline-2">
<h2 id="introduction"><span class="section-number-2">1.</span> Introduction</h2>
<div class="outline-text-2" id="text-introduction">
<p>
It has been a while since I decided to purge several of my social
networks (including Twitter, Facebook, Instagram, and LinkedIn) and
mainly stick to Mastodon as the only platform for interacting with
people on the internet whom I don't really know. So far, it has been a
positive experience, and I have no doubts that it has improved my
quality of life. Furthermore, it has opened up a world that I wasn't
very aware of and that I have become increasingly interested in: The
world of Free software.
</p>
</div>
</div>
<div id="outline-container-first-steps" class="outline-2">
<h2 id="first-steps"><span class="section-number-2">2.</span> First Steps</h2>
<div class="outline-text-2" id="text-first-steps">
<p>
My first real interactions with the world of open source (which was the
term I was familiar with) were through my work as a data analyst at one
of the companies I worked for. I used Python for most of my analyses
because I felt I could do more than the average business analyst with
Excel. For the first time, I got involved with the term open source, and
I was amazed that there were people who donated some of their time to
create projects to share with others (of course, this is a
generalization, understanding that there are also various types of
organizations). Even more so, someone like me could use these libraries
and benefit greatly from them in advancing my projects for which I was
paid.
</p>

<p>
I believe that this is where I began to realize the power of community
work and how these projects were not necessarily something artisanal
that easily broke. On the contrary, many of these projects are quite
solid and provide a great platform for anyone with basic programming
skills to use and derive significant value from.
</p>
</div>
</div>
<div id="outline-container-the-breakup-with-closed-software-begins" class="outline-2">
<h2 id="the-breakup-with-closed-software-begins"><span class="section-number-2">3.</span> The Breakup with Closed Software Begins</h2>
<div class="outline-text-2" id="text-the-breakup-with-closed-software-begins">
<p>
To be honest, this breakup started with social media, which I was an
avid user of at the time, and for some reason, I felt quite tired of
them. However, I still wasted my time on them. Twitter, in particular,
had me fed up because of the level of aggression and toxicity on the
platform. When I wanted to read about a topic related to my country, I
ended up feeling annoyed by how the interactions were happening (which
was similar to the discussions among family members with different
political views at the annual family dinner). This reached a breaking
point when Elon Musk took over Twitter. Why? Because I never believed in
his idea of free speech and his intentions to make Twitter a "better
place." Time has shown us that EM has never been a man of science, and
his altruistic purposes are nothing but a nebula of contradictions.
</p>
</div>
<div id="outline-container-a-wild-mastodon-appears" class="outline-3">
<h3 id="a-wild-mastodon-appears"><span class="section-number-3">3.1.</span> A Wild Mastodon Appears</h3>
<div class="outline-text-3" id="text-a-wild-mastodon-appears">

<div id="org7b6f36d" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///007_free_software/mastodon_pokemon.jpg" alt="mastodon_pokemon.jpg" />
</p>
<p><span class="figure-number">Figure 2: </span>mastodon</p>
</div>

<p>
With my intention to leave Twitter, I learned about the alternative of
Mastodon as a decentralized platform that is "similar to Twitter," where
privacy was the most important part of its speech. I decided to create
an account and see how it was. In fact, I chose Fosstodon (an instance
whose main focus is free and open-source software), which is strange
because I'm not a software engineer, nor was I actively participating in
any FOSS project. My first impressions: absolutely boring. I won't lie;
initially, I didn't understand the dynamics of choosing an instance and
didn't understand the platform's trending topics. As I was part of the
wave of people who decided to leave Twitter, there were several new
accounts on Mastodon, and the trend of leaving the birdsite was strong
in those days. But then things normalized, and it all seemed more
relaxed. The problem was that I kept going back to Twitter because I
didn't connect with Mastodon, and my browsing on Mastodon ended in 10
minutes. I returned to Twitter, where everything was "buzzing," and
there was always a controversy to engage with.
</p>

<p>
This behavior persisted for several weeks, but my desire to get rid of
Twitter became stronger. And finally, I deleted my account, which I have
no regrets about. The truth is that I felt more relaxed, spent a little
less time on my phone, realized that many of the influencers and experts
in the topics that interested me were posting a lot of irrelevant
content. When there was an important trend, I could discover it through
other means (on Mastodon, Reddit, or one of the blogs I follow). That's
how I began to embrace the idea of staying on Mastodon, where everything
was quieter for various reasons:
</p>

<ol class="org-ol">
<li>No (tricky) algorithms: This is something that really bothers me
about social networks. Platforms try to create recommendation systems
to keep you hooked, and social media have embraced this method to
keep you there. It's incredible how these algorithms can influence
your thinking and what you consume. So, seeing that your timeline is
simply organized chronologically is really refreshing.</li>

<li>Privacy: With the first point, you understand the impact of giving
away your data to an organization that can do whatever it wants with
it, from selling the data to other organizations to training its
machine learning algorithms. Our problem is that we have been poorly
educated about the value of protecting our personal information, and
it's not the same to easily give it away to any institution, website,
or anything else.</li>

<li>More optimized for conversation: Honestly, I think I've seen better
discussions in general on Mastodon than on other social networks.
It's not that these discussions don't exist on other platforms, but
they are a tiny fraction beneath a mass of people trying to sell
content. You can notice on LinkedIn the influencers who use the term
"game changer" every week to describe the next technology or software
they discovered. On Twitter, people share bullet points in a thread
about "how to basics," which is nothing more than a reuse of content
someone else posted a few days ago. Or the idea of delivering the
simplest and most effective message that gets the best ratings, but
it's full of fundamental errors, which is quite typical in political
discussions. On Mastodon, these interactions can also happen, but
there's no algorithm boosting this type of content, so it's almost
nonexistent. This ends up discouraging all kinds of influencers
looking to reach more people with certain strategies, creating a
parasocial effect as mentioned in the blog of
<a href="https://drewdevault.com/2023/06/30/Social-and-parasocial-media.html">Drew
Devault</a>, which I recommend reading other articles from that blog.</li>
</ol>
</div>
</div>
<div id="outline-container-a-space-to-understand-the-impact-of-free-software" class="outline-3">
<h3 id="a-space-to-understand-the-impact-of-free-software"><span class="section-number-3">3.2.</span> A Space to Understand the Impact of Free Software</h3>
<div class="outline-text-3" id="text-a-space-to-understand-the-impact-of-free-software">
<p>
Over time on Mastodon, I began to read posts from people in the tech
world who weren't just occasional users of open-source software (as I
am), but actively participated in its improvement and promotion. I
understood why many of these people reduced their use of social networks
and, instead, had their own blogs (in fact, this blog started with that
idea in mind). And the idea of reclaiming personal space on the internet
instead of depending on oligopolies and other companies with
questionable practices.
</p>

<p>
Over time, I started evaluating the software I use and the websites I
visit to reduce the impact they might have on matters related to my
privacy. I ended up deleting other social networks and looking for
open-source software alternatives or at least ones that have a more
respectful attitude toward privacy for things I used to do with
proprietary software. Here are some of the changes I've made (note that
these are not the only alternatives, so I recommend researching if you
don't like these software choices):
</p>

<ul class="org-ul">
<li>Excel -&gt; Python, R, Julia</li>
<li>Word, PowerPoint -&gt; Typst, Pandoc, Quarto</li>
<li>GitHub -&gt; Codeberg</li>
<li>VSCode -&gt; Vim/Neovim</li>
<li>Chrome -&gt; Firefox</li>
<li>Google Search -&gt; DuckDuck Go</li>
<li>Twitter -&gt; Mastodon</li>
<li>Medium, Substack -&gt; This blog and use of an RSS reader (newsboat) to
read other blogs</li>
<li>Mac OS -&gt; Considering a move to Asahi Linux</li>
<li>Nord Pass -&gt; Bitwarden</li>
</ul>

<p>
And I'm still making changes&#x2026;
</p>

<p>
But I haven't been able to make all the changes I wanted. For example,
for staying in touch with my family from a distance, I still use
WhatsApp. Obviously, this is a sensitive issue that is not negotiable,
so as long as I don't have an alternative, I will continue to use that
application. However, I may use Signal as a replacement in the future.
</p>
</div>
</div>
</div>
<div id="outline-container-im-interested-in-this-what-do-you-recommend-for-the-transition" class="outline-2">
<h2 id="im-interested-in-this-what-do-you-recommend-for-the-transition"><span class="section-number-2">4.</span> I'm Interested in This, What Do You Recommend for the Transition?</h2>
<div class="outline-text-2" id="text-im-interested-in-this-what-do-you-recommend-for-the-transition">
<p>
The best thing you can do is make a gradual transition. Some of this
software is not so simple to use. If you've never programmed in your
life and have never opened your computer's terminal to perform any
operations, some of this software may seem more complicated than it
really is. So, I recommend starting with things that are super simple to
change, like your browser. If you're using something like Bing or Google
Chrome, download Firefox. Create an account on Mastodon and join an
instance that interests you. See if you like it more than Twitter, and
then delete your Twitter account. I assure you that if you don't like
Elon Musk, no matter how much you complain on his platform, nothing will
change. Install the DuckDuck Go extension and avoid opening Google.com
for your searches. Okay, but what next? If you're a business analyst, I
recommend considering learning one of the alternatives to Excel. You'll
realize that you can do much more than with Excel (and in 6 months, you
might negotiate a better salary or a job change with better benefits).
Besides, I think this will be the gateway to other skills. But above
all, it's worth the idea of learning new things and stepping out of your
comfort zone, as it will allow you to be a little more free and
independent from third parties. For example, I created this blog on my
own with some open-source tools and by browsing the source code. What I
mean is, can someone come and delete my posts or block me without
consulting me? The answer is simply no.
</p>

<p>
Of course, this is not so difficult, and you don't need to be a software
engineer to do many of these things; in fact, I'm not. As an extra
anecdote, a friend of mine also decided to buy a Raspberry Pi and has
learned a lot about self-hosting and networking, which allows him to
create websites and not rely on third parties to host his blogs and
other sites he creates. I think I'll do the same in the future.
</p>
</div>
</div>
<div id="outline-container-what-positive-impacts-have-you-had" class="outline-2">
<h2 id="what-positive-impacts-have-you-had"><span class="section-number-2">5.</span> What Positive Impacts Have You Had?</h2>
<div class="outline-text-2" id="text-what-positive-impacts-have-you-had">
<p>
The most important and highlighted impact is the feeling of tranquility
and less stress. After purging social networks (Twitter, Facebook,
Instagram, and LinkedIn), I'm simply much less attached to my phone, and
I receive less stress from information overload. It's basically one less
addiction in my life, and it's difficult to control. If you're the
person who's glued to your phone, it's not your fault, but it's these
platforms that turn their product into a drug to keep you there for as
long as possible. In fact, checking the statistics of my Instagram
account, I spent around 1 to 2 hours a day there. Doing what? Nothing
relevant, if you ask me. So, I won't deny that my life has improved.
</p>

<p>
On the other hand, I've learned different things about computers that I
had no idea about before, and I've become better at it. Just by knowing
certain tools, I became more proficient at work, so I could automate
things that other colleagues simply didn't know how to do. I automated
tasks with Bash scripting, created pipelines with Python to manipulate
data, and learned a bit more about statistics since I now had libraries
available, among other things.
</p>

<p>
Lastly, I've learned more about the value of personal information and
independence. Many of the proprietary software we use have some form of
telemetry or seek to gather all kinds of information about you. I
understand that people don't place much value on their personal
information, but I think it's something we shouldn't so easily give
away. After all, companies make money directly or indirectly from your
information, and it's a shame that schools and the education system,
which are supposed to be guardians of forming free and independent
individuals capable of thinking for themselves, do not emphasize these
topics and promote dependence on proprietary software without even
mentioning these alternatives. For example, when Windows forces you to
accept new updates or changes to the license (which few probably read),
you can realize that you're not really free to choose. And if your PC
becomes slow because software updates are denser than any hardware can
handle, then consider installing Linux and saving that PC.
</p>
</div>
</div>
<div id="outline-container-what-negative-impacts-have-you-had" class="outline-2">
<h2 id="what-negative-impacts-have-you-had"><span class="section-number-2">6.</span> What Negative Impacts Have You Had?</h2>
<div class="outline-text-2" id="text-what-negative-impacts-have-you-had">
<p>
The truth is the only negative impact I can mention is that by not using
social networks, I'm not "up to date" with what acquaintances and
colleagues are doing. I don't know if they changed jobs or what they did
yesterday, which was something Instagram, for example, was good at. Is
it really important? Not at all. In fact, I think we tend to overvalue
the idea that knowing in real-time what's happening with 300 people (or
more) is important. I have a group of friends with whom I still talk
from time to time, and I can really know what they're doing, and that's
enough for me. If there are people who matter to you, ask them for their
email or some other means of contact where you can chat from time to
time.
</p>
</div>
</div>
<div id="outline-container-conclusions" class="outline-2">
<h2 id="conclusions"><span class="section-number-2">7.</span> Conclusions</h2>
<div class="outline-text-2" id="text-conclusions">
<p>
This has been my experience primarily delving into the world of
open-source software and reducing the consumption of social networks.
These are two different things but are closely related. To summarize in
a few points:
</p>

<ol class="org-ol">
<li>Try to eliminate social networks, especially those supported by
recommendation systems to keep you hooked.</li>
<li>Consider and value the idea of using open-source software. If you're
using proprietary software, evaluate if there's an alternative that
upholds the fundamental principles of open-source software or at
least follows minimum values of security and privacy.</li>
<li>Learn more about open-source software, and if there's software you
use regularly that helps you in your daily life, look for ways to
support it.</li>
<li>Don't be afraid to learn more. I believe the idea of "I don't know
about computers," "I'm not a programmer," among others, is a poor
argument for self-limitation. Take the time to learn gradually about
these topics.</li>
</ol>

<p>
I hope this has been helpful, and if you have any questions, you can
write to my email or find me on Mastodon.
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>Experiencias con el método Zettelkasten e Emacs</title>
<link>https://indymnv.xyz/posts/tooling/20250202-zettelkasten-emacs.html</link>
<pubDate>Sun, 02 Feb 2025 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20250202-zettelkasten-emacs.html</guid>
<description>
<![CDATA[<p>
Durante un par de semanas incorporé una nueva herramienta en Emacs y en
mi "workshop digital", he estado usando la herramienta Denote y probando
el método Zettelkasten en mi día a día, aquí compartiré algunas
experiencias sobre este método, tal vez te ayude a ti a ver si te
interesa incorporar este método en tu día a día.
</p>
<div id="outline-container-qué-es-el-método-zettelkasten" class="outline-2">
<h2 id="qué-es-el-método-zettelkasten"><span class="section-number-2">1.</span> ¿Qué es el método Zettelkasten?</h2>
<div class="outline-text-2" id="text-qué-es-el-método-zettelkasten">
<p>
Para ir directo al grano el método tiene un proposito, que es construír
una compleja red de conocimiento personal y que este sea facil de
administrar. Esta red se basa en "nodos" de conocimiento que sean lo más
atómicos posibles y construir "links" entre estos nodos para cohesionar
el contenido de tal forma que puedas ir enlazandolo en la red, estos
nodos contendrán una metadata referenciando tópicos, fechas, títulos,
links, etc. Con esto el conocimiento es capturado, puede ser conectado,
cohesionado y administrado.
</p>

<p>
El método puede ser creado (notas, carpetas, post-it, etc ), como
también usado con herramientas digitales, existe un montón de software
ahí afuera que trata de cubrir estas propiedades como Obsidian,
Forester, Mem, Denote, etc. Antes de que trates de usar algunos de estos
softwares, pensemos un poco en cual es el ejercicio que tú harías en tu
laptop si quisieras usar esta metodología.
</p>
</div>
</div>
<div id="outline-container-aplicación-de-la-metodología" class="outline-2">
<h2 id="aplicación-de-la-metodología"><span class="section-number-2">2.</span> Aplicación de la metodología</h2>
<div class="outline-text-2" id="text-aplicación-de-la-metodología">
<p>
Imagina que estás estudiando inglés en tu día a día y te gustaría
trackear tu conocimiento sobre el lenguaje, y la forma en que quieres
tomar notas en una carpeta llamada Zettelkasten donde estas creando
distintos archivos, principalmente en .txt (aunque podría ser cualquier
tipo de archivo). Hoy aprendiste una nueva regla gramatical, y quieres
guardar ese conocimiento, entonces harás algo como lo siguiente:
</p>

<ol class="org-ol">
<li>Ir a la carpeta Zettelkasten, y crear un archivo .txt con la
estructura <code>Fecha--Titulo__Tag.txt</code>, imaginemos que lo llamas
<code>20250130t105229--uso-de-la-palabra-more-y-less__ingles_gramatica.txt</code></li>
<li>Escribirás como leíste en el título a lo mejos escribirás una breve
definición y ejemplos sobre estas palabras como:</li>
</ol>

<pre class="example" id="org9bc1567">
- more significa más y less significa menos
  ejemplo: I love dogs more than cats.
  I feel like I have less time these days
</pre>

<ol class="org-ol">
<li value="3">Luego guarda ese archivo, y continua con tu día.</li>
</ol>

<p>
Hasta acá hay algunas cosas especiales, como puedes ver el archivo
creado es un nodo de conocimiento y su título contiene metadata (fecha,
nombre, tópicos), y su contenido por supuesto hasta ahora puede que sea
una simple toma de notas, pero en la medida de que vas incorporando
nuevo conocimiento, puedes construir relaciones y agregar nuevas capas
de conocimiento. Imaginemos que aprendiste algo nuevo en inglés, y tomas
notas sobre esto:
</p>

<ol class="org-ol">
<li value="4">Crear un archivo
<code>20250211t221209--regla-consecuencia-the-more-the-more__ingles_gramatica.txt</code></li>
<li>Escribes sobre la regla the more.. the more</li>
</ol>

<pre class="example" id="org3841d8d">
Cuando quieres usar un efecto que se produce cuando algo cambia puedes
usar la regla the more... the more

ej: - the more you study, the more you know
- the less time I have, the more productive I am

Importante saber las reglas gramaticales more o less para usar esta regla,
revisar 20250130t105229--uso-de-la-palabra-more-y-less__ingles_gramatica.txt
</pre>

<ol class="org-ol">
<li value="6">Guardar el archivo y seguir con tu vida.</li>
</ol>

<p>
Como puedes ver aquí volví a crear un archivo y esta vez linkié este
conocimiento con otro nodo. Así que con esto podemos ir creando una
carpeta de conocimientos y la metadata nos ayuda a preservar
clasificaciones, por lo que si quisieras también estudiar alemán por
ejemplo, puedes aprovechar esto para conectar conocimiento, tal vez se
te ocurra crear un nodo (.txt) para comparar gramática en ingles y
aleman, o tal vez estas también estudiando economía, y quieres crear una
tarjeta que incluya terminos económicos en inglés, por lo que usaras
tags como "economía" e "inglés", por ejemplo.
</p>

<p>
Es bastante simple, y no requieres ser un ingeniero de la Nasa para
construir algo como esto, puedes además facilmente buscar y filtrar
archivos a través de cualquier search, organizarlo y depurar el
conocimiento en la medida que accedes a él. Aquí coloqué ejemplos usando
.txt, pero podría ser lo que sea: archivos, imágenes, .pdf, videos, etc.
Así mismo puedes agregar links a la web, entre otras cosas.
</p>

<p>
Probablemente lo más tedioso en usar este método es como automatizar el
proceso de creación, guardado y linkeo de estos nodos, y de ahí que los
softwares pueden facilitar bastante este proceso.
</p>
</div>
</div>
<div id="outline-container-usando-emacs-y-denote" class="outline-2">
<h2 id="usando-emacs-y-denote"><span class="section-number-2">3.</span> Usando Emacs y Denote</h2>
<div class="outline-text-2" id="text-usando-emacs-y-denote">
<p>
El flujo de trabajo anterior es una explicación práctica (y opinable) de
como he estado usando Denote para el método Zettelkasten, obviamente
Denote me ayuda en la automatización de este proceso. Cabe notar de que
otra alternativa bastante popular a Denote es OrgRoam, dado que era más
popular me interesaba más, pero la idea de setear una base de datos para
poder trabajar con archivos, si bien práctica considero que le agrega
una capa de complejidad innecesaria. Por lo que decidí testear Denote
primero y terminó siendo más que aceptable.
</p>

<p>
En mi <code>init.el</code> agregué lo siguiente:
</p>

<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Denote to taking notes or the Second Brain
</span>(<span style="font-weight: bold;">use-package</span> denote
  <span style="font-weight: bold;">:ensure</span> t
  <span style="font-weight: bold;">:custom</span>
  (denote-directory <span style="font-style: italic;">"~/Denotes"</span>)
  (denote-rename-confirmations '(rewrite-front-matter))
  (denote-save-buffers t)
  <span style="font-weight: bold;">:config</span>
  (add-hook 'text-mode-hook #'denote-fontify-links-mode-maybe))

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Integration Denote with Org capture
</span>
(<span style="font-weight: bold;">with-eval-after-load</span> 'org-capture
  (add-to-list 'org-capture-templates
               '(<span style="font-style: italic;">"n"</span> <span style="font-style: italic;">"New (De)note"</span> plain
                 (file denote-last-path)
                 #'denote-org-capture
                 <span style="font-weight: bold;">:no-save</span> t
                 <span style="font-weight: bold;">:immediate-finish</span> nil
                 <span style="font-weight: bold;">:kill-buffer</span> t
                 <span style="font-weight: bold;">:jump-to-captured</span> t)))
</pre>
</div>

<p>
No hay mucho que agregar acá más que la instalación de la librería y
asegurarme de que en cualquier momento que precione <code>C-c c</code> pueda abrir
org capture y seleccionar Denote como opción, se abre un prompt para
agregar el título y tags. Y de inmediato se abre un archivo .org con la
metadata lista, y puedo tranquilamente escribir lo que requiera, luego
salvar el archivo con C-c C-c, y volver a lo que estaba haciendo
previamente. También puedo linkear notas para empezar a relacionar
conceptos dentro de la red de notas, y así esta se va ir desarrollando
organicamente.
</p>

<p>
Quiero recalcar que Denote es una herramienta con mayor complejidad,
tiene bastantes funcionalidades, pero mi uso es relativamente sencillo,
por lo que no he sentido la necesidad de experimentar con todo lo que
puede ofrecer esta herramienta.
</p>
</div>
</div>
<div id="outline-container-conclusiones" class="outline-2">
<h2 id="conclusiones"><span class="section-number-2">4.</span> Conclusiones</h2>
<div class="outline-text-2" id="text-conclusiones">
<p>
En estas semanas experimentando con el método Zettelkasten he visto
varias cosas interesantes, el primero es que la idea de tomar breves
periodos de estudios del tópico que te interesa, se hace más sencillo de
desarrollar organicamente con un sistema de toma de notas instantaneas
que vas depositando en un repositorio, esto es ideal cuando te
encuentras en el proceso de que aprendes algo mientras vas de paso. Pero
algunos desafíos que tienes que considerar:
</p>

<ol class="org-ol">
<li>Zettelkasten debiera ser un espacio para escribir notas depuradas de
lo que has aprendido, no algo como un copy paste de una definición de
Wikipedia.</li>
<li>Es positivo revisar estas notas constantemente, porque te permite
retroalimentarte de ese conocimiento y depurarlo mientras desarrollas
nuevas ideas.</li>
<li>Esto no es algo para escribir números de telefonos o lista de
supermercado</li>
<li>La parte más importante es sobre la producción de ideas y la conexión
de estas para la producción de nuevo conocimiento</li>
<li>La automatización ayuda bastante para que la producción de la red sea
más llevadera, esto te permite capturar ideas y conocimientos de
forma instantanea.</li>
</ol>
</div>
</div>
<div id="outline-container-referencias" class="outline-2">
<h2 id="referencias"><span class="section-number-2">5.</span> Referencias</h2>
<div class="outline-text-2" id="text-referencias">
<ul class="org-ul">
<li><a href="https://github.com/protesilaos/denote">https://github.com/protesilaos/denote</a></li>
<li><a href="https://protesilaos.com/emacs/denote">https://protesilaos.com/emacs/denote</a></li>
<li><a href="https://www.goodnotes.com/blog/zettelkasten-method">https://www.goodnotes.com/blog/zettelkasten-method</a></li>
<li><a href="https://www.alexkehayias.com/essays/zettelkasten-setup/">https://www.alexkehayias.com/essays/zettelkasten-setup/</a></li>
</ul>
</div>
</div>
]]>
</description></item>
<item>
<title>Sway: The brief introduction to tiling window managers</title>
<link>https://indymnv.xyz/posts/tooling/20240214-swaywm.html</link>
<pubDate>Wed, 14 Feb 2024 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20240214-swaywm.html</guid>
<description>
<![CDATA[<p>
I can't lie to you that I've had some free time these days, which I've
taken advantage of to learn about GNU/Linux Desktop. By installing it on
two laptops, I've been able to learn about the kernel and the Ubuntu and
Fedora operating systems. However, when I began my journey, I was
playing in a safe environment like GNOME, this window manager that
provides almost all the tools you need to start without having to tinker
too much. But well, certain people say that you also learn about Linux
when you have to use a tiling window manager (twm). So, this article is
to tell you about how I've used a Mac M1, along with Fedora Asahi Remix,
and installing Sway, a popular twm that allows you to create that fancy
desktop that you can share on Reddit
<a href="https://www.reddit.com/r/unixporn/">r/unixporn</a>.
</p>

<p>
Let's go for the first rice!
</p>


<div id="orgdf43986" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///2024_02_14_swaywm/20240213_16h55m18s_grim.png" alt="20240213_16h55m18s_grim.png" />
</p>
<p><span class="figure-number">Figure 1: </span>kawaii<sub>sway</sub></p>
</div>
<div id="outline-container-what-is-a-twm-why-is-it-popular-in-linux" class="outline-2">
<h2 id="what-is-a-twm-why-is-it-popular-in-linux"><span class="section-number-2">1.</span> What is a twm? Why is it popular (in Linux)?</h2>
<div class="outline-text-2" id="text-what-is-a-twm-why-is-it-popular-in-linux">
<p>
It is said that there are two paradigms within the world of window
managers: Stacking and Tiling. If you use Windows or MacOS, you may be
familiar with the former, where basically the windows you operate for
each running software can be overlapped, while the latter works on the
avoidance of this (although it can be done) to take advantage of the
space used by each program.
</p>

<p>
Despite this, the popularity of tiling window managers is mainly due to
a niche, primarily the Linux community. You can check out the famous
Reddit r/unixporn where people customize their operating systems to make
them aesthetically and operationally tailored to their users. It's worth
noting that this is not exclusively a characteristic of tiling window
managers, but they do have a strong representation in that environment.
</p>

<p>
Finally, the reason why twms are interesting as software is that they
are lightweight, highly customizable, and through the use of shortcuts,
they can allow your workflow to be more efficient if you learn to use
them.
</p>
</div>
</div>
<div id="outline-container-installing-sway-and-configuring-it." class="outline-2">
<h2 id="installing-sway-and-configuring-it."><span class="section-number-2">2.</span> Installing Sway and Configuring it.</h2>
<div class="outline-text-2" id="text-installing-sway-and-configuring-it.">
<p>
When installing Asahi Linux on MacOS, I decided to install GNOME, which
is a stacking window manager, and I was working normally within that
ecosystem. Typically, this environment is quite user-friendly, with
LibreOffice installed, Firefox, file management, etc.
</p>

<p>
Within this environment, I decided to install a tiling window manager
(twm). Initially, I wanted to install i3, which is a very popular tiling
window manager with more documentation and tutorials available. However,
despite my attempts to install it, I ended up failing. This was probably
because GNOME was mainly working in Wayland, which is a protocol server
that the Asahi Linux ecosystem was based on, while i3 is based on the
X11 protocol. For this reason, I had to switch to Sway, which is a twm
based on Wayland. To install it, you simply open the terminal and type:
</p>

<div class="org-src-container">
<pre class="src src-sh">sudo dnf install sway
</pre>
</div>

<p>
After entering that command in the terminal, you will install the window
manager. Then, you close the session or reboot your system. When you
need to log in again, go to the bottom right section and select Sway
from the list of window managers to start the new environment. You
should notice that the screen has nothing but a new wallpaper and a top
bar. From there onwards, you'll need to go to your configuration file
located at <code>~/.config/sway/config</code> and add some configurations if
needed. I personally made a few changes, for example:
</p>

<ol class="org-ol">
<li>Adding layouts to switch between Spanish, English, and Japanese:</li>
</ol>

<div class="org-src-container">
<pre class="src src-sh">input type:keyboard {
    xkb_layout latam,us,jp
    xkb_options grp:alt_shift_toggle
}
</pre>
</div>

<ol class="org-ol">
<li value="2">Tab style, where I remove borders, add gaps, and use a color
adjusted to the gruvbox format for focused windows:</li>
</ol>

<div class="org-src-container">
<pre class="src src-sh">gaps inner 10
gaps outer 10

client.focused <span style="font-style: italic;">"#98971A"</span> <span style="font-style: italic;">"#98971A"</span> <span style="font-style: italic;">"#ffffff"</span> <span style="font-style: italic;">"#98971A"</span>
font pango:monospace 0
titlebar_padding 1
titlebar_border_thickness 0
</pre>
</div>

<ol class="org-ol">
<li value="3">Set Audio and brightness shortcuts</li>
</ol>

<div class="org-src-container">
<pre class="src src-sh"><span style="font-weight: bold; font-style: italic;">#</span><span style="font-weight: bold; font-style: italic;">Set audio 
</span><span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">Increase volume
</span>bindsym $<span style="font-weight: bold; font-style: italic;">mod</span>+F12 exec pactl set-sink-volume @DEFAULT_SINK@ +5%

<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">Decrease volume
</span>bindsym $<span style="font-weight: bold; font-style: italic;">mod</span>+F11 exec pactl set-sink-volume @DEFAULT_SINK@ -5%

<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">Mute/unmute
</span>bindsym $<span style="font-weight: bold; font-style: italic;">mod</span>+F10 exec pactl set-sink-mute @DEFAULT_SINK@ toggle

<span style="font-weight: bold; font-style: italic;">#</span><span style="font-weight: bold; font-style: italic;">Set Brightness
</span><span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">F9 - Decrease brightness
</span>bindsym $<span style="font-weight: bold; font-style: italic;">mod</span>+F9 exec brightnessctl s 5%+

<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">F8 - Increase brightness
</span>bindsym $<span style="font-weight: bold; font-style: italic;">mod</span>+F8 exec brightnessctl s +5%-
</pre>
</div>

<p>
This is generally some of the changes I made, trying to adjust it to my
workflow, and it's been going quite well, to be honest.
</p>
</div>
</div>
<div id="outline-container-shortcuts-shortcuts-shortcuts" class="outline-2">
<h2 id="shortcuts-shortcuts-shortcuts"><span class="section-number-2">3.</span> shortcuts shortcuts shortcuts!</h2>
<div class="outline-text-2" id="text-shortcuts-shortcuts-shortcuts">
<p>
One of the strengths (and challenges) of working in a twm is that you
quickly feel encouraged to use more shortcuts after realizing that you
can open the terminal, the browser, send windows to other workspaces,
and move between those workspaces. If you're using the Vimium extension
in your browser and also use Vim for text editing, you may resonate with
this way of working as it's quite consistent.
</p>

<p>
I get the impression that twms strongly encourage working in the
terminal, so you may consider installing other software to work
harmoniously in this environment. Some of the software I've been
incorporating into this environment:
</p>

<ul class="org-ul">
<li>(Neo)Vim: Text editor</li>
<li>Tmux: Terminal multiplexer</li>
<li>Newsboat: An RSS reader</li>
<li>Alacritty: Terminal</li>
<li>Zsh: Unix shell</li>
<li>Cmus: Music player</li>
<li>Ranger: File manager</li>
<li>htop: For system monitoring</li>
<li>waybar: A highly customizable bar for Sway</li>
<li>dmenu: Application launcher</li>
</ul>

<p>
You can visit my <a href="https://codeberg.org/indymnv/.dotfiles">.dotfiles</a>
</p>
</div>
</div>
<div id="outline-container-is-it-all-worth-it" class="outline-2">
<h2 id="is-it-all-worth-it"><span class="section-number-2">4.</span> Is it all worth it?</h2>
<div class="outline-text-2" id="text-is-it-all-worth-it">
<p>
Short and obvious answer: it depends. If you're someone willing to
invest the time to understand and configure your system, I'm sure it can
accelerate your workflow process, and you might even enjoy working in
this mode. I personally have enjoyed it, especially the way you can
simply fly between different workspaces, making the experience
incredibly satisfying. However, I've also had some annoying moments. For
example, when you want to connect your devices via Bluetooth, you'll
have to do it in the terminal, although you can open the settings within
Sway if you're using GNOME or KDE Plasma, but otherwise you'll have to
figure out how to do it in the terminal. Similarly, if you want to
connect to Wi-Fi or take a screenshot, these small things that are so
simple in general in other systems with a GUI can be a bit annoying to
perform in the terminal or try to build your own shortcut in a config
file. So, things that you had very well resolved before, you now have to
rethink.
</p>

<p>
Likewise, if you're not someone who is really interested in delving into
config files and prefers just navigating with your mouse within a GUI,
then simply stick with GNOME or KDE or any other stacking window
manager. Although I would still recommend installing a twm at least once
to experience it.
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>Set up NeoVim + Tmux for a Data Science Workflow with Julia</title>
<link>https://indymnv.xyz/posts/tooling/20230704-neovim-tmux-datascience-workflow.html</link>
<pubDate>Tue, 04 Jul 2023 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20230704-neovim-tmux-datascience-workflow.html</guid>
<description>
<![CDATA[
<div id="orgdd40c04" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///love-neovim.jpeg" alt="love-neovim.jpeg" />
</p>
<p><span class="figure-number">Figure 1: </span>love neovim</p>
</div>

<p>
In this post, I will provide some notes on getting started with Neovim
for a Data Science Workflow. This setup is not strictly related to Julia
and can also be used with Python and R. The idea is to work with a
double panel structure, where one side contains your code and the other
side has the REPL, which receives the snippets of code you send from the
code side.
</p>

<p>
In this blog, I will mention the things you can add to make it
comfortable for data analysis or more serious development. With this
typical kick starter in Neovim and Tmux, I will explain some changes and
new packages that are important for this purpose. Finally, I will dive
into the details that still need improvement.
</p>
<div id="outline-container-why-start-using-neovim-and-tmux-my-motivations" class="outline-2">
<h2 id="why-start-using-neovim-and-tmux-my-motivations"><span class="section-number-2">1.</span> Why start using Neovim and Tmux? My motivations</h2>
<div class="outline-text-2" id="text-why-start-using-neovim-and-tmux-my-motivations">
<p>
I must say, I like notebooks. I used them extensively in my first job in
analytics, and they really helped me dive into the problem and
experiment with different use cases. I have also worked with VSCode,
although I am not a big fan of it, it has helped me in some specific use
cases where a more "software engineering" perspective is needed.
</p>

<p>
With that in mind, when I read the book "Approaching Almost Any Machine
Learning Problem" by Abhishek Thakur, and then watched the controversial
and yet funny conference by Joel Grus on why he
<a href="https://www.youtube.com/watch?v=7jiPeIFXb6U&amp;ab_channel=O%27Reilly">dislikes
notebooks</a>, I started to think deeply about the perspective of writing
software that follows good practices, is expressive, and still easy to
prototype. Unfortunately, I think Grus is right about it. Working with
notebooks can lead to some weird behaviors, like running cells in
different positions, populating your analysis with too much unnecessary
information and plots, not creating abstractions when needed, and having
issues with reproducibility. On the other hand, the script perspective
didn't help me with fast iteration when I needed quick answers to simple
questions.
</p>

<p>
When I moved to Julia, I realized that the REPL is in another level, and
I understood that an important part of this community uses (Neo)Vim or
Emacs for development. I was curious about using these tools for data
science projects. Although there are not many articles about it, and the
community using Vim/Emacs is quite small compared to other options, I
found it pretty cool because it is minimalistic (though you can
customize it extensively), fast, and promises to increase productivity
after mastering the Vim keybindings (in 10 years).
</p>

<p>
What I realized is that you can still prototype like notebooks (but with
a perspective closer to RStudio) with one pane for your code and another
pane with your REPL open. Then, you can start transforming your code to
make it look like serious software, all within one window without moving
all the .ipynb file contents to another .py or .jl file. I found this
workflow more enjoyable.
</p>
</div>
</div>
<div id="outline-container-instalation-process-required" class="outline-2">
<h2 id="instalation-process-required"><span class="section-number-2">2.</span> Instalation process required</h2>
<div class="outline-text-2" id="text-instalation-process-required">
<p>
First of all, make sure to install Neovim and Tmux. There are plenty of
tutorials out there on this topic, so I won't go into the details here.
</p>

<p>
The important thing is to create an init.lua file. If you don't want to
install everything one by one, I recommend following the
<a href="https://github.com/nvim-lua/kickstart.nvim">kick starter</a>, provided
by nvim-lua/kickstart.nvim. It provides the basic tools for working with
Neovim, including a package manager, Treesitter, LSP integration, etc.
This kickstarter uses LazyVim, which should be faster and doesn't
require frequent updates like PackerNvim. Just create the init.lua file,
copy and paste all the content into that file, save it, and quit. When
you open it again, it should start installing or upgrading everything.
</p>

<p>
Also you want to create a Tmux config, the default config in Tmux is
already ok for working with Data Science or the Julia experience, but
anyway you would want to edit a file for setting a colorscheme or edit
some shortcuts, to create just add <code>~/.tmux.conf</code>
</p>

<p>
You also want to create a Tmux config file. The default config in Tmux
is already suitable for working with Data Science or the Julia
experience, but you may want to edit it to set a colorscheme or modify
some shortcuts. Just add <code>~/.tmux.conf</code> to create the file.
</p>
</div>
</div>
<div id="outline-container-editing-the-init.lua-and-tmux.config" class="outline-2">
<h2 id="editing-the-init.lua-and-tmux.config"><span class="section-number-2">3.</span> Editing the init.lua and tmux.config</h2>
<div class="outline-text-2" id="text-editing-the-init.lua-and-tmux.config">
<p>
Here are the things required for editing the init.lua file:
</p>

<ol class="org-ol">
<li>Add Julia in the init.lua for
<a href="https://github.com/nvim-lua/kickstart.nvim/blob/master/init.lua#L309">treesitter</a>
and also consider to add the julials = {} for
<a href="https://github.com/nvim-lua/kickstart.nvim/blob/master/init.lua#L427">local
servers</a></li>
<li>Make sure to add the sysimage for the languageserver. in this
<a href="https://discourse.julialang.org/t/neovim-languageserver-jl/37286/83?page=5">discussion</a>,
they summarize the procedures well, Follow the instructions and add
the snippet of code to your init.lua</li>
</ol>

<div class="org-src-container">
<pre class="src src-julia">-- Run Julia LSP
require'lspconfig'.julials.setup{
    on_new_config = function(new_config, _)
        local julia = vim.fn.expand("~/.julia/environments/nvim-lspconfig/bin/julia")
        if require'lspconfig'.util.path.is_file(julia) then
        -- vim.notify("Hello!")
            new_config.cmd[1] = julia
        end
    end
}
</pre>
</div>

<ol class="org-ol">
<li value="3">This should be enough for setting up Julia. If you open a Julia
file, Neovim should be able to detect the LSP and work with other
properties like jump to definition, etc. For R and Python, this
should be a bit more straightforward for now (not need step 2).</li>

<li>There are other things you want to add, for a data science project,
one is <a href="https://github.com/jpalardy/vim-slime">vim-slime</a>, This
package is great for sending snippets of code from your file to a
Julia REPL. Make sure to install it and add the following code to
your init.lua. This will allow you to open a Tmux pane and start
interacting with the file. You can modify the snippet below to change
your target<sub>pane</sub> (if you prefer the REPL on your left side or above,
you can change this). The actual shortcut is Ctrl-c + Ctrl-c, which
you can modify if you prefer.</li>
</ol>

<div class="org-src-container">
<pre class="src src-julia">vim.g.slime_target = 'tmux'
-- vim.g.slime_default_config = {"socket_name" = "default", "target_pane" = "{last}"}
vim.g.slime_default_config = {
  -- Lua doesn't have a string split function!
  socket_name = vim.api.nvim_eval('get(split($TMUX, ","), 0)'),
  target_pane = '{top-right}',
}
</pre>
</div>

<ol class="org-ol">
<li value="5">For Tmux, there are some things you can add. Here is my config,
which is really simple. However, I encourage you to find your own
taste with Tmux.</li>
</ol>

<div class="org-src-container">
<pre class="src src-sh"><span style="font-weight: bold;">set</span> -g mouse on
<span style="font-weight: bold;">set</span> -g history-limit 102400
<span style="font-weight: bold;">set</span> -g base-index 1
<span style="font-weight: bold;">set</span> -g pane-base-index 1
<span style="font-weight: bold;">set</span> -g renumber-windows on

unbind C-b
<span style="font-weight: bold;">set</span> -g prefix C-x

<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">vim key movements between panes
</span><span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">smart pane switching with awareness of vim splits
</span>bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">reloading for now:w
</span>
unbind r 
bind r source-file ~/.tmux.conf <span style="font-style: italic;">\;</span> display <span style="font-style: italic;">"Reloaded ~/.tmux.conf"</span>
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">plugin
</span><span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
</span>
<span style="font-weight: bold;">set</span> -g @plugin <span style="font-style: italic;">'egel/tmux-gruvbox'</span>
<span style="font-weight: bold;">set</span> -g @tmux-gruvbox <span style="font-style: italic;">'dark'</span> <span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">or 'light'
</span>run <span style="font-style: italic;">'~/.tmux/plugins/tpm/tpm'</span>
</pre>
</div>

<p>
For this purpose, I have considered the following in my Tmux config:
activate the mouse, increase the history limit in the panes (this is
necessary because the default limit in Tmux is quite constrained), count
from 1 with panes, change the prefix (I found it easier to use Ctrl-x
rather than Ctrl-b), and add the keybindings to move between paneslike
vim. The r shortcut is used to restart the config file when you add or
modify features, so you can use prefix + r to apply your changes.
Finally, in Tmux, you can use a package manager called TPM. Make sure to
added in your config file.
</p>
</div>
</div>
<div id="outline-container-some-challenges-for-improving-the-workflow" class="outline-2">
<h2 id="some-challenges-for-improving-the-workflow"><span class="section-number-2">4.</span> Some challenges for improving the workflow</h2>
<div class="outline-text-2" id="text-some-challenges-for-improving-the-workflow">
<p>
So far, the workflow with Neovim and Tmux has been set up nicely.
However, there are some areas that can be improved. One of them is the
visualization aspect. As a data scientist, you need to constantly
iterate and visualize your data. If you want to have a deep
understanding of your dataset and generate plenty of visualizations, the
current setup may not be the best. However, in Julia, you can easily
switch to Pluto to display all the figures you want. One thing I have
tried is to constantly display those plots you are working on inside the
terminal. One way to do this is by using
<a href="https://github.com/JuliaPlots/UnicodePlots.jl">unicodeplots</a>. If you
like working with Plots.jl, you can change your backend from gr() to
unicodeplots(). In my opinion, the quality of the visualization may not
be the best, but it allows for instant plots in your terminal without
the need for third-party software. For fast iteration, it is good
enough.
</p>

<p>
Another important point to consider is maintaining consistency in the
workflow between Julia code and the Julia REPL. Currently, I have a
workflow with Vim and my code, but the REPL follows a different logic.
This is where the aforementioned repository could potentially help, as
it aims to bridge the gap and maintain homogeneity between the two
panels. Integrating Vim keybindings into the
<a href="https://github.com/caleb-allen/VimBindings.jl">REPL</a> would provide a
seamless experience, allowing for a smoother transition and enhancing
the overall workflow. It is definitely an area I look forward to
exploring in the future to further improve my development process.
</p>
</div>
</div>
<div id="outline-container-conclusions" class="outline-2">
<h2 id="conclusions"><span class="section-number-2">5.</span> Conclusions</h2>
<div class="outline-text-2" id="text-conclusions">
<p>
In this blog, I have explained how to set up Neovim and Tmux with Julia
(or any other data science programming language). This setup provides a
minimalist perspective. For people who like to have a variety of tools
at hand, it may feel a bit lacking. However, if you are someone who is
looking for a lightweight tool, minimalistic design, and enjoys working
within the terminal, I highly recommend giving it a try.
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>Finding comfort in the GNU/Linux Desktop</title>
<link>https://indymnv.xyz/posts/tooling/20240116-linux-experience.html</link>
<pubDate>Fri, 19 Jan 2024 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20240116-linux-experience.html</guid>
<description>
<![CDATA[
<div id="org4c46474" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///2024_01_16_linux_experience/yamete_linux_sama.jpg" alt="yamete_linux_sama.jpg" />
</p>
<p><span class="figure-number">Figure 1: </span>yamete</p>
</div>

<p>
I have been a Windows user for most of my life, and for a little over
two years, I have used MacOS; this article talks about my reasons and
experiences in using GNU/Linux as an operating system, the transition,
its strengths, and weaknesses.
</p>

<p>
My first motivation is a mixture of curiosity and the desire to find a
free operating system, with the same idea in mind in my previous post
where I wanted to move more towards free software, the main piece was
the operating system.
</p>

<p>
For that reason, I have taken two laptops this holiday: a MacBook Pro M1
and an Acer Aspire E5-411. The first is an outstanding Apple laptop; the
second is an old machine that I have used at the university since about
2012
</p>
<div id="outline-container-ubuntu-and-asahi-fedora-remix" class="outline-2">
<h2 id="ubuntu-and-asahi-fedora-remix"><span class="section-number-2">1.</span> Ubuntu and Asahi Fedora Remix</h2>
<div class="outline-text-2" id="text-ubuntu-and-asahi-fedora-remix">
<p>
For these two machines, I installed different operating systems, for the
old laptop at first I wanted to install Arch Linux, the truth is that
that operating system attracted me more attention, but I was having
problems with the installation and not recognizing the problem, I ended
up taking a few steps back and decided to try something simpler. Then, I
started my process with Ubuntu.
</p>

<p>
I still had doubts about the MacBook Pro, as it was the project whose
primary choice was to go with Fedora. Even though there are experienced
people who have installed another operating system, Asahi's team is
working along with this distribution to advance the project of bringing
the latest MacBooks so that they can be used without significant
problems in Linux environments. But a few days ago, they made the
official release. And I decided to give it a chance.
</p>


<div id="org66ad565" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///2024_01_16_linux_experience/two_machines.jpg" alt="two_machines.jpg" />
</p>
<p><span class="figure-number">Figure 2: </span>gigachadmachines</p>
</div>

<p>
The final result: In general, it is better than expected; my old laptop
got a second life; I could use it for work that does not require
high-intensity computing, such as internet browsing, writing documents,
etc. While the MacBook Pro excepting some details still works well.
</p>
</div>
<div id="outline-container-experience-with-linux-and-asahi-fedora-remix." class="outline-3">
<h3 id="experience-with-linux-and-asahi-fedora-remix."><span class="section-number-3">1.1.</span> Experience with Linux and Asahi Fedora Remix.</h3>
<div class="outline-text-3" id="text-experience-with-linux-and-asahi-fedora-remix.">
<p>
To begin with, it's worth highlighting how simple it is to install Linux
following Asahi's instructions. In fact, as a user experience, I found
it easier to do it through the terminal than through a USB boot, as was
the case with Ubuntu. In the installation process, I decided to proceed
with Fedora + Gnome for the desktop to maintain a similar standard with
the other machine that uses Ubuntu.
</p>

<p>
What are the problems I mentioned earlier? Primarily the following
points:
</p>

<ul class="org-ul">
<li>Bluetooth sometimes has issues connecting devices, and occasionally,
you need to delete and reconnect the device, especially with a
Logitech mouse that I use frequently.</li>
<li>When entering suspended mode, the machine consumes more battery than
MacOS would, which might be the most annoying problem I've encountered</li>
<li>The touchpad has become more sensitive to touch, which can cause your
cursor to move while you are typing on the Mac's keyboard.</li>
<li>Audio quality seems to have decreased slightly.</li>
</ul>

<p>
Regarding software, I haven't encountered major issues. I was able to
successfully install Codium, Neovim, Alacritty, Tmux, Julia, Python, and
R. However, I also wanted to install LibreWolf (a fork of Firefox
focused on privacy). Nevertheless, I experienced some problems in the
process and decided to abandon that since it wasn't essential software
for me.
</p>
</div>
</div>
</div>
<div id="outline-container-and-now-what" class="outline-2">
<h2 id="and-now-what"><span class="section-number-2">2.</span> And now what?</h2>
<div class="outline-text-2" id="text-and-now-what">
<p>
Finally, I believe I will continue using Linux, at least for the older
PC, as it seems worthwhile to have a supportive device or for simple
experimentation. Moreover, my interest in using Linux as the primary
operating system is growing. I would probably switch to Fedora since I
find the Gnome version of it more user-friendly than Ubuntu's. Regarding
the MacBook, I will continue working in the Asahi/Fedora environment,
but in case of any complications, I will revert to MacOS. I'll maintain
the dual boot, even though I have some specific issues with its
interaction. Nevertheless, I still find it quite manageable to use Asahi
on this powerful machine.
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>Arch, Debian, Suckless and wrapping up the Linux experience</title>
<link>https://indymnv.xyz/posts/tooling/20240421-suckless.html</link>
<pubDate>Fri, 19 Apr 2024 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20240421-suckless.html</guid>
<description>
<![CDATA[
<div id="org759b952" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///2024_04_21_suckless/tony_dwm.jpg" alt="tony_dwm.jpg" />
</p>
<p><span class="figure-number">Figure 1: </span>tony</p>
</div>

<p>
If you want to read the spanish version visit the following
<a href="https://indymnv.xyz/posts/tooling/../2024_04_21_suckless_es">link</a>
</p>

<p>
After spending some time tinkering with a second-hand ThinkPad T480 that
I ended up buying in a remote corner of the city where I live, I've been
trying out different Linux distributions and desktop environments, but
overall I'll focus on two distributions that in my opinion are the most
important: Debian and Arch. In addition to this, I wanted to try out a
new Tiling Window Manager that had also caught my attention, as well as
a set of software that embodies an interesting philosophy: Suckless.
</p>
<div id="outline-container-some-experiences-with-arch-and-debian" class="outline-2">
<h2 id="some-experiences-with-arch-and-debian"><span class="section-number-2">1.</span> Some experiences with Arch and Debian</h2>
<div class="outline-text-2" id="text-some-experiences-with-arch-and-debian">
<p>
To start with the distributions, Debian is incredibly simple to get
started with, the installation is approachable, and I must admit that I
like that it is (or pretends to be) 100% free software. Furthermore,
once you go through the installation process, the desktop you choose
just works, no surprises, it's rock solid, and of course, you don't
expect much on the horizon regarding updates. In fact, every time I did
an apt update, everything was simply up to date. So it's a rather boring
distribution if you want to be constantly surprised with new things, but
for me, this is quite positive, as it maintains certainty in the system,
you know it won't fail unless you do something stupid. Regarding the
software you install, obviously this is where you notice the gap, since
Debian is quite conservative when it comes to bringing software into its
main repository and therefore it's not uncommon to have software
versions that may be 10 or 12 months behind the current development
version. This may not be a big problem, but each software has a
different development speed, and in a year you can have significant
differences. Also, if you've been carrying more updated versions of
programs that have some kind of config file, that can be a problem. An
example where I noticed this was when I wanted to install Alacritty and
port my .toml file with my configurations, when using it, I realized
that the changes weren't applied. The reason was that the version of
Alacritty that comes from Debian's apt was an old version that used .yml
files, so I had to 1) adapt my configuration files to this version,
which for this case wasn't complicated, or 2) compile from source.
</p>

<p>
Compiling from source isn't a bad approach, however, it means that
you're at the mercy of your package manager taking care of future
updates, and obviously that can represent a risk. An important issue
with a system like Linux is that you have your software updated and
operating harmoniously with your operating system. Of course, there's
nothing wrong with compiling from source, I've done it with some
software, but it's important to note that it's not the most desirable.
However, a positive aspect to recognize is that Debian has a vast
repository, which reduces the chances of having to resort to installing
from source code.
</p>

<p>
On the other hand, I'm now using Arch (btw) so I'm still in a process of
experimentation with this variant. Arch is different in its installation
process, although now there's a script that simplifies the process, the
manual installation is in the terminal by typing commands and where you
have to follow the instructions from the wiki, it's not that difficult,
but obviously it's more likely that you can make a mistake along the way
and therefore mess up, in fact, I messed up a couple of times because I
didn't configure the Nvidia driver properly and therefore my system
failed, so I had to start the process again.
</p>

<p>
If you want up-to-date software, this is the distribution and even if
you want to access proprietary software, Arch has no problems, it's a
distribution agnostic and therefore has a laissez-faire mentality
towards users, I can run the analog of apt update which in this case is
Pacman -Syu every day and there may be new updates. Obviously with
software like Alacritty or Neovim I didn't have to resort to compiling
it from source because Arch itself provides recent updates which is also
a pleasure not to have to directly intervene with the code, another
thing is that in addition to the base repository, Arch has the AUR which
is another repository where the community can upload software and of
course that allows your possibilities to expand, however in my
experience, it's in the AUR where you have more chances of software
failure.
</p>

<p>
Here are some other examples of software that allowed me to compare
distributions. As I like to watch anime, I wanted to install
<a href="https://github.com/pystardust/ani-cli">ani-cli</a> which is an
application to watch content from the terminal (you have to thank that
the hacker community is quite otaku), unfortunately, this software in
Debian is not considered in its main repository yet and will apparently
be added in version 13, so one option was to compile it, but I finally
gave up on it. On the other hand, with Arch there was no problem, the
repo was in AUR so the installation was quite simple. The second case
was <a href="https://apps.ankiweb.net/">Anki</a>, a flashcard application, which
I like and have used a lot to learn languages so I thought about
installing it on my pc as well (although the Android app is quite good
to be honest), unfortunately Anki is a mess, I went to the documentation
and tried to install it following the instructions but had problems in
the process, fortunately Debian has Anki in its main repository, so
installing it with apt was the best option, on the other hand Arch had
it in the AUR, however, I had problems with the installation so I didn't
continue with it. The third and last case was
<a href="https://librewolf.net/">Librewolf</a>, in this case Debian had no
problems, by following the steps in the documentation the issue worked
without problems, Arch had it in the AUR, and the installation process
took quite some time and finally I had problems with that but the binary
worked fine.
</p>

<p>
As a side note, I must praise the Arch Linux Wiki, you may or may not
like Arch, but I think no one can deny that its documentation is of a
high level, it helped me to see a specific case where I wanted to see
how to install the Japanese keyboard on it with the kanas specific to
the writing of this language, I checked the documentation in Debian and
Arch, finally the latter gave me clear instructions on how to configure
it correctly, besides that on other occasions when I've had problems
with something in Debian/Ubuntu/Fedora or even Arch itself the Wiki has
been helpful.
</p>

<p>
Finally, I want to highlight that both have the possibility of minimal
installations, so if you have a laptop with hardware restrictions, I
think there's no problem with any of these variants for you to do a
minimal installation and instead of using a bloated desktop environment,
you can use a window manager that will be much lighter and more
efficient in resources like Sway, i3, or dwm. Although I wrote about
Sway in another post, now I want to focus on dwm and another set of
software that belongs to suckless.
</p>
</div>
</div>
<div id="outline-container-suckless-software-that-suckless" class="outline-2">
<h2 id="suckless-software-that-suckless"><span class="section-number-2">2.</span> Suckless: Software that suckless</h2>
<div class="outline-text-2" id="text-suckless-software-that-suckless">
<p>
<a href="https://suckless.org/">Suckless</a> is a community of hackers who have
built a set of software based on the concepts of minimalism, simplicity,
and frugality, part of this decision you can read in their
<a href="https://suckless.org/philosophy/">philosophy</a>, but to try to get to
the point, all the code is written in C, and there are no configuration
files, if you want to install this, you download the code and compile
it, if you want to make modifications to something, you go straight to
the C source code and modify it and recompile it. The most important
software (in my opinion) are:
</p>

<ol class="org-ol">
<li>st a terminal emulator</li>
<li>dwm the window manager</li>
<li>dmenu the dynamic menu that you can use to run your programs</li>
</ol>

<p>
Something you have to notice is that this software has minimal features,
for example, St doesn't have a way to scroll, nor does it have a way to
make your terminal transparent, if you want to achieve this, you have
two options: the first is to write the code yourself, but if you're like
me and have no idea about C then accessing the patches that the
community has created and improved over time is the option, so for
example, to the terminal I can add transparency with alpha and a gruvbox
color scheme. To dwm I can add patches to add gaps with useless gaps.
all this just with the command
</p>

<div class="org-src-container">
<pre class="src src-sh">patch -p1 &lt; path/to/patch
</pre>
</div>

<p>
It should be noted that starting to add patches can lead to errors, so
you will have to be the one to make the corresponding adjustments for
the failures, and in some cases if you have several patches in mind, you
have to consider that there is a more appropriate order to do it to
reduce the potential number of errors. Obviously the idea is not that
you go and take a collection of patches that you "like" and apply them,
but that you be much more austere and select them according to a real
need that arises, for example, I only applied useless gaps to dwm for a
bit of aesthetics, but the truth is that dwm by itself has been
fantastic, I haven't had the intention of adding another patch for now,
I haven't needed to add scrolling to st, since I use tmux quite a bit,
which serves that function as a substitute. So if you like to add things
to your application just because, it's possible but you'll have to deal
with debugging the errors that occur while adding the patches.
</p>

<p>
Other software that I have been adding and that follows a similar
philosophy:
</p>

<ol class="org-ol">
<li>nsxiv: To display images</li>
<li>scrot: screenshots</li>
<li>feh: set an image as background</li>
<li>cmus: music player</li>
<li>ly: minimal session manager.</li>
<li>mpv: Media player</li>
<li>slock: lock your system with a password.</li>
<li>xclip: X11 clipboard</li>
</ol>

<p>
Among others&#x2026;
</p>

<p>
Obviously I have to point out that these exercises for a machine that
isn't really that old and has relatively decent hardware maybe is
considered exaggereted, as an exercise it was worth it and it taught me
a lot about minimal installations and how you can reach customization
levels while keeping resource usage to a minimum and in fact I will
continue using this configuration until I get bored, but if you're not
interested in that Gnome or KDE run quite well on a machine like this.
</p>
</div>
</div>
<div id="outline-container-conclusions-at-the-end" class="outline-2">
<h2 id="conclusions-at-the-end"><span class="section-number-2">3.</span> Conclusions at the end</h2>
<div class="outline-text-2" id="text-conclusions-at-the-end">
<p>
Regarding Arch and Debian I don't have a clear preference yet, both have
their pros and cons, for now I'll continue using Arch to continue
evaluating how it goes. Although there are other distributions, even
some more hardcore ones like Gentoo, for now my curiosity hasn't reached
that point yet.
</p>

<p>
Suckless software is an interesting perspective, quite radical to market
trends and for a niche taste, I can't imagine many people wanting to get
into this point, but for those who do, I'm sure it's a good exercise to
use something like dwm, inspect the C code, customize, add patches, etc.
If you can do that, the idea of making your own software for a specific
personal need may not be so far-fetched.
</p>

<p>
I've also had a lot of fun with Linux over the past 4 months, it has
taught me a lot about how an operating system works especially when I've
wanted to go to slightly deeper levels and start eliminating the use of
interfaces, I'm not going to call myself a "power user", but certainly t
here's some knowledge that I value and I understand a bit more about
those people who want to know more about their system and adjust it to
their liking and have absolute control over it. If there's anyone
interested in knowing what my "learning path" was, which by the way was
not planned at all it was just pure curiosity, I would describe it as
follows:
</p>

<ol class="org-ol">
<li>Install free and open source software on your own machine, even if
you're on MacOS or Windows. Install and familiarize yourself with
their basic uses and if you can include it in something you do daily
even better. For example, Vim, Python, R, LibreOffice, etc.</li>

<li>Learn basic commands in a terminal: commands like cd, mv, rm, cp, ls.
I use them constantly nowadays and I would recommend reading a bit
about them and doing some tests to remove the fear of the black
screen, then you can add new commands like curl, grep, sed, etc.</li>

<li>Install Ubuntu or another friendly distribution: I used Ubuntu at the
time, there are people who criticize it currently for various
reasons. But something that Ubuntu has is that its installation
process was super friendly, a modern look, there's plenty of
documentation on the internet and it works well. Linux Mint seems
like another good alternative to Ubuntu, but I don't have experience
with that distribution. This is for a start, later if you want to
move to another distribution nothing will prevent you from doing it</li>

<li>Get familiar with the package manager: The first way to install
software is from the terminal using your package manager, if you're
on Ubuntu or Mint you'll have to use something like sudo apt update
and then sudo apt install yoursoftware, there are other alternatives
to install software but this should be your priority method.</li>

<li>Install software by compiling source code: Take a software that
interests you, go to its documentation or the repository where it is
and read about its installation process, probably besides the package
manager it will have a space where it will give instructions on how
to do it, follow those instructions.</li>

<li>Use a Tiling Window Manager: There are two major desktop environments
in Linux GNOME and KDE, both have a lot of features and you can
easily navigate in them, adjust brightness, connect to wifi, explore
your folders with files, screenshots, etc. With a twm you won't have
any of that, and you'll have to look up how to execute each of these
commands, you need to connect your mouse via bluetooth, one possible
solution is to install bluez and bluez utils, open the terminal and
use the bluetoothctl command, there are also GUI options, but it will
depend on you to find a way to execute it. Play with this and if you
want try to do a ricing (configure your environment to look
aesthetically attractive).</li>

<li>Create a remote server and run some programs on them: If you have an
old laptop, or a raspberry pi, or rent a vps, you can try to create a
remote server where you can host some programs, this is the path to
another world that is self-hosting, I'm quite a newbie in this, but
there are a couple of experiences that can teach you something, for
example create a personal website and host it on your server, buy
your domain and redirect it to your website. One thing I did for
example was to get rid of Kindle and host my books in Calibre, so now
I can access my personal library from my own server. With this you
can learn a bit about connecting via ssh, nginx, dns, docker, etc.
There are people who host a bunch of applications from a youtube
frontend, emails, vpn, etc. There you can see for yourself what to
do.</li>

<li>Install Arch Linux manually: If you installed Ubuntu before, you'll
notice that the process is quite simple in general, installing Arch
is more complex, but it will teach you how to make an operating
system from scratch, so you can understand what some of the base
libraries are for, make the partitions manually, configure network,
timezone, keyboard, decide between X11 or Wayland, etc. Try to use it
for a period of time as your main machine and use it for everything
you can.</li>

<li>Contribute to Linux: I plead guilty of not doing it yet, I suppose
this is a note for the future&#x2026;</li>
</ol>

<p>
Anyway, it's been an interesting journey and I think I'll continue using
Linux for my personal machines. I'll probably continue to see some
self-hosting things, but I think I've had enough with ricing and trying
distributions, it's time to move on to another topic.
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>Mi configuración personal en Emacs</title>
<link>https://indymnv.xyz/posts/tooling/20250113-inside-emacs.html</link>
<pubDate>Mon, 13 Jan 2025 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20250113-inside-emacs.html</guid>
<description>
<![CDATA[
<div id="orgee6012c" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///emacs_meme.jpg" alt="emacs_meme.jpg" />
</p>
<p><span class="figure-number">Figure 1: </span>emacs<sub>meme</sub></p>
</div>

<p>
Tras unas semanas entendiendo como funciona Emacs, leyendo tutoriales, y
descubriendo como otros usuarios usan este software para sus diversas
necesidades, he llegado a tener una configuración que me hace sentir
relativamente cómodo (obviamente siempre puedes buscar más comodidad al
seguir configurandolo, pero todavía estoy aprendiendo).
</p>

<p>
Aquí desglosaré mi <code>init.el</code> para quién busque inspiración, o
simplemente quiera copiar el archivo, el cual tiene alrededor de 250
lineas de código.
</p>
<div id="outline-container-generalidades-de-esta-configuración" class="outline-2">
<h2 id="generalidades-de-esta-configuración"><span class="section-number-2">1.</span> Generalidades de esta configuración</h2>
<div class="outline-text-2" id="text-generalidades-de-esta-configuración">
<p>
Si bien no me ataño a ninguna filosofía en particular más de que debe
ser cómodo para mi trabajar dentro de Emacs, trato de que: * Solo
contenga software que voy a usar: No es necesariamente minimalista, pero
tampoco quiero instalar cosas que no necesite, sino, hubiera elegido
algo como <a href="https://github.com/doomemacs/doomemacs">Doom Emacs</a>. *
Mantenerse lo más apegado a los shortcuts originales de Emacs, no he
hecho grandes cambios ni agregado muchos nuevos bindings, no pretendo
usar Evil mode, dado que todavía me considero un novato con Emacs, por
lo que prefiero que se retrate de forma más precisa como Emacs
funciona <sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>.
</p>
</div>
</div>
<div id="outline-container-dentro-del-init.el" class="outline-2">
<h2 id="dentro-del-init.el"><span class="section-number-2">2.</span> Dentro del init.el</h2>
<div class="outline-text-2" id="text-dentro-del-init.el">
<p>
Para partir lo más básico es lo estético, he decidido remover las barras
de herramientas, la barra para scroll y menú, además de algunas
configuraciones de fuente y tamaño.
</p>

<div class="org-src-container">
<pre class="src src-elisp">(<span style="font-weight: bold;">setq</span> inhibit-startup-message t)

(scroll-bar-mode -1)        <span style="font-weight: bold; font-style: italic;">; </span><span style="font-weight: bold; font-style: italic;">Disable visible scrollbar
</span>(tool-bar-mode -1)          <span style="font-weight: bold; font-style: italic;">; </span><span style="font-weight: bold; font-style: italic;">Disable the toolbar
</span>(tooltip-mode -1)           <span style="font-weight: bold; font-style: italic;">; </span><span style="font-weight: bold; font-style: italic;">Disable tooltips
</span>(set-fringe-mode 10)        <span style="font-weight: bold; font-style: italic;">; </span><span style="font-weight: bold; font-style: italic;">Give some breathing room
</span>
(menu-bar-mode -1)            <span style="font-weight: bold; font-style: italic;">; </span><span style="font-weight: bold; font-style: italic;">Disable the menu bar
</span>
<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Set up the visible bell
</span>(<span style="font-weight: bold;">setq</span> visible-bell t)

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">set font decoration
</span>(<span style="font-weight: bold;">setq</span> font-lock-maximum-decoration t)

(set-face-attribute 'default nil <span style="font-weight: bold;">:font</span> <span style="font-style: italic;">"Iosevka"</span> <span style="font-weight: bold;">:height</span> 160)

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">set time
</span>(<span style="font-weight: bold;">setq</span> display-time-24hr-format t)
(<span style="font-weight: bold;">setq</span> display-time-format <span style="font-style: italic;">"%H:%M"</span>)
(display-time-mode 1)

<span style="font-weight: bold; font-style: italic;">;;</span><span style="font-weight: bold; font-style: italic;">set full screen
</span>(set-frame-parameter (selected-frame) 'fullscreen 'maximized)
(add-to-list 'default-frame-alist '(fullscreen . maximized))
</pre>
</div>

<p>
Lo siguiente es inicializar el administrador de paquetes y las fuentes
donde se descargaran estos paquetes. Aquí tengo seteado melpa (librerías
de la comunidad para la comunidad) y elpa (librerías de GNU y
adicionales).
</p>

<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Initialize package sources
</span>(<span style="font-weight: bold;">require</span> '<span style="font-weight: bold; text-decoration: underline;">package</span>)

(<span style="font-weight: bold;">setq</span> package-archives '((<span style="font-style: italic;">"melpa"</span> . <span style="font-style: italic;">"https://melpa.org/packages/"</span>)
            ( <span style="font-style: italic;">"nongnu"</span> . <span style="font-style: italic;">"https://elpa.nongnu.org/nongnu/"</span>)     
                       (<span style="font-style: italic;">"gnu"</span> . <span style="font-style: italic;">"https://elpa.gnu.org/packages/"</span>)
             ))

(package-initialize)
(<span style="font-weight: bold;">unless</span> package-archive-contents
 (package-refresh-contents))

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Initialize use-package on non-Linux platforms
</span>(<span style="font-weight: bold;">unless</span> (package-installed-p 'use-package)
   (package-install 'use-package))

(<span style="font-weight: bold;">require</span> '<span style="font-weight: bold; text-decoration: underline;">use-package</span>)
(<span style="font-weight: bold;">setq</span> use-package-always-ensure t)
</pre>
</div>

<p>
Una vez seteado las conexiones a melpa y elpa, ya puedes empezar a
descargar y usar librerías, soy un ferviente usuario del tema gruvbox, y
me gusta usar números relativos para editar <sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> aunque lo desabilito
en algunos unos casos
</p>

<div class="org-src-container">
<pre class="src src-elisp">(<span style="font-weight: bold;">use-package</span> doom-themes
     <span style="font-weight: bold;">:if</span> window-system
     <span style="font-weight: bold;">:ensure</span> t
     <span style="font-weight: bold;">:config</span>
     (load-theme 'doom-gruvbox t)
     (doom-themes-org-config)
     (doom-themes-visual-bell-config)
     (menu-bar-mode -1)
     (tool-bar-mode -1)
     (fringe-mode -1)
     (scroll-bar-mode -1))


<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">set numbers in the left
</span>(column-number-mode)
(global-display-line-numbers-mode t)
(<span style="font-weight: bold;">setq</span> display-line-numbers 'relative)


<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">But disable the numbers in some modes
</span>(<span style="font-weight: bold;">dolist</span> (mode '(org-mode-hook
               term-mode-hook
               shell-mode-hook
       vterm-mode-hook
               treemacs-mode-hook
       dashboard-mode-hook
               eshell-mode-hook))
 (add-hook mode (<span style="font-weight: bold;">lambda</span> () (display-line-numbers-mode 0))))
</pre>
</div>

<p>
Aquí agrego un poco de "color" a Emacs al agregar cosas como Ivy para
autocompletado, agregar iconos para dired (el administrador de archivos
por defecto de Emacs), modificar la barra de estatus, si quieres más
color a esta última puedes usar doom-modeline, pero a mi parecer la
barra de estatus que viene por defecto es lo suficientemente bueno.
```elisp ;; Set Autocompletion (use-package ivy) (ivy-mode 1)
</p>

<p>
(setq ivy-use-virtual-buffers t) (setq ivy-count-format "(%d/%d)")
</p>

<p>
;; basic icons (use-package all-the-icons :ensure t :init)
</p>

<p>
(use-package all-the-icons-dired :ensure t :init (add-hook
'dired-mode-hook 'all-the-icons-dired-mode))
</p>

<p>
(use-package all-the-icons-ibuffer :ensure t :init
(all-the-icons-ibuffer-mode 1))
</p>

<p>
;; set delimiters to distinct the language (use-package
rainbow-delimiters :hook (prog-mode . rainbow-delimiters-mode))
</p>

<p>
;; ui to display characters (use-package which-key :defer 0 :diminish
which-key-mode :config (which-key-mode) (setq which-key-idle-delay 1))
</p>

<p>
;; ivy rich (use-package ivy-rich) (ivy-rich-mode 1) ``` Dos librerías
fundamentales para incorporar en el workflow de Emacs y que pareciera
ser un "must" en la comunidad es Projectile (para administración de
proyectos) y Magit (para control de versiones), no los he usado
extensivamente pero son buenas piezas de software.
</p>

<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Projectile
</span>(<span style="font-weight: bold;">use-package</span> projectile
 <span style="font-weight: bold;">:ensure</span> t
 <span style="font-weight: bold;">:init</span>
 (projectile-mode 1))

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">magit
</span>(<span style="font-weight: bold;">use-package</span> magit
 <span style="font-weight: bold;">:ensure</span> t
 <span style="font-weight: bold;">:config</span>
 (<span style="font-weight: bold;">setq</span> magit-push-always-verify nil)
 (<span style="font-weight: bold;">setq</span> git-commit-summary-max-length 50)
 <span style="font-weight: bold;">:bind</span>
 (<span style="font-style: italic;">"M-g"</span> . magit-status))
</pre>
</div>

<p>
La parte que más me interesaba entender de Emacs era Orgmode, así que
setié una configuración que me ha funcionado bien, y que las
posibilidades son infinitas al momento de customizarlo.
</p>

<p>
En esta sección me enfoqué en definir una carpeta llamada <code>org</code>, donde
he alojado varios archivos para eventos, tareas, etc. y ahí puedo hacer
capturas de notas, tareas solo presionando C-c c, también saqué la idea
de System Crafters <sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup> de usar org-refill para poder ir archivando
tareas una vez que las completo, también agregué un poco de estilo a los
archivos <code>.org</code> (para más placer).
</p>

<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">org mode
</span>(global-set-key (kbd <span style="font-style: italic;">"C-c l"</span>) #'org-store-link)
(global-set-key (kbd <span style="font-style: italic;">"C-c a"</span>) #'org-agenda)
(global-set-key (kbd <span style="font-style: italic;">"C-c c"</span>) #'org-capture)

(<span style="font-weight: bold;">setq</span> org-ellipsis <span style="font-style: italic;">" "</span>)
(<span style="font-weight: bold;">setq</span> org-src-fontify-natively t)
(<span style="font-weight: bold;">setq</span> org-src-tab-acts-natively t)
(<span style="font-weight: bold;">setq</span> org-confirm-babel-evaluate nil)
(<span style="font-weight: bold;">setq</span> org-export-with-smart-quotes t)
(<span style="font-weight: bold;">setq</span> org-src-window-setup 'current-window)
(<span style="font-weight: bold;">setq</span> org-directory <span style="font-style: italic;">"~/org"</span>)
(<span style="font-weight: bold;">setq</span> org-agenda-files '(<span style="font-style: italic;">"events.org"</span> <span style="font-style: italic;">"tasks.org"</span> <span style="font-style: italic;">"birthday.org"</span>))
(<span style="font-weight: bold;">setq</span> org-agenda-start-with-log-mode t) <span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">set log for completion in agenda
</span>(<span style="font-weight: bold;">setq</span> org-log-done 'time)
(<span style="font-weight: bold;">setq</span> org-log-into-drawer t)

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">After complete a task send to Archive or other file listed
</span>(<span style="font-weight: bold;">setq</span> org-refile-targets
     '((<span style="font-style: italic;">"archive.org"</span> <span style="font-weight: bold;">:maxlevel</span> . 1)
   (<span style="font-style: italic;">"tasks.org"</span> <span style="font-weight: bold;">:maxlevel</span> . 1)))
<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">after send the task completed, save all the org files
</span>(advice-add 'org-refile <span style="font-weight: bold;">:after</span> 'org-save-all-org-buffers)

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Set templates for fast note taking and other
</span>(<span style="font-weight: bold;">setq</span> org-capture-templates
     '((<span style="font-style: italic;">"t"</span> <span style="font-style: italic;">"Todo"</span> entry (file+headline <span style="font-style: italic;">"~/org/tasks.org"</span> <span style="font-style: italic;">"INBOX"</span>)
        <span style="font-style: italic;">"* TODO %?\n  %i\n  %a"</span>)
       (<span style="font-style: italic;">"j"</span> <span style="font-style: italic;">"Journal"</span> entry (file+datetree <span style="font-style: italic;">"~/org/journal.org"</span>)
        <span style="font-style: italic;">"* %?\nEntered on %U\n  %i\n  %a"</span>)))


(add-hook 'org-mode-hook 'org-indent-mode)


<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">sintactic sugar for bullets
</span>(<span style="font-weight: bold;">require</span> '<span style="font-weight: bold; text-decoration: underline;">org-bullets</span>)
(add-hook 'org-mode-hook (<span style="font-weight: bold;">lambda</span> () (org-bullets-mode 1)))
</pre>
</div>

<p>
Uso de Dashboard a la hora de abrir Emacs para poder ver archivos,
proyectos y tareas pendientes, además de una frase bíblica para más
inspiración.
</p>


<div id="orgbff36f6" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///emacs_dashboard.png" alt="emacs_dashboard.png" />
</p>
<p><span class="figure-number">Figure 2: </span>dashboard</p>
</div>

<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Dashboard at open emacs
</span>(<span style="font-weight: bold;">use-package</span> dashboard
 <span style="font-weight: bold;">:ensure</span> t
 <span style="font-weight: bold;">:config</span>
   (dashboard-setup-startup-hook)
   (<span style="font-weight: bold;">setq</span> dashboard-center-content t)
   (<span style="font-weight: bold;">setq</span> dashboard-startup-banner 'official)
   (<span style="font-weight: bold;">setq</span> dashboard-items '((recents  . 5)
               (projects . 5)
               (agenda    . 5)))
   (<span style="font-weight: bold;">setq</span> dashboard-banner-logo-title <span style="font-style: italic;">"Do you see a man skillful in his work? He will stand before kings; he will not stand before obscure men. (Proverbs 22:29)"</span>))
</pre>
</div>

<p>
Permitir procesos asincronos
<code>elisp ;; allow async process (use-package async   :ensure t   :init (dired-async-mode 1))</code>
</p>

<p>
Syntax highlighting para markdown
<code>elisp ;; Use markdown (use-package markdown-mode   :ensure t   :mode ("README\\.md\\'" . gfm-mode)   :init (setq markdown-command "multimarkdown"))</code>
</p>

<p>
Para leer archivos pdf, Emacs tiene incorporado un ereader, con
funcionalidades básicas, sé que existe una librería con mayor
funcionalidades llamado
<a href="https://github.com/vedang/pdf-tools">pdf-tools</a>, pero no he tenido la
necesidad de usarlo <sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup>, sin embargo, porque tengo varios epubs que
leo, instalé <a href="https://depp.brause.cc/nov.el/">nov.el</a> para dicho
propósito.
</p>

<p>
También he incorporado <a href="https://www.gnu.org/software/emms/">emms</a> para
escuchar música, hace el trabajo de base, pero todavía no me he tomado
el tiempo de revisar a fondo como funciona.
</p>

<p>
Y finalmente agregué elfeed para leer rss de distintas noticias y blogs,
definitivamente me ha gustado más que
<a href="https://newsboat.org/">newsboat</a>. Dado que tiendo a leer blogs de
estadística y análisis de datos que por su naturaleza contienen muchas
imagenes, no requiero de abrir el navegador para poder tener un detalle
completo sobre este.
</p>


<div id="orgc8537f4" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///utilities_emacs.png" alt="utilities_emacs.png" />
</p>
<p><span class="figure-number">Figure 3: </span>utilities</p>
</div>

<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Nov.el to read Epub
</span>(<span style="font-weight: bold;">use-package</span> nov
 <span style="font-weight: bold;">:ensure</span> t)
(add-to-list 'auto-mode-alist '(<span style="font-style: italic;">"\\.epub\\'"</span> . nov-mode))

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">To display music as a gigachad
</span>(<span style="font-weight: bold;">use-package</span> emms)
(emms-all)
(<span style="font-weight: bold;">setq</span> emms-player-list '(emms-player-mpv)
     emms-info-functions '(emms-info-native))

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">To read RSS
</span><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Somewhere in your .emacs file
</span>(<span style="font-weight: bold;">use-package</span> elfeed)
(<span style="font-weight: bold;">setq</span> elfeed-feeds
     '(
   (<span style="font-style: italic;">"https://planet.emacslife.com/atom.xml"</span> Emacs Blog)
   (<span style="font-style: italic;">"https://news.ycombinator.com/rss"</span> News)
   ))
<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">set global keybinding for elfeed
</span>(global-set-key (kbd <span style="font-style: italic;">"C-x w"</span>) 'elfeed)
</pre>
</div>

<p>
Ahora para algunas de las partes más relacionadas a desarrollo y
análisis de datos, he incorporado ess (Emacs speaks Statistic), librería
fundamental para trabajar con R y otros software <sup><a id="fnr.5" class="footref" href="#fn.5" role="doc-backlink">5</a></sup>. Para Python he
incorporado elpy que es una librería que viene con lo necesario para
desarrollo en Python, también sé de la existencia de ein para Jupyter
Notebooks, no lo he probado todavía, tal vez lo haga en algún futuro.
Para Julia hay varias discusiones dando vueltas sobre como aprovechar
Emacs <sup><a id="fnr.6" class="footref" href="#fn.6" role="doc-backlink">6</a></sup>, por ahora tengo solo seteado 2 librerías, julia-mode y
julia-snail, el primero es solo syntax highlighting y el segundo permite
interactuar con el REPL, de una forma similar a la que usarías Slime,
haciendo evaluaciones linea por linea cuando sea requerido.
</p>

<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">statistical mode in emacs
</span>(<span style="font-weight: bold;">use-package</span> ess)
(<span style="font-weight: bold;">use-package</span> company
 <span style="font-weight: bold;">:config</span>
 (add-hook 'after-init-hook 'global-company-mode))

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">python development
</span>(<span style="font-weight: bold;">use-package</span> elpy
 <span style="font-weight: bold;">:ensure</span> t
 <span style="font-weight: bold;">:init</span>
 (elpy-enable))

<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Julia mode
</span>(<span style="font-weight: bold;">use-package</span> julia-mode
 <span style="font-weight: bold;">:ensure</span> t)

(<span style="font-weight: bold;">use-package</span> julia-snail
 <span style="font-weight: bold;">:ensure</span> t
 <span style="font-weight: bold;">:hook</span> (julia-mode . julia-snail-mode))
(<span style="font-weight: bold;">setq-default</span> julia-snail-executable <span style="font-style: italic;">"/home/navi/.juliaup/bin/julia"</span>)
</pre>
</div>

<p>
Emacs por alguna extraña razón tiene incorporado 3 terminales, eshell,
shell, term. Sé que existen usos específicos para cada uno aunque aunque
no estoy del todo claro <sup><a id="fnr.7" class="footref" href="#fn.7" role="doc-backlink">7</a></sup>, especialmente por ese extraño patrón de
que puedes borrar lineas de código escritas en la terminal, o porque
tienes que cambiar tus bindings al momento de moverte de un buffer a
otro (C-x a C-c), o no ser capaz de abrir vim dentro estas
terminales <sup><a id="fnr.8" class="footref" href="#fn.8" role="doc-backlink">8</a></sup>, sin embargo, leí comentarios positivos con respecto a
Vterm, y decidí instalarlo y probarlo, hasta ahora es el que se ha
ajustado mejor a mis preferencias. Y por lo tanto, he usado por
defecto <sup><a id="fnr.9" class="footref" href="#fn.9" role="doc-backlink">9</a></sup>
</p>

<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;;</span><span style="font-weight: bold; font-style: italic;">A new  terminal with more capabilities
</span>(<span style="font-weight: bold;">use-package</span> vterm
  <span style="font-weight: bold;">:ensure</span> t)
</pre>
</div>

<p>
Finalmente, una cosa que a menudo me encuentro haciendo es copiando y
pegando lineas completas de texto, tomé esta función customizada de
<a href="https://github.com/Bugswriter/BugsWritersEmacs">BugsWriter</a> para
poder alcanzar ese propósito.
</p>

<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">custom function to copy whole line with C-c w l
</span> (<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">copy-whole-line</span> ()
   (<span style="font-weight: bold;">interactive</span>)
   (<span style="font-weight: bold;">save-excursion</span>
     (kill-new
      (buffer-substring
    (point-at-bol)
    (point-at-eol)))))
(global-set-key (kbd <span style="font-style: italic;">"C-c w l"</span>) 'copy-whole-line)
</pre>
</div>

<blockquote>
<p>
Notar algo que apoyo completamente y doy como consejo es reemplazar el
Ctrl por la tecla CapsLock, realmente resolverá un montón de dolores que
tienes con Emacs y su extraña posición con las teclas lideres. Así que
por favor antes que te lances a usar emacs por primera vez, te
recomiendo hacer este cambio.
</p>
</blockquote>
</div>
</div>
<div id="outline-container-trabajos-y-exploraciones-futuras" class="outline-2">
<h2 id="trabajos-y-exploraciones-futuras"><span class="section-number-2">3.</span> Trabajos y exploraciones futuras</h2>
<div class="outline-text-2" id="text-trabajos-y-exploraciones-futuras">
<p>
Algunas cosas que quiero seguir explorando y probablemente incorporando
en Emacs en caso de que se ajusten bien:
</p>

<ol class="org-ol">
<li>Operar email dentro de Emacs</li>
<li><a href="https://www.orgroam.com/">Org Roam</a>, bastantes cosas positivas he
escuchado sobre este software para tomar notas que parece inspirarse
en el Zettelkasten method. También
<a href="https://protesilaos.com/emacs/denote">Denote</a> es una opción.</li>
<li><a href="https://joaotavora.github.io/eglot/">Eglot</a> o cualquier servidor
del lenguaje que funcione.</li>
<li>Org Babel, para literate programming.</li>
<li>Integraciones con Quarto.</li>
<li><a href="https://elpa.gnu.org/packages/exwm.html">EXWM</a>, un windows manager
dentro de Emacs, parece innecesario en mi caso de estar usando Sway,
pero ¿Por qué no probarlo?.</li>
<li>Aprender Elisp, hasta ahora he usado principalmente librerías que la
comunidad o GNU han creado, pero el verdadero valor está en que
puedas aprender Elisp y hackear por tu cuenta.</li>
<li>Incorporar algún LLM <sup><a id="fnr.10" class="footref" href="#fn.10" role="doc-backlink">10</a></sup>.</li>
</ol>
</div>
</div>
<div id="outline-container-conclusiones" class="outline-2">
<h2 id="conclusiones"><span class="section-number-2">4.</span> Conclusiones</h2>
<div class="outline-text-2" id="text-conclusiones">
<p>
Dentro de todo, Emacs ha probado ser un interesante reemplazo al flujo
de trabajo que estaba usando con Vim + Tmux + amigos, muchas de las
cosas que me tomaron tiempo aprender a usar con este workflow, en Emacs
fue resuelto casi en un par de semanas, por supuesto, hay un sesgo acá
de aprendizaje de herramientas previas que sin dichas experiencias
hubiera probablemente ralentizado mi aprendizaje de Emacs.
</p>

<p>
Otra cosa que cabe notar, es que si vienes con una mente abierta, Emacs
puede ser realmente divertido de usar, Elisp realmente es un buen
lenguaje para este software y la mística de "hackear" tu editor es algo
que de verdad puede llevarte a inspirar hacer cosas por tu cuenta y
darte absoluta libertad, convertir un editor en tu workshop digital
tiene sus dificultades, pero estoy seguro de que vale la pena si te
atreves a ensuciarte las manos.
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://www.masteringemacs.org/article/beginners-guide-to-emacs">https://www.masteringemacs.org/article/beginners-guide-to-emacs</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Practica que vengo usando desde vim
</p></div></div>

<div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Buen canal para aprender sobre Emacs, Guix, Lisp, entre otros.
<a href="https://systemcrafters.net/">https://systemcrafters.net/</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Tampoco soy mucho de andar destacando y tomando notas en el pdf,
creo que es mejor tomar notas por separado.
</p></div></div>

<div class="footdef"><sup><a id="fn.5" class="footnum" href="#fnr.5" role="doc-backlink">5</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Pero parecieran no estar tan depurados como R
</p></div></div>

<div class="footdef"><sup><a id="fn.6" class="footnum" href="#fnr.6" role="doc-backlink">6</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
<a href="https://discourse.julialang.org/t/emacs-and-julia-how-to/123623">https://discourse.julialang.org/t/emacs-and-julia-how-to/123623</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.7" class="footnum" href="#fnr.7" role="doc-backlink">7</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Aquí hay un artículo que lo explica sencillamente
<a href="http://xahlee.info/emacs/emacs/emacs_shell_vs_term_vs_ansi-term_vs_eshell.html">http://xahlee.info/emacs/emacs/emacs_shell_vs_term_vs_ansi-term_vs_eshell.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.8" class="footnum" href="#fnr.8" role="doc-backlink">8</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Si, a veces quiero hacer algo como eso.
</p></div></div>

<div class="footdef"><sup><a id="fn.9" class="footnum" href="#fnr.9" role="doc-backlink">9</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Aunque surfeando por la web, me encontré con este artículo que me
hace replantear la idea de profundizar con Eshell:
<a href="https://howardism.org/Technical/Emacs/eshell-why.html">https://howardism.org/Technical/Emacs/eshell-why.html</a>
</p></div></div>

<div class="footdef"><sup><a id="fn.10" class="footnum" href="#fnr.10" role="doc-backlink">10</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Preferiblemente si es que puedo correrlo localmente.
</p></div></div>


</div>
</div>]]>
</description></item>
<item>
<title>Self-hosting my own git server</title>
<link>https://indymnv.xyz/posts/tooling/20251023-self-hosting-git.html</link>
<pubDate>Thu, 23 Oct 2025 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20251023-self-hosting-git.html</guid>
<description>
<![CDATA[<p>
Few months ago I just decided to get my own vps for self hosting few
things, I am not a sysadmin by trade, so it's a bit of a challenge to
deal with a linux server, but the reward is huge, I can't think in a
more useful thing that you can learn from the tech world than the skill
of managing servers for your own services (and maybe family and friends
if you think you are capable of).
</p>

<p>
The first thing I self host was this website, using Nginx and
letsEncrypt help me to show this website to the world, but also later I
decided to self-host my library with Calibre, and try few other things
like Pleroma (when I was in the Fediverse), Searxng, and now I was
considering to host my own git server.
</p>

<p>
As a wanna-be tech independent guy I found very little purpose to have a
full feature git client like Github, most of my code it's just means for
reproducing calculations so people are not going to do pull request to
add new features to code that is for data analysis generally. But if it
happens, welcome!.
</p>

<p>
That's why I just set up <a href="https://git.zx2c4.com/cgit/about/">Cgit</a>,
for the purpose, which is fairly simple, is in the Debian repository and
has a very narrow scope, so if someone one send a patch, it has to be by
email. The procedure for installation was quite simple, most of what you
need you can read <a href="https://landchad.net/cgit/">here</a>
</p>
]]>
</description></item>
<item>
<title>Trying to convert Emacs in a language learning tool</title>
<link>https://indymnv.xyz/posts/tooling/20260214-emacs-language-learning-tool.html</link>
<pubDate>Sat, 14 Feb 2026 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20260214-emacs-language-learning-tool.html</guid>
<description>
<![CDATA[<p>
These days I have been considering seriously to keep improving my
Japanese while using most of the Emacs tools and ecosystem, the main
reason for that is because I just want to stay focus as much as I can,
avoiding context switching and having most of my sources on my pc using
the tool I like it.
</p>

<p>
For one side, I use <a href="https://github.com/skeeto/elfeed">elfeed</a> to
suscribe to some Japanese Youtube channels and blogs, I play the videos
using mpv. also there is <a href="https://depp.brause.cc/nov.el/">nov.el</a> and
<a href="https://github.com/vedang/pdf-tools">PDF tools</a> for reading books. I
get my books from different sources, There is a site called
<a href="https://www.aozora.gr.jp/">Aozora Bunko</a> for example, that is a huge
library of books that you can read for free online or local.
</p>

<p>
Org mode is a nice way to take notes, schedule tasks, among others and
combined with
<a href="https://orgmode.org/worg/org-contrib/org-drill.html">Org-drill</a> allow
me to create flashcards and practice recognition and recall. I use
Org-capture and abbrev-mode to create new vocabulary, grammar or
expressions on the fly with some templates I made, using
<a href="https://magit.vc/">Magit</a> You can track all the changes on these
files, this is important because in case that you break your desk, it's
easier to reverse any undesired change. Furthermore, I can easily record
this new things. Given that I have to write in the language Emacs has
its own japanese input method, while it's not perfect, it gets the job
done, I can just press <code>C-\</code> to switch between japanese and english or
spanish.
</p>

<p>
Other important thing I have to add is a dictionary,
<a href="https://github.com/jamescherti/quick-sdcv.el">quick-sdcv</a> is a
package that wrap the terminal dictionary sdcv, this allow me with some
keybindings to look up words quickly, if I am reading an epub file or
news I can just put the cursor on the word and display the meaning in
other buffer, I can copy and capture the vocabulary in an org file, or
anything else. And there are some IRC groups in Libera.chat where you
can chat in japanese, but I do not use it that much to be honest.
</p>

<p>
Finally, one thing I didn't try yet, is using a LLM inside Emacs, I just
use sometimes ChatGPT in the browser with some interesting results, it
can be a useful tool, but I don't want it to become an essential part of
my workflow. However, I still not completely closed to incorporate this
tool inside my workflow.
</p>

<p>
Okay, but was it necessary to bring all these things into Emacs? Well,
maybe not. But if it helps me keep improving my Japanese and enjoying
the experience, then it's worth the workaround.
</p>
]]>
</description></item>
<item>
<title>How to set up mail in emacs with mu4e</title>
<link>https://indymnv.xyz/posts/tooling/20250910-mail-emacs.html</link>
<pubDate>Wed, 10 Sep 2025 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20250910-mail-emacs.html</guid>
<description>
<![CDATA[<p>
I was considering for a while to use mail in emacs, I didn't have the
time to work on that, and I didn't find a tutorial up to date to just
copy and paste, there are some good sources and documentation, but the
implementation was not that straightforward, it took me a couple of days
to find why It didn't work out my implementations.
</p>


<div id="orgea0153c" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///mu4e.png" alt="mu4e.png" />
</p>
<p><span class="figure-number">Figure 1: </span>mail</p>
</div>

<p>
But here is the step by step. I have been using Migadu for a while, and
It works quite well
</p>
<div id="outline-container-software-installation" class="outline-2">
<h2 id="software-installation"><span class="section-number-2">1.</span> Software Installation</h2>
<div class="outline-text-2" id="text-software-installation">
<ol class="org-ol">
<li>It will require to install:</li>

<li>mu4e</li>
<li>isync/mbsync</li>
<li>msmtp</li>
</ol>

<pre class="example" id="orgd150225">
sudo apt install isync
</pre>

<p>
Create a new file ~/.mbsyncrc
</p>

<pre class="example" id="org63072a4">
     
IMAPAccount migadu
Host imap.migadu.com
User mail@mymail.xyz
PassCmd "pass mail/my_mail_password"
TLSType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
#AuthMechs Login
Port 993

IMAPStore migadu-remote
Account migadu

MaildirStore migadu-local
Path ~/Mail/migadu/
Inbox ~/Mail/migadu/INBOX/
Trash ~/Mail/migadu/Trash/
SubFolders Verbatim

Channel migadu
Far :migadu-remote:
Near :migadu-local:
Patterns *
CopyArrivalDate yes
Create Both
Sync All

SyncState *
</pre>

<p>
Then, make sure to run in the terminal the following statement:
</p>

<pre class="example" id="orgdf36d5b">
mu init --maildir=DIR --my-address=ADDRESS
</pre>

<p>
then run:
</p>

<pre class="example" id="org240454e">
mu index
</pre>
</div>
</div>
<div id="outline-container-set-up-emacs" class="outline-2">
<h2 id="set-up-emacs"><span class="section-number-2">2.</span> Set up Emacs</h2>
<div class="outline-text-2" id="text-set-up-emacs">
<p>
Go to your init.el and write this snippet
</p>

<pre class="example" id="org4b01130">
(use-package mu4e
:ensure nil
;; :load-path "/usr/share/emacs/site-lisp/mu4e/"
:defer 20 ; Wait until 20 seconds after startup
:config

;; This is set to 't' to avoid mail syncing issues when using mbsync
(setq mu4e-change-filenames-when-moving t)
(setq mail-user-agent 'mu4e-user-agent)

;; Refresh mail using isync every 10 minutes
;;(setq mu4e-update-interval (* 10 60))
;;(setq mu4e-get-mail-command "mbsync -a")
(setq mu4e-get-mail-command (concat (executable-find "mbsync") " -a"))
;; how often to call it in seconds:
(setq mu4e-update-interval 300)

(setq mu4e-maildir "~/Mail/migadu")

(setq mu4e-drafts-folder "/Drafts")
(setq mu4e-sent-folder   "/Sent")
(setq mu4e-refile-folder "/All")
(setq mu4e-trash-folder  "/Trash")
(setq mu4e-junk-folder  "/Junk")
(setq mu4e-others-folder  "/Others")
(setq mu4e-maildir-shortcuts
  '(("/INBOX" . ?i)
      ("/Sent" . ?s)
      ("/Trash" . ?t)
      ("/Drafts" . ?d)
      ("/Junk" . ?a)
  ("/Others" . ?o)
  ))
(mu4e t))
</pre>

<p>
With this you can run mu4e inside emacs and you should see how your
system is pulling up your emails. But notice is not ready to send emails
yet, we need to consider an extra customization.
</p>
</div>
</div>
<div id="outline-container-sending-emails-with-msmtp" class="outline-2">
<h2 id="sending-emails-with-msmtp"><span class="section-number-2">3.</span> Sending emails with msmtp</h2>
<div class="outline-text-2" id="text-sending-emails-with-msmtp">
<p>
Make sure to install msmtp (sudo apt install ) and create a file
~/.msmtprc, and write the following
</p>

<pre class="example" id="orgd643a4f">
defaults

auth on

tls on
 
port 587
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        ~/.msmtp.log


account personal
host smtp.migadu.com
from mail@mymail.xyz
user mail@mymail.xyz
passwordeval pass mail/mail@my_mail_password | head -1


account default : personal
</pre>

<p>
Finally write in your emacs 'init.el' this.
</p>

<pre class="example" id="orgdc0a4e3">
  (setq
   message-send-mail-function   'smtpmail-send-it
   smtpmail-default-smtp-server "smtp.migadu.com"
   smtpmail-smtp-server         "smtp.migadu.com"
   smtpmail-local-domain        "migadu.com"
   )

(setq sendmail-program "/usr/bin/msmtp")
(setq message-sendmail-extra-arguments '("--read-envelope-from"))
(setq message-sendmail-f-is-evil t)
(setq message-send-mail-function 'message-send-mail-with-sendmail)
</pre>

<p>
Then you should ready to go, enjoy the spam&#x2026;
</p>
</div>
</div>
<div id="outline-container-resources" class="outline-2">
<h2 id="resources"><span class="section-number-2">4.</span> Resources</h2>
<div class="outline-text-2" id="text-resources">
<ul class="org-ul">
<li><a href="https://thanosapollo.org/posts/mu4e-guide/">https://thanosapollo.org/posts/mu4e-guide/</a></li>
<li><a href="https://www.youtube.com/embed/yZRyEhi4y44">https://www.youtube.com/embed/yZRyEhi4y44</a></li>
<li><a href="https://www.youtube.com/embed/Qq6s3PwSwjo">https://www.youtube.com/embed/Qq6s3PwSwjo</a></li>
<li><a href="https://djcbsoftware.nl/code/mu/mu4e/">https://djcbsoftware.nl/code/mu/mu4e/</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/bfsck6/mu4e_for_dummies/">https://www.reddit.com/r/emacs/comments/bfsck6/mu4e_for_dummies/</a></li>
</ul>
</div>
</div>
]]>
</description></item>
<item>
<title>Leaving Elfeed for Gnus</title>
<link>https://indymnv.xyz/posts/tooling/20260512-bye-elfeed-hello-gnus.html</link>
<pubDate>Wed, 13 May 2026 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20260512-bye-elfeed-hello-gnus.html</guid>
<description>
<![CDATA[<p>
A few weeks ago I was playing around with Gnus, I don't remember Why I
stop using it but I just switched back to Elfeed, and before that I also
spent my time with <a href="https://www.gnu.org/software/emacs/manual/html_mono/newsticker.html">Newsticker</a>, I wasn't convinced completely
about the last one, so seriously start using other unix tools for reading news,
like <a href="https://codeberg.org/newsraft/newsraft">Newsraft</a>.
</p>

<p>
Just few weeks ago the Elfeed's author announced that
finally stop using Emacs in favor of Vim, and he vibecode his own
solution called <a href="https://github.com/skeeto/elfeed2">Elfeed2</a>. Obviously this situation put at risk the original
project in case that no one wants to become the maintainer. So I took
the opportunity to revisit the built-in tools in Emacs and try
Gnus again, because It gave me a better experience compared with Newsticker.
For this reason, I have to say that the Emacs people who tend to prefer
the built-in solutions and just hack around it, got it right.
</p>

<p>
After a couple of tutorials from <a href="https://www.youtube.com/watch?v=jwz7aYUWIbM">Protesilaos</a> and <a href="https://www.youtube.com/watch?v=iu0iqBd9qSo">Amin Bandali</a>, I could
set up successfully Gnus while understanding the basic keys for navigation.
Gnus is big, there is no doubt about that, in fact I still don't read all
the documentation, but you need very little to start with it.
</p>

<p>
The last piece in the puzzle was to be able to set up mpv for specific use
cases (like watching Youtube videos), I was searching a way to do this
with some Gnus features, but later I just realize that with just changing
the default browser, you can easily execute mpv when there are some extensions
like "Youtube.com&#x2026;"
</p>
<div id="outline-container-orgfd73453" class="outline-2">
<h2 id="orgfd73453"><span class="section-number-2">1.</span> Basic Tutorial</h2>
<div class="outline-text-2" id="text-1">
<p>
So what I recommend is following some servers, while Gnus has his own functions
to extract rss (nnrss), I just recommend you to connect to <a href="https://gwene.org/">Gwene.org</a> and
<a href="https://feedbase.org/">Feedbase.org</a> via nntp to follow your blogs, mailing list and Youtube channels.
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span style="font-weight: bold;">use-package</span> gnus
<span style="font-weight: bold;">:ensure</span> nil
<span style="font-weight: bold;">:config</span>

(<span style="font-weight: bold;">setq</span> gnus-select-method '(nnnil <span style="font-style: italic;">""</span>))
(<span style="font-weight: bold;">setq</span> gnus-secondary-select-methods
      '(
          <span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Connecting to gwene
</span>          (nntp <span style="font-style: italic;">"news.gwene.org"</span>)
          <span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Connecting to Feedbase
</span>          (nntp <span style="font-style: italic;">"feedbase"</span>
                (nntp-open-connection-function nntp-open-tls-stream) <span style="font-weight: bold; font-style: italic;">; </span><span style="font-weight: bold; font-style: italic;">feedbase does not do STARTTLS (yet?)
</span>                (nntp-port-number 563) <span style="font-weight: bold; font-style: italic;">; </span><span style="font-weight: bold; font-style: italic;">nntps
</span>                (nntp-address <span style="font-style: italic;">"feedbase.org"</span>))
          <span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Here can come another connections like your emails for example
</span>)
</pre>
</div>

<p>
With this basic setup, you can start Gnus and you should be able to connect to these
servers, obviously nothing will appear because you didn't subscribe to
anything yet, but
if you press ^ you should be able to see all the servers you are connected to,
select gwene, it will open all the groups in that server find
your blogs, mailing lists and Youtube feeds, if you are missing some
just add the rss to the respective websites (gwene.org) and in minutes,
the new rss will appear on the list, you can subscribe to the group by putting
the cursor on the group and pressing u.
</p>

<p>
After You subscribed to few groups close the servers with q and you should come back to Gnus
Groups, you can update pressing g or just quick with q and enter again to Gnus,
You should see the new groups you subscribed.
</p>

<p>
Another nice feature of Gnus is that you can create topics, this is
just a simple way to sort your groups so it become easier to navigate through them.
Press T-n to create a topic, and to move specific group to that topic just press
T-m and then select the topic to send that group to it.
</p>

<p>
Finally, you want to read the news, select the group if it has too many articles
Gnus will prompt you how many you wants to get, select 10 for example and then
it will open the latest 10 articles, you can press Enter to open the article,
n and p to move to the next and previous article unread, Space to reading through
the article and q to close the Group and comeback to the main Gnus default.
If you want to mark all the articles in the group as read, just press c and
select y.
</p>

<p>
If you want to read the article from another way, let's say Youtube from mpv
and blogs from eww, I recommend you to use a code I steal from Joshua:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">  (<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my-browse-url-mpv</span> (url <span style="font-weight: bold; text-decoration: underline;">&amp;rest</span> _args)
  <span style="font-style: italic;">"Open URL in mpv."</span>
  (start-process <span style="font-style: italic;">"mpv"</span> nil <span style="font-style: italic;">"mpv"</span> url))

(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my-browse-url-pdf</span> (url <span style="font-weight: bold; text-decoration: underline;">&amp;rest</span> _args)
  <span style="font-style: italic;">"Fetch remote PDF and open in pdf-tools within Emacs."</span>
  (<span style="font-weight: bold;">let</span> ((tmp (make-temp-file <span style="font-style: italic;">"emacs-pdf-"</span> nil <span style="font-style: italic;">".pdf"</span>)))
    (url-copy-file url tmp t)
    (find-file-other-window tmp)
    (pdf-view-mode)))

(<span style="font-weight: bold;">setq</span> browse-url-handlers
      '((<span style="font-style: italic;">"</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">(</span><span style="font-style: italic;">youtube\\.com</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">youtu\\.be</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">vimeo\\.com</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">twitch\\.tv</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">)</span><span style="font-style: italic;">"</span> . my-browse-url-mpv)
        (<span style="font-style: italic;">"\\.mp4$"</span> . my-browse-url-mpv)
        (<span style="font-style: italic;">"\\.pdf$"</span> . my-browse-url-pdf)
        (<span style="font-style: italic;">"^gemini://"</span> . elpher-browse-url-elpher)
        (<span style="font-style: italic;">"^gopher://"</span> . elpher-browse-url-elpher)
        (<span style="font-style: italic;">"."</span> . eww-browse-url)))
</pre>
</div>

<p>
This allow me to open articles with eww, and youtube and other websites
with mpv. I am sure there is a better way to handle the urls with Gnus
but for now this solve my basic use.
</p>
</div>
</div>
<div id="outline-container-orgafea427" class="outline-2">
<h2 id="orgafea427"><span class="section-number-2">2.</span> Conclusions</h2>
<div class="outline-text-2" id="text-2">
<p>
Gnus is huge, and many people prefer the simplicity of Elfeed to access
to news and blogs, but while that is true, I don't think you need to know
that much about Gnus in order to consume information, surprisingly enough,
Gnus has been a nice experience for reading news and emails. and I think
We should appreciate that we have such a solid tool inside Emacs.
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>Sway + Vim + Tmux + Julia: 3 Data Science Workflows</title>
<link>https://indymnv.xyz/posts/tooling/20240722-data-workflow.html</link>
<pubDate>Mon, 22 Jul 2024 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20240722-data-workflow.html</guid>
<description>
<![CDATA[<p>
Occasionally, I reviewed my workflow with different tools and saw if
that was comfortable enough for the development process. When I was
using Vim, someone pointed out that they were using it for data science,
which caught my attention. I tried to experiment with different ways I
could use the tool. Using Vim as a tool to replace Jupyter Notebooks
first took a lot of work, mainly because I missed the experience of
seeing all the plots and data in just one website and being able to
scroll all around. In my experience with Julia for a data science
project, there are 3 ways you can achieve a good experience with
different trade-offs.
</p>
<div id="outline-container-basic-ingredients." class="outline-4">
<h4 id="basic-ingredients."><span class="section-number-4">0.0.1.</span> Basic ingredients.</h4>
<div class="outline-text-4" id="text-basic-ingredients.">
<ol class="org-ol">
<li>A Tiling Window Manager, in my case, I use Sway</li>
<li>Vim</li>
<li>Tmux</li>
<li>Julia or any other scientific computing language</li>
</ol>
</div>
</div>
<div id="outline-container-double-pane" class="outline-2">
<h2 id="double-pane"><span class="section-number-2">1.</span> Double Pane</h2>
<div class="outline-text-2" id="text-double-pane">

<div id="org76baede" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///vim_tmux.png" alt="vim_tmux.png" />
</p>
<p><span class="figure-number">Figure 1: </span>vimtmux</p>
</div>

<p>
This is the one I read most of the time on Reddit. Here, you will need
to install Vim-Slime or a similar "send-to-REPL" plugin. In this
scenario, you will enjoy the feature of sending snippets of code to your
REPL. You only need to activate Tmux, open your .jl file on one side and
the REPL on the other using Tmux panes, and that's it.
</p>

<p>
The pro is that you can run all your files or experiment with different
snippets. The cons of this workflow are that you will be constrained by
the space of your screen when it comes to seeing your plots because it
will use half of the screen when it displays. The double pane will be
shrunk, so you cannot clearly see the code and the REPL. To mitigate
this, you could use UnicodePlots to see your data and plots only in the
REPL without emergent windows.
</p>

<p>
I used this as a standard for a while, but it didn't click on me when
working with plots in this workflow.
</p>
</div>
</div>
<div id="outline-container-one-pane" class="outline-2">
<h2 id="one-pane"><span class="section-number-2">2.</span> One Pane</h2>
<div class="outline-text-2" id="text-one-pane">
<p>
You can achieve this without using Tmux (but it is still convenient to
display different sessions). Julia has a really powerful REPL, and the
way you can change to Shell mode deserves more attention. Many people
will not understand why that is important, but Julia's key is to stay
with the REPL activated as much as you can. If you need to shut down it
and do other things, then you lose a lot of the power that Julia holds.
</p>

<p>
Some people dislike using REPL-based languages because they force you to
work with workflows that deal with code snippets instead of running all
your programs at once. But this is not true at all.
</p>

<p>
Similarly, you run <code>julia my script.jl</code> in the terminal and then open
the file with Vim to keep editing, you can use the REPL to change to the
Shell mode, modify your script and then come back to the Julia mode and
run your script using <code>include("myscript.jl")</code>.
</p>

<p>
In particular, you can work very well with this work and keep your
workspace cleaner. However, if you are working with a script that
creates several variables for data cleaning and plots, you will be
annoyed to try to remember all of them; at least, that happened to me.
When I close the script and run it, sometimes I want to check some
results stored in specific variables and call them again, but not always
remember them all. You can mitigate part of this by using a main
function, saving your plots, and processing the data.
</p>
</div>
</div>
<div id="outline-container-views-panels" class="outline-2">
<h2 id="views-panels"><span class="section-number-2">3.</span> 2.5 views panels</h2>
<div class="outline-text-2" id="text-views-panels">
<p>
This try to replicate the experience on RStudio or VSCode you will
mainly will deal with 2 panels, one with your code, and for other side
The REPL, these terminals are splitted, so you are not using Tmux to
open panes as in the first case.
</p>


<div id="org291ae19" class="figure">
<p><img src="https://indymnv.xyz/posts/tooling/file:///views_25.png" alt="views_25.png" />
</p>
<p><span class="figure-number">Figure 2: </span>views</p>
</div>

<p>
Here is where your Tiling Windows Manager will shine in your workflow.
If you set up correctly, a new emergent window will appear on your
screen every time you run your script and display the plots you want to
see. You can easily explore it, zoom in and out, close it, and return to
work with your script. I am having a good time using sxiv from
<a href="https://suckless.org/">suckless</a> to display plots. If you need to see
the plots again, here is where the REPL and the Shell mode can help you;
if you saved it, you could open it up using tools like Sxiv to explore
your plot again.
</p>

<p>
The positive thing about this style is that you can have everything
displayed in a comfortable way, see the code and the REPL clearly, and
display your figures in a noninvasive way when you need to explore your
figures. The bad thing about it, again this disminished the utilities of
Tmux and also made you dependent of your tiling windows manager, not all
work in the same way; if you use Sway or dwm, for example, you will have
different experiences given the basic set up, so you will have to change
the configuration to set your own needs.
</p>
</div>
</div>
<div id="outline-container-conclusion" class="outline-2">
<h2 id="conclusion"><span class="section-number-2">4.</span> Conclusion</h2>
<div class="outline-text-2" id="text-conclusion">
<p>
Finally, I want to add that there is still room for improvement, and I
would like to see other people's workflows and how they deal with their
data science projects. These days, I am more inclined to use the last
option for this kind of project, and the first one I found more useful
for software engineering, like a project where interactivity is not a
central part of the process.
</p>
</div>
</div>
]]>
</description></item>
<item>
<title>Consider to use webrings for your site</title>
<link>https://indymnv.xyz/posts/tooling/20240317-webring.html</link>
<pubDate>Sun, 17 Mar 2024 00:00:00 +0900</pubDate>
<guid>https://indymnv.xyz/posts/tooling/20240317-webring.html</guid>
<description>
<![CDATA[<blockquote>
<p>
"Hey you Out there beyond the wall Breaking bottles in the hall Can you
help me?" &#x2014; Roger Waters
</p>
</blockquote>

<p>
Do not make a wall for your website, that place that in case of any
visitor want to come and read any article or all your blog, feel that
there is nothing more to see an return wherever he came. Instead, give
it more where he can continue his fly.
</p>

<p>
Social media do this all the time, you just finished watching a video on
YouTube and immediately the platform will recommend you another videos.
Do the same, but for better reasons.
</p>

<p>
Create a post in your blog with the interesting websites you enjoy, link
other websites when you want to cite their ideas, add at the end of your
articles the latest posts of some blogs that could complement (or
contrast) your ideas. For the last one, you can use a very simple tool
like <a href="https://git.sr.ht/~sircmpwn/openring">openring</a>, which is the
tool I use for adding a webring in this site.
</p>

<p>
If you want to use this tool, please make sure you have installed
<a href="https://go.dev/">the Go programming language</a>, then open your
terminal and write:
</p>

<div class="org-src-container">
<pre class="src src-sh">$&gt;git clone https://git.sr.ht/~sircmpwn/openring
$&gt;cd openring
$&gt;go build openring.go 
$&gt;./openring <span style="font-style: italic;">\</span>
  -s https://bkamins.github.io/feed.xml <span style="font-style: italic;">\</span>
  -s https://jarbus.net/index.xml <span style="font-style: italic;">\</span>
  -s https://www.paltmeyer.com/blog/index.xml <span style="font-style: italic;">\</span>
  &lt; in.html <span style="font-style: italic;">\</span>
  &gt; out.html
</pre>
</div>

<p>
Replace these websites with the ones you are interested to show to the
public and find their respective rss feeds. Notice that <code>in.html</code> is a
template, so you can customize as you want to get a good look in your
own website, for other side <code>out.html</code> is the template to feed it with
the latest articles of the websites you chose, and that is the one to
insert in your blog.
</p>

<p>
Here I am using Hugo as a website, so I just left the out.html in the
partial folder and then modify the post layout configuration with
something like:
</p>

<div class="org-src-container">
<pre class="src src-html">{{ partial out.html . }}
</pre>
</div>

<p>
And That's all the effort you have to do to make the web a bit better.
We don't have to be isolated, together we stand, divided we fall.
</p>
]]>
</description></item>
</channel>
</rss>
