<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>glow.li: 2016</title>
        <description>A blog by glow.</description>
        <link>https://glow.li/tags/2016.xml</link>
        <atom:link href="https://glow.li/tags/2016.xml" rel="self" type="application/rss+xml"/>
        <generator>Glow.li Builder</generator>
            <item>
        <title>Android notifications for Profanity in Termux</title>
        <description>&lt;p&gt;&lt;img src="https://glow.li/media/images/profanity-termux-notification.webp?chash=Iebu81e145" alt="Screenshot" title="Screenshot" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/profanity-termux-notification.webp?chash=Iebu81e145 1500w, https://glow.li/media/images/1200/profanity-termux-notification.webp?chash=Iebu82f6d5 1200w, https://glow.li/media/images/1000/profanity-termux-notification.webp?chash=Iebu8aeeae 1000w, https://glow.li/media/images/800/profanity-termux-notification.webp?chash=Iebu81a184 800w, https://glow.li/media/images/700/profanity-termux-notification.webp?chash=Iebu8cf5e5 700w, https://glow.li/media/images/600/profanity-termux-notification.webp?chash=Iebu8007ba 600w, https://glow.li/media/images/500/profanity-termux-notification.webp?chash=Iebu82f9ee 500w, https://glow.li/media/images/400/profanity-termux-notification.webp?chash=Iebu8e6c57 400w, https://glow.li/media/images/300/profanity-termux-notification.webp?chash=Iebu87d2e7 300w, https://glow.li/media/images/200/profanity-termux-notification.webp?chash=Iebu889b30 200w, https://glow.li/media/images/100/profanity-termux-notification.webp?chash=Iebu84d381 100w" &gt;
Just &lt;a href="https://glow.li/posts/using-pixel-fonts-in-a-browser-without-font-smoothing/"&gt;like with weechat&lt;/a&gt; you can now receive Android notifications on &lt;a href="https://termux.com"&gt;Termux&lt;/a&gt; when you receive a message in &lt;a href="https://profanity-im.github.io/"&gt;Profanity&lt;/a&gt;. I wrote a small plugin to achive exactly that. You can download it from &lt;a href="https://github.com/Neo-Oli/profanity-termux-notification"&gt;GitHub&lt;/a&gt; and install it with &lt;code&gt;/plugins install ./profanity-termux-notification/termuxnotify.py&lt;/code&gt;. Read more about the installation requirements and configuration options on &lt;a href="https://github.com/Neo-Oli/profanity-termux-notification"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    <pubDate>Thu, 10 Nov 2016 00:00:00 +0000</pubDate>
    <link>https://glow.li/posts/android-notifications-for-profanity-with-termux/</link>
    <guid isPermaLink="false">1478736000</guid>
</item>

<item>
        <title>Access Termux via USB</title>
        <description>&lt;p&gt;I've been using &lt;a href="https://glow.li/posts/run-an-ssh-server-on-your-android-with-termux/"&gt;Termux over SSH&lt;/a&gt; for quite a while now. I've always done so over WiFi. This works reasonably well at home, where I control the IP Addresses. In other networks it was more annoying, because I always had to run &lt;code&gt;ifconfig&lt;/code&gt; first, to get my IP. But the big annoyances start when you want to use it in a place that has no WiFi network available. Previously, I used an Android tablet and a keyboard. With this I set up a WiFi direct connection between my phone. It's wonky and sometimes requires to restart both devices before working again, but it works.&lt;/p&gt;
&lt;p&gt;Then I got a laptop. Installed a proper Linux on it and tried to connect to Termux. I tried setting up WiFi Direct. But after an hour or so of messing around &lt;code&gt;wpa_supplicant&lt;/code&gt; I concluded that it's just too much of a hassle. But somewhere in the GitHub issues I came across the mention of connecting to Termux via ADB. The ADB shell is bad. I didn't actually manage to launch Termux programs via the ADB shell, but I heard that it's possible. But, and this is the point of this article, you can create port forwarding via ADB. This means that you can map a local port on your computer to a port on your Android device. Then you can open the 8022 port to access Termux via SSH over USB. This is awesome, when you're on the train, in a coffee shop or otherwise in a place with wonky or nonexistent WiFi.&lt;/p&gt;
&lt;h3 id="Here+is+how+you+do+it" name="Here+is+how+you+do+it"&gt;&lt;a class="hash-link" href="#Here+is+how+you+do+it"&gt;Here is how you do it&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="1.+You+need+ADB" name="1.+You+need+ADB"&gt;&lt;a class="hash-link" href="#1.+You+need+ADB"&gt;1. You need ADB&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Most operating systems have an ADB package. On my one I was simply able to install it with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install adb&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For other platforms you can check this site &lt;a href="https://www.xda-developers.com/install-adb-windows-macos-linux/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="2.+Create+your+port+forward" name="2.+Create+your+port+forward"&gt;&lt;a class="hash-link" href="#2.+Create+your+port+forward"&gt;2. Create your port forward&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This part is really simple as well, and that's key. I don't want to do 500 things every time I want to connect to my phone.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb forward tcp:8022 tcp:8022&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is really all it takes. The first instance of &lt;code&gt;tcp:8022&lt;/code&gt; is the local port you want to bind the remote port to. The second one is the port from your Android device. Because Termux' SSHD runs on port 8022 by default, this is what you want.&lt;/p&gt;
&lt;h4 id="3.+Connect+to+it" name="3.+Connect+to+it"&gt;&lt;a class="hash-link" href="#3.+Connect+to+it"&gt;3. Connect to it&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Now that your local port is bound to your Android device you can simply connect to localhost on your computer:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh localhost -p 8022
#This is were you put the local port
#(ie. the first one)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will connect you to your SSH Server. If you haven't set this up yet read &lt;a href="https://glow.li/posts/run-an-ssh-server-on-your-android-with-termux/"&gt;this&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You will need to run the ADB command after every restart or after you've unplugged your device. I set up an alias for myself for the following command sequence:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb forward tcp:8022 tcp:8022 &amp;amp;&amp;amp; adb forward tcp:8080 tcp:8080&amp;amp;&amp;amp; ssh localhost -p 8022
# This will also setup the port 8080, which is used by the httpd webserver on termux&lt;/code&gt;&lt;/pre&gt;</description>
    <pubDate>Tue, 20 Sep 2016 00:00:00 +0000</pubDate>
    <link>https://glow.li/posts/access-termux-via-usb/</link>
    <guid isPermaLink="false">1474329600</guid>
</item>

<item>
        <title>Pixel fonts in a browser without font smoothing</title>
        <description>&lt;p&gt;&lt;a href="https://squaregear.net/fonts/tinier.html"&gt;Tinier&lt;/a&gt; is a pretty cool font. It is a so called pixel font, and it is just about the smallest font I could find. The letters can be displayed at a font-size of &lt;code&gt;4px&lt;/code&gt;. This means that each character is only 3 pixels tall.&lt;/p&gt;
&lt;p&gt;&lt;span class="charfont-tinier"&gt;&lt;span class="charfont-t"&gt;T&lt;/span&gt;&lt;span class="charfont-h"&gt;h&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-w"&gt;w&lt;/span&gt;&lt;span class="charfont-i"&gt;i&lt;/span&gt;&lt;span class="charfont-z"&gt;z&lt;/span&gt;&lt;span class="charfont-a"&gt;a&lt;/span&gt;&lt;span class="charfont-r"&gt;r&lt;/span&gt;&lt;span class="charfont-d"&gt;d&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-q"&gt;q&lt;/span&gt;&lt;span class="charfont-u"&gt;u&lt;/span&gt;&lt;span class="charfont-i"&gt;i&lt;/span&gt;&lt;span class="charfont-c"&gt;c&lt;/span&gt;&lt;span class="charfont-k"&gt;k&lt;/span&gt;&lt;span class="charfont-l"&gt;l&lt;/span&gt;&lt;span class="charfont-y"&gt;y&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-j"&gt;j&lt;/span&gt;&lt;span class="charfont-i"&gt;i&lt;/span&gt;&lt;span class="charfont-n"&gt;n&lt;/span&gt;&lt;span class="charfont-x"&gt;x&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-d"&gt;d&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-t"&gt;t&lt;/span&gt;&lt;span class="charfont-h"&gt;h&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-g"&gt;g&lt;/span&gt;&lt;span class="charfont-n"&gt;n&lt;/span&gt;&lt;span class="charfont-o"&gt;o&lt;/span&gt;&lt;span class="charfont-m"&gt;m&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-s"&gt;s&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-b"&gt;b&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-f"&gt;f&lt;/span&gt;&lt;span class="charfont-o"&gt;o&lt;/span&gt;&lt;span class="charfont-r"&gt;r&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-t"&gt;t&lt;/span&gt;&lt;span class="charfont-h"&gt;h&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-y"&gt;y&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-v"&gt;v&lt;/span&gt;&lt;span class="charfont-a"&gt;a&lt;/span&gt;&lt;span class="charfont-p"&gt;p&lt;/span&gt;&lt;span class="charfont-o"&gt;o&lt;/span&gt;&lt;span class="charfont-r"&gt;r&lt;/span&gt;&lt;span class="charfont-i"&gt;i&lt;/span&gt;&lt;span class="charfont-z"&gt;z&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-d"&gt;d&lt;/span&gt;&lt;span class="charfont-dot"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class="charfont-big"&gt;
&lt;span class="charfont-tinier"&gt;&lt;span class="charfont-t"&gt;T&lt;/span&gt;&lt;span class="charfont-h"&gt;h&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-w"&gt;w&lt;/span&gt;&lt;span class="charfont-i"&gt;i&lt;/span&gt;&lt;span class="charfont-z"&gt;z&lt;/span&gt;&lt;span class="charfont-a"&gt;a&lt;/span&gt;&lt;span class="charfont-r"&gt;r&lt;/span&gt;&lt;span class="charfont-d"&gt;d&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-q"&gt;q&lt;/span&gt;&lt;span class="charfont-u"&gt;u&lt;/span&gt;&lt;span class="charfont-i"&gt;i&lt;/span&gt;&lt;span class="charfont-c"&gt;c&lt;/span&gt;&lt;span class="charfont-k"&gt;k&lt;/span&gt;&lt;span class="charfont-l"&gt;l&lt;/span&gt;&lt;span class="charfont-y"&gt;y&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-j"&gt;j&lt;/span&gt;&lt;span class="charfont-i"&gt;i&lt;/span&gt;&lt;span class="charfont-n"&gt;n&lt;/span&gt;&lt;span class="charfont-x"&gt;x&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-d"&gt;d&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-t"&gt;t&lt;/span&gt;&lt;span class="charfont-h"&gt;h&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-g"&gt;g&lt;/span&gt;&lt;span class="charfont-n"&gt;n&lt;/span&gt;&lt;span class="charfont-o"&gt;o&lt;/span&gt;&lt;span class="charfont-m"&gt;m&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-s"&gt;s&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-b"&gt;b&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-f"&gt;f&lt;/span&gt;&lt;span class="charfont-o"&gt;o&lt;/span&gt;&lt;span class="charfont-r"&gt;r&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-t"&gt;t&lt;/span&gt;&lt;span class="charfont-h"&gt;h&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-y"&gt;y&lt;/span&gt;&lt;span class="charfont-space"&gt; &lt;/span&gt;&lt;span class="charfont-v"&gt;v&lt;/span&gt;&lt;span class="charfont-a"&gt;a&lt;/span&gt;&lt;span class="charfont-p"&gt;p&lt;/span&gt;&lt;span class="charfont-o"&gt;o&lt;/span&gt;&lt;span class="charfont-r"&gt;r&lt;/span&gt;&lt;span class="charfont-i"&gt;i&lt;/span&gt;&lt;span class="charfont-z"&gt;z&lt;/span&gt;&lt;span class="charfont-e"&gt;e&lt;/span&gt;&lt;span class="charfont-d"&gt;d&lt;/span&gt;&lt;span class="charfont-dot"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;!--more--&gt;
&lt;p&gt;I think this is pretty cool, so I tried to implement this on my website for the footer blurb. It turns out though, that pixel fonts look absolutely hideous in modern browsers.
Here is how it looked:
&lt;img src="https://glow.li/media/images/tinier-sample-white.webp?chash=Iebu8bab4c" alt="Font sample" title="Font sample" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/tinier-sample-white.webp?chash=Iebu8bab4c 1500w, https://glow.li/media/images/1200/tinier-sample-white.webp?chash=Iebu8cd3a8 1200w, https://glow.li/media/images/1000/tinier-sample-white.webp?chash=Iebu8cd3a8 1000w, https://glow.li/media/images/800/tinier-sample-white.webp?chash=Iebu8cd3a8 800w, https://glow.li/media/images/700/tinier-sample-white.webp?chash=Iebu8cd3a8 700w, https://glow.li/media/images/600/tinier-sample-white.webp?chash=Iebu8cd3a8 600w, https://glow.li/media/images/500/tinier-sample-white.webp?chash=Iebu8cd3a8 500w, https://glow.li/media/images/400/tinier-sample-white.webp?chash=Iebu8cd3a8 400w, https://glow.li/media/images/300/tinier-sample-white.webp?chash=Iebu8cd3a8 300w, https://glow.li/media/images/200/tinier-sample-white.webp?chash=Iebu8cd3a8 200w, https://glow.li/media/images/100/tinier-sample-white.webp?chash=Iebu8cd3a8 100w" &gt;
&lt;img src="https://glow.li/media/images/tinier-sample-white.webp?chash=Iebu8bab4c" alt="Font sample" title="Font sample" class="pixel-zoom" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/tinier-sample-white.webp?chash=Iebu8bab4c 1500w, https://glow.li/media/images/1200/tinier-sample-white.webp?chash=Iebu8cd3a8 1200w, https://glow.li/media/images/1000/tinier-sample-white.webp?chash=Iebu8cd3a8 1000w, https://glow.li/media/images/800/tinier-sample-white.webp?chash=Iebu8cd3a8 800w, https://glow.li/media/images/700/tinier-sample-white.webp?chash=Iebu8cd3a8 700w, https://glow.li/media/images/600/tinier-sample-white.webp?chash=Iebu8cd3a8 600w, https://glow.li/media/images/500/tinier-sample-white.webp?chash=Iebu8cd3a8 500w, https://glow.li/media/images/400/tinier-sample-white.webp?chash=Iebu8cd3a8 400w, https://glow.li/media/images/300/tinier-sample-white.webp?chash=Iebu8cd3a8 300w, https://glow.li/media/images/200/tinier-sample-white.webp?chash=Iebu8cd3a8 200w, https://glow.li/media/images/100/tinier-sample-white.webp?chash=Iebu8cd3a8 100w" &gt;&lt;/p&gt;
&lt;p&gt;Do you see these hideous colored pixels? It ruins the pixel font. The footer was originally white on blue, where the problem was even worse:
&lt;img src="https://glow.li/media/images/tinier-sample-blue.webp?chash=Iebu875b03" alt="Font sample" title="Font sample" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/tinier-sample-blue.webp?chash=Iebu875b03 1500w, https://glow.li/media/images/1200/tinier-sample-blue.webp?chash=Iebu873f50 1200w, https://glow.li/media/images/1000/tinier-sample-blue.webp?chash=Iebu873f50 1000w, https://glow.li/media/images/800/tinier-sample-blue.webp?chash=Iebu873f50 800w, https://glow.li/media/images/700/tinier-sample-blue.webp?chash=Iebu873f50 700w, https://glow.li/media/images/600/tinier-sample-blue.webp?chash=Iebu873f50 600w, https://glow.li/media/images/500/tinier-sample-blue.webp?chash=Iebu873f50 500w, https://glow.li/media/images/400/tinier-sample-blue.webp?chash=Iebu873f50 400w, https://glow.li/media/images/300/tinier-sample-blue.webp?chash=Iebu873f50 300w, https://glow.li/media/images/200/tinier-sample-blue.webp?chash=Iebu873f50 200w, https://glow.li/media/images/100/tinier-sample-blue.webp?chash=Iebu873f50 100w" &gt;
&lt;img src="https://glow.li/media/images/tinier-sample-blue.webp?chash=Iebu875b03" alt="Font sample" title="Font sample" class="pixel-zoom" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/tinier-sample-blue.webp?chash=Iebu875b03 1500w, https://glow.li/media/images/1200/tinier-sample-blue.webp?chash=Iebu873f50 1200w, https://glow.li/media/images/1000/tinier-sample-blue.webp?chash=Iebu873f50 1000w, https://glow.li/media/images/800/tinier-sample-blue.webp?chash=Iebu873f50 800w, https://glow.li/media/images/700/tinier-sample-blue.webp?chash=Iebu873f50 700w, https://glow.li/media/images/600/tinier-sample-blue.webp?chash=Iebu873f50 600w, https://glow.li/media/images/500/tinier-sample-blue.webp?chash=Iebu873f50 500w, https://glow.li/media/images/400/tinier-sample-blue.webp?chash=Iebu873f50 400w, https://glow.li/media/images/300/tinier-sample-blue.webp?chash=Iebu873f50 300w, https://glow.li/media/images/200/tinier-sample-blue.webp?chash=Iebu873f50 200w, https://glow.li/media/images/100/tinier-sample-blue.webp?chash=Iebu873f50 100w" &gt;&lt;/p&gt;
&lt;p&gt;How it should look:
&lt;img src="https://glow.li/media/images/tinier-sample-sprite.webp?chash=Iebu86b0e7" alt="Font sample" title="Font sample" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/tinier-sample-sprite.webp?chash=Iebu86b0e7 1500w, https://glow.li/media/images/1200/tinier-sample-sprite.webp?chash=Iebu87c27d 1200w, https://glow.li/media/images/1000/tinier-sample-sprite.webp?chash=Iebu87c27d 1000w, https://glow.li/media/images/800/tinier-sample-sprite.webp?chash=Iebu87c27d 800w, https://glow.li/media/images/700/tinier-sample-sprite.webp?chash=Iebu87c27d 700w, https://glow.li/media/images/600/tinier-sample-sprite.webp?chash=Iebu87c27d 600w, https://glow.li/media/images/500/tinier-sample-sprite.webp?chash=Iebu87c27d 500w, https://glow.li/media/images/400/tinier-sample-sprite.webp?chash=Iebu87c27d 400w, https://glow.li/media/images/300/tinier-sample-sprite.webp?chash=Iebu87c27d 300w, https://glow.li/media/images/200/tinier-sample-sprite.webp?chash=Iebu87c27d 200w, https://glow.li/media/images/100/tinier-sample-sprite.webp?chash=Iebu87c27d 100w" &gt;
&lt;img src="https://glow.li/media/images/tinier-sample-sprite.webp?chash=Iebu86b0e7" alt="Font sample" title="Font sample" class="pixel-zoom" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/tinier-sample-sprite.webp?chash=Iebu86b0e7 1500w, https://glow.li/media/images/1200/tinier-sample-sprite.webp?chash=Iebu87c27d 1200w, https://glow.li/media/images/1000/tinier-sample-sprite.webp?chash=Iebu87c27d 1000w, https://glow.li/media/images/800/tinier-sample-sprite.webp?chash=Iebu87c27d 800w, https://glow.li/media/images/700/tinier-sample-sprite.webp?chash=Iebu87c27d 700w, https://glow.li/media/images/600/tinier-sample-sprite.webp?chash=Iebu87c27d 600w, https://glow.li/media/images/500/tinier-sample-sprite.webp?chash=Iebu87c27d 500w, https://glow.li/media/images/400/tinier-sample-sprite.webp?chash=Iebu87c27d 400w, https://glow.li/media/images/300/tinier-sample-sprite.webp?chash=Iebu87c27d 300w, https://glow.li/media/images/200/tinier-sample-sprite.webp?chash=Iebu87c27d 200w, https://glow.li/media/images/100/tinier-sample-sprite.webp?chash=Iebu87c27d 100w" &gt;
Nice, clean, black on white Pixels.&lt;/p&gt;
&lt;p&gt;As with any modern software, browser employ font smoothing. This is done so text looks good on a low DPI screen. It is done with anti aliasing and sub pixel rendering and for normal fonts this is pretty great, but for pixel fonts it looks terrible. There is no way for a font to disable it, so it usually has to be done at a software level. Some browsers have a setting for disabling font smoothing. This is obviously pretty useless, since I can't expect readers of my blog to have turned this off and made all normal fonts look bad except my tiny blurb.&lt;/p&gt;
&lt;h3 id="There+must+be+a+CSS+setting+right%3F" name="There+must+be+a+CSS+setting+right%3F"&gt;&lt;a class="hash-link" href="#There+must+be+a+CSS+setting+right%3F"&gt;There must be a CSS setting right?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Well, let me tell you about &lt;code&gt;font-smooth&lt;/code&gt;. It was present in early drafts of CSS3, but has been removed from the specification since. It only works on &lt;a href="https://caniuse.com/font-smooth"&gt;some browsers&lt;/a&gt; and only on the Mac OSX operating system. So it looks like there is no easy way to implement a pixel font without ugly rendering artifacts.&lt;/p&gt;
&lt;h3 id="But+why+don%27t+you+just+use+an+image%3F" name="But+why+don%27t+you+just+use+an+image%3F"&gt;&lt;a class="hash-link" href="#But+why+don%27t+you+just+use+an+image%3F"&gt;But why don't you just use an image?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Yes, I could just write my text in GIMP and upload it as a picture. But I want it to be dynamically generatable. I want to do it in good old HTML and CSS.&lt;/p&gt;
&lt;h3 id="So+I+have+decided+to+go+the+sprite+map+route+instead" name="So+I+have+decided+to+go+the+sprite+map+route+instead"&gt;&lt;a class="hash-link" href="#So+I+have+decided+to+go+the+sprite+map+route+instead"&gt;So I have decided to go the sprite map route instead&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://glow.li/media/images/tinier.webp?chash=Iebu895c56" alt="Font sample" title="Font sample" class="special-image-tinier" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/tinier.webp?chash=Iebu895c56 1500w, https://glow.li/media/images/1200/tinier.webp?chash=Iebu895c56 1200w, https://glow.li/media/images/1000/tinier.webp?chash=Iebu895c56 1000w, https://glow.li/media/images/800/tinier.webp?chash=Iebu895c56 800w, https://glow.li/media/images/700/tinier.webp?chash=Iebu895c56 700w, https://glow.li/media/images/600/tinier.webp?chash=Iebu895c56 600w, https://glow.li/media/images/500/tinier.webp?chash=Iebu895c56 500w, https://glow.li/media/images/400/tinier.webp?chash=Iebu895c56 400w, https://glow.li/media/images/300/tinier.webp?chash=Iebu895c56 300w, https://glow.li/media/images/200/tinier.webp?chash=Iebu895c56 200w, https://glow.li/media/images/100/tinier.webp?chash=Iebu895c56 100w" &gt;
Having it as a sprite map has many advantages including (and probably limited to):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can still wrap text around newlines&lt;/li&gt;
&lt;li&gt;You only have to have one image for any size and length of text.&lt;/li&gt;
&lt;li&gt;Because the original characters are still in the HTML you can select and copy it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is how the HTML of a very short text looks:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;span class="charfont-tinier"&amp;gt;&amp;lt;span class="charfont-o"&amp;gt;O&amp;lt;/span&amp;gt;&amp;lt;span class="charfont-l"&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class="charfont-i"&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see every letter is just a &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; with a special class and the original letter inside it. And since this is a &lt;a href="https://jekyllrb.com"&gt;Jekyll&lt;/a&gt; blog, I wrote a short ruby plugin to achieve this, but it would probably work really well in JavaScript as well.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;module Jekyll
    class Charfont &amp;lt; Liquid::Tag
        def initialize(tag_name, text, tokens)
            super
            html = "&amp;lt;span class=\"charfont-tinier\"&amp;gt;"
            text.upcase.split("").each do |i|
                if i == " "
                    classname="SP"
                elsif i == "."
                    classname="dot"
                else
                    classname=i
                end
                html = html + "&amp;lt;span class=\"charfont"+classname+"\" &amp;gt;" + i + "&amp;lt;/span&amp;gt;"
            end
            html = html + "&amp;lt;/span&amp;gt;"
            @output=html
        end
        def render(context)
            @output
        end
    end
end
Liquid::Template.register_tag('charfont', Jekyll::Charfont)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here is the accompanying CSS:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.charfont-tinier span {
    color: transparent;
    background-image: url("../media/images/tinier");
    margin-left: calc(1px * var(--scale));
    display: inline-block;
    background-size: calc(5px * var(--scale));
    width: calc(3px * var(--scale));
    height: calc(4px * var(--scale));
    overflow: hidden;
    background-repeat: no-repeat;
    image-rendering: optimizeSpeed;
    image-rendering: -moz-crisp-edges;
    image-rendering: -o-crisp-edges;
    image-rendering: -webkit-optimize-contrast;
    image-rendering: pixelated;
    image-rendering: optimize-contrast;
    -ms-interpolation-mode: nearest-neighbor
}
.charfont-tinier{
--scale:1;
}
.charfont-big .charfont-tinier{
--scale:5;
}
.charfont-tinier .charfontA {
    background-position: 0px calc(-0px * var(--scale));
}

.charfont-tinier .charfontB {
    background-position: 0px calc(-4px * var(--scale));
}

.charfont-tinier .charfontC {
    background-position: 0px calc(-8px * var(--scale));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can look at the whole CSS file &lt;a href="https://glow.li/css/charfont.css"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, this is a very complicated solution to a problem that really should be as simple as &lt;code&gt;font-smooth&lt;/code&gt;. And it still isn't prefect. Having it do proper line-wrapping would require a bit more complicated HTML and CSS. Also the &lt;code&gt;image-rendering&lt;/code&gt; part doesn't work on all browsers, so when text size is large it would look like this:
&lt;img src="https://glow.li/media/images/tinier-sample-sprite.webp?chash=Iebu86b0e7" alt="Font sample" title="Font sample" class="zoom" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/tinier-sample-sprite.webp?chash=Iebu86b0e7 1500w, https://glow.li/media/images/1200/tinier-sample-sprite.webp?chash=Iebu87c27d 1200w, https://glow.li/media/images/1000/tinier-sample-sprite.webp?chash=Iebu87c27d 1000w, https://glow.li/media/images/800/tinier-sample-sprite.webp?chash=Iebu87c27d 800w, https://glow.li/media/images/700/tinier-sample-sprite.webp?chash=Iebu87c27d 700w, https://glow.li/media/images/600/tinier-sample-sprite.webp?chash=Iebu87c27d 600w, https://glow.li/media/images/500/tinier-sample-sprite.webp?chash=Iebu87c27d 500w, https://glow.li/media/images/400/tinier-sample-sprite.webp?chash=Iebu87c27d 400w, https://glow.li/media/images/300/tinier-sample-sprite.webp?chash=Iebu87c27d 300w, https://glow.li/media/images/200/tinier-sample-sprite.webp?chash=Iebu87c27d 200w, https://glow.li/media/images/100/tinier-sample-sprite.webp?chash=Iebu87c27d 100w" &gt;&lt;/p&gt;
&lt;p&gt;Edit:&lt;/p&gt;
&lt;p&gt;Since writing this post Chrome has made some changes. It now enforces a minimum &lt;code&gt;font-size&lt;/code&gt; of 6px. Therefore my previous method of using &lt;code&gt;em&lt;/code&gt; and &lt;code&gt;font-size=1px&lt;/code&gt; no longer works. I've updated the code in this post to use a css variable to define scale. This way I can still enlarge the font with CSS.&lt;/p&gt;</description>
    <pubDate>Fri, 15 Jul 2016 00:00:00 +0000</pubDate>
    <link>https://glow.li/posts/using-pixel-fonts-in-a-browser-without-font-smoothing/</link>
    <guid isPermaLink="false">1468540800</guid>
</item>

<item>
        <title>I am moving on Saturday. There is so little time left but it is still so long until then</title>
        <description>&lt;p&gt;I am moving on Saturday. There is so little time left but it is still so long until then&lt;/p&gt;</description>
    <pubDate>Tue, 31 May 2016 19:10:05 +0000</pubDate>
    <link>https://glow.li/posts/short-747e1-I_am_moving_on_saturday._There_is_so_little_time_left_but_/</link>
    <guid isPermaLink="false">1464721805</guid>
</item>

<item>
        <title>alias sl=&amp;quot;apt install sl&amp;gt;/dev/null &amp;gt;&amp;amp;1; sl; apt remove sl -y &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&amp;quot;</title>
        <description>&lt;pre&gt;&lt;code class="language-bash"&gt;alias sl="apt install sl&amp;gt;/dev/null &amp;gt;&amp;amp;1; sl; apt remove sl -y &amp;gt;/dev/null 2&amp;gt;&amp;amp;1"&lt;/code&gt;&lt;/pre&gt;</description>
    <pubDate>Wed, 13 Apr 2016 16:33:28 +0000</pubDate>
    <link>https://glow.li/posts/short-dadb0-alias_slapt_install_slgtdevnull_2gtamp1_sl_apt_remove_sl_-/</link>
    <guid isPermaLink="false">1460565208</guid>
</item>

<item>
        <title>Pass variables from Termux to Tasker</title>
        <description>&lt;p&gt;I figured out that you can pass variables from Termux to a Tasker task. This example sets Android's volume to a value specified in Termux.&lt;/p&gt;
&lt;h3 id="Step+1%3A+Creating+the+script" name="Step+1%3A+Creating+the+script"&gt;&lt;a class="hash-link" href="#Step+1%3A+Creating+the+script"&gt;Step 1: Creating the script&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;volume.sh&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/data/data/com.termux/files/usr/bin/sh
#am broadcast --user 0 -a net.dinglish.tasker.[task name] -e [variable name] "[value]" &amp;gt; /dev/null
am broadcast --user 0 -a net.dinglish.tasker.volume -e volume "$1" &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="Step+2%3A+Create+a+Tasker+profile" name="Step+2%3A+Create+a+Tasker+profile"&gt;&lt;a class="hash-link" href="#Step+2%3A+Create+a+Tasker+profile"&gt;Step 2: Create a Tasker profile&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://glow.li/media/images/TaskerVolume1.webp?chash=Iebu8e88da" alt="Screenshot" title="Screenshot" class="right size-half" loading="lazy" sizes="(max-width:703px) 100vw, 750px" srcset="https://glow.li/media/images/TaskerVolume1.webp?chash=Iebu8e88da 1500w, https://glow.li/media/images/1200/TaskerVolume1.webp?chash=Iebu8ff9f6 1200w, https://glow.li/media/images/1000/TaskerVolume1.webp?chash=Iebu8ff9f6 1000w, https://glow.li/media/images/800/TaskerVolume1.webp?chash=Iebu8ff9f6 800w, https://glow.li/media/images/700/TaskerVolume1.webp?chash=Iebu87cd63 700w, https://glow.li/media/images/600/TaskerVolume1.webp?chash=Iebu8d6862 600w, https://glow.li/media/images/500/TaskerVolume1.webp?chash=Iebu889ab5 500w, https://glow.li/media/images/400/TaskerVolume1.webp?chash=Iebu8665b2 400w, https://glow.li/media/images/300/TaskerVolume1.webp?chash=Iebu808964 300w, https://glow.li/media/images/200/TaskerVolume1.webp?chash=Iebu89ec3d 200w, https://glow.li/media/images/100/TaskerVolume1.webp?chash=Iebu8264f8 100w" &gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new profile&lt;/li&gt;
&lt;li&gt;Choose "Event"&lt;/li&gt;
&lt;li&gt;In the "Select Event Category" dialog choose "System"-&amp;gt;"Intent Received"&lt;/li&gt;
&lt;li&gt;As Action define &lt;code&gt;net.dinglish.tasker.volume&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This profile will now be called whenever it receives the "volume" intent.&lt;/p&gt;
&lt;h3 id="Step+3%3A+Create+the+Task" name="Step+3%3A+Create+the+Task"&gt;&lt;a class="hash-link" href="#Step+3%3A+Create+the+Task"&gt;Step 3: Create the Task&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://glow.li/media/images/TaskerVolume2.webp?chash=Iebu824219" alt="Screenshot" title="Screenshot" class="right size-half" loading="lazy" sizes="(max-width:703px) 100vw, 750px" srcset="https://glow.li/media/images/TaskerVolume2.webp?chash=Iebu824219 1500w, https://glow.li/media/images/1200/TaskerVolume2.webp?chash=Iebu8c8317 1200w, https://glow.li/media/images/1000/TaskerVolume2.webp?chash=Iebu8c8317 1000w, https://glow.li/media/images/800/TaskerVolume2.webp?chash=Iebu8c8317 800w, https://glow.li/media/images/700/TaskerVolume2.webp?chash=Iebu870faa 700w, https://glow.li/media/images/600/TaskerVolume2.webp?chash=Iebu85c64d 600w, https://glow.li/media/images/500/TaskerVolume2.webp?chash=Iebu8a35f6 500w, https://glow.li/media/images/400/TaskerVolume2.webp?chash=Iebu81e763 400w, https://glow.li/media/images/300/TaskerVolume2.webp?chash=Iebu8034b8 300w, https://glow.li/media/images/200/TaskerVolume2.webp?chash=Iebu801974 200w, https://glow.li/media/images/100/TaskerVolume2.webp?chash=Iebu860c7e 100w" &gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tap "New Task" and give it a name&lt;/li&gt;
&lt;li&gt;Tap + to add a new Action&lt;/li&gt;
&lt;li&gt;Choose "Audio"-&amp;gt;"Media Volume"&lt;/li&gt;
&lt;li&gt;Under "Level" tap the icon with the crossing arrows to switch to text mode.&lt;/li&gt;
&lt;li&gt;Enter &lt;code&gt;%volume&lt;/code&gt; as a value&lt;/li&gt;
&lt;li&gt;You need to exit Tasker for the changes to take effect.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="Step+4%3A+Run+the+script" name="Step+4%3A+Run+the+script"&gt;&lt;a class="hash-link" href="#Step+4%3A+Run+the+script"&gt;Step 4: Run the script&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can now run the script. It will send an intent to Tasker. It will put the first argument as new volume, which has to be an integer from 0-15.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./volume.sh 4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is only a simple example of what you can do with variables. Let me know what you come up with.&lt;/p&gt;</description>
    <pubDate>Sun, 03 Apr 2016 00:00:00 +0000</pubDate>
    <link>https://glow.li/posts/pass-variables-from-termux-to-tasker/</link>
    <guid isPermaLink="false">1459641600</guid>
</item>

<item>
        <title>Display output of a bash script on a widget</title>
        <description>&lt;p&gt;&lt;a href="https://glow.li/media/images/big/termuxwidget1-big.webp?chash=Iebu876e0f"&gt;&lt;img src="https://glow.li/media/images/termuxwidget1.webp?chash=Iebu832750" alt="Screenshot" title="Screenshot" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/termuxwidget1.webp?chash=Iebu832750 1500w, https://glow.li/media/images/1200/termuxwidget1.webp?chash=Iebu8faa7b 1200w, https://glow.li/media/images/1000/termuxwidget1.webp?chash=Iebu8faa7b 1000w, https://glow.li/media/images/800/termuxwidget1.webp?chash=Iebu8faa7b 800w, https://glow.li/media/images/700/termuxwidget1.webp?chash=Iebu8faa7b 700w, https://glow.li/media/images/600/termuxwidget1.webp?chash=Iebu8faa7b 600w, https://glow.li/media/images/500/termuxwidget1.webp?chash=Iebu8faa7b 500w, https://glow.li/media/images/400/termuxwidget1.webp?chash=Iebu855039 400w, https://glow.li/media/images/300/termuxwidget1.webp?chash=Iebu82a7ab 300w, https://glow.li/media/images/200/termuxwidget1.webp?chash=Iebu8f0603 200w, https://glow.li/media/images/100/termuxwidget1.webp?chash=Iebu81bea0 100w" &gt;&lt;/a&gt;
I managed to build a bridge between &lt;a href="https://termux.com/"&gt;Termux&lt;/a&gt; and &lt;a href="https://play.google.com/store/apps/details?id=de.devmil.minimaltext"&gt;Minimalistic Text&lt;/a&gt; using &lt;a href="https://tasker.joaoapps.com/"&gt;Tasker&lt;/a&gt;. I use it to display the last 20 lines of the &lt;a href="https://gitter.im/termux/termux"&gt;#termux irc channel&lt;/a&gt; as you can see in the picture.
I've done it without having Tasker check a file every two minutes. The Task is directly called from the script.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This tutorial is not Termux specific and should work with any terminal emulator&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="Step+1%3A+Creating+the+script" name="Step+1%3A+Creating+the+script"&gt;&lt;a class="hash-link" href="#Step+1%3A+Creating+the+script"&gt;Step 1: Creating the script&lt;/a&gt;&lt;/h3&gt;
&lt;!-- more --&gt;
&lt;p&gt;All you have to do is write your output to a file in &lt;code&gt;/sdcard/&lt;/code&gt;. In this example I am grabbing the last 20 lines of log of the &lt;a href="https://gitter.im/termux/termux"&gt;#termux irc channel&lt;/a&gt; from my server.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;while true; do
  # You can basically add your own commands here. They just have to write
  # their output to `/sdcard/widget`

  # For maximum battery and bandwidth efficiency tail and cut are
  # executed on the server
  # the cut command removes the timestamps
  #
  # for this to work you need to have placed your public key on the server.
  # Otherwise you will need to enter your password every two minutes
  ssh user@example.com "cat ~/.weechat/logs/irc.freenode.#termux.weechatlog |tail -n 20 | cut -c 21-"&amp;gt;/sdcard/widget

  # This sends an Intent. This is how we'll call the Tasker task which
  # updates the widget. "net.dinglish.tasker" has to be there every
  # time for tasker to receive the intent. The last part is the name
  # of the intent which you can change if you want more than one.
  # This normally produces a bit of useless output. I am removing #
  #that with `&amp;gt;/dev/null`
  am broadcast -a net.dinglish.tasker.updatewidget --user 0 &amp;gt;/dev/null

  # sleep for 120 seconds. How often it should update the widget.
  sleep 120
done&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you run this it will download the last 20 lines of the log from a server, paste it into &lt;code&gt;/sdcard/widget&lt;/code&gt; and call Tasker with an Intent.&lt;/p&gt;
&lt;p&gt;You should also create the file &lt;code&gt;/sdcard/widget&lt;/code&gt; now. Simply do &lt;code&gt;touch /sdcard/widget&lt;/code&gt;.
&lt;img src="https://glow.li/media/images/termuxwidget2.webp?chash=Iebu85f8a9" alt="Screenshot" title="Screenshot" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/termuxwidget2.webp?chash=Iebu85f8a9 1500w, https://glow.li/media/images/1200/termuxwidget2.webp?chash=Iebu884cb8 1200w, https://glow.li/media/images/1000/termuxwidget2.webp?chash=Iebu884cb8 1000w, https://glow.li/media/images/800/termuxwidget2.webp?chash=Iebu884cb8 800w, https://glow.li/media/images/700/termuxwidget2.webp?chash=Iebu884cb8 700w, https://glow.li/media/images/600/termuxwidget2.webp?chash=Iebu884cb8 600w, https://glow.li/media/images/500/termuxwidget2.webp?chash=Iebu884cb8 500w, https://glow.li/media/images/400/termuxwidget2.webp?chash=Iebu884cb8 400w, https://glow.li/media/images/300/termuxwidget2.webp?chash=Iebu878cc7 300w, https://glow.li/media/images/200/termuxwidget2.webp?chash=Iebu837023 200w, https://glow.li/media/images/100/termuxwidget2.webp?chash=Iebu8b9674 100w" &gt;{ .right}&lt;/p&gt;
&lt;h3 id="Step+2%3A+Create+a+Tasker+profile" name="Step+2%3A+Create+a+Tasker+profile"&gt;&lt;a class="hash-link" href="#Step+2%3A+Create+a+Tasker+profile"&gt;Step 2: Create a Tasker profile&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Create a new profile&lt;/li&gt;
&lt;li&gt;Choose "Event"&lt;/li&gt;
&lt;li&gt;In the "Select Event Category" dialog choose "System"-&amp;gt;"Intent Received"&lt;/li&gt;
&lt;li&gt;As Action define &lt;code&gt;net.dinglish.tasker.updatewidget&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This profile will now be called whenever it recieves the "updatewidget" intent. This is a usefull way to extend the functionality of Termux. I also use it to kick of some &lt;a href="https://play.google.com/store/apps/details?id=dk.tacit.android.foldersync.lite"&gt;Foldersync&lt;/a&gt; jobs from the terminal.&lt;/p&gt;
&lt;h3 id="Step+3%3A+Create+the+Task" name="Step+3%3A+Create+the+Task"&gt;&lt;a class="hash-link" href="#Step+3%3A+Create+the+Task"&gt;Step 3: Create the Task&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://glow.li/media/images/termuxwidget3.webp?chash=Iebu846bdf" alt="Screenshot" title="Screenshot" class="right size-half" loading="lazy" sizes="(max-width:703px) 100vw, 750px" srcset="https://glow.li/media/images/termuxwidget3.webp?chash=Iebu846bdf 1500w, https://glow.li/media/images/1200/termuxwidget3.webp?chash=Iebu88f235 1200w, https://glow.li/media/images/1000/termuxwidget3.webp?chash=Iebu88f235 1000w, https://glow.li/media/images/800/termuxwidget3.webp?chash=Iebu88f235 800w, https://glow.li/media/images/700/termuxwidget3.webp?chash=Iebu88f235 700w, https://glow.li/media/images/600/termuxwidget3.webp?chash=Iebu88f235 600w, https://glow.li/media/images/500/termuxwidget3.webp?chash=Iebu88f235 500w, https://glow.li/media/images/400/termuxwidget3.webp?chash=Iebu88f235 400w, https://glow.li/media/images/300/termuxwidget3.webp?chash=Iebu8b3a95 300w, https://glow.li/media/images/200/termuxwidget3.webp?chash=Iebu82abf2 200w, https://glow.li/media/images/100/termuxwidget3.webp?chash=Iebu8db09b 100w" &gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tap "New Task" and give it a name&lt;/li&gt;
&lt;li&gt;Tap + to add a new Action&lt;/li&gt;
&lt;li&gt;Choose "File"-&amp;gt;"Read File"&lt;/li&gt;
&lt;li&gt;Tap 🔍 and choose &lt;code&gt;/sdcard/widget&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Under "To Var" enter &lt;code&gt;%Widget&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tap + again to add another new Action&lt;/li&gt;
&lt;li&gt;Choose "Plugin"-&amp;gt;"Minimalistic Text"-&amp;gt;"Minimalistic Text"&lt;/li&gt;
&lt;li&gt;Click the pen to edit the configuration&lt;/li&gt;
&lt;li&gt;Enter &lt;code&gt;%Widget&lt;/code&gt; for both variable name and variable content&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="Step+4%3A+Configure+Minimalistic+Text" name="Step+4%3A+Configure+Minimalistic+Text"&gt;&lt;a class="hash-link" href="#Step+4%3A+Configure+Minimalistic+Text"&gt;Step 4: Configure Minimalistic Text&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Add a Minimalistic Text widget to your homescreen&lt;/li&gt;
&lt;li&gt;Choose any preset&lt;/li&gt;
&lt;li&gt;In the "layout" tab remove remove all rows. Now you have a blank widget&lt;/li&gt;
&lt;li&gt;Add a new element with +&lt;/li&gt;
&lt;li&gt;Switch "Misc" Tab and tick "Locale variable"&lt;/li&gt;
&lt;li&gt;Tap "OK"&lt;/li&gt;
&lt;li&gt;Click on the new "Locale variable" element&lt;/li&gt;
&lt;li&gt;In the popup enter &lt;code&gt;%Widget&lt;/code&gt; as a the "Variable name"&lt;/li&gt;
&lt;li&gt;"OK" and Save&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://glow.li/media/images/termuxwidget5.webp?chash=Iebu8c0ca4" alt="Screenshot" title="Screenshot" class="inline" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/termuxwidget5.webp?chash=Iebu8c0ca4 1500w, https://glow.li/media/images/1200/termuxwidget5.webp?chash=Iebu8ec65c 1200w, https://glow.li/media/images/1000/termuxwidget5.webp?chash=Iebu8ec65c 1000w, https://glow.li/media/images/800/termuxwidget5.webp?chash=Iebu8ec65c 800w, https://glow.li/media/images/700/termuxwidget5.webp?chash=Iebu8ec65c 700w, https://glow.li/media/images/600/termuxwidget5.webp?chash=Iebu8ec65c 600w, https://glow.li/media/images/500/termuxwidget5.webp?chash=Iebu8ec65c 500w, https://glow.li/media/images/400/termuxwidget5.webp?chash=Iebu8ec65c 400w, https://glow.li/media/images/300/termuxwidget5.webp?chash=Iebu825bae 300w, https://glow.li/media/images/200/termuxwidget5.webp?chash=Iebu80b8c7 200w, https://glow.li/media/images/100/termuxwidget5.webp?chash=Iebu830122 100w" &gt;
&lt;img src="https://glow.li/media/images/termuxwidget4.webp?chash=Iebu89d038" alt="Screenshot" title="Screenshot" class="inline" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/termuxwidget4.webp?chash=Iebu89d038 1500w, https://glow.li/media/images/1200/termuxwidget4.webp?chash=Iebu871916 1200w, https://glow.li/media/images/1000/termuxwidget4.webp?chash=Iebu871916 1000w, https://glow.li/media/images/800/termuxwidget4.webp?chash=Iebu871916 800w, https://glow.li/media/images/700/termuxwidget4.webp?chash=Iebu871916 700w, https://glow.li/media/images/600/termuxwidget4.webp?chash=Iebu871916 600w, https://glow.li/media/images/500/termuxwidget4.webp?chash=Iebu871916 500w, https://glow.li/media/images/400/termuxwidget4.webp?chash=Iebu871916 400w, https://glow.li/media/images/300/termuxwidget4.webp?chash=Iebu8a7454 300w, https://glow.li/media/images/200/termuxwidget4.webp?chash=Iebu8b822b 200w, https://glow.li/media/images/100/termuxwidget4.webp?chash=Iebu8ef637 100w" &gt;&lt;/p&gt;
&lt;h3 id="Step+5%3A+Run+the+script" name="Step+5%3A+Run+the+script"&gt;&lt;a class="hash-link" href="#Step+5%3A+Run+the+script"&gt;Step 5: Run the script&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Now you can run the script in Termux. Your widget should get updated right away.&lt;/p&gt;</description>
    <pubDate>Tue, 16 Feb 2016 00:01:00 +0000</pubDate>
    <link>https://glow.li/posts/display-output-of-a-bash-script-on-a-widget/</link>
    <guid isPermaLink="false">1455580860</guid>
</item>

<item>
        <title>Use your current location for wego in Termux</title>
        <description>&lt;p&gt;&lt;img src="https://glow.li/media/images/wego-screenshot1.webp?chash=Iebu81a704" alt="Screenshot" title="Screenshot" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/wego-screenshot1.webp?chash=Iebu81a704 1500w, https://glow.li/media/images/1200/wego-screenshot1.webp?chash=Iebu852c84 1200w, https://glow.li/media/images/1000/wego-screenshot1.webp?chash=Iebu8a1edc 1000w, https://glow.li/media/images/800/wego-screenshot1.webp?chash=Iebu8b0acd 800w, https://glow.li/media/images/700/wego-screenshot1.webp?chash=Iebu876941 700w, https://glow.li/media/images/600/wego-screenshot1.webp?chash=Iebu810616 600w, https://glow.li/media/images/500/wego-screenshot1.webp?chash=Iebu847a62 500w, https://glow.li/media/images/400/wego-screenshot1.webp?chash=Iebu88e6cf 400w, https://glow.li/media/images/300/wego-screenshot1.webp?chash=Iebu81a278 300w, https://glow.li/media/images/200/wego-screenshot1.webp?chash=Iebu84a8db 200w, https://glow.li/media/images/100/wego-screenshot1.webp?chash=Iebu8d641a 100w" &gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/schachmat/wego"&gt;Wego&lt;/a&gt; is a pretty cool weather client for the terminal.&lt;/p&gt;
&lt;p&gt;You also need &lt;a href="https://f-droid.org/en/packages/com.termux.api/"&gt;termux-api&lt;/a&gt; and the &lt;code&gt;jq&lt;/code&gt; package.&lt;/p&gt;
&lt;p&gt;Now you can run the following command to display the weather report for your current location.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;loc=$(termux-location -p network)&amp;amp;&amp;amp;wego "$(echo $loc | jq .latitude),$(echo $loc | jq .longitude)"&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="Wego+on+termux" name="Wego+on+termux"&gt;&lt;a class="hash-link" href="#Wego+on+termux"&gt;Wego on termux&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For wego to work you must set the WEGORC environment variable. You probably want to do this in your shells startup script.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export WEGORC=$HOME/.wegorc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Otherwise it installs just fine if you follow the instructions.&lt;/p&gt;
&lt;h3 id="Wttr.in" name="Wttr.in"&gt;&lt;a class="hash-link" href="#Wttr.in"&gt;Wttr.in&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you don't want to go through the hassle of installing wego, you can just use &lt;a href="https://wttr.in"&gt;wttr.in&lt;/a&gt; instead. &lt;a href="https://wttr.in"&gt;Wttr.in&lt;/a&gt; is an implementation of wego that can be called with just &lt;code&gt;curl wttr.in&lt;/code&gt; to get the current weather. If you don't want to rely on IP Geo location you can also use the same script for &lt;a href="https://wttr.in"&gt;wttr.in&lt;/a&gt; instead of wego.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;loc=$(termux-location -p network)&amp;amp;&amp;amp;curl wttr.in/$(echo $loc | jq .latitude),$(echo $loc | jq .longitude)&lt;/code&gt;&lt;/pre&gt;</description>
    <pubDate>Tue, 16 Feb 2016 00:00:00 +0000</pubDate>
    <link>https://glow.li/posts/use-your-current-location-for-wego-in-termux/</link>
    <guid isPermaLink="false">1455580800</guid>
</item>

<item>
        <title>Carpaccio really isn&amp;#039;t as fancy when it comes in a plastic tray.</title>
        <description>&lt;p&gt;Carpaccio really isn't as fancy when it comes in a plastic tray.&lt;/p&gt;</description>
    <pubDate>Thu, 21 Jan 2016 17:21:27 +0000</pubDate>
    <link>https://glow.li/posts/short-94a09-Carpaccio_really_isnt_as_fancy_when_it_comes_in_a_plastic_/</link>
    <guid isPermaLink="false">1453396887</guid>
</item>

<item>
        <title>I have a really big scarf.</title>
        <description>&lt;p&gt;I have a really big scarf.&lt;/p&gt;</description>
    <pubDate>Thu, 21 Jan 2016 06:59:43 +0000</pubDate>
    <link>https://glow.li/posts/short-bf92a-I_have_a_really_big_scarf./</link>
    <guid isPermaLink="false">1453359583</guid>
</item>

<item>
        <title>Compile aclock on Termux</title>
        <description>&lt;p&gt;&lt;img src="https://glow.li/media/images/Screenshot-aclock.webp?chash=Iebu8cd86d" alt="Screenshot" title="Screenshot" class="right size-half" loading="lazy" sizes="(max-width:703px) 100vw, 750px" srcset="https://glow.li/media/images/Screenshot-aclock.webp?chash=Iebu8cd86d 1500w, https://glow.li/media/images/1200/Screenshot-aclock.webp?chash=Iebu848627 1200w, https://glow.li/media/images/1000/Screenshot-aclock.webp?chash=Iebu848627 1000w, https://glow.li/media/images/800/Screenshot-aclock.webp?chash=Iebu848627 800w, https://glow.li/media/images/700/Screenshot-aclock.webp?chash=Iebu848627 700w, https://glow.li/media/images/600/Screenshot-aclock.webp?chash=Iebu848627 600w, https://glow.li/media/images/500/Screenshot-aclock.webp?chash=Iebu848627 500w, https://glow.li/media/images/400/Screenshot-aclock.webp?chash=Iebu848627 400w, https://glow.li/media/images/300/Screenshot-aclock.webp?chash=Iebu8e2c42 300w, https://glow.li/media/images/200/Screenshot-aclock.webp?chash=Iebu819fe2 200w, https://glow.li/media/images/100/Screenshot-aclock.webp?chash=Iebu8a69b4 100w" &gt;
&lt;a href="https://github.com/tenox7/aclock"&gt;Aclock&lt;/a&gt; is a another clock program, but this time it's an analog clock.&lt;/p&gt;
&lt;p&gt;To compile it on &lt;a href="https://termux.dev/"&gt;Termux&lt;/a&gt; you'll need to downloaded the source.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://raw.githubusercontent.com/tenox7/aclock/master/sources/aclock-unix-curses.c&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You'll also need the &lt;code&gt;ncurses-dev&lt;/code&gt; package.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install ncurses-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you simply have to compile it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcc aclock-unix-curses.c -o aclock -lncurses -lm&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After that you can simply run it with &lt;code&gt;./aclock&lt;/code&gt;.&lt;/p&gt;</description>
    <pubDate>Sun, 17 Jan 2016 00:00:00 +0000</pubDate>
    <link>https://glow.li/posts/compiling-aclock-on-termux/</link>
    <guid isPermaLink="false">1452988800</guid>
</item>

<item>
        <title>Compile Stag on Termux</title>
        <description>&lt;p&gt;&lt;strong&gt;This post is now obsolete. You can install &lt;code&gt;stag&lt;/code&gt; from the repository.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/seenaburns/stag"&gt;Stag&lt;/a&gt; is a cool little programm that generates a bar graph.
&lt;img src="https://glow.li/media/images/Screenshot-STAG-1.webp?chash=Iebu8f0aba" alt="Sreenshot" title="Sreenshot" class="size-half" loading="lazy" sizes="(max-width:703px) 100vw, 750px" srcset="https://glow.li/media/images/Screenshot-STAG-1.webp?chash=Iebu8f0aba 1500w, https://glow.li/media/images/1200/Screenshot-STAG-1.webp?chash=Iebu83b5a9 1200w, https://glow.li/media/images/1000/Screenshot-STAG-1.webp?chash=Iebu83b5a9 1000w, https://glow.li/media/images/800/Screenshot-STAG-1.webp?chash=Iebu83b5a9 800w, https://glow.li/media/images/700/Screenshot-STAG-1.webp?chash=Iebu83b5a9 700w, https://glow.li/media/images/600/Screenshot-STAG-1.webp?chash=Iebu83b5a9 600w, https://glow.li/media/images/500/Screenshot-STAG-1.webp?chash=Iebu83b5a9 500w, https://glow.li/media/images/400/Screenshot-STAG-1.webp?chash=Iebu83b5a9 400w, https://glow.li/media/images/300/Screenshot-STAG-1.webp?chash=Iebu898353 300w, https://glow.li/media/images/200/Screenshot-STAG-1.webp?chash=Iebu8cb80b 200w, https://glow.li/media/images/100/Screenshot-STAG-1.webp?chash=Iebu8cf1a8 100w" &gt;&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;&lt;img src="https://glow.li/media/images/Screenshot-STAG-2.webp?chash=Iebu8a85e5" alt="Screemshot" title="Screemshot" class="size-half" loading="lazy" sizes="(max-width:703px) 100vw, 750px" srcset="https://glow.li/media/images/Screenshot-STAG-2.webp?chash=Iebu8a85e5 1500w, https://glow.li/media/images/1200/Screenshot-STAG-2.webp?chash=Iebu83f17e 1200w, https://glow.li/media/images/1000/Screenshot-STAG-2.webp?chash=Iebu83f17e 1000w, https://glow.li/media/images/800/Screenshot-STAG-2.webp?chash=Iebu83f17e 800w, https://glow.li/media/images/700/Screenshot-STAG-2.webp?chash=Iebu83f17e 700w, https://glow.li/media/images/600/Screenshot-STAG-2.webp?chash=Iebu83f17e 600w, https://glow.li/media/images/500/Screenshot-STAG-2.webp?chash=Iebu83f17e 500w, https://glow.li/media/images/400/Screenshot-STAG-2.webp?chash=Iebu83f17e 400w, https://glow.li/media/images/300/Screenshot-STAG-2.webp?chash=Iebu85cff8 300w, https://glow.li/media/images/200/Screenshot-STAG-2.webp?chash=Iebu8c31f3 200w, https://glow.li/media/images/100/Screenshot-STAG-2.webp?chash=Iebu88ae88 100w" &gt;&lt;/p&gt;
&lt;p&gt;To compile it on &lt;a href="https://termux.dev/"&gt;Termux&lt;/a&gt; you'll need to downloaded the sources from GitHub.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/seenaburns/stag.git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To compile you need to install the &lt;code&gt;ncurses-dev&lt;/code&gt; package.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install ncurses-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Open the stag.c file and change line 90 from &lt;code&gt;char opt&lt;/code&gt; to &lt;code&gt;signed char opt&lt;/code&gt;, otherwise it will throw an error during compilation. You'll also need to make a change to the Makefile, so that the right compiler is used. Change line 1 from &lt;code&gt;CC ?= gcc&lt;/code&gt; to &lt;code&gt;cc = gcc&lt;/code&gt;.
After that you can simply use &lt;code&gt;make&lt;/code&gt; to compile and install it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make
make install&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="Examples" name="Examples"&gt;&lt;a class="hash-link" href="#Examples"&gt;Examples&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="CPU+usage+statisitc" name="CPU+usage+statisitc"&gt;&lt;a class="hash-link" href="#CPU+usage+statisitc"&gt;CPU usage statisitc&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;while true; do top -bn1 | grep "CPU:" -m 1 | cut -f1 -d"." | cut -f2 -d" " ;sleep 1; done | stag -t "CPU"&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="Android+battery+status" name="Android+battery+status"&gt;&lt;a class="hash-link" href="#Android+battery+status"&gt;Android battery status&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;while true; do termux-battery-status | jq .percentage;sleep 60; done | stag -t "Battery Stats"&lt;/code&gt;&lt;/pre&gt;</description>
    <pubDate>Sat, 16 Jan 2016 00:00:00 +0000</pubDate>
    <link>https://glow.li/posts/compiling-stag-on-termux/</link>
    <guid isPermaLink="false">1452902400</guid>
</item>

<item>
        <title>Compile tty-clock on Termux</title>
        <description>&lt;p&gt;&lt;strong&gt;This post is now obsolete. You can install &lt;code&gt;tty-clock&lt;/code&gt; from the repository.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://glow.li/media/images/Screenshot-tty-clock.webp?chash=Iebu889fa8" alt="Screenshot" title="Screenshot" class="right size-half" loading="lazy" sizes="(max-width:703px) 100vw, 750px" srcset="https://glow.li/media/images/Screenshot-tty-clock.webp?chash=Iebu889fa8 1500w, https://glow.li/media/images/1200/Screenshot-tty-clock.webp?chash=Iebu8884d3 1200w, https://glow.li/media/images/1000/Screenshot-tty-clock.webp?chash=Iebu8884d3 1000w, https://glow.li/media/images/800/Screenshot-tty-clock.webp?chash=Iebu8884d3 800w, https://glow.li/media/images/700/Screenshot-tty-clock.webp?chash=Iebu8884d3 700w, https://glow.li/media/images/600/Screenshot-tty-clock.webp?chash=Iebu8884d3 600w, https://glow.li/media/images/500/Screenshot-tty-clock.webp?chash=Iebu8884d3 500w, https://glow.li/media/images/400/Screenshot-tty-clock.webp?chash=Iebu8884d3 400w, https://glow.li/media/images/300/Screenshot-tty-clock.webp?chash=Iebu865f03 300w, https://glow.li/media/images/200/Screenshot-tty-clock.webp?chash=Iebu8ed21f 200w, https://glow.li/media/images/100/Screenshot-tty-clock.webp?chash=Iebu80a617 100w" &gt;
&lt;a href="https://github.com/xorg62/tty-clock"&gt;Tty-clock&lt;/a&gt; is a small program that displays a digital clock.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;To compile it on &lt;a href="https://termux.com/"&gt;Termux&lt;/a&gt; you'll need to download the sources from GitHub.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/xorg62/tty-clock.git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You'll also need the &lt;code&gt;ncurses-dev&lt;/code&gt; package.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install ncurses-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sadly, compiling with &lt;code&gt;make&lt;/code&gt; doesn't really work with this one, I managed to compile it with the following command.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcc -Wall -Werror -Wextra -std=c99 -pedantic -Wno-unused-parameter -lncurses -o tty-clock ttyclock.c&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can then install it with &lt;code&gt;make install&lt;/code&gt;.&lt;/p&gt;</description>
    <pubDate>Sat, 16 Jan 2016 00:00:00 +0000</pubDate>
    <link>https://glow.li/posts/compiling-tty-clock-on-termux/</link>
    <guid isPermaLink="false">1452902400</guid>
</item>

<item>
        <title>My blog now also runs on Jekyll. Can I sit at the cool kids table now?</title>
        <description>&lt;p&gt;My blog now also runs on Jekyll. Can I sit at the cool kids table now?&lt;/p&gt;</description>
    <pubDate>Thu, 07 Jan 2016 16:11:52 +0000</pubDate>
    <link>https://glow.li/posts/short-559f0-My_blog_now_also_runs_on_Jekyll._Can_I_sit_at_the_cool_kid/</link>
    <guid isPermaLink="false">1452183112</guid>
</item>

<item>
        <title>Android notifications for WeeChat in Termux</title>
        <description>&lt;p&gt;&lt;a href="https://glow.li/media/images/big/Screenshot-weechat-termux.webp?chash=Iebu80944a"&gt;&lt;img src="https://glow.li/media/images/Screenshot-weechat-termux.webp?chash=Iebu888662" alt="Screenshot" title="Screenshot" loading="lazy" sizes="(max-width:800px) 100vw, (max-width:800px) 100vw, (max-width:1000px) 80vw, (max-width:1200px) 67vw, (max-width:1400px) 58vw, (max-width:1600px) 50vw, (max-width:1800px) 45vw, (max-width:2000px) 40vw, (max-width:2200px) 37vw, (max-width:2400px) 34vw, (max-width:2600px) 31vw, (max-width:2800px) 29vw, 1500px" srcset="https://glow.li/media/images/Screenshot-weechat-termux.webp?chash=Iebu888662 1500w, https://glow.li/media/images/1200/Screenshot-weechat-termux.webp?chash=Iebu8eb586 1200w, https://glow.li/media/images/1000/Screenshot-weechat-termux.webp?chash=Iebu8eb586 1000w, https://glow.li/media/images/800/Screenshot-weechat-termux.webp?chash=Iebu8eb586 800w, https://glow.li/media/images/700/Screenshot-weechat-termux.webp?chash=Iebu8eb586 700w, https://glow.li/media/images/600/Screenshot-weechat-termux.webp?chash=Iebu8eb586 600w, https://glow.li/media/images/500/Screenshot-weechat-termux.webp?chash=Iebu8eb586 500w, https://glow.li/media/images/400/Screenshot-weechat-termux.webp?chash=Iebu8eb586 400w, https://glow.li/media/images/300/Screenshot-weechat-termux.webp?chash=Iebu8eb586 300w, https://glow.li/media/images/200/Screenshot-weechat-termux.webp?chash=Iebu886604 200w, https://glow.li/media/images/100/Screenshot-weechat-termux.webp?chash=Iebu8b2a5d 100w" &gt;&lt;/a&gt;
I figured out how to have WeeChat in &lt;a href="https://termux.com/"&gt;Termux &lt;/a&gt; create a notification on your android device whenever someone mentions your username or you receive a private message.&lt;/p&gt;
&lt;p&gt;You need to have &lt;a href="https://f-droid.org/en/packages/com.termux.api/"&gt;Termux:API&lt;/a&gt; installed for this.
&lt;code&gt;All&lt;/code&gt; you need to do is type following command into WeeChat:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/set trigger.trigger.beep.command "/print -beep;/exec -bg termux-notification -t 'IRC Notification' -c "${tg_tag_nick}: ${tg_message_nocolor}";/exec -bg termux-vibrate"&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="Explanation" name="Explanation"&gt;&lt;a class="hash-link" href="#Explanation"&gt;Explanation&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Normal WeeChat behavior is to send a BEL character to the terminal whenever someone mentions you or sends you a private message. This extends that with the commands termux-notification and termux-vibrate found in the &lt;a href="https://f-droid.org/en/packages/com.termux.api/"&gt;Termux:API&lt;/a&gt;. The content of the notification is ${tg_tag_nick} (which is the user who sent you the message) and ${tg_message_nocolor} (which is the message without coloring). &lt;a href="https://weechat.org/files/doc/devel/weechat_user.en.html#trigger_data_print"&gt;Here&lt;/a&gt; you can find more available variables.&lt;/p&gt;</description>
    <pubDate>Tue, 05 Jan 2016 12:30:59 +0000</pubDate>
    <link>https://glow.li/posts/android-notifications-for-weechat-in-termux/</link>
    <guid isPermaLink="false">1451997059</guid>
</item>

    </channel>
</rss>

