<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>enoent.fr</title>
    <link>https://enoent.fr/</link>
    <description>Recent content on enoent.fr</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 06 Sep 2022 14:00:00 +1000</lastBuildDate>
    
	<atom:link href="https://enoent.fr/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Ktor: Altering served content</title>
      <link>https://enoent.fr/posts/ktor-altering-served-content/</link>
      <pubDate>Tue, 06 Sep 2022 14:00:00 +1000</pubDate>
      
      <guid>https://enoent.fr/posts/ktor-altering-served-content/</guid>
      <description>When serving files with Ktor, there might be times when you need to alter those files. For example, you might want to inject a script in every served HTML file. For this purpose, we can leverage plugins. Plugins can hook at different stages of the request/response pipeline:
  Ktor request/response pipeline   Let&amp;rsquo;s write a plugin that transforms a specific type of files - going with the previous example of injecting a script to every served HTML file.</description>
    </item>
    
    <item>
      <title>Serving static files with Ktor</title>
      <link>https://enoent.fr/posts/serving-static-files-with-ktor/</link>
      <pubDate>Sat, 03 Sep 2022 19:00:00 +1000</pubDate>
      
      <guid>https://enoent.fr/posts/serving-static-files-with-ktor/</guid>
      <description>Serving static files with Ktor for a static website seems easy enough:
fun main() { embeddedServer(Netty, port = 8080) { routing { static { files(&amp;#34;static-data&amp;#34;) } } }.start(wait = true) } Done? Not quite. Opening http://localhost:8080 will only get you a 404, even if you have an index.html file in the static-data folder. You have to let Ktor know you want to opt-in serving a default file. Let&amp;rsquo;s try again (omitting anything outside the static block):</description>
    </item>
    
    <item>
      <title>Writing a Bazel rule set</title>
      <link>https://enoent.fr/posts/writing-bazel-rule-set/</link>
      <pubDate>Sat, 16 May 2020 15:55:00 +1100</pubDate>
      
      <guid>https://enoent.fr/posts/writing-bazel-rule-set/</guid>
      <description>This post will cover two things:
 How to run an arbitrary tool with Bazel (in this case, PlantUML, a tool to generate diagrams), by writing a rule set How to test this rule set.  It should be mentioned that while I was working on this rule set, it became more and more apparent PlantUML is not a great candidate for this kind of integration, as its output is platform-dependent (the font rendering).</description>
    </item>
    
    <item>
      <title>Compiling a Kotlin application with Bazel</title>
      <link>https://enoent.fr/posts/compiling-a-kotlin-application-with-bazel/</link>
      <pubDate>Sun, 08 Dec 2019 11:30:00 +1100</pubDate>
      
      <guid>https://enoent.fr/posts/compiling-a-kotlin-application-with-bazel/</guid>
      <description>This post will describe how to compile a small application written in Kotlin using Bazel, tests, as well as how to use static analyzers.
Phosphorus Phosphorus is the application that this post will cover. It&amp;rsquo;s a small utility that I wrote to check if an image matches a reference. If it doesn&amp;rsquo;t, Phosphorus generates an image highlighting the differences. The goal is to be able to check that something generates an image in a given way, and doesn&amp;rsquo;t change - at least if it&amp;rsquo;s not expected.</description>
    </item>
    
    <item>
      <title>Why Bazel?</title>
      <link>https://enoent.fr/posts/why-bazel/</link>
      <pubDate>Sat, 02 Nov 2019 18:00:00 +1100</pubDate>
      
      <guid>https://enoent.fr/posts/why-bazel/</guid>
      <description>In this post, we&amp;rsquo;ll cover what Bazel is, how to use it, and why I chose to use it.
What is Bazel? Bazel is a build-system released by Google in 2015. It actually is derived from the internal build-system Google uses internally for most of its own code-base, called Blaze.
Building at scale Bazel has a huge focus on hermetic builds, and reproducibility. Every build step is, from a really broad perspective, defined as a list of inputs, tools, and outputs.</description>
    </item>
    
    <item>
      <title>A new beginning</title>
      <link>https://enoent.fr/posts/a-new-beginning/</link>
      <pubDate>Thu, 31 Oct 2019 21:05:00 +1100</pubDate>
      
      <guid>https://enoent.fr/posts/a-new-beginning/</guid>
      <description>This blog has been inactive for a long time. I tried to at least post an article yearly, and next thing you know, two years and a half fly by&amp;hellip; Halloween seemed like a good time to resurrect it.
I wanted to start writing again recently, and faced an issue: this blog was using Octopress 2. Well, Octopress has apparently been dead for even longer than this blog. So I wanted to switch to another static generator.</description>
    </item>
    
    <item>
      <title>Compat libraries incompatibilities</title>
      <link>https://enoent.fr/posts/compat-libraries-incompatibilities/</link>
      <pubDate>Sat, 06 May 2017 19:52:26 +0200</pubDate>
      
      <guid>https://enoent.fr/posts/compat-libraries-incompatibilities/</guid>
      <description>&lt;p&gt;Compat libraries are great. They allow us to work with the newest Android APIs,
without thinking (much) about your minimum API level. Instead of thousands
of devices, you can reach billions. With nearly no changes in your code.&lt;/p&gt;

&lt;p&gt;But sometimes, they&amp;rsquo;re not so great…&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Android Things: first look</title>
      <link>https://enoent.fr/posts/android-things-first-look/</link>
      <pubDate>Fri, 06 Jan 2017 10:55:08 +0100</pubDate>
      
      <guid>https://enoent.fr/posts/android-things-first-look/</guid>
      <description>&lt;h2 id=&#34;what-is-android-things&#34;&gt;What is Android Things?&lt;/h2&gt;

&lt;p&gt;Android Things is an alternative Android version, announced at Google I/O 2015,
and released as a first developer preview in December 2016. Its purpose is to
develop embedded IoT devices, with a known and widely documented Android
ecosystem basis.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s currently running on three different boards: the Intel Edison, the NXP Pico
i.MX6UL, and the Raspberry Pi 3. Some higher-end boards are coming soon.&lt;/p&gt;

&lt;p&gt;On the SDK side, Android Things comes with a specific support library to ease
low-level hardware usage. It consists in two parts: the Peripheral I/O API,
which supports GPIO, PWM, I2C, SPI and UART, and the User Driver API, which
allows a developer to write a hardware-specific, high-level driver, to ease
hardware reusability by injecting events into the Android framework. Other
applications can in turn use those events without having to interact with the
hardware directly.&lt;/p&gt;

&lt;p&gt;There&amp;rsquo;s a downside: the bundled Android is not as complete as the one you can
find on a phone. Most of the standard applications aren&amp;rsquo;t installed (Calendar,
Phone…), and standard content providers are absent too (MediaProvider,
Dictionary…).&lt;/p&gt;

&lt;p&gt;Android Things supports displays, with the default Android UI toolkit. However,
the display is a bit different from what you&amp;rsquo;re used to seeing on an Android
device: there&amp;rsquo;s no notification bar, navigation bar or anything, the running
application will use the full display. That is, if it uses it at all: displays
are purely optional.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Use Apache HTTP Client on Android SDK 23</title>
      <link>https://enoent.fr/posts/use-apache-http-client-on-android-sdk-23/</link>
      <pubDate>Thu, 01 Oct 2015 15:46:00 +0200</pubDate>
      
      <guid>https://enoent.fr/posts/use-apache-http-client-on-android-sdk-23/</guid>
      <description>&lt;p&gt;With the Android M SDK (API 23), Google removed the Apache HTTP Client library.
It was deprecated since API 22, and Google recommanded to use
&lt;code&gt;HttpURLConnection&lt;/code&gt; instead since API 9. While the classes are still bundled in
Android 6 ROMs, it won&amp;rsquo;t be long until we see them completely go away.&lt;/p&gt;

&lt;p&gt;Some applications are still relying on this library, and need to be updated to
use the SDK 23, without having time/budget/whatever required to switch from
HTTP Client. While I strongly recommend you to still take time to move to
something else (there are many high-level libraries, like
&lt;a href=&#34;http://square.github.io/okhttp/&#34;&gt;OkHttp&lt;/a&gt; or
&lt;a href=&#34;https://github.com/koush/ion&#34;&gt;Ion&lt;/a&gt;, or you can use &lt;code&gt;HttpURLConnection&lt;/code&gt;
to keep a low-level access), there is a way to use the Apache library
while using the SDK 23.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Share code across multiple platforms</title>
      <link>https://enoent.fr/posts/share-code-across-multiple-platforms/</link>
      <pubDate>Thu, 11 Jun 2015 15:33:00 +0200</pubDate>
      
      <guid>https://enoent.fr/posts/share-code-across-multiple-platforms/</guid>
      <description>&lt;p&gt;When writing an application, you probably want it to run on most platforms
possible. Having a game on Android is great, but what about this weird friend
with his iPhone? It would be nice to be able to play with him. Of course there
are cross-platforms technologies like &lt;a href=&#34;http://cordova.apache.org/&#34;&gt;Cordova&lt;/a&gt; or
&lt;a href=&#34;http://www.appcelerator.com/titanium/&#34;&gt;Titanium&lt;/a&gt;. But sadly, you can&amp;rsquo;t achieve
both a perfect user experience and great performances with this kind of tools.
And even if you could: what about reusing code on the back-end? We need to share
some code.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>RecyclerView basics</title>
      <link>https://enoent.fr/posts/recyclerview-basics/</link>
      <pubDate>Sun, 18 Jan 2015 19:37:00 +0100</pubDate>
      
      <guid>https://enoent.fr/posts/recyclerview-basics/</guid>
      <description>&lt;h2 id=&#34;introduction-to-recyclerview&#34;&gt;Introduction to RecyclerView&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;RecyclerView&lt;/code&gt; has been introduced with Android 5, in the support-v7 package. It
allows to display a collection of items in an arbitrary disposition (think of a
&lt;code&gt;ListView&lt;/code&gt;, but much more flexible). As the name of the support package
indicates, it&amp;rsquo;s available from the API level 7 (Android 2.1).&lt;/p&gt;

&lt;p&gt;Its name comes from the way it works: when an item is hidden, instead of being
destroyed and a new one being created for each newly displayed item, hidden ones
are &lt;em&gt;recycled&lt;/em&gt;: they are reused, with new data bound on them.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Hosting different kinds of apps on nginx</title>
      <link>https://enoent.fr/posts/hosting-different-kinds-of-apps-on-nginx/</link>
      <pubDate>Wed, 15 Oct 2014 10:55:00 +0200</pubDate>
      
      <guid>https://enoent.fr/posts/hosting-different-kinds-of-apps-on-nginx/</guid>
      <description>&lt;h2 id=&#34;engine-what&#34;&gt;Engine what?&lt;/h2&gt;

&lt;p&gt;Nginx (engine-x) is a web server and reverse proxy for web and mail protocols
(HTTP, HTTPS, SMTP, POP3 and IMAP). It has been first released in 2004, and its
usage keeps growing ever since (according to
&lt;a href=&#34;http://news.netcraft.com/archives/2014/08/27/august-2014-web-server-survey.html&#34;&gt;Netcraft&lt;/a&gt;,
it was hosting 14.47% of active sites in August 2014).&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s capable of hosting many kinds of applications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;static HTML pages&lt;/li&gt;
&lt;li&gt;PHP, using &lt;a href=&#34;http://en.wikipedia.org/wiki/PHP#PHPFPM&#34;&gt;PHP-FPM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ruby on Rails and any kind of Rack-based Ruby application, using
&lt;a href=&#34;https://www.phusionpassenger.com/&#34;&gt;Phusion Passenger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;proxying requests to another webserver (e.g. a software launching its own web
server, like &lt;a href=&#34;http://xbmc.org/&#34;&gt;Kodi&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Using an API - Trakt.tv example</title>
      <link>https://enoent.fr/posts/using-an-api-trakt-dot-tv-example/</link>
      <pubDate>Thu, 09 Oct 2014 00:06:00 +0200</pubDate>
      
      <guid>https://enoent.fr/posts/using-an-api-trakt-dot-tv-example/</guid>
      <description>&lt;p&gt;A lot of websites are generating data which could be really useful outside a
web browser. Having the weather shown on your smartphone&amp;rsquo;s lock-screen, the
delay until your next bus… How can we use this from an application?&lt;/p&gt;

&lt;p&gt;This article will explain what&amp;rsquo;s behind these hidden data flows, and how to
use them. For this purpose, I&amp;rsquo;ll use &lt;a href=&#34;http://trakt.tv&#34;&gt;Trakt.tv&lt;/a&gt; as an example.
If you don&amp;rsquo;t know it: Trakt allows you to manage your movie/TV series library,
keep track of watch progress, your ratings, comments… and see those of other
people.&lt;/p&gt;

&lt;p&gt;Some code will show how to send such requests. It will be written in
&lt;a href=&#34;http://ruby-lang.org/&#34;&gt;Ruby&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Compile FFmpeg for Android</title>
      <link>https://enoent.fr/posts/compile-ffmpeg-for-android/</link>
      <pubDate>Fri, 20 Jun 2014 10:40:00 +0200</pubDate>
      
      <guid>https://enoent.fr/posts/compile-ffmpeg-for-android/</guid>
      <description>&lt;p&gt;When you have to manipulate audio or video on Android, being used to open-source
software, you have a single name which comes directly to you: FFmpeg. However,
FFmpeg is a C software, meant to be used as an executable, and not officially
supporting Android.&lt;/p&gt;

&lt;p&gt;There are a lot of partial and/or out-of-date how-to out there on how to get
FFmpeg running on Android, like
&lt;a href=&#34;https://github.com/halfninja/android-ffmpeg-x264&#34;&gt;halfninja&amp;rsquo;s build&lt;/a&gt;. However,
I needed to use FFmpeg &lt;code&gt;concat&lt;/code&gt; demuxer, introduced in FFmpeg 1.1. Most builds
target 0.9. There&amp;rsquo;s
&lt;a href=&#34;http://stackoverflow.com/search?q=ffmpeg+android&#34;&gt;a ton&lt;/a&gt;
of questions on StackOverflow about getting newer
FFmpeg releases working on Android. So, here&amp;rsquo;s a full explanation to get
&lt;a href=&#34;https://www.ffmpeg.org/releases/ffmpeg-2.2.3.tar.bz2&#34;&gt;FFmpeg 2.2.3 &amp;ldquo;Muybridge&amp;rdquo;&lt;/a&gt;
working on Android. I&amp;rsquo;ll describe the steps for Linux, but everything is pretty
standard shell and should work on any decent OS.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Arduino Leonardo fully-featured keyboard</title>
      <link>https://enoent.fr/posts/arduino-leonardo-fully-featured-keyboard/</link>
      <pubDate>Sun, 04 May 2014 23:03:16 +0200</pubDate>
      
      <guid>https://enoent.fr/posts/arduino-leonardo-fully-featured-keyboard/</guid>
      <description>&lt;p&gt;The Leonardo has a simple &lt;a href=&#34;http://arduino.cc/en/Reference/MouseKeyboard&#34;&gt;keyboard API&lt;/a&gt;.
I needed a way to emulate a keyboard (from a joystick and arcade buttons - you
see where I&amp;rsquo;m going now). Here&amp;rsquo;s how I did it.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Android: display a Dialog from an AppWidget</title>
      <link>https://enoent.fr/posts/android-display-a-dialog-from-an-appwidget/</link>
      <pubDate>Sun, 06 Apr 2014 22:27:19 +0200</pubDate>
      
      <guid>https://enoent.fr/posts/android-display-a-dialog-from-an-appwidget/</guid>
      <description>&lt;h2 id=&#34;issue&#34;&gt;Issue&lt;/h2&gt;

&lt;p&gt;When you want to display a dialog, you don&amp;rsquo;t only need a context, you need an
activity context. From an activity, displaying a dialog is pretty
straightforward:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Display a dialog from an activity&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AlertDialog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Builder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyActivity&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setTitle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Dialog title&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setMessage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Dialog message&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setPositiveButton&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;android&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DialogInterface&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;OnClickListener&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;onClick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DialogInterface&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dialog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;which&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
      &lt;span class=&#34;c1&#34;&gt;// Handle a positive answer
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
  &lt;span class=&#34;o&#34;&gt;})&lt;/span&gt;
  &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setNegativeButton&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;android&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DialogInterface&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;OnClickListener&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;onClick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DialogInterface&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dialog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;which&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
      &lt;span class=&#34;c1&#34;&gt;// Handle a negative answer
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
  &lt;span class=&#34;o&#34;&gt;})&lt;/span&gt;
  &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setIcon&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;drawable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ic_dialog_alert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;();&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Okay, that&amp;rsquo;s a pretty usual code sample. But what about displaying it from an
app-widget?&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>