<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>vxlabs</title>
    <link>https://vxlabs.com/</link>
    <description>Recent content on vxlabs</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 23 Nov 2024 16:08:45 +0200</lastBuildDate>
    <atom:link href="https://vxlabs.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Speed up Obsidian Quartz page loads</title>
      <link>https://vxlabs.com/2024/11/23/speed-up-obsidian-quartz-page-loads/</link>
      <pubDate>Sat, 23 Nov 2024 16:08:45 +0200</pubDate>
      <guid>https://vxlabs.com/2024/11/23/speed-up-obsidian-quartz-page-loads/</guid>
      <description>&lt;p&gt;I recently setup &lt;a href=&#34;https://charlbotha.com/til/Setup-Quartz-to-publish-single-Obsidian-folder&#34;&gt;Quartz to publish a subset of my &amp;ldquo;howto&amp;rdquo; notes to the TiL section of my website&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Today I had some time to dive (delve&amp;hellip;. haha) into why the page loads did not feel as fast as I am used to from my other static sites.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pagespeed-insights&#34;&gt;PageSpeed Insights&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pagespeed.web.dev/&#34;&gt;PageSpeed Insights&lt;/a&gt; reported that mobile page speed performance was 34 and desktop better but not great at 81:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;    &#xA;&#xA;&#xA;&lt;figure&gt;&lt;a href=&#34;pagespeed_mobile_before.webp&#34;&gt;&#xA;    &lt;img&#xA;        &#xA;            sizes=&#34;(min-width: 35em) 1200px, 100vw&#34;&#xA;              &#xA;            srcset=&#39;&#xA;            &#xA;                &#xA;                https://vxlabs.com/2024/11/23/speed-up-obsidian-quartz-page-loads/pagespeed_mobile_before_hu_789a226a55af7c7b.webp 480w,&#xA;            &#xA;                &#xA;                https://vxlabs.com/2024/11/23/speed-up-obsidian-quartz-page-loads/pagespeed_mobile_before_hu_7c96e4e2046efc3f.webp 800w,&#xA;            &#xA;                &#xA;                https://vxlabs.com/2024/11/23/speed-up-obsidian-quartz-page-loads/pagespeed_mobile_before_hu_9b3404379eefd4eb.webp 1200w,&#xA;            &#xA;                &#xA;                https://vxlabs.com/2024/11/23/speed-up-obsidian-quartz-page-loads/pagespeed_mobile_before_hu_5b28f77e7b8f719e.webp 1500w,&#xA;            &#39;&#xA;&#xA;            &#xA;            &#xA;            src=&#34;https://vxlabs.com/2024/11/23/speed-up-obsidian-quartz-page-loads/pagespeed_mobile_before_hu_7c96e4e2046efc3f.webp&#34;&#xA;            &#xA;&#xA;        /&gt; &lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;lets-take-a-look-inside-the-bundle&#34;&gt;Let&amp;rsquo;s take a look inside the bundle&lt;/h2&gt;&#xA;&lt;p&gt;First thing I checked was the browser&amp;rsquo;s dev tools. Here we can see that the HTML page itself is far too large at 850kB and that postscript.js not far behind at 224kB.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Template for Zotero Obsidian plugin to import references with highlights</title>
      <link>https://vxlabs.com/2024/11/02/template-for-zotero-obsidian-plugin-to-import-references-with-highlights/</link>
      <pubDate>Sat, 02 Nov 2024 21:05:48 +0200</pubDate>
      <guid>https://vxlabs.com/2024/11/02/template-for-zotero-obsidian-plugin-to-import-references-with-highlights/</guid>
      <description>&lt;p&gt;Zotero is a fantastic open-source reference manager that I&amp;rsquo;ve been using and &lt;a href=&#34;https://vxlabs.com/tags/zotero&#34;&gt;blogging about&lt;/a&gt; since 2011.&lt;/p&gt;&#xA;&lt;p&gt;Until the &lt;a href=&#34;https://techcrunch.com/2024/10/29/elevenlabs-has-hired-the-team-behind-omnivore-a-reader-app/&#34;&gt;recent and sudden shutdown of the Omnivore read-it-later app&lt;/a&gt;, I was using it mostly for academic publications, but now I have started using its recently revamped (Zotero 7 is great!) web page archiving and highlighting (annotation) capabilities also for web references.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I am sharing my import template for the &lt;a href=&#34;https://github.com/mgmeyers/obsidian-zotero-integration&#34;&gt;Zotero Integration plugin for Obsidian&lt;/a&gt; with which you can import any reference, along with its highlights, into your Obsidian vault.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenPGP WKD for easy PGP key discovery</title>
      <link>https://vxlabs.com/2024/10/24/openpgp-wkd-for-easy-pgp-key-discovery/</link>
      <pubDate>Thu, 24 Oct 2024 08:01:57 +0200</pubDate>
      <guid>https://vxlabs.com/2024/10/24/openpgp-wkd-for-easy-pgp-key-discovery/</guid>
      <description>&lt;p&gt;Web Key Directory (WKD) &amp;ldquo;is a standard for discovery of OpenPGP keys by email address, via the domain of its email provider&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;In short, through some DNS and files-on-your-webserver conventions, some email clients (e.g. Thunderbird or ProtonMail) and tools like GnuPG are able to retrieve your PGP keys automatically. This is of course super convenient and desirable for your correspondents, because PGP encryption is hard enough as it is.&lt;/p&gt;&#xA;&lt;p&gt;OpenPGP makes this even better by offering &amp;ldquo;WKD as a service&amp;rdquo;, which means you only have to do the DNS bits, and not the files-on-your-webserver bits.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PySpark timezone offset from ISO 8601 without UDF</title>
      <link>https://vxlabs.com/2024/10/15/pyspark-timezone-offset-from-iso-8601-without-udf/</link>
      <pubDate>Tue, 15 Oct 2024 19:39:40 +0200</pubDate>
      <guid>https://vxlabs.com/2024/10/15/pyspark-timezone-offset-from-iso-8601-without-udf/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;During my work at &lt;a href=&#34;https://stonethree.com/&#34;&gt;Stone Three&lt;/a&gt; upgrading some of our data pipelines with &lt;a href=&#34;https://azure.microsoft.com/en-us/products/databricks&#34;&gt;Azure DataBricks&lt;/a&gt;, I was quite disappointed to learn that Spark 3.5.3&amp;rsquo;s only timezone-capable timestamp type &lt;a href=&#34;https://community.databricks.com/t5/technical-blog/introducing-timestamp-ntz-in-apache-spark-the-timestamp-without/ba-p/50586&#34;&gt;always stores timestamps converted to UTC, and always displays these timestamps converted to the session-global timezone&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Admittedly, the situation is equally bad with PostgreSQL&amp;rsquo;s &lt;code&gt;TIMESTAMPTZ&lt;/code&gt; type, leading to designs where the actual timezone offset must be stored as a separate timezone offset column.&lt;/p&gt;&#xA;&lt;p&gt;Having a timezone-aware timestamp type that could store the input timezone natively, and which would always display with its full timezone information, would have been much more useful. In our case, we not only need to know the exact timepoint that one of our vision sensors generated a measurement, but we also need to know what the exact &lt;em&gt;local&lt;/em&gt; time was for that specific measurement.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Deadlib for Deprecated Libraries like distutils</title>
      <link>https://vxlabs.com/2024/10/14/python-deadlib-for-deprecated-libraries-like-distutils/</link>
      <pubDate>Mon, 14 Oct 2024 11:07:00 +0200</pubDate>
      <guid>https://vxlabs.com/2024/10/14/python-deadlib-for-deprecated-libraries-like-distutils/</guid>
      <description>&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;&#xA;&lt;p&gt;You&amp;rsquo;ve setup a local Spark 3.5.3 cluster for development user the &lt;a href=&#34;https://github.com/bitnami/containers/blob/main/bitnami/spark/docker-compose.yml&#34;&gt;bitnami docker images and compose file&lt;/a&gt;, you&amp;rsquo;ve hooked up your PySpark &lt;code&gt;SparkSession&lt;/code&gt; and then when you try to &lt;code&gt;df.limit(10).toPandas().head()&lt;/code&gt; for the first time, you are greeted with the following disheartening traceback:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use direnv for uv with out-of-source virtual environments</title>
      <link>https://vxlabs.com/2024/10/10/use-direnv-for-uv-with-out-of-source-virtual-environments/</link>
      <pubDate>Thu, 10 Oct 2024 13:42:52 +0200</pubDate>
      <guid>https://vxlabs.com/2024/10/10/use-direnv-for-uv-with-out-of-source-virtual-environments/</guid>
      <description>&lt;p&gt;The new Python package and project manager &lt;a href=&#34;https://docs.astral.sh/uv/&#34;&gt;uv&lt;/a&gt; is in fact amazing.&lt;/p&gt;&#xA;&lt;p&gt;I say that, because it&amp;rsquo;s really fast, but more importantly because this single tool does a whole lot, really fast: Installing Python binaries, installing and running packages in self-contained environments like pipx, managing virtual environments.&lt;/p&gt;&#xA;&lt;p&gt;However, I&amp;rsquo;ve been avoiding it so far due to one flaw: uv defaults to installing its virtual environment and all dependencies into the &lt;code&gt;.venv&lt;/code&gt; sub-directory of your project, almost exactly like the notorious &lt;code&gt;node_modules&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configure Thunderbird 128 e2e encryption with GnuPG</title>
      <link>https://vxlabs.com/2024/08/09/configure-thunderbird-128-e2e-encryption-with-gnupg/</link>
      <pubDate>Fri, 09 Aug 2024 13:55:52 +0200</pubDate>
      <guid>https://vxlabs.com/2024/08/09/configure-thunderbird-128-e2e-encryption-with-gnupg/</guid>
      <description>&lt;p&gt;It took me longer than I would have liked to setup the latest Thunderbird 128 (Supernova!) to use my &lt;a href=&#34;https://cpbotha.net/2016/12/11/pgp-never-gonna-give-you-up/&#34;&gt;existing&#xA;GnuPG-based encryption setup&lt;/a&gt;, for a large part because TB&#xA;defaults to its own more straight-forward built-in defaults for key management, and so I&amp;rsquo;m going to publish the recipe&#xA;here to save you some time, hopefully.&lt;/p&gt;&#xA;&lt;p&gt;All the details, at various levels of obviousness, can be found on &lt;a href=&#34;https://wiki.mozilla.org/Thunderbird:OpenPGP:Smartcards#Allow_the_use_of_external_GnuPG&#34;&gt;this Mozilla wiki page&lt;/a&gt;, but here I&amp;rsquo;m going to make the whole sequence more obvious.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Light-weight setup of LF console file manager with image, source code and archive previews</title>
      <link>https://vxlabs.com/2024/06/01/gokcehan-lf-image-code-archive-previews/</link>
      <pubDate>Sat, 01 Jun 2024 16:12:00 +0200</pubDate>
      <guid>https://vxlabs.com/2024/06/01/gokcehan-lf-image-code-archive-previews/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/gokcehan/lf&#34;&gt;lf&lt;/a&gt;, or &amp;ldquo;list files&amp;rdquo;, is a single binary file manager, inspired by the &lt;a href=&#34;https://github.com/ranger/ranger&#34;&gt;ranger&lt;/a&gt; file manager, but written in Go. Using this tool, you can navigate really quickly, build up a mental model of the filesystem layout and make modifications with ease.&lt;/p&gt;&#xA;&lt;p&gt;Out of the box, this is super useful on remote machines or even docker containers where you don&amp;rsquo;t have access to your normal full configuration, in my case Emacs with dired.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI screenshot renamer with ollama LLaVA, GPT-4o and macOS OCR</title>
      <link>https://vxlabs.com/2024/05/25/ai-screenshot-renamer-with-ollama-llava-gpt-4o-and-macos-ocr/</link>
      <pubDate>Sat, 25 May 2024 21:25:00 +0200</pubDate>
      <guid>https://vxlabs.com/2024/05/25/ai-screenshot-renamer-with-ollama-llava-gpt-4o-and-macos-ocr/</guid>
      <description>&lt;p&gt;Last week Microsoft had to deal with some criticism, because they announced &amp;ldquo;Recall&amp;rdquo;, a new feature, available only on their &lt;a href=&#34;https://www.microsoft.com/en-us/windows/business/devices/copilot-plus-pcs&#34;&gt;new Copilot+ AI-enabled laptops&lt;/a&gt;, that makes regular screenshots as the computer is used and uses on-device models to generate descriptions of these images that can be stored in a database (sqlite of course) and later searched, so that a user can effectively go back in time to find almost anything. They have stated that everything happens and is stored on-device, and that the whole feature can be easily disabled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Performance comparison of six different LTTB (visual downsampling for timeseries data) algorithm implementations for Python</title>
      <link>https://vxlabs.com/2024/05/01/lttb-python-drag-race/</link>
      <pubDate>Wed, 01 May 2024 21:00:00 +0200</pubDate>
      <guid>https://vxlabs.com/2024/05/01/lttb-python-drag-race/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/sveinn-steinarsson/flot-downsample&#34;&gt;LTTB, or Largest-Triangle-Three-Buckets&lt;/a&gt;, is a fantastic little algorithm that you can use for the &lt;em&gt;visual&lt;/em&gt; downsampling of timeseries data.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s say your user is viewing a line chart of some timeseries data. The time-period they have selected contains 50000 points, but their display is only 4K so they have a maximum of 3840 pixels available horizontally. With LTTB, we can automatically select the 3840 or fewer points from those 50000 points that will produce a line graph which is visually very similar to what they would see if they were to try and render all 50000 points.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact QRCode generator with marimo and WASM</title>
      <link>https://vxlabs.com/2024/03/02/contact-qrcode-generator-with-marimo-and-wasm/</link>
      <pubDate>Sat, 02 Mar 2024 14:40:00 +0200</pubDate>
      <guid>https://vxlabs.com/2024/03/02/contact-qrcode-generator-with-marimo-and-wasm/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Just the other weekend, I had to exchange contact details using quite primitive means with a fantastic new friend after a deeply enjoyable hike up Table Mountain via the India Venster route.&lt;/p&gt;&#xA;&lt;p&gt;We could not get the flashy new iPhone-bump method to work. Although the animation triggered with each bump, no contact details were exchanged, a failure which caused the Android user at the table much mirth.&lt;/p&gt;&#xA;&lt;p&gt;That incident drove me to retrieve some old Python code I had written to try out &lt;a href=&#34;https://segno.readthedocs.io/&#34;&gt;Segno&lt;/a&gt;, a QRCode generator library for Python, and to test out the &lt;a href=&#34;https://news.ycombinator.com/item?id=39552882&#34;&gt;recently announced WASM capability&lt;/a&gt; of the new &lt;a href=&#34;https://marimo.io/&#34;&gt;Marimo reactive Python notebook&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pandoc roundtrip from markdown to docx and back</title>
      <link>https://vxlabs.com/2024/02/11/pandoc-roundtrip-from-markdown-to-docx-and-back/</link>
      <pubDate>Sun, 11 Feb 2024 17:32:00 +0200</pubDate>
      <guid>https://vxlabs.com/2024/02/11/pandoc-roundtrip-from-markdown-to-docx-and-back/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;I was curious whether it would in theory be possible to use the docx format as a storage format for markdown documents with their associated image files, and in addition, to support the light editing of the docx file directly.&lt;/p&gt;&#xA;&lt;p&gt;In other words, the primary authoring modality would be via markdown and attachments, because this works really well for software documentation, but storage and sharing would happen via docx files, additinonally supporting the occasional direct editing of that docx without breaking the normal markdown workflow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Charl&#39;s super hacky but often working automatic Emacs font size setting</title>
      <link>https://vxlabs.com/2023/12/09/charls-super-hacky-but-often-working-automatic-emacs-font-size-setting/</link>
      <pubDate>Sat, 09 Dec 2023 17:20:00 +0200</pubDate>
      <guid>https://vxlabs.com/2023/12/09/charls-super-hacky-but-often-working-automatic-emacs-font-size-setting/</guid>
      <description>&lt;h2 id=&#34;the-blurb&#34;&gt;The blurb&lt;/h2&gt;&#xA;&lt;p&gt;Below is the emacs-lisp code I&amp;rsquo;ve evolved over the years to setup reasonable font sizes on all the machines where I use Emacs.&lt;/p&gt;&#xA;&lt;p&gt;The main goal is to get the physical / apparent size of the font, in millimetres, to be more similar across all displays and display systems (Different screens across macOS, Windows with and without display scaling, WSL). This sounds like it should be easy, but setting font point size to the same number is in fact interpreted differently on various display systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minimal VSCode settings and extensions configuration for Python with ruff</title>
      <link>https://vxlabs.com/2023/12/09/minimal-vscode-settings-and-extensions-configuration-for-python-with-ruff/</link>
      <pubDate>Sat, 09 Dec 2023 16:53:00 +0200</pubDate>
      <guid>https://vxlabs.com/2023/12/09/minimal-vscode-settings-and-extensions-configuration-for-python-with-ruff/</guid>
      <description>&lt;p&gt;This morning while working on my &lt;a href=&#34;https://adventofcode.com/2023&#34;&gt;AoC&lt;/a&gt; submission, I wondered what the simplest procedure was for sharing a minimal setup for editing Python in Visual Studio Code using &lt;a href=&#34;https://github.com/astral-sh/ruff&#34;&gt;ruff&lt;/a&gt; for formatting, linting and import sorting, and doing all of that automatically on save.&lt;/p&gt;&#xA;&lt;p&gt;It turns out that you can just store the following &lt;code&gt;extensions.json&lt;/code&gt; and &lt;code&gt;settings.json&lt;/code&gt; in the &lt;code&gt;.vscode&lt;/code&gt; sub-directory of your source directory, and all of the above will be done. As a bonus, you can use the &lt;code&gt;ruff.toml&lt;/code&gt; example below to customise your ruff setup.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing hunspell 1.7.0 for Emacs 29 on Windows</title>
      <link>https://vxlabs.com/2023/11/14/fixing-hunspell-1.7.0-for-emacs-29-on-windows/</link>
      <pubDate>Tue, 14 Nov 2023 14:23:00 +0200</pubDate>
      <guid>https://vxlabs.com/2023/11/14/fixing-hunspell-1.7.0-for-emacs-29-on-windows/</guid>
      <description>&lt;h2 id=&#34;install-and-configure-hunspell&#34;&gt;Install and configure hunspell&lt;/h2&gt;&#xA;&lt;p&gt;Imagine this: For intricate reasons, you have decided to get your Emacs setup working on Windows as well, although you have a perfectly fine and working WSL2 configuration.&lt;/p&gt;&#xA;&lt;p&gt;You&amp;rsquo;re surprised by how well this goes (&lt;code&gt;winget install GNU.Emacs&lt;/code&gt; FTW!), until you decide to setup the hunspell spell checker&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;It starts pretty well, when you are able to install hunspell with a simple &lt;code&gt;winget install FSFhu.Hunspell&lt;/code&gt;, after which you download a set of English dictionaries from &lt;a href=&#34;https://extensions.libreoffice.org/en/extensions/show/english-dictionaries&#34;&gt;the LibreOffice extension&lt;/a&gt;, and then set your &lt;code&gt;DICPATH&lt;/code&gt; environment variable to point to the directory containing all of the unpacked &lt;code&gt;.aff&lt;/code&gt; and &lt;code&gt;.dic&lt;/code&gt; files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Open message:// links with mu4e or fastmail</title>
      <link>https://vxlabs.com/2023/08/08/open-message/-links-with-mu4e-or-fastmail/</link>
      <pubDate>Tue, 08 Aug 2023 12:15:00 +0200</pubDate>
      <guid>https://vxlabs.com/2023/08/08/open-message/-links-with-mu4e-or-fastmail/</guid>
      <description>&lt;p&gt;This is a small variation of the &lt;a href=&#34;https://vxlabs.com/2019/04/20/link-thunderbird-emails-from-emacs-orgmode/&#34;&gt;2019 post on linking to emails from Org mode&#xA;using Thunderbird&lt;/a&gt;, where instead we show how to open the &lt;code&gt;message://&lt;/code&gt; links&#xA;with &lt;code&gt;mu4e&lt;/code&gt; if active, or the &lt;a href=&#34;https://www.fastmail.com/&#34;&gt;fastmail&lt;/a&gt; web-app if it is not.&lt;/p&gt;&#xA;&lt;p&gt;You might remember that &lt;code&gt;message://msg-id-here&lt;/code&gt; links represent one of the better&#xA;ways to link to emails from &lt;a href=&#34;https://cpbotha.net/2023/04/11/note-taking-strategy-2023/&#34;&gt;your PKM systems&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;code&#34;&gt;Code&lt;/h2&gt;&#xA;&lt;p&gt;Below is the code. Let me know in the comments if you have any questions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ThreadPoolExecutor context manager with nested tasks</title>
      <link>https://vxlabs.com/2023/02/12/threadpoolexecutor-context-manager-with-nested-tasks/</link>
      <pubDate>Sun, 12 Feb 2023 11:11:00 +0200</pubDate>
      <guid>https://vxlabs.com/2023/02/12/threadpoolexecutor-context-manager-with-nested-tasks/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Python&amp;rsquo;s &lt;code&gt;ThreadPoolExecutor&lt;/code&gt;&amp;rsquo;s context manager is a really neat way to run a&#xA;bunch of (I/O) work in a thread pool, and then clean everything up when the&#xA;context is exited.&lt;/p&gt;&#xA;&lt;p&gt;Something like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ThreadPoolExecutor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;executor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;N&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;executor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;submit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;my_function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arg1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arg2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;where-did-my-tasks-go-attempt-1&#34;&gt;Where did my tasks go, attempt 1&lt;/h2&gt;&#xA;&lt;p&gt;Recently at work however, I had to debug a case where it appeared that it would&#xA;discard tasks that had been submitted later.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unison file synchronization directly via the WSL bridge</title>
      <link>https://vxlabs.com/2022/10/22/unison-file-synchronization-directly-via-the-wsl-bridge/</link>
      <pubDate>Sat, 22 Oct 2022 16:26:00 +0200</pubDate>
      <guid>https://vxlabs.com/2022/10/22/unison-file-synchronization-directly-via-the-wsl-bridge/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;For years and years now, I keep all of my work, including my checked-out source&#xA;code, in some form of file synchronization system.&lt;/p&gt;&#xA;&lt;p&gt;The advantages of having all of your files always up to date on all of the&#xA;comptuters you work on are considerable.&lt;/p&gt;&#xA;&lt;p&gt;More practically, I often get up from my work computer, and then continue on my&#xA;laptop, or on my home computer, without having to think about it, and&#xA;especially without having to abuse git commits purely to be able to transfer to&#xA;another machine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modify md-roam for frontmatter-less operation</title>
      <link>https://vxlabs.com/2022/09/24/modify-md-roam-for-frontmatter-less-operation/</link>
      <pubDate>Sat, 24 Sep 2022 22:04:00 +0200</pubDate>
      <guid>https://vxlabs.com/2022/09/24/modify-md-roam-for-frontmatter-less-operation/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;My notes database consists primarily of Emacs &lt;a href=&#34;https://orgmode.org/&#34;&gt;Org mode&lt;/a&gt; files, interspersed with&#xA;a small number of markdown files, some of them from previous note-taking&#xA;systems (for example, I went through a &lt;a href=&#34;https://github.com/gollum/gollum&#34;&gt;Gollum&lt;/a&gt; stage early in 2014, according to&#xA;my notes then), and some of them for easier mobile consumption and production.&lt;/p&gt;&#xA;&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/nobiot/md-roam&#34;&gt;nobiot&amp;rsquo;s md-roam Emacs package&lt;/a&gt; which makes it possible&#xA;for these markdown files to show up (in sheep&amp;rsquo;s clothes, as it were) amongst&#xA;all of my usual &lt;a href=&#34;https://www.orgroam.com/&#34;&gt;org-roam&lt;/a&gt; nodes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Conservative rendering and liberal parsing of ISO 8601 timestamps in Python</title>
      <link>https://vxlabs.com/2022/08/05/conservative-rendering-and-liberal-parsing-of-iso-8601-timestamps-in-python/</link>
      <pubDate>Fri, 05 Aug 2022 15:28:00 +0200</pubDate>
      <guid>https://vxlabs.com/2022/08/05/conservative-rendering-and-liberal-parsing-of-iso-8601-timestamps-in-python/</guid>
      <description>&lt;p&gt;You&amp;rsquo;ll see in &lt;a href=&#34;https://bugs.python.org/issue37962&#34;&gt;Python bug 37962&lt;/a&gt; that &lt;a href=&#34;https://docs.python.org/3/library/datetime.html#datetime.datetime.isoformat&#34;&gt;&lt;code&gt;datetime.isoformat()&lt;/code&gt;&lt;/a&gt; and&#xA;&lt;a href=&#34;https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat&#34;&gt;&lt;code&gt;datetime.fromisoformat()&lt;/code&gt;&lt;/a&gt; use a restricted subset of the ISO 8601 timestamp&#xA;formatting standards.&lt;/p&gt;&#xA;&lt;p&gt;This is similar to &lt;a href=&#34;https://www.w3.org/TR/NOTE-datetime&#34;&gt;the subset followed by W3C&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Recently, we ran into the specific issue that &lt;code&gt;fromisoformat()&lt;/code&gt; rejects inputs&#xA;where the timezone is specified as &lt;code&gt;+hhmm&lt;/code&gt; instead of &lt;code&gt;+hh:mm&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Both are allowed by ISO 8601, but only the latter is part of the restricted subset.&lt;/p&gt;&#xA;&lt;p&gt;Following &lt;a href=&#34;https://en.wikipedia.org/wiki/Robustness_principle&#34;&gt;the Robustness principle&lt;/a&gt; (also known as Postel&amp;rsquo;s law) in the design&#xA;of our APIs, we would prefer to&lt;/p&gt;</description>
    </item>
    <item>
      <title>TypeScript development with Emacs, tree-sitter and LSP in 2022</title>
      <link>https://vxlabs.com/2022/06/12/typescript-development-with-emacs-tree-sitter-and-lsp-in-2022/</link>
      <pubDate>Sun, 12 Jun 2022 22:00:00 +0200</pubDate>
      <guid>https://vxlabs.com/2022/06/12/typescript-development-with-emacs-tree-sitter-and-lsp-in-2022/</guid>
      <description>&lt;p&gt;In this post, I show how to setup Emacs for TypeScript and React (tsx)&#xA;development, with tree-sitter for syntax highlighting and indentation, and LSP&#xA;with the TypeScript compiler (including a plugin for faster eslint), via eglot,&#xA;for code intelligence.&lt;/p&gt;&#xA;&lt;h2 id=&#34;update-on-2022-12-27-emacs-29-has-tree-sitter-built-in&#34;&gt;Update on 2022-12-27: emacs 29 has tree-sitter built-in!&lt;/h2&gt;&#xA;&lt;p&gt;Tree-sitter was merged into Emacs core on November 23 of 2022.&lt;/p&gt;&#xA;&lt;p&gt;The post below is for the situation BEFORE the merge.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re running Emacs 29 or later (as I am at the end of 2022), you should be&#xA;using the built-in tree-sitter. Let me know if you would like to see a new post&#xA;dealing with the new merged situation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Connecting the Shelly 1 to an ET Systems gate motor for Apple HomeKit control</title>
      <link>https://vxlabs.com/2022/03/05/connecting-the-shelly-1-to-an-et-systems-gate-motor-for-apple-homekit-control/</link>
      <pubDate>Sat, 05 Mar 2022 15:51:00 +0200</pubDate>
      <guid>https://vxlabs.com/2022/03/05/connecting-the-shelly-1-to-an-et-systems-gate-motor-for-apple-homekit-control/</guid>
      <description>&lt;p&gt;This post shows how you can connect a Shelly 1 unit to an ET Systems gate motor&#xA;so that you can open your driveway gate via internet.&lt;/p&gt;&#xA;&lt;p&gt;In my case I opted to flash the Shelly 1 with the brilliant &lt;a href=&#34;https://github.com/mongoose-os-apps/shelly-homekit&#34;&gt;shelly-homekit&lt;/a&gt;&#xA;firmware so that my whole family can control the gate via Apple&amp;rsquo;s HomeKit, but&#xA;you could just as easily make use of the Google Assistant or the &lt;a href=&#34;https://www.home-assistant.io/integrations/shelly/&#34;&gt;Home Assistant&lt;/a&gt;&#xA;integrations.&lt;/p&gt;&#xA;&lt;p&gt;The more important part of this post is how to wire up everything correctly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Kubernetes for development containers</title>
      <link>https://vxlabs.com/2021/11/21/using-kubernetes-for-development-containers/</link>
      <pubDate>Sun, 21 Nov 2021 16:30:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/11/21/using-kubernetes-for-development-containers/</guid>
      <description>&lt;p&gt;In this post I show how you can setup a Kubernetes pod for reproducible&#xA;development purposes on a single-node Kubernetes cluster using Rancher Desktop&#xA;on Linux or Docker Desktop for Windows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-are-devcontainers&#34;&gt;What are devcontainers?&lt;/h2&gt;&#xA;&lt;p&gt;At my quasi-hypothetical workplace, we are fans of &lt;a href=&#34;https://code.visualstudio.com/docs/remote/containers&#34;&gt;Visual Studio Code&amp;rsquo;s&#xA;development containers idea&lt;/a&gt;, or devcontainers for short.&lt;/p&gt;&#xA;&lt;p&gt;In short, you add a specially crafted &lt;code&gt;devcontainer.json&lt;/code&gt; file (and some docker&#xA;yamls) to your repo, and the next time a new dev opens the project, they will&#xA;be prompted by their VSCode whether they would like to have the whole&#xA;development environment setup automatically.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Developer experience setting up a minimal API in Go, C# and Python</title>
      <link>https://vxlabs.com/2021/10/03/dx-minimal-api-go-csharp-python/</link>
      <pubDate>Sun, 03 Oct 2021 17:04:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/10/03/dx-minimal-api-go-csharp-python/</guid>
      <description>&lt;figure&gt;&lt;a href=&#34;images/Developer_experience_setting_up_a_minimal_API_in_Go,_CSharp_and_Python/2021-10-04_15-47-14_undraw_programming_2svr_cover.png&#34;&gt;&#xA;    &lt;img&#xA;        &#xA;            sizes=&#34;(min-width: 35em) 1200px, 100vw&#34;&#xA;              &#xA;            srcset=&#39;&#xA;            &#xA;                &#xA;                https://vxlabs.com/2021/10/03/dx-minimal-api-go-csharp-python/images/Developer_experience_setting_up_a_minimal_API_in_Go,_CSharp_and_Python/2021-10-04_15-47-14_undraw_programming_2svr_cover_hu_eba98538b7206b87.png 480w,&#xA;            &#xA;                &#xA;                https://vxlabs.com/2021/10/03/dx-minimal-api-go-csharp-python/images/Developer_experience_setting_up_a_minimal_API_in_Go,_CSharp_and_Python/2021-10-04_15-47-14_undraw_programming_2svr_cover_hu_e68de3e4412e818f.png 800w,&#xA;            &#xA;                &#xA;                https://vxlabs.com/2021/10/03/dx-minimal-api-go-csharp-python/images/Developer_experience_setting_up_a_minimal_API_in_Go,_CSharp_and_Python/2021-10-04_15-47-14_undraw_programming_2svr_cover_hu_2e93c906ee9e080a.png 1200w,&#xA;            &#xA;                &#xA;                &#xA;            &#39;&#xA;&#xA;            &#xA;            &#xA;            src=&#34;https://vxlabs.com/2021/10/03/dx-minimal-api-go-csharp-python/images/Developer_experience_setting_up_a_minimal_API_in_Go,_CSharp_and_Python/2021-10-04_15-47-14_undraw_programming_2svr_cover_hu_e68de3e4412e818f.png&#34;&#xA;            &#xA;&#xA;        &#xA;            alt=&#34;Image courtesy of https://undraw.co/&#34; width=&#34;70%&#34;/&gt; &lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Imagine the following possibly hypothetical situation:&lt;/p&gt;&#xA;&lt;p&gt;You work in an organization or team that is heavily Python-focused, primarily&#xA;due to operating in application domains where scientific computing is&#xA;important.&lt;/p&gt;&#xA;&lt;p&gt;The Scientific Python ecosystem, of which machine learning is just one&#xA;admittedly major theme, is brilliant for this.&lt;/p&gt;&#xA;&lt;p&gt;However, you would like to evaluate development stacks outside of the Python&#xA;world for the implementation of small and higher-performance services, which&#xA;don&amp;rsquo;t need SciPy, to augment your architecture.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Convert Org Mode files to docx with CMake and Pandoc for mobile accessibility</title>
      <link>https://vxlabs.com/2021/09/29/convert-org-mode-files-to-docx-with-cmake-and-pandoc-for-mobile-accessibility/</link>
      <pubDate>Wed, 29 Sep 2021 10:08:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/09/29/convert-org-mode-files-to-docx-with-cmake-and-pandoc-for-mobile-accessibility/</guid>
      <description>&lt;p&gt;The wonderful Emacs Org mode is the basis for the largest part of my personal&#xA;knowledge management system.&lt;/p&gt;&#xA;&lt;p&gt;However, as I&amp;rsquo;ve &lt;a href=&#34;https://cpbotha.net/2019/09/21/note-taking-strategy-2019/#mobile&#34;&gt;mentioned before, mobile accessibility is its weakest point&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I&amp;rsquo;m going to explain my possibly unconventional new solution to&#xA;the important requirement I mentioned in that note-taking post:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Ideally, I would have easy access to my complete org database and any related&#xA;files.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;As you can easily deduce from the title of this post, the solution involves&#xA;converting all of my org database into docx files, with the main motivation&#xA;that the Dropbox mobile app has &lt;em&gt;excellent&lt;/em&gt; support both for the fast previewing&#xA;and searching through the contents of docx files, while it has none of that&#xA;sort of support for .org or .md files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configure org-roam v2 to update database only when idle</title>
      <link>https://vxlabs.com/2021/07/22/configure-org-roam-v2-to-update-database-only-when-idle/</link>
      <pubDate>Thu, 22 Jul 2021 22:31:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/07/22/configure-org-roam-v2-to-update-database-only-when-idle/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is reproduced here with permission from &lt;a href=&#34;https://orgmode-exocortex.com/2021/07/22/configure-org-roam-v2-to-update-database-only-when-idle/&#34;&gt;The OrgMode ExoCortex&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/org-roam/org-roam&#34;&gt;org-roam v2&lt;/a&gt;, which was &lt;a href=&#34;https://blog.jethro.dev/posts/org%5Froam%5Fv2/&#34;&gt;recently released&lt;/a&gt;, removed the update database on idle&#xA;functionality (which &lt;a href=&#34;https://github.com/org-roam/org-roam/pull/1032&#34;&gt;I coincidentally contributed&lt;/a&gt;) as part of its&#xA;simplification.&lt;/p&gt;&#xA;&lt;p&gt;I agree with this removal, as I think it makes the most sense to keep the&#xA;org-roam core as simple as possible.&lt;/p&gt;&#xA;&lt;p&gt;That being said, being able to have the org-roam database update only when&#xA;Emacs is idle can be helpful for some folks, like me, who &lt;code&gt;C-x C-s&lt;/code&gt; quite often&#xA;and notice a few hundred millisecond blocking delay on files of a thousand or&#xA;more lines.&lt;/p&gt;</description>
    </item>
    <item>
      <title>vxlabs software development handbook</title>
      <link>https://vxlabs.com/software-development-handbook/</link>
      <pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate>
      <guid>https://vxlabs.com/software-development-handbook/</guid>
      <description>&lt;p&gt;Welcome to open source vxlabs software development handbook.&lt;/p&gt;&#xA;&lt;p&gt;It contains a number of best practices for building software, generally&#xA;web-based, using Python on the backend and TypeScript for the&#xA;frontend.&lt;/p&gt;&#xA;&lt;p&gt;However, most of the guidelines are more broadly applicable.&lt;/p&gt;&#xA;&lt;p&gt;Important note: These are only &lt;em&gt;guidelines&lt;/em&gt;. They were never meant to be&#xA;applied dogmatically. They are great when you are starting fresh, and their&#xA;intentions are good, but please do understand and adapt to your situation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Always activate CopyArrivalDate for mbsync</title>
      <link>https://vxlabs.com/2021/03/21/mbsync-copyarrivaldate-yes/</link>
      <pubDate>Sun, 21 Mar 2021 12:44:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/03/21/mbsync-copyarrivaldate-yes/</guid>
      <description>&lt;p&gt;Recently the great support folks at&#xA;&lt;a href=&#34;https://cpbotha.net/2016/08/06/moving-12-years-of-email-from-gmail-to-fastmail/&#34;&gt;FastMail&lt;/a&gt;&#xA;helped me to debug a rather irritating issue where emails that had languished&#xA;in my inbox for too long, and were then processed by me to end up in the&#xA;&lt;code&gt;Archive&lt;/code&gt; folder, would get the date of archival assigned as the main email&#xA;date, instead of the date of arrival.&lt;/p&gt;&#xA;&lt;p&gt;For example, an email with a date in November of 2020 would get a new date of&#xA;say February 21, 2021, if that&amp;rsquo;s the date that I finally got around to it and&#xA;moved it to the &lt;code&gt;Archive&lt;/code&gt; folder.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GnuPG pinentry via the Emacs minibuffer</title>
      <link>https://vxlabs.com/2021/03/21/gnupg-pinentry-via-the-emacs-minibuffer/</link>
      <pubDate>Sun, 21 Mar 2021 10:12:00 +0200</pubDate>
      <guid>https://vxlabs.com/2021/03/21/gnupg-pinentry-via-the-emacs-minibuffer/</guid>
      <description>&lt;p&gt;On the various and different platforms where I use Emacs and GnuPG encryption,&#xA;I&amp;rsquo;ve traditionally always had a bit of a struggle setting up a suitable&#xA;mechanism for private key passphrase entry, or pinentry.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I landed upon this extremely easy-to-setup and reliable solution&#xA;where Emacs and GnuPG can be configured so that Emacs requests the passphrase&#xA;via its standard minibuffer password entry mechanism, and then passes this&#xA;through to GnuPG.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fix non-display of ivy-rich switch buffer directories in Emacs</title>
      <link>https://vxlabs.com/2020/11/15/fix-ivy-rich-switch-buffer-directories-display-in-emacs/</link>
      <pubDate>Sun, 15 Nov 2020 12:36:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/11/15/fix-ivy-rich-switch-buffer-directories-display-in-emacs/</guid>
      <description>&lt;p&gt;Recently, as I replaced more of my &lt;a href=&#34;https://emacs-helm.github.io/helm/&#34;&gt;Emacs-helm&lt;/a&gt; configuration with &lt;a href=&#34;https://oremacs.com/swiper/&#34;&gt;counsel and&#xA;ivy&lt;/a&gt;, I noticed that &lt;code&gt;ivy-switch-buffer&lt;/code&gt;, when augmented by &lt;a href=&#34;https://github.com/Yevgnen/ivy-rich&#34;&gt;ivy-rich&lt;/a&gt;, was not&#xA;showing the directories of the buffers it was listing.&lt;/p&gt;&#xA;&lt;p&gt;After some Lisp spelunking, I discovered that it was because ivy-rich relies on&#xA;the presence of either the &lt;a href=&#34;https://github.com/bbatsov/projectile&#34;&gt;projectile&lt;/a&gt; package, something I do not wish to have&#xA;in my Emacs configuration, or on &lt;code&gt;project.el&lt;/code&gt;, which I also do not use.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I show how you can get full buffer filenames and project names&#xA;with the lighter-than-projectile and more-robust-than-project.el&#xA;&lt;a href=&#34;https://github.com/technomancy/find-file-in-project&#34;&gt;find-file-in-project&lt;/a&gt;, or how you can bypass the project name functionality&#xA;completely and just get buffer filenames with no extra packages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sort TypeScript import groups from standard to local</title>
      <link>https://vxlabs.com/2020/10/06/sort-typescript-import-groups-from-standard-to-local/</link>
      <pubDate>Tue, 06 Oct 2020 21:32:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/10/06/sort-typescript-import-groups-from-standard-to-local/</guid>
      <description>&lt;p&gt;Welcome to the first entry in a new series that&amp;rsquo;s probably going to stop with&#xA;this first entry, or maybe not.&lt;/p&gt;&#xA;&lt;p&gt;The series is called &lt;em&gt;Charl&amp;rsquo;s Unwritten Rules of Software Development&lt;/em&gt;, or&#xA;&lt;a href=&#34;https://vxlabs.com/tags/cursd/&#34;&gt;cursd&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I am also planning another series called &lt;em&gt;Charl&amp;rsquo;s Unwritten Rules of Applied&#xA;Machine Learning&lt;/em&gt; that is on its part probably going to remain in the planning&#xA;stage, or maybe not.&lt;/p&gt;&#xA;&lt;p&gt;In this first CURSD post, I would like to document my hitherto unwritten rule&#xA;for ordering your TypeScript (or JavaScript) import groups.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Emacs Lisp function to convert attachment: links to file: links for ox-hugo exports</title>
      <link>https://vxlabs.com/2020/07/25/emacs-lisp-function-convert-attachment-to-file/</link>
      <pubDate>Sat, 25 Jul 2020 22:38:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/07/25/emacs-lisp-function-convert-attachment-to-file/</guid>
      <description>&lt;p&gt;You might have noticed &lt;a href=&#34;https://vxlabs.com/2020/07/23/vscode-pylance-type-mismatch-warning/#aside-ox-hugo-exports-with-org-download-screenshots&#34;&gt;the side-note in yesterday&amp;rsquo;s blog post&lt;/a&gt; where I mentioned&#xA;that exporting Orgmode notes with &lt;a href=&#34;https://github.com/abo-abo/org-download&#34;&gt;org-download&lt;/a&gt; attachment-style screenshots to&#xA;blog posts using &lt;a href=&#34;https://ox-hugo.scripter.co/&#34;&gt;ox-hugo&lt;/a&gt; required one to convert &lt;code&gt;[[attachment:...]]&lt;/code&gt;-style&#xA;links to &lt;code&gt;[[file:...][file:...]]&lt;/code&gt;-style links.&lt;/p&gt;&#xA;&lt;p&gt;Because the barrier from private note to possibly useful blog post should be as&#xA;low as possible, I made the below function that will do the required conversion&#xA;for the link under your cursor.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cpb/convert-attachment-to-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;&amp;#34;Convert [[attachment:..]] to [[file:..][file:..]]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;eq&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;car&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-property&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:type&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;c1&#34;&gt;;; only translate attachment type links&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;string=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;attachment&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;;; translate attachment path to relative filename using org-attach API&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;;; 2020-11-15: org-attach-export-link was removed, so had to rewrite&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;let*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;link-end&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-property&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:end&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;link-begin&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-property&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:begin&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;c1&#34;&gt;;; :path is everything after attachment:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-element-property&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;:path&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;elem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;c1&#34;&gt;;; expand that to the full filename&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fullpath&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-attach-expand&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;c1&#34;&gt;;; then make it relative to the directory of this org file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;current-dir&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;file-name-directory&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;default-directory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                         &lt;span class=&#34;nf&#34;&gt;buffer-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;relpath&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-relative-name&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fullpath&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;current-dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;c1&#34;&gt;;; delete the existing link&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;delete-region&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;link-begin&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;link-end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;c1&#34;&gt;;; replace with file: link and file: description&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;insert&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;[[file:%s][file:%s]]&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;relpath&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;relpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))))))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://emacs.stackexchange.com/a/49068&#34;&gt;This Stack Overflow&lt;/a&gt; answer gave me a great basis using the org-element API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Set severity override of Visual Studio Code Pylance type mismatches for better visual distinction</title>
      <link>https://vxlabs.com/2020/07/23/vscode-pylance-type-mismatch-warning/</link>
      <pubDate>Thu, 23 Jul 2020 22:57:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/07/23/vscode-pylance-type-mismatch-warning/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://devblogs.microsoft.com/python/announcing-pylance-fast-feature-rich-language-support-for-python-in-visual-studio-code/&#34;&gt;Pylance&lt;/a&gt; is Microsoft&amp;rsquo;s new and improved Python language server.&lt;/p&gt;&#xA;&lt;p&gt;I have been using this in my Visual Studio Code remote editing sessions&#xA;(editing Python codes on the machine learning Linux machine next to me, from my&#xA;laptop), and I&amp;rsquo;m enjoying its new type-checking capabilities.&lt;/p&gt;&#xA;&lt;p&gt;Today I discovered a little configuration change that improved my Pylance&#xA;experience, so I thought I&amp;rsquo;d share in case it helps anyone else.&lt;/p&gt;&#xA;&lt;h2 id=&#34;aside-ox-hugo-exports-with-org-download-screenshots&#34;&gt;Aside: ox-hugo exports with org-download screenshots&lt;/h2&gt;&#xA;&lt;p&gt;It was also an excuse to test how &lt;a href=&#34;https://ox-hugo.scripter.co/&#34;&gt;ox-hugo&lt;/a&gt; exports would work for a note&#xA;straight from my daily journal if screenshots were involved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Open WSL2 files in Windows apps using Emacs TRAMP</title>
      <link>https://vxlabs.com/2020/05/21/open-wsl2-files-in-windows-apps-using-emacs-tramp/</link>
      <pubDate>Thu, 21 May 2020 22:46:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/05/21/open-wsl2-files-in-windows-apps-using-emacs-tramp/</guid>
      <description>&lt;p&gt;From the department of how-obscure-can-you-get-really, I present you with this&#xA;neat trick to open &lt;a href=&#34;http://localhost:1313/tags/wsl/&#34;&gt;WSL2&lt;/a&gt; files in their native Windows handlers via Emacs TRAMP&#xA;connection from WSL1 to WSL2.&lt;/p&gt;&#xA;&lt;h2 id=&#34;motivation&#34;&gt;Motivation&lt;/h2&gt;&#xA;&lt;p&gt;My use case is this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On Windows, I use Emacs primarily from WSL1 to manage everything on Windows,&#xA;on WSL1 and on the WSL2 distros I use for development.&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;m often connected to WSL2 via &lt;a href=&#34;http://wikemacs.org/wiki/TRAMP&#34;&gt;TRAMP&lt;/a&gt;, for managing files with dired,&#xA;manipulating the results of simulations, and using &lt;a href=&#34;https://magit.vc/&#34;&gt;the amazing magit&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;When I open e.g. a simulation report in HTML or some other format, I would&#xA;ideally like it to open with my Windows browser.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;method&#34;&gt;Method&lt;/h2&gt;&#xA;&lt;p&gt;The code below is a slightly modified version of &lt;code&gt;crux-open-with&lt;/code&gt; from &lt;a href=&#34;https://github.com/bbatsov/crux&#34;&gt;the crux&#xA;package&lt;/a&gt;, with the one major change that it uses the relevant TRAMP mechanisms&#xA;to spawn a &lt;em&gt;remote&lt;/em&gt; process to open the file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Emacs, WSL, helm-locate and Everything</title>
      <link>https://vxlabs.com/2020/05/09/emacs-wsl-helm-locate-and-everything/</link>
      <pubDate>Sat, 09 May 2020 23:38:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/05/09/emacs-wsl-helm-locate-and-everything/</guid>
      <description>&lt;p&gt;On Windows, running Emacs on WSL (the Windows Subsystem for Linux, or rather&#xA;Linux in Windows), is faster and in my experience an altogether a better&#xA;experience than running native Windows Emacs.&lt;/p&gt;&#xA;&lt;p&gt;However, you will need to do some tweaking to use it to its maximum potential,&#xA;some of which &lt;a href=&#34;https://vxlabs.com/2020/03/15/xdg-open-wsl/&#34;&gt;I have written about before&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I show a small but useful trick to use the brilliant and&#xA;lightning fast &lt;a href=&#34;https://www.voidtools.com/&#34;&gt;Everything search tool&lt;/a&gt; to find directories and files anywhere on&#xA;your Windows system whilst using &lt;a href=&#34;https://github.com/emacs-helm/helm/wiki/Locate&#34;&gt;&lt;code&gt;helm-locate&lt;/code&gt;&lt;/a&gt; from your WSL Emacs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Voice capture org-mode notes and more using Siri Shortcuts on iOS</title>
      <link>https://vxlabs.com/2020/05/01/voice-capture-org-mode-notes-and-more-using-siri-shortcuts-on-ios/</link>
      <pubDate>Fri, 01 May 2020 23:46:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/05/01/voice-capture-org-mode-notes-and-more-using-siri-shortcuts-on-ios/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post originally appeared at &lt;a href=&#34;https://orgmode-exocortex.com/2020/04/30/voice-capture-org-mode-notes-and-more-using-siri-shortcuts-on-ios/&#34;&gt;Org Mode Exocortex&lt;/a&gt;, my Org mode-focused blog,&#xA;on April 30, 2020.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;:ID:       b3c6cee0-567e-4324-9685-f6fd9959d402&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Inspired by &lt;a href=&#34;https://orgmode-exocortex.com/2020/04/28/voice-capture-org-mode-tasks-on-android/&#34;&gt;Stéfan&amp;rsquo;s post explaining how to voice capture TODOs using Google&#xA;Assistant on Android&lt;/a&gt;, I decided to find out how one would go about hooking up&#xA;Siri dictation on iOS to Org mode.&lt;/p&gt;&#xA;&lt;p&gt;It turns out that &lt;a href=&#34;https://support.apple.com/en-us/HT209055&#34;&gt;Siri Shortcuts&lt;/a&gt; is a pretty amazing tool that can be used for&#xA;all kinds of automation on your iPhone or iPad.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cite consistently between org-ref and ox-hugo</title>
      <link>https://vxlabs.com/2020/04/26/cite-consistently-between-org-ref-and-ox-hugo/</link>
      <pubDate>Sun, 26 Apr 2020 21:05:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/04/26/cite-consistently-between-org-ref-and-ox-hugo/</guid>
      <description>&lt;h2 id=&#34;warning-on-2021-06-21-don-t-try-this-work-around&#34;&gt;Warning on 2021-06-21: Don&amp;rsquo;t try this work-around&lt;/h2&gt;&#xA;&lt;p&gt;With a pandoc 2.5 installation on Ubuntu 20.04.2 LTS I am not able to get this&#xA;hack working anymore.&lt;/p&gt;&#xA;&lt;p&gt;My suggestion is to look into some of the better solutions that were later&#xA;implemented in ox-hugo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;I have &lt;a href=&#34;https://vxlabs.com/2017/02/20/from-org-file-with-local-bibtex-to-latex-and-pdf/&#34;&gt;written before&lt;/a&gt; explaining how you can use org-ref to insert citations&#xA;into your org mode documents, and then have them export perfectly into PDF&#xA;documents via LaTeX.&lt;/p&gt;</description>
    </item>
    <item>
      <title>xdg-open-wsl: A WSL-specific xdg-open replacement to open files and links using Windows apps.</title>
      <link>https://vxlabs.com/2020/03/15/xdg-open-wsl/</link>
      <pubDate>Sun, 15 Mar 2020 14:01:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/03/15/xdg-open-wsl/</guid>
      <description>&lt;p&gt;TL;DR: Install my WSL-specific xdg-open replacement by following the&#xA;instructions on &lt;a href=&#34;https://github.com/cpbotha/xdg-open-wsl&#34;&gt;the xdg-open-wsl github&#xA;page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;convert-a-python-script-to-a-python-package-with-poetry&#34;&gt;Convert a Python script to a Python package with Poetry.&lt;/h2&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;https://vxlabs.com/2020/03/07/patch-emacs-org-open-file-using-advice/&#34;&gt;my previous vxlabs&#xA;post&lt;/a&gt;, I explained how to&#xA;use Emacs lisp advising to fix buggy behaviour when opening Windows files from&#xA;Emacs running on WSL.&lt;/p&gt;&#xA;&lt;p&gt;In that post I mentioned my home-grown xdg-open replacement.&lt;/p&gt;&#xA;&lt;p&gt;As I was writing that bit, I wondered how long it would take for the first&#xA;astute reader to wonder about the mentioned script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Patch Emacs org-open-file using advice.</title>
      <link>https://vxlabs.com/2020/03/07/patch-emacs-org-open-file-using-advice/</link>
      <pubDate>Sat, 07 Mar 2020 13:48:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/03/07/patch-emacs-org-open-file-using-advice/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background.&lt;/h2&gt;&#xA;&lt;p&gt;On Windows, I run Emacs on WSL 1 whilst displaying to Windows via &lt;a href=&#34;https://x410.dev/&#34;&gt;the X410&#xA;X-Server&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is currently the best compromise if one wants to interoperate with the&#xA;NTFS side, at least until the WSL 2 developers manage to fix up its &lt;a href=&#34;https://vxlabs.com/2019/12/06/wsl2-io-measurements/&#34;&gt;current&#xA;cross-OS IO performance issues&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;As part of this setup, I have written a small&#xA;&lt;a href=&#34;https://linux.die.net/man/1/xdg-open&#34;&gt;xdg-open&lt;/a&gt; replacement in Python which&#xA;does path translation. This enables me to open any links from Emacs, running on&#xA;WSL 1, using the relevant Windows file handler, no matter whether the file&#xA;finds itself on the Windows or the WSL side of the world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use supervisor to run fastcgi behind nginx.</title>
      <link>https://vxlabs.com/2020/02/22/supervisor-fastcgi-nginx/</link>
      <pubDate>Sat, 22 Feb 2020 22:36:00 +0200</pubDate>
      <guid>https://vxlabs.com/2020/02/22/supervisor-fastcgi-nginx/</guid>
      <description>&lt;p&gt;Previously I wrote &lt;a href=&#34;https://vxlabs.com/2017/06/06/setting-up-fastcgi-apps-on-webfaction/&#34;&gt;how to get the WlzIIPSrv large image server running on&#xA;webfaction, using&#xA;lighttpd&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Fast-forward 2.5 years, and I was busy porting the whole site (again), this&#xA;time from webfaction (acquired by godaddy, who are planning to kill the great&#xA;webfaction product), along with all of my other websites (including this one&#xA;that you&amp;rsquo;re reading), to a fast, self-managed Hetzner VPS in Nuremberg.&lt;/p&gt;&#xA;&lt;p&gt;I needed to get that exact same WlzIIPSrv large image slice server fastcgi&#xA;running, but this time behind nginx and preferably without lighttpd.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparing WSL1 and WSL2 filesystem I/O performance on local and host files.</title>
      <link>https://vxlabs.com/2019/12/06/wsl2-io-measurements/</link>
      <pubDate>Fri, 06 Dec 2019 22:32:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/12/06/wsl2-io-measurements/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;I recently joined the &lt;a href=&#34;https://insider.windows.com/&#34;&gt;Windows Insider Program&lt;/a&gt;,&#xA;on the slow ring, to be able to test a development version of the&#xA;soon-to-be-released &lt;a href=&#34;https://docs.microsoft.com/en-us/windows/wsl/wsl2-about&#34;&gt;Windows Subsystem for Linux, version 2, henceforth WSL&#xA;2&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Microsoft is doing fantastic work integrating Linux with their Windows operating system.&lt;/p&gt;&#xA;&lt;p&gt;I find it personally quite useful being able to do native Linux development on&#xA;the Windows partition of my ThinkPad, whilst still having access to all of the&#xA;native Windows applications that I sometimes need to use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improve the plaintext email experience through format=flowed with long lines.</title>
      <link>https://vxlabs.com/2019/08/25/format-flowed-with-long-lines/</link>
      <pubDate>Sun, 25 Aug 2019 19:20:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/08/25/format-flowed-with-long-lines/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR.&lt;/h1&gt;&#xA;&lt;p&gt;In this post, I propose bending the &lt;a href=&#34;https://tools.ietf.org/html/rfc3676&#34;&gt;&lt;code&gt;format=flowed&lt;/code&gt;&#xA;RFC&lt;/a&gt; by allowing lines up to the SMTP&#xA;limit of 998 characters, in order to improve the plaintext reading experience&#xA;for users of non-compliant email clients and services, such as GMail, FastMail,&#xA;Outlook and others.&lt;/p&gt;&#xA;&lt;h1 id=&#34;background&#34;&gt;Background.&lt;/h1&gt;&#xA;&lt;p&gt;The &lt;code&gt;format=flowed&lt;/code&gt; plaintext email convention described in&#xA;&lt;a href=&#34;https://tools.ietf.org/html/rfc3676&#34;&gt;RFC3676&lt;/a&gt; is an elegant method whereby&#xA;plaintext emails can be prepared in such a way so that they are wrapped&#xA;correctly on older email clients, but they can also be reflowed by modern&#xA;clients supporting that part of the standard.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Manjaro Linux with Bumblebee on the Thinkpad X1 Extreme in 2019.</title>
      <link>https://vxlabs.com/2019/07/28/manjaro-bumblebee-thinkpad-x1-extreme-2019/</link>
      <pubDate>Sun, 28 Jul 2019 15:19:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/07/28/manjaro-bumblebee-thinkpad-x1-extreme-2019/</guid>
      <description>&lt;p&gt;As &lt;a href=&#34;https://vxlabs.com/2019/04/19/django-typescript-docker-compose-windows/&#34;&gt;I mentioned in a previous blog&#xA;post&lt;/a&gt;, I switched from a&#xA;2017 15&amp;quot; MacBook Pro to a Thinkpad X1 Extreme in April of this year.&lt;/p&gt;&#xA;&lt;p&gt;Although I&amp;rsquo;m still using Windows on this machine in order to see what all the&#xA;fuss is about (BTW, &lt;a href=&#34;https://docs.microsoft.com/en-us/windows/wsl/about&#34;&gt;WSL&lt;/a&gt;&#xA;is amazing), the Linux itch could not be ignored anymore.&lt;/p&gt;&#xA;&lt;p&gt;What makes this laptop slightly more challenging than some of my previous Linux&#xA;laptop and &lt;a href=&#34;https://vxlabs.com/tags/optimus/&#34;&gt;Optimus&lt;/a&gt; (dynamically switching graphics)&#xA;adventures, is that in this case the the NVIDIA dGPU is &lt;em&gt;hard-wired&lt;/em&gt; to the&#xA;external outputs (HDMI and and displayport over thunderbolt).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Is mbsync really faster than offlineimap? A measurement.</title>
      <link>https://vxlabs.com/2019/07/05/mbsync-vs-offlineimap-speed/</link>
      <pubDate>Fri, 05 Jul 2019 23:24:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/07/05/mbsync-vs-offlineimap-speed/</guid>
      <description>&lt;p&gt;As I recently &lt;a href=&#34;https://vxlabs.com/2019/07/03/send-queued-mails-in-background-with-mu4e/&#34;&gt;changed my imap downloading tool choice from offlineimap to&#xA;mbsync&lt;/a&gt;, and because&#xA;the word on the street (where with &amp;ldquo;street&amp;rdquo; I mean &amp;ldquo;random discussion forums on&#xA;the internet&amp;rdquo;) is that &lt;a href=&#34;http://isync.sourceforge.net/&#34;&gt;mbsync&lt;/a&gt; is generally&#xA;faster than &lt;a href=&#34;https://github.com/OfflineIMAP/offlineimap&#34;&gt;offlineimap&lt;/a&gt;, I wanted&#xA;to run a small test to measure the difference.&lt;/p&gt;&#xA;&lt;h1 id=&#34;methods&#34;&gt;Methods&lt;/h1&gt;&#xA;&lt;p&gt;For this test, I re-synchronized the exact same subset of my IMAP folders,&#xA;totalling about 11000 emails, which together occupy about 2GB on disc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending queued mails in the background with mu4e.</title>
      <link>https://vxlabs.com/2019/07/03/send-queued-mails-in-background-with-mu4e/</link>
      <pubDate>Wed, 03 Jul 2019 22:02:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/07/03/send-queued-mails-in-background-with-mu4e/</guid>
      <description>&lt;p&gt;These days I&amp;rsquo;m running &lt;a href=&#34;https://www.djcbsoftware.nl/code/mu/mu4e.html&#34;&gt;mu4e&lt;/a&gt;,&#xA;the mail programme that runs on the Emacs operating system (the one with the&#xA;terrible editor), on the Windows Subsystem for Linux (WSL).&lt;/p&gt;&#xA;&lt;p&gt;(Previously, see &lt;a href=&#34;https://vxlabs.com/tags/mu4e/&#34;&gt;my other mu4e posts&lt;/a&gt;, I was using it on Linux or&#xA;macOS.)&lt;/p&gt;&#xA;&lt;p&gt;I have also switched from offlineimap to &lt;a href=&#34;http://isync.sourceforge.net/mbsync.html&#34;&gt;isync&amp;rsquo;s&#xA;mbsync&lt;/a&gt; for no other reason than it&#xA;was time to try something new.&lt;/p&gt;&#xA;&lt;p&gt;In addition, and this is the topic of this post, I&amp;rsquo;ve switched from nullmailer&#xA;to Emacs&amp;rsquo;s built-in smtp and smtp queue functionality for email delivery,&#xA;because I now prefer the idea of having a second chance to evaluate whether an&#xA;email should really go out or not.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SA Elections 2019: Votes to seats in parliament.</title>
      <link>https://vxlabs.com/2019/05/28/sa-elections-votes-to-seats/</link>
      <pubDate>Tue, 28 May 2019 22:26:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/05/28/sa-elections-votes-to-seats/</guid>
      <description>&lt;p&gt;On Wednesday, May 8, 2019, South Africans had the opportunity to elect their&#xA;leaders for the coming five years by taking part in the &lt;a href=&#34;https://en.wikipedia.org/wiki/2019_South_African_general_election#Voter_registration&#34;&gt;2019 general&#xA;election&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Of the 26727921 registered voters, 17671616 made their way to the ballots. Of&#xA;these, 17436144 citizens managed to submit a valid vote.&lt;/p&gt;&#xA;&lt;p&gt;These 17M+ votes were then tallied up to determine how the 400 parliamentary&#xA;seats would be allocated to each of the qualifying parties.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows 10 anti-virus slows down Hugo and WSL from 2x to 10x.</title>
      <link>https://vxlabs.com/2019/05/23/windows-10-anti-virus-slows-down-hugo-and-wsl/</link>
      <pubDate>Thu, 23 May 2019 21:57:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/05/23/windows-10-anti-virus-slows-down-hugo-and-wsl/</guid>
      <description>&lt;p&gt;This post documents my measurements of the slow-down caused by the Windows 10&#xA;(1903) anti-virus real-time protection of &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; static&#xA;website builds, both with and without the &lt;a href=&#34;https://docs.microsoft.com/en-us/windows/wsl/install-win10&#34;&gt;Windows Subsystem for Linux&#xA;(WSL)&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;methods&#34;&gt;Methods&lt;/h1&gt;&#xA;&lt;p&gt;I measured the re-generation of a site with about 2700 pages in total (my&#xA;personal blog) using Hugo v0.55.5 on this ThinkPad X1 Extreme (i7 8750H, 32GB&#xA;RAM, &lt;a href=&#34;https://www.storagereview.com/samsung_970_evo_plus_1tb_review&#34;&gt;Samsung Evo Plus 1TB&#xA;SSD&lt;/a&gt;) with&#xA;Windows 10 1903, aka the May 2019 update.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Link directly to emails from Emacs Orgmode using Thunderbird and Thunderlink</title>
      <link>https://vxlabs.com/2019/04/20/link-thunderbird-emails-from-emacs-orgmode/</link>
      <pubDate>Sat, 20 Apr 2019 21:40:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/04/20/link-thunderbird-emails-from-emacs-orgmode/</guid>
      <description>&lt;p&gt;On macOS, links of the form &lt;code&gt;message://message-id&lt;/code&gt; are by default supported by&#xA;the system.&lt;/p&gt;&#xA;&lt;p&gt;Using a tool such as&#xA;&lt;a href=&#34;https://orgmode.org/worg/org-contrib/org-mac-link.html&#34;&gt;org-mac-link&lt;/a&gt;, it is&#xA;straight-forward to link directly to relevant emails from Orgmode tasks and&#xA;notes.&lt;/p&gt;&#xA;&lt;p&gt;It does not matter if you have moved the mail around. When you open the link&#xA;from &lt;a href=&#34;https://orgmode.org/&#34;&gt;Orgmode&lt;/a&gt;, the relevant email is instantly shown in&#xA;Mac mail.&lt;/p&gt;&#xA;&lt;p&gt;Fortunately, similar functionality can be configured on Windows and Linux using&#xA;&lt;a href=&#34;https://www.thunderbird.net/&#34;&gt;the Thunderbird mail client&lt;/a&gt;, an add-on called&#xA;ThunderLink, and a touch of Emacs Lisp.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyCharm and Docker Compose for Django and TypeScript development on Windows 10</title>
      <link>https://vxlabs.com/2019/04/19/django-typescript-docker-compose-windows/</link>
      <pubDate>Fri, 19 Apr 2019 23:29:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/04/19/django-typescript-docker-compose-windows/</guid>
      <description>&lt;p&gt;A few days ago I switched my main development machine from a 2017 15&amp;quot; MacBook&#xA;Pro with a &lt;a href=&#34;https://ark.intel.com/content/www/us/en/ark/products/97496/intel-core-i7-7820hq-processor-8m-cache-up-to-3-90-ghz.html&#34;&gt;4-core 2.9GHz 7820HQ&#xA;i7&lt;/a&gt;,&#xA;16GB of RAM and 512GB of SSD to a Lenovo Thinkpad X1 Extreme with a &lt;a href=&#34;https://ark.intel.com/content/www/us/en/ark/products/134906/intel-core-i7-8750h-processor-9m-cache-up-to-4-10-ghz.html&#34;&gt;6-core&#xA;8750H&#xA;i7&lt;/a&gt;,&#xA;32GB of RAM and 1.5TB of Really Fast SSD.&lt;/p&gt;&#xA;&lt;p&gt;My reasons for the switch were:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The fact that my upgrade path with the MacBook would have been much more&#xA;expensive.&lt;/li&gt;&#xA;&lt;li&gt;The disappointing MacBook keyboard; the rest of the machine caused many&#xA;sparks of joy over the past 1.5 years, but the keyboard managed to make me&#xA;sad Every Single Time.&lt;/li&gt;&#xA;&lt;li&gt;The fact that I like to give my development environment a really good&#xA;shake-up every few years.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Although the Thinkpad has solid Linux support, I have decided to venture out of&#xA;my comfort zone to see if I could turn current generation Windows on a&#xA;top-of-the-line workstation laptop into a productive development environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using the new dotnet fsi from .NET Core 3 Preview 3 in Visual Studio Code</title>
      <link>https://vxlabs.com/2019/04/16/dotnet-fsi-in-vscode/</link>
      <pubDate>Tue, 16 Apr 2019 13:28:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/04/16/dotnet-fsi-in-vscode/</guid>
      <description>&lt;p&gt;One of the great new &lt;a href=&#34;https://fsharp.org&#34;&gt;F#&lt;/a&gt; tools in &lt;a href=&#34;https://devblogs.microsoft.com/dotnet/announcing-net-core-3-preview-3/&#34;&gt;.NET Core 3 Preview&#xA;3&lt;/a&gt; is&#xA;F# interactive as pure .NET Core application.&lt;/p&gt;&#xA;&lt;p&gt;To use &lt;code&gt;dotnet fsi&lt;/code&gt; in your &lt;a href=&#34;https://code.visualstudio.com&#34;&gt;Visual Studio&#xA;Code&lt;/a&gt; with the &lt;a href=&#34;http://ionide.io/&#34;&gt;Ionide F# IDE&#xA;plugin&lt;/a&gt; instead of the &lt;code&gt;fsharpi&lt;/code&gt; binary, add the following&#xA;to your user &lt;code&gt;settings.json&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;FSharp.fsacRuntime&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;netcore&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;FSharp.fsiFilePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/share/dotnet/dotnet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;FSharp.fsiExtraParameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;fsi&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Remember to replace &lt;code&gt;fsiFilePath&lt;/code&gt; with wherever your .NET Core 3 &lt;code&gt;dotnet&lt;/code&gt;&#xA;binary is installed. (On mac and Linux, do &lt;code&gt;which dotnet&lt;/code&gt;, on Windows &lt;code&gt;where dotnet&lt;/code&gt; to find out.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing Isso comments in Hugo on WebFaction</title>
      <link>https://vxlabs.com/2019/04/06/isso-on-webfaction/</link>
      <pubDate>Sat, 06 Apr 2019 10:42:00 +0200</pubDate>
      <guid>https://vxlabs.com/2019/04/06/isso-on-webfaction/</guid>
      <description>&lt;p&gt;On Wednesday April 3, 2019, I finished migrating this site from Wordpress to&#xA;&lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt;. An important part of this project was finding a&#xA;new system for handling blog post comments.&lt;/p&gt;&#xA;&lt;p&gt;On &lt;a href=&#34;https://cpbotha.net/&#34;&gt;my personal blog&lt;/a&gt;, I am able to use the free and&#xA;ad-free tier of &lt;a href=&#34;https://disqus.com/&#34;&gt;Disqus&lt;/a&gt;, but because vxlabs.com is&#xA;strictly-speaking a company site (even although 100% of the posts are&#xA;non-commercial), that won&amp;rsquo;t work here.&lt;/p&gt;&#xA;&lt;p&gt;Furthermore, the $9 / month price tag of the lowest Disqus tier is not really&#xA;justifiable with the relatively small number of comments being handled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Subscribe</title>
      <link>https://vxlabs.com/subscribe/</link>
      <pubDate>Fri, 05 Apr 2019 23:03:00 +0200</pubDate>
      <guid>https://vxlabs.com/subscribe/</guid>
      <description>&lt;p&gt;There are at least two ways to be kept up to date of any new content on this blog:&lt;/p&gt;&#xA;&lt;h1 id=&#34;daily-email-update&#34;&gt;Daily email update&lt;/h1&gt;&#xA;&lt;p&gt;If you would like to receive an email update at 11:00 AM South African time&#xA;&lt;strong&gt;only when a new post has been published&lt;/strong&gt;, enter your email address in the box&#xA;below, click the &lt;strong&gt;subscribe&lt;/strong&gt; button, and then follow the instructions:&lt;/p&gt;&#xA;&lt;!-- Begin Mailchimp Signup Form --&gt;&#xA;&lt;link href=&#34;//cdn-images.mailchimp.com/embedcode/horizontal-slim-10_7.css&#34; rel=&#34;stylesheet&#34; type=&#34;text/css&#34;&gt;&#xA;&lt;style type=&#34;text/css&#34;&gt;&#xA;#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; width:100%;}&#xA;/* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.&#xA;   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */&#xA;&lt;/style&gt;&#xA;&lt;div id=&#34;mc_embed_signup&#34;&gt;&#xA;&lt;form action=&#34;https://cpbotha.us14.list-manage.com/subscribe/post?u=721d39fa86f169c8e86838fa5&amp;amp;id=0bcec44346&#34; method=&#34;post&#34; id=&#34;mc-embedded-subscribe-form&#34; name=&#34;mc-embedded-subscribe-form&#34; class=&#34;validate&#34; target=&#34;_blank&#34; novalidate&gt;&#xA;&lt;div id=&#34;mc_embed_signup_scroll&#34;&gt;&#xA;&lt;input type=&#34;email&#34; value=&#34;&#34; name=&#34;EMAIL&#34; class=&#34;email&#34; id=&#34;mce-EMAIL&#34; placeholder=&#34;email address&#34; required&gt;&#xA;&lt;!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--&gt;&#xA;&lt;div style=&#34;position: absolute; left: -5000px;&#34; aria-hidden=&#34;true&#34;&gt;&lt;input type=&#34;text&#34; name=&#34;b_721d39fa86f169c8e86838fa5_0bcec44346&#34; tabindex=&#34;-1&#34; value=&#34;&#34;&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;clear&#34;&gt;&lt;input type=&#34;submit&#34; value=&#34;Subscribe&#34; name=&#34;subscribe&#34; id=&#34;mc-embedded-subscribe&#34; class=&#34;button&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&lt;!--End mc_embed_signup--&gt;&#xA;&lt;h1 id=&#34;feed&#34;&gt;Feed&lt;/h1&gt;&#xA;&lt;p&gt;If you use a feed reader such as InoReader, you can subscribe to &lt;a href=&#34;https://vxlabs.com/index.xml&#34;&gt;this blog&amp;rsquo;s atom feed&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improving fastai&#39;s mixed precision support with NVIDIA&#39;s Automatic Mixed Precision.</title>
      <link>https://vxlabs.com/2019/02/04/improving-fastais-mixed-precision-support-with-nvidias-automatic-mixed-precision/</link>
      <pubDate>Mon, 04 Feb 2019 07:41:00 +0000</pubDate>
      <guid>https://vxlabs.com/2019/02/04/improving-fastais-mixed-precision-support-with-nvidias-automatic-mixed-precision/</guid>
      <description>&lt;p&gt;TL;DR: For best results with mixed precision training, use NVIDIA&amp;rsquo;s Automatic&#xA;Mixed Precision together with fastai, and remember to set any epsilons, for&#xA;example in the optimizer, correctly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;Newer NVIDIA GPUs such as the consumer RTX range, the Tesla V100 and others&#xA;have hardware support for half-precision / fp16 tensors.&lt;/p&gt;&#xA;&lt;p&gt;This is interesting, because many deep neural networks still function perfectly&#xA;if you store most of their parameters using the far more compact 16-bit&#xA;floating point precision. The newer hardware (sometimes called TensorCores) is&#xA;able to accelerate further these half precision operations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Simple Ansible script to convert a clean Ubuntu 18.04 to a CUDA 10, PyTorch 1.0 preview, fastai, miniconda3 deep learning machine.</title>
      <link>https://vxlabs.com/2018/11/21/a-simple-ansible-script-to-convert-a-clean-ubuntu-18-04-to-a-cuda-10-pytorch-1-0rc-fastai-miniconda3-deep-learning-machine/</link>
      <pubDate>Wed, 21 Nov 2018 09:30:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/11/21/a-simple-ansible-script-to-convert-a-clean-ubuntu-18-04-to-a-cuda-10-pytorch-1-0rc-fastai-miniconda3-deep-learning-machine/</guid>
      <description>&lt;p&gt;I have prepared a simple Ansible script which will enable you to convert a clean Ubuntu 18.04 image (as supplied by Google Compute Engine or &lt;a href=&#34;https://www.paperspace.com/&#34;&gt;PaperSpace&lt;/a&gt;) into a CUDA 10, &lt;a href=&#34;https://pytorch.org/&#34;&gt;PyTorch 1.0 preview&lt;/a&gt;, &lt;a href=&#34;https://github.com/fastai/fastai&#34;&gt;fastai 1.0.x&lt;/a&gt;, &lt;a href=&#34;https://conda.io/miniconda.html&#34;&gt;miniconda3&lt;/a&gt; powerhouse, ready to live the (mixed-precision!) deep learning dream.&lt;/p&gt;&#xA;&lt;p&gt;I built this script specifically in order to be able to do mixed-precision neural network training on NVIDIA’s TensorCores. It currently makes use of &lt;a href=&#34;https://vxlabs.com/2018/11/04/pytorch-1-0-preview-nov-4-2018-packages-with-full-cuda-10-support-for-your-ubuntu-18-04-x86_64-systems/&#34;&gt;the vxlabs.com build of PyTorch 1.0&lt;/a&gt;, because we need full CUDA 10 for the new TensorCores.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configuring Emacs, lsp-mode and Microsoft&#39;s Visual Studio Code Python language server.</title>
      <link>https://vxlabs.com/2018/11/19/configuring-emacs-lsp-mode-and-microsofts-visual-studio-code-python-language-server/</link>
      <pubDate>Mon, 19 Nov 2018 14:37:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/11/19/configuring-emacs-lsp-mode-and-microsofts-visual-studio-code-python-language-server/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://vxlabs.com/2018/06/08/python-language-server-with-emacs-and-lsp-mode/&#34;&gt;a previous post&lt;/a&gt; I showed how to get Palantir’s Python Language Server working together with Emacs and &lt;code&gt;lsp-mode&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this post, we look at the brand new elephant in the room, &lt;a href=&#34;https://blogs.msdn.microsoft.com/pythonengineering/2018/07/18/introducing-the-python-language-server/&#34;&gt;Microsoft’s arguably far more powerful own Python Language Server&lt;/a&gt;, and how to integrate it with Emacs.&lt;/p&gt;&#xA;&lt;h1 id=&#34;motivation&#34;&gt;Motivation&lt;/h1&gt;&#xA;&lt;p&gt;Since that previous post on Palantir’s language server, I’ve been using Emacs far more intensively for Python coding in tmux on remote machines with GPUs for deep learning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyTorch 1.0 preview (Dec 6, 2018) packages with full CUDA 10 support for your Ubuntu 18.04 x86_64 systems.</title>
      <link>https://vxlabs.com/2018/11/04/pytorch-1-0-preview-nov-4-2018-packages-with-full-cuda-10-support-for-your-ubuntu-18-04-x86_64-systems/</link>
      <pubDate>Sun, 04 Nov 2018 20:45:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/11/04/pytorch-1-0-preview-nov-4-2018-packages-with-full-cuda-10-support-for-your-ubuntu-18-04-x86_64-systems/</guid>
      <description>&lt;p&gt;&lt;em&gt;(The wheel has now been updated to the latest PyTorch 1.0 preview as of December 6, 2018.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;You’ve just received a shiny new NVIDIA Turing (RTX 2070, 2080 or 2080 Ti), or maybe even a beautiful Tesla V100, and now you would like to try out mixed precision (well mostly fp16) training on those lovely &lt;a href=&#34;https://devblogs.nvidia.com/nvidia-turing-architecture-in-depth/&#34;&gt;tensor cores&lt;/a&gt;, using PyTorch on an Ubuntu 18.04 LTS x86_64 system.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2018/11/tensor-core.jpg?ssl=1&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2018/11/tensor-core.jpg?resize=660%2C330&amp;#038;ssl=1&#34; alt=&#34;tensor-core.jpg&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The idea is that these tensor cores chew through fp16 much faster than they do through fp32. In practice, neural networks tolerate having large parts of themselves living in fp16, although &lt;a href=&#34;https://forums.fast.ai/t/mixed-precision-training/20720&#34;&gt;one does have to be careful with this&lt;/a&gt;. Furthermore, fp16 promises to save a substantial amount of graphics memory, enabling one to train bigger models.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Importing all of your orgmode notes into Apple Notes for mobile access.</title>
      <link>https://vxlabs.com/2018/10/29/importing-orgmode-notes-into-apple-notes/</link>
      <pubDate>Mon, 29 Oct 2018 11:22:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/10/29/importing-orgmode-notes-into-apple-notes/</guid>
      <description>&lt;p&gt;Over the years, I&amp;rsquo;ve built up quite a collection of notes as &lt;a href=&#34;https://orgmode.org/&#34;&gt;Org mode&lt;/a&gt; text&#xA;files. So far, it has proven to be the &lt;strong&gt;most expressive and the most robust&#xA;note-taking modality&lt;/strong&gt; out of a long list of candidates that I&amp;rsquo;ve tried.&lt;/p&gt;&#xA;&lt;p&gt;Note-taking using Org mode has one big drawback however: Mobile accessibility.&lt;/p&gt;&#xA;&lt;p&gt;In other words, consulting one&amp;rsquo;s org mode notes database from a mobile device&#xA;is painful. This should not be the case; notes should be always and instantly&#xA;available, even on mobile.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configuring Emacs, lsp-mode and the python language server.</title>
      <link>https://vxlabs.com/2018/06/08/python-language-server-with-emacs-and-lsp-mode/</link>
      <pubDate>Fri, 08 Jun 2018 12:29:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/06/08/python-language-server-with-emacs-and-lsp-mode/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://langserver.org/&#34;&gt;language server protocol&lt;/a&gt; was proposed by Microsoft as a way for different editors and development environments to share language analysis backends&lt;/p&gt;&#xA;&lt;p&gt;This post describes how to configure Emacs, &lt;a href=&#34;https://github.com/emacs-lsp/lsp-mode&#34;&gt;lsp-mode&lt;/a&gt; and the &lt;a href=&#34;https://github.com/palantir/python-language-server&#34;&gt;palantir python-language-server&lt;/a&gt; for improved code intelligence when working on Python projects. (I&amp;rsquo;m planning a companion post for Emacs, C++ and the &lt;a href=&#34;https://github.com/cquery-project/cquery&#34;&gt;cquery language server&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;h2 id=&#34;goal&#34;&gt;Goal&lt;/h2&gt;&#xA;&lt;p&gt;Before starting, it is motivating to see what we are working towards.&lt;/p&gt;&#xA;&lt;p&gt;With a correctly configured setup, Emacs will sport, amongst others,&#xA;improved completion with interactive documentation, imenu navigation,&#xA;documentation on hover, and really snazzy find definitions (=M-.=) and&#xA;find references.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interactive programming with Fennel Lua Lisp, Emacs and Lisp Game Jam winner EXO_encounter 667</title>
      <link>https://vxlabs.com/2018/05/18/interactive-programming-with-fennel-lua-lisp-emacs-and-lisp-game-jam-winner-exo_encounter-667/</link>
      <pubDate>Fri, 18 May 2018 08:48:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/05/18/interactive-programming-with-fennel-lua-lisp-emacs-and-lisp-game-jam-winner-exo_encounter-667/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://technomancy.us/resume&#34;&gt;Phil Hagelberg&lt;/a&gt; recently won the &lt;a href=&#34;https://itch.io/jam/lisp-game-jam-2018/results&#34;&gt;Lisp Game Jam 2018&lt;/a&gt; with his entry &lt;a href=&#34;https://technomancy.itch.io/exo-encounter-667&#34;&gt;EXO_encounter 667&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;What I found most interesting however, was his interactive programming setup.&lt;/p&gt;&#xA;&lt;p&gt;He programmed his game in (and contributed new features to) a Lisp to Lua compiler called &lt;a href=&#34;https://fennel-lang.org/&#34;&gt;Fennel&lt;/a&gt;, and used the game programming library &lt;a href=&#34;https://love2d.org/&#34;&gt;Löve&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;With Emacs and some Lua thread magic, &lt;strong&gt;&lt;strong&gt;he was able to perform runtime changes and introspection to his live running game project&lt;/strong&gt;&lt;/strong&gt;. (See below for a demo!)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Asynchronous rsync with Emacs, dired and tramp.</title>
      <link>https://vxlabs.com/2018/03/30/asynchronous-rsync-with-emacs-dired-and-tramp/</link>
      <pubDate>Thu, 29 Mar 2018 22:10:06 +0000</pubDate>
      <guid>https://vxlabs.com/2018/03/30/asynchronous-rsync-with-emacs-dired-and-tramp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://truongtx.me/tmtxt-dired-async.html&#34;&gt;tmtxt-dired-async&lt;/a&gt; by &lt;a href=&#34;https://truongtx.me/about.html&#34;&gt;Trần Xuân Trường&lt;/a&gt; is an unfortunately lesser known Emacs package which extends dired, the Emacs file manager, to be able to run rsync and other commands (zip, unzip, downloading) asynchronously.&lt;/p&gt;&#xA;&lt;p&gt;This means you can copy gigabytes of directories around whilst still happily continuing with all of your other tasks in the Emacs operating system.&lt;/p&gt;&#xA;&lt;p&gt;It has a feature where you can add any number of files from different locations into a wait list with &lt;code&gt;C-c C-a&lt;/code&gt;, and then asynchronously rsync the whole wait list into a final destination directory with &lt;code&gt;C-c C-v&lt;/code&gt;. This alone is worth the price of admission.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Developing Arduino sketches with JetBrains CLion: A minimal example.</title>
      <link>https://vxlabs.com/2018/03/24/developing-arduino-sketches-with-jetbrains-clion-a-minimal-example/</link>
      <pubDate>Sat, 24 Mar 2018 15:45:32 +0000</pubDate>
      <guid>https://vxlabs.com/2018/03/24/developing-arduino-sketches-with-jetbrains-clion-a-minimal-example/</guid>
      <description>&lt;p&gt;The official &lt;a href=&#34;https://www.arduino.cc/en/main/software&#34;&gt;Arduino Desktop IDE&lt;/a&gt; is fantastic at what it was made for. After downloading, opening your first sketch (say, blink.ino) and flashing this to your connected Arduino hardware takes all of 3 seconds.&lt;/p&gt;&#xA;&lt;p&gt;However, once your sketches become a little more complex, a more sophisticated IDE with code navigation, documentation and context-sensitive completion can be a great help.&lt;/p&gt;&#xA;&lt;p&gt;Currently, one of the better solutions is the &lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.vscode-arduino&#34;&gt;Arduino extension for Visual Studio Code&lt;/a&gt;. You can be up and running quite quickly, and after adding the necessary include directories to your config, the built-in IntelliSense C++ helps immensely with code completion, navigation and inline documentation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Which jumper to set on the ITEAD XBee shield v1.1 for use with a 3.3V Arduino</title>
      <link>https://vxlabs.com/2018/03/23/which-jumper-to-set-on-the-itead-xbee-shield-v1-1-for-use-with-a-3-3v-arduino/</link>
      <pubDate>Fri, 23 Mar 2018 15:01:50 +0000</pubDate>
      <guid>https://vxlabs.com/2018/03/23/which-jumper-to-set-on-the-itead-xbee-shield-v1-1-for-use-with-a-3-3v-arduino/</guid>
      <description>&lt;p&gt;I had to use the &lt;a href=&#34;https://www.itead.cc/wiki/XBee_Shield&#34;&gt;ITEAD Studio XBee shield v1.1&lt;/a&gt; with an Arduino m0 (SAMD21) board, which is a 3.3V board, whereas the most common Arduinos are 5V.&lt;/p&gt;&#xA;&lt;p&gt;At the time of this writing, the &lt;a href=&#34;https://www.itead.cc/wiki/XBee_Shield&#34;&gt;shield’s website&lt;/a&gt; was not very clear on how exactly to set the jumpers (zone 5: “When operated in 3.3V, install the jumper” — which one?!), and the rest of the internet also did not seem to know.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use the Google Cloud Speech API to transcribe a podcast</title>
      <link>https://vxlabs.com/2018/02/15/use-the-google-cloud-speech-api-to-transcribe-a-podcast/</link>
      <pubDate>Thu, 15 Feb 2018 07:31:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/02/15/use-the-google-cloud-speech-api-to-transcribe-a-podcast/</guid>
      <description>&lt;p&gt;As I was listening to the December 21 episode of the &lt;a href=&#34;http://cppcast.com/&#34;&gt;CPPCast&lt;/a&gt;, together with &lt;a href=&#34;http://twimlai.com/&#34;&gt;TWiML&amp;amp;AI&lt;/a&gt; my two most favourite podcasts, I couldn’t help but be a little bewildered by the number of times the guest used the word “like” during their interview.&lt;/p&gt;&#xA;&lt;p&gt;Most of these were examples of &lt;a href=&#34;https://en.wikipedia.org/wiki/Like#As_a_discourse_particle,_filler,_hedge,_or_speech_disfluency&#34;&gt;speech disfluency, or filler words&lt;/a&gt;, but I have to admit that they detracted somewhat from an otherwise interesting discourse.&lt;/p&gt;&#xA;&lt;p&gt;During another CPPCast episode which I recently listened to, the hosts coincidentally discussed the idea of making available transcriptions of the casts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a Django migration for a GiST / GIN index with a special index operator.</title>
      <link>https://vxlabs.com/2018/01/31/creating-a-django-migration-for-a-gist-gin-index-with-a-special-index-operator/</link>
      <pubDate>Wed, 31 Jan 2018 15:33:00 +0000</pubDate>
      <guid>https://vxlabs.com/2018/01/31/creating-a-django-migration-for-a-gist-gin-index-with-a-special-index-operator/</guid>
      <description>&lt;p&gt;In order to add a GiST index on a Postgres database that could be used to accelerate &lt;a href=&#34;https://www.postgresql.org/docs/10/static/pgtrgm.html&#34;&gt;trigram&lt;/a&gt; matches using the &lt;code&gt;pg_trgm&lt;/code&gt; module and the special &lt;code&gt;gist_trgm_ops&lt;/code&gt; operator, I had to code up a special Django Index&lt;/p&gt;&#xA;&lt;p&gt;Django will hopefully &lt;a href=&#34;https://github.com/django/django/pull/9332&#34;&gt;soon support custom index operators&lt;/a&gt;, but if you need the functionality right now, this example will do the trick.&lt;/p&gt;&#xA;&lt;p&gt;The special GiST index class looks like this:&lt;/p&gt;&#xA;&lt;div class=&#34;org-src-container&#34;&gt;&#xA;  &lt;pre class=&#34;src src-python&#34;&gt;&lt;span style=&#34;color: #0000FF;&#34;&gt;from&lt;/span&gt; django.contrib.postgres.indexes &lt;span style=&#34;color: #0000FF;&#34;&gt;import&lt;/span&gt; GistIndex&#xA;&lt;p&gt;&lt;span style=&#34;color: #0000FF;&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color: #6434A3;&#34;&gt;GistIndexTrgrmOps&lt;/span&gt;&lt;span style=&#34;color: #707183;&#34;&gt;(&lt;/span&gt;GistIndex&lt;span style=&#34;color: #707183;&#34;&gt;)&lt;/span&gt;:&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #0000FF;&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color: #006699;&#34;&gt;create_sql&lt;/span&gt;&lt;span style=&#34;color: #707183;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #0000FF;&#34;&gt;self&lt;/span&gt;, model, schema_editor&lt;span style=&#34;color: #707183;&#34;&gt;)&lt;/span&gt;:&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;# &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;- this Statement is instantiated by the _create_index_sql()&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;#   &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;method of django.db.backends.base.schema.BaseDatabaseSchemaEditor.&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;#   &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;using sql_create_index template from&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;#   &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;django.db.backends.postgresql.schema.DatabaseSchemaEditor&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;# &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;- the template has original value:&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;#   &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;&amp;ldquo;CREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s)%(extra)s&amp;rdquo;&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #BA36A5;&#34;&gt;statement&lt;/span&gt; = &lt;span style=&#34;color: #006FE0;&#34;&gt;super&lt;/span&gt;&lt;span style=&#34;color: #707183;&#34;&gt;()&lt;/span&gt;.create_sql&lt;span style=&#34;color: #707183;&#34;&gt;(&lt;/span&gt;model, schema_editor&lt;span style=&#34;color: #707183;&#34;&gt;)&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;# &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;- however, we want to use a GIST index to accelerate trigram&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;#   &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;matching, so we want to add the gist_trgm_ops index operator&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;#   &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;class&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;# &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;- so we replace the template with:&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #8D8D84;&#34;&gt;#   &lt;/span&gt;&lt;span style=&#34;color: #8D8D84; font-style: italic;&#34;&gt;&amp;ldquo;CREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s gist_trgrm_ops)%(extra)s&amp;rdquo;&lt;/span&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #BA36A5;&#34;&gt;statement.template&lt;/span&gt; =&lt;br&gt;&#xA;&lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #4C9ED9; background-color: #ffffff;&#34;&gt; &lt;/span&gt;   &lt;span style=&#34;color: #008000;&#34;&gt;&amp;ldquo;CREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s gist_trgm_ops)%(extra)s&amp;rdquo;&lt;/span&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Variational Autoencoder in PyTorch, commented and annotated.</title>
      <link>https://vxlabs.com/2017/12/08/variational-autoencoder-in-pytorch-commented-and-annotated/</link>
      <pubDate>Fri, 08 Dec 2017 08:43:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/12/08/variational-autoencoder-in-pytorch-commented-and-annotated/</guid>
      <description>&lt;p&gt;I have recently become fascinated with (Variational) Autoencoders and with PyTorch.&lt;/p&gt;&#xA;&lt;p&gt;Kevin Frans has &lt;a href=&#34;http://kvfrans.com/variational-autoencoders-explained/&#34;&gt;a beautiful blog post&lt;/a&gt; online explaining variational&#xA;autoencoders, with examples in TensorFlow and, importantly, with cat&#xA;pictures. Jaan Altosaar’s &lt;a href=&#34;https://jaan.io/what-is-variational-autoencoder-vae-tutorial/&#34;&gt;blog post&lt;/a&gt; takes an even deeper look at&#xA;VAEs from both the deep learning perspective and the perspective of graphical&#xA;models. Both of these posts, as well as Diederik Kingma’s &lt;a href=&#34;https://arxiv.org/pdf/1312.6114.pdf&#34;&gt;original 2014&#xA;paper&lt;/a&gt; &lt;em&gt;Auto-Encoding Variational Bayes&lt;/em&gt;, are more than worth your time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to debug PyInstaller DLL / PYD load failed issues on Windows</title>
      <link>https://vxlabs.com/2017/12/06/how-to-debug-pyinstaller-dll-pyd-load-failed-issues-on-windows/</link>
      <pubDate>Wed, 06 Dec 2017 12:00:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/12/06/how-to-debug-pyinstaller-dll-pyd-load-failed-issues-on-windows/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;&#xA;&lt;p&gt;When debugging DLL load errors on Windows, use &lt;a href=&#34;https://github.com/lucasg/Dependencies&#34;&gt;lucasg’s open source and more modern rewrite of the old Dependency Walker software&lt;/a&gt;. Very importantly, keep on drilling down through indirect dependencies until you find the missing DLLs.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-problem&#34;&gt;The Problem&lt;/h1&gt;&#xA;&lt;p&gt;Recently I had to package up a wxPython and VTK-based app for standalone deployment on Windows. Because of great experience with &lt;a href=&#34;http://www.pyinstaller.org/&#34;&gt;PyInstaller&lt;/a&gt;, I opted to use this tool.&lt;/p&gt;&#xA;&lt;p&gt;With the first try with the freshly built package on the deployment machine, it refused to start up due to an &lt;code&gt;ImportError: DLL load failed: The specified module could not be found.&lt;/code&gt;, and specifically with the &lt;code&gt;vtk.vtkCommonCorePython.pyd&lt;/code&gt; Python extension DLL.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Run code on remote ipython kernels with Emacs and orgmode.</title>
      <link>https://vxlabs.com/2017/11/30/run-code-on-remote-ipython-kernels-with-emacs-and-orgmode/</link>
      <pubDate>Thu, 30 Nov 2017 08:05:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/11/30/run-code-on-remote-ipython-kernels-with-emacs-and-orgmode/</guid>
      <description>&lt;p&gt;As is briefly &lt;a href=&#34;https://github.com/gregsexton/ob-ipython#working-with-a-remote-session&#34;&gt;documented on the ob-ipython github&lt;/a&gt;, one can run code on remote ipython kernels.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I give a little more detail, and show that this also works wonderfully for remote generation but local embedding of graphics in Emacs Org mode.&lt;/p&gt;&#xA;&lt;p&gt;As I &lt;a href=&#34;https://vxlabs.com/2017/11/24/getting-ob-ipython-to-show-documentation-during-company-completion/&#34;&gt;hinted previously&lt;/a&gt;, the jupyter notebook is a great interface for computational coding, but Emacs and Org mode offer far more flexible editing and are more robust as a documentation format.&lt;/p&gt;</description>
    </item>
    <item>
      <title>If you want to run OpenGL 3.2&#43; apps in a Windows guest, AVOID Parallels 13 and buy VMWare Fusion 10 instead.</title>
      <link>https://vxlabs.com/2017/11/27/if-you-want-to-run-opengl-3-2-apps-in-a-windows-guest-avoid-parallels-13-and-buy-vmware-fusion-10-instead/</link>
      <pubDate>Mon, 27 Nov 2017 09:59:09 +0000</pubDate>
      <guid>https://vxlabs.com/2017/11/27/if-you-want-to-run-opengl-3-2-apps-in-a-windows-guest-avoid-parallels-13-and-buy-vmware-fusion-10-instead/</guid>
      <description>&lt;p&gt;TL;DR: Parallels Desktop 13 only supports OpenGL 3.2 on an extremely limited subset of mostly games. VMWare Fusion 10 has full OpenGL 3.3 support. In my case, this made the difference between being able to work on a VTK-based client project (VMWare Fusion 👍👍) or NOT being able to work the project (Parallels 👎👎).&lt;/p&gt;&#xA;&lt;p&gt;I bought a Parallels Desktop Pro 13 subscription to be able to do Linux and Windows development on my MacBook Pro.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting ob-ipython to show documentation during company completion.</title>
      <link>https://vxlabs.com/2017/11/24/getting-ob-ipython-to-show-documentation-during-company-completion/</link>
      <pubDate>Fri, 24 Nov 2017 06:18:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/11/24/getting-ob-ipython-to-show-documentation-during-company-completion/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/gregsexton/ob-ipython&#34;&gt;ob-ipython&lt;/a&gt; is an Emacs package that enables &lt;a href=&#34;http://orgmode.org/worg/org-contrib/babel/&#34;&gt;org-babel&lt;/a&gt; to talk to a running ipython kernel. The upshot of this is that you can use &lt;a href=&#34;http://orgmode.org/&#34;&gt;org-mode&lt;/a&gt; instead of the jupyter notebook for interspersing executable code, results and documentation.&lt;/p&gt;&#xA;&lt;p&gt;The screenshot from the ob-ipython github shows it in action: &lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2017/11/ob-ipython-github-screenshot.jpg?ssl=1&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2017/11/ob-ipython-github-screenshot.jpg?resize=660%2C371&amp;#038;ssl=1&#34; alt=&#34;ob-ipython-github-screenshot.jpg&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Personally, I would like to use this for controlling ipython kernels on &lt;a href=&#34;https://vxlabs.com/2017/03/17/miniconda3-tensorflow-keras-on-google-compute-engine-gpu-instance-the-step-by-step-guide/&#34;&gt;remote GPU- and deep learning-capable Linux machines&lt;/a&gt;, all via Emacs on my laptop. The juyter notebook is really fantastic, but it’s not Emacs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The RobotDyn Joystick shield has the XBee TX / RX lines switched to D0 and D1 or completely disconnected</title>
      <link>https://vxlabs.com/2017/11/07/the-robotdyn-joystick-shield-has-the-xbee-tx-rx-lines-switched-to-d0-and-d1-or-completely-disconnected/</link>
      <pubDate>Tue, 07 Nov 2017 20:42:23 +0000</pubDate>
      <guid>https://vxlabs.com/2017/11/07/the-robotdyn-joystick-shield-has-the-xbee-tx-rx-lines-switched-to-d0-and-d1-or-completely-disconnected/</guid>
      <description>&lt;p&gt;RobotDyn offers a well-manufactured &lt;a href=&#34;https://robotdyn.com/joystick-shield-for-arduino.html&#34;&gt;Joystick and XBee shield&lt;/a&gt; for the Arduino Uno which I am currently using for some &lt;a href=&#34;https://en.wikipedia.org/wiki/IEEE_802.15.4&#34;&gt;IEEE 802.15.4&lt;/a&gt;-related experiments.&lt;/p&gt;&#xA;&lt;p&gt;However, as it is not mentioned in any official documentation, I want to document here that the XBee TX / RX lines are connected to the Arduino D1 and D0 lines respectively and can only be &lt;em&gt;disconnected&lt;/em&gt; via the “USB sketch update / Wireless” hardware switch at the top left:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Driving the Dell U2713HM at 2650×1440 from the HDMI output of the HyperDrive USB-c dock with macOS SwitchResX</title>
      <link>https://vxlabs.com/2017/08/29/driving-the-dell-u2713hm-at-2650x1440-from-the-hdmi-output-of-the-hyperdrive-usb-c-dock-with-macos-switchresx/</link>
      <pubDate>Tue, 29 Aug 2017 13:09:56 +0000</pubDate>
      <guid>https://vxlabs.com/2017/08/29/driving-the-dell-u2713hm-at-2650x1440-from-the-hdmi-output-of-the-hyperdrive-usb-c-dock-with-macos-switchresx/</guid>
      <description>&lt;p&gt;In a &lt;a href=&#34;https://vxlabs.com/2014/08/08/driving-the-dell-u2713hm-at-2650x1440-from-the-hdmi-output-of-the-acer-v3-571g/&#34;&gt;post from 2014&lt;/a&gt;, I showed how to drive the sub-standard HDMI input of the Dell U2713HM 27″ UltraSharp at a resolution of 2560×1440 from the HDMI 1.3 output of a Linux-running laptop.&lt;/p&gt;&#xA;&lt;p&gt;Fast forward 3 years, and I found myself having to drive the exact same monitor at its native resolution via its (sub-standard) HDMI input from a 2017 MacBook Pro through the brilliant &lt;a href=&#34;https://www.kickstarter.com/projects/hypershop/hyperdrivetm-compact-thunderbolt-3-usb-c-hub-for-m&#34;&gt;HyperDrive USB-C dock.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Apple, USB-C is nice, but you really pushed it too far this time.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extracting the Jaxx 12-word wallet backup phrase</title>
      <link>https://vxlabs.com/2017/06/10/extracting-the-jaxx-12-word-wallet-backup-phrase/</link>
      <pubDate>Sat, 10 Jun 2017 14:39:00 +0200</pubDate>
      <guid>https://vxlabs.com/2017/06/10/extracting-the-jaxx-12-word-wallet-backup-phrase/</guid>
      <description>&lt;h2 id=&#34;updates&#34;&gt;Updates&lt;/h2&gt;&#xA;&lt;p&gt;Because this matter is still ongoing (Jaxx does not seem to want to&#xA;fix this vulnerability), I have moved the updates here to the&#xA;front. The original post is below.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2022-08-14&#34;&gt;2022-08-14&lt;/h3&gt;&#xA;&lt;p&gt;In order to help a reader who was having trouble with nodejs, I added &lt;a href=&#34;#replit&#34;&gt;a section&#xA;below&lt;/a&gt; with a replit setup that you can run with the click of a button.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2018-07-19&#34;&gt;2018-07-19&lt;/h3&gt;&#xA;&lt;p&gt;Reader &lt;a href=&#34;https://vxlabs.com/2017/06/10/extracting-the-jaxx-12-word-wallet-backup-phrase/#comment-131071&#34;&gt;Alex points out in the comments&lt;/a&gt; that newer versions of Jaxx use&#xA;a different storage method, and links to &lt;a href=&#34;https://www.linkedin.com/pulse/my-experiment-extracting-jaxx-wallet-pin-number-brian-bakhtiari/&#34;&gt;this LinkedIn article&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding page sidebar to WordPress Twenty Seventeen theme.</title>
      <link>https://vxlabs.com/2017/06/07/adding-page-sidebar-to-wordpress-twenty-seventeen-theme/</link>
      <pubDate>Wed, 07 Jun 2017 20:42:51 +0000</pubDate>
      <guid>https://vxlabs.com/2017/06/07/adding-page-sidebar-to-wordpress-twenty-seventeen-theme/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://codex.wordpress.org/Twenty_Seventeen&#34;&gt;WordPress Twenty Seventeen theme&lt;/a&gt; was exactly what I needed to update the look and feel of the &lt;a href=&#34;http://visible-orbit.org/the-collection/high-res-section-stacks/&#34;&gt;Visible Orbit project website&lt;/a&gt;, except for one thing: No sidebar on pages, only posts. For  the Visible Orbit website, having the site information and navigation visible on the page-heavy site is quite important:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://visible-orbit.org/the-collection/high-res-section-stacks/&#34;&gt;&lt;img class=&#34;alignnone size-large wp-image-924&#34; src=&#34;https://vxlabs.com/wp-content/uploads/2017/06/Screenshot-from-2017-06-07-22-37-37.png?resize=660%2C496&amp;#038;ssl=1&#34; alt=&#34;&#34; width=&#34;660&#34; height=&#34;496&#34; srcset=&#34;https://vxlabs.com/wp-content/uploads/2017/06/Screenshot-from-2017-06-07-22-37-37.png?resize=1024%2C770&amp;ssl=1 1024w, https://vxlabs.com/wp-content/uploads/2017/06/Screenshot-from-2017-06-07-22-37-37.png?resize=300%2C226&amp;ssl=1 300w, https://vxlabs.com/wp-content/uploads/2017/06/Screenshot-from-2017-06-07-22-37-37.png?resize=768%2C578&amp;ssl=1 768w, https://vxlabs.com/wp-content/uploads/2017/06/Screenshot-from-2017-06-07-22-37-37.png?w=1178&amp;ssl=1 1178w&#34; sizes=&#34;(max-width: 660px) 100vw, 660px&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Getting the sidebar to show on pages seems to be &lt;a href=&#34;https://www.google.co.za/search?q=twenty+seventeen+page+sidebar&amp;amp;oq=twenty+seventeen+page+sidebar&amp;amp;aqs=chrome..69i57j0l5.4192j0j7&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&#34;&gt;a popular question online&lt;/a&gt;. Besides just hacking the source, the only nicely packaged solution is &lt;a href=&#34;https://github.com/intoxstudio/twentyseventeen-page-sidebar&#34;&gt;this plugin by Joachim Jensen&lt;/a&gt;. However, for that to render correctly, you have to set page layout to “one column”, but that setting is exposed only if your &lt;strong&gt;front page is static&lt;/strong&gt;, which is &lt;em&gt;not&lt;/em&gt; the case for the Visible Orbit site.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up FastCGI apps on WebFaction</title>
      <link>https://vxlabs.com/2017/06/06/setting-up-fastcgi-apps-on-webfaction/</link>
      <pubDate>Tue, 06 Jun 2017 06:58:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/06/06/setting-up-fastcgi-apps-on-webfaction/</guid>
      <description>&lt;p&gt;For the &lt;a href=&#34;http://visible-orbit.org/the-collection/high-res-section-stacks/&#34;&gt;high-resolution orbital slice viewer on the Visible Orbit website&lt;/a&gt;,&#xA;I had to setup &lt;a href=&#34;https://github.com/ma-tech/WlzIIPSrv&#34;&gt;wlziipsrv&lt;/a&gt;, a fork of the &lt;a href=&#34;https://github.com/ruven/iipsrv&#34;&gt;iipsrv&lt;/a&gt; large tiled image&#xA;server. This is a &lt;a href=&#34;https://en.wikipedia.org/wiki/FastCGI&#34;&gt;FastCGI&lt;/a&gt; app, which means that, unlike a normal CGI which&#xA;is started up for each request, one runs a number of these processes in daemon&#xA;mode, and the front-end webserver communicates with them using the fastcgi&#xA;protocol.&lt;/p&gt;&#xA;&lt;p&gt;The end-result is this web-based high-resolution image viewer, which you can&#xA;use to explore several thousands of microsocopic slices of human eyes. This is&#xA;slice 41 of the &lt;a href=&#34;http://visible-orbit.org/slices/s2897l-registered/&#34;&gt;S2897L registered set&lt;/a&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Querying RESTful webservices into Emacs orgmode tables</title>
      <link>https://vxlabs.com/2017/06/03/querying-restful-webservices-into-emacs-orgmode-tables/</link>
      <pubDate>Sat, 03 Jun 2017 10:20:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/06/03/querying-restful-webservices-into-emacs-orgmode-tables/</guid>
      <description>&lt;p&gt;In this post, I&amp;rsquo;ll show you how you can use Emacs and orgmode to query&#xA;live data from any RESTful webservice, and then use that data in orgmode&#xA;tables, a really great way to get live table-based calculation and display&#xA;functionality in your rich orgmode-based documentation.&lt;/p&gt;&#xA;&lt;p&gt;As an example, we will query live ticker data from the Kraken cryptocurrency&#xA;exchange, and then use the current trading values of two different&#xA;cryptocurrencies to calculate a fictitious investor&amp;rsquo;s position.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bitcoin and the blockchain in 10 minutes</title>
      <link>https://vxlabs.com/2017/06/03/bitcoin-and-the-blockchain-in-10-minutes/</link>
      <pubDate>Sat, 03 Jun 2017 10:01:21 +0000</pubDate>
      <guid>https://vxlabs.com/2017/06/03/bitcoin-and-the-blockchain-in-10-minutes/</guid>
      <description>&lt;p&gt;(This post is an extract from &lt;a href=&#34;https://cpbotha.net/2016/07/25/weekly-head-voices-110-satoshi/&#34;&gt;another post&lt;/a&gt; written a year ago on my other, &lt;a href=&#34;https://cpbotha.net/&#34;&gt;more personal blog&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;I finally got around to studying the math behind bitcoin.&lt;/p&gt;&#xA;&lt;p&gt;If you more or less know what a &lt;strong&gt;hash&lt;/strong&gt; is (the hash is as a short string, e.g. 32 characters, than can be calculated from a file of arbitrary size; if even one byte in the file changes, the hash will be completely different; &lt;a href=&#34;https://en.wikipedia.org/wiki/Cryptographic_hash_function&#34;&gt;read more on wikipedia&lt;/a&gt;, or ask me in the comments) and you more or less know how the &lt;strong&gt;public and private keys&lt;/strong&gt; in asymmetric cryptography work (you can encrypt (encode) something with the public key, ONLY its matching secret private key can decode it; you can SIGN any file with a secret private key, the authenticity of that signature can be proven by anyone with matching public key; &lt;a href=&#34;https://en.wikipedia.org/wiki/Public-key_cryptography&#34;&gt;read more on wikipedia&lt;/a&gt;, or ask in the comments!) you can more or less understand bitcoin in particular and cryptocurrency in general.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing crux-open-with on Ubuntu</title>
      <link>https://vxlabs.com/2017/03/31/fixing-crux-open-with-on-ubuntu/</link>
      <pubDate>Fri, 31 Mar 2017 20:46:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/03/31/fixing-crux-open-with-on-ubuntu/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://github.com/bbatsov/crux&#34;&gt;crux package for Emacs&lt;/a&gt; contains, amongst a list of useful functions (crux does stand for &lt;em&gt;A Collection of Ridiculously Useful eXtensions for Emacs&lt;/em&gt; after all), the function &lt;code&gt;crux-open-with&lt;/code&gt;. This interactive function opens the file you currently have open, or the file under your cursor in &lt;a href=&#34;https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html&#34;&gt;dired&lt;/a&gt;, using the system application for that file.&lt;/p&gt;&#xA;&lt;p&gt;On Ubuntu 16.04, this function unfortunately does not work. It looks like the application tries to start (icon visible in the dash) and then dies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Miniconda3, TensorFlow, Keras on Google Compute Engine GPU instance: The step-by-step guide.</title>
      <link>https://vxlabs.com/2017/03/17/miniconda3-tensorflow-keras-on-google-compute-engine-gpu-instance-the-step-by-step-guide/</link>
      <pubDate>Fri, 17 Mar 2017 11:55:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/03/17/miniconda3-tensorflow-keras-on-google-compute-engine-gpu-instance-the-step-by-step-guide/</guid>
      <description>&lt;p&gt;Google recently announced the availability of &lt;a href=&#34;https://cloud.google.com/compute/docs/gpus/&#34;&gt;GPUs on Google Compute Engine&#xA;instances&lt;/a&gt;. For my deep learning experiments, I often need more beefy GPUs&#xA;than the puny GTX 750Ti in my desktop workstation, so this was good news. To&#xA;make the GCE offering even more attractive, their GPU instances are also&#xA;available in their EU datacenters, which is in terms of latency a big plus for&#xA;me here on the Southern tip of the African continent.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recursive text search in project without projectile</title>
      <link>https://vxlabs.com/2017/03/11/recursive-text-search-in-project-without-projectile/</link>
      <pubDate>Sat, 11 Mar 2017 10:39:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/03/11/recursive-text-search-in-project-without-projectile/</guid>
      <description>&lt;p&gt;If you’re not using projectile, but you would like to be able to perform interactive, search-as-you-type, recursive searches through the current project, this is pretty easy to do if you have &lt;a href=&#34;https://github.com/abo-abo/swiper&#34;&gt;counsel&lt;/a&gt; and &lt;a href=&#34;https://github.com/technomancy/find-file-in-project&#34;&gt;find-file-in-project&lt;/a&gt; installed.&lt;/p&gt;&#xA;&lt;p&gt;Add the following Emacs Lisp to your init:&lt;/p&gt;&#xA;&lt;div class=&#34;org-src-container&#34;&gt;&#xA;  &lt;pre class=&#34;src src-emacs-lisp&#34;&gt;&lt;span style=&#34;color: #707183;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #1c86ee;&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color: #cd9b1d;&#34;&gt;cpb/counsel-ag-in-project&lt;/span&gt; &lt;span style=&#34;color: #7388d6;&#34;&gt;()&lt;/span&gt;&#xA;  &lt;span style=&#34;color: #cd853f;&#34;&gt;&#34;Use `&lt;/span&gt;&lt;span style=&#34;color: #6e8b3d;&#34;&gt;ffip&lt;/span&gt;&lt;span style=&#34;color: #cd853f;&#34;&gt;&#39; and `&lt;/span&gt;&lt;span style=&#34;color: #6e8b3d;&#34;&gt;counsel-ag&lt;/span&gt;&lt;span style=&#34;color: #cd853f;&#34;&gt;&#39; for quick project-wide text searching.&#34;&lt;/span&gt;&#xA;  &lt;span style=&#34;color: #7388d6;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #1c86ee;&#34;&gt;interactive&lt;/span&gt;&lt;span style=&#34;color: #7388d6;&#34;&gt;)&lt;/span&gt;&#xA;  &lt;span style=&#34;color: #7388d6;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #1c86ee;&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color: #909183;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #709870;&#34;&gt;(&lt;/span&gt;project-root &lt;span style=&#34;color: #907373;&#34;&gt;(&lt;/span&gt;ffip-project-root&lt;span style=&#34;color: #907373;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #709870;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #909183;&#34;&gt;)&lt;/span&gt;&#xA;    &lt;span style=&#34;color: #7f7f7f;&#34;&gt;;; &lt;/span&gt;&lt;span style=&#34;color: #7f7f7f;&#34;&gt;if ffip could not find project-root, it will already have&lt;/span&gt;&#xA;    &lt;span style=&#34;color: #7f7f7f;&#34;&gt;;; &lt;/span&gt;&lt;span style=&#34;color: #7f7f7f;&#34;&gt;shown an error message. We only have to check for non-nil.&lt;/span&gt;&#xA;    &lt;span style=&#34;color: #909183;&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: #1c86ee;&#34;&gt;if&lt;/span&gt; project-root&#xA;        &lt;span style=&#34;color: #709870;&#34;&gt;(&lt;/span&gt;counsel-ag nil project-root nil&#xA;                    &lt;span style=&#34;color: #907373;&#34;&gt;(&lt;/span&gt;format &lt;span style=&#34;color: #8b7355;&#34;&gt;&#34;Search in PRJ %s&#34;&lt;/span&gt; project-root&lt;span style=&#34;color: #907373;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #709870;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #909183;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #7388d6;&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color: #707183;&#34;&gt;)&lt;/span&gt;&#xA;&lt;p&gt;&lt;span style=&#34;color: #707183;&#34;&gt;(&lt;/span&gt;global-set-key &lt;span style=&#34;color: #7388d6;&#34;&gt;(&lt;/span&gt;kbd &lt;span style=&#34;color: #8b7355;&#34;&gt;&amp;ldquo;C-c s&amp;rdquo;&lt;/span&gt;&lt;span style=&#34;color: #7388d6;&#34;&gt;)&lt;/span&gt; &amp;lsquo;cpb/counsel-ag-in-project&lt;span style=&#34;color: #707183;&#34;&gt;)&lt;/span&gt;&#xA;&lt;/pre&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>From org file with local bibtex to LaTeX and PDF</title>
      <link>https://vxlabs.com/2017/02/20/from-org-file-with-local-bibtex-to-latex-and-pdf/</link>
      <pubDate>Mon, 20 Feb 2017 20:54:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/02/20/from-org-file-with-local-bibtex-to-latex-and-pdf/</guid>
      <description>&lt;figure style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&#xA;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2017/02/vxlabs-emacs-org-ref-pdf-example.png?ssl=1&#34;&gt;&#xA;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2017/02/vxlabs-emacs-org-ref-pdf-example-300x178.png?resize=300%2C178&amp;#038;ssl=1&#34; alt=&#34;vxlabs-emacs-org-ref-pdf-example.png&#34; data-recalc-dims=&#34;1&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;figcaption class=&#34;wp-caption-text&#34;&gt;Screenshot of orgmode source, PDF preview on the right, interactive citation selection in the minibuffer. Click for full resolution.&lt;/figcaption&gt;&lt;/figure&gt; &#xA;&lt;p&gt;I have (co-)written a few LaTeX documents in my time.&lt;/p&gt;&#xA;&lt;p&gt;However, as I have been writing &lt;a href=&#34;https://cpbotha.net/2016/01/05/note-taking-strategy-early-2016/&#34;&gt;my life and lab notes&lt;/a&gt; and many of my&#xA;technical blog posts in &lt;a href=&#34;http://orgmode.org/&#34;&gt;Emacs orgmode&lt;/a&gt; for the past few years, I wanted to&#xA;see how one would go about using BiBTeX references in orgmode files (using&#xA;&lt;a href=&#34;http://kitchingroup.cheme.cmu.edu/&#34;&gt;John Kitchin’s&lt;/a&gt; &lt;a href=&#34;https://github.com/jkitchin/org-ref&#34;&gt;org-ref package&lt;/a&gt;) such that they would render&#xA;correctly in orgmode’s export LaTeX and PDF.&lt;/p&gt;</description>
    </item>
    <item>
      <title>mu4e 0.9.18: E-Mailing with Emacs now even better.</title>
      <link>https://vxlabs.com/2017/02/07/mu4e-0-9-18-e-mailing-with-emacs-now-even-better/</link>
      <pubDate>Tue, 07 Feb 2017 20:48:00 +0000</pubDate>
      <guid>https://vxlabs.com/2017/02/07/mu4e-0-9-18-e-mailing-with-emacs-now-even-better/</guid>
      <description>&lt;p&gt;In this post I talk about three great new features in the latest release of &lt;a href=&#34;https://www.djcbsoftware.nl/code/mu/mu4e.html&#34;&gt;mu4e&lt;/a&gt;, an email programme that runs in Emacs. I also show my mu4e configuration as an example to others who would like a similar setup. &lt;figure style=&#34;width: 768px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2017/02/mu4e-0.9.18-screenshot-7.png?ssl=1&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2017/02/mu4e-0.9.18-screenshot-7.png?resize=660%2C605&amp;#038;ssl=1&#34; alt=&#34;mu4e-0.9.18-screenshot.png&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;figcaption class=&#34;wp-caption-text&#34;&gt;mu4e 0.9.18 screenshot showing selected context (bottom right of main) and visual-line-mode (long lines) which is activated by the format=flowed support.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;After recently discovering that &lt;a href=&#34;https://cpbotha.net/2016/09/27/thunderbird-support-of-rfc-3676-formatflowed-is-half-broken/&#34;&gt;plaintext format=flowed in Thunderbird works only partially&lt;/a&gt;, it was time to check back in on mu4e after &lt;a href=&#34;https://vxlabs.com/2014/06/06/configuring-emacs-mu4e-with-nullmailer-offlineimap-and-multiple-identities/&#34;&gt;my previous happy stint using it&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Date-sorted interactive recursive search with ivy, counsel and ag</title>
      <link>https://vxlabs.com/2016/11/07/date-sorted-interactive-recursive-search-with-ivy-counsel-and-ag/</link>
      <pubDate>Mon, 07 Nov 2016 19:57:00 +0000</pubDate>
      <guid>https://vxlabs.com/2016/11/07/date-sorted-interactive-recursive-search-with-ivy-counsel-and-ag/</guid>
      <description>&lt;p&gt;A core part of &lt;a href=&#34;https://cpbotha.net/2016/01/05/note-taking-strategy-early-2016/&#34;&gt;my note-taking strategy&lt;/a&gt; is a growing collection of Emacs &lt;a href=&#34;http://orgmode.org/&#34;&gt;Org mode&lt;/a&gt; files containing my monthly lab journals, project summaries and various technical documents.&lt;/p&gt;&#xA;&lt;p&gt;Usually I rely on &lt;a href=&#34;https://github.com/bbatsov/projectile&#34;&gt;Projectile’s&lt;/a&gt; &lt;a href=&#34;https://emacs-helm.github.io/helm/&#34;&gt;Helm&lt;/a&gt; integration to perform recursive searches with &lt;a href=&#34;https://github.com/ggreer/the_silver_searcher&#34;&gt;The Silver Searcher (ag)&lt;/a&gt; using &lt;code&gt;helm-projectile-ag&lt;/code&gt; (trigged by the completely muscle-memorised &lt;code&gt;C-c p s s&lt;/code&gt;) through all of the org files in my notes hierarchy. Recursive regular expression search results are shown interactively as you type. Wonderful!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Step-by-step guide to C&#43;&#43; navigation and completion with Emacs and the Clang-based rtags</title>
      <link>https://vxlabs.com/2016/04/11/step-by-step-guide-to-c-navigation-and-completion-with-emacs-and-the-clang-based-rtags/</link>
      <pubDate>Mon, 11 Apr 2016 20:48:00 +0000</pubDate>
      <guid>https://vxlabs.com/2016/04/11/step-by-step-guide-to-c-navigation-and-completion-with-emacs-and-the-clang-based-rtags/</guid>
      <description>&lt;p&gt;If you want C++ completion and navigation (jump to definition, jump to declaration, and so forth), there are several good options for Emacs. For a QtQuick / C++ project I’m working on, I needed the best Emacs has to offer.&lt;/p&gt;&#xA;&lt;p&gt;This turned out to be the &lt;a href=&#34;https://github.com/Andersbakken/rtags&#34;&gt;Clang-based rtags system&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Rtags is not the easiest of the options to get going, hence this short tutorial. I initially configured &lt;a href=&#34;https://github.com/Sarcasm/irony-mode&#34;&gt;irony-mode&lt;/a&gt;, which is also Clang-based and was significantly easier to get going, but it soon started hanging on the completion of for example &lt;code&gt;QStringList&lt;/code&gt; methods in my project. Because it also doesn’t support navigation, I decided to try rtags. So far, rtags has been working quite well on a Qt 5.x project of slightly under 200K lines of C++.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stats for Huawei LTE Routers</title>
      <link>https://vxlabs.com/stats-for-huawei-lte-routers/</link>
      <pubDate>Tue, 22 Mar 2016 14:37:39 +0000</pubDate>
      <guid>https://vxlabs.com/stats-for-huawei-lte-routers/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://play.google.com/store/apps/details?id=com.vxlabs.huaweiltestats&#34;&gt;Stats for Huawei LTE Routers&lt;/a&gt; is a simple Android app to check the signal stats on the Huawei E5186 LTE router. It currently retrieves and displays four different measurements (RSRQ, RSRP, SINR, RSSI) as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://i0.wp.com/vxlabs.com/wp-content/uploads/2016/03/Screen-Shot-2016-03-20-at-4.39.08-PM.png?ssl=1&#34; rel=&#34;attachment wp-att-777&#34;&gt;&lt;img class=&#34;alignnone wp-image-777 size-medium&#34; src=&#34;https://i0.wp.com/vxlabs.com/wp-content/uploads/2016/03/Screen-Shot-2016-03-20-at-4.39.08-PM.png?resize=239%2C300&amp;#038;ssl=1&#34; alt=&#34;Screen Shot 2016-03-20 at 4.39.08 PM&#34; width=&#34;239&#34; height=&#34;300&#34; srcset=&#34;https://i0.wp.com/vxlabs.com/wp-content/uploads/2016/03/Screen-Shot-2016-03-20-at-4.39.08-PM.png?resize=239%2C300&amp;ssl=1 239w, https://i0.wp.com/vxlabs.com/wp-content/uploads/2016/03/Screen-Shot-2016-03-20-at-4.39.08-PM.png?w=411&amp;ssl=1 411w&#34; sizes=&#34;(max-width: 239px) 100vw, 239px&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In each case, it also reports on the quality of the signal, based on the available ranges for the different measurements. You can download the free &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.vxlabs.huaweiltestats&#34;&gt;Stats for Huawei LTE Routers form the Google Play Store&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing the Cordova browser platform Access-Control-Allow-Origin error</title>
      <link>https://vxlabs.com/2016/03/17/fixing-the-cordova-browser-platform-access-control-allow-origin-error/</link>
      <pubDate>Thu, 17 Mar 2016 20:07:00 +0000</pubDate>
      <guid>https://vxlabs.com/2016/03/17/fixing-the-cordova-browser-platform-access-control-allow-origin-error/</guid>
      <description>&lt;p&gt;When developing a mobile app using &lt;a href=&#34;https://cordova.apache.org/&#34;&gt;Cordova&lt;/a&gt; or PhoneGap, the &lt;a href=&#34;http://www.raymondcamden.com/2014/09/24/browser-as-a-platform-for-your-phonegapcordova-apps/&#34;&gt;&lt;em&gt;browser&lt;/em&gt; target platform&lt;/a&gt; can really speed up your development. You could serve the HTML files directly using &lt;code&gt;cordova serve&lt;/code&gt;, but the browser platform, while being almost as fast, is much closer to the Android / IOS environments your app will eventually find itself in. It also has access to the Cordova APIs.&lt;/p&gt;&#xA;&lt;p&gt;My general workflow is that I keep &lt;code&gt;cordova run browser&lt;/code&gt; running in a terminal window (this will initially start a new instance of chrome), and periodically run &lt;code&gt;cordova prepare browser&lt;/code&gt; as I’m developing. This last step packages up the “app”, along with the &lt;code&gt;cordova.js&lt;/code&gt; bits, for the browser platform.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Up and running with ECL and Emacs SLIME in four easy steps</title>
      <link>https://vxlabs.com/2016/03/05/up-and-running-with-ecl-and-slime-in-4-easy-steps/</link>
      <pubDate>Sat, 05 Mar 2016 22:14:00 +0000</pubDate>
      <guid>https://vxlabs.com/2016/03/05/up-and-running-with-ecl-and-slime-in-4-easy-steps/</guid>
      <description>&lt;p&gt;ECL is of course &lt;a href=&#34;https://common-lisp.net/project/ecl/&#34;&gt;Embeddable Common Lisp&lt;/a&gt;, a small but quite complete Common Lisp implementation that can be easily embedded in your C applications to act as dynamic extension language, but it is also a fine stand-alone implementation. It includes an interpreter and a compiler, and can even produce compact binaries. Read &lt;a href=&#34;https://chriskohlhepp.wordpress.com/embedding-lisp-in-cplusplus-a-recipe/&#34;&gt;this blog post by Chris Kohlhepp&lt;/a&gt; for a brief and practical overview.&lt;/p&gt;&#xA;&lt;p&gt;SLIME is &lt;a href=&#34;https://common-lisp.net/project/slime/&#34;&gt;the Superior Lisp Interaction Mode for Emacs&lt;/a&gt;, a great Emacs environment within which one can write code for a number of Common Lisp implementations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>gunicorn as your Django development server</title>
      <link>https://vxlabs.com/2015/12/08/gunicorn-as-your-django-development-server/</link>
      <pubDate>Tue, 08 Dec 2015 06:50:00 +0000</pubDate>
      <guid>https://vxlabs.com/2015/12/08/gunicorn-as-your-django-development-server/</guid>
      <description>&lt;p&gt;Usually when I’m working on a Django project, I use the built-in &lt;code&gt;runserver&lt;/code&gt; command. For deployment, we mostly use &lt;code&gt;nginx&lt;/code&gt; and &lt;code&gt;uwsgi&lt;/code&gt; in front of Django.&lt;/p&gt;&#xA;&lt;p&gt;However, for a new side project I needed a local Django setup with a faster debug server. To keep things simple, I was looking for a pure Python solution that could serve static files, and did automatic reloading on source change, just like &lt;code&gt;runserver&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixed position of any Scatter child widget in Kivy</title>
      <link>https://vxlabs.com/2015/05/17/fixed-position-of-any-scatter-child-widget-in-kivy/</link>
      <pubDate>Sun, 17 May 2015 19:18:00 +0000</pubDate>
      <guid>https://vxlabs.com/2015/05/17/fixed-position-of-any-scatter-child-widget-in-kivy/</guid>
      <description>&lt;p&gt;Just in case you were wondering how one could go about having any child widget of a &lt;a href=&#34;http://kivy.org/docs/api-kivy.uix.scatter.html&#34;&gt;Kivy Scatter&lt;/a&gt; widget that would stick in a single window-relative position whilst the scatter itself was being translated and rotated, I thought I’d post this solution.&lt;/p&gt;&#xA;&lt;p&gt;With a scatter, one can very easily implement a canvas-like object that can be rotated, translated and zoomed, whilst all of the widgets it contains are transformed along with it. This is usually great, unless you’d like, for some or other reason, to display a widget at a fixed position, for example any kind of overlay, such as a label.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notes on my full-time testing of 7 Dropbox alternatives</title>
      <link>https://vxlabs.com/2015/03/29/notes-testing-7-dropbox-alternatives/</link>
      <pubDate>Sun, 29 Mar 2015 21:00:00 +0000</pubDate>
      <guid>https://vxlabs.com/2015/03/29/notes-testing-7-dropbox-alternatives/</guid>
      <description>&lt;p&gt;Ever since &lt;a href=&#34;http://cpbotha.net/2013/09/15/dear-usa-my-data-has-left-your-building/&#34;&gt;I dropped Dropbox in September of 2013&lt;/a&gt; due to mounting privacy concerns, I’ve been searching for and testing various filesystem syncing solutions to take its place.&lt;/p&gt;&#xA;&lt;p&gt;This post is a summary of the notes I made during this time.&lt;/p&gt;&#xA;&lt;div class=&#34;figure&#34;&gt;&#xA;  &lt;p&gt;&#xA;    &lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2015/03/wpid-sync-logos.png&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2015/03/wpid-sync-logos-300x188.png?resize=300%2C188&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&#xA;  &lt;/p&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;It&amp;rsquo;s quite hard finding reviews online that go deeper than the very&#xA;surface. Most sync software reviews can be summarised as:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Hey, look, here&amp;rsquo;s a new service that&amp;rsquo;s a dropbox killer / dropbox&#xA;alternatives / disruptive in the sync space. Wow, you get N gigabytes of free&#xA;space, that&amp;rsquo;s more than dropbox. Look, it seems to be syncing these three&#xA;files I put in there. That&amp;rsquo;s great. The End.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use the hardware-based full disk encryption of your TCG Opal SSD with msed</title>
      <link>https://vxlabs.com/2015/02/11/use-the-hardware-based-full-disk-encryption-your-tcg-opal-ssd-with-msed/</link>
      <pubDate>Wed, 11 Feb 2015 20:44:00 +0000</pubDate>
      <guid>https://vxlabs.com/2015/02/11/use-the-hardware-based-full-disk-encryption-your-tcg-opal-ssd-with-msed/</guid>
      <description>&lt;p&gt;&lt;em&gt;(This post has been updated since initial publication, see last section for details.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;My &lt;a href=&#34;http://vxlabs.com/2012/12/22/ssds-with-usable-built-in-hardware-based-full-disk-encryption/&#34;&gt;blog post on usable hardware-based SSD encryption&lt;/a&gt; has seen a great deal of activity. Although that post dealt primarily with the ATA security based type of hardware-based full drive encryption, readers from all over joined the discussion in the comments to talk about an increasing number of new self-encrypting drives supporting the TCG Opal standard.&lt;/p&gt;&#xA;&lt;div class=&#34;figure&#34;&gt;&#xA;      &lt;p&gt;&#xA;        &lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2015/02/wpid-msed_pba_bootup.jpg&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2015/02/wpid-msed_pba_bootup-300x110.jpg?resize=300%2C110&#34; alt=&#34;msed_pba_bootup.jpg&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&#xA;      &lt;/p&gt;</description>
    </item>
    <item>
      <title>Solving the Ubuntu 14.04 – NVIDIA 346 – nvidia-prime black screen issue</title>
      <link>https://vxlabs.com/2015/02/05/solving-the-ubuntu-14-04-nvidia-346-nvidia-prime-black-screen-issue/</link>
      <pubDate>Thu, 05 Feb 2015 09:58:00 +0000</pubDate>
      <guid>https://vxlabs.com/2015/02/05/solving-the-ubuntu-14-04-nvidia-346-nvidia-prime-black-screen-issue/</guid>
      <description>&lt;p&gt;For a project that I’m currently helping with, we needed recent OpenGL features that are only available on NVIDIA drivers with version 340 and later.&lt;/p&gt;&#xA;&lt;div class=&#34;figure&#34;&gt;&#xA;  &lt;p&gt;&#xA;    &lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2015/02/wpid-nvidia-linux.jpg&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2015/02/wpid-nvidia-linux-300x179.jpg?resize=300%2C179&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&#xA;  &lt;/p&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Unfortunately, I have one of those NVIDIA Optimus laptops. Up to now, Bumblebee worked a treat (I would recommend this system in most cases), but for this project I needed the whole of X to run on the NVIDIA, so I had to make use of &lt;a href=&#34;https://wiki.ubuntu.com/X/Config/HybridGraphics&#34;&gt;nvidia-prime&lt;/a&gt; to switch between Intel and NVIDIA mode.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending emails with math and source code</title>
      <link>https://vxlabs.com/2015/01/28/sending-emails-with-math-and-source-code/</link>
      <pubDate>Wed, 28 Jan 2015 07:33:00 +0000</pubDate>
      <guid>https://vxlabs.com/2015/01/28/sending-emails-with-math-and-source-code/</guid>
      <description>&lt;p&gt;Org mode is great for authoring rich documents with syntax highlighted source code, LaTeX math and images. It even supports &lt;a href=&#34;http://vxlabs.com/2014/12/04/inline-graphviz-dot-evaluation-for-graphs-using-emacs-org-mode-and-org-babel/&#34;&gt;evaluating live snippets&lt;/a&gt; of code embedded in the text. It does all of this whilst remaining a plain text format.&lt;/p&gt;&#xA;&lt;p&gt;Imagine how useful it would be to author programming-related or technical emails using this functionality?&lt;/p&gt;&#xA;&lt;p&gt;Imagine no more! &lt;code&gt;org-mime&lt;/code&gt;, part of the org mode contrib, does this for a number of emacs-based mail clients. However, our preference is for mu4e, which is not part of that list.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inline GraphViz DOT evaluation for graphs using Emacs, org-mode and org-babel</title>
      <link>https://vxlabs.com/2014/12/04/inline-graphviz-dot-evaluation-for-graphs-using-emacs-org-mode-and-org-babel/</link>
      <pubDate>Thu, 04 Dec 2014 09:25:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/12/04/inline-graphviz-dot-evaluation-for-graphs-using-emacs-org-mode-and-org-babel/</guid>
      <description>&lt;p&gt;With Emacs, &lt;a href=&#34;http://orgmode.org/&#34;&gt;org mode&lt;/a&gt; and org-babel, it’s possible to evaluate source code samples embedded in your org files and have the output of said evaluation appear inline. This makes for a beautiful literate programming environment. It also enables one to include graphs in one’s documents (org mode, PDF, HTML presentations or blog posts) by using for example GraphViz.&lt;/p&gt;&#xA;&lt;p&gt;This blog post (&lt;a href=&#34;http://vxlabs.com/2014/05/25/emacs-24-with-prelude-org2blog-and-wordpress/&#34;&gt;obviously authored using Emacs and Org mode&lt;/a&gt;) contains short instructions for doing so.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Django Rest Framework to parse docstrings as reStructuredText</title>
      <link>https://vxlabs.com/2014/11/12/getting-django-rest-framework-to-parse-docstrings-as-restructuredtext/</link>
      <pubDate>Wed, 12 Nov 2014 07:23:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/11/12/getting-django-rest-framework-to-parse-docstrings-as-restructuredtext/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;http://www.django-rest-framework.org/&#34;&gt;Django REST Framework&lt;/a&gt; is awesome, for a whole bunch of reasons, one of them being the browsable HTML version of your API that it automatically generates for you.&lt;/p&gt;&#xA;&lt;p&gt;As a part of this, it extracts any docstrings that you might have defined for the relevant class (ViewSet or CBV) and adds an HTML version of this documentation to the browsable API, like this:&lt;/p&gt;&#xA;&lt;div class=&#34;figure&#34;&gt;&#xA;  &lt;p&gt;&#xA;    &lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2014/11/wpid-drf-self-describing-apis.png&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2014/11/wpid-drf-self-describing-apis-300x204.png?resize=300%2C204&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&#xA;  &lt;/p&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;However, as described in the &lt;a href=&#34;http://www.django-rest-framework.org/topics/documenting-your-api#self-describing-apis&#34;&gt;relevant documentation&lt;/a&gt;, it expects Markdown syntax by default. I like Markdown, but the rest of my Python docstrings are all in reStructuredText, which is the default documentation format for many Python projects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use ADB to bypass dog-slow MTP transfer of files from Android to Linux</title>
      <link>https://vxlabs.com/2014/11/06/use-adb-to-bypass-dog-slow-mtp-transfer-of-files-from-android-to-linux/</link>
      <pubDate>Thu, 06 Nov 2014 06:37:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/11/06/use-adb-to-bypass-dog-slow-mtp-transfer-of-files-from-android-to-linux/</guid>
      <description>&lt;p&gt;Last night I had to backup 2760 photos and videos, about 6.3G worth, from my Nexus 4 Android phone to my Linux laptop.&lt;/p&gt;&#xA;&lt;p&gt;The Nexus 4, like many other Android phones, only supports the &lt;a href=&#34;http://en.wikipedia.org/wiki/Media_Transfer_Protocol&#34;&gt;Media Transfer Protocol&lt;/a&gt;, or MTP, for transferring files via USB connection. With Ubuntu 14.04, this is a fortunately a plug and play situation: Connect the phone via USB cable, and start dragging and dropping files to and fro using the built-in file manager on the Linux side.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Convert dates to different formats in LibreOffice Calc</title>
      <link>https://vxlabs.com/2014/10/06/convert-dates-to-other-formats-in-libreoffice-calc/</link>
      <pubDate>Mon, 06 Oct 2014 12:51:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/10/06/convert-dates-to-other-formats-in-libreoffice-calc/</guid>
      <description>&lt;p&gt;I’m helping someone process a collection of research data that has been entered by a third party using Excel. We’re using LibreOffice Calc, because research should be reproducible by anyone, not just those in possession of prioprietary software licenses (this also means that we use R, JGR and &lt;a href=&#34;http://www.deducer.org/&#34;&gt;DeduceR&lt;/a&gt; instead of SPSS and Statistica; perhaps more on that later).&lt;/p&gt;&#xA;&lt;p&gt;After having to fix hundreds of badly entered dates with basic functions (we highly recommend that &lt;a href=&#34;http://xkcd.com/1179/&#34;&gt;ISO 8601 format dates&lt;/a&gt;, i.e. YYYY-MM-DD, are used from the very start, instead of ambiguous local formats), we ended up with a stubborn subset of DD-MM-YYYY formatted dates in cells that explicitly had ISO 8601 format configured.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CloudFlare full optimizations break MathJax</title>
      <link>https://vxlabs.com/2014/09/30/cloudflare-full-optimizations-break-mathjax/</link>
      <pubDate>Tue, 30 Sep 2014 07:11:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/09/30/cloudflare-full-optimizations-break-mathjax/</guid>
      <description>&lt;p&gt;I’ve just activated &lt;a href=&#34;http://cloudflare.com/&#34;&gt;CloudFlare&lt;/a&gt; (the free tier) for vxlabs.com, hoping to do even faster page loads. Most of my WordPress installations already use &lt;a href=&#34;https://wordpress.org/plugins/wp-super-cache/&#34;&gt;WP Super Cache&lt;/a&gt; to serve mostly static pages when you come here, but CloudFlare should speed this up even further via their content and network traffic optimization, and their servers dotted all over the globe.&lt;/p&gt;&#xA;&lt;p&gt;Configuration was quite painless (you have to configure your domain’s DNS to point to CloudFlare’s servers, then a few settings using their web interface). It somehow missed my mail server’s DNS record when copying everything over, but that was quick to fix. (It also seems that the SSL-protected roundcube I have on another server in this domain now keeps on logging me out after 2 seconds, but I’m not 100% sure that that’s due to CloudFlare.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Driving the Dell U2713HM at 2650×1440 from the HDMI output of the Acer V3-571G</title>
      <link>https://vxlabs.com/2014/08/08/driving-the-dell-u2713hm-at-2650x1440-from-the-hdmi-output-of-the-acer-v3-571g/</link>
      <pubDate>Fri, 08 Aug 2014 12:09:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/08/08/driving-the-dell-u2713hm-at-2650x1440-from-the-hdmi-output-of-the-acer-v3-571g/</guid>
      <description>&lt;p&gt;&lt;em&gt;(TL;DR See the last paragraph for how to get the Dell U2713HM working on the HDMI output of the Acer V3-571G at 2560×1440 @ 50Hz.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;http://www.engadget.com/products/dell/ultrasharp/u2713hm/&#34;&gt;Dell Ultrasharp U2713HM is a 27″ IPS panel&lt;/a&gt; with a resolution of 2560×1440. I recently acquired this monitor and wanted to connect it to my &lt;a href=&#34;http://vxlabs.com/2013/03/24/acer-v3-571g-fullhd-ips-superb-priceperformance-linux-development-laptop/&#34;&gt;Linux-only Acer V3-571G i7 laptop&lt;/a&gt;, which only a VGA (D-SUB; max resolution 2048×1536) and an HDMI 1.4 output. &lt;figure style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2014/08/wpid-engadget-dell-u2713hm.jpg&#34;&gt;&lt;img src=&#34;https://vxlabs.com/wp-content/uploads/2014/08/wpid-engadget-dell-u2713hm-300x225.jpg?resize=300%2C225&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;figcaption class=&#34;wp-caption-text&#34;&gt;The monitor has been optimised to show the Dell logo. (image from the Engadget review I linked to above.)&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting EmacsKeys working with QtCreator 3.1.2</title>
      <link>https://vxlabs.com/2014/06/25/getting-emacskeys-working-with-qtcreator-3-1-2/</link>
      <pubDate>Wed, 25 Jun 2014 20:01:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/06/25/getting-emacskeys-working-with-qtcreator-3-1-2/</guid>
      <description>&lt;p&gt;Today, &lt;a href=&#34;http://blog.qt.digia.com/blog/2014/06/25/qt-5-3-1-released/&#34;&gt;Qt 5.3.1 was released&lt;/a&gt; along with Qt Creator 3.1.2. Unfortunately, nsf’s EmacsKeys plugin, &lt;a href=&#34;https://qt.gitorious.org/qt-creator/qt-creator/commit/8560036d96d309fe83910&#34;&gt;merged into the Qt trunk a few months ago&lt;/a&gt;, was not a part of this release (it should be included in Qt Creator 3.2).&lt;/p&gt;&#xA;&lt;p&gt;Because the Emacs keybindings are hardwired into my fingers, and I’m using QtCreator for a project at the moment, I spent some time figuring out how to get the plugin built for Qt Creator 3.1.2. This post explains how you too can build it, but, if you’re on Ubuntu 14.04 with Qt 5.3.1 x64, you can just download my binaries and the keymap file (see under &lt;strong&gt;requirements&lt;/strong&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Level sets: The practical 10 minute introduction.</title>
      <link>https://vxlabs.com/2014/06/16/level-sets-the-practical-10-minute-introduction/</link>
      <pubDate>Mon, 16 Jun 2014 20:30:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/06/16/level-sets-the-practical-10-minute-introduction/</guid>
      <description>&lt;p&gt;&lt;em&gt;Post summary: The level set method is a powerful alternative way to represent N-dimensional surfaces evolving through space.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;jetpack-video-wrapper&#34;&gt;&#xA;  &lt;span class=&#34;embed-youtube&#34; style=&#34;text-align:center; display: block;&#34;&gt;&lt;iframe class=&#39;youtube-player&#39; type=&#39;text/html&#39; width=&#39;660&#39; height=&#39;372&#39; src=&#39;https://www.youtube.com/embed/SeXX8HsbBhs?version=3&amp;#038;rel=1&amp;#038;fs=1&amp;#038;autohide=2&amp;#038;showsearch=0&amp;#038;showinfo=1&amp;#038;iv_load_policy=1&amp;#038;wmode=transparent&#39; allowfullscreen=&#39;true&#39; style=&#39;border:0;&#39;&gt;&lt;/iframe&gt;&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;em&gt;(This is a significantly extended blog-post version of three slides from my Medical Visualization lecture on image analysis.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Imagine that you would like to represent a contour in 2D or a surface in 3D, for example to delineate objects in a 2D image or in a 3D volumetric dataset.&lt;/p&gt;&#xA;&lt;p&gt;Now imagine that for some reason you would also like have this contour or surface move through space, for example to inflate it, or to shrink it, at the same time dynamically morphing the surface to better fit around the object of interest.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Huawei E3331 3G USB dongle works on Ubuntu 14.04 Linux</title>
      <link>https://vxlabs.com/2014/06/15/huawei-e3331-3g-usb-dongle-works-on-ubuntu-14-04-linux/</link>
      <pubDate>Sat, 14 Jun 2014 22:14:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/06/15/huawei-e3331-3g-usb-dongle-works-on-ubuntu-14-04-linux/</guid>
      <description>&lt;p&gt;In the store today, I wanted to check that the &lt;a href=&#34;http://consumer.huawei.com/en/mobile-broadband/data-card/features/e3331-en.htm&#34;&gt;Huawei E3331 3G USB dongle&lt;/a&gt; I was about to buy would work with my Ubuntu Linux laptops. Because I couldn’t find any posts confirming this, I’m writing this one.&lt;/p&gt;&#xA;&lt;p&gt;Summary: &lt;strong&gt;I can confirm that the Huawei E3331 3G USB dongle works, completely out of the box and without any problems, on Ubuntu 14.04.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;After inserting the card into a USB slot, I was greeted by this notification:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing RoundCube Error in DDL upgrade</title>
      <link>https://vxlabs.com/2014/06/09/fixing-roundcube-error-in-ddl-upgrade/</link>
      <pubDate>Mon, 09 Jun 2014 08:56:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/06/09/fixing-roundcube-error-in-ddl-upgrade/</guid>
      <description>&lt;p&gt;Just in case you run into the same problem I did when upgrading Roundcube from version 0.9.5 to 1.0.1, I’m posting the exact steps I took to fix the &lt;code&gt;Error in DDL upgrade&lt;/code&gt; problem.&lt;/p&gt;&#xA;&lt;p&gt;So, you’ve followed the Roundcube upgrade instructions, either using the &lt;code&gt;installto.sh&lt;/code&gt; or the &lt;code&gt;update.sh&lt;/code&gt; script, and then this happens:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: plain; title: ; notranslate&#34; title=&#34;&#34;&gt;Updating database schema (2013042700)... [OK]&#xA;Updating database schema (2013052500)... [FAILED]&#xA;ERROR: Error in DDL upgrade 2013052500: [1142] CREATE command denied to user &#39;roundcube&#39;@&#39;localhost&#39; for table &#39;cache_shared&#39;All done.&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;You search around and find &lt;a href=&#34;http://www.iredmail.org/forum/topic6916-iredmail-support-error-upgrading-to-roundcube-095-101.html&#34;&gt;this forum post&lt;/a&gt; by the author of iRedMail. However, if you’re like me, you need a little more detail to be able to apply his advice. Here’s how:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configuring Emacs mu4e with nullmailer, offlineimap and multiple identities</title>
      <link>https://vxlabs.com/2014/06/06/configuring-emacs-mu4e-with-nullmailer-offlineimap-and-multiple-identities/</link>
      <pubDate>Fri, 06 Jun 2014 07:00:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/06/06/configuring-emacs-mu4e-with-nullmailer-offlineimap-and-multiple-identities/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.djcbsoftware.nl/code/mu/mu4e.html&#34;&gt;mu4e&lt;/a&gt; is a mail user agent for your Emacs. After &lt;a href=&#34;http://cpbotha.net/2013/09/15/dear-usa-my-data-has-left-your-building/&#34;&gt;leaving GMail&lt;/a&gt; a few months ago, this is the first MUA that I am loving even more. The major reasons for this are the &lt;em&gt;faster than GMail&lt;/em&gt; real-time search (e.g. press &lt;code&gt;s&lt;/code&gt;, then &lt;code&gt;from:buddy flag:attach design review&lt;/code&gt; and watch it search my 68 thousand email archive in a fraction of a second), its Emacs foundation (the more I use it, the better I get at customizing it) and the observation that having my email in an uncluttered, by default text-only interface, somehow helps me to maintain the feeling of control. &lt;figure style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modify Emacs Deft for recursive directory search</title>
      <link>https://vxlabs.com/2014/06/04/modify-emacs-deft-for-recursive-directory-search/</link>
      <pubDate>Wed, 04 Jun 2014 19:53:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/06/04/modify-emacs-deft-for-recursive-directory-search/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update 2014-11-18&lt;/strong&gt; I’ve forked the original Deft, added this recursive directory listing feature as well as support for multiple different file extensions, and pushed it all to &lt;a href=&#34;https://github.com/cpbotha/deft-turbo&#34;&gt;github as deft-turbo&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://jblevins.org/projects/deft/&#34;&gt;Deft&lt;/a&gt; is a neat Emacs mode for the Notational Velocity-inspired searching, browsing and editing of a directory of text files. In short, this means that simply start typing, and Deft finds the note that you were looking for. It supports straight text searching and regular expression searching, almost like my own baby &lt;a href=&#34;https://github.com/cpbotha/nvpy&#34;&gt;nvpy&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Publish to WordPress with Emacs 24 and org2blog</title>
      <link>https://vxlabs.com/2014/05/25/emacs-24-with-prelude-org2blog-and-wordpress/</link>
      <pubDate>Sun, 25 May 2014 10:33:00 +0000</pubDate>
      <guid>https://vxlabs.com/2014/05/25/emacs-24-with-prelude-org2blog-and-wordpress/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently discovered the absolute joy that is writing and publishing&#xA;wordpress blog posts using Emacs 24 and &lt;a href=&#34;https://github.com/punchagan/org2blog&#34;&gt;org2blog&lt;/a&gt;. Because it took me a&#xA;while to get everything (including source code syntax highlighting by the&#xA;WordPress SyntaxHighlighter plugin) going, I wanted to document the whole&#xA;procedure step-by-step, using org2blog of course!&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m using Emacs 24.3 (from the PPA) with Prelude on Ubuntu 12.04.4.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing-required-packages&#34;&gt;Installing required packages&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;org-mode&lt;/code&gt; is already installed in Emacs 24 with Prelude. However,&#xA;we need to install &lt;code&gt;org2blog&lt;/code&gt; and some extra dependencies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Syntax-highlighting markdown fenced code blocks in Emacs</title>
      <link>https://vxlabs.com/2014/04/08/syntax-highlighting-markdown-fenced-code-blocks-in-emacs/</link>
      <pubDate>Tue, 08 Apr 2014 07:12:37 +0000</pubDate>
      <guid>https://vxlabs.com/2014/04/08/syntax-highlighting-markdown-fenced-code-blocks-in-emacs/</guid>
      <description>&lt;p&gt;The syntax-highlighted fenced code blocks in GitHub flavored markdown, or GFM, are a beautiful and useful invention. One starts a code block with three or more backticks or tildes, followed by the name of the language, and then proceeds to show one’s code, which, at least on GitHub, is then syntax highlighted.&lt;/p&gt;&#xA;&lt;p&gt;In other words, something like this in your markdown:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: plain; light: true; title: ; notranslate&#34; title=&#34;&#34;&gt;```python&#xD;&#xA;def computer_says(no):&#xD;&#xA;    print(&#34;computer says %s&#34; % (no,))&#xD;&#xA;```&#xD;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Would become this in the preview:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Export Zotero PDFs with BibTeX key filenames</title>
      <link>https://vxlabs.com/2013/12/22/export-zotero-pdfs-named-with-bibtex-keys/</link>
      <pubDate>Sun, 22 Dec 2013 14:08:24 +0000</pubDate>
      <guid>https://vxlabs.com/2013/12/22/export-zotero-pdfs-named-with-bibtex-keys/</guid>
      <description>&lt;p&gt;This is just in from the department of &lt;a href=&#34;https://vxlabs.com/tag/zotero/&#34; title=&#34;all zotero posts on vxlabs&#34;&gt;silly Zotero hacks&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;I’ve recently started using the brilliant &lt;a href=&#34;http://wordpress.org/plugins/papercite/&#34; title=&#34;papercite wordpress plugin page&#34;&gt;papercite wordpress plugin&lt;/a&gt; to publish a &lt;a href=&#34;http://charlbotha.com/publications/&#34; title=&#34;my publications page&#34;&gt;list of my academic publications&lt;/a&gt;. This is awesome, because I can just export my Zotero bibliography as BibTex, and hand the bib file over to papercite!&lt;/p&gt;&#xA;&lt;p&gt;However, when one exports a bibliography from Zotero, the associated PDF files are exported with their full filenames (whatever these may be), whilst papercite expects all PDFs to be in a single directory, each named bibtex_cite_key.pdf, for example malan_voxel_2013.pdf.&lt;/p&gt;</description>
    </item>
    <item>
      <title>impress.js with embedded live webcam</title>
      <link>https://vxlabs.com/2013/10/11/impress-js-with-embedded-live-webcam/</link>
      <pubDate>Fri, 11 Oct 2013 11:47:58 +0000</pubDate>
      <guid>https://vxlabs.com/2013/10/11/impress-js-with-embedded-live-webcam/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/bartaz/impress.js/&#34; title=&#34;impress.js github page&#34;&gt;impress.js&lt;/a&gt; is a great system for building Prezi-like non-linear presentations using HTML5, with the added benefit that it’s open source, and your infinite canvas is in 3D. See &lt;a href=&#34;http://bartaz.github.io/impress.js/&#34; title=&#34;original impress.js demo&#34;&gt;here for the original demo&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Recently I needed to give a presentation via Google Hangouts, and needed a good way to share both my impress.js presentation slides and the webcam feed of my scary talking face. Currently Google Hangouts does not support this out of the box. The solution of setting a separate webcam capturing application to “always-on-top” only works when the browser window, containing the presentation, is not set to full screen, so that won’t do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>d3 interpolators vs. ColorBrewer single hue sequential scales</title>
      <link>https://vxlabs.com/2013/10/04/d3-interpolators-vs-colorbrewer-single-hue-sequential-scales/</link>
      <pubDate>Fri, 04 Oct 2013 20:22:10 +0000</pubDate>
      <guid>https://vxlabs.com/2013/10/04/d3-interpolators-vs-colorbrewer-single-hue-sequential-scales/</guid>
      <description>&lt;p&gt;Have you ever wondered to which extent you could emulate the beautiful &lt;a href=&#34;http://colorbrewer2.org/&#34; title=&#34;colorbrewer website&#34;&gt;ColorBrewer&lt;/a&gt; single hue sequential colour schemes with some form of linear interpolation between the endpoints? Wonder no more!&lt;/p&gt;&#xA;&lt;p&gt;I made you &lt;a href=&#34;http://bl.ocks.org/cpbotha/raw/6831663/&#34; title=&#34;d3 colour interpolation vs colorbrewer&#34;&gt;a d3 example&lt;/a&gt; (see &lt;a href=&#34;https://gist.github.com/cpbotha/6831663&#34; title=&#34;source gist for d3 interpolator vs colorbrewer example&#34;&gt;here&lt;/a&gt; for the gist) comparing the &lt;a href=&#34;http://colorbrewer2.org/&#34; title=&#34;ColorBrewer website&#34;&gt;ColorBrewer&lt;/a&gt; sequential single hue schemes Blues, Greens, Oranges, Purples and Reds with the d3 L*a*b*, HCL, RGB and HSL interpolators. Click on the image to go to the bl.ock and see all of the colours.&lt;figure id=&#34;attachment_462&#34; aria-describedby=&#34;caption-attachment-462&#34; style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Skype 4.2.0.11 on Linux: Premium subscription but NO group video and NO group screen sharing</title>
      <link>https://vxlabs.com/2013/07/11/skype-4-2-0-11-on-linux-premium-subscription-but-no-group-video-and-no-group-screen-sharing/</link>
      <pubDate>Thu, 11 Jul 2013 10:13:28 +0000</pubDate>
      <guid>https://vxlabs.com/2013/07/11/skype-4-2-0-11-on-linux-premium-subscription-but-no-group-video-and-no-group-screen-sharing/</guid>
      <description>&lt;p&gt;Usually we use Google Hangouts for group video calling and also for screen sharing with more than two participants. If you’re not using Google Hangouts yet for your video conferences (full video and audio with more than two participants) and software demos, you really should. It’s a great product, it works on all platforms (Windows, Linux and Mac), and it’s free.&lt;figure id=&#34;attachment_442&#34; aria-describedby=&#34;caption-attachment-442&#34; style=&#34;width: 287px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2013/07/skype_linux_4.2.0.11_about.png&#34;&gt;&lt;img class=&#34;size-medium wp-image-442&#34; alt=&#34;Skype for Linux 4.2.0.11 - even if you pay premium, you CAN&#39;T group video call and you CAN&#39;T group screen share&#34; src=&#34;https://vxlabs.com/wp-content/uploads/2013/07/skype_linux_4.2.0.11_about-287x300.png?resize=287%2C300&#34; width=&#34;287&#34; height=&#34;300&#34; srcset=&#34;https://vxlabs.com/wp-content/uploads/2013/07/skype_linux_4.2.0.11_about.png?resize=287%2C300&amp;ssl=1 287w, https://vxlabs.com/wp-content/uploads/2013/07/skype_linux_4.2.0.11_about.png?w=531&amp;ssl=1 531w&#34; sizes=&#34;(max-width: 287px) 100vw, 287px&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;figcaption id=&#34;caption-attachment-442&#34; class=&#34;wp-caption-text&#34;&gt;Skype for Linux 4.2.0.11 – even if you pay premium, you CAN’T group video call and you CAN’T group screen share&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Samson C01U USB condenser microphone on Ubuntu Linux 12.04</title>
      <link>https://vxlabs.com/2013/04/24/samson-c01u-usb-condenser-microphone-on-ubuntu-12-04/</link>
      <pubDate>Wed, 24 Apr 2013 19:55:27 +0000</pubDate>
      <guid>https://vxlabs.com/2013/04/24/samson-c01u-usb-condenser-microphone-on-ubuntu-12-04/</guid>
      <description>&lt;p&gt;I recently acquired the Samson C01U USB condenser microphone for better quality voice-overs on the sleep-inducing screencasts I sometimes make. It took some fiddling to get it setup correctly on Ubuntu 12.04 with the default ALSA drivers and PulseAudio sound system, so I’ve documented the steps here on the chance that it might help some other Ubuntu / Linux user.&lt;/p&gt;&#xA;&lt;p&gt;The microphone looks like this:&lt;figure id=&#34;attachment_429&#34; aria-describedby=&#34;caption-attachment-429&#34; style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2013/04/C01U-display.jpg&#34;&gt;&lt;img class=&#34;size-medium wp-image-429&#34; alt=&#34;Samson C01U condenser USB microphone&#34; src=&#34;https://vxlabs.com/wp-content/uploads/2013/04/C01U-display-300x240.jpg?resize=300%2C240&#34; width=&#34;300&#34; height=&#34;240&#34; srcset=&#34;https://vxlabs.com/wp-content/uploads/2013/04/C01U-display.jpg?resize=300%2C240&amp;ssl=1 300w, https://vxlabs.com/wp-content/uploads/2013/04/C01U-display.jpg?w=580&amp;ssl=1 580w&#34; sizes=&#34;(max-width: 300px) 100vw, 300px&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;figcaption id=&#34;caption-attachment-429&#34; class=&#34;wp-caption-text&#34;&gt;Samson C01U condenser USB microphone&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Acer V3-571G FullHD IPS: Superb price/performance Linux development laptop</title>
      <link>https://vxlabs.com/2013/03/24/acer-v3-571g-fullhd-ips-superb-priceperformance-linux-development-laptop/</link>
      <pubDate>Sun, 24 Mar 2013 12:57:24 +0000</pubDate>
      <guid>https://vxlabs.com/2013/03/24/acer-v3-571g-fullhd-ips-superb-priceperformance-linux-development-laptop/</guid>
      <description>&lt;p&gt;I recently needed a new mobile development workstation. My main requirements were that it should have at least a Full HD (1920×1080) IPS (in-plane switching) screen and a good keyboard, and that it should be able to run Linux, preferably Ubuntu, as its primary operating system.&lt;/p&gt;&#xA;&lt;p&gt;After experimenting with a screenshot of my 1920×1080 desktop workstation running IntelliJ Idea 12 (my IDE of choice) on an Asus UX31A with 13″ Full HD IPS screen,  I realised that I would have to go with a larger screen. The Asus UX52VS with 15.6″ IPS also looked like a good bet, but there were no reviews available yet, it was not clear whether the 4GB RAM and hybrid HDD (large spindle drive, 24GB SSD cache) would be easily upgradable to full SSD, and the  €1200 price tag was reason for more consideration.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSDs with usable built-in hardware-based full disk encryption</title>
      <link>https://vxlabs.com/2012/12/22/ssds-with-usable-built-in-hardware-based-full-disk-encryption/</link>
      <pubDate>Sat, 22 Dec 2012 12:39:21 +0000</pubDate>
      <guid>https://vxlabs.com/2012/12/22/ssds-with-usable-built-in-hardware-based-full-disk-encryption/</guid>
      <description>&lt;p&gt;&lt;em&gt;(tl;dr / post summary: Many current SSDs do super fast hardware AES encryption, but only a very few expose this correctly to the user, meaning you often still need a third-party software solution. Information on this is incredibly hard to find.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Imagine that your laptop or your PC gets stolen. That would be terrible. However, it would be even worse if your laptop contained confidential data, either your own or that of your employer or client. It’s clear that encrypting one’s hard drive has become a necessity. There are good open source software solutions for this, for example TrueCrypt (Windows, Linux and OSX) and the LUKS/dm-crypt system. However, such software encryption systems require a small chunk of your CPU capacity, and also affect SSD performance and durability to a lesser or greater extent, depending on the controller.&lt;figure id=&#34;attachment_346&#34; aria-describedby=&#34;caption-attachment-346&#34; style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blog</title>
      <link>https://vxlabs.com/blog/</link>
      <pubDate>Sun, 02 Dec 2012 16:38:57 +0000</pubDate>
      <guid>https://vxlabs.com/blog/</guid>
      <description></description>
    </item>
    <item>
      <title>About this site</title>
      <link>https://vxlabs.com/about-this-site/</link>
      <pubDate>Sun, 02 Dec 2012 16:11:37 +0000</pubDate>
      <guid>https://vxlabs.com/about-this-site/</guid>
      <description>&lt;p&gt;This site serves as the official internet presence of the vxlabs consultancy. More importantly, I regularly write &lt;a href=&#34;https://vxlabs.com/category/all&#34; title=&#34;show all blog posts&#34;&gt;technical blog posts&lt;/a&gt; dealing with programming, Linux and Ubuntu, Android telephones, computers and miscellaneous other hardware.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding the ATA Security eXtension BIOS to AMIBIOS (Asus P5KC)</title>
      <link>https://vxlabs.com/2012/11/28/adding-the-ata-security-extension-bios-to-amibios/</link>
      <pubDate>Wed, 28 Nov 2012 21:31:18 +0000</pubDate>
      <guid>https://vxlabs.com/2012/11/28/adding-the-ata-security-extension-bios-to-amibios/</guid>
      <description>&lt;p&gt;I’ve just purchased an Intel 520 SSD drive, which does hardware-based AES encryption of the whole disk, and is clever enough to encrypt the AES passphrase with the ATA / HDD password. This encryption implementation was my primary reason for getting this specific SSD. Many modern SSDs also employ hardware-based AES encryption for randomisation and for fast secure erase (they just reset the AES key!), but do NOT use the ATA password to encrypt the keys, so the encryption is far less effective at protecting your precious data. As far as my current information goes, the Intel 320, 520 and 710 drives do it correctly, as does the &lt;a href=&#34;http://www.storagereview.com/samsung_ssd_840_pro_review&#34; title=&#34;Samsung SSD 840 Pro review&#34;&gt;Samsung SSD 840 Pro&lt;/a&gt; and the Kingston SSDNow 200V+.&lt;/p&gt;</description>
    </item>
    <item>
      <title>European Motorola Atrix 4G: Rooting, unlocking and CyanogenMod 7.2</title>
      <link>https://vxlabs.com/2012/11/18/european-motorola-atrix-4g-rooting-unlocking-and-cyanogenmod-7-2/</link>
      <pubDate>Sun, 18 Nov 2012 22:10:33 +0000</pubDate>
      <guid>https://vxlabs.com/2012/11/18/european-motorola-atrix-4g-rooting-unlocking-and-cyanogenmod-7-2/</guid>
      <description>&lt;p&gt;The Motorola Atrix 4G, flagship phone about a year ago, is now a great budget option if you need an unlocked and high performance Android phone. An NVIDIA Tegra 2 dual-core 1 GHz processor, 1GB of RAM, 16GB of built-in storage, micro SD slot, front and back cameras, a 1950 mAh battery (!) and &lt;a href=&#34;http://www.phonearena.com/phones/Motorola-ATRIX-4G_id4982&#34; title=&#34;atrix 4g specs on phone arena&#34;&gt;more&lt;/a&gt; can be had for an affordable € 260 here in the Netherlands.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://vxlabs.com/contact/</link>
      <pubDate>Sat, 01 Sep 2012 11:32:56 +0000</pubDate>
      <guid>https://vxlabs.com/contact/</guid>
      <description>&lt;p&gt;Contact vxlabs by sending a mail to the address that results when you join info and vxlabs.com with a @.&lt;/p&gt;&#xA;&lt;p&gt;vxlabs (Pty) Ltd&lt;/p&gt;&#xA;&lt;p&gt;13 Caeser Close&lt;/p&gt;&#xA;&lt;p&gt;Somerset West&lt;/p&gt;&#xA;&lt;p&gt;7130&lt;/p&gt;</description>
    </item>
    <item>
      <title>Expertise</title>
      <link>https://vxlabs.com/expertise/</link>
      <pubDate>Sat, 01 Sep 2012 11:19:00 +0000</pubDate>
      <guid>https://vxlabs.com/expertise/</guid>
      <description>&lt;p&gt;Themes: Software architecture, data visualization, data science, machine learning, 3D graphics techniques, (medical) image processing.&lt;/p&gt;&#xA;&lt;p&gt;Tools: Python / C++ / C / JavaScript / Java / Processing/ x86 Assembly. VTK / ITK / OpenCV / jQuery / backbone / d3 / react / redux / Django / PyTorch&lt;/p&gt;&#xA;&lt;p&gt;Here are &lt;a href=&#34;http://cpbotha.net/software&#34; title=&#34;list of software projects on cpbotha.net&#34;&gt;some software projects&lt;/a&gt; I’ve worked on. Here is &lt;a href=&#34;http://charlbotha.com/charlbotha_cv.pdf&#34; title=&#34;charl botha CV&#34;&gt;my CV&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Removing URLs from Zotero bibtex exports</title>
      <link>https://vxlabs.com/2012/06/29/removing-urls-from-zotero-bibtex-exports/</link>
      <pubDate>Fri, 29 Jun 2012 08:14:53 +0000</pubDate>
      <guid>https://vxlabs.com/2012/06/29/removing-urls-from-zotero-bibtex-exports/</guid>
      <description>&lt;p&gt;When you export bibtex from zotero, it includes the URLs in the bibtex records. Some LaTeX bibliography styles include this information, and sometimes this is not what you want, for example because the URLs take up unnecessary space and are hard to wrap.&lt;/p&gt;&#xA;&lt;p&gt;It’s quite easy to get zotero to export bibtex without the URLs.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Go to Preferences | Advanced and click on the “Show Data Directory” button.&lt;/li&gt;&#xA;&lt;li&gt;Edit translators/BibTeX.js with your favourite text editor.&lt;/li&gt;&#xA;&lt;li&gt;In function doExport(), at around line 2040 in Zotero 3.0.7, change the “for (var field in fieldMap)” loop by adding a single line of code like this:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre class=&#34;brush: jscript; title: ; notranslate&#34; title=&#34;&#34;&gt;for(var field in fieldMap) {&#xD;&#xA;    # only add the following line:&#xD;&#xA;    if (field == &#34;url&#34;) continue;&#xD;&#xA;    if(item[fieldMap[field]]) {&#xD;&#xA;        writeField(field, item[fieldMap[field]]);&#xD;&#xA;    }&#xD;&#xA;}&#xD;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;If your changes don’t seem to take, make sure that your text editor did not make a backup of the old BibTeX.js (vim does this, with an ~ appended), as Zotero could possible pick up the backed up version instead of your edited version.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Review of Ubuntu Linux 12.04 on the Samsung NP300V3A Core i5 NVIDIA Optimus laptop</title>
      <link>https://vxlabs.com/2012/05/01/review-of-ubuntu-linux-12-04-on-the-samsung-np300v3a-core-i5-nvidia-optimus-laptop/</link>
      <pubDate>Tue, 01 May 2012 20:44:45 +0000</pubDate>
      <guid>https://vxlabs.com/2012/05/01/review-of-ubuntu-linux-12-04-on-the-samsung-np300v3a-core-i5-nvidia-optimus-laptop/</guid>
      <description>&lt;p&gt;&lt;strong&gt;An important warning:&lt;/strong&gt; During installation, do NOT activate home folder encryption. Due to bugs &lt;a href=&#34;https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/957843&#34;&gt;957843&lt;/a&gt; and &lt;a href=&#34;https://bugs.launchpad.net/ecryptfs/+bug/509180&#34;&gt;509180&lt;/a&gt;, &lt;strong&gt;you will most probably suffer data loss, and you won’t even know about it until it’s too late&lt;/strong&gt;. This happened on two of my laptops during normal use, both of which I have since completely reinstalled with LUKS whole disk encryption. It’s a shame that this bug has been known for years, but that Ubuntu still ships with this as its default home folder encryption configuration.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fix for blurry photos on HTC Desire Z</title>
      <link>https://vxlabs.com/2012/03/04/fix-for-blurry-photos-on-htc-desire-z/</link>
      <pubDate>Sun, 04 Mar 2012 13:19:47 +0000</pubDate>
      <guid>https://vxlabs.com/2012/03/04/fix-for-blurry-photos-on-htc-desire-z/</guid>
      <description>&lt;p&gt;As you know, we here at VXLabs are of the educated opinion that the HTC Desire Z is an absolutely brilliant telephone. However, recently we noticed that some of our phones (at least two) started producing very blurry photos. See this test picture of my microwave for example:&lt;figure id=&#34;attachment_150&#34; aria-describedby=&#34;caption-attachment-150&#34; style=&#34;width: 222px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2012/03/microwave_blurry.jpg&#34;&gt;&lt;img class=&#34;size-medium wp-image-150&#34; title=&#34;microwave_blurry&#34; src=&#34;https://vxlabs.com/wp-content/uploads/2012/03/microwave_blurry-222x300.jpg?resize=222%2C300&#34; alt=&#34;&#34; width=&#34;222&#34; height=&#34;300&#34; srcset=&#34;https://vxlabs.com/wp-content/uploads/2012/03/microwave_blurry.jpg?resize=222%2C300&amp;ssl=1 222w, https://vxlabs.com/wp-content/uploads/2012/03/microwave_blurry.jpg?resize=760%2C1024&amp;ssl=1 760w, https://vxlabs.com/wp-content/uploads/2012/03/microwave_blurry.jpg?w=1193&amp;ssl=1 1193w&#34; sizes=&#34;(max-width: 222px) 100vw, 222px&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;figcaption id=&#34;caption-attachment-150&#34; class=&#34;wp-caption-text&#34;&gt;Blurry-appearing microwave, in reality quite sharp!&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is of course quite irritating, especially in a phone that is otherwise sheer brilliance. No amount of moist-cloth lens cleaning could improve the results. Fortunately I came across &lt;a href=&#34;http://forum.xda-developers.com/showthread.php?t=1223807&#34; title=&#34;htc desire z blurry photos forum thread&#34;&gt;this forum thread&lt;/a&gt;, where it was suggested either to replace the whole phone back plate including lens, or to have the phone repaired by the service centre, or to clean the lens with a q-tip and some toothpaste. The first two options either costing money or requiring a telephone still within its guarantee were quickly eliminated. Although the third option, suggested by forum user allanl-o, sounds strange, we wanted to explore it, for science’s sake of course. As an aside, the lenses of our two test telephones as well as that of the thread started looked like this (picture courtesy of xudsa II USERT, the thread started):&lt;figure id=&#34;attachment_151&#34; aria-describedby=&#34;caption-attachment-151&#34; style=&#34;width: 280px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to get Zotero IEEE style NOT to abbreviate with et al. in the bibliography</title>
      <link>https://vxlabs.com/2011/12/01/how-to-get-zotero-ieee-style-not-to-abbreviate-with-et-al-in-the-bibliography/</link>
      <pubDate>Thu, 01 Dec 2011 08:33:03 +0000</pubDate>
      <guid>https://vxlabs.com/2011/12/01/how-to-get-zotero-ieee-style-not-to-abbreviate-with-et-al-in-the-bibliography/</guid>
      <description>&lt;p&gt;In my view, Zotero is currently the best reference manager available, and it’s also completely open source!&lt;/p&gt;&#xA;&lt;p&gt;I had one niggling problem though with version 2.1.10 (latest stable at the time of this writing): When I would export (or Quick Copy) references in IEEE style, it would abbreviate the author list with “First Author, et al.” if there were seven (7) or more authors. When I’m building a bibliography list, this is of course never the right thing to do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Windows console that does not suck</title>
      <link>https://vxlabs.com/2011/08/28/a-windows-console-that-does-not-suck/</link>
      <pubDate>Sun, 28 Aug 2011 07:37:10 +0000</pubDate>
      <guid>https://vxlabs.com/2011/08/28/a-windows-console-that-does-not-suck/</guid>
      <description>&lt;p&gt;We’ve all been there: You’re used to the terminal on Linux or OSX, and then for some or other reason you need to work on Windows and you’re confronted with the &lt;a href=&#34;http://en.wikipedia.org/wiki/Win32_console&#34; title=&#34;enlightening Wikipedia page on the Win32 console&#34;&gt;half-baked monstrosity that is cmd.exe&lt;/a&gt;:&lt;figure id=&#34;attachment_133&#34; aria-describedby=&#34;caption-attachment-133&#34; style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2011/08/cmd_screenie.jpg&#34;&gt;&lt;img class=&#34;size-medium wp-image-133&#34; title=&#34;cmd_screenie&#34; src=&#34;https://vxlabs.com/wp-content/uploads/2011/08/cmd_screenie-300x151.jpg?resize=300%2C151&#34; alt=&#34;&#34; width=&#34;300&#34; height=&#34;151&#34; srcset=&#34;https://vxlabs.com/wp-content/uploads/2011/08/cmd_screenie.jpg?resize=300%2C151&amp;ssl=1 300w, https://vxlabs.com/wp-content/uploads/2011/08/cmd_screenie.jpg?w=674&amp;ssl=1 674w&#34; sizes=&#34;(max-width: 300px) 100vw, 300px&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;figcaption id=&#34;caption-attachment-133&#34; class=&#34;wp-caption-text&#34;&gt;It’s 2011 and this is Windows 7: Why does the console still make me want to gnaw off my fingers?&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to stop accidentally answering or declining calls when trying to fish your HTC Sense Android phone from your pocket</title>
      <link>https://vxlabs.com/2011/07/20/how-to-stop-accidentally-answering-or-declining-calls-when-trying-to-fish-your-htc-sense-android-phone-from-your-pocket/</link>
      <pubDate>Wed, 20 Jul 2011 21:43:30 +0000</pubDate>
      <guid>https://vxlabs.com/2011/07/20/how-to-stop-accidentally-answering-or-declining-calls-when-trying-to-fish-your-htc-sense-android-phone-from-your-pocket/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/2011/01/22/htc-desire-z-an-in-depth-and-nerdy-review/&#34; title=&#34;my in-depth and nerdy review of the HTC Desire Z&#34;&gt;As you know by now&lt;/a&gt;, I really do love my HTC Desire Z phone. However, besides the miserable battery life which one tries to live with because it’s otherwise such a kickass phone, a major gripe was HTC Sense’s vertical swipe to answer or decline an incoming phone call. This has resulted in me accidentally answering or declining numerous incoming calls as I was trying to fish the phone out of my jeans pocket, as this fishing generally causes one’s fingers to slide vertically over the screen. The advice of turning the phone around so the screen faces one’s leg also doesn’t cut it, because the screen could get scratched on the various small studs one often finds in that area, but more importantly because I don’t like following semi-working rules like that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 11.04 Natty Narwhal Annoyances (Dell E6410 with NVS 3100m GPU)</title>
      <link>https://vxlabs.com/2011/05/15/ubuntu-11-04-natty-narwhal-annoyances-dell-e6410-with-nvs-3100m-gpu/</link>
      <pubDate>Sun, 15 May 2011 13:24:04 +0000</pubDate>
      <guid>https://vxlabs.com/2011/05/15/ubuntu-11-04-natty-narwhal-annoyances-dell-e6410-with-nvs-3100m-gpu/</guid>
      <description>&lt;p&gt;I recently upgraded my Dell E6410 with NVS 3100m GPU laptop from Ubuntu 10.10 (Maverick Meerkat) to 11.04 (Natty Narwhal), and I can’t shake this feeling that the distribution has taken a few steps back. I’m not even referring to the new Unity desktop, but to some super-irritating annoyances I had to fix or work around before being able to use the system. These annoyances were not present in 10.10, it had a whole different collection. 🙂&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Django Book 2.0 in MobiPocket / Kindle format</title>
      <link>https://vxlabs.com/2011/04/25/the-django-book-2-0-in-mobipocket-kindle-format/</link>
      <pubDate>Mon, 25 Apr 2011 14:18:45 +0000</pubDate>
      <guid>https://vxlabs.com/2011/04/25/the-django-book-2-0-in-mobipocket-kindle-format/</guid>
      <description>&lt;p&gt;I wanted to read the &lt;a href=&#34;http://djangobook.com/en/2.0/&#34; title=&#34;djangobook 2.0 web preview&#34;&gt;web preview of the Django Book’s second edition&lt;/a&gt; on my Kindle. Besides the fact that all image links are broken on that website and have apparently been so for some time, I prefer to have these things in the DRM-free MobiPocket / Kindle format. Of course I couldn’t find this anywhere, so I rolled my own based on the book’s SVN repository.&lt;/p&gt;&#xA;&lt;p&gt;On this page you can download the &lt;a href=&#34;http://vxlabs.com/wp-content/uploads/2011/04/The-Django-Book-2.0-Adrian-Holovaty.mobi_.zip&#34; title=&#34;MobiPocket version of The Django Book 2.0&#34;&gt;MobiPocket version of the book&lt;/a&gt; and the &lt;a href=&#34;http://vxlabs.com/wp-content/uploads/2011/04/The-Django-Book-2.0-Adrian-Holovaty.zip&#34; title=&#34;HTML source files used for making the MobiPocket&#34;&gt;HTML source files&lt;/a&gt; I generated to make it. You can also read on for the skinny on how you can do this yourself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android Apps</title>
      <link>https://vxlabs.com/android-apps/</link>
      <pubDate>Wed, 06 Apr 2011 19:02:22 +0000</pubDate>
      <guid>https://vxlabs.com/android-apps/</guid>
      <description>&lt;p&gt;The VXLabs collective sometimes releases art works in the form of Android Apps.&lt;/p&gt;&#xA;&lt;h2 id=&#34;toilet-buddy&#34;&gt;Toilet Buddy&lt;/h2&gt;&#xA;&lt;p&gt;If you have taste, you have &lt;a href=&#34;https://market.android.com/details?id=com.vxlabs.toiletbuddy&#34; title=&#34;link to toilet buddy market page&#34;&gt;this app&lt;/a&gt; on your smartphone. If you have exquisite taste, you’ll rate us with 5 stars, and your name will be added to the Official List of People With Exquisite Taste, displayed on the main screen of the app. When you do this, please let &lt;a href=&#34;mailto:android@vxlabs.com&#34;&gt;me&lt;/a&gt; know under which name I can add you to the list before the next release.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don’t buy HomePlug / Powerline ethernet adapters</title>
      <link>https://vxlabs.com/2011/03/02/dont-buy-homeplug-adapters/</link>
      <pubDate>Tue, 01 Mar 2011 23:14:16 +0000</pubDate>
      <guid>https://vxlabs.com/2011/03/02/dont-buy-homeplug-adapters/</guid>
      <description>&lt;p&gt;&lt;em&gt;(Post summary: The real-world throughput of current generation Homeplug AV 200 Mbit/s powerline ethernet adapters in a modern house is woefully inadequate. Even wireless is much to be preferred, and can be had for cheaper. Read below for why.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Based on the superb price / performance ratio of the MSI ePower 200AV II kit as extolled by &lt;a href=&#34;http://nl.hardware.info/reviews/1677/test-32-powerline-adapters&#34; title=&#34;nl.hardware.info review of 32 powerline adapters&#34;&gt;this comparative review&lt;/a&gt; (32 powerline adapters were tested), and especially the fact that in the test setup these adapters managed to attain 32 Mbit/s even in the &lt;a href=&#34;http://nl.hardware.info/reviews/1677/6/test-32-powerline-adapters-testresultaten-twee-stroomgroepen---bad-case&#34; title=&#34;nl.hardware.info powerline test bad case scenario&#34;&gt;bad case scenario&lt;/a&gt; (two different circuits, 100 metres of cable separating the two adapters), I purchased the MSI ePower 200AV+ II kit to replace a wireless link I currently have in my house between the second and third floors. Based on &lt;a href=&#34;http://linhost.info/2010/02/iperf-on-windows/&#34; title=&#34;iperf on windows page&#34;&gt;iperf&lt;/a&gt; measurements, the wireless link currently manages around 22Mbit/s of throughput. Because the two power sockets I was planning to use are on the same circuit, I thought that I could improve on this existing connection with the two powerline adapters. Little did I know…&lt;figure id=&#34;attachment_79&#34; aria-describedby=&#34;caption-attachment-79&#34; style=&#34;width: 300px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sipura / Linksys / Cisco SPA3102 Voice Gateway in The Netherlands</title>
      <link>https://vxlabs.com/2011/02/05/sipura-linksys-cisco-spa3102-voice-gateway-in-the-netherlands/</link>
      <pubDate>Sat, 05 Feb 2011 21:13:23 +0000</pubDate>
      <guid>https://vxlabs.com/2011/02/05/sipura-linksys-cisco-spa3102-voice-gateway-in-the-netherlands/</guid>
      <description>&lt;p&gt;After recently spending some hours configuring my new &lt;a href=&#34;http://www.cisco.com/en/US/products/ps10027/index.html&#34; title=&#34;cisco spa3102 product page&#34;&gt;Cisco SPA3102 Voice Gateway&lt;/a&gt; with a Betamax SIP provider (voipbuster / voipstunt / voipcheap / and so forth, see &lt;a href=&#34;http://www.backsla.sh/betamax&#34;&gt;http://www.backsla.sh/betamax&lt;/a&gt; for a full list of all Betamax providers) and the Dutch PSTN system, I thought I’d try and make your life easier by documenting the most important of the settings.&lt;figure id=&#34;attachment_70&#34; aria-describedby=&#34;caption-attachment-70&#34; style=&#34;width: 221px&#34; class=&#34;wp-caption alignnone&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vxlabs.com/wp-content/uploads/2011/02/spa3102.jpg&#34;&gt;&lt;img class=&#34;size-full wp-image-70&#34; title=&#34;spa3102&#34; src=&#34;https://vxlabs.com/wp-content/uploads/2011/02/spa3102.jpg?resize=221%2C290&#34; alt=&#34;&#34; width=&#34;221&#34; height=&#34;290&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;figcaption id=&#34;caption-attachment-70&#34; class=&#34;wp-caption-text&#34;&gt;With this box you can stick it to the man!&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>International characters on the HTC Desire Z keyboard</title>
      <link>https://vxlabs.com/2011/01/24/international-characters-on-the-htc-desire-z-keyboard/</link>
      <pubDate>Mon, 24 Jan 2011 22:31:25 +0000</pubDate>
      <guid>https://vxlabs.com/2011/01/24/international-characters-on-the-htc-desire-z-keyboard/</guid>
      <description>&lt;p&gt;I’m typing this up because it took me far too long to find, probably because I wasn’t using the right search terms, or because I was trying stupid key combinations…&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/sybrenstuvel/2468506922/&#34; title=&#34;Frustration (was: threesixtyfive | day 244) by Sybren A. Stüvel, on Flickr&#34;&gt;&lt;img src=&#34;https://i2.wp.com/farm3.static.flickr.com/2410/2468506922_c1ed495959_m.jpg?resize=240%2C196&#34; alt=&#34;Frustration (was: threesixtyfive | day 244)&#34; width=&#34;240&#34; height=&#34;196&#34; data-recalc-dims=&#34;1&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In any case, if you want to make international characters (that is, characters with accent marks, diacritics, &lt;a href=&#34;http://en.wiktionary.org/wiki/trema&#34; title=&#34;wikipedia page on the trema&#34;&gt;trema&lt;/a&gt; (plural tremata), umlauts, eat that google!) such as ë, é, ê or even ö or ï and so forth on the HTC Desire Z hardware keyboard, you simply long press the base character. A menu pops up and you get to choose the accented character that you would prefer to insert at that moment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTC Desire Z: An in-depth and nerdy review.</title>
      <link>https://vxlabs.com/2011/01/22/htc-desire-z-an-in-depth-and-nerdy-review/</link>
      <pubDate>Sat, 22 Jan 2011 21:43:53 +0000</pubDate>
      <guid>https://vxlabs.com/2011/01/22/htc-desire-z-an-in-depth-and-nerdy-review/</guid>
      <description>&lt;p&gt;&lt;em&gt;This review differs from other HTC Desire Z reviews because I’ve actually been using this phone as my only smartphone quite intensively, and because I’m writing up, in great depth, my iopinion as a gadget-toting ex-Linux-zealot computer science nerd. Take that engadget!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;As many of you know, I was completely in love with my previous smartphone. Not surprising, seeing as the &lt;a href=&#34;http://www.techradar.com/reviews/phones/mobile-phones/nokia-e71-437065/review&#34; title=&#34;Nokia E71 review&#34;&gt;Nokia e71&lt;/a&gt; is perfect, at least hardware-wise. However, partly due to Symbian (Nokia’s operating system) really dragging its heels (Nokia, does your mobile OS really have to feel like it teleported in from 1970?) and partly due to Android (Google’s mobile operating system) doing the exact opposite, I’d been not-so-patiently waiting for the right Android-running telephone to come along so I could start drinking the Google Kool-Aid.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 10.10 x86_64 on your Dell E6410 with NVS 3100m GPU</title>
      <link>https://vxlabs.com/2010/11/30/ubuntu-10-10-x86_64-on-your-dell-e6410-with-nvs-3100m-gpu/</link>
      <pubDate>Tue, 30 Nov 2010 22:00:04 +0000</pubDate>
      <guid>https://vxlabs.com/2010/11/30/ubuntu-10-10-x86_64-on-your-dell-e6410-with-nvs-3100m-gpu/</guid>
      <description>&lt;p&gt;Well howdy hoo! This is the fastest and most painless guide to installing Ubuntu 10.10 (Maverick Meerkat) x86_64 on your Dell E6410 laptop with NVS 3100m GPU.&lt;/p&gt;&#xA;&lt;p&gt;More specifically, installing Ubuntu 10.10 on this specific hardware configuration poses two problems:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Blank (black, no backlight) display when booting with the install media, or, if you manage to get Linux on the machine, with the installation itself.&lt;/li&gt;&#xA;&lt;li&gt;Blank (black, no backlight) display when resuming from suspend to ram after having installed Ubuntu.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;solving-problem-1&#34;&gt;Solving problem 1&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Boot with the normal Ubuntu 10.10 x86_64 Desktop live disc. I usually do this from USB memory.&lt;/li&gt;&#xA;&lt;li&gt;When you get to the first boot menu (“Try Ubuntu without installing”, “Install Ubuntu”, etc.), press F6 for other options, then ESC to kill the menu that appears. Move the menubar to “Try Ubuntu without installing”.&lt;/li&gt;&#xA;&lt;li&gt;You can now edit the boot command-line. Replace “quiet splash” with “nouveau.modeset=0”&lt;/li&gt;&#xA;&lt;li&gt;Press enter to boot into the live desktop, then install the whole business as per usual.&lt;/li&gt;&#xA;&lt;li&gt;At the first boot after installation, press ‘e’ at the grub boot screen to edit the command line and again replace “splash quiet” with “nouveau.modeset=0”.&lt;/li&gt;&#xA;&lt;li&gt;You should get all the way to the Ubuntu desktop.&lt;/li&gt;&#xA;&lt;li&gt;Activate the NVidia drivers via System | Administration | Additional Drivers&lt;/li&gt;&#xA;&lt;li&gt;Now edit /etc/default/grub, and replace “splash quiet” in the GRUB_CMDLINE_LINUX_DEFAULT with, you guessed it, “nouveau.modeset=0”.&lt;/li&gt;&#xA;&lt;li&gt;Run “sudo update-grub” at the command-line.&lt;/li&gt;&#xA;&lt;li&gt;Problem solved.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;solving-problem-2&#34;&gt;Solving problem 2&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Edit the GRUB_CMDLINE_LINUX_DEFAULT variable /etc/default/grub again. When you’re done, it should read (we’ve added the acpi_sleep bit at the end): &lt;pre class=&#34;brush: bash; title: ; notranslate&#34; title=&#34;&#34;&gt;GRUB_CMDLINE_LINUX_DEFAULT=&amp;ldquo;nouveau.modeset=0 acpi_sleep=nonvs&amp;rdquo;&lt;/pre&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Welcome to the Visual X Laboratories!</title>
      <link>https://vxlabs.com/2010/11/21/welcome-to-the-visual-x-laboratories/</link>
      <pubDate>Sun, 21 Nov 2010 13:19:52 +0000</pubDate>
      <guid>https://vxlabs.com/2010/11/21/welcome-to-the-visual-x-laboratories/</guid>
      <description>&lt;p&gt;I can’t tell you what the Visual X Laboratories are. You have to see it for yourself. 🙂&lt;/p&gt;&#xA;&lt;p&gt;(… or you could just read the about page when I finish writing it.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://vxlabs.com/about/</link>
      <pubDate>Sun, 21 Nov 2010 11:44:16 +0000</pubDate>
      <guid>https://vxlabs.com/about/</guid>
      <description>&lt;p&gt;This site is first and foremost a weblog with technical content on the topics&#xA;of machine learning, Emacs, Python, Django, programming language tidbits,&#xA;algorithms and other &lt;a href=&#34;https://vxlabs.com/tags&#34;&gt;interesting topics&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It is secondly an online presence of the vxlabs.&lt;/p&gt;&#xA;&lt;p&gt;the vxlabs = visual x laboratories, a boutique visualization, imaging and&#xA;software engineering consultancy run by &lt;a href=&#34;http://charlbotha.com/&#34; title=&#34;charlbotha.com&#34;&gt;Dr Charl Botha&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The vxlabs consultancy was active from 2013 to 2021, at which point CB decided&#xA;to dedicate their work time to &lt;a href=&#34;https://stonethree.com/&#34;&gt;Stone Three&lt;/a&gt; and so&#xA;the vxlabs company was switched from trading to holding mode. The vxlabs blog&#xA;continues undeterred!&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://vxlabs.com/wp-content/uploads/2014/12/wpid-gonzo-qtquick/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://vxlabs.com/wp-content/uploads/2014/12/wpid-gonzo-qtquick/</guid>
      <description>&lt;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&gt;&#xA;&lt;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34;&#xA;&#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&gt;&#xA;&lt;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34; lang=&#34;en&#34; xml:lang=&#34;en&#34;&gt;&#xA;&lt;head&gt;&#xA;&lt;title&gt;Lab journal: Foundry Gonzo-Qt&lt;/title&gt;&#xA;&lt;!-- 2014-11-28 Fri 10:48 --&gt;&#xA;&lt;meta  http-equiv=&#34;Content-Type&#34; content=&#34;text/html;charset=utf-8&#34; /&gt;&#xA;&lt;meta  name=&#34;generator&#34; content=&#34;Org-mode&#34; /&gt;&#xA;&lt;meta  name=&#34;author&#34; content=&#34;Charl Botha&#34; /&gt;&#xA;&lt;style type=&#34;text/css&#34;&gt;&#xA; &lt;!--/*--&gt;&lt;![CDATA[/*&gt;&lt;!--*/&#xA;  .title  { text-align: center; }&#xA;  .todo   { font-family: monospace; color: red; }&#xA;  .done   { color: green; }&#xA;  .tag    { background-color: #eee; font-family: monospace;&#xA;            padding: 2px; font-size: 80%; font-weight: normal; }&#xA;  .timestamp { color: #bebebe; }&#xA;  .timestamp-kwd { color: #5f9ea0; }&#xA;  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }&#xA;  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }&#xA;  .center { margin-left: auto; margin-right: auto; text-align: center; }&#xA;  .underline { text-decoration: underline; }&#xA;  #postamble p, #preamble p { font-size: 90%; margin: .2em; }&#xA;  p.verse { margin-left: 3%; }&#xA;  pre {&#xA;    border: 1px solid #ccc;&#xA;    box-shadow: 3px 3px 3px #eee;&#xA;    padding: 8pt;&#xA;    font-family: monospace;&#xA;    overflow: auto;&#xA;    margin: 1.2em;&#xA;  }&#xA;  pre.src {&#xA;    position: relative;&#xA;    overflow: visible;&#xA;    padding-top: 1.2em;&#xA;  }&#xA;  pre.src:before {&#xA;    display: none;&#xA;    position: absolute;&#xA;    background-color: white;&#xA;    top: -10px;&#xA;    right: 10px;&#xA;    padding: 3px;&#xA;    border: 1px solid black;&#xA;  }&#xA;  pre.src:hover:before { display: inline;}&#xA;  pre.src-sh:before    { content: &#39;sh&#39;; }&#xA;  pre.src-bash:before  { content: &#39;sh&#39;; }&#xA;  pre.src-emacs-lisp:before { content: &#39;Emacs Lisp&#39;; }&#xA;  pre.src-R:before     { content: &#39;R&#39;; }&#xA;  pre.src-perl:before  { content: &#39;Perl&#39;; }&#xA;  pre.src-java:before  { content: &#39;Java&#39;; }&#xA;  pre.src-sql:before   { content: &#39;SQL&#39;; }&#xA;&#xA;  table { border-collapse:collapse; }&#xA;  caption.t-above { caption-side: top; }&#xA;  caption.t-bottom { caption-side: bottom; }&#xA;  td, th { vertical-align:top;  }&#xA;  th.right  { text-align: center;  }&#xA;  th.left   { text-align: center;   }&#xA;  th.center { text-align: center; }&#xA;  td.right  { text-align: right;  }&#xA;  td.left   { text-align: left;   }&#xA;  td.center { text-align: center; }&#xA;  dt { font-weight: bold; }&#xA;  .footpara:nth-child(2) { display: inline; }&#xA;  .footpara { display: block; }&#xA;  .footdef  { margin-bottom: 1em; }&#xA;  .figure { padding: 1em; }&#xA;  .figure p { text-align: center; }&#xA;  .inlinetask {&#xA;    padding: 10px;&#xA;    border: 2px solid gray;&#xA;    margin: 10px;&#xA;    background: #ffffcc;&#xA;  }&#xA;  #org-div-home-and-up&#xA;   { text-align: right; font-size: 70%; white-space: nowrap; }&#xA;  textarea { overflow-x: auto; }&#xA;  .linenr { font-size: smaller }&#xA;  .code-highlighted { background-color: #ffff00; }&#xA;  .org-info-js_info-navigation { border-style: none; }&#xA;  #org-info-js_console-label&#xA;    { font-size: 10px; font-weight: bold; white-space: nowrap; }&#xA;  .org-info-js_search-highlight&#xA;    { background-color: #ffff00; color: #000000; font-weight: bold; }&#xA;  /*]]&gt;*/--&gt;&#xA;&lt;/style&gt;&#xA;&lt;script type=&#34;text/javascript&#34;&gt;&#xA;/*&#xA;@licstart  The following is the entire license notice for the&#xA;JavaScript code in this tag.&#xA;&#xA;Copyright (C) 2012-2013 Free Software Foundation, Inc.&#xA;&#xA;The JavaScript code in this tag is free software: you can&#xA;redistribute it and/or modify it under the terms of the GNU&#xA;General Public License (GNU GPL) as published by the Free Software&#xA;Foundation, either version 3 of the License, or (at your option)&#xA;any later version.  The code is distributed WITHOUT ANY WARRANTY;&#xA;without even the implied warranty of MERCHANTABILITY or FITNESS&#xA;FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.&#xA;&#xA;As additional permission under GNU GPL version 3 section 7, you&#xA;may distribute non-source (e.g., minimized or compacted) forms of&#xA;that code without the copy of the GNU GPL normally required by&#xA;section 4, provided you include this license notice and a URL&#xA;through which recipients can access the Corresponding Source.&#xA;&#xA;&#xA;@licend  The above is the entire license notice&#xA;for the JavaScript code in this tag.&#xA;*/&#xA;&lt;!--/*--&gt;&lt;![CDATA[/*&gt;&lt;!--*/&#xA; function CodeHighlightOn(elem, id)&#xA; {&#xA;   var target = document.getElementById(id);&#xA;   if(null != target) {&#xA;     elem.cacheClassElem = elem.className;&#xA;     elem.cacheClassTarget = target.className;&#xA;     target.className = &#34;code-highlighted&#34;;&#xA;     elem.className   = &#34;code-highlighted&#34;;&#xA;   }&#xA; }&#xA; function CodeHighlightOff(elem, id)&#xA; {&#xA;   var target = document.getElementById(id);&#xA;   if(elem.cacheClassElem)&#xA;     elem.className = elem.cacheClassElem;&#xA;   if(elem.cacheClassTarget)&#xA;     target.className = elem.cacheClassTarget;&#xA; }&#xA;/*]]&gt;*///--&gt;&#xA;&lt;/script&gt;&#xA;&lt;/head&gt;&#xA;&lt;body&gt;&#xA;&lt;div id=&#34;content&#34;&gt;&#xA;&lt;h1 class=&#34;title&#34;&gt;Lab journal: Foundry Gonzo-Qt&lt;/h1&gt;&#xA;&lt;div id=&#34;table-of-contents&#34;&gt;&#xA;&lt;h2&gt;Table of Contents&lt;/h2&gt;&#xA;&lt;div id=&#34;text-table-of-contents&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-1&#34;&gt;1. 2014-11-28 Friday&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-1-1&#34;&gt;1.1. LatticeDeformerQML&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-2&#34;&gt;2. 2014-11-27 Thursday&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-2-1&#34;&gt;2.1. QtQuick Lattice Deformer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-2-2&#34;&gt;2.2. Lattice deformer&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-2-2-1&#34;&gt;2.2.1. Process&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-3&#34;&gt;3. 2014-11-26 Wednesday&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-3-1&#34;&gt;3.1. Misc&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-3-2&#34;&gt;3.2. Lattice deformer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-4&#34;&gt;4. 2014-11-25 Tuesday&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-5&#34;&gt;5. 2014-11-24 Monday&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-5-1&#34;&gt;5.1. Discuss with Vilya &lt;code&gt;gl_Viewport&lt;/code&gt; handling&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-6&#34;&gt;6. 2014-11-21 Friday&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-6-1&#34;&gt;6.1. Lattice Deformer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-6-2&#34;&gt;6.2. &lt;code&gt;glViewport&lt;/code&gt; handling&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sec-6-3&#34;&gt;6.3. Meeting with Jack&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div id=&#34;outline-container-sec-1&#34; class=&#34;outline-2&#34;&gt;&#xA;&lt;h2 id=&#34;sec-1&#34;&gt;&lt;span class=&#34;section-number-2&#34;&gt;1&lt;/span&gt; 2014-11-28 Friday&lt;/h2&gt;&#xA;&lt;div class=&#34;outline-text-2&#34; id=&#34;text-1&#34;&gt;&#xA;&lt;/div&gt;&lt;div id=&#34;outline-container-sec-1-1&#34; class=&#34;outline-3&#34;&gt;&#xA;&lt;h3 id=&#34;sec-1-1&#34;&gt;&lt;span class=&#34;section-number-3&#34;&gt;1.1&lt;/span&gt; LatticeDeformerQML&lt;/h3&gt;&#xA;&lt;div class=&#34;outline-text-3&#34; id=&#34;text-1-1&#34;&gt;&#xA;&lt;p&gt;&#xA;&lt;code&gt;SceneObject&lt;/code&gt; is header file only.&#xA;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
