<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>captainepoch&#39;s log</title>
    <link>https://adol.pw/</link>
    <description>captainepoch&#39;s log -- for writing stuff</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© 2014-present. Adolfo Santiago. All rights reserved.</copyright>
    <lastBuildDate>Thu, 30 May 2024 00:00:00 +0000</lastBuildDate>
    
      <atom:link href="https://adol.pw/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>About donations for Husky, and other FOSS projects</title>
      <link>https://adol.pw/2024/02/25/on_donations_husky_foss/</link>
      <pubDate>Sun, 25 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2024/02/25/on_donations_husky_foss/</guid>
      <description>&lt;p&gt;During my time being the maintainer of Husky a lot of people asked me where they
could donate money to &lt;!-- raw HTML omitted --&gt;support&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt; the work I do in the application,
and every single time I replied that I do not accept money for working on one
FOSS project. Most of the time people reply back, saying they will wait just in
case, in the future, I change my mind. This is the reason I decided to write
this.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE: this is my personal take into this topic, and you are free to (not)
agree with my opinion.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;it-is-just-one-android-application&#34;&gt;It is just one Android application&lt;/h1&gt;
&lt;p&gt;I am not a big contributor to the FOSS ecosystem as a whole. I may have
contributed in the past with some input in an issue or a small PR changing a
couple of things, but overall, I do not contribute as much as I would like to
(topic for another post).&lt;/p&gt;
&lt;p&gt;The reasons I started working on Husky were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://suya.place/users/a1ba&#34;&gt;a1ba&lt;/a&gt; already stopped working on the application when I started using
Pleroma.&lt;/li&gt;
&lt;li&gt;I am an Android developer and I could do some work into the application to
improve it.&lt;/li&gt;
&lt;li&gt;I finally could have a project I can actually contribute and keep it as a FOSS
project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was, mostly, selfish reasons, to begin with, but over time I noticed that I
liked doing it, so I kept at it. That is the only FOSS project I currently
maintain and work (actively) in my (little) spare time.&lt;/p&gt;
&lt;h1 id=&#34;money-mostly-equals-to-expectations&#34;&gt;Money (mostly) equals to expectations&lt;/h1&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;I do not link the time I spend on Husky to money. I would love to be able to
work full-time as a FOSS developer, and maintain &lt;!-- raw HTML omitted --&gt;2-3
applications&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt; that are useful to people, but the world does not work
like that, and my job already takes 1/3 of my time (as it does to anyone). Not
everyone is lucky.&lt;/p&gt;
&lt;p&gt;I always felt that giving me money in exchange for working on Husky makes the
person giving me money think he/she can and may tell me what to do in the
application. I do not want to feel that way, because that is a job, and I work
in Husky because I want to, not to earn some side money.&lt;/p&gt;
&lt;h1 id=&#34;getting-monetary-donations&#34;&gt;Getting monetary donations&lt;/h1&gt;
&lt;p&gt;I think, at this point, the reader can feel that I do not really want to get
money from him/her, but if that was not enough, let me write about other things
that makes me not wanting you to donate money to me.&lt;/p&gt;
&lt;h2 id=&#34;taxes&#34;&gt;Taxes&lt;/h2&gt;
&lt;p&gt;Spain has a &lt;em&gt;very&lt;/em&gt; bad tax code, and you have to pay (high) taxes for
everything. Stripe and PayPal, as far as I could figure out, asks you for a VAT
number, which is the registered number of your company/your personal ID. For
privacy reasons I will not submit any of my personal data to those services.&lt;/p&gt;
&lt;p&gt;I do not have a company registered in Spain, and I will never have one (again,
high taxes for &lt;em&gt;everything&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Cryptocurrencies are not a feasible option either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I do not posses the means to exchange &amp;lt;insert here any cryptocurrency&amp;gt; into
Euro (I am not going to send my ID [NIF in Spain] to any exchange company).&lt;/li&gt;
&lt;li&gt;Taxes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thus, accepting donations is not feasible for me at this moment.&lt;/p&gt;
&lt;h2 id=&#34;open-collective&#34;&gt;Open Collective&lt;/h2&gt;
&lt;p&gt;I spent some time researching about Open Collective. It seemed a suitable option
to receive donations. But when I set up the collective for Husky, I had to apply
to a &lt;em&gt;Fiscal Host&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;After looking for one that could suit Husky, I found two, and I did not have the
requirements in place to get them to be my &lt;em&gt;Fiscal Host&lt;/em&gt;, thus making Open
Collective another discarded option.&lt;/p&gt;
&lt;p&gt;One of them required to have a minimum of 100 stars in the repository, like it
is an important metric of some sort&amp;hellip; *sigh*.&lt;/p&gt;
&lt;h2 id=&#34;ko-fi-and-liberapay&#34;&gt;Ko-fi and Liberapay&lt;/h2&gt;
&lt;p&gt;Although both platforms (and I am sure, more like them) are perfect candidates
for getting donations, both requires a Stripe and/or a PayPal account, therefore
rendering them not suitable, as I stated above the problems with both payment
processors.&lt;/p&gt;
&lt;h1 id=&#34;how-can-i-support-husky-then&#34;&gt;How can I support Husky then?&lt;/h1&gt;
&lt;p&gt;I told to many users, over time, that I do not need the money for Husky. I
already have some devices for testing and the Android emulator, and my salary is
more than enough money for me (at the moment of publishing this post).&lt;/p&gt;
&lt;p&gt;If you want to support Husky:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Open issues at the &lt;a href=&#34;https://github.com/captainepoch/husky/issues&#34;&gt;issue tracker&lt;/a&gt; with as much information
about the problem as possible.&lt;/p&gt;
&lt;p&gt;You have a template to help you with this, and if you consider the template
does not have enough fields, add them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Help with current opened issues, as I might not be able to reproduce the
issue.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Help with crashes sending the trace via email (enable the &amp;ldquo;Crash Reporter&amp;rdquo; in
&amp;ldquo;Settings&amp;rdquo;). In the future this will be replaced with some service more
suitable than emails.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Help testing the application for new developments (more about this in the
future).&lt;/p&gt;
&lt;p&gt;I am setting up a Matrix room for this purpose, but if an issue arises from
testing, it must be opened at the issue tracker linked above.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Help translating the application.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see, money is not the only way to contribute to the project. And you
do not need to be a developer to do any of that stuff.&lt;/p&gt;
&lt;h1 id=&#34;closing-down&#34;&gt;Closing down&lt;/h1&gt;
&lt;p&gt;There is enough reason to not accept donations and I think, for now, I will not
accept them, because things related with money, in countries from the EU, are a
mess.&lt;/p&gt;
&lt;p&gt;I prefer to take my time and do things properly (or the best I can with my
abilities), and hope Husky (or any FOSS application I maintain) is useful to
you, my dear reader.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Thank you all!&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Or more, if possible.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Status update, October 2023</title>
      <link>https://adol.pw/2023/10/19/status-oct-2023/</link>
      <pubDate>Thu, 19 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2023/10/19/status-oct-2023/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;It has been a while since I wrote my last status post.&lt;/p&gt;
&lt;p&gt;The truth is that I do not want to keep writing this kind of posts. The reason
is that it turned my blog in almost a &amp;ldquo;Status update, &lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt;&amp;rdquo; feed of
posts that are not that really interesting to read.&lt;/p&gt;
&lt;p&gt;So I decided to stop writing those posts. This will be the last one, with an
exception that I might write one if something &lt;em&gt;really&lt;/em&gt; interesting happens
(which is not something common).&lt;/p&gt;
&lt;p&gt;I might keep writing the yearly recap, because it is a good way to make a
retrospective of the year.&lt;/p&gt;
&lt;p&gt;I want to focus to write interesting stuff about topics I find interesting It
might be about privacy issues, or Android stuff, or something I find amazing
with C or Go&amp;hellip; I know I said this &lt;em&gt;many&lt;/em&gt; times, but seeing the feed this last
week made me realize that it is something it needs to be done.&lt;/p&gt;
&lt;p&gt;You can follow my shenanigans at my Fediverse account if you are interested, or
contact me via email (check it at &lt;a href=&#34;https://adol.pw/contact&#34;&gt;adol.pw/contact&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;That would be all, see you!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, August 2023</title>
      <link>https://adol.pw/2023/08/17/status-aug-2023/</link>
      <pubDate>Thu, 17 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2023/08/17/status-aug-2023/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;August (or summer, I may say) is a slow month.&lt;/p&gt;
&lt;p&gt;UnifiedPush for Husky is almost done. I am only a few changes to release a new
beta for testing, and I will look for a group of people to test this feature
before releasing it as a stable version. Once this is released, I will focus on
the another big refactor I want to make in Husky, expect news soon.&lt;/p&gt;
&lt;p&gt;On non-Husky related news, I am very happy that, after paying an email provider
for two months, it has been a blast. The freedom of creating aliases for you
main email to sign up for services while not disclosing your personal account is
one of the best things (among others, like using your own domain). I really
recommend that you get your email with your domain, whether it is paying an
email provider or self-hosting, because it will not make dependant of the domain
of a tech giant (like Gmail).&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, July 2023</title>
      <link>https://adol.pw/2023/07/17/status-july-2023/</link>
      <pubDate>Mon, 17 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2023/07/17/status-july-2023/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This past month I focused my attention working on UnifiedPush support for Husky.
I am pleased to say that it is almost done for a beta, despite some stuff being
added later on. I will seek for a closed group of testers in the future.&lt;/p&gt;
&lt;p&gt;On more programming-related stuff, I migrated one application to Jetpack Compose
and the experience was interesting. I still have to learn &lt;em&gt;a lot&lt;/em&gt; of stuff about
it, but I would love to migrate Husky to it.&lt;/p&gt;
&lt;p&gt;Lastly, I have started testing Neovim as my main editor. I was an Emacs user,
but some issues with it made me give a try to this. I am using
&lt;a href=&#34;https://github.com/LazyVim/LazyVim&#34;&gt;LazyVim&lt;/a&gt; as my configuration, with some custom options, and up until
this point, I am loving it. In fact this post was written using Neovim.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, June 2023</title>
      <link>https://adol.pw/2023/06/15/status-june-2023/</link>
      <pubDate>Thu, 15 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2023/06/15/status-june-2023/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This monthly status came a bit late, but nevertheless, here it is.&lt;/p&gt;
&lt;p&gt;Husky-related news, the implementation for UnifiedPush support is going well.
Husky is able now to get notifications not polling each N minutes but using a
UnifiedPush provider from now on. That means, if you do not install a valid
UnifiedPush provider, you will not get &lt;em&gt;any&lt;/em&gt; push notifications.&lt;/p&gt;
&lt;p&gt;Also, instance capabilities was added as a feature into Husky, enabling (in the
future) the ability to set up features on Husky that are only enabled in one
instance, but not in others, or just setup proper limits (i.e. the max. items
you can upload while composing a status). For now it is only at the &amp;ldquo;Edit
profile&amp;rdquo; view, but more to come.&lt;/p&gt;
&lt;p&gt;Outside of Husky but related to programming, I am looking for projects to start
contributing in my (so little) spare time. I saw that nowadays having
contributions on projects can make you a candidate worth hiring in some
companies, and I think it is also an opportunity to give back something to the
FOSS community.&lt;/p&gt;
&lt;p&gt;I also have another project related to Jetpack Compose that a friend of mine
suggested, and I am taking it seriously because it could be useful for someone
in the future, when Jetpack Compose is more extended. For now it is an idea, but
time will tell.&lt;/p&gt;
&lt;p&gt;On other non-programming news, I had the opportunity to make an email address
with my domain, so I took it. My email is now updated at the &lt;a href=&#34;https://adol.pw/contact&#34;&gt;Contact&lt;/a&gt;
page, along the GPG key. I still have to migrate some accounts, but it is
something I am doing one by one.&lt;/p&gt;
&lt;p&gt;I want to give my thanks, yet again, to &lt;a href=&#34;https://secluded.site&#34;&gt;Amolith&lt;/a&gt;, for being my email
provider for a long time, and being a great admin when I had any problems
whatsoever. Thank you, man!&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Social media use</title>
      <link>https://adol.pw/2023/06/12/social-media-use/</link>
      <pubDate>Mon, 12 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2023/06/12/social-media-use/</guid>
      <description>&lt;p&gt;You might read this in some social media profiles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opinions are my own.&lt;/li&gt;
&lt;li&gt;Opinions are my own and do not represent my employer&amp;rsquo;s.&lt;/li&gt;
&lt;li&gt;The opinions expressed here do not reflect my employer&amp;rsquo;s.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And similar lines on those profiles.&lt;/p&gt;
&lt;p&gt;It truly baffles me that people have to specify that in &lt;em&gt;their personal&lt;/em&gt; social
media profiles. A profile that their employers did not pay them to have. It is
not your corporate profile, it is not an account that your employer requires you
to have. It is &lt;em&gt;your&lt;/em&gt; account.&lt;/p&gt;
&lt;p&gt;When you start working for someone you have to separate what it is your personal
and professional profile. Your social media accounts do not belong to your
employer, unless your employer requires you to make one (for some reason), in
which case that profile should be dedicated to what employer requires you to do.&lt;/p&gt;
&lt;p&gt;If you are a public figure, let&amp;rsquo;s say a software developer, you might post
something from your employer from time to time, because you wrote something on
its blog, or because you find something interesting your employer did, but that
does not mean you express any alignment whatsoever with your employer. Same goes
for a journalist, for example, or a writer, or even CEOs.&lt;/p&gt;
&lt;p&gt;If you write a blog (like what you are reading now) and you want to use &lt;em&gt;your
personal account&lt;/em&gt; to promote it, whether it is a post with some (controversial)
opinion, a technical post or a story, again, it is your blog, your personal
social media account, therefore it should not matter what you wrote, or who or
what you are criticizing.&lt;/p&gt;
&lt;p&gt;Doing a &lt;em&gt;repost&lt;/em&gt; (or &lt;em&gt;retweet&lt;/em&gt; or whatever terminology is used in your preferred
social media network) is not endorsement of anything. It just means you found
something interesting and you wanted to share it inside the social network
itself to your followers. You do not need to mention in your
description/biography.&lt;/p&gt;
&lt;p&gt;Your personal opinions about any topic are exactly that: your personal opinions.
Companies should not be able to force you to have an opinion you &lt;em&gt;must&lt;/em&gt; agree
with, no matter what. Because nobody agree with 100% of the opinions expressed
by any company (nor should you).&lt;/p&gt;
&lt;p&gt;If your employer wants to force you to agree upon its opinions, somehow, make a
separate, corporate-focused account to express those. Although, if you are
forced to agree upon those opinions, you might want to rethink if that is good
for you.&lt;/p&gt;
&lt;p&gt;Your job and your personal life are two separate things. You &lt;strong&gt;should&lt;/strong&gt; use your
&lt;em&gt;personal profile&lt;/em&gt; as exactly that, your &lt;em&gt;personal&lt;/em&gt; space, and nothing else.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, February 2023</title>
      <link>https://adol.pw/2023/02/22/status-feb-2023/</link>
      <pubDate>Wed, 22 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2023/02/22/status-feb-2023/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This montly status came a bit late, but nevertheless, here it is.&lt;/p&gt;
&lt;p&gt;I am working on Husky to add more stuff that allows the app to setup itself some
features for different ActivityPub backends. This is a very WIP task that I am
doing carefuly and I would love some testing from users to debug possible
issues.&lt;/p&gt;
&lt;p&gt;For the 1.5.0 stable version of Husky I would like to rework the push
notifications stack, since a ton of users complain about battery draining and I
think providing another way of getting push notifications could be benefitial.
For now, I removed old code from Husky regarding the views (Kotlin synthetics)
and the first beta of this release will contain that and a couple of things
more.&lt;/p&gt;
&lt;p&gt;I also started to work on moving the &lt;a href=&#34;https://github.com/captainepoch/marvelapp&#34;&gt;Marvel app&lt;/a&gt; to Compose
(there is nothing pushed yet) and working on a series of posts for the blog
regarding how I handled the transition. I would love to do more in Compose, but
time is limited.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, January 2023</title>
      <link>https://adol.pw/2023/01/16/status-jan-2023/</link>
      <pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2023/01/16/status-jan-2023/</guid>
      <description>&lt;p&gt;Hello there!&lt;/p&gt;
&lt;p&gt;From the programming side of things, I kept working in Husky to release the
1.4.0 version. This release contains, among other things, a migration from
Dagger to Koin and the update of the app for Android 13. I am happy with the
result, and with this, the idea is to keep adding features to the app while
providing support at the same time.&lt;/p&gt;
&lt;p&gt;I have ambitious plans for Husky for this year, and I hope I manage to achieve
those objectives in 2023.&lt;/p&gt;
&lt;p&gt;I am also happy to report that, since the change of forges to Codeberg, people
started to report bugs, and communication with users has improved, so that is
something I celebrate.&lt;/p&gt;
&lt;p&gt;In the meantime, I am also working on improving my Emacs configuration. Nothing
new to report for now, I just keep trying new things to add or remove stuff in
Emacs.&lt;/p&gt;
&lt;p&gt;Before ending 2022, I wrote the &lt;a href=&#34;https://adol.pw/2022/12/31/2022-recap/&#34;&gt;2022 recap&lt;/a&gt;, where I lay some
objectives for this year. There is a lot of things I would like to do and to
improve, and I hope to achieve those this year.&lt;/p&gt;
&lt;p&gt;On an off-topic point of the post, I noticed the other day that, since I changed
most of my applications to a light theme, stress in my eyes reduced
substantially. I combine a mix of dark themes in a few apps (i.e. the terminal)
with light themes (i.e. Emacs, Android Studio), and I noticed that my eyes do
not get tired so soon, that I can look at the screen for longer period of times.
Of course this does not mean I am going to stay looking at a screen more time,
but it is something my eyes thank me for.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>2022 recap</title>
      <link>https://adol.pw/2022/12/31/2022-recap/</link>
      <pubDate>Sat, 31 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/12/31/2022-recap/</guid>
      <description>&lt;p&gt;Hello there!&lt;/p&gt;
&lt;p&gt;This post will be the last one this year. I planned on doing it a bit earlier,
but life get in the way.&lt;/p&gt;
&lt;p&gt;Last year I posted the &lt;a href=&#34;https://adol.pw/2022/01/08/2021-recap/&#34;&gt;2021 recap&lt;/a&gt;, in which I detailed some of the
things I went through 2021. Nevertheless to say, this year went not as I
planned either.&lt;/p&gt;
&lt;h1 id=&#34;professional-development&#34;&gt;Professional development&lt;/h1&gt;
&lt;p&gt;This past year was one in which my professional career was kept almost at the
same spot as last year. I did not really learn new stuff, which is a bad thing
since this world evolves within the minute.&lt;/p&gt;
&lt;p&gt;I tried to put time into a project I have for this case
(&lt;a href=&#34;https://github.com/captainepoch/marvelapp&#34;&gt;captainepoch/marvelapi&lt;/a&gt;), but other things in life with
more priority took my time away and it did not happen in the end. For this year,
I want to revamp this project, complete the &lt;em&gt;TODO&lt;/em&gt; list, and apply all the
knowledge I get there into Husky, or from Husky into this project.&lt;/p&gt;
&lt;p&gt;For example, I want to touch some things of the architecture, I also want to
migrate from Koin to Dagger Hilt, and at some point, I would love to add Compose
to the project and keep some parts of the application with Compose, and some
with the traditional XML layouts (or just migrate to a full-Compose application).&lt;/p&gt;
&lt;p&gt;Speaking of Husky, this year was a bit of a mess, from my end, as the maintainer
of the project. But I learnt from my mistakes, and for 2023 I have a new point
of view of things and the project will continue its path with interesting stuff
I have in my mind.&lt;/p&gt;
&lt;h2 id=&#34;other-programming-stuff&#34;&gt;Other programming stuff&lt;/h2&gt;
&lt;p&gt;This year I also started again to revamp my Emacs configuration. There are great
all-in-one solutions for this, like &lt;a href=&#34;https://github.com/doomemacs/doomemacs&#34;&gt;Doom Emacs&lt;/a&gt; if you do not want
to deal yourself with &lt;em&gt;a ton&lt;/em&gt; of stuff, but since I already had a base, I only
needed to review some of it and improve it (or remove it).&lt;/p&gt;
&lt;p&gt;At this moment, except for a few things here and there and the Python
configuration, I can say I am enjoying using Emacs.&lt;/p&gt;
&lt;p&gt;So VSCodium is now my second editor, but I plan to ditch it. I hate Electron
apps.&lt;/p&gt;
&lt;h1 id=&#34;changing-forges&#34;&gt;Changing forges&lt;/h1&gt;
&lt;p&gt;This year was also the year I migrated from SourceHut to Codeberg. As I
mentioned in the &lt;a href=&#34;https://adol.pw/2022/12/15/status-dec-2022/&#34;&gt;December monthly status&lt;/a&gt;, the big reason for
this change was that I did not manage to be comfortable with the email-based
workflow. I still think that SourceHut has a lot of potential, and you
&lt;strong&gt;should&lt;/strong&gt; give it a try and find if it suits you or not.&lt;/p&gt;
&lt;p&gt;As I also mentioned, I will keep my account there and provide economic support
(paying my account) because I want the project to be successful and alive.&lt;/p&gt;
&lt;p&gt;I also want to give a big &amp;ldquo;Thank you!&amp;rdquo; to Drew DeVault and the whole SourceHut
community. They were nothing but helpful with everything I asked and they did
not hesitate in spend a few minutes replying my (more than noob) questions. I
hope I am able to participate more in the IRC channels in the future.&lt;/p&gt;
&lt;h1 id=&#34;the-future-of-this-blog&#34;&gt;The future of this blog&lt;/h1&gt;
&lt;p&gt;In the past recap I said I wanted to write more in my blog than monthly status
updates. Well, I failed in this, because I did not have a high number of topics
to talk about.&lt;/p&gt;
&lt;p&gt;For this year I will try to write those 12 posts (monthly status updates does
not count) from different topics. They could be about privacy, personal
opinions, technical posts related to any programming.&lt;/p&gt;
&lt;h1 id=&#34;things-in-life&#34;&gt;Things in life&lt;/h1&gt;
&lt;p&gt;This year I also had my very personal objectives to reach, such as weight loss,
reading more books and comics, play more games, and so on.&lt;/p&gt;
&lt;p&gt;I am able to report that I satisfied all of them, and this year, I have more
(some of them are a second part).&lt;/p&gt;
&lt;h1 id=&#34;2023-here-we-go&#34;&gt;2023, here we go&lt;/h1&gt;
&lt;p&gt;I do not have so much to say from this year. It is been a hectic one, for sure,
specially in life.&lt;/p&gt;
&lt;p&gt;I wish you a very happy new year, and I hope you managed to fulfil your 2022 New
Year Resolutions and made your 2023 New Year Resolutions!&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, December 2022</title>
      <link>https://adol.pw/2022/12/15/status-dec-2022/</link>
      <pubDate>Thu, 15 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/12/15/status-dec-2022/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This past month it did not happen a lot, but nevertheless, here is the last
status update of the year.&lt;/p&gt;
&lt;p&gt;On the programming side of things, I went back to work on Husky. The project
received some patches and I am glad to see people getting into the email
workflow within the project. The app still needs a refactor for some stuff
people are asking to add into the project, but I am confident enough to be able
to manage all of that, in time. When? &lt;em&gt;Soon(tm)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;On more stuff related to the programming world, I also managed to get back to
Emacs and revamp my config to feel comfortable enough using it as my main
editor. I am not going to lie, it was a bit of a challenge, but nevertheless,
everything is working fine. There is still some stuff to fix, but for what I do
on a daily basis, it works flawlessly. In fact, this is the first post written
in the blog with my new Emacs config.&lt;/p&gt;
&lt;p&gt;Since my Emacs config has &lt;code&gt;aspell&lt;/code&gt; support, I also fixed some typos in the title
of the statuses posts, and it might triggered your RSS feed if you have my blog
added to it. Sorry about that!&lt;/p&gt;
&lt;p&gt;I also added a new section of blogs I recommend reading, and that list may get
longer as soon as I discover a new blog I like reading. You can access to it by
going to &lt;a href=&#34;https://adol.pw/friends&#34;&gt;adol.pw/friends&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the next year I planned to contribute to more FOSS projects, specially if
they are Android applications (since is my main programming platform), but I
also would like to get outside of my comfort zone and contribute to other
projects. I will document my process through that experience too, since it could
be useful for first-time contributors who do not take the first step.&lt;/p&gt;
&lt;p&gt;And, before you go, an important announcement: I will migrate all my
repositories and projects from Sourcehut to Codeberg in the following days
(including Husky). Over the last year I tried to make myself comfortable with
the email workflow, but over time, I felt that workflow is not suitable for me.&lt;/p&gt;
&lt;p&gt;I do still believe, however, that Sourcehut is an impressive ecosystem, and that
you should try it to learn another way of working, you might even change it to
your normal workflow. My post &lt;a href=&#34;https://adol.pw/2022/06/04/why-sourcehut/&#34;&gt;Why did I choose
SourceHut?&lt;/a&gt; still applies.&lt;/p&gt;
&lt;p&gt;However, I am not leaving entirely the platform. Because I want Sourcehut to be
a successful forge, I will continue using it with some repositories and I will
continue paying my account.&lt;/p&gt;
&lt;p&gt;I want to thank Drew DeVault and the whole Sourcehut community for always being
there when I have doubts or questions, and for being a healthy community of
hackers.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, November 2022</title>
      <link>https://adol.pw/2022/11/15/status-nov-2022/</link>
      <pubDate>Tue, 15 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/11/15/status-nov-2022/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This has been another stalled month in terms of productivity. There is nothing
interesting to tell you about, but nevertheless, I wrote the mandatory status
update.&lt;/p&gt;
&lt;p&gt;I am looking for some FOSS project(s) to contribute. Given that my main
development platform is Android, I am looking into issues I can contribute on
applications I use on a daily basis (i.e. NewPipe, Husky). I am also a bit
conflicted myself with whether it is alright for me to review code from other
people or not (in an email or a PR) given that I am not a maintainer, nor a
collaborator, of most of the apps I use.&lt;/p&gt;
&lt;p&gt;I use &lt;em&gt;a lot&lt;/em&gt; of Free and Open Source Software and it would be good to give back
to the community somehow. I know that there are more issues than only code, but
it is what I do.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://adol.pw/2022/10/21/status-oct-2022/&#34;&gt;In the previous&lt;/a&gt; status, I wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Another new is that I am going to try to write more stuff about technical
topics [&amp;hellip;]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have a couple of posts in my backlog as ideas to write in the future. At this
moment, one of those ideas is being drafted: a post regarding Android and the
wave of using the &lt;em&gt;Clean Architecture&lt;/em&gt; for Android applications (although it
could be applied to any platform where it is used). Not really a technical post,
but related to it.&lt;/p&gt;
&lt;p&gt;I also updated &lt;a href=&#34;https://git.sr.ht/~captainepoch/blogtheme&#34;&gt;the theme&lt;/a&gt; of this website because of a suggestion
given to me at the &lt;code&gt;##sr.ht.pub&lt;/code&gt; IRC channel (at &lt;a href=&#34;https://libera.chat/&#34;&gt;Libera.chat&lt;/a&gt;).
Now, in every post (not page) you will see, at the right of the date, the main
page linked. That is because someone told me that going back to the index was
not intuitive, so you can go back easily from now on.&lt;/p&gt;
&lt;p&gt;Regarding this blog, I also decided to delete the &lt;code&gt;description&lt;/code&gt; field of all my
posts. I do not see its usefulness, and all of my posts will not have it from
now on. Old posts will be modified to delete the field as well. Pages are
included.&lt;/p&gt;
&lt;p&gt;On november 11th, 2022, I updated the &lt;a href=&#34;https://adol.pw/privacy-policy&#34;&gt;Privacy Policy&lt;/a&gt;
for this website to reflect that it is hosted at &lt;a href=&#34;https://srht.site&#34;&gt;SourceHut Sites&lt;/a&gt;
from now on until further notice. The gist of it is: I do not collect any data
and do not have cookies or any tracking software in my website (nor I intend
to). &lt;a href=&#34;https://git.sr.ht/~captainepoch/adol.pw/commit/f5eb1141cc4addf7c33d35112cd764eb0e327610&#34;&gt;This is the commit&lt;/a&gt; regarding this change.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Why are we not using free, decentralized platforms?</title>
      <link>https://adol.pw/2022/11/14/free-decentralized-platforms-not-used-2022/</link>
      <pubDate>Mon, 14 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/11/14/free-decentralized-platforms-not-used-2022/</guid>
      <description>&lt;p&gt;In the last week there was a &lt;em&gt;huge&lt;/em&gt; influx of users joining the
&lt;!-- raw HTML omitted --&gt;Fediverse&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt; in the wake of &lt;a href=&#34;https://web.archive.org/web/20221113080641/https://www.bloomberg.com/news/articles/2022-10-28/musk-completes-44-billion-twitter-deal-ending-months-of-enmity&#34;&gt;Elon Musk buying
Twitter&lt;/a&gt;. Whether if this is something good or bad is
a topic I am not going to get into in this post because it is out of the
scope of it, but I will have to mention something related to it in another
section of the post.&lt;/p&gt;
&lt;h1 id=&#34;the-network-effect-of-twitter-and-others&#34;&gt;The &amp;ldquo;network effect&amp;rdquo; of Twitter (and others)&lt;/h1&gt;
&lt;p&gt;Twitter has been, for the past years, one of the default social media platforms
where, among others, programmers and their communities resided to communicate
with their users. This made Twitter the &lt;em&gt;de facto&lt;/em&gt; platform for publishing news,
software releases, and even giving support to users.&lt;/p&gt;
&lt;p&gt;After a long time using a &amp;ldquo;free&amp;rdquo; platform to publish content, who would want to
go back to the old RSS feeds, or mailists, right? Well, it turns out that a lot
of people had Twitter just because they could not get their news using more
&lt;!-- raw HTML omitted --&gt;traditional methods&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt;. Twitter was &lt;em&gt;the source&lt;/em&gt;
for everything.&lt;/p&gt;
&lt;p&gt;This, of course, drove Twitter to serve ads and to increase its data collection.
For example, why does the Twitter app need to collect which applications a user
has installed? It does not. And yet, it does.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you want to check this out, go to the &lt;a href=&#34;https://twitter.com/en/privacy&#34;&gt;Privacy Policy of
Twitter&lt;/a&gt;, section 1.2, at &amp;ldquo;Device information&amp;rdquo; (&lt;a href=&#34;https://web.archive.org/web/20221113073217/https://twitter.com/en/privacy&#34;&gt;Wayback
Machine link&lt;/a&gt;)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This behavior can be extended to any social media platform nowadays, whether it
is Twitter or Facebook.&lt;/p&gt;
&lt;h1 id=&#34;the-fediverse&#34;&gt;The Fediverse&lt;/h1&gt;
&lt;p&gt;After the acquisition of Twitter by Elon Musk, a lot of people move away from
Twitter to a more open ecosystem. That is when Pleroma, Mastodon and more come
along.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pleroma.social&#34;&gt;Pleroma&lt;/a&gt; and &lt;a href=&#34;https://github.com/mastodon/mastodon&#34;&gt;Mastodon&lt;/a&gt; are both Twitter clones based on the
&lt;a href=&#34;https://activitypub.rocks/&#34;&gt;ActivityPub&lt;/a&gt; protocol. They enable users to interact with each
other, from their own instances or using one already running by a third-party.&lt;/p&gt;
&lt;p&gt;The fediverse offers decentralization, freedom and
&lt;!-- raw HTML omitted --&gt;privacy&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt; for users joining the different instances of the
software that comprises this universe.&lt;/p&gt;
&lt;p&gt;But since a ton of new users moved to one or other instance, I cannot but think
that they did not really care (at all) about the ecosystem in the first place. A
lot of people in the FOSS world (myself included) have been trying to get people
into this ecosystem for a long time, and yet we were received with slogans like
&amp;ldquo;But everybody is at &amp;lt;insert here platform&amp;gt;&amp;rdquo;. The same excuse.&lt;/p&gt;
&lt;p&gt;It is a weird feeling. It is like a banter coming from a lot of people just
because another rich person bought a company. So what? It happens from time to
time. And be honest for a second: Twitter sucks.&lt;/p&gt;
&lt;h2 id=&#34;privacy-within-the-fediverse&#34;&gt;Privacy within the Fediverse&lt;/h2&gt;
&lt;p&gt;The openess of the platforms and the software made almost imposible for a
sysadmin to reach the same status of advertising into the platforms. None of
them support adding advertising into their software, you would have to patch it
(and maintain a copy yourself with those patches) in order to add ads.&lt;/p&gt;
&lt;p&gt;You can easily, however, add tracking scripts (such as Google Analytics) because
that involves a small patch easily maintainable.&lt;/p&gt;
&lt;p&gt;Another thing that people tend to forget is that you are putting your trust with
your data into another third-party (often a couple of sysadmins). This does not
guarantee any privacy if those persons are not trustworthy. The software that
runs the Fediverse already collects as minimum data as possible, but still.&lt;/p&gt;
&lt;p&gt;And also everything you posts, if not marked as a DM, is public somehow. Even
the followers-only posts. If someone follows you, (s)he can see what you posted
(or you have your account locked but accept a follow request).&lt;/p&gt;
&lt;h2 id=&#34;monetization-and-long-term-instances&#34;&gt;Monetization and long-term instances&lt;/h2&gt;
&lt;p&gt;One of the problems that seems to give people the feeling of failure is that the
servers are often ran by one person, and that person has to pay for everything.
If the instance increases its use, it means more hardware requirements (such as
RAM and storage), so maybe the person running that instance takes it down after
a period of time running it.&lt;/p&gt;
&lt;p&gt;Bear in mind that Twitter was &amp;ldquo;free&amp;rdquo; because of the
&lt;!-- raw HTML omitted --&gt;advertising&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt; done into the platform. Owners of the
instances often do not ask for donations, but it is nice if people throw some
money at them to keep things running. Remember: people who run this kind of
software are not rich, precisely.&lt;/p&gt;
&lt;p&gt;To set an example: the instance &lt;a href=&#34;https://mastodon.world&#34;&gt;mastodon.world&lt;/a&gt; did not have a
donation page. But since the influx of new users, the administation chose to
open a &lt;a href=&#34;https://opencollective.com/&#34;&gt;OpenCollective&lt;/a&gt; page for users to donate money and keep
things running, and it is doing pretty well.&lt;/p&gt;
&lt;p&gt;Bear in mind that, in this ecosystem, you are not the product.&lt;/p&gt;
&lt;h2 id=&#34;moderation-of-content&#34;&gt;Moderation of content&lt;/h2&gt;
&lt;p&gt;One thing I saw this past few days is people asking for heavy moderation of the
content, specially with other federated instances. New users coming from Twitter
seem to want to be under the same umbrella of heavy moderation of content that
they do not see fit in their description of what it should be allowed to be
posted.&lt;/p&gt;
&lt;p&gt;The software running your instance already provides the tools to deal with this.
You can mute people or whole instances, instead of running to your admin to
defederate. You must have in mind that federation is what makes the fediverse.&lt;/p&gt;
&lt;p&gt;Also, if you ask to defederate with one instance, people who want to follow from
that instance and/or interact with people will not be able to do, same as you if
you want to follow someone in that (defederated) instance.&lt;/p&gt;
&lt;p&gt;There are, of course, cases in which moderation and defederation are in place,
such as posting CP/CSAM. That should not be allowed by any chance. I even
suggest to report that to the authorities.&lt;/p&gt;
&lt;p&gt;Mute that person -or those persons- that you do not like, or even the whole
instance, and move on. Stop asking for heavy moderation in the name of others,
when you are the only one wanting that. That stifles openness of respectful
discussions.&lt;/p&gt;
&lt;h1 id=&#34;recommended-instances-to-join&#34;&gt;Recommended instances to join&lt;/h1&gt;
&lt;p&gt;I am not really a big fan of recommending instances, because I do not really
know how the moderation team is on them, with which instances they federate or
not, or just how well maintained is the instance itself.&lt;/p&gt;
&lt;p&gt;But, since there are a lot of people joining lately, I would like them to join a
couple of instances where you can express as free as the platform allows (some
of them might have closed registrations at the moment of this post, go and check
them back from time to time):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stereophonic.space&#34;&gt;stereophonic.space&lt;/a&gt; is the latest instance I joined, and
I have been a member since a lot of time. The admins are cool guys and they
can help you with any problem you have there.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nixnet.social&#34;&gt;nixnet.social&lt;/a&gt; is another cool instance, with
a good and thoughtful moderation team.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blob.cat&#34;&gt;blob.cat&lt;/a&gt; is another comfy instance, a bit moderated, but very open
to discussions if you are respectful with eachother. Also, &lt;em&gt;blobcats&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will have, of course, comply with the legal requirements such as not posting
anything illegal under the country the instance is hosted (they add that at the
&amp;ldquo;About&amp;rdquo; page, normally).&lt;/p&gt;
&lt;p&gt;The expected behavior on all of those instances is: do not be a dick and have
fun!&lt;/p&gt;
&lt;p&gt;PS.: Those are a few of the hugh quantity of instances out there.&lt;/p&gt;
&lt;h1 id=&#34;what-does-the-future-hold&#34;&gt;What does the future hold?&lt;/h1&gt;
&lt;p&gt;What the future holds for the Fediverse is unknown. This is something that is
new and exciting, and people seem to have a good time while interacting with
others.&lt;/p&gt;
&lt;p&gt;There are, of course, any kind of people there, and you should curate your
experience there a bit to enjoy to the fullest.&lt;/p&gt;
&lt;p&gt;I suggest to you, a new user to the Fediverse, that you should join a very
open-minded instance and explore the Fediverse to the fullest, so you can see you
will not miss propietary social platforms (with time, of course).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I only talked here about &lt;a href=&#34;https://pleroma.social&#34;&gt;Pleroma&lt;/a&gt; and &lt;a href=&#34;https://github.com/mastodon/mastodon&#34;&gt;Mastodon&lt;/a&gt;, but the
Fediverse is more than those:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pixelfed.org/&#34;&gt;Pixelfed&lt;/a&gt;: Instagram clone.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://joinpeertube.org/&#34;&gt;PeerTube&lt;/a&gt;: YouTube clone.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://friendi.ca/&#34;&gt;Friendica&lt;/a&gt;: Facebook clone.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://joinbookwyrm.com/&#34;&gt;BookWyrm&lt;/a&gt;: GoodReads clone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And more that may come in the future.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;A set of applications using the &lt;a href=&#34;https://activitypub.rocks/&#34;&gt;ActivityPub&lt;/a&gt; API
design to be able to talk with eachother. It is a decentralized ecosystem.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;RSS feeds, mailists, newsletters, IRC channels and
topics, forums&amp;hellip;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;In a sense. Check the section &lt;em&gt;Privacy within the Fediverse&lt;/em&gt;.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;As a monetization method to keep things running.&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Status update, October 2022</title>
      <link>https://adol.pw/2022/10/21/status-oct-2022/</link>
      <pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/10/21/status-oct-2022/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This month has nothing special to log into a status update.&lt;/p&gt;
&lt;p&gt;I ended my maintenance of Husky once and for all. There is not any special
reason for this, only I do not have time to invest in it and I have another
projects that require more attention from my end. I will contribute to FOSS
projects from time to time if I can.&lt;/p&gt;
&lt;p&gt;Another new is that I am going to try to write more stuff about technical topics
(mostly regarding Android development). I will keep writing opinion articles and
such, but I also want to add more techcnical topics into my feed. Stay tunned
for them!&lt;/p&gt;
&lt;p&gt;To end the status, I want you to know that this blog is now served from
SourceHut Sites and I am very happy with the change, since it was really easy to
migrate everything.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, September 2022</title>
      <link>https://adol.pw/2022/09/25/status-sep-2022/</link>
      <pubDate>Sun, 25 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/09/25/status-sep-2022/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;The past month was not a really espectacular one, since I took some time off of
everything (not only programming, but also in life) to rest. Work has been
excruciantly tiresome and it was something needed (even at this moment it is).&lt;/p&gt;
&lt;p&gt;In Husky-related news I started two (big) changes. First one is the UnifiedPush
provider for push notifications. I started adding it into Husky, so current and
new users would be able to get notifications through a proper provider, rather
than a custom implementation of this kind of thing. The idea is to allow only
push notifications through this, and if the user does not have any push
provider, there will be not any notifications (thus saving battery).&lt;/p&gt;
&lt;p&gt;The other (big) change is removing Dagger from Husky for Koin. This is something
that does not affect the user, more for developers. The reason is that, in time,
Husky will become a single-activity application, and then, the library
&lt;a href=&#34;https://github.com/Zhuinden/simple-stack&#34;&gt;simple-stack&lt;/a&gt; will be used for navigation and injecting
dependencies, since it has a service locator integrated in it, thus making
Dagger unnecessary, and Koin is the middle-ground for this migration. Also,
because the current Dagger implementation is a big messy, it allows me to clean
code and organize the DI in a better way.&lt;/p&gt;
&lt;p&gt;All of this changes are planned for the 1.4.0 version. There is not any ETA
whatsoever, it will be ready when it is done.&lt;/p&gt;
&lt;p&gt;On other development news, this past week the application &lt;a href=&#34;https://github.com/andOTP/andOTP&#34;&gt;andOTP&lt;/a&gt; &lt;a href=&#34;https://forum.xda-developers.com/t/unmaintained-app-4-4-open-source-andotp-open-source-two-factor-authentication-for-android.3636993/page-6#post-87021655&#34;&gt;is
not longer maintained&lt;/a&gt;. I think this application is
important and should not be left behind, and that is why I am thinking on making
my own copy and try to keep it stable and working (if it does not take much
time).&lt;/p&gt;
&lt;p&gt;For more &amp;ldquo;tech&amp;rdquo; related news, I am migrating my website and my IRC bouncer to
SourceHut. I consider that SourceHut is mature enough to handle this stuff, and
because I already pay for my srht account, it does not make really sense to
self-host this when I can do the same with &lt;a href=&#34;https://srht.site/&#34;&gt;srht.site&lt;/a&gt; and
&lt;a href=&#34;https://man.sr.ht/chat.sr.ht/&#34;&gt;chat.sr.ht&lt;/a&gt;. If I even leave SourceHut or it just stop providing
those services, I will be back with my VPS provider to self-host this again.&lt;/p&gt;
&lt;p&gt;On non-tech news, I started to meditate. I have been researching about this
topic for a while, given the benefits it has for the body and the mind, and I
decided to give it a try, since I need to sleep and, lately, I have not been
able to rest properly. The idea is to go from 5 minutes at night to half an
hour, and if possible, also in the mornings (so one hour each day). The goal is
not only for sleeping, but also to be relaxed and lose the added stress of the
day. I will let you know how it goes.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next update!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, July 2022</title>
      <link>https://adol.pw/2022/07/15/status-july-2022/</link>
      <pubDate>Fri, 15 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/07/15/status-july-2022/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;I would like to start this post by saying a massive &amp;ldquo;Thank you!&amp;rdquo; to all the
users and collaborators that worked with me while maintaining Husky. It was a
great experience working with people willing to take their time to give a
helping hand with the project. And a massive recognition to
&lt;a href=&#34;https://expired.mentality.rip/users/a1ba&#34;&gt;a1batross&lt;/a&gt;, the previous maintainer, who did an amazing job with
Husky.&lt;/p&gt;
&lt;p&gt;That being said, I am out of the Fediverse, possibly, once and for all. People
have the problem that they want the stuff done by their way, instead of
understanding that FOSS maintainers do that for free, and I do not think taking
the effort to send an email while getting software for literally nothing is even
a fair price, yet it is the only thing I asked to the users of Husky reporting
issues: do it over email.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://git.sr.ht/~captainepoch/husky&#34;&gt;Husky&lt;/a&gt; will need another maintainer. The repository is open for
anyone to copy and push it wherever you like.&lt;/p&gt;
&lt;p&gt;I am done dealing with entitled people. It is not worth the effort. Maybe I will
be back in the future to the Fediverse, maybe not, it is something I did not
even think about, but if I do, I will do things differently.&lt;/p&gt;
&lt;p&gt;Drew DeVault wrote a post called &lt;a href=&#34;https://drewdevault.com/2022/07/09/Fediverse-toxicity.html&#34;&gt;The Fediverse can be pretty
toxic&lt;/a&gt; with which I agree. Also, he wrote
&lt;a href=&#34;https://drewdevault.com/2022/05/30/bleh.html&#34;&gt;bleh&lt;/a&gt;, reflecting his view of people and the relation with
SourceHut and himself. I wrote this post, titled &lt;a href=&#34;https://adol.pw/2022/06/04/why-sourcehut/&#34;&gt;Why did I choose
SourceHut?&lt;/a&gt;, that contains my reasons for using SourceHut
as my preferred Git platform over others.&lt;/p&gt;
&lt;p&gt;This, of course, does not mean I am going to stop being active. I will continue
contributing to FOSS projects, as far as my spare time allows me. Whether if
they will be Android applications or not it still is something I am thinking
about.&lt;/p&gt;
&lt;p&gt;This post also puts a final in the series &lt;a href=&#34;https://adol.pw/categories/husky/&#34;&gt;Maintaining my first
project&lt;/a&gt;. This post can be also considered the sixth and
final part of those.&lt;/p&gt;
&lt;p&gt;For those who come from the Fediverse to read this and want to keep in touch
with me, you have all my contact details at &lt;a href=&#34;https://adol.pw/contact&#34;&gt;adol.pw/contact&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On other news, I deleted all my repositories from GitHub. I am not going to keep
hosting any code there (if I contribute to a project there I do not have any
alternative). I do not think that GitHub is a Git forge anymore, instead it is a
social network. Also, I do not consider GitHub Copilot an ethical tool, trained
with our code and not recognizing that the code it writes can be considered a
derived work. Lawers called that &amp;ldquo;suggestions&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Drew DeVault wrote a good article about GitHub Copilot called &lt;a href=&#34;https://drewdevault.com/2022/06/23/Copilot-GPL-washing.html&#34;&gt;GitHub Copilot
and open source laundering&lt;/a&gt;. You should check it.&lt;/p&gt;
&lt;p&gt;I understand that having the code in the open in another Git forges allows
Copilot to be trained too. My opinion stands.&lt;/p&gt;
&lt;p&gt;Now, I have my code in two places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SourceHut, my main Git forge. You can check my repositories at
&lt;a href=&#34;https://git.sr.ht/~captainepoch/&#34;&gt;git.sr.ht/~captainepoch&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Codeberg, my mirror Git forge. You can check my repositories at
&lt;a href=&#34;https://codeberg.org/captainepoch&#34;&gt;codeberg.org/captainepoch&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I choose to do this like that because people tend to like more a GitHub-like
hosting, and thus, they prefer to look at the code in one like that.&lt;/p&gt;
&lt;p&gt;The question &amp;ldquo;But why?&amp;rdquo; can be answered with this: I find that we should use as
many FOSS platforms and FOSS software for FOSS projects as we can. Sometimes we
cannot do that (for example, an iOS application can be FOSS, but Xcode and MacOS
are not FOSS), but in the extent of our posibilities, we should.&lt;/p&gt;
&lt;p&gt;If you are a FOSS programmer, I would recommend to you to take time to think
about this kind of stuff, and migrate to Codeberg, a GitHub-like Git hosting,
based on Gitea (and with all the code of the platform hosted there).&lt;/p&gt;
&lt;p&gt;Drew DeVault wrote an article called &lt;a href=&#34;https://drewdevault.com/2022/03/29/free-software-free-infrastructure.html&#34;&gt;It is important for free software to use
free software infrastructure&lt;/a&gt;. I think it is a good
article to understand this point of view from a long time FOSS maintainer.&lt;/p&gt;
&lt;p&gt;Outside of the programming stuff, I started to play &lt;a href=&#34;https://www.minetest.net/&#34;&gt;Minetest&lt;/a&gt;. It is
a FOSS Minecraft clone turned into a Voxel games engine. It has a ton of mods,
and you can create an almost 100% clone of vanilla Minecraft. You should check
it out.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
&lt;p&gt;PS.: I quote a lot of articles written by Drew DeVault because I consider him a
very good FOSS maintainer with a good knowledge on ethics and issues on those
that I do not posses. Plus, I learnt a lot from him when I started with
SourceHut, reading his posts at &lt;a href=&#34;https://drewdevault.com&#34;&gt;his website&lt;/a&gt; and talking with him on
IRC.&lt;/p&gt;
&lt;p&gt;If you can recommend more blogs from people like Drew, please, send me a link to
them, I would love to add them to my RSS reader.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Documentation at the right place</title>
      <link>https://adol.pw/2022/07/10/doc-at-the-right-place/</link>
      <pubDate>Sun, 10 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/07/10/doc-at-the-right-place/</guid>
      <description>&lt;p&gt;When programming a piece of software, whether it is an application, a library, a
set of scripts, it is always important to add some documentation to the project,
specially if it is a self-hosted tool (with an API), or a library that makes
some tasks easier for other programmers. A good documentation not only helps
future programmers with your software, but it also helps by solving questions
people can have, thus freeing you to reply them in your support channels.&lt;/p&gt;
&lt;p&gt;But sometimes programmers do not put the documentation at the right place. An
example would be an Android library called &lt;a href=&#34;https://github.com/skydoves/sandwich&#34;&gt;sandwich&lt;/a&gt;. I stumbled upon
it the other day, and when I started to look into the project, I saw the README.
The documentation for the whole library is at the README.&lt;/p&gt;
&lt;p&gt;A README for a project should contain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A short description indicating the scope of the project.&lt;/li&gt;
&lt;li&gt;Links to the documentation of the project, not only the API (if it exists) but
also how to install/deploy it and a basic initial setup. An advanced
documentation should be provided as well if needed.&lt;/li&gt;
&lt;li&gt;Links to the documentation about how to contribute to the project (not only
with code but also reporting issues).&lt;/li&gt;
&lt;li&gt;Links to the support channels.&lt;/li&gt;
&lt;li&gt;(Optional) Links to the social networks you use to announce updates for the
project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are hosting your code at some Git hosting, it is possible that platform
already provides you with a way to create man pages or a wiki, or any other
place where the documentation should live.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sourcehut.org&#34;&gt;SourceHut&lt;/a&gt; provides &lt;a href=&#34;https://man.sr.ht/&#34;&gt;man.sr.ht&lt;/a&gt;, a git-based wiki that can be
attached to a project. Any GitHub-like hosting, such as &lt;a href=&#34;https://gitea.io&#34;&gt;Gitea&lt;/a&gt; or
&lt;a href=&#34;https://gitlab.com&#34;&gt;GitLab&lt;/a&gt; also provides an integrated wiki within the project that can
also be managed using git.&lt;/p&gt;
&lt;p&gt;If you do not want to use those methods, you can always add a &lt;code&gt;man&lt;/code&gt; or &lt;code&gt;doc&lt;/code&gt;
folder inside the repository itself with the documentation for your project.&lt;/p&gt;
&lt;p&gt;The documentation should also be organized and linkable for any part of the
documentation itself, so table of contents and references to other parts of the
documentation can be made easily and without almost no effort. That would be
very convinient for the users using your software.&lt;/p&gt;
&lt;p&gt;A couple of examples of this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.sr.ht/~emersion/soju/&#34;&gt;soju&lt;/a&gt;, an IRC bouncer.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ACRA/acra/&#34;&gt;ACRA&lt;/a&gt;, an Android library for reporting crashes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next time you make a project, or if you already have some projects, take some
time to review the documentation and see if you can improve it by using the
tools we have for this purpose. It will be a huge boost for your project, and
maybe even a point of reference for other people.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, June 2022</title>
      <link>https://adol.pw/2022/06/18/status-jun-2022/</link>
      <pubDate>Sat, 18 Jun 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/06/18/status-jun-2022/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This past month has been a slow one.&lt;/p&gt;
&lt;p&gt;On Husky related development, the upgrade to the API 32 (Android 12L) is almost
done and the first beta of the 1.3.0 version will be available soon. I found
some problems with ACRA and this means I am writing Husky&amp;rsquo;s own crash handler
that will be available from 1.3.0 and up (for the moment).&lt;/p&gt;
&lt;p&gt;I also have a couple of patchsets to review, which makes me a bit happy since
there are users wiling to contribute to the project with code. To those users,
thank you!&lt;/p&gt;
&lt;p&gt;Next version of Husky will include a new push notifications provider, like
Tusky, since some users have problems with them. The idea is to do that in the
1.4.0 version.&lt;/p&gt;
&lt;p&gt;My idea is to reach the 2.0.0 version of Husky with the refactor I want to
perform in the application. This might lead to a series of posts about Android
development and technical stuff, which will be good to do because a) it will
help me explain why I do that, b) it will help to make Husky more maintanable,
and c) for my professional carreer as an Android developer. More in the future!&lt;/p&gt;
&lt;p&gt;In the non-programmer world, I want to say that I started gathering information
about email that might help you to have a public email account. You can find
those resources at &lt;a href=&#34;https://adol.pw/email/&#34;&gt;adol.pw/email&lt;/a&gt;. It contains a small amount of
information at this moment, but I am gathering more to add. If you have any
suggestions, please send me an email to my public inbox.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Why did I choose SourceHut?</title>
      <link>https://adol.pw/2022/06/04/why-sourcehut/</link>
      <pubDate>Sat, 04 Jun 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/06/04/why-sourcehut/</guid>
      <description>&lt;p&gt;I do not have anything against GitHub itself. The platform itself managed to get
a lot of people to contribute to FOSS projects, not only their own projects but
other people&amp;rsquo;s projects. It expanded the ecosystem a lot, and it is something
you cannot ignore.&lt;/p&gt;
&lt;p&gt;The problem with GitHub is that is owned by Microsoft (M$). I do not trust M$ at
all. My experience is that, every time M$ touches something, it will get bad
over time. And GitHub will be one of those things.&lt;/p&gt;
&lt;p&gt;Nevertheless, it was time to look for an alternative.&lt;/p&gt;
&lt;p&gt;SourceHut (aka srht) was opened to the public on November 15, 2018. I know this
platform because of &lt;a href=&#34;https://diego.codes&#34;&gt;Diego&lt;/a&gt;, a friend of mine. I made an account right
away, and just for the simplicity of the platform I was blown away.&lt;/p&gt;
&lt;p&gt;SourceHut provides a set of services for hackers to manage projects, i. e. CI/CD
pipelines, git &amp;amp; mercurial support, a mailist service, an issue tracker aka
todo, wikis aka man pages, and more. You can check out more at the
&lt;a href=&#34;https://sourcehut.org&#34;&gt;website&lt;/a&gt;. This set of features do not only make srht a very well
crafted platform, but also a competitive one with other Git forges.&lt;/p&gt;
&lt;p&gt;SourceHut is also a platform based on 100% Free and Open Source Software. All
the source code is managed at SourceHut itself, and the development and
discussion topics are done in the open using the mailists or at the IRC
channels.&lt;/p&gt;
&lt;p&gt;It is also a platform that &lt;em&gt;respects your privacy&lt;/em&gt;, something that a lot of
people forget to take into account when choosing a service. No JS, no
analytics, no nothing. Not even paying for your GitHub account will fix the
tracking it does. In the era where companies gather data of you even in the most
simpler apps, I think this is an important step towars a healthy ecosystem.&lt;/p&gt;
&lt;p&gt;It also takes like 5 minutes or so to setup git + email and test it with a
simple patch. Drew made &lt;a href=&#34;https://git-send-email.io/&#34;&gt;git-send-email.io&lt;/a&gt; as a tutorial for
those who are new to this workflow (I am one of those). It is easy to follow, it
gives you instructions to get started right away, and it gives you the
opportunity to send a patch to a mailist and to make a second one with a
suggestion (it is an automated process for your to test the tutorial).&lt;/p&gt;
&lt;p&gt;Another good thing about srht is that, if you want to contribute to any project,
&lt;em&gt;you do not Yet Another Account(TM)&lt;/em&gt;. Because everything is done by email, you
can avoid making an account into the platform but you can send patches, bug
reports and reply to other emails from your email account.&lt;/p&gt;
&lt;p&gt;Do you need to communicate an issue of the platform or need to fix something?
You can because of the FOSS nature of srht, all of the code, mailists and todo
trackers are available to you. It only takes a few minutes to setup your email
client and send an email. Or you can also use IRC to talk to the developers of
srht, &lt;code&gt;#sr.ht&lt;/code&gt; at &lt;a href=&#34;https://libera.chat/&#34;&gt;libera.chat&lt;/a&gt;. You have a couple of ways on how to
reach the community &lt;a href=&#34;https://sourcehut.org/community/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are a new user of SourceHut and need a bit of help, apart of reading &lt;a href=&#34;https://man.sr.ht&#34;&gt;the
documentation&lt;/a&gt; you can reach out within the communication
channels to the community, and everyone there will try to give you a helping
hand.&lt;/p&gt;
&lt;h1 id=&#34;the-visibility-argument&#34;&gt;The visibility argument&lt;/h1&gt;
&lt;p&gt;A lot of people will say that GitHub gives you the ability to be seen in the
community. This is partially incorrect.&lt;/p&gt;
&lt;p&gt;GitHub evolved from being a hacker forge to be more a social network. Therefore,
you are being recommended projects and people that are somehow related to your
activity inside the platform (hence the tracking I mentioned before). The
problem is that GitHub has a ton of users, a ton of repos with a ton of code,
and that does mean recommendations can, and will be, bad (a lot of times).&lt;/p&gt;
&lt;p&gt;With such quantity of repositories and people, your project mighe be buried in
the void faster than you can imagine. Also, stars are not a very good indicator
about the popularity of the project, nor are the forks.&lt;/p&gt;
&lt;p&gt;Since SourceHut does not track you, the &lt;a href=&#34;https://sr.ht/&#34;&gt;hub&lt;/a&gt; (also, &lt;a href=&#34;https://sr.ht/projects&#34;&gt;projects at
srht&lt;/a&gt;) will show you projects that are hosted at srht, and
nothing more.&lt;/p&gt;
&lt;h1 id=&#34;github-like-alternatives&#34;&gt;GitHub-like alternatives&lt;/h1&gt;
&lt;p&gt;There are a couple of alternatives if you want to keep using something like
GitHub.&lt;/p&gt;
&lt;h2 id=&#34;gitea-and-codeberg&#34;&gt;Gitea and Codeberg&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://gitea.io&#34;&gt;Gitea&lt;/a&gt; is a good option for those who want to preserve the GitHub-like
appeal and workflow while keeping their code at their own Gitea instance. It
runs in a Raspberry Pi, you do not need a huge server to run it for having small
projects and a few contributions.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codeberg.org&#34;&gt;Codeberg&lt;/a&gt; is an EU-based Gitea instance. It is free to use, although
donations are appreciated to keep the service running. If you want a good
alternative to GitHub, &lt;em&gt;I cannot recommend Codeberg enough times to you&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE: if I am leaving SourceHut for any reason whatsoever I would choose
Codeberg as my alternative for FOSS development.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;gitlab&#34;&gt;GitLab&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://gitlab.com&#34;&gt;GitLab&lt;/a&gt; is somehow Open Source, although the main instance is behind
its premium business model (after all, GitLab is a company too).&lt;/p&gt;
&lt;p&gt;But you can self-host an instance, but be prepared to waste &lt;em&gt;a lot&lt;/em&gt; RAM.&lt;/p&gt;
&lt;h1 id=&#34;email-again&#34;&gt;Email again?&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Yes&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I am a fan of the email since I started using it.&lt;/p&gt;
&lt;p&gt;It is an easy, simple way to communicate with people. Everyone has an email
address, or more than one.&lt;/p&gt;
&lt;p&gt;There are plenty of email clients for all tastes (I use neomutt + emacs/vim, for
example), and also plenty of providers to make an account (free and paid).&lt;/p&gt;
&lt;p&gt;Setting up the email for collaborating with a project is really easy, and since
git has all the necessary stuff embedded for email collaboration, you only need
a client to reply to comments made to your patch, so you can send a new version
of that.&lt;/p&gt;
&lt;p&gt;A lot of people complain about the fact that srht is a mail-based platform. git
is intended to be used with the email as the main transport protocol to
contribute to any project. GitHub was one, if not the first, of putting all the
tools git offers behind a website. Forks are just copies, PRs are just patches
from your copy to the original project, and so on. It is not magic.&lt;/p&gt;
&lt;p&gt;As an example of a project using email as the main transport protocol for
collaborating I always like to use Linux. Linux is being developed in this way
since the 90s. &lt;em&gt;It works&lt;/em&gt;. And just like in srht, you only need an email account
to contribute to the project!&lt;/p&gt;
&lt;p&gt;I am putting together resources about having a good email client, choosing a
good provider, and so on. You can take a look at &lt;a href=&#34;https://adol.pw/email&#34;&gt;adol.pw/email&lt;/a&gt;.
I accept suggestions, so send me an email if you know more (bear in mind that,
at the time of publishing this post, it is a work-in-progress page).&lt;/p&gt;
&lt;h1 id=&#34;platforms-made-by-and-for-foss&#34;&gt;Platforms made by and for FOSS&lt;/h1&gt;
&lt;p&gt;We do not always use FOSS to develop FOSS. But in this process the idea that
using more FOSS to develop FOSS is something that stuck in my mind after reading
the article &lt;a href=&#34;https://drewdevault.com/2022/03/29/free-software-free-infrastructure.html&#34;&gt;It is important for free software to use free software
infrastructure&lt;/a&gt;, by Drew DeVault.&lt;/p&gt;
&lt;p&gt;After &lt;a href=&#34;https://adol.pw/2022/05/09/maintaining-first-project-part-iv-end/&#34;&gt;ending the maintenance of Husky&lt;/a&gt;, I started to think
going back to GitHub would be a good option. But a couple of days after
publishing the post, I thought that the success of a platform is that users keep
using if after a while. I want srht to be a successful platform, and I intend to
keep using it until I cannot longer do it.&lt;/p&gt;
&lt;p&gt;All of my future projects will be hosted at SourceHut.&lt;/p&gt;
&lt;p&gt;&amp;ndash;&lt;/p&gt;
&lt;p&gt;On a personal note, I want to give my appreciation and a big &amp;ldquo;Thank you!&amp;rdquo; to all
the srht community. Everytime I asked someone anything on IRC, or via email, I
always got a response that answers my doubts and questions.&lt;/p&gt;
&lt;p&gt;And, specially, to Drew DeVault, because everytime I reached to ask him
anything, he always had two minutes to reply to the question, and because he
made those videos showing how patches are reviewed and managed via email, and I
learnt a lot from him. Or just because reading his opinions makes me to re-think
some stuff.&lt;/p&gt;
&lt;p&gt;Thank you all!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Maintaining my first project: part V, the return</title>
      <link>https://adol.pw/2022/05/14/maintaining-first-project-part-v-return/</link>
      <pubDate>Sat, 14 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/05/14/maintaining-first-project-part-v-return/</guid>
      <description>&lt;p&gt;On May 9, 2022 I wrote &lt;a href=&#34;https://adol.pw/2022/05/09/maintaining-first-project-part-iv-end/&#34;&gt;the fourth part&lt;/a&gt; of this series of posts.
This post came as a result of a bad day and complaints about how I manage Husky
(by using the email and &lt;a href=&#34;https://sourcehut.org&#34;&gt;SourceHut&lt;/a&gt;, mainly).&lt;/p&gt;
&lt;p&gt;The decision of ending the maintenance of Husky was a rash decision. It was
something I did not think about properly and with time, and it was made in
a bad moment of the day. I wrote that post and &lt;a href=&#34;https://secluded.site&#34;&gt;amolith&lt;/a&gt; helped me
redacting part of it in a better way.&lt;/p&gt;
&lt;p&gt;After thinking about it for this past days I realized that I did not want to end
working on Husky. It is fun to do stuff in it, and I enjoy talking with people
about it in the Fediverse. I am also learning a lot, specially working along
people, which is something I do in my day-to-day work, but this feels different.&lt;/p&gt;
&lt;p&gt;So, this morning, I woke up, and after a cup of coffee I fixed an issue that was
bothering me in Husky (see &lt;a href=&#34;https://todo.sr.ht/~captainepoch/husky/17&#34;&gt;husky#17&lt;/a&gt;). And it felt good. There
is a lot of work on Husky to be done and I do not want the development of the
app to be stalled.&lt;/p&gt;
&lt;p&gt;That is why I decided to keep working on Husky.&lt;/p&gt;
&lt;p&gt;Let me be clear from this very moment: &lt;strong&gt;I intend to keep using SourceHut&lt;/strong&gt; as
the platform of development of Husky. That means that the main form of
communication to report bugs and discuss design issues and such things will be
the mailist, publicly. And contributing to the project will be done with
patches sent to the mailist, also publicly.&lt;/p&gt;
&lt;p&gt;If you do not want to send emails to the mailist, that is more than fine, I am
not going to force you to do it. And, if you need to send media content for
reporting an issue, &lt;a href=&#34;https://catbox.moe&#34;&gt;catbox.moe&lt;/a&gt; is a good service
(&lt;a href=&#34;https://status.uguu.se/clones.html&#34;&gt;there are more&lt;/a&gt;, bear in mind the time limit).&lt;/p&gt;
&lt;p&gt;ACRA will still be available for you to send crashes. The email address is still
up. I do not attend bugs reported there, though, only crashes reported with
ACRA. Check if you have this enabled.&lt;/p&gt;
&lt;p&gt;In the upcoming days I will update the &lt;a href=&#34;https://todo.sr.ht/~captainepoch/husky/&#34;&gt;todo tracker&lt;/a&gt; to add issues
from &lt;a href=&#34;https://git.mentality.rip/FWGS/Husky/issues&#34;&gt;the old issue tracker&lt;/a&gt; in order to keep track of what it is
already fixed or what issues will not be fixed (and, thus, not added to the todo
list).&lt;/p&gt;
&lt;p&gt;I am sorry for all the noise this caused to all of the users.&lt;/p&gt;
&lt;p&gt;On a last note, I want to thank every user that helps me improving Husky,
whether it is reporting issues, gathering information for a bit of research, or
testing new releases.&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Maintaining my first project: part IV, the end</title>
      <link>https://adol.pw/2022/05/09/maintaining-first-project-part-iv-end/</link>
      <pubDate>Mon, 09 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/05/09/maintaining-first-project-part-iv-end/</guid>
      <description>&lt;p&gt;When I volunteered to maintain Husky, I decided to use SourceHut over GitHub,
GitLab, or Gitea because SourceHut fits my workflow better. It is &lt;em&gt;extremely&lt;/em&gt;
convenient. Opening a bug report requires nothing more than an email address.
Commenting on an issue requires nothing more than an email address. Contributing
code requires nothing more than an email address. You do not need Yet Another
Account™ on Yet Another Self-Hosted Gitea™. You just need an email address.&lt;/p&gt;
&lt;p&gt;Unfortunately, I have received nothing but grief for maintaining Husky in a
manner that suits my workflow. When people mention me on fedi to request a
feature or tell me that the app crashes constantly and I ask them to send a bug
report or feature request via email, I never get one. Instead, I get a barrage
of complaints.&lt;/p&gt;
&lt;p&gt;I integrated &lt;a href=&#34;https://github.com/ACRA/acra&#34;&gt;ACRA&lt;/a&gt; to make this process simpler; when Husky crashes,
you are prompted to send me an email. Despite the integration, I have received
precious few stacktraces and more complaints.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;volunteered&lt;/em&gt; to maintain Husky. That means I get to make my own decisions on
how to develop the software. I chose SourceHut because it was convenient for me.
Therefore, if you want your issue fixed or your feature added, your choices
are 1) collaborate with me via email or 2) deal with it until someone else does.&lt;/p&gt;
&lt;p&gt;People overwhelmingly choose option 2 - accompanied by more complaints. Because
of this behaviour, maintaining Husky has become a &lt;em&gt;major&lt;/em&gt; source of frustration
and headaches.&lt;/p&gt;
&lt;p&gt;&amp;hellip; and I am done.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://git.sr.ht/~captainepoch/husky/refs/1.2.0&#34;&gt;Husky 1.2.0&lt;/a&gt; (&lt;a href=&#34;https://lists.sr.ht/~captainepoch/husky-announce/%3C20220509161349.vmf5m3tsqitix6ms%40MacBook-Pro-de-Adolfo.local%3E&#34;&gt;email announcement&lt;/a&gt;) will be
my last release as maintainer. After that, users who want
updates will have to maintain it themselves or look for someone else. If another
maintainer is found, I will happily certify them as the new maintainer in
F-Droid so updates can be distributed through there.&lt;/p&gt;
&lt;p&gt;The repository, along the mailing list and the issue tracker, are still
&lt;a href=&#34;https://sr.ht/~captainepoch/husky/&#34;&gt;available on SourceHut&lt;/a&gt; if anyone wants to take a look at them.&lt;/p&gt;
&lt;p&gt;The website will be deleted in the coming days and the permissions to send
emails and to reply to emails already sent are revoked.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I am not leaving SourceHut&lt;/strong&gt;. I consider one of the best platforms to host
projects, and future projects that I do or maintain will be there.&lt;/p&gt;
&lt;p&gt;If you wanted to donate money, find another project to help or give it to
&lt;a href=&#34;https://expired.mentality.rip/users/a1ba&#34;&gt;a1batross&lt;/a&gt; directly; he made Husky possible in the first place and I will
be always grateful to him.&lt;/p&gt;
&lt;p&gt;I apologise to those who just used Husky in silence or worked with me when
asked.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I want to thank &lt;a href=&#34;https://secluded.site&#34;&gt;amolith&lt;/a&gt; (also &lt;a href=&#34;https://mk.nixnet.social/@amolith&#34;&gt;amolith at misskey&lt;/a&gt;)
for helping me rewording this a bit better than I did.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, May 2022</title>
      <link>https://adol.pw/2022/05/09/status-may-2022/</link>
      <pubDate>Mon, 09 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/05/09/status-may-2022/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This is early for a status update, but since I did not write any for two months,
I do not really care about&lt;/p&gt;
&lt;p&gt;This past two months I did not have really anything to update the blog. Life
continued as nothing and nothing really important happened.&lt;/p&gt;
&lt;p&gt;Regarding Husky development, there was a couple of fixes here and there and it
seems that they made a positive reaction from the community. I am very thankful
to all the people who test the application and send me bugs and crashes, so I
can fix them and improve the app for everyone. Kudos to all of you!&lt;/p&gt;
&lt;p&gt;Second: I have been thinking about migrating forges. The main reason is that,
sometimes, I need to see a video/GIF or an image related to a bug and the
mailist does not allow media content attached to it. Sure, an user can upload
that content to a service and send the link, but it is not optimal (partially
because that service could delete that media content at any time if it is not
accessed in a period of time).&lt;/p&gt;
&lt;p&gt;I can also argue that the user could, at any moment, delete that media content
from that service and then the mailist will not have the whole context of the
issue. And you can also argue that you can delete the same content from an issue
created at GitHub or GitHub-like platform.&lt;/p&gt;
&lt;p&gt;Some people told me to use the Fediverse as a platform to gather bugs. I am not
going to do that at any time whatsoever. &lt;strong&gt;Those are social networks, not
platforms to manage a project&lt;/strong&gt;. Therefore, avoid to suggest that again to me,
please, the answer will be always &lt;!-- raw HTML omitted --&gt;&lt;strong&gt;no&lt;/strong&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt;.&lt;/p&gt;
&lt;p&gt;I tested, in disposable repositories, both GitHub and Codeberg. In GitHub, an
image is put inside the issue as a link to a (kind of) CDN, while at Codeberg an
image is just uploaded and attached to an issue, but not embeded into the text
of the issue (I do not know why). Also, at GitHub you cannot delete the file
attached to an issue, only unlink it, and at Codeberg you can delete the file
itself.&lt;/p&gt;
&lt;p&gt;Another reason is that people do not want to use email nowadays. It does not
take a big effort to ask for an email, but I almost got none when I do. I know,
I know, almost &lt;em&gt;everyone&lt;/em&gt; has an email, but not everyone wants to put it
publicly (although you can create an email address just to have it publicly,
like I have and you can check it out at &lt;a href=&#34;https://adol.pw/contact&#34;&gt;adol.pw/contact&lt;/a&gt;). Also,
people do not want to setup an email client to send emails with fixed width and
in plaintext.&lt;/p&gt;
&lt;p&gt;I mean no disrespect towards Sourcehut whatsoever. I think it is a fantastic
platform and Drew and all the contributors are making a really good platform.&lt;/p&gt;
&lt;p&gt;This is just a thought at this moment. It is something that, I think, could
improve the development of Husky in the long term. If you have something to
comment on this, please &lt;strong&gt;use the public inbox&lt;/strong&gt; linked down below, it is my
comment inbox, I do not have another nor will use another platform to reply
comments to my articles! (please, be sure to setup your email client properly
before sending anything).&lt;/p&gt;
&lt;p&gt;On other FOSS news, I started to look for projects in which I could give a
helping hand. The idea is to contribute with stuff I can do in a sort time, so
my time working in Husky and other private projects is maximized, while
contributing and giving back to the FOSS programmers that made possible all the
software we use. From here, thank you all!&lt;/p&gt;
&lt;p&gt;Take this status update like the update from march, april and may, since this
was long overdue because I did not have anything to share until now.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;If you need to upload something for sharing it with an email, use
&lt;a href=&#34;https://catbox.moe&#34;&gt;catbox.moe&lt;/a&gt; or any service that allows to host content for the
maximum period of time. If you do it with some service that only holds the
files for, let&amp;rsquo;s say, 24 hours, I may not be able to see it in the future.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Maintaining my first project: part III</title>
      <link>https://adol.pw/2022/04/14/maintaining-first-project-part-iii/</link>
      <pubDate>Thu, 14 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/04/14/maintaining-first-project-part-iii/</guid>
      <description>&lt;p&gt;It is been a while since I wrote &lt;a href=&#34;https://adol.pw/2021/11/20/maintaining-first-project-part-ii/&#34;&gt;Maintaining my first project: part
II&lt;/a&gt;, some stuff happened with Husky!&lt;/p&gt;
&lt;h1 id=&#34;more-reports&#34;&gt;More reports!&lt;/h1&gt;
&lt;p&gt;As I am more known in the community as the new maintainer of Husky a lot of
people reach me there to report bugs in the application. I am thankful for
getting those reports (somehow) because it means more people is using the latest
version and they can see if something fails.&lt;/p&gt;
&lt;p&gt;Remember that Husky is a Pleroma client, and many things may be broken because
not every instance is set up the same way. Some bugs are instance-specific, some
are not. I try my best to fix everything without breaking the functionality in
the rest of the instances.&lt;/p&gt;
&lt;h2 id=&#34;future-for-bug-reports&#34;&gt;Future for bug reports&lt;/h2&gt;
&lt;p&gt;As I love that people are using the newest version of Husky and I get those bug
reports, I also get them through my Pleroma account. But&amp;hellip;&lt;/p&gt;
&lt;p&gt;I know, email&amp;hellip; You hate email&amp;hellip;&lt;/p&gt;
&lt;p&gt;But I really prefer getting those in my email inbox. Sure, you do not want to
send an email to a public mailist. But you do not have to do that!&lt;/p&gt;
&lt;p&gt;At the &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man/bugreport.md&#34;&gt;Reporting bugs&lt;/a&gt; documentation I put two ways to
send me reports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Through the &lt;a href=&#34;https://lists.sr.ht/~captainepoch/husky-devel&#34;&gt;&lt;code&gt;husky-devel&lt;/code&gt;&lt;/a&gt; mailist at Sourcehut (the preferred
way).&lt;/li&gt;
&lt;li&gt;Using the email &lt;code&gt;husky (at) nixnetmail (dot) com&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The second way is as private as I am the only person I receive emails through
that account. So you can send there any bug report (or patchset), nobody is
going to know your email address.&lt;/p&gt;
&lt;p&gt;If it is a bug, only the relevant part of the report is going to be published in
the &lt;a href=&#34;https://todo.sr.ht/~captainepoch/husky&#34;&gt;todo&lt;/a&gt; tickets in order to track the status of the bug or the
task, but nothing more.&lt;/p&gt;
&lt;p&gt;So, for now on, I am going to prioritize bug reports that I get using email
rather than those I receive through Pleroma. Think of this as GitHub issues, for
me it is a way to keep things better organized. I get, sometimes, a lot of
mentions there and sometimes I forget about reports there (sorry if you are one
of those persons&amp;hellip;).&lt;/p&gt;
&lt;h2 id=&#34;to-do-list&#34;&gt;To-Do list&lt;/h2&gt;
&lt;p&gt;As I mentioned above, Husky has a &lt;a href=&#34;https://todo.sr.ht/~captainepoch/husky&#34;&gt;todo&lt;/a&gt; tickets list. This is not
very thorough, as I did not give it the attention it needs. The list is a bit
old, I have to add bugs that were reported to me recently, but once I add those,
I will keep it updated.&lt;/p&gt;
&lt;p&gt;From now on, every bug report I get from email or Pleroma will be posted there,
with a tag and, inside the ticket, the expected version to get it fixed.&lt;/p&gt;
&lt;p&gt;Before sending any email, please, check that list.&lt;/p&gt;
&lt;h1 id=&#34;f-droid-when&#34;&gt;F-Droid when?!&lt;/h1&gt;
&lt;p&gt;Ah&amp;hellip; The dreaded question&amp;hellip; The enigma!&lt;/p&gt;
&lt;p&gt;As far as I know, as soon as I restore &lt;code&gt;fastlane&lt;/code&gt; in the project it will be
possible to update Husky at F-Droid again, so you can update the application
without uninstalling it (because of the signing key).&lt;/p&gt;
&lt;p&gt;Stay tuned because I am working on this. Did you think I forgot about that?&lt;/p&gt;
&lt;h1 id=&#34;refactoring-the-whole-application&#34;&gt;Refactoring the whole application&lt;/h1&gt;
&lt;p&gt;I know I said this a lot of times since I started maintaining the application,
but Husky needs a refactor (a big one).&lt;/p&gt;
&lt;p&gt;I started working on it (flavor &lt;code&gt;newhusky&lt;/code&gt;) in my (little) spare time. The idea
is to release a 2.0.0-alpha1 as soon as I complete the basic stuff to release
it. This will take time, so do not worry right now. I will ask people to help
me testing it. But, again, do not worry about it right now.&lt;/p&gt;
&lt;h1 id=&#34;documentation&#34;&gt;Documentation&lt;/h1&gt;
&lt;p&gt;I will review the documentation I made for Husky the next week. I have the
feeling I might be able to improve it a little bit. Nothing really relevant to
the application, but relevant for contributors.&lt;/p&gt;
&lt;h1 id=&#34;for-now&#34;&gt;For now&amp;hellip;&lt;/h1&gt;
&lt;p&gt;This is for now. I do not have to say more, really. It might take a while to
write the fourth part of this series.&lt;/p&gt;
&lt;p&gt;Thank you for keep reading!&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, February 2022</title>
      <link>https://adol.pw/2022/02/15/status-feb-2022/</link>
      <pubDate>Tue, 15 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/02/15/status-feb-2022/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This month has been another one with very low activity. Aside from work I spent
my time in a project I cannot talk about, but I am very excited to work on it!&lt;/p&gt;
&lt;p&gt;Speaking of projects, last month &lt;a href=&#34;https://adol.pw/2022/01/18/husky-acra-crash-reporting/&#34;&gt;ACRA support was added to Husky&lt;/a&gt;,
meaning that now, if the application crashes unexpectedly, a push notification
will display two options: Report or Dismiss. If you press report, your preferred
email client will show with a email already composed, so you can press send
directly (although if you have more context you should add it in the body, like
steps to reproduce it and in which instance you are in).&lt;/p&gt;
&lt;p&gt;The email content will be improved upon new versions of Husky, so stay tunned!&lt;/p&gt;
&lt;p&gt;I also got a couple of bugs and a suggestion to add the option to download media
content only on WiFi. I am taking a look into this, but it will take time.
Another thing I will fix is custom emojis being animated properly (APNG and WebM
emojis). Husky &lt;a href=&#34;https://git.sr.ht/~captainepoch/husky/commit/a63c7dc96f1936db17c633f96564073686081d78&#34;&gt;already supports SVG emojis&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aside from adding new stuff and fixing but I am also rewriting the internals of
Husky. As I stated before, the code is a bit of a mess, and refactoring the
whole application to a more modern approach will not only bring the benefit of
being more maintanable over time, but we will be able to add stuff faster. Stay
tunned for more stuff about this. The application itself will not change much
from an user perspective.&lt;/p&gt;
&lt;p&gt;I want to make this perfectly clear: I will not stop maintaining the application
as it is. This is a refactor for the 2.0.0 version of Husky.&lt;/p&gt;
&lt;p&gt;Aside from this, I am also going to make streamings from time to time while
programming or gaming. I made a streaming channel at
&lt;a href=&#34;https://video.hardlimit.com/&#34;&gt;video.hardlimit.com&lt;/a&gt;. My idea is to do Husky stuff while streaming,
but I can also stream while playing games (whether FOSS games or not is another
topic). The channel is at &lt;a href=&#34;https://video.hardlimit.com/c/epochstreams/videos&#34;&gt;video.hardlimit.com/epochstreams&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the mean time, reading, watching TV shows and movies, going out for a workout
and such stuff is also part of my daily routine. I do not spend all my time in
fron of the screen, and you should not to.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Adding and using ACRA in Husky</title>
      <link>https://adol.pw/2022/01/18/husky-acra-crash-reporting/</link>
      <pubDate>Tue, 18 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/01/18/husky-acra-crash-reporting/</guid>
      <description>&lt;p&gt;This January 15th, 2022 I added &lt;a href=&#34;https://github.com/ACRA/acra&#34;&gt;ACRA&lt;/a&gt; to Husky. This library will help to
improve the stability of the application by making you able to report random
crashes that could happen using the application. This feature is &lt;strong&gt;opt-in&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Since Husky &lt;a href=&#34;https://git.sr.ht/~captainepoch/husky/refs/1.1.0-beta1&#34;&gt;1.1.0-beta1&lt;/a&gt; now, when the application crashes
randomly, a push notification is displayed, and the user has the option to
either report the crash or discard the notification. In the future, instead of a
notification, it will display a dialog, but for now the push is enough.&lt;/p&gt;
&lt;p&gt;If you look at the code changed in that build you will see that I put a mailist
email to send those crash reports. That made me think that, well, everyone can
subscribe to a mailist in Sourcehut.&lt;/p&gt;
&lt;p&gt;In Husky &lt;a href=&#34;https://git.sr.ht/~captainepoch/husky/refs/1.1.0-beta2&#34;&gt;1.1.0-beta2&lt;/a&gt; I changed the email from that list to a more
private one. &lt;!-- raw HTML omitted --&gt;Amolith&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt; provided me an alias to my current email,
so every crash report will be sent directly to me. As I say in the section &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man/contributing.md#acra-support&#34;&gt;ACRA
support&lt;/a&gt;, no personal information will be made public.&lt;/p&gt;
&lt;p&gt;The code which specifies what it is shared in the email is at
&lt;a href=&#34;https://git.sr.ht/~captainepoch/husky/tree/master/item/husky/app/src/main/java/com/keylesspalace/tusky/TuskyApplication.kt#L132-138&#34;&gt;TuskyApplication.kt#132-138&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-kotlin&#34; data-lang=&#34;kotlin&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;reportContent = listOf(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	ANDROID_VERSION,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	APP_VERSION_NAME,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	APP_VERSION_CODE,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	BUILD_CONFIG,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	STACK_TRACE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;).toTypedArray()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will be only used for debugging purposes. I do not collect any personal
data from anyone, nor do I intend to start doing it so.&lt;/p&gt;
&lt;h1 id=&#34;reviewing-my-stand-on-ethics-with-analytics&#34;&gt;Reviewing my stand on ethics with analytics&lt;/h1&gt;
&lt;p&gt;Adding this made me think about the blog post I wrote titled &lt;a href=&#34;https://adol.pw/2021/06/20/ethics-using-analytics/&#34;&gt;On ethics using
analytics&lt;/a&gt;. Reporting something is, somehow, kind of a
track system because you have data to analyze and choose how to act.&lt;/p&gt;
&lt;p&gt;As you can see in the blog post, I pointed out things to keep in mind, important
stuff to preserve the privacy of the users using your software and to clean old,
useless data.&lt;/p&gt;
&lt;p&gt;Adding ACRA into Husky provides a way for me to know about the crashes (if ACRA
is enabled and the users report them). Also, let&amp;rsquo;s go over the checklist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ACRA is an opt-in feature, it has to be enabled in the &lt;em&gt;Preferences&lt;/em&gt; view.&lt;/li&gt;
&lt;li&gt;ACRA generates random UUIDs in the reports that I do not keep (it has no
meaning to the important stuff of the crash).&lt;/li&gt;
&lt;li&gt;I use a FOSS backend to provide this functionality inside the application.&lt;/li&gt;
&lt;li&gt;I specify how I will use the data in the &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man/contributing.md&#34;&gt;Contributing&lt;/a&gt; guide,
section &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man/contributing.md#acra-support&#34;&gt;ACRA support&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Old emails will be deleted, and crashes already fixed will result in the
deletion of emails . Again, I &lt;strong&gt;do not collect any personal information&lt;/strong&gt;
about anybody.&lt;/li&gt;
&lt;li&gt;The code is FOSS and you can see it at
&lt;a href=&#34;https://git.sr.ht/~captainepoch/husky&#34;&gt;git.sr.ht/~captainepoch/husky&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I intend to keep Husky away from analytics (meaning Firebase or platforms like
that) because I do not collect data about the use of the application. My
intention with ACRA is to get crashes that could happen on a variety of devices
that do not happen to me (or any contributor) while working on the application.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;He provides &lt;a href=&#34;https://nixnet.services&#34;&gt;NixNet Services&lt;/a&gt; and was kind enough to let me use
email service. Thank you very much!&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Status update, January 2022</title>
      <link>https://adol.pw/2022/01/15/status-jan-2022/</link>
      <pubDate>Sat, 15 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/01/15/status-jan-2022/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;First status of the year!&lt;/p&gt;
&lt;p&gt;I do not have that much to share this month. I also did not want to start the
year by missing a status update.&lt;/p&gt;
&lt;p&gt;I am getting close to get &lt;a href=&#34;https://github.com/ACRA/acra&#34;&gt;ACRA&lt;/a&gt; implemented in Husky. I am debating
myself about a thing regarding how to enable it (it is an opt-in feature) to let
the SDK know that it can start working or not.&lt;/p&gt;
&lt;p&gt;Also, I have to say that I received &lt;a href=&#34;https://lists.sr.ht/~captainepoch/husky-devel/patches/27986&#34;&gt;my first patch for Husky&lt;/a&gt; courtesy
of &lt;a href=&#34;https://social.silkky.cloud/@sneeden&#34;&gt;Edward Sneed&lt;/a&gt;. I am happy about this, because it is the first
time I got a contribution. Thank you very much, Edward!&lt;/p&gt;
&lt;p&gt;I intend to apply the patch as soon as I finish adding ACRA in the project.&lt;/p&gt;
&lt;p&gt;Apart from that, I intend to write more in this blog. I said in the &lt;a href=&#34;https://adol.pw/2022/01/08/2021-recap/&#34;&gt;2021
recap&lt;/a&gt; post I wrote, that I do not what this blog to be only status
updates. My idea is to write technical topics about software engineering,
research I consider good enough to publish, and stuff like that. Stay tuned for
more posts!&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>2021 recap</title>
      <link>https://adol.pw/2022/01/08/2021-recap/</link>
      <pubDate>Sat, 08 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2022/01/08/2021-recap/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This post comes a bit late, it should be done first thing this year or on
december 31st, but anyway, it is never too late.&lt;/p&gt;
&lt;p&gt;2021 was one of the weirdest years I lived. A lot of things happened, good and
bad, but in the end, we are still alive!&lt;/p&gt;
&lt;h1 id=&#34;professional-development&#34;&gt;Professional development&lt;/h1&gt;
&lt;p&gt;2021 was a year of professional development. As I am working right now as an
Android hacker I have to keep up with new stuff (with new stuff I mean stuff
I do not already know, like &lt;a href=&#34;https://www.rxjava.com/&#34;&gt;RxJava&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The Android development world is full of stuff to learn. But when you work in a
company with projects made a long time ago, you find this kind of problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Making a refactor is not possible due to time constraints. You have to keep up
releasing new versions with fixes and new stuff, and since everything works,
making huge changes is something very difficult to acomplish.&lt;/li&gt;
&lt;li&gt;Adding new libraries that could contain potential bugs is also difficult,
since the Tech Lead/Project Owner, normally, does not want to play games.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes sometimes difficult to learn new stuff at work. When the project is
new, sure, you can start from more new stuff, like Kotlin&amp;rsquo;s Coroutines instead
of RxJava, using MVVM instead of MVP/MVI&amp;hellip; But when the project is old, you
have to keep the &amp;ldquo;legacy&amp;rdquo; stuff around.&lt;/p&gt;
&lt;p&gt;That is why I started to learn more stuff that it is been around for a long
time, because you never know where you are going to end working.&lt;/p&gt;
&lt;h2 id=&#34;other-programmer-stuff&#34;&gt;Other programmer stuff&lt;/h2&gt;
&lt;p&gt;I also have been working in other projects with other programming languages,
maybe some of them will see the light of the FOSS world, maybe not, I did not
decided it yet.&lt;/p&gt;
&lt;p&gt;I do not keep my scope only in Android, because I love to learn and experiment a
lot, that means I also have to learn new programming languages and ways to do
things that can be done in one platform but not in another.&lt;/p&gt;
&lt;h1 id=&#34;husky-maintenance&#34;&gt;Husky maintenance&lt;/h1&gt;
&lt;p&gt;As you already know, I started maintaining &lt;a href=&#34;https://sr.ht/~captainepoch/husky&#34;&gt;Husky&lt;/a&gt;. The past year, even
with huge leaps of time, the project continued to receive (small) updates. Right
now I am working on the 1.1.0-beta1 version, which will come with &lt;a href=&#34;https://www.acra.ch&#34;&gt;ACRA&lt;/a&gt;
support for reporting random crashes.&lt;/p&gt;
&lt;p&gt;Husky reached the version 1.0.2. As you can see in its &lt;a href=&#34;https://git.sr.ht/~captainepoch/husky/tree/master/item/HISTORY&#34;&gt;HISTORY&lt;/a&gt;,
there were a few changes into the application. You can download this version
going to the &lt;a href=&#34;https://git.sr.ht/~captainepoch/husky/refs/1.0.2&#34;&gt;1.0.2 tag&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I also made a simple website, so the domain I have asigned to the project has
something to show (&lt;a href=&#34;https://husky.adol.pw&#34;&gt;husky.adol.pw&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Apart from adding new stuff to the current application I am also making a
refactor of the application itself to provide a more maintenable source code.
The first version of this will be the 2.0.0-alpha1. My intentions with this is
that, when you update from 1.X.Y to 2.0.0, everything is still working as
intended. Like I said in posts here before, patches will be accepted but new
features will not be likely implemented (except the necessary ones).&lt;/p&gt;
&lt;p&gt;I am also working of making my own F-Droid repository to serve the application
faster than using the official ones. &lt;a href=&#34;https://expired.mentality.rip/users/a1ba&#34;&gt;a1ba&lt;/a&gt; and &lt;a href=&#34;https://stereophonic.space/users/9hx0KgcUHMDJJz6mum&#34;&gt;sn0w&lt;/a&gt; gave me the
idea, so kudos to them!&lt;/p&gt;
&lt;h1 id=&#34;blogging&#34;&gt;Blogging&lt;/h1&gt;
&lt;p&gt;My blog consist, mostly, of status updates, which most of them do not provide
any insighful stuff to read about anything, really&amp;hellip; But they make me
accountable of what I say I am doing or will do.&lt;/p&gt;
&lt;p&gt;Last year I almost made the 12 months (I missed january, march, june and
december). This yeah I will make the 12 months, because it is something that
keeps me writing here.&lt;/p&gt;
&lt;p&gt;But this year I want to write more stuff here. Not only status, but also
opinions about things (like &lt;a href=&#34;https://adol.pw/2021/06/20/ethics-using-analytics/&#34;&gt;On ethics using
analytics&lt;/a&gt;), technical stuff related to hacking stuff,
research that I think it could be useful to someone&amp;hellip;&lt;/p&gt;
&lt;p&gt;I got a list of topics I collected and I hope to elaborate them through this
year, and I also hope for more ideas in the future!&lt;/p&gt;
&lt;h2 id=&#34;gemini-gopher&#34;&gt;Gemini? Gopher?&lt;/h2&gt;
&lt;p&gt;I see a lot of people jumping on the &lt;a href=&#34;https://gemini.circumlunar.space/&#34;&gt;Gemini&lt;/a&gt; ship nowadays.&lt;/p&gt;
&lt;p&gt;I personally do not use it, nor I use other similar things like
&lt;a href=&#34;https://en.wikipedia.org/wiki/Gopher_(protocol)&#34;&gt;Gopher&lt;/a&gt;, but I see why people are using it.&lt;/p&gt;
&lt;p&gt;I might do a PoC of my theme and this blog to put it in a Gemini capsule for
those who want to see my website through it. If it is worth it, I might get it
also in Gopher.&lt;/p&gt;
&lt;h1 id=&#34;other-stuff-in-life&#34;&gt;Other stuff in life&lt;/h1&gt;
&lt;p&gt;Since us, programmers, spend a lot of time sitting up, we tend to gain weight
and not caring for our health so much. This happened to me, not only for this.
This is why I started to do more excercise and start taking seriously this
matter. If you are in the same situation, I hope you find the will to start
exercising, little by little, to not get overwhelmed or hurt (this is important
if you did not do excercise in a long time).&lt;/p&gt;
&lt;p&gt;Another important part of this process is also taking care of your mental
health. It is &lt;em&gt;very important&lt;/em&gt; to take it seriously. If you need help, ask for
it, there are &lt;em&gt;a ton&lt;/em&gt; of people that can help you.&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;That would be all, see you in the next status!&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;This does not count as the january status post.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Maintaining my first project: part II</title>
      <link>https://adol.pw/2021/11/20/maintaining-first-project-part-ii/</link>
      <pubDate>Sat, 20 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/11/20/maintaining-first-project-part-ii/</guid>
      <description>&lt;p&gt;It has been two months since I wrote &lt;a href=&#34;https://adol.pw/2021/08/27/maintaining-first-project-part-i/&#34;&gt;Maintaining my first project: part
I&lt;/a&gt;, and a few things happened, others are planned.&lt;/p&gt;
&lt;h1 id=&#34;first-release&#34;&gt;First release&lt;/h1&gt;
&lt;p&gt;Monday 18th, 2021 was the date of the first release of this copy of
&lt;a href=&#34;https://git.sr.ht/~captainepoch/husky&#34;&gt;Husky&lt;/a&gt;, the &lt;a href=&#34;https://git.sr.ht/~captainepoch/husky/refs/1.0.2-beta1&#34;&gt;1.0.2-beta1&lt;/a&gt;. It is a beta because:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I do not have enough experience with the codebase to identify every single
thing that could cause a bug, or be a bug.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The old &lt;a href=&#34;https://git.mentality.rip/FWGS/Husky/issues&#34;&gt;issue tracker&lt;/a&gt; has a lot of bugs, some of them
reproducible, some of them without any indication whatsoever. This makes the
task of fixing stuff more dificult.&lt;/p&gt;
&lt;p&gt;I am fixing what I find and can reproduce right now.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I expect to use the application and find issues that can be fixed, and also, if
any new user wants to test the application, I gladly accept bug reports. You
have the &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man/contributing.md&#34;&gt;Husky contributing guide&lt;/a&gt; at your disposal.&lt;/p&gt;
&lt;h1 id=&#34;cicd&#34;&gt;CI/CD&lt;/h1&gt;
&lt;p&gt;I do not plan to add a CI/CD to the project. The reason is that I do not
generate versions for each single commit, and I am more than comfortable
releasing versions to test and report issues.&lt;/p&gt;
&lt;p&gt;However, I might add again &lt;a href=&#34;https://fastlane.tools/&#34;&gt;&lt;code&gt;fastlane&lt;/code&gt;&lt;/a&gt; support in order to make it
easy for those who want to generate their own version using a CI/CD. This will
be all documented in the &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man/building.md&#34;&gt;Husky building guide&lt;/a&gt;, which will be
written any time soon.&lt;/p&gt;
&lt;h1 id=&#34;refactoring-the-application&#34;&gt;Refactoring the application&lt;/h1&gt;
&lt;p&gt;I intend to, eventually, rewrite the internal architecture of the application
following a Clean architecture + MVVM approach in order to improve
maintainability of the code. Also, the application will be single-Activity.&lt;/p&gt;
&lt;p&gt;My idea is to port everything that Husky is able to do right now, and then,
start adding features like moderation tools, for example. This, as you might
imagine, will require &lt;em&gt;a lot&lt;/em&gt; of testing.&lt;/p&gt;
&lt;p&gt;One of the most expected features, which is real-time streaming, will be added
too, I am not forgetting about those users!&lt;/p&gt;
&lt;h2 id=&#34;mergin-from-tusky&#34;&gt;Mergin from Tusky&lt;/h2&gt;
&lt;p&gt;The refactor will make almost imposible to merge anything from Tusky, if needed,
so changes, bugfixes and features will have to be manually ported. This is a
tech debt I am more than comfortable assuming.&lt;/p&gt;
&lt;h2 id=&#34;translations&#34;&gt;Translations&lt;/h2&gt;
&lt;p&gt;The application, right now, has two sets of translations: those from Tusky, and
the specific ones for Husky. Since I do not intend to merge more from Tusky,
both will be merged in only one set of &lt;code&gt;strings.xml&lt;/code&gt; (in all languages).&lt;/p&gt;
&lt;p&gt;This will not only make easier to track translations, but also, it will remove
the &lt;code&gt;husky&lt;/code&gt; folder, which means one less flavor config, which means less time
for Gradle to make its thing compiling the app. It is a silly thing, but it will
be done in time (because there are &lt;em&gt;a lot&lt;/em&gt; of strings).&lt;/p&gt;
&lt;h1 id=&#34;sending-patches&#34;&gt;Sending patches&lt;/h1&gt;
&lt;p&gt;Patches are welcome if they fix bugs. As stated in the contributing guide, this
workflow will be done by email.&lt;/p&gt;
&lt;p&gt;Because the application will suffer a huge refactor over time, new features will
be added in the future, for now, porting the current ones and fixing bugs are
high-priority tasks (in fact, I started the refactor already).&lt;/p&gt;
&lt;p&gt;I will make sure that new versions with bugfixes still work while I make the
refactor, so I can still release new versions.&lt;/p&gt;
&lt;h1 id=&#34;man-this-is-a-lot&#34;&gt;Man, this is a lot!&lt;/h1&gt;
&lt;p&gt;There is a lot of things to be done and a few of them made. I still do not have
a roadmap of what I would like to acomplish, for example. The refactor requires
a huge plannification, because it will break things and testing is a must-do
here.&lt;/p&gt;
&lt;p&gt;Still, I am happy to contribute to the community somehow. I have been wanting to
do this for a long time and I never steped up to do it, until now.&lt;/p&gt;
&lt;p&gt;Oh, and &lt;a href=&#34;https://lists.sr.ht/~captainepoch/husky-announce/%3C20211120183955.pp77pyp7nfvefvmt%40MacBook-Pro-de-Adolfo.local%3E&#34;&gt;Husky 1.0.2-beta2&lt;/a&gt; has released today!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, November 2021</title>
      <link>https://adol.pw/2021/11/15/status-nov-2021/</link>
      <pubDate>Mon, 15 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/11/15/status-nov-2021/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;Another month in 2021, another status message!&lt;/p&gt;
&lt;p&gt;After a month of hiatus and another stuff in real life I started working again
in Husky. I made a few commits this weekend, nothing really important, but I
started planning the refactor I want to make in the application. More will come
in future posts, because this is a huge thing to make and I want to document
everything as a diary to write my experiences.&lt;/p&gt;
&lt;p&gt;Also, next week I will publish the second part of my first time maintaining a
project (it is a draft now, you can look for it at
&lt;a href=&#34;https://adol.pw/drafts&#34;&gt;adol.pw/drafts&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In the meantime, I am also making another project from scratch (another Android
application), for another thing. I will publish an alpha as soon as I have make
a couple of things in it and, from there, I will plan what features to add. More
in the future, maybe 2022, we will see. Of course, it will be FOSS and available
at &lt;a href=&#34;https://sr.ht&#34;&gt;sr.ht&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Outside of the programming world I planned to publish more stuff in the blog,
both technical and non-technical stuff. A few ideas are drafts now (some might
be deleted, some might not), and I am always looking for more to do.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, October 2021</title>
      <link>https://adol.pw/2021/10/16/status-oct-2021/</link>
      <pubDate>Sat, 16 Oct 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/10/16/status-oct-2021/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This month has not been one in which a lot of things happened.&lt;/p&gt;
&lt;p&gt;I plan to release the first beta version of Husky this weekend. I did a couple
of fixes, and I have to polish a bit how I am going to release the betas over
the stable versions, using the same package name or a different one.&lt;/p&gt;
&lt;p&gt;The second approach presents the problem that there is not any export-and-import
functions yet in Husky to port settings from the beta to the stable version, so
it might be a burden to the user to change between them. On the other side, if I
use the same package name, an user cannot go back to a stable version from a
newer beta version, so the user must setup the application from scratch again.&lt;/p&gt;
&lt;p&gt;If you read this and have any comment, please drop an email at
&lt;a href=&#34;mailto:~captainepoch/husky-devel@lists.sr.ht&#34;&gt;lists.sr.ht/~captainepoch/husky-devel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I am also redacting the second part of me being a maintainer of a project
(altough I would like to get more time for the project), and it will be
published next week, along a couple of things more.&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, September 2021</title>
      <link>https://adol.pw/2021/09/15/status-sep-2021/</link>
      <pubDate>Wed, 15 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/09/15/status-sep-2021/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This month have a little bit busy with real life, so there is not much to put in
a status update.&lt;/p&gt;
&lt;p&gt;As I announced in august (see &lt;a href=&#34;https://adol.pw/2021/08/27/maintaining-first-project-part-i/&#34;&gt;Maintaining my first project: part
I&lt;/a&gt;) I started maintaining Husky, the Pleroma
client.&lt;/p&gt;
&lt;p&gt;Less than two weeks I pushed my first fix for Husky: fixing the video player. It
was really easy, only I had to use &lt;a href=&#34;https://developer.android.com/guide/topics/media/exoplaye&#34;&gt;ExoPlayer&lt;/a&gt; and every video is now
playable. I have to take a look to a thing to see if I can improve it, but
nevertheless, it works now.&lt;/p&gt;
&lt;p&gt;I want to use this small moment to tell you that this is my first real
contribution to a Free Software project (even I am maintaining it), but it feels
really good to be able to do this kind of stuff. I hope to make Husky a client
that everyone can enjoy, with better performance and more features!&lt;/p&gt;
&lt;p&gt;There is not a version released because I want to put more things
before releasing a new version, but you can get updates subscribing to the
mailist &lt;a href=&#34;https://lists.sr.ht/~captainepoch/husky-announce&#34;&gt;lists.sr.ht/~captainepoch/husky-announce&lt;/a&gt; (even not
being a Sourcehut user, you can).&lt;/p&gt;
&lt;p&gt;An update related to this blog: I am going to start making posts in english and
spanish. Hugo supports multi-language blogs and I intend to take the oportunity
to make this blog in both languages.&lt;/p&gt;
&lt;p&gt;In the non-software development world, I started playing Minecraft again. I
&lt;a href=&#34;https://libremedia.video/videos/watch/4d4f6e8d-5d71-4d3f-94d9-5c2f19c64bc3&#34;&gt;even uploaded a video of me playing&lt;/a&gt; (not voice, though). Who
knows what I am going to upload next time&amp;hellip;&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Maintaining my first project: part I</title>
      <link>https://adol.pw/2021/08/27/maintaining-first-project-part-i/</link>
      <pubDate>Fri, 27 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/08/27/maintaining-first-project-part-i/</guid>
      <description>&lt;p&gt;Since I started using Pleroma I used &lt;a href=&#34;https://git.mentality.rip/FWGS/Husky&#34;&gt;Husky&lt;/a&gt; to see and post stuff. But
the application is not perfect, and it has some bugs (some of them very
annoying). Given that I worked as an Android developer for the past two years, I
think I can maintain the project.&lt;/p&gt;
&lt;p&gt;But&amp;hellip; This is also my first time maintaining a project in the Free and Open
Source Software community.&lt;/p&gt;
&lt;h1 id=&#34;asking-the-author-to-maintain-the-project&#34;&gt;Asking the author to maintain the project&lt;/h1&gt;
&lt;p&gt;The first thing I did before opening the project at Sourcehut was to ask the
&lt;a href=&#34;https://expired.mentality.rip/users/a1batross&#34;&gt;actual maintainer&lt;/a&gt; for his permission to &amp;ldquo;take over&amp;rdquo; the project. I
also told him that the project will be hosted at Sourcehut.&lt;/p&gt;
&lt;p&gt;From here, I want to thank him for letting me even keep the name of the
application. I really appreciate it!&lt;/p&gt;
&lt;h1 id=&#34;link-to-the-project&#34;&gt;Link to the project&lt;/h1&gt;
&lt;p&gt;The project (including the source code and the mailists) is at
&lt;a href=&#34;https://sr.ht/~captainepoch/husky/&#34;&gt;sr.ht/~captainepoch/husky&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;getting-started&#34;&gt;Getting started&lt;/h1&gt;
&lt;p&gt;First of all, I had to know the license of the project. Lucky me it is the &lt;a href=&#34;https://www.gnu.org/licenses/gpl-3.0.txt&#34;&gt;GNU
GPL v3&lt;/a&gt;, so I do know the license and the terms of it. The new code will
be under the same license given that I want to keep Husky as a Free Software
project.&lt;/p&gt;
&lt;p&gt;Since there is a lot of work to do in the application, I feel that some of the
changes may be a derivative work from the original, others may be not. I
would really want to remove the &amp;ldquo;This file is a part of Tusky.&amp;rdquo; in the license
notice for the derivative work, since it would not be from that project anymore,
but I am not sure I can do it.&lt;/p&gt;
&lt;p&gt;If anyone has any knowledge about if I could do that, please send me an email
(you have my contact info at &lt;a href=&#34;https://adol.pw/contact&#34;&gt;adol.pw/contact&lt;/a&gt;). If you want to
have this conversation at a public space, send an email to
&lt;a href=&#34;mailto:~captainepoch/husky-devel@lists.sr.ht&#34;&gt;lists.sr.ht/~captainepoch/husky-devel&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;documentation&#34;&gt;Documentation&lt;/h1&gt;
&lt;p&gt;Every project has a minimum of documentation in case people want to start
hacking or building the project. I started to make some of it today.&lt;/p&gt;
&lt;h2 id=&#34;general-info&#34;&gt;General info&lt;/h2&gt;
&lt;p&gt;This is the &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man&#34;&gt;Husky doc.&lt;/a&gt; website. There is some basic
information on the project, and more will be added in time.&lt;/p&gt;
&lt;h2 id=&#34;setting-up-the-contributing-guide&#34;&gt;Setting up the &amp;lsquo;Contributing&amp;rsquo; guide&lt;/h2&gt;
&lt;p&gt;To get contributions in a standard way a maintainer should have a &amp;ldquo;Contributing&amp;rdquo;
section in the documentation of the project. Today I did the first version of
this guide for Husky and you can see it at &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man/contributing.md&#34;&gt;Contributing to
Husky&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;setting-up-the-building-guide&#34;&gt;Setting up the &amp;lsquo;Building&amp;rsquo; guide&lt;/h2&gt;
&lt;p&gt;At this time, as it says at &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man/building.md&#34;&gt;Building Husky&lt;/a&gt; this is not
ready at this very moment. It will be, so stay tunned!&lt;/p&gt;
&lt;h1 id=&#34;releases&#34;&gt;Releases&lt;/h1&gt;
&lt;p&gt;My intention is to release a first version of the project as soon as possible.&lt;/p&gt;
&lt;p&gt;I have to figure out how to put it on F-Droid in the future, because &lt;a href=&#34;https://f-droid.org/es/packages/su.xash.husky/&#34;&gt;there is a
Husky release already&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;-and-this-is-just-the-beginning&#34;&gt;&amp;hellip; and this is just the beginning&lt;/h1&gt;
&lt;p&gt;For the moment there is not much done in the project.&lt;/p&gt;
&lt;p&gt;I suggest you to subscribe to the mailists of the project (you can find the
information at &lt;a href=&#34;https://man.sr.ht/~captainepoch/husky-man/contributing.md#mailists&#34;&gt;&lt;em&gt;Mailists&lt;/em&gt;&lt;/a&gt;). The communication will
be done there. There is not an official Pleroma account in the fediverse for the
project at this very moment.&lt;/p&gt;
&lt;p&gt;I will be making more posts of this journey. This is the first time that I
contribute to the Free Software community, and everything is new for me. My
intention is to tell my experience along tips that help me to manage everything
in the best possible way.&lt;/p&gt;
&lt;p&gt;See you on Part II!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, August 2021</title>
      <link>https://adol.pw/2021/08/17/status-aug-2021/</link>
      <pubDate>Tue, 17 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/08/17/status-aug-2021/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This past month has been a series of decissions that lead me here, today, 17th
august.&lt;/p&gt;
&lt;p&gt;There are few changes in project-related topics. I thought of getting started
maintainig &lt;a href=&#34;https://git.mentality.rip/FWGS/Husky&#34;&gt;Husky&lt;/a&gt;. For those who use Pleroma you already know what
it is. The maintainer has been inactive for a few months, and after asking him
if I could take the project, he said I can. So, in the comming days/weeks the
project will be rescued. I know there are a lot of people flying to Misskey, but
for those who still use Pleroma&amp;hellip;&lt;/p&gt;
&lt;p&gt;The project will be hosted at &lt;a href=&#34;https://sourcehut.org&#34;&gt;Sourcehut&lt;/a&gt;. There is a project created
already at &lt;a href=&#34;https://sr.ht/~captainepoch/husky/&#34;&gt;sr.ht/~captainepoch/husky&lt;/a&gt;. The project, repositories
and mailists are unlisted because I still have to migrate the actual code,
define the contribute guideline, set permissions in the mailist&amp;hellip; Well, I have
to start the project, so I hope to have it all by the end of the week. I will
write an email to the &lt;a href=&#34;https://lists.sr.ht/~captainepoch/husky-announce&#34;&gt;husky-announce&lt;/a&gt; soon with something
like a roadmap. Patches will be accepted soon, stay tuned to the mailists.&lt;/p&gt;
&lt;p&gt;This is the &lt;a href=&#34;https://lists.sr.ht/~captainepoch/husky-announce/%3C20210817121507.x6dmvulwttazgakt%40MacBook-Pro-de-Adolfo.local%3E&#34;&gt;announcement email&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I will also see how to put the new application at &lt;a href=&#34;https://f-droid.org/&#34;&gt;F-Droid&lt;/a&gt;, so you can
download and install it when it is ready for a first version.&lt;/p&gt;
&lt;p&gt;I also setup &lt;a href=&#34;https://neomutt.org/&#34;&gt;neomutt&lt;/a&gt; with &lt;a href=&#34;https://isync.sourceforge.io/mbsync.html&#34;&gt;mbsync&lt;/a&gt; and &lt;a href=&#34;https://marlam.de/msmtp/&#34;&gt;msmtp&lt;/a&gt;. I
tried &lt;a href=&#34;https://aerc-mail.org/&#34;&gt;aerc&lt;/a&gt;, but it lacks some features and I already had the
configuration files for &lt;a href=&#34;http://www.mutt.org/&#34;&gt;mutt&lt;/a&gt;, so I only had to change a few lines. I
still have a couple of things to setup, but they are not important right now.&lt;/p&gt;
&lt;p&gt;I still plan to use aerc in the future if it still exists.&lt;/p&gt;
&lt;p&gt;My &lt;a href=&#34;https://adol.pw/contact&#34;&gt;contact page&lt;/a&gt; has been updated too. I changed my GPG key for a
better one. If you have already the old one in your keyring, delete it and
import the new one!&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, July 2021</title>
      <link>https://adol.pw/2021/07/15/status-july-2021/</link>
      <pubDate>Thu, 15 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/07/15/status-july-2021/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;It is time to another montly-more-like-bi-monthly status update!&lt;/p&gt;
&lt;p&gt;There was not any really important stuff going on in my life to make updates
right now. I am working in a couple of things in my spare time (which is very
minimal) but nothing ready for you to see.&lt;/p&gt;
&lt;p&gt;Following the post &lt;a href=&#34;https://adol.pw/2021/06/20/ethics-using-analytics/&#34;&gt;On ethics using analytics&lt;/a&gt;, I started
working on an Android project to try and implement the same points I made. The
idea is to put &lt;a href=&#34;https://matomo.org/&#34;&gt;Matomo&lt;/a&gt; and &lt;a href=&#34;https://github.com/ACRA/acra&#34;&gt;ACRA&lt;/a&gt; inside the application, so if
you are working on a project with those technologies, you can put analytics in
an ethical way for you and your users. The project will be open for everyone to
see when the first version is ready!&lt;/p&gt;
&lt;p&gt;Regarding this blog, I also added a &lt;a href=&#34;https://adol.pw/drafts&#34;&gt;drafts&lt;/a&gt; section, so if you are
curious to see what I am writting or I put something to review, you can look at
it and its progress. For now it has a couple of things I want to write while I
do the project I mentioned before, but I also put down some ideas to write in
the future in my to-write list. I also want to make a review of all of my posts
to put a common format before the list grows any longer, so if you are
subscribed to my &lt;a href=&#34;https://adol.pw/index.xml&#34;&gt;RSS&lt;/a&gt;, I apologize beforehand for the flood in your RSS
reader!&lt;/p&gt;
&lt;p&gt;Regarding life in general, and I encourage this for you too, I started taking
healthy habits of life, like getting up of the chair and starting exercising for
1 hour (almost) every day, combined with healthy food, I am expecting to loose
some weight and improve my health. I also started playing the guitar again,
which is something I wanted to do for the last couple of years!&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>On ethics using analytics</title>
      <link>https://adol.pw/2021/06/20/ethics-using-analytics/</link>
      <pubDate>Sun, 20 Jun 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/06/20/ethics-using-analytics/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;DISCLAIMER&lt;/strong&gt;: How analytics can be used for good is based on my personal
observations in the real world and in the projects I worked where I had to put
them into the software.&lt;/p&gt;
&lt;p&gt;If you think this can be improved or want to start a conversation about this,
send an email to my public inbox, you have the link down bellow!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The first thing I did when I started working as a developer was to fix some
analytics the project had badly put (meaning tracking was not accurate). I
fixed them, and then I started doing more interesting stuff.&lt;/p&gt;
&lt;p&gt;Later on I had to go over analytics in another project, and then in another,
and then help a couple of workmates adding them in a project I did from
scratch. You can guess what we were using&amp;hellip; Of course, the mighty Google&amp;rsquo;s
&lt;a href=&#34;https://firebase.google.com/&#34;&gt;Firebase&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Then I looked into Free Software/Open Source projects to see if they were using
analytics, and no, they were not. But a few of them use ACRA for having a live
error reporting system inside the application (e.g. F-Droid, by email). Most of
those projects rely in users reporting issues, but normally the description of
those issues are so vague developers do not know what to do.&lt;/p&gt;
&lt;h1 id=&#34;having-analytics-in-a-project&#34;&gt;Having analytics in a project&lt;/h1&gt;
&lt;p&gt;I do not think that having analytics in a project is a bad thing. You cannot
always rely in users to get reports of bugs or unexpected crashes with a
full report on how to reproduce the bug. Of course, there are a lot of users
willingly to do so, but it is not the majority.&lt;/p&gt;
&lt;p&gt;The problem is how the data is recollected, used and not deleted once it
fulfilled its purpose. Most of the companies do not care about this, the data
is there and it is not normally deleted after using it.&lt;/p&gt;
&lt;p&gt;For example, &lt;em&gt;Firebase&lt;/em&gt; is an excelent tool. It provides a really insight when
you need to know how an user uses your application. But it is made by Google,
with all of the implications it has.&lt;/p&gt;
&lt;h1 id=&#34;knowing-what-platforms-really-do&#34;&gt;Knowing what platforms really do&lt;/h1&gt;
&lt;p&gt;We do not really know what all the companies that provide analytics do with our
data. You can read a ton of &lt;em&gt;Privacy Policy&lt;/em&gt; and &lt;em&gt;Terms of Use&lt;/em&gt; links, but in
the end, we do not really know.&lt;/p&gt;
&lt;p&gt;The only way to know how the data is stored, used and deleted is if you
self-host your own instance of this kind of software.&lt;/p&gt;
&lt;h1 id=&#34;privacy-first&#34;&gt;Privacy first&lt;/h1&gt;
&lt;p&gt;You should have in mind that &lt;strong&gt;privacy should come first&lt;/strong&gt; in anything related
to this topic. I cover a couple of points in the next section related to privacy
for the users.&lt;/p&gt;
&lt;h1 id=&#34;analytics-used-for-good&#34;&gt;Analytics used for good&lt;/h1&gt;
&lt;p&gt;For development purposes analytics can be really insightful. You can then
release the production version of your software without them, or opted-out by
default (if you can pay a server and scale the backend to suit your needs to
allow opting in).&lt;/p&gt;
&lt;p&gt;There are a few points that I think it could make analytics more ethical
than they are perceived right now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Opt-in by default.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let the user choose what to do in that matter. Or remove analytics from the
project.&lt;/p&gt;
&lt;p&gt;Or, if you can, make two versions: one with analytics (opted-out by default)
and another without anything related to analytics at all.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Randomize UUIDs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When you are implementing analytics, one of the things you have to do is to
asign an UUID to an user. It could be random or you can make it manually
with your own parameters. In each version of your software, you should
randomize it, so the same user does not have the same UUID.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use a backend that is Free Software/Open Source software.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are great software that can be user for this purpose. You have to
self-host it or you might want to look at price plans instead:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://matomo.org/&#34;&gt;Matomo&lt;/a&gt;: it is a web application that it is mostly used for
websites, but it can be used in a lot of programming languages. Its main
use is being a substitute of Firebase Analytics, but it can also catch
exceptions in Java software (for example, it can be used for Android
like Firebase Analytics and Firebase Crashlytics).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ACRA/acra&#34;&gt;ACRA&lt;/a&gt;: it is an error reporting tool for Android. It catches
exceptions that are not handled by a &lt;code&gt;try-catch&lt;/code&gt; block and allows you to
report them by email, sending a post to a website, and a couple of
options more.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://sentry.io/&#34;&gt;Sentry&lt;/a&gt;: it is a realtime monitoring software for your
applications. You can see errors and where they are produced, so you can
fix them easily. It is mandatory to point out that &lt;a href=&#34;https://github.com/getsentry/sentry/blob/e80836884ca86abfc6523695485ea4a7694c6fa1/LICENSE#L28&#34;&gt;Sentry is not Open
Source software&lt;/a&gt;, but the code is open in its &lt;a href=&#34;https://github.com/getsentry/sentry&#34;&gt;GitHub
repository&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Specify how you use the data recollected&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Elaborate a document where you put your intentions with the data, how you
recollect it, what you recollect, and when you delete the old data you do
not need anymore.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Always delete old data&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Anything that can identify an user &lt;em&gt;must&lt;/em&gt; be removed when it is not useful
anymore or in a closed timespan, e.g. 90 days.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Put the source code of the project in a public repository&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Whether you prefer to use &lt;a href=&#34;https://sourcehut.org/&#34;&gt;SourceHut&lt;/a&gt; or &lt;a href=&#34;https://github.com&#34;&gt;GitHub&lt;/a&gt;, put the
code to the public eye. Be clear what
classes/methods/functions/however-is-called-in-your-preferred-language are
used for analytics purposes.&lt;/p&gt;
&lt;p&gt;In a way, having your source code in the open also allow users to see any
changes you make in that part of the code.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;This is something that I could get knowledge after working as an Android
developer for almost two years and see how analytics are implemented in the
projects I worked on.&lt;/p&gt;
&lt;p&gt;I really think, if correctly used, analytics can be a good thing, but we have to
be very careful about how we use them and not get addicted to them. Software
also needs careful implementations and &lt;strong&gt;testing&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: as pointed out by the user &lt;a href=&#34;https://lobste.rs/u/icy&#34;&gt;icy&lt;/a&gt; in &lt;a href=&#34;https://lobste.rs/s/u5uvkw/on_ethics_using_analytics#c_5nzlgc&#34;&gt;this
comment&lt;/a&gt;, &lt;a href=&#34;https://github.com/getsentry/sentry/blob/e80836884ca86abfc6523695485ea4a7694c6fa1/LICENSE#L28&#34;&gt;Sentry is not really Open Source
software&lt;/a&gt; at the time this post has been written. I updated the
reference accordingly. Thank you very much!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, April 2021</title>
      <link>https://adol.pw/2021/04/12/status-april-2021/</link>
      <pubDate>Mon, 12 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/04/12/status-april-2021/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;I have been thinking if writing this status update was worth it, because I was
lazy this past two months and I did not do anything worth mentioning here.&lt;/p&gt;
&lt;p&gt;After reading &lt;a href=&#34;https://frostming.com/2021/01-22/introducing-pdm/&#34;&gt;this article about Python and virtualenvs&lt;/a&gt;, I have been
trying another way to isolate my projects&amp;rsquo; dependencies. I tried the combination
&lt;code&gt;pyenv + virtualenv&lt;/code&gt;, but I did not know about the PEP standards defined into
Python itself. So I also started to take a look at &lt;a href=&#34;https://pdm.fming.dev/&#34;&gt;&lt;code&gt;pdm&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Outside of the development world, it is been more than two months since I
&lt;a href=&#34;https://adol.pw/2021/01/31/quitting-whatsapp/&#34;&gt;quitted WhatsApp&lt;/a&gt;. Nothing really changed, I did not use
that much at that point of my life, so I only had a couple of days of &amp;ldquo;anxiety&amp;rdquo;
thinking about how I will get in touch with some people, but hey, email is still
there, so it was not a problem.&lt;/p&gt;
&lt;p&gt;Due to bandwith problems in the NixNet&amp;rsquo;s Pleroma instance, I felt obligated to
go to another Pleroma instance to stay at the Fediverse. For now on, you can
find me at &lt;a href=&#34;https://stereophonic.space/captainepoch&#34;&gt;stereophonic.space/captainepoch&lt;/a&gt;. During my time at NixNet,
I want to thank &lt;a href=&#34;https://secluded.site&#34;&gt;Amolith&lt;/a&gt; for allowing me to stay there with all the
people I met. He is an amazing guy and an amazing sysadmin!&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, February 2021</title>
      <link>https://adol.pw/2021/02/15/status-feb-2021/</link>
      <pubDate>Mon, 15 Feb 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/02/15/status-feb-2021/</guid>
      <description>&lt;p&gt;Howdy, y&amp;rsquo;all!&lt;/p&gt;
&lt;p&gt;December and january did not deserve a status update. I did not do anything that
was worth mentioning, and also, I prefered to enjoy more time not looking at
another screen after work.&lt;/p&gt;
&lt;p&gt;In the middle of january I started to feel some preasure about working in a side
project for Android, because I believe that working on a project is a great way
of learning new stuff (also, you have a project on your own!). So I started to
look for ideas and I found one. For now I have only the skeleton, but I hope to
release an alpha before summer (because I suck &lt;em&gt;badly&lt;/em&gt; at UI/UX). This project
will be open source at some point, but not during the initial development phase.&lt;/p&gt;
&lt;p&gt;This project is not only for learning new stuff, but also for improving what I
already now. &lt;em&gt;There is always room for improvement&lt;/em&gt;, as a rule for life.&lt;/p&gt;
&lt;p&gt;In the mean time, I am also waking my lazy ass up to start working out somehow.
With coronavirus out there, I do not want to risk anything, so I am doing it at
home. Since I spend a lot of time sit in a chair, I think it is necessary to
move the body a bit to stay healthy.&lt;/p&gt;
&lt;p&gt;This year I also thought about making, at least, 12 blogposts. I am behind by
one (january status), but I will compensate through the year. The idea is not to
do only statuses, but also to write about topics I find interesting enough (or
feel comfortable enough to talk publicly and in english). Maybe I start writting
about Android development, or Go development, or about privacy topics, I do not
know, but something I feel is worth writting.&lt;/p&gt;
&lt;p&gt;I said the same last year, but for unrelated some reasons, I was not able to
acomplish that milestone.&lt;/p&gt;
&lt;p&gt;I am also planning to publish my website in spanish too. I have a few readers in
my life that I would like to share this, but do not know any english at all, so
writting the post in both languages would be a nice feature. It will be done by
this year (I hope), and I intend to keep it always in both languages (but I will
try to write everything first in english, so I can keep improving my knowledge
and use of the language).&lt;/p&gt;
&lt;p&gt;That would be all, see you in the next status!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Quitting WhatsApp</title>
      <link>https://adol.pw/2021/01/31/quitting-whatsapp/</link>
      <pubDate>Sun, 31 Jan 2021 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2021/01/31/quitting-whatsapp/</guid>
      <description>&lt;p&gt;Today, &lt;em&gt;January 31st, 2021&lt;/em&gt;, I deleted my WhatsApp account.&lt;/p&gt;





&lt;figure&gt;
    
        &lt;img src=&#34;https://adol.pw/2021/01/31/quitting-whatsapp/images/Delete_WhatsApp.png&#34;/&gt; &lt;/figure&gt;

&lt;p&gt;I have been an user of this platform since, approximately, 10 years. The first
time I installed WhatsApp was with my Samsung Galaxy Spica running Android 2.1.
By that time, WhatsApp was an application not ran by Facebook. It cost 0.89€ in
the Apple AppStore and, for Android, was free (although, technically, the
service was 0.89€/year in Android).&lt;/p&gt;
&lt;p&gt;I only had to paid once, and I paid gladly, because WhatsApp was a service I was
using with a lot of people.&lt;/p&gt;
&lt;p&gt;By that time, also, WhatsApp was not encrypted itself. Only the endpoints of the
API were encrypted (SSL connections), but not the content users sent through the
service. At that time, I really did not care.&lt;/p&gt;
&lt;p&gt;Then, I started to worry a bit about my privacy, each day, a bit more. Then, I
got where I stand today.&lt;/p&gt;
&lt;p&gt;WhatsApp was bought by Facebook. The day news confirmed that, I deleted my
account. The next day, I recreated it because, well, I thought &amp;ldquo;let&amp;rsquo;s give
Facebook an oportunity&amp;rdquo;. I do not regret that day nor the decision I made. But I
regret to keep using it until today.&lt;/p&gt;
&lt;p&gt;It would not affect EU users. But that is not the point. The point is: Facebook
is doing it, no matter what it says in a blogpost, in a white paper, whatever.&lt;/p&gt;
&lt;p&gt;As I pointed out in &lt;a href=&#34;https://nixnet.social/notice/A33RoPLyMjhcw8zWoC&#34;&gt;this toot&lt;/a&gt;, in the WhatsApp Encryption White Paper,
it suffered a change about the private key. In the original tweet (linked in the
toot), another user says that FB still do not have to know about the private key
of the user. Still, I do not trust it.&lt;/p&gt;
&lt;p&gt;I sent a diffusion message to my contacts notifying them about my decission. I
received mixed responses, from &amp;ldquo;Yeah man, we talk in &amp;lt;insert here another
platform&amp;gt;&amp;rdquo; to &amp;ldquo;Facebook is just formalizing what it has been done until today&amp;rdquo;
to &amp;ldquo;Give me your email, I do nt plan to leave WhatsApp but I still want to talk
with you!&amp;rdquo;. It is alright, I did not thing for a moment that the 100% of my
contacts would leave.&lt;/p&gt;
&lt;p&gt;We have better alternatives. The best way would be using XMPP + OMEMO, or
Signal. Telegram is something over WhatsApp, but tha is it (the server is closed
source, so we cannot know what happens inside of it, for better or worse).&lt;/p&gt;
&lt;p&gt;Anyway, by the time you read through here, it is done. I do not have a WhatsApp
account anymore, and I doubt I am going to get one again.&lt;/p&gt;
&lt;p&gt;I just do not trust Facebook. &lt;strong&gt;At all&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&#34;https://seirdy.one/2021/01/27/whatsapp-and-the-domestication-of-users.html&#34;&gt;WhatsApp and the domestication of users&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://secluded.site/a-mostly-google-free-android/&#34;&gt;A (Mostly) Google-Free Android&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.paritybit.ca/blog/why-irc-is-still-good&#34;&gt;Why IRC is Still Good in $CURRENT_YEAR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you think you have got nothing to hide, you need to read this: &lt;a href=&#34;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=998565&#34;&gt;&amp;lsquo;I&amp;rsquo;ve Got
Nothing to Hide&amp;rsquo; and Other Misunderstandings of Privacy&lt;/a&gt; (press in
&lt;em&gt;Download this paper&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.europarl.europa.eu/doceo/document/P-9-2021-000347_EN.html&#34;&gt;EU Parliamentary questions: European data protection regulations and legal
certainty on privacy safeguards offered by WhatsApp to EU
citizens&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.europarl.europa.eu/doceo/document/P-9-2021-000434_EN.html&#34;&gt;EU Parliamentary questions: Safeguarding by Facebook of the privacy of European
users of WhatsApp&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Using go.mod for local packages</title>
      <link>https://adol.pw/2020/12/09/go-local-packages/</link>
      <pubDate>Wed, 09 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2020/12/09/go-local-packages/</guid>
      <description>&lt;p&gt;Golang provides the tools which enable the users to manage the dependencies of a
project using &lt;a href=&#34;https://golang.org/ref/mod&#34;&gt;mod&lt;/a&gt;. This allows one to host the dependencies
for each project individually but, more importantly, to select the version of
that dependency they wish to use.&lt;/p&gt;
&lt;p&gt;But the problem I faced these last two days was not that, but another. I wanted
to be able to host the code of my Go projects outside the &lt;code&gt;src&lt;/code&gt; folder inside
the &lt;code&gt;$GOPATH&lt;/code&gt;. Also, I wanted to be able to develop closed-source projects
without using the &lt;code&gt;$gitserver/captainepoch/project&lt;/code&gt; naming scheme.&lt;/p&gt;
&lt;p&gt;To be able to do that, first of all you need to create a folder (with the
name of your liking because it will be the root package. For this example, my
main package will be called &lt;code&gt;potato&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ go mod init potato
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And you get a bare modules file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;module potato
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go 1.15
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, let&amp;rsquo;s create a &lt;code&gt;config&lt;/code&gt; local package. The point of this is to be able to
use it locally without getting it from any repo. Create a folder, a .go file,
and a go.mod file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mkdir config &lt;span style=&#34;color:#666&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#007020&#34;&gt;cd&lt;/span&gt; config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ go init mod config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ touch config.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Inside the &lt;code&gt;config.go&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;package&lt;/span&gt; config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#06287e&#34;&gt;GetConfig&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	fmt.&lt;span style=&#34;color:#06287e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;GetConfig executed&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To be able to use this in the main package, you have to use the &lt;code&gt;replace&lt;/code&gt;
directive:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;module potato
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go 1.15
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;replace potato/config &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&amp;gt; ./config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the &lt;code&gt;main.go&lt;/code&gt; content:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;package&lt;/span&gt; main
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;potato/config&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#06287e&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	fmt.&lt;span style=&#34;color:#06287e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;Potato is life&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	config.&lt;span style=&#34;color:#06287e&#34;&gt;GetConfig&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see your modules file already changed when adding this to your main
package. However, if you do not see anything, you have to run the &lt;code&gt;tidy&lt;/code&gt;
command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ go mod tidy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you need to use some local package inside another local package, you have to
use replace but using &lt;code&gt;..&lt;/code&gt;: &lt;code&gt;replace potato/utils =&amp;gt; ../utils&lt;/code&gt; which allows you
to use a local package inside the project&amp;rsquo;s root inside another local package.
Also, you have to add the &lt;code&gt;replace&lt;/code&gt; in the root modules file, so Go knows where
to look at to find that local package.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be aware that this can cause circular dependencies&lt;/strong&gt; which is not something
good. So if you use this, use it with something &lt;em&gt;you know&lt;/em&gt; will not create any
circular dependency problem.&lt;/p&gt;
&lt;p&gt;I know this is far from being orthodox but sometimes this hack helps more than
other solutions.&lt;/p&gt;
&lt;p&gt;If you have any questions, please reach me at my NixNet account
&lt;a href=&#34;https://nixnet.social/@captainepoch&#34;&gt;captainepoch@nixnet.social&lt;/a&gt; (the mailist is WIP).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I want to thank &lt;a href=&#34;https://paritybit.ca&#34;&gt;jbauer&lt;/a&gt; and Tedster for the corrections of this post
:).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, November 2020</title>
      <link>https://adol.pw/2020/11/29/status-nov-2020/</link>
      <pubDate>Sun, 29 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2020/11/29/status-nov-2020/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;This month has been a normal one. I did not have many things to do so I pretty
much started working on organizing my stuff at home, so my room is not a mess.&lt;/p&gt;
&lt;p&gt;Apart from that, the most important thing that happened this month is the
announcement of Drew DeVault closing his Mastodon instance,
&lt;a href=&#34;https://cmpwn.com&#34;&gt;cmpwn.com&lt;/a&gt; forever (I do not know if he is going to be in another
Pleroma/Mastodon instance). I have an account there because I could not follow
him from my old &lt;a href=&#34;https://mastodon.social&#34;&gt;mastodon.social&lt;/a&gt; instance, and he offered me one
without hesitate. So, from here, I want to thank him for the time in the cmpwn
instance!&lt;/p&gt;
&lt;p&gt;Due to the closing of his instance, I migrated to a new one, property of
&lt;a href=&#34;https://nixnet.social/@amolith&#34;&gt;Amolith&lt;/a&gt;. The new one is hosted at the &lt;a href=&#34;https://nixnet.services/&#34;&gt;NixNet
Services&lt;/a&gt; offered by him. I barely exchanged words with him, but the few
times I talked with him he is an amazing person, so follow him at his account.
By the way, my new Fedi account is &lt;a href=&#34;https://nixnet.social/@captainepoch&#34;&gt;captainepoch@nixnet.social&lt;/a&gt;.
My old account is already locked and pointing to the new one, and soon to be
deleted. I might open all my toots from somewhere in the future, as an archive,
I do not know.&lt;/p&gt;
&lt;p&gt;Apart from that, I wanted to do a bit of stuff with Go, and one of the things I
wanted to make is to have local packages (like Java and Python). I know Go is
not designed to work like that, but in fact, it is possible to make them. I
somehow figured how with the help of &lt;a href=&#34;https://pleroma.envs.net/lyntsune&#34;&gt;lyntsune&lt;/a&gt;, and I might
write how it works (Go devs: I know Go is not designed for that, but sometimes,
people do not want to have a few Open Source projects, and the &lt;code&gt;$GOPATH&lt;/code&gt; way to
work is a damn mess).&lt;/p&gt;
&lt;p&gt;I will see you in the next status update!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, October 2020</title>
      <link>https://adol.pw/2020/10/18/status-oct-2020/</link>
      <pubDate>Sun, 18 Oct 2020 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2020/10/18/status-oct-2020/</guid>
      <description>&lt;p&gt;Hello there!&lt;/p&gt;
&lt;p&gt;This october has been a rather busy month. I have been making plans for unifying
all my websites into one (it is already done if you are reading this), an
Android project that I will talk about in future posts.&lt;/p&gt;
&lt;p&gt;The main thing of this post is that I do not have a subdomain anymore. From now
on, &lt;a href=&#34;https://adol.pw&#34;&gt;adol.pw&lt;/a&gt; will be my website (blog, contact section, license,
etc.). So, if you have my feed in your RSS reader, please point it to the new
link: &lt;a href=&#34;https://adol.pw/index.xml&#34;&gt;adol.pw/index.xml&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As you can see (if you ever visited my blog), I changed the theme again. I felt
the other I was using was not really good for my personal style, and I did some
changes in order of making it a bit modern. It is updated to use the latest
version of &lt;a href=&#34;https://gohugo.io&#34;&gt;hugo&lt;/a&gt; (0.76.5 as this post is published). The code of the
theme is at &lt;a href=&#34;https://git.sr.ht/~captainepoch/blogtheme&#34;&gt;git.sr.ht/~captainepoch/blogtheme&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The domain change, the theme and other stuff is thanks to a couple of friends,
one of them is an anon, but the other is &lt;a href=&#34;https://rmedgar.com/&#34;&gt;Rafa&lt;/a&gt;, who helped me
testing everything and giving me a couple of points for improving a couple of
things.&lt;/p&gt;
&lt;p&gt;Another thing I am trying to make is to write more. I only wrote a post a
month, and that is the status update, but I feel I can write more about other
topics (not necessarily engineering-specific, as It was intended from the start
of this blog and I never did it).&lt;/p&gt;
&lt;p&gt;I have been learning my way into the Android development world lately, not only
the basics but also in an architectural level. It is not an easy topic, as you
have a very limited amount of resources in a phone. I have been in contact with
a person called Gabor Varadi (aka &lt;a href=&#34;https://medium.com/@Zhuinden&#34;&gt;Zhuinden&lt;/a&gt;). I asked him
a lot of stuff (because he is really a good guy and explains the stuff I ask for
in a very concise and clear way). From here, I wanted to thank him very much
for his time and patience, and I hope to keep in touch with him for a long time!&lt;/p&gt;
&lt;p&gt;Along the lines of Android development, I am also making a little project I want
to open source as soon as I feel it is ready. Part of making it is to have a
base to get started making Android applications, but the other part is for
people to use it, modify it, even contribute to improve it.&lt;/p&gt;
&lt;p&gt;I am still looking for an email provider. Migadu or Mailbox are good, but they
do not meet my expectations. I do not discard the idea of self-host with OpenBSD
or Alpine Linux (if possible). If you know a new one, please, write to me at my
Mastodon account &lt;a href=&#34;https://nixnet.social/@captainepoch&#34;&gt;nixnet.social/@captainepoch&lt;/a&gt;. Also, if
that email provider meets
&lt;!-- raw HTML omitted --&gt;&lt;a href=&#34;https://drewdevault.com/2020/06/19/Mail-service-provider-recommendations.html&#34;&gt;Drew DeVault&amp;rsquo;s email criteria&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt;, please write
him an email at &lt;code&gt;sir (at) cmpwn (dot) com&lt;/code&gt;, he might not know it and want to
check it out for further recommendations.&lt;/p&gt;
&lt;p&gt;If I add reading comics, books, and watching TV shows and movies to this,
I have been a bit busy (more thinking than doing things, but in the end, I did
not stop).&lt;/p&gt;
&lt;p&gt;I will see you in the next status update!&lt;/p&gt;
&lt;p&gt;PS.: comments will be open in a public inbox as soon as I got an email address
with my subdomain.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://cmpwn.com/@sir/102452352875414214&#34;&gt;Drew&amp;rsquo;s Mastodon&lt;/a&gt; post about email recommendations.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Status update, September 2020</title>
      <link>https://adol.pw/2020/09/15/status-sep-2020/</link>
      <pubDate>Tue, 15 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2020/09/15/status-sep-2020/</guid>
      <description>&lt;p&gt;Howdy!&lt;/p&gt;
&lt;p&gt;The past month was a static one. It did not happen anything worth writing in a
blog post, nor did I something worth writing here.&lt;/p&gt;
&lt;p&gt;This month, however, happen to be one in which I got a new job as Android
developer. I like it, I am really comfortable in the environment, I am
learning new stuff I did not know before, so I am happy.&lt;/p&gt;
&lt;p&gt;This past two weeks I have been looking for contribute to an Open Source project
in my little spare time. It does not have to be a huge project, a small one
would be fine, and preferably, one I use every day and know how it works, so I
can be more comfortable going into without feeling overwhelmed. Even doing
bugfixing would be nice. I do not really contribute to Open Source, my commit
history on GitHub or my apperance on SourceHut&amp;rsquo;s mailists are almost null
(regarding patches). It is something I am still looking for doing, so I will
write here when it happens!&lt;/p&gt;
&lt;p&gt;At september 4rd Drew DeVault hosted an open conversation about the future of
SourceHut, and let us ask questions about everything he said (although most of
the questions went to the new billing conditions). As he said, he host another
one at septiember 16th, so if you are reading this and are an user of SourceHut,
I strongly recommend you to join it, it was really fun! And also It was an
oportunity to participate in the project which takes seriously the principle of
being open with the userbase.&lt;/p&gt;
&lt;p&gt;And that is all I have to talk this month, see you!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, July 2020</title>
      <link>https://adol.pw/2020/07/12/status-jul-2020/</link>
      <pubDate>Sun, 12 Jul 2020 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2020/07/12/status-jul-2020/</guid>
      <description>&lt;p&gt;Last month I was not available to make a status update. Because I did not have
anything to talk about, to be honest.&lt;/p&gt;
&lt;p&gt;During june I went doing some stuff I had in my big to-do list. The first
one was the new theme of the blog. I use &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; for generating this blog.
It is a static site. I was also using an outdated version of it, so I updated to
the latest one available at the moment of making the new theme (0.73.0), and now
everything is new! The theme is called &lt;code&gt;simple-style&lt;/code&gt;. The &lt;a href=&#34;https://github.com/yanlinlin82/simple-style/&#34;&gt;original
one&lt;/a&gt; is made by &lt;a href=&#34;https://github.com/yanlinlin82&#34;&gt;Linlin Yan&lt;/a&gt;. This one is
publised at &lt;a href=&#34;https://git.sr.ht/~captainepoch/simple-style&#34;&gt;git.sr.ht/~captainepoch/simple-style&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the &lt;a href=&#34;https://adol.pw/2020/05/status-may-2020/&#34;&gt;may 2020 status update&lt;/a&gt; I talked about an Android
architecture I was making. I deleted the whole project by mistake (I did not
have any copy of it), but I did not take it bad. In fact, I renew a few things
after a bit of research, and now I made another one with a better organization
of files and classes. I think I will be making a few technical articles about
why I choose the way I do things, but it is only in my mind right now. I am new
at this, and my experience making architectures is about zero (although I have
been working with a few ones to understand them). The whole project will be open
at some point, but for now, it is going to remaing closed.&lt;/p&gt;
&lt;p&gt;The other project I did something is &lt;a href=&#34;https://github.com/captainepoch/ServerProxy&#34;&gt;ServerProxy&lt;/a&gt;. It is an
Android library that, and I quote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ServerProxy is a Android library for creating proxy servers to serve files.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is used in DSub, an Android application to stream music from Subsonic
servers (or music servers with the Subsonic API implementation). I use it, and I
wanted to update the application a little bit, fix some bugs, and in general,
revamp the development of it. I already made the first change, which is changing
the library to something buildable with &lt;a href=&#34;https://jitpack.io/&#34;&gt;jitpack.io&lt;/a&gt;. You can take a
look at the builds logs at
&lt;a href=&#34;https://jitpack.io/#captainepoch/ServerProxy&#34;&gt;jitpack.io/#captainepoch/ServerProxy&lt;/a&gt;. The DSub
application will follow once I finish evaluating if it needs to be started from
scratch or it can be maintainable as it is.&lt;/p&gt;
&lt;p&gt;On more miscelaneous news, I started using &lt;a href=&#34;https://github.com/VSCodium/vscodium&#34;&gt;VSCodium&lt;/a&gt; as my main
editor. I used to use &lt;code&gt;emacs&lt;/code&gt;, but I spent more time setting it up than using it
as an editor, and right now, I need one easy to setup and ready to use as fast
as possible. I am going back to Emacs someday because I loved the experience
while using it, but when I have time to set it up properly.&lt;/p&gt;
&lt;p&gt;Also, I am moving from GitHub to git.sr.ht. I am still considering if
self-hosting an email service is worth it or not (I never did it, but I
self-host a lot of things right now and know the burden of it). When I have my
email with my own domain I can start contributing and such stuff using
&lt;a href=&#34;https://git-scm.com/docs/git-send-email&#34;&gt;git send-email&lt;/a&gt;. If you are new in that world, check Drew
DeVault&amp;rsquo;s &lt;a href=&#34;https://git-send-email.io/&#34;&gt;git-send-email.io&lt;/a&gt; for getting started.&lt;/p&gt;
&lt;p&gt;That is it for now. Thank you for reading this, and I hope you stay safe out
there. See you next month!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, May 2020</title>
      <link>https://adol.pw/2020/05/15/status-may-2020/</link>
      <pubDate>Fri, 15 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2020/05/15/status-may-2020/</guid>
      <description>&lt;p&gt;Welp&amp;hellip; Another month since my last status update. I published three small
opinion things here, which if you read, I hope you enjoyed it. I intend to keep
this blog about technical stuff I find important or for something I learnt by
fixing something&amp;hellip; I will try to keep politics off as much as possible.&lt;/p&gt;
&lt;p&gt;I planed a little revamp in the blog&amp;rsquo;s style. Updating Hugo seems to make
this theme broken, so I am going to modify another theme I found to match my
style and I hope to have it ready in a couple of weeks. I also intend to revamp
&lt;a href=&#34;https://adol.pw&#34;&gt;my personal website&lt;/a&gt;&amp;rsquo;s style, it is a bit old (and some pages
dissapeared because the info was outdated and needed a bit of a renewal).&lt;/p&gt;
&lt;p&gt;I started a couple of projects, like a said before. One of them is an Android
architecture based on MVVM. I know there is a lot of them out there, but it is
not the same that doing one yourself and learning about the process and the
decisions.&lt;/p&gt;
&lt;p&gt;This Android base architecture will be compilable using
&lt;a href=&#34;https://builds.sr.ht&#34;&gt;builds of sourcehut&lt;/a&gt;. The build config file will be based in the
post &lt;a href=&#34;https://momi.ca//srhtandroid.html&#34;&gt;Sourcehut Android Gradle Continuous Integration&lt;/a&gt;,
written by &lt;a href=&#34;https://momi.ca&#34;&gt;Anjan&lt;/a&gt;. I might have to modify the file to adapt for
what I want to do, but otherwise, that is the file&amp;rsquo;s origin.&lt;/p&gt;
&lt;p&gt;In the mean time, I am making a couple of projects to earn some extra money. One
of them is a mix of Qt + PySide2, which is a strange mix of GUI and back-end
code, but I am liking it. I might write something about my experience with this.
I only did a project with GUI, and it was in Windows with C# (pretty easy, to be
honest). I think I have the source code still at my computer, so I might publish
it for the sake of archiving it in some place, but it stopped working a long
time ago.&lt;/p&gt;
&lt;p&gt;You can find me at Freenode with the handle &lt;code&gt;captainepoch&lt;/code&gt; or at
&lt;a href=&#34;https://nixnet.social/@captainepoch&#34;&gt;nixnet.social/@captainepoch&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fixing the Firefox Sync Server</title>
      <link>https://adol.pw/2020/04/12/fixing-firefox-sync-server/</link>
      <pubDate>Sun, 12 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2020/04/12/fixing-firefox-sync-server/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;UPDATE 2020-05-09: added at the end a perfect deploy guide and a bit of config
tunning for the deploy. I have the guide archived just in case it is lost. The
small-sized guide can be found at the end of this post.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I changed from Chrome to Firefox a long time ago, and I mostly do not regret it.
I prefer to have all my personal data under my control, and that is the reason I
host my own Firefox Sync Server.&lt;/p&gt;
&lt;p&gt;Chrome, of course, has your data within Google&amp;rsquo;s servers (&lt;em&gt;the botnet&lt;/em&gt;).
Firefox, too. But, at least, Mozilla has a 2018-something version of the
synchronization server open in GitHub (&lt;a href=&#34;https://github.com/mozilla-services/syncserver&#34;&gt;Firefox Sync
Server&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I upgraded the software a month or so ago. I though it was easy, just following
the steps in the README file and it is done. And, of course, it works. The
software is upgraded after doing those steps. The problems are the changes made
and not described in any part but a lost issue in the repository issue tracker.&lt;/p&gt;
&lt;p&gt;This week I noticed that my changes were not synchronizing between my two
computers. I though it was a problem of the Nginx configuration, so I started
digging into it. It was not. Logs did not show anything special but one thing:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1586625940767	Services.Common.RESTRequest	DEBUG	GET https://DOMAIN/token/1.0/sync/1.5 500
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1586625940767	Services.Common.TokenServerClient	DEBUG	Got token response: 500
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1586625940767	Services.Common.TokenServerClient	WARN	Did not receive JSON response. Misconfigured server?
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1586625940767	Services.Common.TokenServerClient	DEBUG	Content-Type: text/html; charset=utf-8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1586625940767	Services.Common.TokenServerClient	DEBUG	Body: &amp;lt;html&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;head&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;title&amp;gt;Internal Server Error&amp;lt;/title&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/head&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;body&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;h1&amp;gt;&amp;lt;p&amp;gt;Internal Server Error&amp;lt;/p&amp;gt;&amp;lt;/h1&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/body&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/html&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1586625940767	Sync.BrowserIDManager	ERROR	Non-authentication error in _fetchTokenForUser: TokenServerClientServerError(...)(resource://services-common/tokenserverclient.js:39:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.js:105:16
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;_processTokenResponse@tokenserverclient.js:279:19
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;What the fuck?!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I started diggin under the skin during 2 days until, for some reason, I left
the &lt;code&gt;watch&lt;/code&gt; command open with the status of the &lt;code&gt;systemd&lt;/code&gt; service and found
this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ProgrammingError: (psycopg2.errors.UndefinedColumn) column &amp;#34;keys_changed_at&amp;#34; does not exist
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LINE 3:     keys_changed_at, node
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ^
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[SQL: select
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    uid, generation, client_state, created_at, replaced_at,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    keys_changed_at, node
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;from
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    users
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;where
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    email = %(email)s
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;and
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    service = %(service)s
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;order by
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    created_at desc, uid desc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;limit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    20
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[parameters: {&amp;#39;email&amp;#39;: u&amp;#39;REDACTED@api.accounts.firefox.com&amp;#39;, &amp;#39;service&amp;#39;: u&amp;#39;sync-1.5&amp;#39;}]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, you might have guessed I use PostgreSQL to store the data. From my old
setup to the new one, even doing the steps of the docs, the database &lt;strong&gt;was not
upgraded at all&lt;/strong&gt;. For this, I spent 2 days looking into the wrong place. The
fix is in &lt;em&gt;an issue&lt;/em&gt; (you can &lt;a href=&#34;https://github.com/mozilla-services/syncserver/pull/193#commitcomment-36884169&#34;&gt;go to the issue&lt;/a&gt;), but if you
do not want to get into it, here is the fix:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-postgresql&#34; data-lang=&#34;postgresql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;TABLE&lt;/span&gt; users &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;ADD&lt;/span&gt; keys_changed_at &lt;span style=&#34;color:#007020&#34;&gt;BIGINT&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;TABLE&lt;/span&gt; users &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;ADD&lt;/span&gt; node &lt;span style=&#34;color:#007020&#34;&gt;VARCHAR&lt;/span&gt;(&lt;span style=&#34;color:#40a070&#34;&gt;255&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Where do you have to apply it? Of course, in the database you put into the
configuration. And, with such simple thing, it works. It could be pushed as a
migration to be done in the &lt;code&gt;make build&lt;/code&gt; step or something, but &lt;strong&gt;nope&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I faced another problem related to the Nginx configuration I have in place, but
that is not relevant for this post.&lt;/p&gt;
&lt;p&gt;And that is a writeup made by spending two days fixing something the upgrade
process should consider in the documentation. I understand that hosting yourself
the software has its problems, but damn&amp;hellip;&lt;/p&gt;
&lt;p&gt;There is a lot of things to improve with the Firefox Sync Server, for example,
&lt;em&gt;not using Python 2.7&lt;/em&gt; or a better documentation, because it is not clear at
all.&lt;/p&gt;
&lt;p&gt;&amp;ndash;&lt;/p&gt;
&lt;p&gt;If you want to deploy a Firefox Sync Server in your own server, or VPS, or
whatever server you own, a guide to deploy the Firefox Sync Server can be
found at &lt;a href=&#34;https://keans.de/firefox-sync.html&#34;&gt;Firefox Bookmark Syncing&lt;/a&gt;
(&lt;a href=&#34;https://web.archive.org/web/20200509095324/https://keans.de/firefox-sync.html&#34;&gt;Wayback Machine backup&lt;/a&gt;), writen by Ansgar
Kellner. Credits to him, it works like a charm.&lt;/p&gt;
&lt;p&gt;The guide above this paragraph does not take into account using PostreSQL as the
backend database, so you must do this in order to install witk before executing
the &lt;code&gt;make build&lt;/code&gt; command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ &lt;span style=&#34;color:#007020&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;psycopg2&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If it fails, try with &lt;code&gt;psycopg2-binary&lt;/code&gt; instead.&lt;/p&gt;
&lt;p&gt;Then, I recommend to you to setup the server for using &lt;code&gt;gevent&lt;/code&gt; workers. To
install them before installing the sync server:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ &lt;span style=&#34;color:#007020&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;gevent&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you have deployed your sync server already, you can install it and setup in
the config file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ pip install gevent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the file &lt;code&gt;syncserver.ini&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;server:main&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bb60d5&#34;&gt;worker_class&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; gevent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The three dots represents the rest of the configuration, put the last line at
the end of that category.&lt;/p&gt;
&lt;p&gt;And, with all of this, you are going to have a smooth and fast Firefox Sync
Server at your disposal.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, April 2020</title>
      <link>https://adol.pw/2020/04/08/status-april-2020/</link>
      <pubDate>Wed, 08 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2020/04/08/status-april-2020/</guid>
      <description>&lt;p&gt;This post should be posted about in mid-april, but I have not posted anything
since october 2019, so I thought it was a good idea to write this.&lt;/p&gt;
&lt;p&gt;First of all, I have been working as an Android developer for the past 5 months.
I still have a lot to learn, because Android development is not as trivial as it
might seem to be, but I like it. It is been a challenge, but I am learning a lot
about how to develop an application properly, and I like it.&lt;/p&gt;
&lt;p&gt;Also, I am starting to make my own Android base architecture to make
applications (in Kotlin). I am thinking on writting a series of blog posts about
this, because it is something I really loved to learn and I am sure it is going
to help me even for debugging any bug I encounter! The source code of this will
be open when I consider it is worth opening it, or maybe I will do it even it is
being done.&lt;/p&gt;
&lt;p&gt;I am also starting another project which I hope it ends someday. It is a web
application done in flask. It is a simple task manager. Why? Because I did not
find any that fits my needs, or at least, what I think a task manager should be.
Do not get me wrong, something like &lt;a href=&#34;https://todo.sr.ht&#34;&gt;todo.sr.ht&lt;/a&gt; would do it, but
not for my personal tasks, so I hope to release a first version in a couple of
months.&lt;/p&gt;
&lt;p&gt;On the other hand, I am making another project, this is not going to be open
source for a series of private reasons, but I hope to learn a lot from it too.&lt;/p&gt;
&lt;p&gt;And that is it! I do not have time to get bored in this quarantine (or even in a
normal life), so&amp;hellip; I hope to get back to writing more soon!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, October 2019</title>
      <link>https://adol.pw/2019/10/14/status-oct-2019/</link>
      <pubDate>Mon, 14 Oct 2019 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2019/10/14/status-oct-2019/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://adol.pw/2019/09/status-sep-2019/&#34;&gt;Last month I wrote a post&lt;/a&gt; about an status update about my
progress in my tasks. I have been able to complete some tasks, but not every one
of them.&lt;/p&gt;
&lt;p&gt;First of all, I am almost finished about testing &lt;a href=&#34;https://mailbox.org&#34;&gt;mailbox.org&lt;/a&gt;.
But the aliases system for having multiple mail addresses does not fit my
necessities. I am looking for something like &lt;a href=&#34;https://migadu.com&#34;&gt;migadu.com&lt;/a&gt;, but
without the outgoing quota, and I think that leads me to self-hosting my email.
I am still looking, so I have hope.&lt;/p&gt;
&lt;p&gt;As my main job is Android development (I am still too new in this world), I also
learnt about the &lt;a href=&#34;https://android.jlelse.eu/architectural-guidelines-to-follow-for-mvp-pattern-in-android-2374848a0157&#34;&gt;MVP&lt;/a&gt; and &lt;a href=&#34;https://docs.microsoft.com/en-us/previous-versions/msp-n-p/hh848246(v=pandp.10)&#34;&gt;MVVP&lt;/a&gt; patterns for
software arquitecture. They are new for me. I see diferences between MVP, MVVM
and MVC, but not too many as I imagined. I also learnt about &lt;a href=&#34;https://dagger.dev/&#34;&gt;Dagger&lt;/a&gt;
and &lt;a href=&#34;https://square.github.io/retrofit/&#34;&gt;Retrofit&lt;/a&gt;, which are equally interesting projects I did not know
about.&lt;/p&gt;
&lt;p&gt;As far as my Go experience, it is still the same, I did not have any time this
past month to get a deeper look into it, so I am keeping that for the next
month.&lt;/p&gt;
&lt;p&gt;Thank you for keep reading to the end!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Status update, September 2019</title>
      <link>https://adol.pw/2019/09/23/status-sep-2019/</link>
      <pubDate>Mon, 23 Sep 2019 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2019/09/23/status-sep-2019/</guid>
      <description>&lt;p&gt;I am going to add status updates to the blog every month, so I force
myself to complete tasks, projects and other stuff, and share the
progress here.&lt;/p&gt;
&lt;p&gt;I am starting to look for e-mail providers beyond Google or ProtonMail.
As a privacy-conscius individual, I still do not like having my personal email
in Gmail, even knowing that small-medium email providers can be shutdown any
moment, and self-hosting my own requires a fair amount of time to maintain and I
do not have it right now, maybe in a future&amp;hellip;&lt;/p&gt;
&lt;p&gt;I have some requirements to choose one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Privacy first, preferably Europe-based.&lt;/li&gt;
&lt;li&gt;Compilant with standard protocols (IMAP and SMTP).&lt;/li&gt;
&lt;li&gt;Possibility of GPG encryption (altough I prefer to hold my keys).&lt;/li&gt;
&lt;li&gt;Custom domain support and multi-account.&lt;/li&gt;
&lt;li&gt;OTP support.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For now, &lt;a href=&#34;https://mailbox.org&#34;&gt;mailbox.org&lt;/a&gt; is my choice. I paid one month and
am testing the whole service right now. I am still dealing with having
multiple aliases, though.&lt;/p&gt;
&lt;p&gt;About my programming progress, I started doing stuff in Go. I find Go as the
language between C and a high-level programming language: fast, &amp;ldquo;easy&amp;rdquo;
and cross-platform, without the hard parts of C (it even has pointers
and such stuff). I still have planned to go back to C, because I like it
more, but I try to have time for both of them.&lt;/p&gt;
&lt;p&gt;I got a project called TwootBot (the code will be open as soon as I
finish a couple of things). This projects take the last entry of an RSS
feed and put a tweet. Since I do not use Twitter anymore, I have a couple
of things to do with this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check if it still works with Twitter for people who uses it.&lt;/li&gt;
&lt;li&gt;Include the Mastodon API, so Mastodon and Pleroma users can use it
too.&lt;/li&gt;
&lt;li&gt;Add a TUI and a cli interface to see data such as the last post
published and other stuff (the TUI is for learning purposes and I would
like to give it a try).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also started doing more Android development (application level, not the
operating system, for now). I am looking for a new job and got some
recomendations to learn new stuff that looks really promising (although
some of them are Google-related, but it is a company&amp;rsquo;s project, I cannot
change that).&lt;/p&gt;
&lt;p&gt;And, for know, I think this is enough to the first status update.&lt;/p&gt;
&lt;p&gt;Thank you for keep reading to the end!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Return to blogging, 2019 edition</title>
      <link>https://adol.pw/2019/01/25/return-blogging-2019/</link>
      <pubDate>Fri, 25 Jan 2019 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2019/01/25/return-blogging-2019/</guid>
      <description>&lt;p&gt;So&amp;hellip; I am back!&lt;/p&gt;
&lt;p&gt;There is a couple of times where I thought on not to be back at blogging. But
then I had some ideas to make a few posts (plus a couple I got under my &lt;em&gt;TO-DO&lt;/em&gt;
list)&amp;hellip;&lt;/p&gt;
&lt;p&gt;And then my friend Diego (follow him &lt;a href=&#34;https://mastodon.sdf.org/@dvicente&#34;&gt;@diego&lt;/a&gt;) put his blog on
&lt;em&gt;the Internet&lt;/em&gt; (&lt;a href=&#34;https://diego.codes/&#34;&gt;diego.codes&lt;/a&gt;, down to &amp;ldquo;Posts&amp;rdquo;). And then I
thought: damn, I got to put mine on &lt;em&gt;the Internet&lt;/em&gt; too!&lt;/p&gt;
&lt;p&gt;If everything went well you will see this post published on Jan. 26, 2019. A few
more are comming on this month (I hope so), so stay tunned!&lt;/p&gt;
&lt;p&gt;You can follow me &lt;a href=&#34;https://cmpwn.com/@captainepoch&#34;&gt;@captainepoch&lt;/a&gt;. I have a Twitter account,
but only for the handle, I do not really care about Twitter.&lt;/p&gt;
&lt;p&gt;See you!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>No static IP? No problem!</title>
      <link>https://adol.pw/2018/01/24/static-ip-dns/</link>
      <pubDate>Wed, 24 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2018/01/24/static-ip-dns/</guid>
      <description>&lt;p&gt;Most of us do not have a static IP address at home, so having a server running
at home with our stuff is kind of complicated. But it is possible to use a DNS
service to not worry about the static IP!&lt;/p&gt;
&lt;h1 id=&#34;setting-up-the-dns-at-freedns&#34;&gt;Setting up the DNS at FreeDNS&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Why is it free? It&amp;rsquo;s quite simple. We wanted a challenge… that&amp;rsquo;s it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;First of all, you have to make an account at &lt;a href=&#34;https://freedns.afraid.org/&#34;&gt;FreeDNS&lt;/a&gt;. Then you have 5
subdomains to use, although we only need one, because we can later on set up a
domain with a CNAME entry in our favourite nameserver provider.&lt;/p&gt;
&lt;p&gt;Once you have the account, then go to &lt;em&gt;Subdomains&lt;/em&gt; and add one. The image is a
&amp;lsquo;default&amp;rsquo; config, but you can choose a lot of subdomains. Simply go to &lt;em&gt;Many
many more available&amp;hellip;&lt;/em&gt;.&lt;/p&gt;





&lt;figure&gt;
    
        &lt;img src=&#34;https://adol.pw/2018/01/24/static-ip-dns/images/cap.png&#34;/&gt; &lt;/figure&gt;

&lt;p&gt;Go to &lt;em&gt;Dynamic DNS&lt;/em&gt;, and you should see your DNS at the bottom of the website,
like the image (I blanked the IP, but you should see one), and then go to &lt;em&gt;quick
cron example&lt;/em&gt; and you are going to see a lot of text and a &lt;code&gt;cron&lt;/code&gt; rule at the
bottom. Put that in your Raspberry Pi, or server, or whatever you want to have
at home running your services.&lt;/p&gt;
&lt;p&gt;That cronjob is going to be updating the DNS entry at FreeDNS with the IP you
have at home at that very instant. If it changes instant any moment, it will be
updated, so you should be good. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/5 * * * * sleep &lt;span style=&#34;color:#40a070&#34;&gt;44&lt;/span&gt; ; wget --no-check-certificate -O - https://freedns.afraid.org/dynamic/update.php?N0Nad05PUTVzYTdBTk5VUTZxSHYwdkFtOjE3NTgzNjUz &amp;gt;&amp;gt; /tmp/freedns_dopedns_crabdance_com.log 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#40a070&#34;&gt;1&lt;/span&gt; &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That would update my DNS setup with the IP I have at this moment. It will
execute every 5 minutes.&lt;/p&gt;
&lt;h1 id=&#34;setting-up-a-domain&#34;&gt;Setting up a domain&lt;/h1&gt;
&lt;p&gt;To set up a domain and not using your DNS domain (which could be a little
difficult to remember), simply go to the domain panel at your nameserver
provider and set up a &lt;strong&gt;CNAME&lt;/strong&gt; entry. Then you can set up an Apache or Nginx
normally pointing up to the domain.&lt;/p&gt;
&lt;p&gt;With that you do not need a static IP at home to have your services served. Hope
it helps!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Signal and no GAPPS...</title>
      <link>https://adol.pw/2018/01/24/signal-no-gapps/</link>
      <pubDate>Wed, 24 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2018/01/24/signal-no-gapps/</guid>
      <description>




&lt;figure&gt;
    
        &lt;img src=&#34;https://adol.pw/2018/01/24/signal-no-gapps/images/signal_logo.png&#34;/&gt; &lt;/figure&gt;

&lt;p&gt;We, as users and consumers, saw Android evolving. Nowadays, a lot of really good
funcionality is integrated into the Google Play Services (I will call them PS
from now). If you do not know or are not familiar with what this is, please
check the Wikipedia about that (&lt;a href=&#34;https://en.wikipedia.org/wiki/Google_Play_Services&#34;&gt;Wikipedia&amp;rsquo;s Google Play
Services&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;So, if you are an user that care about its privacy, you obviously do not use PS
in your mobile. It is the worst nightmare. Like a friend of mine said once: &lt;em&gt;Why
do you want to use privacy stuff if you have literally a spy in your phone?&lt;/em&gt; And
a few months later, I put my phone with &lt;a href=&#34;https://lineageos.org/&#34;&gt;LineageOS&lt;/a&gt; + &lt;a href=&#34;https://microg.org/&#34;&gt;MicroG&lt;/a&gt; (you
&lt;a href=&#34;https://lineage.microg.org/&#34;&gt;have that LOS+MicroG build here&lt;/a&gt; and I will talk about this in
another post).&lt;/p&gt;





&lt;figure&gt;
    
        &lt;img src=&#34;https://adol.pw/2018/01/24/signal-no-gapps/images/screen_1.png&#34;/&gt; &lt;/figure&gt;

&lt;p&gt;I wanted to try Signal again. &lt;a href=&#34;https://signal.org/&#34;&gt;Signal&lt;/a&gt; is an instant messaging
application with a strong encryption protocol. The protocol itself has been
proven very secure, and it has been audited too. It is open and you can use it
freely. You can take a look at &lt;a href=&#34;https://signal.org/docs/&#34;&gt;signal.org/docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The problem is I do not have the PS installed. I have something that can act as
the PS, but not replace them. And, if you use Yalp Store to download the app,
the first thing you see is&amp;hellip;&lt;/p&gt;





&lt;figure&gt;
    
        &lt;img src=&#34;https://adol.pw/2018/01/24/signal-no-gapps/images/screen_2.png&#34;/&gt; &lt;/figure&gt;

&lt;p&gt;It is true. Signal uses Google Cloud Messaging to send the messages. Also it
uses PS for calls too.&lt;/p&gt;
&lt;p&gt;That is the first problem. But this does not end here. After you install it and
try to create an accout, you get this!&lt;/p&gt;





&lt;figure&gt;
    
        &lt;img src=&#34;https://adol.pw/2018/01/24/signal-no-gapps/images/screen_3.png&#34;/&gt; &lt;/figure&gt;

&lt;p&gt;A friend of mine, tried to get Signal working in his mobile (he has the Play
Services installed) and it worked.&lt;/p&gt;
&lt;p&gt;It would be awesome that non-PS users could use Signal. In fact,
&lt;a href=&#34;https://github.com/LibreSignal/LibreSignal&#34;&gt;LibreSignal&lt;/a&gt; was a succesful project until &lt;a href=&#34;https://github.com/LibreSignal/LibreSignal/issues/37#issuecomment-217211165&#34;&gt;Moxie Marlinspike said
he was not OK with LibreSignal using the Open Whisper Systems servers and the
name &amp;ldquo;Signal&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Using the C preprocessor</title>
      <link>https://adol.pw/2017/03/27/preprocessor-c/</link>
      <pubDate>Mon, 27 Mar 2017 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2017/03/27/preprocessor-c/</guid>
      <description>&lt;p&gt;We already know that C is a language broadly used in almost every computer or
computer-like gadget. We also know that C is a complex thing and thus every
operative system has its own POSIX API in order to give some portability
(Windows is special, I wo nt cover anything about Windows and C here).&lt;/p&gt;
&lt;p&gt;So, as a student, I have assignments. I am also a Computer Science and
Engineering student, so some of those assignments are in low level languages (C
and C++). I use Mac and GNU/Linux day-to-day and will love using the POSIX API
in both operative systems without worring about library paths or some syscalls.
So, as far as I know, some library paths are different between Mac and
GNU/Linux, and thus we have to put those paths at the &lt;code&gt;#include&lt;/code&gt; macro. I am
going to write my findings about using the C preprocessor to solve this issue.&lt;/p&gt;
&lt;h1 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;/h1&gt;
&lt;p&gt;This is not a professional post but the findings of a student who likes C
enough.&lt;/p&gt;
&lt;h1 id=&#34;environments&#34;&gt;Environments&lt;/h1&gt;
&lt;p&gt;For this post I am using my MacBook Pro with the latest version of
&lt;strong&gt;El Capitán&lt;/strong&gt; and my Raspberry Pi B+ with the latest version of Raspbian at the
date of writing this post.&lt;/p&gt;
&lt;p&gt;Mac compiler:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Apple LLVM version 8.0.0 (clang-800.0.42.1)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Target: x86_64-apple-darwin15.6.0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Thread model: posix
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;InstalledDir: /Library/Developer/CommandLineTools/usr/bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;RPi compiler:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gcc (Raspbian 4.9.2-10) 4.9.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Copyright (C) 2014 Free Software Foundation, Inc.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;This is free software; see the source for copying conditions.  There is NO
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;what-is-the-preprocessor&#34;&gt;What is the Preprocessor?&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;The C preprocessor, often known as cpp, is a macro processor that is used
automatically by the C compiler to transform your program before compilation.
It is called a macro processor because it allows you to define macros, which
are brief abbreviations for longer constructs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Source: &lt;a href=&#34;https://gcc.gnu.org/onlinedocs/cpp/Overview.html#Overview&#34;&gt;Overview&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The preprocessor does lexical substitutions, which is a hardcore copy and paste
from macros to the source code!&lt;/p&gt;
&lt;h1 id=&#34;some-code&#34;&gt;Some code!&lt;/h1&gt;
&lt;p&gt;When we want to define some constant values in C we can use the &lt;code&gt;const&lt;/code&gt; or
&lt;code&gt;#define&lt;/code&gt;. The &lt;code&gt;#define&lt;/code&gt; macro is part of the preprocessor of C, so for example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020&#34;&gt;#define STRING &amp;#34;Hello, world&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You will get:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hello, world
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;#define&lt;/code&gt; macro is widely used (e. g. look at the Linux&amp;rsquo;s source code).&lt;/p&gt;
&lt;p&gt;It is cool, but there is no problem with this, it is easy to use and compatible
with both operating systems.&lt;/p&gt;
&lt;p&gt;So, for example, you can define macro calls! Let&amp;rsquo;s call it &amp;rsquo;little functions&amp;rsquo;.
So, for example, you need a comparator (because of&amp;hellip; reasons). So, let&amp;rsquo;s
define a macro for that:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020&#34;&gt;#define equal(X, Y)  ((X) == (Y) ? (X) : (Y))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It means: if X is equal to Y, returns X, else Y. It is an &lt;code&gt;if&lt;/code&gt; but in a macro!
Awesome &lt;code&gt;:3&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;And, of course, the output you get if true:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#06287e&#34;&gt;FALSE&lt;/span&gt; (&lt;span style=&#34;color:#40a070&#34;&gt;2&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#06287e&#34;&gt;TRUE&lt;/span&gt; (&lt;span style=&#34;color:#40a070&#34;&gt;1&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But, again, both operating systems have no problem with this, at all, it works
cleanly.&lt;/p&gt;
&lt;p&gt;As I said at the top of this post I wanted something more hardcore, like
distinguish between paths. In an assignments we had to upload for correction we
needed to use a lib. called &lt;a href=&#34;http://pubs.opengroup.org/onlinepubs/7908799/xsh/ucontext.h.html&#34;&gt;&lt;code&gt;ucontext.h&lt;/code&gt;&lt;/a&gt;. So, why would I want to
use the preprocessor because of it? Well&amp;hellip;&lt;/p&gt;
&lt;p&gt;Linux path:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/include/ucontext.h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mac path:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/include/sys/ucontext.h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So&amp;hellip; We need the preprocessor&amp;hellip; Again! :).&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s get started seeing what are the macros we need. First of all, it is
neccesary to know the macros for both platforms, which are &lt;code&gt;__APPLE__&lt;/code&gt; for Mac
and &lt;code&gt;__linux__&lt;/code&gt; for GNU/Linux.&lt;/p&gt;
&lt;p&gt;Of course, if you do that in Mac OS it prints &lt;code&gt;Mac OS&lt;/code&gt; if you compile and run in
a Mac and &lt;code&gt;GNU/Linux&lt;/code&gt; if you do it in Linux.&lt;/p&gt;
&lt;p&gt;You can do it too for other macros (code: &lt;code&gt;ex4.c&lt;/code&gt;) which prints &lt;code&gt;100&lt;/code&gt; if you
compile and run in a Mac and &lt;code&gt;200&lt;/code&gt; if you do it in Linux.&lt;/p&gt;
&lt;p&gt;Another example is for using different paths for a library:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020&#34;&gt;#if __APPLE__
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#007020&#34;&gt;&amp;lt;sys/ucontext.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#007020&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020&#34;&gt;#elif __linux__
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#007020&#34;&gt;&amp;lt;ucontext.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#007020&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That snippet is choosing between to paths for the same library. If there is some
POSIX love between GNU/Linux and Mac, we should be able to use the same syscall
of the same library. So, that means portability, and that is good! :D&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;As you can see C is really powerful and it was engineered in order to get
portability from one operating system to another. POSIX allows it, and it is
cool. I will edit this post to add things if I see more interesting stuff about
the preprocessor that I could use and show you. This is bigger than you think,
believe me!&lt;/p&gt;
&lt;p&gt;You can get more info at &lt;a href=&#34;https://gcc.gnu.org/onlinedocs/cpp/&#34;&gt;GNU GCC&amp;rsquo;s Preprocessor wiki&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I am very thankful to &lt;a href=&#34;https://twitter.com/voiser&#34;&gt;@voiser&lt;/a&gt; who readed this post and pointed me some
typos and grammatical errors that needed to be fixed :).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Isolate your Ruby environment</title>
      <link>https://adol.pw/2016/08/16/isolate-ruby-env/</link>
      <pubDate>Tue, 16 Aug 2016 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2016/08/16/isolate-ruby-env/</guid>
      <description>&lt;p&gt;Developers normally have a few environments while making a software (for a
company, as an indie dev&amp;hellip;) that isolates all the dependencies in order to get
the product to work.&lt;/p&gt;
&lt;p&gt;I was interested on that a few days ago. I was asking myself if it is another
way to get isolated enviroments for hardcore stuff like C or C++, where libs are
normally installed with the package manager you are using or by compiling them
within the source code or as a static binary. With Python you can use
&lt;a href=&#34;https://pypi.python.org/pypi/virtualenv&#34;&gt;virtualenv&lt;/a&gt;, which created isolated environments and then you
can deploy. There are a few for Ruby, but I am going to use &lt;a href=&#34;https://rvm.io/&#34;&gt;RVM&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;I am not a Ruby developer. I do not know a thing about this programming
language&lt;/em&gt;&lt;/strong&gt;. I was looking for a way to have the same set up for
&lt;a href=&#34;https://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt; that I got on my server, because I wanted to make some
modifications to the &lt;a href=&#34;https://github.com/jekyll/minima&#34;&gt;minima&lt;/a&gt; theme (It came as a gem and, if I modify
inside of the gem, when I update it is not going to be the theme with my
modifications) and not with the system&amp;rsquo;s Ruby version.&lt;/p&gt;
&lt;p&gt;So, let&amp;rsquo;s get started!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;DISCLAIMER: I will be doing this post on a Debian 8.3 machine with testing
(stretch) repositories. I did on my ArchLinux machine and it works like a charm.
I did not try on Mac OS X but it should work.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&#34;installing-rvm&#34;&gt;Installing RVM&lt;/h1&gt;
&lt;p&gt;First of all you need to install &lt;code&gt;rvm&lt;/code&gt;. Going through its &lt;a href=&#34;https://rvm.io/&#34;&gt;website&lt;/a&gt; you see
a &lt;code&gt;gpg&lt;/code&gt; import key command. Do not do it. If you do, then the &lt;code&gt;curl&lt;/code&gt; command let
you know that you should import another key, so execute the &lt;code&gt;curl&lt;/code&gt; command
first.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl -sSL https://get.rvm.io | bash -s stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You will be asked to import a &lt;code&gt;gpg&lt;/code&gt; key, so do it and execute the command again.
If it does not work, try the second command it appears:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I did it once because the &lt;code&gt;gpg2&lt;/code&gt; command does not work and it works.&lt;/p&gt;
&lt;p&gt;If you are using &lt;code&gt;zsh&lt;/code&gt; as a shell, please read the comments you will get,
because you need to do it in order to get &lt;code&gt;rvm&lt;/code&gt; working. I put this at the end
on my &lt;code&gt;.zshrc&lt;/code&gt; file and it works:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[[&lt;/span&gt; -d &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bb60d5&#34;&gt;$HOME&lt;/span&gt;&lt;span style=&#34;color:#4070a0&#34;&gt;/.rvm&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;]]&lt;/span&gt;; &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#007020&#34;&gt;source&lt;/span&gt; ~/.profile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, close and reopen your terminal, and type:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rvm --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And you should see something like that (with the version you installed):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rvm 1.27.0 &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;latest&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt; by Wayne E. Seguin &amp;lt;wayneeseguin@gmail.com&amp;gt;, Michal Papis &amp;lt;mpapis@gmail.com&amp;gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;https://rvm.io/&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;installing-a-ruby-version&#34;&gt;Installing a Ruby version&lt;/h1&gt;
&lt;p&gt;With &lt;code&gt;RVM&lt;/code&gt; you can manage a lot of versions of Ruby. In this post it will be
&lt;code&gt;2.3.1&lt;/code&gt;, the latest at this moment, but you can have &lt;a href=&#34;https://rvm.io/interpreters/ruby/&#34;&gt;MRI/YARV&lt;/a&gt;,
&lt;a href=&#34;https://rvm.io/interpreters/jrub/&#34;&gt;JRuby&lt;/a&gt; and &lt;a href=&#34;https://rvm.io/interpreters/rbx/&#34;&gt;Rubinius&lt;/a&gt; too.&lt;/p&gt;
&lt;p&gt;Before installing anything about Ruby, let&amp;rsquo;s check if the requirements are
installed, so execute:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rvm requirements
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It installs every dependency to compile and install Ruby and get everyting
working. &lt;em&gt;You have to have &lt;code&gt;sudo&lt;/code&gt; permissions&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;After installing everything, let&amp;rsquo;s get to install a Ruby version, so:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rvm install RUBY_VERSION
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Where &lt;code&gt;RUBY_VERSION&lt;/code&gt; means the version you want to install. In my case, it will
be &lt;code&gt;2.3.1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can use whatever version of Ruby you want. I will be using the latest
because I use it with Jekyll. If &lt;code&gt;rvm&lt;/code&gt; does not find any binary for that
version, it will compile, so first you should check the &lt;em&gt;requirements&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;using-a-version-of-ruby&#34;&gt;Using a version of Ruby&lt;/h2&gt;
&lt;p&gt;In order to have a version running as default, you have to execute the command
to set it default:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rvm use RUBY_VERSION --default
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Where &lt;code&gt;RUBY_VERSION&lt;/code&gt; means the version you installed. This is going to set the
necessary variables to use that version of Ruby &lt;strong&gt;on your user&lt;/strong&gt;, not on the
system. In my case it is going to be &lt;code&gt;2.3.1&lt;/code&gt; as I said.&lt;/p&gt;
&lt;p&gt;You can change it whenever you want for another version of Ruby you installed.&lt;/p&gt;
&lt;h1 id=&#34;create-a-gemset&#34;&gt;Create a &lt;code&gt;gemset&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;A &lt;a href=&#34;https://rvm.io/gemsets/basics&#34;&gt;&lt;code&gt;gemset&lt;/code&gt;&lt;/a&gt; is not more that a set of gems for an specific version
of Ruby. Let&amp;rsquo;s create one:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rvm create gemset GEMSET_NAME
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;GEMSET_NAME&lt;/code&gt; will be &lt;code&gt;jekyll321&lt;/code&gt; because I will use &lt;a href=&#34;https://jekyllrb.com/&#34;&gt;Jekyll
3.2.1&lt;/a&gt; as an example. You can create the &lt;code&gt;gemset&lt;/code&gt; with the name you
want to, even create more than one gemset at a time, but it is not tue purpose of
this post:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rvm gemset create GEMSET_NAME1 GEMSET_NAME2 ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You have more information about &lt;a href=&#34;https://rvm.io/gemsets/basics&#34;&gt;&lt;code&gt;gemsets&lt;/code&gt;&lt;/a&gt; at its &lt;em&gt;Basics&lt;/em&gt; page.&lt;/p&gt;
&lt;h2 id=&#34;installing-gems&#34;&gt;Installing &lt;code&gt;gems&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;To choose the &lt;code&gt;gemset&lt;/code&gt; you have created, execute:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rvm RUBY_VERSION@GEMSET_NAME
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Where &lt;code&gt;RUBY_VERSION&lt;/code&gt; is the version of Ruby of your choice and &lt;code&gt;GEMSET_NAME&lt;/code&gt; is
the name of the &lt;code&gt;gemset&lt;/code&gt; you want to use. In my case it will be &lt;code&gt;2.3.1&lt;/code&gt; and
&lt;code&gt;jekyll321&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After that, you can install &lt;code&gt;gems&lt;/code&gt; right know. I will do with Jekyll right now.&lt;/p&gt;
&lt;h1 id=&#34;isolating-the-environment&#34;&gt;Isolating the environment&lt;/h1&gt;
&lt;p&gt;Right now you have everything you need to start blogging with Jekyll, and that
is cool! But it is not completed. In order to achieve that first you need to
create a blog and then set the files to use only that version of Ruby and that
&lt;code&gt;gemset&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Once you created your blog with Jekyll and you navigate into the folder, you
will notice a message that says:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RVM used your Gemfile &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;for&lt;/span&gt; selecting Ruby, it is all fine - Heroku does that too,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;you can ignore these warnings with &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#39;rvm rvmrc warning ignore [directory]/Gemfile&amp;#39;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;To ignore the warning &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;for&lt;/span&gt; all files run &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#39;rvm rvmrc warning ignore allGemfiles&amp;#39;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Unknown ruby interpreter version &lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;do&lt;/span&gt; not know how to handle&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;: RUBY_VERSION.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And that is correct, because it means you (and me) installed everything
correctly. But it presents a problem: you lost your &lt;code&gt;gemset&lt;/code&gt;. If you try to
execute some commands of Jekyll, it fails, so assign again as in &lt;em&gt;Installing
&lt;code&gt;gems&lt;/code&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Then you are going to create two files: &lt;code&gt;.ruby-version&lt;/code&gt; and &lt;code&gt;.ruby-gemset&lt;/code&gt;. The
first file will indicate which version of Ruby you will be running, and the
second the &lt;code&gt;gemset&lt;/code&gt; you want to use. Those files will contain information about
what it should used by Ruby. Into the directory of your project execute:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rvm --ruby-version use RUBY_VERSION@GEMSET_NAME
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;--ruby-version&lt;/code&gt; will create two files that are compatible with others Ruby
virtual environment managers such as &lt;a href=&#34;https://github.com/rbenv/rbenv&#34;&gt;&lt;code&gt;rbenv&lt;/code&gt;&lt;/a&gt;. As always where
&lt;code&gt;RUBY_VERSION&lt;/code&gt; is the version of Ruby of your choice and &lt;code&gt;GEMSET_NAME&lt;/code&gt; is the
name of the &lt;code&gt;gemset&lt;/code&gt; you want to use. In my case it will be &lt;code&gt;2.3.1&lt;/code&gt; and
&lt;code&gt;jekyll321&lt;/code&gt;. You can now delete the &lt;code&gt;Gemfile&lt;/code&gt; if you have what you need in your
&lt;code&gt;gemset&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;And that is it! You got a isolated environment for Jekyll (in this case). You
can create some of them with the &lt;code&gt;gemsets&lt;/code&gt; and the Ruby versions.&lt;/p&gt;
&lt;h2 id=&#34;using-a-hook-to-generate-the-blog&#34;&gt;Using a &lt;code&gt;hook&lt;/code&gt; to generate the blog&lt;/h2&gt;
&lt;p&gt;You may notice, if you are using the &lt;code&gt;post-receive&lt;/code&gt; hook to generate the blog
using &lt;code&gt;git&lt;/code&gt; that &lt;code&gt;$PATH&lt;/code&gt; is not correctly loaded. To fix it, add at the start of
the file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020&#34;&gt;unset&lt;/span&gt; GIT_DIR
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#007020&#34;&gt;source&lt;/span&gt; ~/.profile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>A little rant on ads</title>
      <link>https://adol.pw/2016/08/13/little-rant-ads/</link>
      <pubDate>Sat, 13 Aug 2016 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2016/08/13/little-rant-ads/</guid>
      <description>&lt;p&gt;&lt;strong&gt;DISCLAIMER: This is an opinion and you do not have to agree with it
necessarily. That is why this is my blog, for write an opinion even if it is
about a controversial topic.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This post came on my mind because I saw on reddit that &lt;a href=&#34;https://www.engadget.com/2016/08/09/facebook-ad-blockers-preferences-tool/&#34;&gt;Facebook will try to
send ads out of the social network&lt;/a&gt; and &lt;a href=&#34;https://www.bloomberg.com/gadfly/articles/2016-08-02/facebook-and-google-are-beating-the-ad-blockers&#34;&gt;How Facebook and Google
are beating ad blockers&lt;/a&gt;. There is other news but I am sure you
can find it at &lt;a href=&#34;https://www.reddit.com/r/Adblock/search?q=ad+blockers&amp;amp;sort=relevance&amp;amp;t=all&#34;&gt;reddit&lt;/a&gt;. Also you have
&lt;a href=&#34;https://www.reddit.com/r/Adblock/&#34;&gt;/r/Adblock&lt;/a&gt;, FYI.&lt;/p&gt;
&lt;p&gt;I am sure you know that nowadays a big business is on online ads. You can see it
because Google, Facebook, et al, put a lot of efforts in order to include ads on
their websites (personalized or not, that will come on this post). I am sure you
hate that too.&lt;/p&gt;
&lt;p&gt;Well, the worst part of putting ads on a website is that you even can get
malware if you are not careful what you click on. The good part is you get a
revenue for forcing people to see your damn ads putting JS scripts that block
the site if you do not deactivate the adblocker or putting messages like &amp;ldquo;This
website can be possible because of the ads, please deactivate your adblocker&amp;rdquo;,
yay! (Forbes is one of them putting a first-ad-page when you go into its
website).&lt;/p&gt;
&lt;p&gt;The fact is that &lt;em&gt;I am not against ads&lt;/em&gt;. It as a part of the marketing strategy
of a business and sure a company needs it for growing up. That is not enterily
true, but for most of them, it is. There is a lot of companies that invest a lot
of money in advertising and their own advertising because it is their bussines
model. What it gets me anger is the huge amount of ads that invade TV and
internet.&lt;/p&gt;
&lt;p&gt;You turn on your TV, and I am sure you get an ad in the middle of whatever you
are going to watch. You go into a newspapper or YouTube, and more ads! Really?
Because I do not want to get to the point that you see more ads than a movie or
a soup.&lt;/p&gt;
&lt;p&gt;You install a free app from the Play Store or the AppStore, and BUM! More ads!
And that ads are worst than the TV or website, because you can press onto them
without wanting to do that!&lt;/p&gt;
&lt;p&gt;So adblockers were born. The king was &lt;a href=&#34;https://adblockplus.org/&#34;&gt;AdBlock Plus&lt;/a&gt;, but then
&lt;a href=&#34;https://github.com/gorhill/uBlock/&#34;&gt;uBlock&lt;/a&gt; went into the battlefield (use it, not the first). And
then you can see a website without an ad bothering you at the left or right of
the page, blinking with their colorful images (or even sound when ads were done
with Flash). You can also block on Android with &lt;a href=&#34;https://adaway.org/&#34;&gt;Adaway&lt;/a&gt;, but you have
to be root :(.&lt;/p&gt;
&lt;p&gt;And then, trackers&amp;rsquo; blockers were born too! Because ads track people to know
their preferences and then show personalized ads based on that. On a mobile
platform ads track too.&lt;/p&gt;
&lt;p&gt;And after that, internet collapses. For Duck&amp;rsquo;s sake!&lt;/p&gt;
&lt;p&gt;After this little rage against ads, I have to say that I am against of tracking
users, putting malware on the ads and that kind of stuff. One ad on TV or
website is cool, even people will be considering not blocking them. On a mobile
platform it gets data (woo, data, pls, it has to be paid every month and is
loved by each one of ours) and that is the bad face of it.&lt;/p&gt;
&lt;p&gt;If Facebook or Google would not based their bussines model on that (a part of
selling data and that kind of stuff), and the Internet would not get that huge
amount of ads, people would not block them. Buuuuuuut they wanted to play, so&amp;hellip;
:)&lt;/p&gt;
&lt;p&gt;I am sorry, I am not going to support it. It bothers me that watching a video or
reading some articles and then a wild ad appeared&amp;hellip;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Let&#39;s Encrypt certificates!</title>
      <link>https://adol.pw/2015/10/23/letsencrypt/</link>
      <pubDate>Fri, 23 Oct 2015 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2015/10/23/letsencrypt/</guid>
      <description>&lt;p&gt;As you may know I am a little concern about my privacy. And you should too,
because your data, your life. So, in order to provide a secure and private
connection to my sites, I needed a SSL certificate, which it is too expensive.
Of course there are free solutions, but they do not provide a reliable SSL
certificate or free wildcard support.&lt;/p&gt;
&lt;p&gt;Then, &lt;a href=&#34;https://letsencrypt.org&#34;&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt; appeared in this game. They provide an Open
Source, free, reliable SSL certificates for your websites. It is wonderful! So,
my friend &lt;a href=&#34;https://rmedgar.com&#34;&gt;Rafa&lt;/a&gt; and me asked for the beta (&lt;a href=&#34;https://letsencrypt.org/2015/08/07/updated-lets-encrypt-launch-schedule.html&#34;&gt;Let&amp;rsquo;s Encrypt will be
relased for the public on 16th november&amp;rsquo;s week&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;After the private beta period, on 3rd december Let&amp;rsquo;s Encrypt relased the Open
Beta program, which you can see &lt;a href=&#34;https://letsencrypt.org/2015/12/03/entering-public-beta.html&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;set-up&#34;&gt;Set up&lt;/h1&gt;
&lt;p&gt;Let&amp;rsquo;s do it!&lt;/p&gt;
&lt;h2 id=&#34;what-do-you-need&#34;&gt;What do you need?&lt;/h2&gt;
&lt;p&gt;In order to generate your certs, you will need some stuff:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python (because of the local server)&lt;/li&gt;
&lt;li&gt;Git (to clone Let&amp;rsquo;s Encrypt&amp;rsquo;s repo)&lt;/li&gt;
&lt;li&gt;Patient, because, why not?&lt;/li&gt;
&lt;li&gt;Coffee (the most important part of this process) :)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;download-the-software&#34;&gt;Download the software&lt;/h2&gt;
&lt;p&gt;I, like Rafa, chose to download the software and generate all the files locally,
so in your computer, you have to do:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git clone https://github.com/letsencrypt/letsencrypt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It contains the tools you will need to generate your certificates. Remember that
&lt;em&gt;certs have 90 days of lifetime, so each 3 months, more or less, you must update
it!&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;
&lt;p&gt;I changed the way I generated the last certificate, so I could do in just one
line on the terminal:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ./letsencrypt-auto certonly --manual --email YOUR_EMAIL -d DOMAIN_1 &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;-d DOMAIN_2, ...&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I usually do it at my main machine with ArchLinux or in my MacBook Pro, but if
you do at FreeBSD or Amazon Linux Ami, it is the same command with the &lt;code&gt;--debug&lt;/code&gt;
flag:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ./letsencrypt-auto certonly --debug --manual --email YOUR_EMAIL -d DOMAIN_1 &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;-d DOMAIN_2, ...&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s going to explain this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;letsencrypt-auto&lt;/code&gt; is the app for generating the certs. It has some
parameters you can use, but we only need three.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;certonly&lt;/code&gt; is for generate the certs locally. Note that we did from the start
of this post, and it is not going to change, because I like so.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--email YOUR_EMAIL&lt;/code&gt; prevents to get the screen and put your email.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-d DOMAIN_1&lt;/code&gt; puts all the domains you want in the certificate. You can put
whatever domain you want, without restrictions. So, I put 3, but you could
put 10 (always with the &lt;code&gt;-d&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This will setup the virtual environment that &lt;code&gt;letsencrypt&lt;/code&gt; will use in all
future executions. Once that is done, you are asked to run a few commands on the
server in order to get the auth to validate the cert(s). Follow the instructions
to put the token into your server, they are clear.&lt;/p&gt;
&lt;p&gt;After that you need to release the 80 port. Why? Because all the petitios to
validate the cert will be done there. So:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo service nginx stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Obviously, you will have a little downtime. But no worries! It is for your
users, and that is the most important part of a website!&lt;/p&gt;
&lt;p&gt;And then run this command (note it has to be run as root, and I still do not
know why&amp;hellip;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#007020&#34;&gt;command&lt;/span&gt; -v python2 &lt;span style=&#34;color:#666&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#007020&#34;&gt;command&lt;/span&gt; -v python2.7 &lt;span style=&#34;color:#666&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#007020&#34;&gt;command&lt;/span&gt; -v python2.6&lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;)&lt;/span&gt; -c &lt;span style=&#34;color:#4070a0&#34;&gt;&amp;#34;import BaseHTTPServer, SimpleHTTPServer;s = BaseHTTPServer.HTTPServer((&amp;#39;&amp;#39;, 80), SimpleHTTPServer.SimpleHTTPRequestHandler);s.serve_forever()&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, in Terminal, press Enter after doing the steps Let&amp;rsquo;s Encrypt told you, et
voilá!, authenticated and certificate generated (do the same steps for every
domain you put, it is important because &lt;em&gt;each domain generate its own token&lt;/em&gt;).
The server is not needed anymore, so simply interrupt its execution.&lt;/p&gt;
&lt;h2 id=&#34;copying-to-the-server&#34;&gt;Copying to the server&lt;/h2&gt;
&lt;p&gt;Given that I am generating the certificate in my own computer instead of in the
server itself, I have to copy things around. The letsencrypt tool tells you that
your certificates live in &lt;code&gt;/etc/letsencrypt/live/YOUR_DOMAIN&lt;/code&gt;. The files there
are actually symbolic links to &lt;code&gt;/etc/letsencrypt/archive/YOUR_DOMAIN/fileX.pem&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now, I am just going to copy two files to the server, because once you put 3 or
4 domains, they use the same certificate. Here is the files you have to copy to
the server:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fullchain.pem ~&amp;gt; /etc/ssl/adol_pw.pem
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;privkey.pem ~&amp;gt; /etc/ssl/adol_pw.key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;nginx-setup&#34;&gt;Nginx setup&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;I do not use Apache, so I do not know how to make it work there&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Edit the file you want to incorporate the SSL certificate (in my case it is
main&amp;rsquo;s website config):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;server &lt;span style=&#34;color:#666&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    listen 80;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    server_name adol.pw;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#007020;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#40a070&#34;&gt;301&lt;/span&gt; https://&lt;span style=&#34;color:#bb60d5&#34;&gt;$host$request_uri$is_args$args&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;server &lt;span style=&#34;color:#666&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    listen &lt;span style=&#34;color:#40a070&#34;&gt;443&lt;/span&gt; ssl;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    server_name adol.pw;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ssl on;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ssl_certificate /etc/ssl/adol_pw.pem;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ssl_certificate_key /etc/ssl/adol_pw.key;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you might see, I (like Rafa, again) chose to do a redirect if you access by
&lt;code&gt;http&lt;/code&gt; instead of &lt;code&gt;https&lt;/code&gt;, and at &lt;code&gt;ssl_certificate&lt;/code&gt; and &lt;code&gt;ssl_certificate_key&lt;/code&gt;
put the path for your certificate files. Now, do a:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo service nginx start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And you have now a valid, reliable and free SSL certificate!&lt;/p&gt;
&lt;h2 id=&#34;adding-new-domains&#34;&gt;Adding new domains&lt;/h2&gt;
&lt;p&gt;If you did everything but you forgot adding another domain, simply run
everything again but with another &lt;code&gt;-d DOMAIN_N&lt;/code&gt; flag.&lt;/p&gt;
&lt;h2 id=&#34;renewal&#34;&gt;Renewal&lt;/h2&gt;
&lt;p&gt;Recently I had to renew certs for the domains I registered the first time. If
you try to renew with the system I posted here, it fails. A fix for that is
renewing the certs by running this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ./letsencrypt-auto renew --manual-public-ip-logging-ok
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Why? I do not know. But &lt;a href=&#34;https://twitter.com/rmed_dev&#34;&gt;@rmed_dev&lt;/a&gt; told me that it does not
fail. If you execute without that flag, it is going to say this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2016-02-28 08:43:21,803:WARNING:letsencrypt.cli:Attempting to renew cert from /etc/letsencrypt/renewal/adol.pw.conf produced an unexpected error: Missing command line flag or config entry for this setting:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NOTE: The IP of this machine will be publicly logged as having requested this certificate. If you&amp;#39;re running letsencrypt in manual mode on a machine that is not your server, please ensure you&amp;#39;re okay with that.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Are you OK with your IP being logged?
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(You can set this with the --manual-public-ip-logging-ok flag). Skipping.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;acknowledge&#34;&gt;Acknowledge&lt;/h1&gt;
&lt;p&gt;This tutorial is provided by Rafael aka &lt;a href=&#34;https://twitter.com/rmed_dev&#34;&gt;@rmed_dev&lt;/a&gt;, which with
his permission I publish here. I modified to adapt it to my website and
improvements, by the way. Thank you for making it!&lt;/p&gt;
&lt;p&gt;Also, thank you, Tak, for the command for FreeBSD and Amazon Linux Ami
and the corrections you made to this article!&lt;/p&gt;
&lt;p&gt;And finally, thank you, Let&amp;rsquo;s Encrypt, for making the private beta available for
me. I am waiting for the final and public release too!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;UPDATE 20-OCT-2021: Install Certbot, this guide might be outdated.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;UPDATE 28-FEB-2016: Added &amp;ldquo;Adding new domains&amp;rdquo; and Renewal&amp;quot;. Some typos.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;UPDATE 09-DIC-2015: Minor fixes.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;UPDATE 04-DIC-2015: On 3rd december, Let&amp;rsquo;s Encrypt went to open beta for the
public, so I changed many stuff here to adapt to the new commandline and the
text itself.&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>¿No tienes más puertos SATA?</title>
      <link>https://adol.pw/2015/03/06/no-mas-sata/</link>
      <pubDate>Fri, 06 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2015/03/06/no-mas-sata/</guid>
      <description>&lt;p&gt;Conocí GNU/Linux hace mucho tiempo con Ubuntu. Desde que comencé a probarlo,
quedé bastante impresionado con lo que ofrecía respecto a Windows (a parte de
la filosofía Open Source que sigue, o seguía, depende de cómo se mire). Como
siempre, acababa volviendo a Windows. Poco a poco, fui obligándome a usar
GNU/Linux hasta que aguantase, hasta que este año me puse Debian en el portátil
que uso en la universidad.&lt;/p&gt;
&lt;p&gt;Después de estar usándolo unos meses, me encanta. He de decir que si, no será
Mac OS X, y tampoco tendrá 100k cosas como tiene Windows, pero me sigue
pareciendo un OS superior en muchos aspectos (entre ellos, que sea Open Source).&lt;/p&gt;
&lt;p&gt;Entonces me volvió a entrar la neura de ponerlo en mi PC de sobremesa (creo, ya,
la vez número 89.345). Problema: soy anti-particiones mezclando sistemas
operativos en un mismo HDD y no tenía más puertos SATA libres (tengo 4). Así que
me puse manos a la obra, y busqué este cacharro:&lt;/p&gt;





&lt;figure&gt;
    
        &lt;img src=&#34;https://adol.pw/2015/03/06/no-mas-sata/images/sata_adapter_1.jpg&#34;/&gt; &lt;/figure&gt;






&lt;figure&gt;
    
        &lt;img src=&#34;https://adol.pw/2015/03/06/no-mas-sata/images/sata_adapter_2.jpg&#34;/&gt; &lt;/figure&gt;

&lt;p&gt;Es un conversor PCIE To SATA &lt;strong&gt;Asmedia 106X SATA Controller Ver 0.951&lt;/strong&gt; (&lt;a href=&#34;https://www.ebay.es/sch/i.html?_from=R40&amp;amp;_trksid=p2050601.m570.l1313&amp;amp;_nkw=pcie+sata&amp;amp;_sacat=0&#34;&gt;link a
eBay&lt;/a&gt;). Permite añadir 2 puertos eSATA (nunca he usado el que viene
en la placa base, pero bueno, por si acaso), y 2 puertos SATA, a través del bus
PCI Express.&lt;/p&gt;
&lt;p&gt;Basta con conectarlo al bus PCIE, conectar el cable SATA del dispositivo en
cuestión, y encender el ordenador. Depende de qué se conecte, habrá o no que
retocar las opciones de la BIOS. En mi caso, como voy a usarlo para añadir un
HDD extra e instalar Debian, os muestro los pasos que he seguido para
configurarlo como primera opción de boot:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;En las opciones de los HDD disponibles, seleccionar como primer dispositivo
el HDD que va conectado al adaptador.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Después, en las opciones de &amp;ldquo;boot&amp;rdquo; de la BIOS, ponerlo como primer
dispositivo.&lt;/p&gt;

   
   
   
   
   &lt;figure&gt;
       
           &lt;img src=&#34;https://adol.pw/2015/03/06/no-mas-sata/images/bios_1.jpg&#34;/&gt; &lt;/figure&gt;


   
   
   
   
   &lt;figure&gt;
       
           &lt;img src=&#34;https://adol.pw/2015/03/06/no-mas-sata/images/bios_2.jpg&#34;/&gt; &lt;/figure&gt;

&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;¡Y ya está! Con esto ya queda perfectamente configurado. No obstante, este
dispositivo comprueba que el HDD que hay conectado tenga arranque propio (con
una distro GNU/Linux, el GRUB), y si lo tiene, inicia desde ahí automáticamente.&lt;/p&gt;
&lt;p&gt;Os dejo un vídeo para que veáis su funcionamiento:&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; margin-bottom: 1rem; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe sandbox=&#34;allow-scripts allow-popups&#34;
          style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34;
          src=&#34;https://video.hardlimit.com/videos/embed/b6kjaAhAoQ7fQhpUo5NgsQ?title=1&amp;warningTitle=0&amp;peertubeLink=0&#34;
          title=&#34;Peertube Video&#34;
          allowfullscreen&gt;
  &lt;/iframe&gt;
&lt;/div&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; margin-bottom: 1rem; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe sandbox=&#34;allow-scripts allow-popups&#34;
          style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34;
          src=&#34;https://Video.hardlimit.com/videos/embed/sGtsCYrsUXgFhdoEv6X9ps?title=1&amp;warningTitle=0&amp;peertubeLink=0&#34;
          title=&#34;Peertube Video&#34;
          allowfullscreen&gt;
  &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;NOTA: donde pone &amp;lsquo;Windows Vista&amp;rsquo; debería poner &amp;lsquo;Windows 8.1&amp;rsquo;, un error que no
corregí en el GRUB. Actualmente es &amp;lsquo;Windows 10&amp;rsquo;&lt;/em&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Cambiar &#39;Action keys&#39; en HP Pavilion DV6</title>
      <link>https://adol.pw/2014/05/27/cambiar-action-keys/</link>
      <pubDate>Tue, 27 May 2014 00:00:00 +0000</pubDate>
      
      <guid>https://adol.pw/2014/05/27/cambiar-action-keys/</guid>
      <description>&lt;p&gt;Todos los que sean propietarios de un portátil HP Pavilion DV6 (o modelos
similares), se encuentran las molestas teclas a la izquierda del todo (molestas
en el sentido de que les das sin querer). Abreviando, esas teclas, cuando las
pulsas, tienen registrada una acción, que se puede cambiar modificando el
registro en Windows.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;NOTA: no me hago responsable de lo que hagas, este tutorial será realizado
sobre un HP Pavilion DV6 3180es con Windows 7 x64 Home Premium&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Se accede al registro de Windows. Para ello, hay dos maneras rápidas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tecla de Windows + R (se nos abrirá la ventana de ejecutar), se escribe
&lt;code&gt;regedit&lt;/code&gt; y le damos a &amp;ldquo;Aceptar&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Inicio -&amp;gt; Ejecutar -&amp;gt; escribir &lt;code&gt;regedit&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se busca la ruta:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hay (en mi caso) 5 carpetas, numeradas en este orden: 15 - 16 - 17 - 18 - 7.
Cada carpeta corresponde a una de las 5 teclas que tengo en el portátil
mencionado al comienzo.&lt;/p&gt;

    
    
    
    
    &lt;figure&gt;
        
            &lt;img src=&#34;https://adol.pw/2014/05/27/cambiar-action-keys/images/regedit.png&#34;/&gt; &lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15:&lt;/strong&gt; corresponde a la asociación &lt;code&gt;mailto&lt;/code&gt;; es decir, ejecuta el
programa que tengamos por defecto para leer el correo electrónico
(Mozilla Thunderbird, MS Outlook, etc.).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;16:&lt;/strong&gt; ejecuta el programa asociado a la extensión &lt;code&gt;.cda&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;17:&lt;/strong&gt; ejecuta algo asociado a la dirección del registro
&lt;code&gt;::{20D04FE0-3AEA-1069-A2D8-08002B30309D}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;18:&lt;/strong&gt; ejecuta el programa &lt;code&gt;calc.exe&lt;/code&gt;, la calculadora.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;7:&lt;/strong&gt; es el botón que abre el programa asociado a &lt;code&gt;http&lt;/code&gt;, es decir, el
navegador (Mozilla Firefox, Google Chrome, etc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Una vez descritos todos los botones, se comienza a modificar alguno de
ellos. Personalmente, el botón que no tengo activo es el de &lt;code&gt;mailto&lt;/code&gt;, ya
que no uso ningún gestor de correo en el portátil. Los pasos que tenemos que
seguir son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Click derecho en la carpeta &lt;code&gt;AppKey&lt;/code&gt; -&amp;gt; Export, y se almacena en algún
sitio (será una copia de seguridad).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ir a la carpeta del botón que se quiera modificar modificar. En mi caso,
la 15.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click derecho encima de la clave y a &lt;em&gt;Cambiar nombre&lt;/em&gt;. Se escribirá
&lt;em&gt;ShellExecute&lt;/em&gt;.&lt;/p&gt;

      
      
      
      
      &lt;figure&gt;
          
              &lt;img src=&#34;https://adol.pw/2014/05/27/cambiar-action-keys/images/mod_key_regedit.png&#34;/&gt; &lt;/figure&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ahora, click derecho de nuevo (o doble click), y a &lt;em&gt;Modificar&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;En mi caso, voy a poner que se ejecute el programa &lt;em&gt;Sublime Text 2&lt;/em&gt;, así
que he copiado la ruta del &lt;em&gt;.exe&lt;/em&gt;, y la he puesto ahí.&lt;/p&gt;

      
      
      
      
      &lt;figure&gt;
          
              &lt;img src=&#34;https://adol.pw/2014/05/27/cambiar-action-keys/images/mod_value_regedit.png&#34;/&gt; &lt;/figure&gt;


      
      
      
      
      &lt;figure&gt;
          
              &lt;img src=&#34;https://adol.pw/2014/05/27/cambiar-action-keys/images/mod_regedit.png&#34;/&gt; &lt;/figure&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reiniciamos el ordenador.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si todo ha ido bien, se debería poder ejecutar el programa &lt;em&gt;Sublime Text 2&lt;/em&gt;
dandole a la tecla del correo que hay en el portátil. Lógicamente, poned lo que
vosotros queráis que haga la tecla. Lo mio es un ejemplo.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
