<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Living Systems_</title>
    <link>https://livesys.se/posts/</link>
    <description>Recent content in Posts on Living Systems_</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 02 Jan 2026 10:50:17 +0100</lastBuildDate>
    <atom:link href="https://livesys.se/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to align columns in the terminal</title>
      <link>https://livesys.se/posts/how-to-align-columns-in-the-terminal/</link>
      <pubDate>Fri, 02 Jan 2026 10:50:17 +0100</pubDate>
      <guid>https://livesys.se/posts/how-to-align-columns-in-the-terminal/</guid>
      <description>&lt;p&gt;In bioinformatics we are handling a lot of tabular data. Be it VCF files,&#xA;tabular Blast output, or just creating a CSV or TSV samplesheet.&lt;/p&gt;&#xA;&lt;p&gt;Actually, one of my favorite tabular formats is by using SeqKit to convert&#xA;Fasta or FastQ files to tabular format, as this allows to do various filtering&#xA;operations &lt;em&gt;by row&lt;/em&gt;, using standard unix tools if so wished.&lt;/p&gt;&#xA;&lt;p&gt;Scrolling through this type of data in the terminal can be messy to say the&#xA;least though.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up the Nextflow Language Server (LSP) with NeoVim</title>
      <link>https://livesys.se/posts/nextflow-lsp-with-neovim/</link>
      <pubDate>Fri, 16 May 2025 22:31:42 +0200</pubDate>
      <guid>https://livesys.se/posts/nextflow-lsp-with-neovim/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;screenshot.png&#34; alt=&#34;Screenshot of Nextflow LSP in NeoVim in action showing a context menu&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;It turns out it is super easy to get Nextflow code intelligence to work in&#xA;NeoVim now! This is thanks to the newly released &lt;a href=&#34;https://github.com/nextflow-io/language-server&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Nextflow language server&lt;/a&gt;&#xA;&#xA;following the increasingly popular Language Server Protocol (LSP).&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;https://seqera.io/podcasts/episode-47-nextflow-language-server/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;this episode of the Nextflow podcast&lt;/a&gt;&#xA; for a&#xA;more in-depth discussion on this new functionality.&lt;/p&gt;&#xA;&lt;p&gt;The focus has initially been on making this to work in the very popular Visual&#xA;Studio Code editor, but through some recent developments by the community,&#xA;setting it up in NeoVim is also pretty smooth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The chroot Technique - a Swiss army multitool for Linux systems</title>
      <link>https://livesys.se/posts/the-chroot-technique/</link>
      <pubDate>Tue, 08 Apr 2025 13:27:28 +0200</pubDate>
      <guid>https://livesys.se/posts/the-chroot-technique/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;liveusb.png&#34; alt=&#34;Live USB stick&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Ever ran into a Linux box that just won&amp;rsquo;t boot, even after making sure that&#xA;BIOS settings are OK and that no major hardware errors are at hand?&lt;/p&gt;&#xA;&lt;p&gt;Then you need to know about the &lt;code&gt;chroot&lt;/code&gt; technique, which can be a real life&#xA;saver.&lt;/p&gt;&#xA;&lt;p&gt;For example, I managed to repair a &lt;a href=&#34;https://nanoporetech.com/products/sequence/gridion&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Nanopore GridION device&lt;/a&gt;&#xA;&#xA;this way the other week, after the &lt;a href=&#34;https://nanoporetech.com/document/gridion-user-manual#introduction-grid&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;official method of re-installing it via an .iso file&lt;/a&gt;&#xA;&#xA;failed, which reminded me to make the effort of documenting these steps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why is R so confusing? Because it is so hard to inspect</title>
      <link>https://livesys.se/posts/why-is-r-so-confusing/</link>
      <pubDate>Fri, 28 Mar 2025 14:52:00 +0100</pubDate>
      <guid>https://livesys.se/posts/why-is-r-so-confusing/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;confused.png&#34; alt=&#34;Confused man trying to run some R code&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not the only one who thinks the &lt;a href=&#34;https://www.r-project.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;R language&lt;/a&gt;&#xA;&#xA;can be pretty frustrating at times.&lt;/p&gt;&#xA;&lt;p&gt;In fact, although I have been using it a dozen times over my career, every time&#xA;I have picked it up again after a hiatus, I have been completely lost.&lt;/p&gt;&#xA;&lt;p&gt;Many people have written about various aspects of why it is so confusing, and&#xA;some common themes are things like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning Genomics and Bioinformatics in 2025</title>
      <link>https://livesys.se/posts/learning-genomics-bioinformatics-in-2025/</link>
      <pubDate>Tue, 12 Nov 2024 10:28:04 +0100</pubDate>
      <guid>https://livesys.se/posts/learning-genomics-bioinformatics-in-2025/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;ngsintro.png&#34; alt=&#34;From the NGS introductory course at SciLifeLab Uppsala in 2015. Photo by Samuel Lampa.&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Bioinformatics is growing in the clinical field, and in my job in a clinical&#xA;microbiology lab, I&amp;rsquo;m increasingly asked for tips about how to get into&#xA;bioinformatics or genomic data science.&lt;/p&gt;&#xA;&lt;p&gt;As I recently took the plunge into genomics from my PhD field of small&#xA;molecular structures and machine learning, as part of getting into my current&#xA;position, I thought to write down what I learned in the process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rewrite of Scicommander in Go with much improved algorithm</title>
      <link>https://livesys.se/posts/rewrite-of-scicommander-in-go/</link>
      <pubDate>Tue, 03 Sep 2024 11:15:02 +0200</pubDate>
      <guid>https://livesys.se/posts/rewrite-of-scicommander-in-go/</guid>
      <description>&lt;p&gt;When I presented a poster about&#xA;&lt;a href=&#34;https://github.com/samuell/scicommander&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciCommander&lt;/a&gt;&#xA; at the &lt;a href=&#34;https://livesys.se/posts/scicommander-0.3/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Swedish bioinformatics workshop&lt;/a&gt;&#xA; last year,&#xA;I got a lot of awesome feedback from some great people including Fredrik&#xA;Boulund, Johannes Alneberg and others, of which I unfortunately lost the names&#xA;(please shout out if you read this!).&lt;/p&gt;&#xA;&lt;p&gt;(For those new to SciCommander, it is my attempt at creating a tool that can&#xA;track complete provenance reports also for ad-hoc shell commands, not just&#xA;those included in a pipeline. The grand plan is also to integrate this&#xA;provenance tracking with those of popular pipelines, to enable seamless&#xA;provenance report generation across pipelines and ad-hoc commands).&lt;/p&gt;</description>
    </item>
    <item>
      <title>A few notes from the Applied Hologenomics Conference 2024</title>
      <link>https://livesys.se/posts/ahc2024/</link>
      <pubDate>Fri, 05 Jul 2024 16:23:00 +0200</pubDate>
      <guid>https://livesys.se/posts/ahc2024/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;dsc_4779_2.jpg?height=320px&#34; alt=&#34;Projector screen at the conference&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m just back from the &lt;a href=&#34;https://www.appliedhologenomicsconference.eu/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Applied Hologenomics Conference in 2024&lt;/a&gt;&#xA;&#xA;(See also &lt;a href=&#34;https://x.com/search?q=%23AHC2024&amp;amp;src=typed_query&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#AHC2024 on Twitter&lt;/a&gt;&#xA;) in Copenhagen and&#xA;thought to reflect a little on the conference and highlight the bits that&#xA;particularly stuck with me.&lt;/p&gt;&#xA;&lt;p&gt;The first thing I want to say is that a paradigm shift is happening&#xA;here.&lt;/p&gt;&#xA;&lt;p&gt;I think what is happening here is a step away from the reductionist view&#xA;of the past that goes beyond the systems biology approach that has been&#xA;establishing itself during the last 10-20 years.&lt;/p&gt;</description>
    </item>
    <item>
      <title>We need recipes for common bioinformatics tasks</title>
      <link>https://livesys.se/posts/bioinformatics-recipes/</link>
      <pubDate>Mon, 27 May 2024 12:44:00 +0200</pubDate>
      <guid>https://livesys.se/posts/bioinformatics-recipes/</guid>
      <description>&lt;p&gt;Ad-hoc tasks in bioinformatics can contain such an immense number of operations&#xA;and tasks that need to be performed to achieve a certain goal. Often these are&#xA;all individually regarded as rather &amp;ldquo;standard&amp;rdquo; or &amp;ldquo;routine&amp;rdquo;. Despite this,&#xA;it is quite hard to find an authoritative set of &amp;ldquo;recipes&amp;rdquo; for how to do such&#xA;tasks.&lt;/p&gt;&#xA;&lt;p&gt;Thus I was starting to think that there needs to be a collection of&#xA;bioinformatics &amp;ldquo;recipes&amp;rdquo;. A sort of &amp;ldquo;cookbook&amp;rdquo; for common&#xA;bioinformatics tasks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why didn&#39;t Go get a breakthrough in bioinformatics (yet)?</title>
      <link>https://livesys.se/posts/golang-for-bioinformatics/</link>
      <pubDate>Mon, 13 May 2024 17:05:00 +0200</pubDate>
      <guid>https://livesys.se/posts/golang-for-bioinformatics/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;gopherbinfie.jpg&#34; alt=&#34;A gopher doing&#xA;bioinformatics&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;As we are - &lt;a href=&#34;https://a16z.com/the-century-of-biology/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;according to some expert&#xA;opinions&lt;/a&gt;&#xA; - living in the&#xA;Century of Biology, I found it interesting to reflect on Go&amp;rsquo;s usage&#xA;within the field.&lt;/p&gt;&#xA;&lt;p&gt;Go has some great features that make it really well suited for biology,&#xA;such as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A relatively simple language that can be learned in a short time&#xA;even for people without a CS background. This is super important&#xA;aspect for biologists.&lt;/li&gt;&#xA;&lt;li&gt;Fantastic support for cross-compilation into all major computer&#xA;architectures and operating systems, as static, self-sufficient&#xA;executables making it extremely simple to deploy tools, something&#xA;that can&amp;rsquo;t be said about the currently most popular bio language,&#xA;Python.&lt;/li&gt;&#xA;&lt;li&gt;Fantastic support for concurrency and writing code as a set of&#xA;parallell operations that streams data between them. Again, as&#xA;opposed to Python. More on that later.&lt;/li&gt;&#xA;&lt;li&gt;A large standard library that contains a lot of common needs, even&#xA;for writing user interfaces and web servers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Go has in fact garnered some use for bioinformatics tools over the years, with&#xA;some indications that its use is increasing. Examples of popular tools and&#xA;toolkits are &lt;a href=&#34;https://github.com/shenwei356/seqkit&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SeqKit&lt;/a&gt;&#xA; (a veritable &lt;em&gt;swiss&#xA;army knife&lt;/em&gt; for bioinformatics), the &lt;a href=&#34;https://github.com/biogo/biogo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;BioGo&#xA;toolkit&lt;/a&gt;&#xA;, the &lt;a href=&#34;https://github.com/pbenner/gonetics&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Gonetics&#xA;package&lt;/a&gt;&#xA; and lately the &lt;a href=&#34;https://github.com/vertgenlab/gonomics&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Gonomics&#xA;package&lt;/a&gt;&#xA; and finally the&#xA;&lt;a href=&#34;https://github.com/bebop/poly&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Poly&lt;/a&gt;&#xA; package for synthetic biology. And this&#xA;is besides heavy use in infrastructure-oriented projects like the&#xA;&lt;a href=&#34;https://www.benthos.dev&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Benthos&lt;/a&gt;&#xA; stream processing tool, the &lt;a href=&#34;https://github.com/grailbio/reflow&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Reflow pipeline&#xA;tool&lt;/a&gt;&#xA; and &lt;a href=&#34;https://pachyderm.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pachyderm orchestration&#xA;suite&lt;/a&gt;&#xA;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SciPipe used at NASA Glenn Research Center</title>
      <link>https://livesys.se/posts/scipipe-at-nasa/</link>
      <pubDate>Sat, 13 Apr 2024 12:00:00 +0200</pubDate>
      <guid>https://livesys.se/posts/scipipe-at-nasa/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;nasa-paper.png&#34; alt=&#34;Nasa paper screenshot&#34;  class=&#34;align_right&#34; /&gt;&#xA;&lt;/p&gt;&#xA;I was happy to see the&#xA;&lt;a href=&#34;https://www.nature.com/articles/s41526-024-00385-5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;publication finally going&#xA;online&lt;/a&gt;&#xA;, of work done at&#xA;&lt;a href=&#34;https://www.nasa.gov/glenn/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;NASA Glenn Research Center&lt;/a&gt;&#xA;, where&#xA;&lt;a href=&#34;https://scipipe.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciPipe&lt;/a&gt;&#xA; has been used to process and track provenance of&#xA;the analyses, &amp;ldquo;Modeling the impact of thoracic pressure on intracranial&#xA;pressure&amp;rdquo;. I&amp;rsquo;ve known the work existed for a couple of years, after getting&#xA;some &lt;a href=&#34;https://github.com/scipipe/scipipe/commits?author=dwmunster&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;extraordinarily useful contributions from&#xA;Drayton&lt;/a&gt;&#xA; fixing&#xA;some bugs I&amp;rsquo;m not sure I&amp;rsquo;d ever find otherwise, but cool to now also see it&#xA;published! Also a big kudos for acknowledging the tool in the paper. Not all&#xA;that common to do, but a gesture that is deeply appreciated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging inside Jinja templates using pdb/ipdb</title>
      <link>https://livesys.se/posts/debugging-inside-jinja-templates-using-pdb-ipdb/</link>
      <pubDate>Mon, 04 Mar 2024 14:42:00 +0100</pubDate>
      <guid>https://livesys.se/posts/debugging-inside-jinja-templates-using-pdb-ipdb/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m working on a static reporting tool using the Jinja2 templating&#xA;engine for Python.&lt;/p&gt;&#xA;&lt;p&gt;I was trying to figure out a way to enter into the Jinja templating code&#xA;with the pdb/ipdb commandline debugger.&lt;/p&gt;&#xA;&lt;p&gt;I tried creating an &lt;code&gt;.ipdbrc&lt;/code&gt; file in my local directory with the line:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;path/to/template.html:&amp;lt;lineno&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&amp;hellip; but that didn&amp;rsquo;t work.&lt;/p&gt;&#xA;&lt;p&gt;What worked was to figure out &lt;a href=&#34;https://github.com/pallets/jinja/blob/main/src/jinja2/environment.py#L1301&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;the line that&#xA;says&lt;/a&gt;&#xA;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;return self.environment.concat(self.root_render_func(ctx))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&amp;hellip; inside the the jinja codebase, and put a breakpoint on that (which&#xA;for me was on line 1299, but might vary depending on version):&lt;/p&gt;</description>
    </item>
    <item>
      <title>SciCommander - track provenance of any shell command</title>
      <link>https://livesys.se/posts/scicommander-0.3/</link>
      <pubDate>Thu, 09 Nov 2023 18:38:00 +0100</pubDate>
      <guid>https://livesys.se/posts/scicommander-0.3/</guid>
      <description>&lt;p&gt;I haven&amp;rsquo;t written much about a new tool I&amp;rsquo;ve been working on in some&#xA;extra time: &lt;a href=&#34;https://github.com/samuell/scicommander&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciCommander&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&lt;p&gt;I just presented a poster about it at the &lt;a href=&#34;https://sbw2023.nu&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Swedish Bioinformatics&#xA;Workshop 2023&lt;/a&gt;&#xA; , so perhaps let me first present you&#xA;the poster instead of re-iterating what it is (click to view large&#xA;version):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;scicmd-poster-export-007.png&#34;&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;scicmd-poster-export-007.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;new-version-not-requiring-running-the-scicmd-command&#34;&gt;New version not requiring running the scicmd command&lt;/h3&gt;&#xA;&lt;p&gt;I got a lot of great feedback from numerous people at the conference,&#xA;most of who pointed out that it would be great if one could start&#xA;scicommander as a kind of subshell, inside which one can run commands as&#xA;usual, instead of running them via the &lt;code&gt;scicmd -c&lt;/code&gt; command.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Troubleshooting Nextflow pipelines</title>
      <link>https://livesys.se/posts/troubleshooting-nextflow-pipelines/</link>
      <pubDate>Wed, 01 Nov 2023 11:47:00 +0100</pubDate>
      <guid>https://livesys.se/posts/troubleshooting-nextflow-pipelines/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;We have been evaluating Nextflow before in my work at&#xA;&lt;a href=&#34;https://pharmb.io&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pharmb.io&lt;/a&gt;&#xA;, but that was before&#xA;&lt;a href=&#34;https://www.nextflow.io/docs/latest/dsl1.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;DSL2&lt;/a&gt;&#xA; and the support&#xA;for re-usable modules (which was one reason we needed to develop our own&#xA;tools to support our challenges, as explained &lt;a href=&#34;https://doi.org/10.1093/gigascience/giz044&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;in the&#xA;paper&lt;/a&gt;&#xA;). Thus, there&amp;rsquo;s&#xA;definitely some stuff to get into.&lt;/p&gt;&#xA;&lt;p&gt;Based on my years in bioinformatics and data science, I&amp;rsquo;ve seen that&#xA;the number one skill that you need to develop is to be able to&#xA;effectively troubleshoot things, because things will invariably fail in&#xA;all kinds of ways. And in the process, you will probably learn a lot&#xA;about the technology stack you are using.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random notes from installing Debian 11 with separate accounts for work and private</title>
      <link>https://livesys.se/posts/installing-and-configuring-debian-11-into-a-great-experience/</link>
      <pubDate>Thu, 24 Mar 2022 04:50:00 +0100</pubDate>
      <guid>https://livesys.se/posts/installing-and-configuring-debian-11-into-a-great-experience/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;See especially the end for info about how to set up a nice integration&#xA;between the work and private accounts, such that one can e.g.&#xA;occasionally start the mail client or web browser from the private&#xA;account from the work one etc.&lt;/p&gt;&#xA;&lt;h3 id=&#34;caveats-when-installing-debian-11&#34;&gt;Caveats when installing Debian 11&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make sure that an EFI partition is created (when I manually modified&#xA;the partition table I accidentally deleted it, and had to reinstall&#xA;to get it created properly again).&lt;/li&gt;&#xA;&lt;li&gt;Had to turn off safe boot in BIOS&lt;/li&gt;&#xA;&lt;li&gt;Had to set SATA settings to AHCI&lt;/li&gt;&#xA;&lt;li&gt;Had to manually create a boot option with the path to&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;\EFI\debian\grubx64.efi&#xA;&lt;/code&gt;&lt;/pre&gt;in BIOS settings&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;instructions-for-configuring-debian-to-my-liking&#34;&gt;Instructions for configuring Debian to my liking&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add current user to sudo&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Switch user to root:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;usermod -aG sudo &amp;lt;username&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;Log out and back the user&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Uncomment CDROM remotes in /etc/apt/sources.list&lt;/li&gt;&#xA;&lt;li&gt;Change default search engine in firefox to duckduckgo&lt;/li&gt;&#xA;&lt;li&gt;Replace applications menu with whiskers menu&lt;/li&gt;&#xA;&lt;li&gt;Install some packages:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install vim git tig tmux curl tree rsync gparted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ecryptfs-utils redshift bash-completion bluez blueman&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;Clone rc folder:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/samuell/rc.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;Link rc files:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ln -s rc/.&lt;span style=&#34;color:#000&#34;&gt;{&lt;/span&gt;b,v,t&lt;span style=&#34;color:#000&#34;&gt;}&lt;/span&gt;* .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;Create empty &lt;code&gt;.bash_aliases_local&lt;/code&gt;:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;touch ~/.bash_aliases_local&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;Activate in bashrc:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#39;if [ -f ~/.bashrc_mods ]; then . ~/.bashrc_mods; fi&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc &lt;span style=&#34;color:#000&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a90d91&#34;&gt;source&lt;/span&gt; ~/.bashrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;Install vim-plug:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fLo ~/.vim/autoload/plug.vim --create-dirs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;Run &lt;code&gt;:PlugInstall&lt;/code&gt; in vim:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim -c &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;:PlugInstall&amp;#34;&lt;/span&gt; -c &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;qa!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;In &amp;ldquo;Keyboard settings &amp;gt; Application shortcuts&amp;rdquo; add two&#xA;shortcuts:&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xfce4-popup-whiskermenu    &lt;span style=&#34;color:#177500&#34;&gt;# Ctrl+Esc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xfce4-terminal --drop-down &lt;span style=&#34;color:#177500&#34;&gt;# Super+Space&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;Open the terminal with Win+Space, and configure:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set width to 100%&lt;/li&gt;&#xA;&lt;li&gt;Uncheck always show tabs&lt;/li&gt;&#xA;&lt;li&gt;Uncheck show menubar in new windows&lt;/li&gt;&#xA;&lt;li&gt;Configure color to more pastel like colors according to my new method&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;In Appearance&amp;hellip;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set style to &amp;ldquo;Adwaita-dark&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Set fonts to &amp;ldquo;Adwaita&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Set main font to &amp;ldquo;Sans Regular 8&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Let main monospace font be &amp;ldquo;Monospace Regular 10&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;In terminal preferences, set font to &amp;ldquo;Monospace Regular 10&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;In Window manager, set shortcuts:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tile window up/down/left/right: Super up/down/left/right&lt;/li&gt;&#xA;&lt;li&gt;Move window Ctrl+Alt+F&lt;/li&gt;&#xA;&lt;li&gt;Resize window Ctrl+Alt+R&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Install and configure Brave browser&lt;/li&gt;&#xA;&lt;li&gt;Encrypt home folder&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;set-up-separate-work-and-private-accounts&#34;&gt;Set up separate work and private accounts&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Create the separate accounts&lt;/li&gt;&#xA;&lt;li&gt;Encrypt folder of both&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In order to run private commands from the work account and vice versa:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing Qubes OS</title>
      <link>https://livesys.se/posts/installing-qubes-os/</link>
      <pubDate>Wed, 29 Dec 2021 06:59:00 +0100</pubDate>
      <guid>https://livesys.se/posts/installing-qubes-os/</guid>
      <description>&lt;p&gt;I just switched to &lt;a href=&#34;https://www.qubes-os.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Qubes OS&lt;/a&gt;&#xA; as operating&#xA;system on my main work laptop (a Dell Latitude). Or in fact, one of the&#xA;reasons was to be able to combine work and private hobby coding&#xA;projects, that&amp;rsquo;s increasinbly been happening on the same machine.&#xA;Anyways, these are my experiences and notes, as a way to document&#xA;caveats and quirks in case I need to do this again, while possibly also&#xA;being of use for others.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Composability in functional and flow-based programming</title>
      <link>https://livesys.se/posts/composability-in-functional-and-flow-based-programming/</link>
      <pubDate>Fri, 12 Feb 2021 16:24:00 +0100</pubDate>
      <guid>https://livesys.se/posts/composability-in-functional-and-flow-based-programming/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;An area where I&amp;rsquo;m not so happy with some things I&amp;rsquo;ve seen in FP, is&#xA;composability.&lt;/p&gt;&#xA;&lt;p&gt;In my view, a well designed system or langauge should make functions (or&#xA;other smallest unit of computation) more easily composable, not less.&lt;/p&gt;&#xA;&lt;p&gt;What strikes me as one of the biggest elephants in the room regarding&#xA;FP, is that typical functions compose fantastically as long as you are&#xA;working with a single input argument, and a single output for each&#xA;function application, but as soon as you start taking multiple input&#xA;arguments and returned outputs though, you tend to end up with very&#xA;messy trees of function application. Even handy techniques such as&#xA;currying tend to get overly complex if you want to handle all the&#xA;possible downstream dataflow paths in a structured way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crystal: Go-like concurrency with easier syntax</title>
      <link>https://livesys.se/posts/crystal-concurrency-easier-syntax-than-golang/</link>
      <pubDate>Sat, 05 Sep 2020 15:36:00 +0200</pubDate>
      <guid>https://livesys.se/posts/crystal-concurrency-easier-syntax-than-golang/</guid>
      <description>&lt;p&gt;I have been playing around a lot with concurrency in Go over the years,&#xA;resulting in libraries such as &lt;a href=&#34;https://scipipe.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciPipe&lt;/a&gt;&#xA;,&#xA;&lt;a href=&#34;http://flowbase.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FlowBase&lt;/a&gt;&#xA; and&#xA;&lt;a href=&#34;https://github.com/rdfio/rdf2smw/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;rdf2smw&lt;/a&gt;&#xA;. My main motivation for&#xA;looking into Go has been the possibility to use it as a more performant,&#xA;scaleable and type-safe alternative to Python for data heavy scripting&#xA;tasks in bioinformatics and other fields I&amp;rsquo;ve been dabbling in.&#xA;Especially as it makes it so easy to write concurrent and parallel code&#xA;in it. Be warned that this context is surely giving me some biases.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Viewing Go test coverage in the browser with one command</title>
      <link>https://livesys.se/posts/go-test-coverage-in-browser/</link>
      <pubDate>Thu, 20 Aug 2020 23:47:00 +0200</pubDate>
      <guid>https://livesys.se/posts/go-test-coverage-in-browser/</guid>
      <description>&lt;p&gt;Go has some really nice tools for running tests and analyzing code. One&#xA;of these functionalities is that you can generate coverage information&#xA;when running tests, that can later be viewed in a browser using the&#xA;&lt;code&gt;go tool cover&lt;/code&gt; command. It turns out though, since doing it requires&#xA;executing multiple commands after each other, it might be hard to&#xA;remember the exact commands.&lt;/p&gt;&#xA;&lt;p&gt;To this end, I created a bash alias that does everything in one command,&#xA;&lt;code&gt;gocov&lt;/code&gt;. It looks like this (to be placed in your &lt;code&gt;~/.bash_aliases&lt;/code&gt; file&#xA;or similar:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a static copy of a Drupal, Wordpress or other CMS website</title>
      <link>https://livesys.se/posts/static-copy-of-cms-website/</link>
      <pubDate>Thu, 20 Aug 2020 17:42:00 +0200</pubDate>
      <guid>https://livesys.se/posts/static-copy-of-cms-website/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget -P . -mpck --html-extension -e &lt;span style=&#34;color:#000&#34;&gt;robots&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;=&lt;/span&gt;off --wait 0.5 &amp;lt;URL&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To understand the flags, you can check &lt;code&gt;man wget&lt;/code&gt; of course, but some&#xA;explanations follow here:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-P - Tell where to store the site&lt;/li&gt;&#xA;&lt;li&gt;-m - Create a mirror&lt;/li&gt;&#xA;&lt;li&gt;-p - Download all the required files (.css, .js) needed to properly&#xA;render the page&lt;/li&gt;&#xA;&lt;li&gt;-c - Continue getting partially downloaded files&lt;/li&gt;&#xA;&lt;li&gt;-k - Convert links to enable local viewing&lt;/li&gt;&#xA;&lt;li&gt;&amp;ndash;html-extension - Add the .html extension after file names. This&#xA;is important since when serving the plain files, a web server such&#xA;as NGinx need the .html extension to know that the files should be&#xA;sent directly to the user&amp;rsquo;s browser, not offered as a file to&#xA;download. See below for how to redirect from old to new links.&lt;/li&gt;&#xA;&lt;li&gt;-e robots=off - Don&amp;rsquo;t read the robots.txt file. Not sure exactly&#xA;how this one works, but I got a lot of errors if not including it.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ndash;wait 0.5 - It is better to not overwhelm the web server where&#xA;your site is hosted, by waiting a little between each page download.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;After finishing this command, you will have a folder with static&#xA;HTML-files and other files, that you can just upload to your web server&#xA;instead of your CMS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basic PUB/SUB connection with ZeroMQ in Python</title>
      <link>https://livesys.se/posts/pub-sub-with-zeromq-in-python/</link>
      <pubDate>Wed, 13 Nov 2019 11:56:00 +0100</pubDate>
      <guid>https://livesys.se/posts/pub-sub-with-zeromq-in-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://zeromq.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ZeroMQ&lt;/a&gt;&#xA; is a great way to quickly and simply send messages&#xA;between multiple programs running on the same or different computers. It is&#xA;very simple and robust since it doesn&amp;rsquo;t need any central server. Instead it&#xA;talks directly between the programs through sockets, TCP-connections or&#xA;similar.&lt;/p&gt;&#xA;&lt;p&gt;ZeroMQ has client libraries for basically all commonly used programming&#xA;languages, but when testing out that a connection works between e.g. two&#xA;different machines, it might be good to keep things simple and test just&#xA;the connection, as simply as possible. For this purpose, I have came to&#xA;use the following two python scripts, where one sets up a &amp;ldquo;publisher&amp;rdquo;,&#xA;and the other a &amp;ldquo;subscriber&amp;rdquo; process. I&amp;rsquo;m documenting them here since&#xA;I tend to forget the syntax from time to time, and also some details,&#xA;such as that you have to make sure the subscriber subscribes to one or&#xA;all topics.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Table-driven tests in C#</title>
      <link>https://livesys.se/posts/table-driven-tests-in-csharp/</link>
      <pubDate>Sat, 02 Nov 2019 21:24:00 +0100</pubDate>
      <guid>https://livesys.se/posts/table-driven-tests-in-csharp/</guid>
      <description>&lt;p&gt;Folks in the Go community have championed so called table-driven tests&#xA;(see e.g. &lt;a href=&#34;https://dave.cheney.net/2019/05/07/prefer-table-driven-tests&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;this post by Dave&#xA;Cheney&lt;/a&gt;&#xA;&#xA;and the &lt;a href=&#34;https://github.com/golang/go/wiki/TableDrivenTests&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Go wiki&lt;/a&gt;&#xA;)&#xA;as a way to quickly and easily writing up a bunch of complete test cases&#xA;with inputs and corresponding expected outputs, and looping over them to&#xA;execute the function being tested. In short, the idea is to suggest a&#xA;maximally short and convenient syntax to do this.&lt;/p&gt;&#xA;&lt;p&gt;For example, given that we have a function like this in mylibrary.go:&lt;/p&gt;</description>
    </item>
    <item>
      <title>SciPipe paper published in GigaScience</title>
      <link>https://livesys.se/posts/scipipe-paper-published-in-gigascience/</link>
      <pubDate>Sat, 27 Apr 2019 14:48:00 +0200</pubDate>
      <guid>https://livesys.se/posts/scipipe-paper-published-in-gigascience/</guid>
      <description>&lt;p&gt;We just wanted to share that the paper on our Go-based workflow library,&#xA;SciPipe, was just published in GigaScience:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://doi.org/10.1093/gigascience/giz044&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_999_198.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;&#xA;&lt;p&gt;The complex nature of biological data has driven the development of&#xA;specialized software tools. Scientific workflow management systems&#xA;simplify the assembly of such tools into pipelines, assist with job&#xA;automation, and aid reproducibility of analyses. Many contemporary&#xA;workflow tools are specialized or not designed for highly complex&#xA;workflows, such as with nested loops, dynamic scheduling, and&#xA;parametrization, which is common in, e.g., machine learning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Structured Go-routines or framework-less Flow-Based Programming in Go</title>
      <link>https://livesys.se/posts/structured-go-routines-or-framework-less-flow-based-programming-in-go/</link>
      <pubDate>Sat, 02 Mar 2019 13:52:00 +0100</pubDate>
      <guid>https://livesys.se/posts/structured-go-routines-or-framework-less-flow-based-programming-in-go/</guid>
      <description>&lt;p&gt;I was so happy the other day to find someone else who found the great&#xA;benefits of a little pattern for how to structure pipeline-heavy&#xA;programs in Go, which I described in a few posts before. I have been&#xA;surprised to not find more people using this kind of pattern, which has&#xA;been so extremely helpful to us, so I thought to take this opportunity&#xA;to re-iterate it again, in the hopes that more people might get aware of&#xA;it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up a reasonable and light-weight Linux-like (non-WSL) terminal environment on Windows</title>
      <link>https://livesys.se/posts/linux-like-non-wsl-terminal-env-on-windows/</link>
      <pubDate>Thu, 29 Nov 2018 16:36:00 +0100</pubDate>
      <guid>https://livesys.se/posts/linux-like-non-wsl-terminal-env-on-windows/</guid>
      <description>&lt;p&gt;I was looking for was a no-fuss, lightweight, robust and as simple as&#xA;possible solution to running my normal Bash-based workflow inside the&#xA;main Windows filesystem, interacting with the Windows world. Turns out&#xA;there are some solutions. Read on for more info on that.&lt;/p&gt;&#xA;&lt;h2 id=&#34;windows-subsystem-for-linux-too-heavy&#34;&gt;Windows Subsystem for Linux too heavy&lt;/h2&gt;&#xA;&lt;p&gt;First, I must mention the impressive work by Microsoft on the &lt;a href=&#34;https://docs.microsoft.com/en-us/windows/wsl/about&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Windows&#xA;Subsystem for Linux (aka.&#xA;WSL)&lt;/a&gt;&#xA;, which more or&#xA;less lets you run an almost full-blown distribution of popular Linux&#xA;distros like Ubuntu and Fedora. WSL is awesome, but also kind of heavy,&#xA;easily taking something closer to an hour to install. It also has some&#xA;odd behaviours like opening files in Windows from WSL will give you&#xA;troubles with line endings (as you might know Windows uses &lt;code&gt;\r\n&lt;/code&gt; for&#xA;line endings while Linux uses just &lt;code&gt;\n&lt;/code&gt;). Finally, the default bash&#xA;terminal for WSL did not even have zoomable text. All in all, this made&#xA;it clear that this is not the light-weight simple solution I was looking&#xA;for. WSL is awesome, but too heavy that I will be comfortable to quickly&#xA;install it on any Windows machine I need to spend time working on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linked Data Science - For improved understandability of computer-aided research</title>
      <link>https://livesys.se/posts/linked-data-science/</link>
      <pubDate>Fri, 21 Sep 2018 01:43:00 +0200</pubDate>
      <guid>https://livesys.se/posts/linked-data-science/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is an excerpt from the &amp;ldquo;future outlook&amp;rdquo; section of my thesis&#xA;titled &lt;a href=&#34;http://uu.diva-portal.org/smash/record.jsf?pid=diva2%3A1242336&amp;amp;dswid=2522&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;Reproducible Data Analysis in Drug Discovery with Scientific&#xA;Workflows and the Semantic&#xA;Web&amp;rdquo;&lt;/a&gt;&#xA;&#xA;(click for the open access full text), which aims to provide various&#xA;putative ways towards improved reproducibility, understandability and&#xA;verifiability of computer-aided research.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;linkeddatascience.png&#34;&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;linkeddatascience.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Historically, something of a divide has developed between the metadata&#xA;rich datasets and approaches in the world of Semantic&#xA;Web/Ontologies/Linked Data, versus in the Big Data field in particular,&#xA;which has been at least initially mostly focused on large unstructured&#xA;datasets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Preprint on SciPipe - Go-based scientific workflow library</title>
      <link>https://livesys.se/posts/scipipe-preprint/</link>
      <pubDate>Thu, 02 Aug 2018 01:01:00 +0200</pubDate>
      <guid>https://livesys.se/posts/scipipe-preprint/</guid>
      <description>&lt;p&gt;A pre-print for our Go-based workflow libarary&#xA;&lt;a href=&#34;http://scipipe.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciPipe&lt;/a&gt;&#xA;, is out, with the title &lt;em&gt;&lt;a href=&#34;https://www.biorxiv.org/content/early/2018/08/01/380808&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciPipe - A&#xA;workflow library for agile development of complex and dynamic&#xA;bioinformatics&#xA;pipelines&lt;/a&gt;&#xA;,&lt;/em&gt;&#xA;co-authored by me and colleagues at &lt;a href=&#34;https://pharmb.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pharmb.io&lt;/a&gt;&#xA;:&#xA;&lt;a href=&#34;https://pharmb.io/people/dahlo/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Martin Dahlö&lt;/a&gt;&#xA;, &lt;a href=&#34;https://pharmb.io/people/jonalv/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Jonathan&#xA;Alvarsson&lt;/a&gt;&#xA; and &lt;a href=&#34;https://pharmb.io/people/olas/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ola&#xA;Spjuth&lt;/a&gt;&#xA;. Access it&#xA;&lt;a href=&#34;https://www.biorxiv.org/content/early/2018/08/01/380808&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.biorxiv.org/content/early/2018/08/01/380808&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_864.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;It has been more than three years since the first commit on the &lt;a href=&#34;https://github.com/scipipe/scipipe&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciPipe&#xA;Git repository&lt;/a&gt;&#xA; in March, 2015, and&#xA;development has been going in various degrees of intensity during these&#xA;years, often besides other duties at &lt;a href=&#34;https://pharmb.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pharmb.io&lt;/a&gt;&#xA; and&#xA;&lt;a href=&#34;https://nbis.se/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;NBIS&lt;/a&gt;&#xA;, and often at a lower pace than I might have&#xA;wished. On the other hand, this might also have helped to let design&#xA;ideas mature well before implementing them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Make your commandline tool workflow friendly</title>
      <link>https://livesys.se/posts/make-your-commandline-tool-workflow-friendly/</link>
      <pubDate>Fri, 25 May 2018 23:59:00 +0200</pubDate>
      <guid>https://livesys.se/posts/make-your-commandline-tool-workflow-friendly/</guid>
      <description>&lt;p&gt;&lt;em&gt;Update (May 2019):&lt;/em&gt; A paper incorporating the below considerations is published:&lt;/p&gt;&#xA;&lt;p&gt;Björn A Grüning, Samuel Lampa, Marc Vaudel, Daniel Blankenberg, &amp;ldquo;&lt;a href=&#34;https://doi.org/10.1093/gigascience/giz054&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Software&#xA;engineering for scientific big data&#xA;analysis&lt;/a&gt;&#xA;&amp;rdquo; GigaScience, Volume 8,&#xA;Issue 5, May 2019, giz054, &lt;a href=&#34;https://doi.org/10.1093/gigascience/giz054&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://doi.org/10.1093/gigascience/giz054&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;There are a number of pitfalls that can make a commandline program&#xA;really hard to integrate into a workflow (or &amp;ldquo;pipeline&amp;rdquo;) framework.&#xA;The reason is that many workflow tools use output file paths to keep&#xA;track of the state of the tasks producing these files. This is done for&#xA;example to know which tasks are finished and can be skipped upon a&#xA;re-run, and which are not.&lt;/p&gt;</description>
    </item>
    <item>
      <title>To make computational lab note-taking happen, make the journal into a todo-list (a &#34;Todournal&#34;)</title>
      <link>https://livesys.se/posts/todournal/</link>
      <pubDate>Fri, 13 Apr 2018 16:15:00 +0200</pubDate>
      <guid>https://livesys.se/posts/todournal/</guid>
      <description>&lt;h2 id=&#34;good-lab-note-taking-is-hard&#34;&gt;Good lab note-taking is hard&lt;/h2&gt;&#xA;&lt;p&gt;Good note-taking is in my opinion as important for computational&#xA;research as for wet lab research. For computational research it is much&#xA;easier though to forget doing it, since you might not have a physical&#xA;notebook lying on your desk staring at you, but rather might need to&#xA;open a specific software or file, to write the notes. I think this is&#xA;one reason why lab note taking seems to happen a lot less among&#xA;computational scientists than among wet lab ditto.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Semantic Web ❤ Data Science? My talk at Linked Data Sweden 2018</title>
      <link>https://livesys.se/posts/semantic-web-data-science-my-talk-at-linked-data-sweden-2018/</link>
      <pubDate>Tue, 10 Apr 2018 11:40:00 +0200</pubDate>
      <guid>https://livesys.se/posts/semantic-web-data-science-my-talk-at-linked-data-sweden-2018/</guid>
      <description>&lt;p&gt;During the last months, I have had the pleasure work together with&#xA;&lt;a href=&#34;https://twitter.com/matthiaspalmer&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Matthias Palmér&lt;/a&gt;&#xA; (&lt;a href=&#34;http://metasolutions.se/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MetaSolutions&#xA;AB&lt;/a&gt;&#xA;) and &lt;a href=&#34;https://twitter.com/DataDrivenDorea&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Fernanda&#xA;Dórea&lt;/a&gt;&#xA; (&lt;a href=&#34;http://www.sva.se/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;National Veterinary&#xA;Institute&lt;/a&gt;&#xA;), to prepare for and organize this&#xA;year&amp;rsquo;s version of the annual &lt;a href=&#34;http://lankadedata.se/LDSV/2018/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Linked Data Sweden&#xA;event&lt;/a&gt;&#xA;, which this year was held in&#xA;Uppsala hosted by the &lt;a href=&#34;https://www.scilifelab.se/data/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciLifeLab Data&#xA;Centre&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&lt;p&gt;Thanks to engaged speakers and attendees, it turned into an interesting&#xA;day with great discussions, new contacts, and a lot of new impressions&#xA;and insights.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parsing DrugBank XML (or any large XML file) in streaming mode in Go</title>
      <link>https://livesys.se/posts/parsing-drugbank-xml-or-any-large-xml-file-in-streaming-mode-in-go/</link>
      <pubDate>Thu, 15 Mar 2018 15:19:00 +0100</pubDate>
      <guid>https://livesys.se/posts/parsing-drugbank-xml-or-any-large-xml-file-in-streaming-mode-in-go/</guid>
      <description>&lt;p&gt;I had a problem in which I thought I needed to parse the full&#xA;&lt;a href=&#34;https://www.drugbank.ca&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;DrugBank&lt;/a&gt;&#xA; dataset, which comes as a &lt;a href=&#34;https://www.drugbank.ca/releases/5-0-11/downloads/all-full-database&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;(670MB) XML file&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;(For open access papers describing DrugBank, see: &lt;!-- raw HTML omitted --&gt;[1]&lt;!-- raw HTML omitted --&gt;, &lt;!-- raw HTML omitted --&gt;[2]&lt;!-- raw HTML omitted --&gt;, &lt;!-- raw HTML omitted --&gt;[3]&lt;!-- raw HTML omitted --&gt; and &lt;!-- raw HTML omitted --&gt;[4]&lt;!-- raw HTML omitted --&gt;).&lt;!-- raw HTML omitted --&gt; It turned out what I needed was available as CSV&#xA;files under &amp;ldquo;&lt;a href=&#34;https://www.drugbank.ca/releases/latest#structures&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Structure External&#xA;Links&lt;/a&gt;&#xA;&amp;rdquo;. There is probably&#xA;still some other uses of this approach though, as the XML version of DrugBank&#xA;seems to contain a lot more information in a single format. And in any case,&#xA;this forced me to figure out how to parse large XML files in a streaming&#xA;fashion in Go, as older tools like&#xA;&lt;a href=&#34;http://xmlstar.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;XMLStarlet&lt;/a&gt;&#xA; chokes for many minutes upon the&#xA;DrugBank file (trying to read it all into memory?), killing any attempt at an&#xA;iterative development cycle. And, it turns out Go&amp;rsquo;s support for streaming XML&#xA;parsing is just great!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Equation-centric dataflow programming in Go</title>
      <link>https://livesys.se/posts/equation-centric-dataflow-programming-in-go/</link>
      <pubDate>Wed, 27 Dec 2017 14:05:00 +0100</pubDate>
      <guid>https://livesys.se/posts/equation-centric-dataflow-programming-in-go/</guid>
      <description>&lt;h2 id=&#34;mathematical-notation-and-dataflow-programming&#34;&gt;Mathematical notation and dataflow programming&lt;/h2&gt;&#xA;&lt;p&gt;Even though computations done on computers are very often based on some&#xA;type of math, it is striking that the notation used in math to express&#xA;equations and relations is not always very readily converted into&#xA;programming code. Outside of purely &lt;a href=&#34;https://en.wikipedia.org/wiki/Symbolic_programming&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;symbolic&#xA;programming&lt;/a&gt;&#xA;&#xA;languages like &lt;a href=&#34;http://www.sagemath.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;sage math&lt;/a&gt;&#xA; or the&#xA;(proprietary) &lt;a href=&#34;https://www.wolfram.com/language&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Wolfram language&lt;/a&gt;&#xA;,&#xA;there seem to always be quite a divide between the mathematical notation&#xA;and the numerical implementation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What is a scientific (batch) workflow?</title>
      <link>https://livesys.se/posts/what-is-a-scientific-batch-workflow/</link>
      <pubDate>Thu, 07 Dec 2017 00:57:00 +0100</pubDate>
      <guid>https://livesys.se/posts/what-is-a-scientific-batch-workflow/</guid>
      <description>&lt;h2 id=&#34;dependency-graph-in-luigi---a-dag-representing-tasks-not-processes-or-workflow-stepsdependencygraphnew_without_shadow-1pngdependencygraphnew_without_shadow-1png&#34;&gt;&lt;a href=&#34;dependencygraphnew_without_shadow-1.png&#34;&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;dependencygraphnew_without_shadow-1.png&#34; alt=&#34;Dependency graph in Luigi - A DAG representing tasks (not processes or workflow steps)&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;workflows-and-dags---confusion-about-the-concepts&#34;&gt;Workflows and DAGs - Confusion about the concepts&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/joergenbr&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Jörgen Brandt&lt;/a&gt;&#xA; &lt;a href=&#34;https://twitter.com/joergenbr/status/907626987333746688&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tweeted a&#xA;comment&lt;/a&gt;&#xA; that&#xA;got me thinking again on something I&amp;rsquo;ve pondered a lot lately:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;A workflow is a DAG.&amp;rdquo; is really a weak definition. That&amp;rsquo;s like&#xA;saying &amp;ldquo;A love letter is a sequence of characters.&amp;rdquo; representation ≠&#xA;meaning&lt;/p&gt;&#xA;&lt;p&gt;&amp;ndash; &lt;a href=&#34;https://twitter.com/joergenbr/status/907626987333746688&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;@joergenbr&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Jörgen makes a good point. A &lt;a href=&#34;https://en.wikipedia.org/wiki/Directed_acyclic_graph&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Directed Acyclic Graph&#xA;(DAG)&lt;/a&gt;&#xA; does not by&#xA;any means capture the full semantic content included in a computational&#xA;workflow. I think &lt;a href=&#34;http://www.worldscientific.com/doi/pdf/10.1142/9789814508728_0001&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Werner Gitt&amp;rsquo;s &lt;em&gt;universal information&lt;/em&gt;&#xA;model&lt;/a&gt;&#xA;&#xA;is highly relevant here, suggesting that information comes in at least&#xA;five abstraction layers: statistics (signals, number of symbols), syntax&#xA;(set of symbols, grammar), semantics (meaning), pragmatics (action),&#xA;apobetics (purpose, result). A DAG seems to cover the syntax and&#xA;semantics layers, leaving out three layers out of five.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go is growing in bioinformatics workflow tools</title>
      <link>https://livesys.se/posts/golang-growing-in-bioinformatics-workflows/</link>
      <pubDate>Fri, 10 Nov 2017 12:54:00 +0100</pubDate>
      <guid>https://livesys.se/posts/golang-growing-in-bioinformatics-workflows/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;gopher_thinking_workflows.png&#34; alt=&#34;Gopher thinking with logos of different workflow tools in the air&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;TL;DR: We wrote a post on gopherdata.io, about the growing ecosystem of&#xA;Go-based workflow tools in bioinformatics. &lt;a href=&#34;https://gopherdata.io/post/more_go_based_workflow_tools_in_bioinformatics/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Go read it&#xA;here&lt;/a&gt;&#xA;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It is interesting to note how Google&amp;rsquo;s &lt;a href=&#34;https://golang.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Go programming&#xA;language&lt;/a&gt;&#xA; seems to increase in popularity in&#xA;bioinformatics.&lt;/p&gt;&#xA;&lt;p&gt;Just to give a sample of some of the Go based bioinformatics tools I&amp;rsquo;ve&#xA;stumbled upon, there is since a few years back, the &lt;a href=&#34;https://github.com/biogo/biogo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;biogo&#xA;library&lt;/a&gt;&#xA;, providing common functionality&#xA;for bioinformatics tasks. It was recently reviewed in two great blog&#xA;posts (&lt;a href=&#34;https://medium.com/@boti_ka/a-gentle-introduction-to-b%C3%ADogo-part-i-65dbd40e31d4&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;part&#xA;I&lt;/a&gt;&#xA;,&#xA;&lt;a href=&#34;https://medium.com/@boti_ka/a-gentle-introduction-to-b%C3%ADogo-part-ii-1f0df1cf72f0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;part&#xA;II&lt;/a&gt;&#xA;).&#xA;Further, Brent Pedersen also wrote a little collection of Go based&#xA;bioinfo tools, compiled down into a single static binary, called&#xA;&lt;a href=&#34;https://github.com/brentp/goleft&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;goleft&lt;/a&gt;&#xA;, and finally, I there is the&#xA;&lt;a href=&#34;https://github.com/exascience/elprep&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;elprep tool&lt;/a&gt;&#xA;, used to prepare&#xA;.sam/.bam/.cram files for variant calling, which was published in a&#xA;&lt;a href=&#34;http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0132868&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PLoS one&#xA;paper&lt;/a&gt;&#xA;.&#xA;Just a few examples.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The frustrating state of note taking tools</title>
      <link>https://livesys.se/posts/my-frustration-with-the-state-of-note-taking-tools/</link>
      <pubDate>Tue, 07 Nov 2017 18:45:00 +0100</pubDate>
      <guid>https://livesys.se/posts/my-frustration-with-the-state-of-note-taking-tools/</guid>
      <description>&lt;p&gt;One year left to the dissertation (we hope) and now turning from mostly&#xA;software development into more of data analysis and needing to read up quite a&#xA;pile of books and papers on my actual topic, pharmaceutical bioinformatics.&#xA;With this background, I&amp;rsquo;m feel forced to ponder ways to improving my note&#xA;taking workflow.&lt;!-- raw HTML omitted --&gt; I&amp;rsquo;m already quite happy with the way of taking notes&#xA;I&amp;rsquo;ve settled on, using a lot of drawings and often iterating over the same&#xA;notes multiple times to ask questions, fill in details, and figure out&#xA;connections. The main remaining question for me is instead about tools.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning how to learn</title>
      <link>https://livesys.se/posts/how-to-learn/</link>
      <pubDate>Tue, 31 Oct 2017 10:38:00 +0100</pubDate>
      <guid>https://livesys.se/posts/how-to-learn/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/18693655-a-mind-for-numbers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;amfn.jpg&#34; alt=&#34;&#34;  class=&#34;align_right&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/a&gt;&#xA;&#xA;I&amp;rsquo;m reading &lt;a href=&#34;https://www.goodreads.com/book/show/18693655-a-mind-for-numbers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;A mind for&#xA;numbers&lt;/a&gt;&#xA;, by&#xA;Barbara Oakley. Firstly, it is a very interesting book, but the main lesson&#xA;I&amp;rsquo;ve already learned from this book seems so paramount that I have to write it&#xA;down, so I don&amp;rsquo;t forget it (some meta-connotations in that statement ;) ). I&#xA;found the book through Barbara&amp;rsquo;s coursera course &amp;ldquo;&lt;a href=&#34;https://www.coursera.org/learn/learning-how-to-learn/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Learning how to&#xA;Learn&lt;/a&gt;&#xA;&amp;rdquo;, and to me it&#xA;seems learning in general is the topic of the book too, more than numbers&#xA;specifically - but I still have to read it through, so stay tuned. (Went for&#xA;the book instead as I never found time to follow this type of online courses).&lt;/p&gt;</description>
    </item>
    <item>
      <title>On Provenance Reports in Scientific Workflows</title>
      <link>https://livesys.se/posts/provenance-reports-in-scientific-workflows/</link>
      <pubDate>Thu, 19 Oct 2017 11:44:00 +0200</pubDate>
      <guid>https://livesys.se/posts/provenance-reports-in-scientific-workflows/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;One of the more important tasks for a scientific workflow is to keep&#xA;track of so called &amp;ldquo;provenance information&amp;rdquo; about its data outputs -&#xA;information about how each data file was created. This is important so&#xA;other researchers can easily replicate the study (re-run it with the&#xA;same software and tools). It should also help for anyone wanting to&#xA;reproduce it (re-run the same study design, possibly with other software&#xA;and tools).&lt;/p&gt;</description>
    </item>
    <item>
      <title>(Almost) ranging over multiple Go channels simultaneously</title>
      <link>https://livesys.se/posts/range-over-multiple-go-channels/</link>
      <pubDate>Thu, 05 Oct 2017 10:23:00 +0200</pubDate>
      <guid>https://livesys.se/posts/range-over-multiple-go-channels/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;Thus, optimally, one would want to use Go&amp;rsquo;s handy &lt;strong&gt;range&lt;/strong&gt; keyword for&#xA;looping over multiple channels, since &lt;strong&gt;range&lt;/strong&gt; takes care of closing&#xA;the for-loop at the right time (when the inbound channel is closed). So&#xA;something like this (&lt;strong&gt;N.B:&lt;/strong&gt; non-working code!):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a90d91&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#000&#34;&gt;b&lt;/span&gt;, &lt;span style=&#34;color:#000&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a90d91&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;chA&lt;/span&gt;, &lt;span style=&#34;color:#000&#34;&gt;chB&lt;/span&gt;, &lt;span style=&#34;color:#000&#34;&gt;chC&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;doSomething&lt;/span&gt;(&lt;span style=&#34;color:#000&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#000&#34;&gt;b&lt;/span&gt;, &lt;span style=&#34;color:#000&#34;&gt;c&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Unfortunately this is not possible, and probably for good reason (how&#xA;would it know whether to close the loop when the first, or all of the&#xA;channels are closed? etc).&lt;/p&gt;</description>
    </item>
    <item>
      <title>First production run with SciPipe - A Go-based scientific workflow tool</title>
      <link>https://livesys.se/posts/first-production-workflow-run-with-scipipe/</link>
      <pubDate>Thu, 28 Sep 2017 19:32:00 +0200</pubDate>
      <guid>https://livesys.se/posts/first-production-workflow-run-with-scipipe/</guid>
      <description>&lt;p&gt;Today marked the day when we ran the very first production workflow with&#xA;&lt;a href=&#34;http://scipipe.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciPipe&lt;/a&gt;&#xA;, the &lt;a href=&#34;https://golang.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Go&lt;/a&gt;&#xA;-based&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Scientific_workflow_system&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;scientific workflow&#xA;tool&lt;/a&gt;&#xA; we&amp;rsquo;ve&#xA;been working on over the last couple of years. Yay! :)&lt;/p&gt;&#xA;&lt;p&gt;This is how it looked (no fancy GUI or such yet, sorry):&lt;/p&gt;&#xA;&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;terminal_411.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;The first result we got in this very very first job was a list of counts&#xA;of ligands (chemical compounds) in the &lt;a href=&#34;https://jcheminf.springeropen.com/articles/10.1186/s13321-017-0203-5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ExcapeDB&#xA;dataset&lt;/a&gt;&#xA;&#xA;(&lt;a href=&#34;https://zenodo.org/record/173258&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;download here&lt;/a&gt;&#xA;) interacting with the&#xA;44 protein/gene targets &lt;a href=&#34;http://dx.doi.org/10.1038/nrd3845&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;identified by Bowes et&#xA;al&lt;/a&gt;&#xA; as a good baseline set for&#xA;identifying hazardous side-effects effects in the body (that is, any&#xA;chemical compounds binding these proteins, will never become an approved&#xA;drug).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Compiling RDFHDT C&#43;&#43; tools on UPPMAX (RHEL/CentOS 7)</title>
      <link>https://livesys.se/posts/compiling-rdfhdt-c-tools-on-uppmax-rhel-centos-7/</link>
      <pubDate>Wed, 13 Sep 2017 18:04:00 +0200</pubDate>
      <guid>https://livesys.se/posts/compiling-rdfhdt-c-tools-on-uppmax-rhel-centos-7/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;At &lt;a href=&#34;http://pharmb.io&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pharmb.io&lt;/a&gt;&#xA; we are researching how to use semantic&#xA;technologies to push the boundaries for what can be done with&#xA;intelligent data processing, often of large datasets (see e.g. our&#xA;&lt;a href=&#34;http://dx.doi.org/10.1186/2041-1480-2-S1-S6&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;paper on linking RDF to cheminformatics and&#xA;proteomics&lt;/a&gt;&#xA;, and &lt;a href=&#34;http://dx.doi.org/10.1186/s13326-017-0136-y&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;our work&#xA;on the RDFIO software&#xA;suite&lt;/a&gt;&#xA;). Thus, for us,&#xA;RDFHDT opens new possibilites. As we are heavy users of the &lt;a href=&#34;http://www.uppmax.uu.se&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;UPPMAX HPC&#xA;center&lt;/a&gt;&#xA; for our computations, and so, we need&#xA;to have the HDT tools available there. This post will outline the steps&#xA;to compile the &lt;a href=&#34;https://github.com/rdfhdt/hdt-cpp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;C++ HDT commandline tool&#xA;suite&lt;/a&gt;&#xA; from source.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New paper on RDFIO for interoperable biomedical data management in Semantic MediaWiki</title>
      <link>https://livesys.se/posts/new-paper-on-rdfio-for-interoperable-biomedical-datamanagement-in-semantic-mediawiki/</link>
      <pubDate>Mon, 11 Sep 2017 15:57:00 +0200</pubDate>
      <guid>https://livesys.se/posts/new-paper-on-rdfio-for-interoperable-biomedical-datamanagement-in-semantic-mediawiki/</guid>
      <description>&lt;p&gt;As my collaborator and M.Sc. supervisor &lt;a href=&#34;https://twitter.com/egonwillighagen&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Egon&#xA;Willighagen&lt;/a&gt;&#xA; already&#xA;&lt;a href=&#34;http://chem-bla-ics.blogspot.nl/2017/09/new-paper-rdfio-extending-semantic.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;blogged&lt;/a&gt;&#xA;,&#xA;we just released a paper titled: &amp;ldquo;&lt;a href=&#34;https://jbiomedsem.biomedcentral.com/articles/10.1186/s13326-017-0136-y&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RDFIO: extending Semantic MediaWiki&#xA;for interoperable biomedical data&#xA;management&lt;/a&gt;&#xA;&amp;rdquo;,&#xA;with uses cases from Egon and &lt;a href=&#34;https://twitter.com/pkohonen&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pekka&#xA;Kohonen&lt;/a&gt;&#xA;, coding help from &lt;a href=&#34;https://twitter.com/ali_king&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ali&#xA;King&lt;/a&gt;&#xA; and project supervision from &lt;a href=&#34;https://twitter.com/vrandezo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Denny&#xA;Vrandečić&lt;/a&gt;&#xA;, &lt;a href=&#34;https://www.linkedin.com/in/roland-grafstr%c3%b6m-a86b3b2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Roland&#xA;Grafström&lt;/a&gt;&#xA; and&#xA;&lt;a href=&#34;https://twitter.com/ola_spjuth&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ola Spjuth&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&lt;p&gt;See the picture below (from the paper) for an overview of all the newly&#xA;developed functionality (drawn in black), as related to the previously&#xA;existing functionality (drawn in grey):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notes on launching kubernetes jobs from the Go API</title>
      <link>https://livesys.se/posts/launching-kubernetes-jobs-from-the-go-api-notes-from-a-beginner/</link>
      <pubDate>Wed, 15 Feb 2017 00:01:00 +0100</pubDate>
      <guid>https://livesys.se/posts/launching-kubernetes-jobs-from-the-go-api-notes-from-a-beginner/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is &lt;a href=&#34;https://medium.com/@saml/launching-kubernetes-jobs-from-the-go-api-notes-from-a-beginner-2b34fbc502c0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;also published on&#xA;medium&lt;/a&gt;&#xA;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;My current work at &lt;a href=&#34;http://pharmb.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pharmb.io&lt;/a&gt;&#xA; entails adding&#xA;&lt;a href=&#34;http://kubernetes.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;kubernetes&lt;/a&gt;&#xA; support to my light-weight Go-based&#xA;scientific workflow engine,&#xA;&lt;a href=&#34;https://github.com/scipipe/scipipe&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;scipipe&lt;/a&gt;&#xA; (kubernetes, or &lt;em&gt;k8s&lt;/em&gt; for&#xA;short, is Google&amp;rsquo;s open source project for orchestrating container based&#xA;compute clusters), which should take scipipe from a simple &amp;ldquo;run it on&#xA;your laptop&amp;rdquo; workflow system with HPC support still in the work, to&#xA;something that can power scientific workflows on any set of networked&#xA;computers that can run kubernetes, which is quite a few (AWS, GCE,&#xA;Azure, your Raspberry Phi cluster etc etc).&lt;/p&gt;</description>
    </item>
    <item>
      <title>SMWCon Fall 2016 - My talk on large RDF imports</title>
      <link>https://livesys.se/posts/smwcon-fall-2016/</link>
      <pubDate>Fri, 07 Oct 2016 11:50:00 +0200</pubDate>
      <guid>https://livesys.se/posts/smwcon-fall-2016/</guid>
      <description>&lt;p&gt;I was invited to give a talk at &lt;a href=&#34;https://www.semantic-mediawiki.org/wiki/SMWCon_Fall_2016/Conference_Days&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Semantic MediaWiki (SMW)&#xA;conference&lt;/a&gt;&#xA;&#xA;in Frankfurt last week, on our work on enabling import of RDF datasets into&#xA;&lt;a href=&#34;https://www.semantic-mediawiki.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SMW&lt;/a&gt;&#xA;.  I have presented at SMWCon before&#xA;as well (2011: &lt;a href=&#34;http://saml.rilspace.com/smwcon-fall-2011-impressions&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;blog&lt;/a&gt;&#xA;,&#xA;&lt;a href=&#34;http://www.slideshare.net/SamuelLampa/hooking-up-semantic-mediawiki-with-external-tools-via-sparql&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;slides&lt;/a&gt;&#xA;&#xA;&lt;a href=&#34;https://www.youtube.com/watch?v=3US0G5dDynM&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;video&lt;/a&gt;&#xA;, 2013:&#xA;&lt;a href=&#34;http://www.slideshare.net/SamuelLampa/20131030-smw-con&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;slides&lt;/a&gt;&#xA;), so it was&#xA;nice to re-connect with some old friends, and to get up to date about how SMW&#xA;is developing, as well as share about our own contributions.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Note:&lt;/strong&gt; See also the &lt;a href=&#34;https://storify.com/smllmp/semantic-mediawiki-conference-fall-2016&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SMWCon 2016 twitter&#xA;storyboard&lt;/a&gt;&#xA;&#xA;for a nice overview of the event.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-talk---on-rdf-import-in-semantic-mediawiki&#34;&gt;The Talk - on RDF Import in Semantic MediaWiki&lt;/h2&gt;&#xA;&lt;p&gt;My talk this year was titled &amp;ldquo;Batch import of large RDF datasets using&#xA;RDFIO or the new rdf2smw tool&amp;rdquo;. More info can be found on the&#xA;&lt;a href=&#34;https://www.semantic-mediawiki.org/wiki/SMWCon_Fall_2016/Batch_import_of_large_RDF_datasets_using_RDFIO_or_the_new_rdf2smw_tool&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;talk page&lt;/a&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tutorial: Luigi for Scientific Workflows</title>
      <link>https://livesys.se/posts/luigi-tutorial/</link>
      <pubDate>Tue, 21 Jun 2016 13:49:00 +0200</pubDate>
      <guid>https://livesys.se/posts/luigi-tutorial/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a Luigi tutorial I held at the &lt;a href=&#34;http://uppnex.se/events/eInfraMPS2015/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;e-Infrastructures for Massively&#xA;parallel sequencing&lt;/a&gt;&#xA; workshop&#xA;(&lt;a href=&#34;https://www.youtube.com/channel/UCfLDx5VYn25QIZLmtybvdeQ/videos&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Video&#xA;archive&lt;/a&gt;&#xA;)&#xA;at &lt;a href=&#34;http://scilifelab.se/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciLifeLab&lt;/a&gt;&#xA; Uppsala in January 2015, moved&#xA;here for future reference.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;luigi_screenshotpng&#34;&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;luigi_screenshot.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;what-is-luigi&#34;&gt;What is Luigi?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/spotify/luigi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Luigi&lt;/a&gt;&#xA; is a batch workflow system&#xA;written in Python and developed by &lt;a href=&#34;https://erikbern.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Erik&#xA;Bernhardson&lt;/a&gt;&#xA; and others at&#xA;&lt;a href=&#34;http://spotify.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Spotify&lt;/a&gt;&#xA;, where it is used to compute&#xA;machine-learning powered music recommendation lists, top lists etc.&lt;/p&gt;&#xA;&lt;p&gt;Luigi is one of not-too-many batch workflow systems that supports&#xA;running both normal command line jobs and&#xA;&lt;a href=&#34;http://hadoop.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Hadoop&lt;/a&gt;&#xA; jobs in the same (in this tutorial,&#xA;we will focus only on the command line part).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Combining the best of Go, D and Rust?</title>
      <link>https://livesys.se/posts/the-best-of-go-d-and-rust/</link>
      <pubDate>Sat, 11 Jun 2016 14:24:00 +0200</pubDate>
      <guid>https://livesys.se/posts/the-best-of-go-d-and-rust/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been following the development of &lt;a href=&#34;http://dlang.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;D&lt;/a&gt;&#xA;,&#xA;&lt;a href=&#34;http://golang.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Go&lt;/a&gt;&#xA; and &lt;a href=&#34;https://www.rust-lang.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Rust&lt;/a&gt;&#xA; (and also&#xA;&lt;a href=&#34;http://www.freepascal.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FreePascal&lt;/a&gt;&#xA; for &lt;a href=&#34;https://github.com/NBISweden/mdc-file-export&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;some use&#xA;cases&lt;/a&gt;&#xA;) for some years&#xA;(&lt;a href=&#34;http://saml.rilspace.org/moar-languagez-gc-content-in-python-d-fpc-c-and-c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;been into some benchmarking for bioinfo&#xA;tasks&lt;/a&gt;&#xA;),&#xA;and now we finally have three (four, with fpc) stable statically&#xA;compiled languages with some momentum behind them, meaning they all are&#xA;past 1.0.&lt;/p&gt;&#xA;&lt;p&gt;While I have went with Go for &lt;a href=&#34;http://scipipe.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;current projects&lt;/a&gt;&#xA;, I&#xA;still have a hard time &amp;ldquo;totally falling in love&amp;rdquo; with any single of&#xA;these languages. They all fulfill different subsets of my wishlist for&#xA;an optimal compiled data munging language.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Time-boxing and a unified trello board = productivity</title>
      <link>https://livesys.se/posts/time-boxing-and-unified-trello-board/</link>
      <pubDate>Fri, 26 Feb 2016 12:40:00 +0100</pubDate>
      <guid>https://livesys.se/posts/time-boxing-and-unified-trello-board/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_039.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Figure:&lt;/strong&gt; Sketchy screenshot of how my current board looks. Notice&#xA;especially the &amp;ldquo;Now&amp;rdquo; stack, marked in yellow, where you are only&#xA;allowed to put &lt;strong&gt;one single&lt;/strong&gt; card.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I used to have a very hard time getting an overview of my current work,&#xA;and prioritizing and concentrating on any single task for too long. I&#xA;always felt there might be something else that might be more important&#xA;than what I were currently doing. And in fact, how would I know if I&#xA;didn&amp;rsquo;t have the overview?&lt;/p&gt;</description>
    </item>
    <item>
      <title>The unexpected convenience of JSON on the commandline</title>
      <link>https://livesys.se/posts/the-unexpected-usefullness-of-json-on-the-commandline/</link>
      <pubDate>Tue, 08 Dec 2015 07:10:00 +0100</pubDate>
      <guid>https://livesys.se/posts/the-unexpected-usefullness-of-json-on-the-commandline/</guid>
      <description>&lt;p&gt;I was working with a migration from &lt;a href=&#34;http://drupal.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;drupal&lt;/a&gt;&#xA; to&#xA;&lt;a href=&#34;http://processwire.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;processwire&lt;/a&gt;&#xA; CMS:es, where I wanted to be able&#xA;to pipe data, including the body field with HTML formatting and all,&#xA;through multiple processing steps in a flexible manner. I&amp;rsquo;d start with&#xA;an extraction SQL query, through a few components to replace and massage&#xA;the data, and finally over to an import command using processwire&amp;rsquo;s&#xA;&lt;a href=&#34;http://wireshell.pw&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;wireshell tool&lt;/a&gt;&#xA;. So, basically I needed a flexible&#xA;format for structured data that could be sent as one &amp;ldquo;data object&amp;rdquo; per&#xA;line, to work nicely with linux commandline tools like grep, sed and&#xA;awk.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The matrix transformation as a model for declarative atomic data flow operations</title>
      <link>https://livesys.se/posts/matrix-transformation-as-model-for-data-flow-operations/</link>
      <pubDate>Mon, 09 Nov 2015 19:45:00 +0100</pubDate>
      <guid>https://livesys.se/posts/matrix-transformation-as-model-for-data-flow-operations/</guid>
      <description>&lt;p&gt;&lt;em&gt;After just &lt;a href=&#34;https://news.ycombinator.com/item?id=10532957&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;reading on Hacker&#xA;News&lt;/a&gt;&#xA; about Google&amp;rsquo;s&#xA;newly released &lt;a href=&#34;http://tensorflow.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;TensorFlow library&lt;/a&gt;&#xA;, for deep&#xA;learning based on tensors and data flow, I realized I wrote in a draft&#xA;post back in 2013 that:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;ldquo;What if one could have a fully declarative &amp;ldquo;matrix language&amp;rdquo; in&#xA;which all data transformations ever needed could be declaratively&#xA;defined in a way that is very easy to comprehend?&amp;rdquo;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&amp;hellip; so, I thought this is a good time to post this draft, to see&#xA;whether it spurs any further ideas. The following is an almost &amp;ldquo;as is&amp;rdquo;&#xA;copy and paste of that document from December 2013:&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wanted: Dynamic workflow scheduling</title>
      <link>https://livesys.se/posts/dynamic-workflow-scheduling/</link>
      <pubDate>Mon, 26 Oct 2015 21:23:00 +0100</pubDate>
      <guid>https://livesys.se/posts/dynamic-workflow-scheduling/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;scheduling_unsplash-1.jpg&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Photo credits: &lt;a href=&#34;https://unsplash.com/whale&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Matthew Smith&lt;/a&gt;&#xA; /&#xA;&lt;a href=&#34;https://unsplash.com/photos/OiiThC8Wf68&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Unsplash&lt;/a&gt;&#xA;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;https://jcheminf.springeropen.com/articles/10.1186/s13321-016-0179-6&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;our work on automating machine learning computations in&#xA;cheminformatics with scientific workflow&#xA;tools&lt;/a&gt;&#xA;,&#xA;we have came to realize something; &lt;em&gt;Dynamic scheduling in scientific&#xA;workflow tools is very important and sometimes badly needed.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;What I mean is that &lt;em&gt;new tasks should be able to be scheduled during the&#xA;execution of a workflow, not just in its scheduling phase.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;What is striking is that far from all workflow tools allow this. Many&#xA;tools completely separate the execution into two stages:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to be productive in vim in 30 minutes</title>
      <link>https://livesys.se/posts/how-to-be-productive-in-vim-in-30-minutes/</link>
      <pubDate>Tue, 15 Sep 2015 12:21:00 +0200</pubDate>
      <guid>https://livesys.se/posts/how-to-be-productive-in-vim-in-30-minutes/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_333-1.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I had heard a lot of people say vim is very hard to learn, and got the&#xA;impression that it will take a great investment to switch to using it.&lt;/p&gt;&#xA;&lt;p&gt;While I have came to understand that they are right in that there is a&#xA;lot of things to invest in to get really great at using vim, that will&#xA;really pay back, I have also found out one thing that I see almost&#xA;no-one mentioning:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to compile vim for use with pyenv and vim-pyenv</title>
      <link>https://livesys.se/posts/how-to-compile-vim-for-use-with-pyenv-and-vim-pyenv/</link>
      <pubDate>Thu, 20 Aug 2015 08:05:00 +0200</pubDate>
      <guid>https://livesys.se/posts/how-to-compile-vim-for-use-with-pyenv-and-vim-pyenv/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;This manifested itself in a bunch of error message from the python&#xA;module in vim, ending with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;AttributeError&lt;/span&gt;: &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#39;module&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#a90d91&#34;&gt;object&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;has&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;no&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;attribute&lt;/span&gt; &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#39;vars&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I first thought it was an error in vim-pyenv and &lt;a href=&#34;https://github.com/lambdalisue/vim-pyenv/issues/14&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;reported&#xA;it&lt;/a&gt;&#xA; (see that issue&#xA;for more in-depth details). In summary it turns out that older versions&#xA;of VIM indeed lack some attributes in its python module, so I figured I&#xA;had to compile my own version, below are just my notes about how to do&#xA;this, for future reference:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I would like to write Go programs</title>
      <link>https://livesys.se/posts/how-i-would-like-to-write-golang/</link>
      <pubDate>Sat, 18 Jul 2015 02:34:00 +0200</pubDate>
      <guid>https://livesys.se/posts/how-i-would-like-to-write-golang/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_301.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Some time ago I got a &lt;a href=&#34;http://blog.gopheracademy.com/composable-pipelines-pattern&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;post published on&#xA;GopherAcademy&lt;/a&gt;&#xA;,&#xA;outlining in detail how I think a &lt;a href=&#34;http://www.jpaulmorrison.com/fbp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;flow-based&#xA;programming&lt;/a&gt;&#xA; inspired syntax can&#xA;strongly help to create clearer, easier-to-maintain, and more&#xA;declarative Go programs.&lt;/p&gt;&#xA;&lt;p&gt;These ideas have since became clearer, and we (&lt;a href=&#34;http://twitter.com/ola_spjuth&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ola&#xA;Spjuth&lt;/a&gt;&#xA;&amp;rsquo;s &lt;a href=&#34;http://www.farmbio.uu.se/research/researchgroups/pb/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;research group at&#xA;pharmbio&lt;/a&gt;&#xA;) have&#xA;successfully used them to make the workflow syntax for&#xA;&lt;a href=&#34;https://github.com/spotify/luigi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Luigi&lt;/a&gt;&#xA; (Spotify&amp;rsquo;s great workflow&#xA;engine by &lt;a href=&#34;http://twitter.com/fulhack&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Erik Bernhardsson&lt;/a&gt;&#xA; &amp;amp; co)&#xA;workflows easier, as implemented in the &lt;a href=&#34;https://github.com/samuell/sciluigi#readme&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciLuigi helper&#xA;library&lt;/a&gt;&#xA;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terminator as a middle-way between floating and tiling window managers</title>
      <link>https://livesys.se/posts/terminator-middle-way/</link>
      <pubDate>Fri, 17 Jul 2015 19:22:00 +0200</pubDate>
      <guid>https://livesys.se/posts/terminator-middle-way/</guid>
      <description>&lt;p&gt;I have tried hard to improve my linux desktop productivity by learning&#xA;to do as much as possible using keyboard shortcuts, aliases for terminal&#xA;commands etc etc (I even produced an &lt;a href=&#34;https://www.udemy.com/command-line-productivity/?couponCode=BlogR33ders&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;online course on linux commandline&#xA;productivity&lt;/a&gt;&#xA;).&lt;/p&gt;&#xA;&lt;p&gt;In this spirit, I naturally tried out a so called &lt;a href=&#34;https://www.udemy.com/command-line-productivity&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tiling window&#xA;manager&lt;/a&gt;&#xA; (aka tiling&#xA;wm). In short, a tiling wm organizes all open windows on the screen (or&#xA;on the current desktop) into a &amp;ldquo;tiled&amp;rdquo; grid of frames. You can then&#xA;control how these frames are created, resized, as well as switch focus&#xA;between the frames, all using keyboard shortcuts. This allows you to&#xA;avoid leaving the keyboard for moving windows around or resizing them,&#xA;before starting your work in a new program.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FBP inspired data flow syntax: The missing piece for the success of functional programming?</title>
      <link>https://livesys.se/posts/fbp-data-flow-syntax/</link>
      <pubDate>Thu, 16 Jul 2015 17:13:00 +0200</pubDate>
      <guid>https://livesys.se/posts/fbp-data-flow-syntax/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_288.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Often when I suggest people have a look at &lt;a href=&#34;http://www.jpaulmorrison.com/fbp/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Flow-based&#xA;Programming&lt;/a&gt;&#xA; (FBP) or &lt;a href=&#34;https://en.wikipedia.org/wiki/Dataflow&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Data&#xA;Flow&lt;/a&gt;&#xA; for one reason or another,&#xA;people are often put off by the strong connection between these concepts&#xA;and graphical programming. That is, the idea that programs will be&#xA;easier to understand if expressed and developed in a visual notation.&lt;/p&gt;&#xA;&lt;p&gt;This is unfortunate, since I think this is in no way the core benefit of&#xA;FBP or Data Flow, although it is a nice side-effect for those who prefer&#xA;it. For example, I personally mostly prefer working with text over a&#xA;graphical notation, for productivity reasons.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A few thoughts on organizing computational (biology) projects</title>
      <link>https://livesys.se/posts/organizing-compbio-projects/</link>
      <pubDate>Tue, 23 Jun 2015 20:32:00 +0200</pubDate>
      <guid>https://livesys.se/posts/organizing-compbio-projects/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;-bin-bash_251-1.png&#34; alt=&#34;Screenshot of paper and a directory structure in a terminal&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I read this &lt;a href=&#34;http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1000424&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;excellent&#xA;article&lt;/a&gt;&#xA;&#xA;with practical recommendations on how to organize a computational project, in&#xA;terms of directory structure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;directory-structure-matters&#34;&gt;Directory structure matters&lt;/h2&gt;&#xA;&lt;p&gt;The importance of a good directory structure seems to often be&#xA;overlooked in teaching about computational biology, but can be the&#xA;difference between a successful project, and one where every change or&#xA;re-run of some part of a workflow, will require days of manual fiddling&#xA;to get hand on the right data, in the right format, in the right place,&#xA;with the right version of the workflow, with the right parameters, and&#xA;then succeed to run it without errors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flow-based programming and Erlang style message passing - A Biology-inspired idea of how they fit together</title>
      <link>https://livesys.se/posts/flowbased-vs-erlang-message-passing/</link>
      <pubDate>Sat, 13 Jun 2015 14:25:00 +0200</pubDate>
      <guid>https://livesys.se/posts/flowbased-vs-erlang-message-passing/</guid>
      <description>&lt;p&gt;&lt;strong&gt;I think Erlang/Elixir fits great as control plane or&#xA;service-to-service messaging layer for distributing services built with&#xA;flow-based programming&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;erlang_logo.png&#34; alt=&#34;Erlang logo&#34;  class=&#34;align_right&#34; /&gt;&#xA;&lt;/p&gt;&#xA;Just&#xA;back from a one day visit to &lt;a href=&#34;http://www.erlang-factory.com/euc2015&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Erlang User&#xA;Conference&lt;/a&gt;&#xA;. I find the&#xA;&lt;a href=&#34;http://www.erlang.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Erlang&lt;/a&gt;&#xA; virtual machine fascinating. And with&#xA;the new &lt;a href=&#34;http://elixir-lang.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Elixir language&lt;/a&gt;&#xA; built on top of it to&#xA;fix some of the pain points with &lt;em&gt;Erlang the language&lt;/em&gt;, the eco-system&#xA;has got even more interesting.&lt;/p&gt;&#xA;&lt;p&gt;What I find exciting about Erlang/Elixir and its virtual machine, is its&#xA;ability to utilize multiple CPU:s on computers, and doing this across&#xA;multiple computers, in what is commonly referred to as &amp;ldquo;distributed&#xA;computing&amp;rdquo;. &lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;fbp_general_interactive_application.png&#34; alt=&#34;Flow-based programming example. Image from&#xA;http://jpaulmorrison.com/fbp/examples.html&#34;  class=&#34;align_right&#34; /&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>A cheatsheet for the iRODS rule language</title>
      <link>https://livesys.se/posts/irods-rulelang-cheatsheet/</link>
      <pubDate>Thu, 11 Jun 2015 01:55:00 +0200</pubDate>
      <guid>https://livesys.se/posts/irods-rulelang-cheatsheet/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;irods-logo.png&#34; alt=&#34;&#34;  class=&#34;align_right&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;a href=&#34;http://irods.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;iRODS&lt;/a&gt;&#xA;,&#xA;the &amp;ldquo;integrated rule oriented data system&amp;rdquo; is a super cool system for&#xA;managing datasets consisting of files, from smallish ones, to really&#xA;large ones counted in petabytes, and possibly spanning multiple&#xA;continents.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a lot to be said about iRODS (up for another blog post) but the&#xA;one most interesting feature, in my opinion, is the &lt;em&gt;rule language&lt;/em&gt;,&#xA;which allows to define custom rules and policies for how data should be&#xA;handled, totally automatically, depending on a lot of factors. For&#xA;example &amp;ldquo;if data if untouched for three months, transparently migrate&#xA;it from fast disk storage to archival tape storage&amp;rdquo;, etc etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workflow tool makers: Allow defining data flow, not just task dependencies</title>
      <link>https://livesys.se/posts/workflows-dataflow-not-task-deps/</link>
      <pubDate>Wed, 10 Jun 2015 12:03:00 +0200</pubDate>
      <guid>https://livesys.se/posts/workflows-dataflow-not-task-deps/</guid>
      <description>&lt;h3 id=&#34;upsurge-in-workflow-tools&#34;&gt;Upsurge in workflow tools&lt;/h3&gt;&#xA;&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_201.png&#34; alt=&#34;Workflow tool&#xA;logos&#34;  class=&#34;align_right&#34; /&gt;&#xA;&lt;/p&gt;&#xA;There&#xA;seem to be a little upsurge in light-weight - often python-based -&#xA;workflow tools for data pipelines in the last couple of years:&#xA;Spotify&amp;rsquo;s &lt;a href=&#34;https://github.com/spotify/luigi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Luigi&lt;/a&gt;&#xA;, OpenStack&amp;rsquo;s&#xA;&lt;a href=&#34;https://wiki.openstack.org/wiki/Mistral&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Mistral&lt;/a&gt;&#xA;, Pinterest&amp;rsquo;s&#xA;&lt;a href=&#34;https://github.com/pinterest/pinball&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pinball&lt;/a&gt;&#xA;, and recently AirBnb&amp;rsquo;s&#xA;&lt;a href=&#34;https://github.com/airbnb/airflow&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Airflow&lt;/a&gt;&#xA;, to name a few. These are&#xA;all interesting tools, and it is an interesting trend for us at&#xA;&lt;a href=&#34;http://www.farmbio.uu.se/research/researchgroups/pb/?languageId=1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pharmbio&lt;/a&gt;&#xA;,&#xA;who try to see how we can use workflow tools to automate bio- and&#xA;cheminformatics tasks on compute clusters.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Patterns for composable concurrent pipelines in Go</title>
      <link>https://livesys.se/posts/patterns-for-composable-concurrent-pipelines-in-go/</link>
      <pubDate>Mon, 01 Jun 2015 14:54:00 +0200</pubDate>
      <guid>https://livesys.se/posts/patterns-for-composable-concurrent-pipelines-in-go/</guid>
      <description>&lt;p&gt;I realize I didn&amp;rsquo;t have a link to my blog on &lt;a href=&#34;http://gopheracademy.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Gopher&#xA;Academy&lt;/a&gt;&#xA;, on patterns for compoasable&#xA;concurrent pipelines in Go(lang), so here it goes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://blog.gopheracademy.com/composable-pipelines-pattern&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;blog.gopheracademy.com/composable-pipelines-pattern&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_212.png&#34; alt=&#34;Gopher academy screenshot&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The role of simplicity in testing and automation</title>
      <link>https://livesys.se/posts/the-role-of-simplicity-in-testing-and-automation/</link>
      <pubDate>Mon, 23 Mar 2015 20:46:00 +0100</pubDate>
      <guid>https://livesys.se/posts/the-role-of-simplicity-in-testing-and-automation/</guid>
      <description>&lt;p&gt;Disclaimer: Don&amp;rsquo;t take this too seriously &amp;hellip; this is&#xA;&amp;ldquo;thinking-in-progress&amp;rdquo; :)&lt;/p&gt;&#xA;&lt;p&gt;It just struck me the other minute, how simplicity is the key theme&#xA;behind two very important areas in software development, that I&amp;rsquo;ve been&#xA;dabbling with quite a bit recently: Testing, and automation.&lt;/p&gt;&#xA;&lt;p&gt;Have you thought about how testing, in its essence, is: &lt;em&gt;Wrapping&#xA;&lt;strong&gt;complex&lt;/strong&gt; code, which you can&amp;rsquo;t mentally comprehend completely, in&#xA;&lt;strong&gt;simple&lt;/strong&gt; code, that you can mentally comprehend, at least one test at&#xA;a time.&lt;/em&gt; Because, after all, if you can&amp;rsquo;t easily comprehend your test&#xA;code, as to make sure it is correct, by simply looking at it, you will&#xA;have to &lt;em&gt;create even simpler tests that test your tests&lt;/em&gt;!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The problem with make for scientific workflows</title>
      <link>https://livesys.se/posts/the-problem-with-make-for-scientific-workflows/</link>
      <pubDate>Sat, 14 Mar 2015 20:46:00 +0100</pubDate>
      <guid>https://livesys.se/posts/the-problem-with-make-for-scientific-workflows/</guid>
      <description>&lt;h2 id=&#34;selection_131png&#34;&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_131.png&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;the-workflow-problem-solved-once-and-for-all-in-1979&#34;&gt;The workflow problem solved once and for all in 1979?&lt;/h2&gt;&#xA;&lt;p&gt;As soon as the topic of scientific workflows is brought up, there are&#xA;always a few make fans fervently insisting that the problem of workflows&#xA;is solved once and for all with &lt;a href=&#34;http://www.gnu.org/software/make/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GNU&#xA;make&lt;/a&gt;&#xA;, written first in the 70&amp;rsquo;s :)&lt;/p&gt;&#xA;&lt;p&gt;Personally I haven&amp;rsquo;t been so sure. On the one hand, I know the tool&#xA;solves a lot of problems for many people. Also, there is something very&#xA;attractive about buildling on a tool that you can be sure will be&#xA;available on more or less every unix-like operating system, for decades&#xA;to come.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic Navigation for Higher Performance</title>
      <link>https://livesys.se/posts/dynamic-navigation-for-higher-performance/</link>
      <pubDate>Wed, 11 Mar 2015 20:45:00 +0100</pubDate>
      <guid>https://livesys.se/posts/dynamic-navigation-for-higher-performance/</guid>
      <description>&lt;h3 id=&#34;improving-performance-in-delphi-bold-mda-applications-by-replacing-navigation-code-with-derived-links-in-the-model&#34;&gt;&lt;strong&gt;Improving performance in Delphi Bold MDA applications by replacing navigation code with derived links in the model&lt;/strong&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;This post on &lt;a href=&#34;http://en.wikipedia.org/wiki/Model-driven_architecture&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Model Driven&#xA;Architecture&lt;/a&gt;&#xA; in&#xA;&lt;a href=&#34;http://en.wikipedia.org/wiki/Delphi_%28programming_language%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Delphi&lt;/a&gt;&#xA;&#xA;and &lt;a href=&#34;http://en.wikipedia.org/wiki/Bold_for_Delphi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Bold&lt;/a&gt;&#xA;, by &lt;a href=&#34;https://twitter.com/rolflampa&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Rolf&#xA;Lampa&lt;/a&gt;&#xA;, has been previously &lt;a href=&#34;http://www.howtodothings.com/computers/a1043-dynamic-navigation-for-higher-performance.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;published on&#xA;howtodothings.com&lt;/a&gt;&#xA;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Modeling class structures takes some thinking, and when done the&#xA;thinking and the drawing and after that starting up using the model,&#xA;then you&amp;rsquo;ll spend awful lots of code traversing links in order to&#xA;retrieve trivial info in a given object structure. Navigating the same&#xA;sometimes complicated link-paths over and over again consumes CPU power&#xA;and it also causes much redundant code or expressions accessing the same&#xA;navigation paths over and over again. In the Bold For Delphi&#xA;Architecture you would also place redundant subscriptions from many&#xA;different locations to the same target, subscribing to the same paths&#xA;over an over again.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NGS Bioinformatics Course Day 3: New Luigi helper tool, &#34;real-world&#34; NGS pipelines</title>
      <link>https://livesys.se/posts/ngs-bioinformatics-intro-course-day-3/</link>
      <pubDate>Tue, 03 Mar 2015 20:45:00 +0100</pubDate>
      <guid>https://livesys.se/posts/ngs-bioinformatics-intro-course-day-3/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;ngsintro-coding.jpg&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;It turned out I didn&amp;rsquo;t have the time and strength to blog every day at&#xA;the NGS Bioinformatics Intro course, so here comes a wrap up with some&#xA;random notes and tidbits from the last days, including any concluding&#xA;remarks!&lt;/p&gt;&#xA;&lt;p&gt;These days we started working on a more realistic NGS pipeline, on&#xA;analysing re-sequencing samples&#xA;(&lt;a href=&#34;http://uppnex.se/twiki/pub/Courses/NgsIntro1502/Schedule/NGS_course_AJ_20150211.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;slides&lt;/a&gt;&#xA;,&#xA;&lt;a href=&#34;http://uppnex.se/twiki/do/view/Courses/NgsIntro1502/ResequencingAnalysis&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tutorial&lt;/a&gt;&#xA;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;first-some-outcome-from-this-tutorial&#34;&gt;First some outcome from this tutorial&lt;/h2&gt;&#xA;&lt;p&gt;What do I mean with &amp;ldquo;outcome&amp;rdquo;? Well, as I tried to manually copy and&#xA;paste the &lt;a href=&#34;http://uppnex.se/twiki/do/view/Courses/NgsIntro1502/ResequencingAnalysis.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;bag of hairy nasty long bash commandline strings in the&#xA;tutorial&#xA;pages&lt;/a&gt;&#xA;,&#xA;that all depended upon each other, I got so frustrated that I decided to&#xA;try to encode them in a workflow language / tool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random links from the Hadoop NGS Workshop</title>
      <link>https://livesys.se/posts/hadoop-ngs-workshop/</link>
      <pubDate>Thu, 19 Feb 2015 20:44:00 +0100</pubDate>
      <guid>https://livesys.se/posts/hadoop-ngs-workshop/</guid>
      <description>&lt;p&gt;Some random links from the &lt;a href=&#34;https://biobankcloud.com/?q=ngs-workshop&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Hadoop for Next-Gen Sequencing&#xA;workshop&lt;/a&gt;&#xA; held at KTH in Kista,&#xA;Stockholm in February 2015.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE: &lt;a href=&#34;http://www.biobankcloud.eu/?q=ngs-workshop-videos-slides&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Slides and Videos now&#xA;available&lt;/a&gt;&#xA;!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/andypetrella/spark-notebook&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Spark notebook&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Bridgewater/scala-notebook&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Scala notebook&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://amplab.cs.berkeley.edu/publication/adam-genomics-formats-and-processing-patterns-for-cloud-scale-computing/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ADAM&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By &lt;a href=&#34;http://bdgenomics.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Big Data Genomics&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/fnothaft/status/568413764376256512&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Tweet by Frank Nothaft on common workflow&#xA;def&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Part of &lt;a href=&#34;http://genomicsandhealth.org/our-work/working-groups/data-working-group&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Global Alliance for&#xA;&amp;hellip;&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Another link is &lt;a href=&#34;http://ga4gh.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ga4gh.org&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://tachyon-project.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Tachyon&lt;/a&gt;&#xA; in-memory file system&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/samuell/cuneiform&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Cuneiform&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Does support multiple outputs etc&lt;/li&gt;&#xA;&lt;li&gt;Black-box vs. White-box&lt;/li&gt;&#xA;&lt;li&gt;Workflow dependency graph can be dynamically built up while&#xA;you&amp;rsquo;re running&lt;/li&gt;&#xA;&lt;li&gt;Can specity tasks in any scripting languages, or in cuneiform&#xA;itself&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/samuell/Hi-WAY&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Hi-Way&lt;/a&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Links: Our experiences using Spotify&#39;s Luigi for Bioinformatics Workflows</title>
      <link>https://livesys.se/posts/our-experiences-using-spotifys-luigi-for-bioinformatics-workflows/</link>
      <pubDate>Thu, 12 Feb 2015 20:45:00 +0100</pubDate>
      <guid>https://livesys.se/posts/our-experiences-using-spotifys-luigi-for-bioinformatics-workflows/</guid>
      <description>&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;selection_047_luigi.png&#34; alt=&#34;Luigi Screenshot&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Fig 1: A screenshot of Luigi&amp;rsquo;s web UI, of a real-world (although&#xA;rather simple) workflow implemented in Luigi:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update May 5, 2016:&lt;/strong&gt; Most of the below material is more or less&#xA;outdated. Our latest work has resulted in the &lt;a href=&#34;https://github.com/pharmbio/sciluigi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SciLuigi helper&#xA;library&lt;/a&gt;&#xA;, which we have used in&#xA;production and will be focus of further developments.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the &lt;a href=&#34;http://bioclipse.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Bioclipse&lt;/a&gt;&#xA; / &lt;a href=&#34;http://www.farmbio.uu.se/forskning/researchgroups/pb/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pharmaceutical&#xA;Bioinformatics&#xA;group&lt;/a&gt;&#xA; at Dept of&#xA;Pharm. Biosciences att UU, we are quite heavy users of Spotify&amp;rsquo;s &lt;a href=&#34;https://github.com/spotify/luigi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Luigi&#xA;workflow library&lt;/a&gt;&#xA;, to automate&#xA;workflows, mainly doing Machine Learning heavy lifting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NGS Bioinformatics Intro Course Day 2</title>
      <link>https://livesys.se/posts/ngs-bioinformatics-intro-course-day-2/</link>
      <pubDate>Tue, 10 Feb 2015 20:44:00 +0100</pubDate>
      <guid>https://livesys.se/posts/ngs-bioinformatics-intro-course-day-2/</guid>
      <description>&lt;p&gt;Today was the second day of the &lt;a href=&#34;http://uppnex.se/twiki/do/view/Courses/NgsIntro1502/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;introductory course in NGS&#xA;bioinformatics&lt;/a&gt;&#xA;&#xA;that I&amp;rsquo;m taking as part of my PhD studies.&lt;/p&gt;&#xA;&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;20150210_132439.jpg&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;For me it started with a substantial oversleep, probably due to a&#xA;combination of an annoying cold and the ~2 hour commute from south&#xA;Stockholm to Uppsala and &lt;a href=&#34;http://www.bmc.uu.se/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;BMC&lt;/a&gt;&#xA;. Thus I missed&#xA;some really interesting&#xA;&lt;a href=&#34;http://uppnex.se/twiki/pub/Courses/NgsIntro1502/Schedule/dahlo-filetypes.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;material&lt;/a&gt;&#xA;&#xA;(and&#xA;&lt;a href=&#34;http://uppnex.se/twiki/do/view/Courses/NgsIntro1502/FileTypes&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tutorial&lt;/a&gt;&#xA;)&#xA;on file types in NGS analysis, but will make sure to go through that in&#xA;my free time during the week.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NGS Bioinformatics Intro Course Day 1</title>
      <link>https://livesys.se/posts/ngs-intro-course-day-1/</link>
      <pubDate>Mon, 09 Feb 2015 20:44:00 +0100</pubDate>
      <guid>https://livesys.se/posts/ngs-intro-course-day-1/</guid>
      <description>&lt;p&gt;Just finished day 1 of the &lt;a href=&#34;samuel.lampa.co/posts/introductory-course-in-bioinformatics-for-ngs-data/&#34;&gt;introductory course on Bioinformatics for&#xA;Next generation sequencing&#xA;data&lt;/a&gt;&#xA;&#xA;at Scilifelab Uppsala. Attaching a photo from one of the hands-on&#xA;tutorial sessions, with the tutorial leaders, standing to the right.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;ngsintro.jpg&#34;&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;ngsintro.jpg&#34; alt=&#34;&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Today&amp;rsquo;s content was mostly introductions to the linux commandline in&#xA;general, and the &lt;a href=&#34;http://www.uppmax.uu.se&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;UPPMAX HPC environment&lt;/a&gt;&#xA; in&#xA;particular, an area I&amp;rsquo;m already very familiar with, after two years as&#xA;a sysadmin at UPPMAX. Thus, today I mostly got to help out the other&#xA;students a bit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Taking a one week introductory course in Bioinformatics for NGS data</title>
      <link>https://livesys.se/posts/introductory-course-in-bioinformatics-for-ngs-data/</link>
      <pubDate>Mon, 09 Feb 2015 20:44:00 +0100</pubDate>
      <guid>https://livesys.se/posts/introductory-course-in-bioinformatics-for-ngs-data/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;Right now I&amp;rsquo;m sitting on the train and trying to get my head around&#xA;some of the &lt;a href=&#34;http://uppnex.se/twiki/do/view/Courses/NgsIntro1502/PrecourseMaterial&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pre-course&#xA;materials&lt;/a&gt;&#xA;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RDFIO VM</title>
      <link>https://livesys.se/posts/rdfio-vm/</link>
      <pubDate>Tue, 13 Jan 2015 20:43:00 +0100</pubDate>
      <guid>https://livesys.se/posts/rdfio-vm/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h2 id=&#34;the-old-virtual-machine-still-available&#34;&gt;The old Virtual Machine still available&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The old virtual machine from June 25, 2014, based on Ubuntu 14.04,&#xA;and RDFIO 2.x can be found&#xA;&lt;a href=&#34;https://www.dropbox.com/s/0go5395v53gb9gq/rdfio_xubuntu_14.04.ova?dl=0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>The smallest pipeable go program</title>
      <link>https://livesys.se/posts/smallest-pipeable-go-program/</link>
      <pubDate>Thu, 18 Dec 2014 20:43:00 +0100</pubDate>
      <guid>https://livesys.se/posts/smallest-pipeable-go-program/</guid>
      <description>&lt;p&gt;Edit: My original suggested way further below in the post is no way the&#xA;&amp;ldquo;smallest pipeable&amp;rdquo; program, instead see this example (Credits: &lt;a href=&#34;https://plus.google.com/&amp;#43;AxelWagner_Merovius&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Axel Wagner&lt;/a&gt;&#xA;):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a90d91&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a90d91&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;io&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a90d91&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;io&lt;/span&gt;.&lt;span style=&#34;color:#000&#34;&gt;Copy&lt;/span&gt;(&lt;span style=&#34;color:#000&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#000&#34;&gt;Stdout&lt;/span&gt;, &lt;span style=&#34;color:#000&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#000&#34;&gt;Stdin&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip; or (credits: &lt;a href=&#34;https://twitter.com/rogpeppe&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Roger Peppe&lt;/a&gt;&#xA;):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a90d91&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a90d91&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;bufio&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a90d91&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a90d91&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;scan&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;bufio&lt;/span&gt;.&lt;span style=&#34;color:#000&#34;&gt;NewScanner&lt;/span&gt;(&lt;span style=&#34;color:#000&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#000&#34;&gt;Stdin&lt;/span&gt;); &lt;span style=&#34;color:#000&#34;&gt;scan&lt;/span&gt;.&lt;span style=&#34;color:#000&#34;&gt;Scan&lt;/span&gt;(); {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#000&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;%s\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#000&#34;&gt;scan&lt;/span&gt;.&lt;span style=&#34;color:#000&#34;&gt;Text&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ah, I just realized that the &amp;ldquo;smallest pipeable&amp;rdquo;&#xA;&lt;a href=&#34;http://golang.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Go&lt;/a&gt;&#xA;(lang) program is rather small, if using my&#xA;&lt;a href=&#34;https://github.com/samuell/glow&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;little library of minimalistic streaming components&lt;/a&gt;&#xA;.&#xA;Nothing more than:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Profiling and creating call graphs for Go programs</title>
      <link>https://livesys.se/posts/profiling-and-call-graphs-for-golang/</link>
      <pubDate>Thu, 08 Aug 2013 01:13:00 +0200</pubDate>
      <guid>https://livesys.se/posts/profiling-and-call-graphs-for-golang/</guid>
      <description>&lt;p&gt;In trying to get my head around the code of the very interesting&#xA;&lt;a href=&#34;https://github.com/trustmaster/goflow&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GoFlow&lt;/a&gt;&#xA; library, (for flow-based&#xA;programming in Go), and the accompanying &lt;a href=&#34;https://github.com/samuell/blow&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;flow-based bioinformatics&#xA;library&lt;/a&gt;&#xA; I started hacking on, I needed&#xA;to get some kind of visualization (like a call graph) &amp;hellip; something&#xA;like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;p class=&#34;image&#34;&gt;&#xA;    &lt;img src=&#34;basecompl_blow_callgraph_1.png&#34; alt=&#34;Call graph&#34;  /&gt;&#xA;&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;(And in the end, that is what I got &amp;hellip; read on &amp;hellip; ) :)&lt;/p&gt;&#xA;&lt;p&gt;I then found out about the go tool pprof command, for which the Go team&#xA;published a &lt;a href=&#34;http://blog.golang.org/profiling-go-programs&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;blog post&lt;/a&gt;&#xA; on&#xA;&lt;a href=&#34;http://blog.golang.org/profiling-go-programs&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;&#xA;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>(E)BNF parser for parts of the Galaxy ToolConfig syntax with ANTLR</title>
      <link>https://livesys.se/posts/ebnf-parser-for-galaxy-toolconfig-syntax-with-antlr/</link>
      <pubDate>Thu, 28 Jul 2011 09:46:00 +0200</pubDate>
      <guid>https://livesys.se/posts/ebnf-parser-for-galaxy-toolconfig-syntax-with-antlr/</guid>
      <description>&lt;p&gt;As&#xA;&lt;a href=&#34;http://saml.rilspace.com/fims-project-status-update-thinking-about-cli-wrapper-xml-formats&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;blogged&lt;/a&gt;&#xA;&#xA;earlier, I&amp;rsquo;m currently into parsing the syntax of some definitions for&#xA;the parameters and stuff of command line tools. As said in the linked&#xA;blog post, I was pondering whether to use the &lt;a href=&#34;https://bitbucket.org/galaxy/galaxy-central/wiki/ToolConfigSyntax&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Galaxy&#xA;Toolconfig&lt;/a&gt;&#xA;&#xA;format or the &lt;a href=&#34;http://www.docbook.org/tdg/en/html/cmdsynopsis.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;DocBook CmdSynopsis&#xA;format&lt;/a&gt;&#xA;. It turned&#xA;out though Well, that cmdsynopsis lacks the option to specify a list of&#xA;valid choices, for a parameter, as is possible in the Galaxy ToolConfig&#xA;format (see&#xA;&lt;a href=&#34;http://wiki.g2.bx.psu.edu/Admin/Tools/Tool%20Config%20Syntax#A.3Coptions.3E_tag_set&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;&#xA;),&#xA;and thus can be used to generate drop-down lists in wizards etc. which&#xA;is basically what I want to do &amp;hellip; so, now I&amp;rsquo;m going with the Galaxy&#xA;format after all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Partial Galaxy ToolConfig to DocBook CmdSynopsis conversion with XSLT RegEx</title>
      <link>https://livesys.se/posts/galaxy-toolconfig-to-docbook-cmdsynopsis/</link>
      <pubDate>Thu, 21 Jul 2011 01:33:00 +0200</pubDate>
      <guid>https://livesys.se/posts/galaxy-toolconfig-to-docbook-cmdsynopsis/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;tool&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;id=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;sam_to_bam&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;SAM-to-BAM&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;version=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;1.1.1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;description&amp;gt;&lt;/span&gt;converts SAM format to BAM format&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;requirements&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;requirement&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;type=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;package&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;samtools&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/requirement&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/requirements&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;command&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;interpreter=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;python&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sam_to_bam.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      --input1=$source.input1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      --dbkey=${input1.metadata.dbkey}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      #if $source.index_source == &amp;#34;history&amp;#34;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        --ref_file=$source.ref_file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      #else&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        --ref_file=&amp;#34;None&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      #end if&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      --output1=$output1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      --index_dir=${GALAXY_DATA_INDEX_DIR}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/command&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;inputs&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;conditional&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;source&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;param&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;index_source&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;type=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;select&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;label=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;Choose the source for the reference list&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;option&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;value=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;cached&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;Locally cached&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;option&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;value=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;history&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;History&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;when&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;value=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;cached&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;param&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;input1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;type=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;format=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;sam&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;label=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;SAM File to Convert&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;validator&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;type=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;unspecified_build&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;validator&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;type=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;dataset_metadata_in_file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;filename=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;sam_fa_indices.loc&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;metadata_name=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;dbkey&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;metadata_column=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;message=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;Sequences are not currently available for the specified build.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;line_startswith=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;index&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;when&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;value=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;history&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;param&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;input1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;type=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;format=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;sam&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;label=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;Convert SAM file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;param&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;ref_file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;type=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;format=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;fasta&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;label=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;Using reference file&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/conditional&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/inputs&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;outputs&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;data&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;format=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;bam&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;output1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#836c28&#34;&gt;label=&lt;/span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;&amp;#34;${tool.name} on ${on_string}: converted BAM&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/outputs&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;/xml&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip; you see that in the &lt;strong&gt;command&lt;/strong&gt; tag, the actual syntax of the&#xA;command is specified in a kind of &amp;ldquo;free text&amp;rdquo; format &amp;hellip; This might&#xA;not be exactly what one might think to use XSLT transformations for, but&#xA;together with the regex functionality in XSLT 2.0 you definitely has&#xA;this option too. Helped by &lt;a href=&#34;http://www.xml.com/pub/a/2003/06/04/tr.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;this&#xA;article&lt;/a&gt;&#xA; on xml.com, I put&#xA;together this little XSLT stylesheet for parsing up the free text&#xA;content of that command tag (haven&amp;rsquo;t got to the more detailed config&#xA;inside the inputs-tag in the galaxy format, but might not need either,&#xA;if staying with the galaxy format anyway):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Answering questions without answers - by wrapping simulations in semantics</title>
      <link>https://livesys.se/posts/answering-questions-by-wrapping-simulations-in-semantics/</link>
      <pubDate>Wed, 17 Feb 2010 01:45:00 +0100</pubDate>
      <guid>https://livesys.se/posts/answering-questions-by-wrapping-simulations-in-semantics/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;There are lots of things that can&amp;rsquo;t be answered by a computer from data&#xA;alone. Maybe the majority of what we humans perceive as knowledge is&#xA;inferred from a combination of data (simple fact statements about&#xA;reality) and rules that tell how facts can be combined together to allow&#xA;making &lt;em&gt;implicit&lt;/em&gt; knowledge (knowledge that is not persisted as facts&#xA;anywhere, but has to be &lt;em&gt;inferred&lt;/em&gt; from other facts and rules) become&#xA;&lt;em&gt;explicit&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Hello World program in SWI-Prolog</title>
      <link>https://livesys.se/posts/a-hello-world-prolog-program/</link>
      <pubDate>Tue, 22 Sep 2009 17:04:00 +0200</pubDate>
      <guid>https://livesys.se/posts/a-hello-world-prolog-program/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;Then you can load the program from inside prolog after you&amp;rsquo;ve started&#xA;it.&lt;/p&gt;&#xA;&lt;p&gt;So, let&amp;rsquo;s start the prolog interactive GUI:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-prolog&#34; data-lang=&#34;prolog&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;prolog&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, in the Prolog GUI, load the file test.pl like so:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-prolog&#34; data-lang=&#34;prolog&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#c41a16&#34;&gt;?-&lt;/span&gt; [&lt;span style=&#34;color:#c41a16&#34;&gt;test&lt;/span&gt;].&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, if you had some prolog clauses in the test.pl file, you will be&#xA;able to extract that information by querying.&lt;/p&gt;&#xA;&lt;p&gt;A very simple test program that you could create is:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
