<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ap on UBLabs</title>
    <link>https://labs.ub.uni-frankfurt.de/authors/ap/</link>
    <description>Recent content in Ap on UBLabs</description>
    <generator>Hugo</generator>
    <language>en</language>
    <managingEditor>labs@ub.uni-frankfurt.de (UBLabs)</managingEditor>
    <webMaster>labs@ub.uni-frankfurt.de (UBLabs)</webMaster>
    <copyright>Universitätsbibliothek Frankfurt am Main</copyright>
    <lastBuildDate>Thu, 17 Aug 2023 00:00:01 +0200</lastBuildDate>
    <atom:link href="https://labs.ub.uni-frankfurt.de/authors/ap/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Data Engineering with luigi - Lessons learned</title>
      <link>https://labs.ub.uni-frankfurt.de/post/data-engineering-with-luigi-lessons-learned/</link>
      <pubDate>Thu, 17 Aug 2023 00:00:01 +0200</pubDate><author>labs@ub.uni-frankfurt.de (UBLabs)</author>
      <guid>https://labs.ub.uni-frankfurt.de/post/data-engineering-with-luigi-lessons-learned/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;At the UB JCS, we make extensive usage of the Python &lt;a href=&#34;https://luigi.readthedocs.io/en/stable/&#34;&gt;luigi framework&lt;/a&gt; for data engineering. The framework is capable of handling thousands of tasks, calculating non-circular task dependencies, and run over days. Additionally, it provides a convenient web control panel to see, e.g. the task dependencies in a tree diagram or start specific tasks.&lt;/p&gt;&#xA;&lt;p&gt;Although luigi itself supports the user already by enforcing a very specific structure, there are still some things to consider when designing a data pipeline with luigi (for a general introduction, see in &lt;a href=&#34;https://labs.ub.uni-frankfurt.de/post/common-engineering-strategies-in-luigi/&#34;&gt;a previous post&lt;/a&gt;). In this post, I present ideas, that I learned while using luigi. Since luigi is a heavily object-oriented framework, some approaches in this post rely naturally on &lt;a href=&#34;https://en.wikipedia.org/wiki/Architectural_pattern&#34;&gt;Software architecture patterns&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Common engineering strategies in luigi</title>
      <link>https://labs.ub.uni-frankfurt.de/post/common-engineering-strategies-in-luigi/</link>
      <pubDate>Thu, 29 Jun 2023 14:00:00 +0200</pubDate><author>labs@ub.uni-frankfurt.de (UBLabs)</author>
      <guid>https://labs.ub.uni-frankfurt.de/post/common-engineering-strategies-in-luigi/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;For many automated data processing tasks within the context of the Specialised Information Services (FID) at the University Library Frankfurt, we use the Python package &lt;a href=&#34;https://luigi.readthedocs.io/en/stable/&#34;&gt;&lt;code&gt;luigi&lt;/code&gt;&lt;/a&gt;. This package proves especially useful when a task (e.g. the loading of data into a database) depends on the work of other tasks that have to run successfully, before the next task starts (e.g. first you need to download the data). &lt;code&gt;luigi&lt;/code&gt; orchestrates all required tasks and their respective required task(s) and then processes everything for you. This approach makes the maintenance of tasks very easy, since you only have to add or remove required tasks from any task and &lt;code&gt;luigi&lt;/code&gt; handles the rest for you, while you don&amp;rsquo;t have to worry about the &lt;a href=&#34;https://en.wikipedia.org/wiki/Directed_acyclic_graph&#34;&gt;computer science behind it&lt;/a&gt; too much. But although &lt;code&gt;luigi&lt;/code&gt; takes a lot of mental load off of you, it also requires strategies to handle common situations that you may find yourself in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Upgrading OJS with the ojs_updater</title>
      <link>https://labs.ub.uni-frankfurt.de/post/upgrading-ojs-with-the-ojs-updater/</link>
      <pubDate>Wed, 21 Dec 2022 12:07:00 +0000</pubDate><author>labs@ub.uni-frankfurt.de (UBLabs)</author>
      <guid>https://labs.ub.uni-frankfurt.de/post/upgrading-ojs-with-the-ojs-updater/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;At the University Library Frankfurt, &lt;a href=&#34;https://www.ub.uni-frankfurt.de/publizieren/ojs.html&#34;&gt;we currently host 21 OJS journals&lt;/a&gt;, with more to come. Since we apply a strategy that runs only a single journal within an &lt;a href=&#34;https://pkp.sfu.ca/ojs/&#34;&gt;OJS&lt;/a&gt; instance, we have to maintain 21 different OJS instances. In order to maintain and manage this multiplicity, we found it important to come up with structures on the server and helper tools.&lt;/p&gt;&#xA;&lt;p&gt;Especially the process of updating a journal instance can be quite tedious, since it involves multiple manual steps and can cause problems when forgetting something in the process. Due to these manual steps, the upgrade of a single OJS instance can take up to 20 minutes – and longer, if something doesn&amp;rsquo;t go according to plan.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Maintaining applications with external API dependencies with software tests</title>
      <link>https://labs.ub.uni-frankfurt.de/post/maintaining-applications-with-external-api-dependencies-with-software-tests/</link>
      <pubDate>Sun, 31 Jul 2022 00:00:00 +0000</pubDate><author>labs@ub.uni-frankfurt.de (UBLabs)</author>
      <guid>https://labs.ub.uni-frankfurt.de/post/maintaining-applications-with-external-api-dependencies-with-software-tests/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;When talking about software maintainability, we always imply that you can extend or change a given software (even by another person than the original maintainer) without breaking the code or introducing bugs. This premise assumes that there is a good &lt;a href=&#34;https://en.wikipedia.org/wiki/Software_testing&#34;&gt;test suite&lt;/a&gt; making sure that your software still works as intended after the change (or with a new version of an external dependency). For example, the complexity of the software in the &lt;a href=&#34;https://www.biofid.de&#34;&gt;BIOfid&lt;/a&gt; software framework, both in the backend and the frontend, can only be tamed by applying tests that make sure that the code works as intended - now and in the future.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting the (Semantic) Sense out of a User Query</title>
      <link>https://labs.ub.uni-frankfurt.de/post/getting-the-semantic-sense-out-of-a-user-query/</link>
      <pubDate>Wed, 15 Sep 2021 08:00:00 +0000</pubDate><author>labs@ub.uni-frankfurt.de (UBLabs)</author>
      <guid>https://labs.ub.uni-frankfurt.de/post/getting-the-semantic-sense-out-of-a-user-query/</guid>
      <description>&lt;h1 id=&#34;the-biofid-semantic-search&#34;&gt;The BIOfid Semantic Search&lt;/h1&gt;&#xA;&lt;p&gt;Within the &lt;a href=&#34;https://www.biofid.de/en/&#34;&gt;BIOfid&lt;/a&gt;-project, we create a semantic search portal (hereafter &amp;ldquo;BIOfid portal&amp;rdquo;) to help our users to access legacy biodiversity literature more easily. Hence, since the BIOfid portal has a deeper &amp;ldquo;understanding&amp;rdquo; of both the texts and the included species, it allows the users to get more relevant documents. Moreover, the BIOfid portal interprets the user query and transform it &lt;em&gt;ad hoc&lt;/em&gt; into a graph database query, to learn more about their intention.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
