<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>imag &amp;mdash; musicmatzes blog</title>
    <link>https://beyermatthias.de/tag:imag</link>
    <description></description>
    <pubDate>Wed, 06 May 2026 11:50:00 +0200</pubDate>
    <item>
      <title>Building imag with nix remote builds</title>
      <link>https://beyermatthias.de/building-imag-with-nix-remote-builds</link>
      <description>&lt;![CDATA[This is mostly a reminder for myself how to do it, because the documentation&#xA;non the nix side is pretty sparse.&#xA;&#xA;What I want to do is to build imag on a remote server using nix 2.0 features -&#xA;nix remote builds.&#xA;&#xA;Here are the steps I did for achieving that goal:&#xA;&#xA;build the Cargo.lock file with cargo generate-lock for the imag&#xA;   workspace&#xA;generate a build.nix file using&#xA;   carnix --standalone --src . --output build.nix Cargo.lock&#xA;monkey-patching the generated nix file because carnix generates wrong&#xA;   pathes for the build.rs file in the nix expressions. I did that with a&#xA;   simple substitude pattern in vim:&#xA;   %s/&#34;\.\.\/\.\.\/\.\.\/build\.rs&#34;/.\/build.rs/&#xA;ensure the remote machine has nix 2.0&#xA;use NIXREMOTE=ssh-ng://user@host nix build -f ./build.nix imag070 to&#xA;   build imag on the remote machine.&#xA;&#xA;Unfortunately, because the generated expressions do not use cargo but&#xA;execute the rustc compiler directly, the build fails because I need the&#xA;CARGOBUILDVERSION and CARGOPKGVERSION environment variables which are&#xA;set by cargo during the build.&#xA;&#xA;I hope carnix gets support for automatically adding those variables to the&#xA;build soonish, so I can build imag completely remote.&#xA;&#xA;tags:  #imag #nix #rust&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>This is mostly a reminder for myself how to do it, because the documentation
non the nix side is pretty sparse.</p>

<p>What I want to do is to build imag on a remote server using nix 2.0 features -
nix remote builds.</p>

<p>Here are the steps I did for achieving that goal:</p>
<ol><li>build the <code>Cargo.lock</code> file with <code>cargo generate-lock</code> for the imag
workspace</li>
<li>generate a <code>build.nix</code> file using
<code>carnix --standalone --src . --output build.nix Cargo.lock</code></li>
<li>monkey-patching the generated nix file because <code>carnix</code> generates wrong
pathes for the <code>build.rs</code> file in the nix expressions. I did that with a
simple substitude pattern in vim:
<code>%s/&#34;\.\.\/\.\.\/\.\.\/build\.rs&#34;/.\/build.rs/</code></li>
<li>ensure the remote machine has nix 2.0</li>
<li>use <code>NIX_REMOTE=ssh-ng://user@host nix build -f ./build.nix imag_0_7_0</code> to
build imag on the remote machine.</li></ol>

<p>Unfortunately, because the generated expressions do not use <code>cargo</code> but
execute the <code>rustc</code> compiler directly, the build fails because I need the
<code>CARGO_BUILD_VERSION</code> and <code>CARGO_PKG_VERSION</code> environment variables which are
set by cargo during the build.</p>

<p>I hope <code>carnix</code> gets support for automatically adding those variables to the
build soonish, so I can build imag completely remote.</p>

<p>tags:  <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a> <a href="https://beyermatthias.de/tag:nix" class="hashtag"><span>#</span><span class="p-category">nix</span></a> <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/building-imag-with-nix-remote-builds</guid>
      <pubDate>Sun, 01 Apr 2018 16:39:26 +0200</pubDate>
    </item>
    <item>
      <title>34c3</title>
      <link>https://beyermatthias.de/34c3</link>
      <description>&lt;![CDATA[34c3 was awesome. I prepared a blog article as my recap, though I failed to&#xA;provide enough content. That&#39;s why I will simply list my &#34;toots&#34; from mastodon&#xA;here, as a short recap for the whole congress.&#xA;&#xA;(2017-12-26,  4:04 PM) - Arrived at #34c3&#xA;(2017-12-27,  9:55 AM) - Hi #31c3 ! Arrived in Adams, am excited for the intro talk in less than 65 min! smallYes, I got the tag wrong on this one/small&#xA;(2017-12-27, 10:01 AM) - Oh my god I&#39;m so excited about #34c3 ... this is huge, girls and boys! The best congress ever is about to start!&#xA;(2017-12-27, 10:25 AM) - Be awesome to eachother #34c3 ... so far it works beautifully!&#xA;(2017-12-27, 10:31 AM) - #34c3 first mate is empty.&#xA;(2017-12-27, 10:46 AM) - #34c3 - less than 15 minutes. Oh MY GOOOOOOOOOD&#xA;(2017-12-27, 10:49 AM) - Kinda sad that #fefe won&#39;t do the Fnord this year at #34c3 ... but I also think that this year was to shitty to laugh about it, right?&#xA;(2017-12-27, 10:51 AM) - #34c3 oh my good 10 minutes left!&#xA;(2017-12-27, 11:02 AM) - #34c3 GO GO GO GO!&#xA;(2017-12-27, 11:16 AM) - Vom Spieltrieb zur Wissbegierig! #34c3&#xA;(2017-12-27, 12:17 PM) - People asked me things because I am wearing a #nixos T-shirt! Awesome! #34c3&#xA;(2017-12-27, 12:59 PM) - I really hope i will be able to talk to the #secushare people today #34c3&#xA;(2017-12-27,  1:44 PM) - I talked to even more people about #nixos ... and also about #rust ... #34c3 barely started and is already awesome!&#xA;(2017-12-27,  4:28 PM) - Just found a seat in Adams. Awesome! #34c3&#xA;(2017-12-27,  8:16 PM) -  Single girls of #34c3 - where are you?&#xA;(2017-12-28, 10:25 AM) - Day 2 at #34c3 ... Yeah! Today there will be the #mastodon #meetup ... Really looking forward to that!&#xA;(2017-12-28, 12:32 PM) - Just saw ads for a #rust #wayland compositor on an info screen at #34c3 - yeah, awesome!&#xA;(2017-12-28, 12:37 PM) - First mate today. Boom. I&#39;m awake! #34c3&#xA;(2017-12-28, 12:42 PM) - #mastodon ads on screen! Awesome! #34c3&#xA;(2017-12-28, 12:45 PM) - #taskwarrior ads on screen - #34c3&#xA;(2017-12-28,  3:14 PM) - I think I will not publish a blog post about the #34c3 but simply list all my toots and post that as an blog article. Seems to be much easier.&#xA;(2017-12-28,  3:15 PM) - #34c3 does not feel like a hacker event (at least not like the what I&#39;m used to) because there are so many (beautiful) women around here.&#xA;(2017-12-28,  3:36 PM) - The food in the congress center in Leipzig at #34c3 is REALLY expensive IMO. 8.50 for a burger with some fries is too expensive. And it is even less than the Chili in Hamburg was.&#xA;(2017-12-28,  3:43 PM) - Prepare your toots! #mastodon meetup in less than 15 minutes! #34c3&#xA;(2017-12-28,  3:50 PM) - #34c3 Hi #mastodon #meetup !&#xA;(2017-12-28,  3:55 PM) - Whuha... there are much more people than I&#39;ve expected here at the #mastodon #meetup #34c3&#xA;(2017-12-28,  4:03 PM) - Ok. Small #meetup - or not so small. Awesome. Room is packed. #34c3 awesomeness!&#xA;(2017-12-28,  4:09 PM) - 10 minutes in ... and we&#39;re already discussing pineapples. Community ftw! #34c3 #mastodon #meetup&#xA;(2017-12-28,  4:46 PM) - Limiting sharing of #toots does only work if all instances behave! #34c3 #mastodon #meetup&#xA;(2017-12-28,  4:56 PM) - Who-is-who #34c3 #mastodon #meetup doesn&#39;t work for me... because I don&#39;t know the 300 usernames from the top of my head...&#xA;(2017-12-28,  5:17 PM) - From one #meetup to the next: #nixos ! #34c3&#xA;(2017-12-28,  5:57 PM) - Unfortunately the #nixos community has no space for their #meetup at #34c3 ... kinda ad-hoc now!&#xA;(2017-12-28,  7:58 PM) - Now... Where are all the single ladies? #34c3&#xA;(2017-12-28,  9:27 PM) - #34c3 can we have #trance #music please?&#xA;(2017-12-28,  9:38 PM) - Where are my fellow #34c3 #mastodon #meetup people? Get some #toots posted, come on!&#xA;(2017-12-29,  1:44 AM) - Day 2 ends for me now. #34c3&#xA;(2017-12-29, 10:30 AM) - Methodisch Inkorrekt. Approx. 1k people waiting in line. Not nice. #34c3&#xA;(2017-12-29, 10:43 AM) - Damn. Notebook battery ran out of power last night. Cannot check mails and other unimportant things while waiting in line.  One improvement proposal for #34c3 - more power lines outside hackcenter!&#xA;(2017-12-29, 10:44 AM) - Nice. Now the wlan is breaking down. #34c3&#xA;(2017-12-29, 10:57 AM) - LAOOOOLAAA through the hall! We did it #34c3 !&#xA;(2017-12-30,  3:45 AM) - 9h Party. Straight. I&#39;m dead. #34c3&#xA;(2017-12-30,  9:08 PM) - After some awesome days at the #34c3 I am intellectually burned out now. That&#39;s why the #trance #techno #rave yesterday was exactly the right thing to do!&#xA;(2017-12-30, 11:35 PM) - Where can I get the set from yesterday night Chaos Stage #34c3 ??? Would love to trance into the next year with it!&#xA;(2017-12-31, 11:05 PM) - My first little #34c3 congress résumé: I should continue on #imag and invest even more time.  Not that I do not continue it, but progress is slowing down with the last months of my masters thesis... Understandable I guess.&#xA;&#xA;That was my congress. Yes, there are few toots after 28th... because I was&#xA;really tired by then and also had people to talk to all the time, so little&#xA;time for microblogging there. All in all: It was the best congress so far!&#xA;&#xA;tags: #ccc #social&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>34c3 was awesome. I prepared a blog article as my recap, though I failed to
provide enough content. That&#39;s why I will simply list my “toots” from mastodon
here, as a short recap for the whole congress.</p>
<ul><li>(2017-12-26,  4:04 PM) – Arrived at <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-27,  9:55 AM) – Hi <a href="https://beyermatthias.de/tag:31c3" class="hashtag"><span>#</span><span class="p-category">31c3</span></a> ! Arrived in Adams, am excited for the intro talk in less than 65 min! <small>Yes, I got the tag wrong on this one</small></li>
<li>(2017-12-27, 10:01 AM) – Oh my god I&#39;m so excited about <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> ... this is huge, girls and boys! The best congress ever is about to start!</li>
<li>(2017-12-27, 10:25 AM) – Be awesome to eachother <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> ... so far it works beautifully!</li>
<li>(2017-12-27, 10:31 AM) – <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> first mate is empty.</li>
<li>(2017-12-27, 10:46 AM) – <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> – less than 15 minutes. Oh MY GOOOOOOOOOD</li>
<li>(2017-12-27, 10:49 AM) – Kinda sad that <a href="https://beyermatthias.de/tag:fefe" class="hashtag"><span>#</span><span class="p-category">fefe</span></a> won&#39;t do the Fnord this year at <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> ... but I also think that this year was to shitty to laugh about it, right?</li>
<li>(2017-12-27, 10:51 AM) – <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> oh my good 10 minutes left!</li>
<li>(2017-12-27, 11:02 AM) – <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> GO GO GO GO!</li>
<li>(2017-12-27, 11:16 AM) – Vom Spieltrieb zur Wissbegierig! <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-27, 12:17 PM) – People asked me things because I am wearing a <a href="https://beyermatthias.de/tag:nixos" class="hashtag"><span>#</span><span class="p-category">nixos</span></a> T-shirt! Awesome! <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-27, 12:59 PM) – I really hope i will be able to talk to the <a href="https://beyermatthias.de/tag:secushare" class="hashtag"><span>#</span><span class="p-category">secushare</span></a> people today <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-27,  1:44 PM) – I talked to even more people about <a href="https://beyermatthias.de/tag:nixos" class="hashtag"><span>#</span><span class="p-category">nixos</span></a> ... and also about <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> ... <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> barely started and is already awesome!</li>
<li>(2017-12-27,  4:28 PM) – Just found a seat in Adams. Awesome! <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-27,  8:16 PM) –  Single girls of <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> – where are you?</li>
<li>(2017-12-28, 10:25 AM) – Day 2 at <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> ... Yeah! Today there will be the <a href="https://beyermatthias.de/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a> <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a> ... Really looking forward to that!</li>
<li>(2017-12-28, 12:32 PM) – Just saw ads for a <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> <a href="https://beyermatthias.de/tag:wayland" class="hashtag"><span>#</span><span class="p-category">wayland</span></a> compositor on an info screen at <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> – yeah, awesome!</li>
<li>(2017-12-28, 12:37 PM) – First mate today. Boom. I&#39;m awake! <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-28, 12:42 PM) – <a href="https://beyermatthias.de/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a> ads on screen! Awesome! <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-28, 12:45 PM) – <a href="https://beyermatthias.de/tag:taskwarrior" class="hashtag"><span>#</span><span class="p-category">taskwarrior</span></a> ads on screen – <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-28,  3:14 PM) – I think I will not publish a blog post about the <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> but simply list all my toots and post that as an blog article. Seems to be much easier.</li>
<li>(2017-12-28,  3:15 PM) – <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> does not feel like a hacker event (at least not like the what I&#39;m used to) because there are so many (beautiful) women around here.</li>
<li>(2017-12-28,  3:36 PM) – The food in the congress center in Leipzig at <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> is REALLY expensive IMO. 8.50 for a burger with some fries is too expensive. And it is even less than the Chili in Hamburg was.</li>
<li>(2017-12-28,  3:43 PM) – Prepare your toots! <a href="https://beyermatthias.de/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a> meetup in less than 15 minutes! <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-28,  3:50 PM) – <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> Hi <a href="https://beyermatthias.de/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a> <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a> !</li>
<li>(2017-12-28,  3:55 PM) – Whuha... there are much more people than I&#39;ve expected here at the <a href="https://beyermatthias.de/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a> <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a> <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-28,  4:03 PM) – Ok. Small <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a> – or not so small. Awesome. Room is packed. <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> awesomeness!</li>
<li>(2017-12-28,  4:09 PM) – 10 minutes in ... and we&#39;re already discussing pineapples. Community ftw! <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> <a href="https://beyermatthias.de/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a> <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a></li>
<li>(2017-12-28,  4:46 PM) – Limiting sharing of <a href="https://beyermatthias.de/tag:toots" class="hashtag"><span>#</span><span class="p-category">toots</span></a> does only work if all instances behave! <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> <a href="https://beyermatthias.de/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a> <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a></li>
<li>(2017-12-28,  4:56 PM) – Who-is-who <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> <a href="https://beyermatthias.de/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a> <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a> doesn&#39;t work for me... because I don&#39;t know the 300 usernames from the top of my head...</li>
<li>(2017-12-28,  5:17 PM) – From one <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a> to the next: <a href="https://beyermatthias.de/tag:nixos" class="hashtag"><span>#</span><span class="p-category">nixos</span></a> ! <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-28,  5:57 PM) – Unfortunately the <a href="https://beyermatthias.de/tag:nixos" class="hashtag"><span>#</span><span class="p-category">nixos</span></a> community has no space for their <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a> at <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> ... kinda ad-hoc now!</li>
<li>(2017-12-28,  7:58 PM) – Now... Where are all the single ladies? <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-28,  9:27 PM) – <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> can we have <a href="https://beyermatthias.de/tag:trance" class="hashtag"><span>#</span><span class="p-category">trance</span></a> <a href="https://beyermatthias.de/tag:music" class="hashtag"><span>#</span><span class="p-category">music</span></a> please?</li>
<li>(2017-12-28,  9:38 PM) – Where are my fellow <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> <a href="https://beyermatthias.de/tag:mastodon" class="hashtag"><span>#</span><span class="p-category">mastodon</span></a> <a href="https://beyermatthias.de/tag:meetup" class="hashtag"><span>#</span><span class="p-category">meetup</span></a> people? Get some <a href="https://beyermatthias.de/tag:toots" class="hashtag"><span>#</span><span class="p-category">toots</span></a> posted, come on!</li>
<li>(2017-12-29,  1:44 AM) – Day 2 ends for me now. <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-29, 10:30 AM) – Methodisch Inkorrekt. Approx. 1k people waiting in line. Not nice. <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-29, 10:43 AM) – Damn. Notebook battery ran out of power last night. Cannot check mails and other unimportant things while waiting in line.  One improvement proposal for <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> – more power lines outside hackcenter!</li>
<li>(2017-12-29, 10:44 AM) – Nice. Now the wlan is breaking down. <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-29, 10:57 AM) – LAOOOOLAAA through the hall! We did it <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> !</li>
<li>(2017-12-30,  3:45 AM) – 9h Party. Straight. I&#39;m dead. <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a></li>
<li>(2017-12-30,  9:08 PM) – After some awesome days at the <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> I am intellectually burned out now. That&#39;s why the <a href="https://beyermatthias.de/tag:trance" class="hashtag"><span>#</span><span class="p-category">trance</span></a> <a href="https://beyermatthias.de/tag:techno" class="hashtag"><span>#</span><span class="p-category">techno</span></a> <a href="https://beyermatthias.de/tag:rave" class="hashtag"><span>#</span><span class="p-category">rave</span></a> yesterday was exactly the right thing to do!</li>
<li>(2017-12-30, 11:35 PM) – Where can I get the set from yesterday night Chaos Stage <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> ??? Would love to trance into the next year with it!</li>
<li>(2017-12-31, 11:05 PM) – My first little <a href="https://beyermatthias.de/tag:34c3" class="hashtag"><span>#</span><span class="p-category">34c3</span></a> congress résumé: I should continue on <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a> and invest even more time.  Not that I do not continue it, but progress is slowing down with the last months of my masters thesis... Understandable I guess.</li></ul>

<p>That was my congress. Yes, there are few toots after 28th... because I was
really tired by then and also had people to talk to all the time, so little
time for microblogging there. All in all: It was the best congress so far!</p>

<p>tags: <a href="https://beyermatthias.de/tag:ccc" class="hashtag"><span>#</span><span class="p-category">ccc</span></a> <a href="https://beyermatthias.de/tag:social" class="hashtag"><span>#</span><span class="p-category">social</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/34c3</guid>
      <pubDate>Mon, 01 Jan 2018 16:38:38 +0100</pubDate>
    </item>
    <item>
      <title>Planning a log-functionality refactoring for imag</title>
      <link>https://beyermatthias.de/planning-a-log-functionality-refactoring-for-imag</link>
      <description>&lt;![CDATA[Here I want to describe how I plan to refactor the logging back end&#xA;implementation for imag.&#xA;&#xA;small&#xA;  This post was published on imag-pim.org as well as&#xA;  on my personal blog.&#xA;/small&#xA;&#xA;What we have&#xA;&#xA;Right now, the logging implementation is ridiculously simple. What we do is:&#xA;On every call to one of the logging macros, the log crate gives us an object&#xA;with a few informations (line number, file, log message,...) - we apply our&#xA;format, some color and write it to stderr.&#xA;&#xA;This is of course rather simple and not really flexible.&#xA;&#xA;What we want to have&#xA;&#xA;I want to rewrite the logging backend to give the user more power about the&#xA;logging. As we only have to rewrite the backend, and the log crate handles&#xA;everything else, the actual logging looks non different and &#34;client&#34; code does&#xA;not change.&#xA;&#xA;+----------------------------+&#xA;| imag code, libs, bins, ... |&#xA;+----------------------------+&#xA;              |&#xA;              | calls&#xA;              |&#xA;              v&#xA;+----------------------------+&#xA;| crate: &#34;log&#34;               |&#xA;+----------------------------+&#xA;              |&#xA;              | calls&#xA;              |&#xA;              v&#xA;+----------------------------+&#xA;| imag logging backend impl. |&#xA;+----------------------------+&#xA;&#xA;So what features do we want?&#xA;First of all, the imag user must be able to configure the logging.&#xA;Not only with the configuration file but also via environment&#xA;variables and of course command line parameters. The former will be overridden&#xA;by the latter, respectively. This gives the user nice control, as she can&#xA;configure imag to log to stderr with only warnings being logged but when calling&#xA;a script of imag commands or calling imag directly from the command line, these&#xA;settings can be temporarily (for the script or one command) be overridden.&#xA;&#xA;The configuration options I have in mind are best described by an example:&#xA;&#xA;The logging section of the configuration&#xA;[logging]&#xA;&#xA;the default logging level&#xA;Valid values are &#34;trace&#34;, &#34;debug&#34;, &#34;info&#34;, &#34;warn&#34;, &#34;error&#34;&#xA;level = &#34;debug&#34;&#xA;&#xA;the destinations of the logging output.&#xA;&#34;-&#34; is for stderr, multiple destinations are possible&#xA;default-destinations = [ &#34;-&#34;, &#34;/tmp/imag.log&#34; ]&#xA;&#xA;The format for the logging output&#xA;&#xA;The format supports variables which are inserted for each logging call:&#xA;&#xA;&#34;%no%&#34;       - The of the logging call&#xA;&#34;%thread%&#34;   - The thread id from the thread calling the log&#xA;&#34;%level%&#34;    - The logging level&#xA;&#34;%module%&#34;   - The module name&#xA;&#34;%file%&#34;     - The file path where the logging call appeared&#xA;&#34;%line%&#34;     - The line No of the logging call&#xA;&#34;%message%&#34;&#34; - The logging message&#xA;&#xA;Functions can be applied to the variables to change the color of&#xA;the substitutions.&#xA;&#xA;A format must contain &#34;%message%, else imag fails because no logging should&#xA;be forbidden&#xA;&#xA;[logging.formats]&#xA;trace = &#34;cyan(imag%thread%%module%[%line%]): %message%&#34;&#xA;debug = &#34;cyan(imag%thread%%module%[%line%]): %message%&#34;&#xA;info  = &#34;[imag]: %message%&#34;&#xA;warn  = &#34;red([imag]:) %message%&#34;&#xA;error = &#34;red(blinking(imag]): %message%)&#34;&#xA;&#xA;Example entry for one imag module&#xA;If a module is not configured or keys are missing&#xA;the default values from above are applied&#xA;[logging.modules.libimagstore]&#xA;enabled = true&#xA;level = &#34;trace&#34;&#xA;destinations = [ &#34;-&#34; ]&#xA;A format is only globally configurable, not per-module&#xA;&#xA;One of the most complex things in here would be the format parsing, as variable&#xA;expansion and functions to apply are some kind of DSL I have to implement.&#xA;I hope I can do this - maybe there&#39;s even a crate for helping me with this?&#xA;Maybe the shellexpand&#xA;library will do?&#xA;&#xA;These things and configuration options give the user great power over the&#xA;logging.&#xA;&#xA;The approach&#xA;&#xA;Because imag already logs a lot, I think about an approach where one thread is&#xA;used for the actual logging. Because each logging call involves a lot of&#xA;complexity, I want to move that to a dedicated thread where other threads speak&#xA;to the logging thread via a MPSC queue.&#xA;&#xA;Of course, this should be opt-in.&#xA;&#xA;The idea is that the logging starts a thread upon construction (which is really&#xA;early in the imag process, nearly one of the first operations done). This&#xA;happens when the Runtime object is build and hence no &#34;client code&#34; has to be&#xA;changed, all changes remain in libimagrt.&#xA;&#xA;This thread is bound to the Runtime object, logging calls (via the logging&#xA;backend which is implemented for the log crate) talk to it via a channel. The&#xA;thread then does the heavy lifting. Of course, configuration can be aggregated&#xA;on construction of the logging thread.&#xA;&#xA;The logging thread is killed when the Runtime object is dropped (one of the&#xA;last operations in each imag process). Of course, the queue has to be emptied&#xA;before the logging is closed.&#xA;&#xA;I am also thinking about converting the code base to use the slog crate, which&#xA;offers structured logging. But I&#39;m not yet sure whether we will benefit from&#xA;that, because I don&#39;t know whether we would need to pass a state-object around.&#xA;If that is the case, I cannot do this as this would introduce a lot of&#xA;complexity which I don&#39;t want to have. If no such object needs to be passed&#xA;around, I still have to evaluate whether the slog crate is a nice idea and of&#xA;course this would also increase the number of (complex) dependencies by one...&#xA;and I&#39;m not sure whether the benefits outrule the inconveniences.&#xA;&#xA;tags:  #linux #open source #programming #rust #software #tools #imag&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Here I want to describe how I plan to refactor the logging back end
implementation for imag.</p>

<p><small>
  This post was published on <a href="https://imag-pim.org">imag-pim.org</a> as well as
  on <a href="https://beyermatthias.de">my personal blog</a>.
</small></p>

<h1 id="what-we-have" id="what-we-have">What we have</h1>

<p>Right now, the logging implementation is ridiculously <em>simple</em>. What we do is:
On every call to one of the logging macros, the <code>log</code> crate gives us an object
with a few informations (line number, file, log message,...) – we apply our
format, some color and write it to <code>stderr</code>.</p>

<p>This is of course rather simple and not really flexible.</p>

<h1 id="what-we-want-to-have" id="what-we-want-to-have">What we want to have</h1>

<p>I want to rewrite the logging backend to give the user more power about the
logging. As we only have to rewrite the <em>backend</em>, and the <code>log</code> crate handles
everything else, the actual logging looks non different and “client” code does
not change.</p>

<pre><code>+----------------------------+
| imag code, libs, bins, ... |
+----------------------------+
              |
              | calls
              |
              v
+----------------------------+
| crate: &#34;log&#34;               |
+----------------------------+
              |
              | calls
              |
              v
+----------------------------+
| imag logging backend impl. |
+----------------------------+
</code></pre>

<p>So what features do we want?
First of all, the imag user must be able to configure the logging.
Not only with the configuration file but also via environment
variables and of course command line parameters. The former will be overridden
by the latter, respectively. This gives the user nice control, as she can
configure imag to log to stderr with only warnings being logged but when calling
a script of imag commands or calling imag directly from the command line, these
settings can be temporarily (for the script or one command) be overridden.</p>

<p>The configuration options I have in mind are best described by an example:</p>

<pre><code class="language-toml"># The logging section of the configuration
[logging]

# the default logging level
# Valid values are &#34;trace&#34;, &#34;debug&#34;, &#34;info&#34;, &#34;warn&#34;, &#34;error&#34;
level = &#34;debug&#34;

# the destinations of the logging output.
# &#34;-&#34; is for stderr, multiple destinations are possible
default-destinations = [ &#34;-&#34;, &#34;/tmp/imag.log&#34; ]

# The format for the logging output
#
# The format supports variables which are inserted for each logging call:
#
#  &#34;%no%&#34;       - The of the logging call
#  &#34;%thread%&#34;   - The thread id from the thread calling the log
#  &#34;%level%&#34;    - The logging level
#  &#34;%module%&#34;   - The module name
#  &#34;%file%&#34;     - The file path where the logging call appeared
#  &#34;%line%&#34;     - The line No of the logging call
#  &#34;%message%&#34;&#34; - The logging message
#
# Functions can be applied to the variables to change the color of
# the substitutions.
#
# A format _must_ contain &#34;%message%, else imag fails because no logging should
# be forbidden
#
[logging.formats]
trace = &#34;cyan([imag][%no%][%thread%][%level%][%module%][%file%][%line%]): %message%&#34;
debug = &#34;cyan([imag][%no%][%thread%][%level%][%module%][%file%][%line%]): %message%&#34;
info  = &#34;[imag]: %message%&#34;
warn  = &#34;red([imag]:) %message%&#34;
error = &#34;red(blinking([imag][uppercase(%level%)]): %message%)&#34;

# Example entry for one imag module
# If a module is not configured or keys are missing
# the default values from above are applied
[logging.modules.libimagstore]
enabled = true
level = &#34;trace&#34;
destinations = [ &#34;-&#34; ]
# A format is only globally configurable, not per-module
</code></pre>

<p>One of the most complex things in here would be the format parsing, as variable
expansion and functions to apply are some kind of DSL I have to implement.
I hope I can do this – maybe there&#39;s even a crate for helping me with this?
Maybe the <a href="https://netvl.github.io/shellexpand/shellexpand/fn.env_with_context.html">shellexpand</a>
library will do?</p>

<p>These things and configuration options give the user great power over the
logging.</p>

<h1 id="the-approach" id="the-approach">The approach</h1>

<p>Because imag already logs <em>a lot</em>, I think about an approach where one thread is
used for the actual logging. Because each logging call involves a lot of
complexity, I want to move that to a dedicated thread where other threads speak
to the logging thread via a MPSC queue.</p>

<p>Of course, this should be opt-in.</p>

<p>The idea is that the logging starts a thread upon construction (which is really
early in the imag process, nearly one of the first operations done). This
happens when the <code>Runtime</code> object is build and hence no “client code” has to be
changed, all changes remain in libimagrt.</p>

<p>This thread is bound to the <code>Runtime</code> object, logging calls (via the logging
backend which is implemented for the <code>log</code> crate) talk to it via a channel. The
thread then does the heavy lifting. Of course, configuration can be aggregated
on construction of the logging thread.</p>

<p>The logging thread is killed when the <code>Runtime</code> object is dropped (one of the
last operations in each imag process). Of course, the queue has to be emptied
before the logging is closed.</p>

<p>I am also thinking about converting the code base to use the <code>slog</code> crate, which
offers structured logging. But I&#39;m not yet sure whether we will benefit from
that, because I don&#39;t know whether we would need to pass a state-object around.
If that is the case, I cannot do this as this would introduce a lot of
complexity which I don&#39;t want to have. If no such object needs to be passed
around, I still have to evaluate whether the <code>slog</code> crate is a nice idea and of
course this would also increase the number of (complex) dependencies by one...
and I&#39;m not sure whether the benefits outrule the inconveniences.</p>

<p>tags:  <a href="https://beyermatthias.de/tag:linux" class="hashtag"><span>#</span><span class="p-category">linux</span></a> <a href="https://beyermatthias.de/tag:open" class="hashtag"><span>#</span><span class="p-category">open</span></a> source <a href="https://beyermatthias.de/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a> <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> <a href="https://beyermatthias.de/tag:software" class="hashtag"><span>#</span><span class="p-category">software</span></a> <a href="https://beyermatthias.de/tag:tools" class="hashtag"><span>#</span><span class="p-category">tools</span></a> <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/planning-a-log-functionality-refactoring-for-imag</guid>
      <pubDate>Sun, 27 Aug 2017 16:38:17 +0200</pubDate>
    </item>
    <item>
      <title>imag-pim.org - The new website</title>
      <link>https://beyermatthias.de/imag-pim-org-the-new-website</link>
      <description>&lt;![CDATA[The imag-pim.org website just got a new face.&#xA;&#xA;I was really eager to do this becaues the old style was... not that optimal&#xA;(I&#39;m not a web dev, let alone a web designer).&#xA;&#xA;Because the site is now generated using hugo, I also&#xA;copied the &#34;What&#39;s coming up in imag&#34; blog posts over there (I keeping the old&#xA;ones in this blog for not breaking any links).&#xA;New articles will be published on the imag-pim.org&#xA;website.&#xA;&#xA;This very blog article will be published on both sites, of course.&#xA;&#xA;tags:  #linux #open source #rust #software #tools #imag&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>The <a href="https://imag-pim.org">imag-pim.org</a> website just got a new face.</p>

<p>I was really eager to do this becaues the old style was... not that optimal
(I&#39;m not a web dev, let alone a web designer).</p>

<p>Because the site is now generated using <a href="https://gohogo.io">hugo</a>, I also
copied the “What&#39;s coming up in imag” blog posts over there (I keeping the old
ones in this blog for not breaking any links).
New articles will be published on the <a href="https://imag-pim.org">imag-pim.org</a>
website.</p>

<p>This very blog article will be published on both sites, of course.</p>

<p>tags:  <a href="https://beyermatthias.de/tag:linux" class="hashtag"><span>#</span><span class="p-category">linux</span></a> <a href="https://beyermatthias.de/tag:open" class="hashtag"><span>#</span><span class="p-category">open</span></a> source <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> <a href="https://beyermatthias.de/tag:software" class="hashtag"><span>#</span><span class="p-category">software</span></a> <a href="https://beyermatthias.de/tag:tools" class="hashtag"><span>#</span><span class="p-category">tools</span></a> <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/imag-pim-org-the-new-website</guid>
      <pubDate>Sat, 10 Jun 2017 16:38:13 +0200</pubDate>
    </item>
    <item>
      <title>What&#39;s coming up in imag (25)</title>
      <link>https://beyermatthias.de/whats-coming-up-in-imag-25</link>
      <description>&lt;![CDATA[This is the&#xA;25th&#xA;iteration on what happened in the last four weeks in the&#xA;imag project, the text based personal information management suite for the commandline.&#xA;&#xA;!-- more --&#xA;&#xA;small&#xA;&#x9;imag is a personal information management suite for the commandline.&#xA;&#x9;Its target audience are commandline- and power-users.&#xA;&#x9;It does not reimplement personal information management (PIM) aspects, but&#xA;    re-uses existing tools and standards to be an iaddition/i to an existing&#xA;&#x9;workflow, so one does not have to learn a new tool before beeing productive&#xA;&#x9;again.&#xA;    Some simple PIM aspects are implemented as imag modules, though.&#xA;&#x9;It gives the user the power to iconnect/i data from different existing&#xA;&#x9;tools and iadd meta-information/i to these connections, so one can do&#xA;&#x9;data-mining on PIM data.&#xA;/small&#xA;&#xA;What happenend?&#xA;&#xA;Luckily I can write this iteration on imag.&#xA;After we had no blog post about&#xA;the progress in imag in April this year, due to no time on my side, I&#39;m not&#xA;very lucky to be able to report: We had progress in the last 4 (8) weeks!&#xA;&#xA;Lets have a look at the merged PRs (I&#39;m now starting to link to git.imag-pim.org here):&#xA;&#xA;915&#xA;  merged a libruby dependency for travis.&#xA;918&#xA;  removed some compiler warnings.&#xA;917&#xA;  merged some travis enhancements/fixes.&#xA;916&#xA;  superceeded PR #898, which simplified the implementation of the FoldResult&#xA;  extension.&#xA;895&#xA;  started a re-do of the ruby build setup.&#xA;911&#xA;  changed the interface of the StoreId::exists() function to return a&#xA;  Result now.&#xA;904&#xA;  added initial support for annotations in the libimagentrylink library,&#xA;  which gives us the posibility to add annotations to links. There are no&#xA;  tests yet and also no remove functionality.&#xA;921&#xA;  was a cleanup PR for &#xA;  #911&#xA;  which broke master unexpectedly.&#xA;914&#xA;  fixed a compiler warning.&#xA;929&#xA;  removed libimagruby entirely because we couldn&#39;t merge to master because a&#xA;  dependency on master started to fail.&#xA;  The whole ruby thing is a complete mess right now, dependencies are not&#xA;  found, tests fail because of this... it is a mess.&#xA;927&#xA;  removed unused imports.&#xA;924&#xA;  updated links in the readme file.&#xA;926&#xA;  added tests for the StoreId type.&#xA;919&#xA;  merged preparings for the 0.3.0 release, which is overdue for one month&#xA;  right now, because the ruby scripting interface does not work.&#xA;930&#xA;  updated the toml-rs dependency to 0.4, which gives us even more&#xA;  superpowers.&#xA;932&#xA;  added some tests for the configuration parsing functionality.&#xA;933&#xA;  Adds a new dependency: is-match, a library I extracted from the imag&#xA;  source code into a new crate.&#xA;&#xA;The libimagruby mess&#xA;&#xA;Well, this is unfortunate.&#xA;&#xA;libimagruby should be ready for one month by now and usable - and it is (the&#xA;basic things, few things tested also)!&#xA;But as the CI does not work (fuck you travis!) I cannot merge it.&#xA;I also don&#39;t know how to properly package a Ruby gem, so there&#39;s that.&#xA;&#xA;I really hope @malept&#xA;can help me.&#xA;&#xA;I&#39;m already thinking about adding another scripting interface, so I can&#xA;continue and start implementing frontends for imag, for example I&#39;m thinking&#xA;about a lua or ketos interface, still.&#xA;Lua might be the better idea, as there are libraries around for certain&#xA;things, while there are no libraries for ketos (I assume).&#xA;&#xA;What will happen&#xA;&#xA;I honestly don&#39;t know. I will continue working on imag, of course, but right&#xA;now, the libimagruby is stalled.&#xA;I&#39;m not sure where to start working besides libimagruby - a Ruby scripting&#xA;interface is what I need right now, but it won&#39;t work ... so there&#39;s that.&#xA;&#xA;As soon as the Ruby interface is ready, we can have nice things. But right&#xA;now, it is really hard to continue.&#xA;&#xA;tags:  #linux #open source #programming #rust #software #tools #imag&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>This is the
25th
iteration on what happened in the last four weeks in the
<a href="http://imag-pim.org">imag project, the text based personal information management suite for the commandline</a>.</p>



<p><small>
    imag is a personal information management suite for the commandline.
    Its target audience are commandline- and power-users.
    It does not reimplement personal information management (PIM) aspects, but
    re-uses existing tools and standards to be an <i>addition</i> to an existing
    workflow, so one does not have to learn a new tool before beeing productive
    again.
    Some simple PIM aspects are implemented as imag modules, though.
    It gives the user the power to <i>connect</i> data from different existing
    tools and <i>add meta-information</i> to these connections, so one can do
    data-mining on PIM data.
</small></p>

<h1 id="what-happenend" id="what-happenend">What happenend?</h1>

<p>Luckily I can write this iteration on imag.
After we had no blog post about
the progress in imag in April this year, due to no time on my side, I&#39;m not
very lucky to be able to report: We had progress in the last 4 (8) weeks!</p>

<p>Lets have a look at the merged PRs (I&#39;m now starting to link to git.imag-pim.org here):</p>
<ul><li><a href="http://git.imag-pim.org/imag/commit/?id=e615ec040f57b9b4b20f58d623fe32b0e6588257">#915</a>
merged a libruby dependency for travis.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=63faf06bc2774ac309c3783a8eefb286de30e570">#918</a>
removed some compiler warnings.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=6f6368ed2f120fafce94ec07e3abd5061242eb64">#917</a>
merged some travis enhancements/fixes.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=9396accc28a63d280b61e2206320a6b1afeafdc3">#916</a>
superceeded PR #898, which simplified the implementation of the <code>FoldResult</code>
extension.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=6fa281a1a4e0c99b4bcb5a95f016018ef7453cd3">#895</a>
started a re-do of the ruby build setup.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=5b93f3848cb60ae76a450f79b6f3bd984847db0e">#911</a>
changed the interface of the <code>StoreId::exists()</code> function to return a
<code>Result</code> now.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=03f17b8a1c71efc385b645c0db74a5e2f6b9dfd9">#904</a>
added initial support for annotations in the <code>libimagentrylink</code> library,
which gives us the posibility to add annotations to links. There are no
tests yet and also no remove functionality.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=25a35183dd29051a159475f4a18d10de5051387c">#921</a>
was a cleanup PR for
<a href="http://git.imag-pim.org/imag/commit/?id=5b93f3848cb60ae76a450f79b6f3bd984847db0e">#911</a>
which broke master unexpectedly.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=7e3c9467e7b95324f1bc34dc05fb8b33e2a26e90">#914</a>
fixed a compiler warning.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=8eaead5f52894fb5c46fe9e5fbefbbf1d80fd6de">#929</a>
removed <code>libimagruby</code> entirely because we couldn&#39;t merge to master because a
dependency on master started to fail.
The whole ruby thing is a complete mess right now, dependencies are not
found, tests fail because of this... it is a mess.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=241f9752534c2518b160141509914ed7bb1d364e">#927</a>
removed unused imports.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=c74c26ccd143d905c94ecf84ac423293b7170623">#924</a>
updated links in the readme file.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=878162f263b8d90dccbea8b1b82e96e005e04860">#926</a>
added tests for the <code>StoreId</code> type.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=1da56c6d9df689150c94631bbb5147c36070b75c">#919</a>
merged preparings for the 0.3.0 release, which is overdue for one month
right now, because the ruby scripting interface does not work.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=4257ec10268fef06d5888c48f9fc8f9e6f35c5ba">#930</a>
updated the <code>toml-rs</code> dependency to <code>0.4</code>, which gives us even more
superpowers.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=a5857fa64c949c9f2c9dea3036d870bd592272cc">#932</a>
added some tests for the configuration parsing functionality.</li>
<li><a href="http://git.imag-pim.org/imag/commit/?id=4ba19430b754d47fc673164f7db7c1e4e619eb31">#933</a>
Adds a new dependency: <code>is-match</code>, a library I extracted from the imag
source code into a new crate.</li></ul>

<h1 id="the-libimagruby-mess" id="the-libimagruby-mess">The libimagruby mess</h1>

<p>Well, this is unfortunate.</p>

<p><code>libimagruby</code> should be ready for one month by now and usable – and it is (the
basic things, few things tested also)!
But as the CI does not work (fuck you travis!) I cannot merge it.
I also don&#39;t know how to properly package a Ruby gem, so there&#39;s that.</p>

<p>I really hope <strong><a href="https://github.com/matthiasbeyer/imag/pull/925">@malept</a></strong>
can help me.</p>

<p>I&#39;m already thinking about adding another scripting interface, so I can
continue and start implementing frontends for imag, for example I&#39;m thinking
about a lua or ketos interface, still.
Lua might be the better idea, as there are libraries around for certain
things, while there are no libraries for ketos (I assume).</p>

<h1 id="what-will-happen" id="what-will-happen">What will happen</h1>

<p>I honestly don&#39;t know. I will continue working on imag, of course, but right
now, the <code>libimagruby</code> is stalled.
I&#39;m not sure where to start working besides <code>libimagruby</code> – a Ruby scripting
interface is what I need right now, but it won&#39;t work ... so there&#39;s that.</p>

<p>As soon as the Ruby interface is ready, we can have nice things. But right
now, it is really hard to continue.</p>

<p>tags:  <a href="https://beyermatthias.de/tag:linux" class="hashtag"><span>#</span><span class="p-category">linux</span></a> <a href="https://beyermatthias.de/tag:open" class="hashtag"><span>#</span><span class="p-category">open</span></a> source <a href="https://beyermatthias.de/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a> <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> <a href="https://beyermatthias.de/tag:software" class="hashtag"><span>#</span><span class="p-category">software</span></a> <a href="https://beyermatthias.de/tag:tools" class="hashtag"><span>#</span><span class="p-category">tools</span></a> <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/whats-coming-up-in-imag-25</guid>
      <pubDate>Sat, 13 May 2017 16:38:13 +0200</pubDate>
    </item>
    <item>
      <title>What&#39;s coming up in imag (23)</title>
      <link>https://beyermatthias.de/whats-coming-up-in-imag-23</link>
      <description>&lt;![CDATA[This is the&#xA;23th&#xA;iteration on what happened in the last four weeks in the&#xA;imag project, the text based personal information management suite for the commandline.&#xA;&#xA;!-- more --&#xA;&#xA;small&#xA;&#x9;imag is a personal information management suite for the commandline.&#xA;&#x9;Its target audience are commandline- and power-users.&#xA;&#x9;It does not reimplement personal information management (PIM) aspects, but&#xA;    re-uses existing tools and standards to be an iaddition/i to an existing&#xA;&#x9;workflow, so one does not have to learn a new tool before beeing productive&#xA;&#x9;again.&#xA;    Some simple PIM aspects are implemented as imag modules, though.&#xA;&#x9;It gives the user the power to iconnect/i data from different existing&#xA;&#x9;tools and iadd meta-information/i to these connections, so one can do&#xA;&#x9;data-mining on PIM data.&#xA;/small&#xA;&#xA;What happenend?&#xA;&#xA;I&#39;m a bit late this month, I know.&#xA;Anyways, things happened in the imag distribution and I&#39;m eager to write them&#xA;down, so here we go!&#xA;&#xA;In the last four weeks I merged a lot of PRs - 27 actually!&#xA;Here are the most awesome ones:&#xA;&#xA;836&#xA;  eliminated the EntryHeader type entirely from the codebase. We are using&#xA;  toml::Value objects now!&#xA;852&#xA;  was contributed by @mario-kr to enable cargo&#xA;  workspace support! That was a really awesome PR, as it reduced our build times&#xA;  down to ~4 minutes!&#xA;854&#xA;  removed a lot of things (  4k lines) due to the focus-shift to libimagruby&#xA;  (read below)&#xA;871&#xA;  added the ruby build setup (read below)&#xA;872&#xA;  and #873&#xA;  and #874&#xA;  and #892&#xA;  fixed some things to compile with fewer warnings. Awesome!&#xA;878 updated the regex&#xA;  dependency.&#xA;894&#xA;  reverted the changes from #871 as it broke master :-(&#xA;&#xA;Ruby?&#xA;&#xA;Yes, Ruby!&#xA;&#xA;We implemented the libimagruby, which contains Ruby bindings for&#xA;libimagstore.&#xA;So imag can now be programmed in Ruby!&#xA;&#xA;There is a release (0.3.0) in the pipeline (waiting for fixes in cargo), which&#xA;will then contain rudimentary support for programming the store in the wonderful&#xA;Ruby programming language.&#xA;I&#39;ve written about that before&#xA;and now it finally works.&#xA;It is just not released yet.&#xA;&#xA;The next release (0.4.0) will then contain more functionality to program imag,&#xA;including some more bindings for libraries.&#xA;&#xA;I think this will speed up development a bit, as we have more libraries in Ruby&#xA;available.&#xA;&#xA;What&#39;s coming?&#xA;&#xA;Well, I hope to get out 0.3.0 soonish. We have to wait for Cargo, as we ran into&#xA;a bug (misbehaviour) of cargo with the current release.&#xA;As soon as the next cargo version is out I will try to release 0.3.0 and then&#xA;we&#39;ll see...&#xA;&#xA;Of course, I really hope to get some binaries implemented then.&#xA;Starting with imag-diary and imag-mail, but also more advanced things like&#xA;imag-music, imag-calendar and imag-contacts.&#xA;&#xA;tags:  #programming #rust #software #tools #imag&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>This is the
23th
iteration on what happened in the last four weeks in the
<a href="http://imag-pim.org">imag project, the text based personal information management suite for the commandline</a>.</p>



<p><small>
    imag is a personal information management suite for the commandline.
    Its target audience are commandline- and power-users.
    It does not reimplement personal information management (PIM) aspects, but
    re-uses existing tools and standards to be an <i>addition</i> to an existing
    workflow, so one does not have to learn a new tool before beeing productive
    again.
    Some simple PIM aspects are implemented as imag modules, though.
    It gives the user the power to <i>connect</i> data from different existing
    tools and <i>add meta-information</i> to these connections, so one can do
    data-mining on PIM data.
</small></p>

<h1 id="what-happenend" id="what-happenend">What happenend?</h1>

<p>I&#39;m a bit late this month, I know.
Anyways, things happened in the imag distribution and I&#39;m eager to write them
down, so here we go!</p>

<p>In the last four weeks I merged a lot of PRs – 27 actually!
Here are the most awesome ones:</p>
<ul><li><a href="https://github.com/matthiasbeyer/imag/pulls/836">#836</a>
eliminated the <code>EntryHeader</code> type entirely from the codebase. We are using
<code>toml::Value</code> objects now!</li>
<li><a href="https://github.com/matthiasbeyer/imag/pulls/852">#852</a>
was contributed by <a href="https://github.com/mario-kr">@mario-kr</a> to enable cargo
workspace support! That was a really awesome PR, as it reduced our build times
down to ~4 minutes!</li>
<li><a href="https://github.com/matthiasbeyer/imag/pulls/854">#854</a>
removed a lot of things (&gt;4k lines) due to the focus-shift to <code>libimagruby</code>
(read below)</li>
<li><a href="https://github.com/matthiasbeyer/imag/pulls/871">#871</a>
added the ruby build setup (read below)</li>
<li><a href="https://github.com/matthiasbeyer/imag/pulls/872">#872</a>
and <a href="https://github.com/matthiasbeyer/imag/pulls/873">#873</a>
and <a href="https://github.com/matthiasbeyer/imag/pulls/874">#874</a>
and <a href="https://github.com/matthiasbeyer/imag/pulls/892">#892</a>
fixed some things to compile with fewer warnings. Awesome!</li>
<li><a href="https://github.com/matthiasbeyer/imag/pulls/878">#878</a> updated the <code>regex</code>
dependency.</li>
<li><a href="https://github.com/matthiasbeyer/imag/pulls/894">#894</a>
reverted the changes from #871 as it broke master :–(</li></ul>

<h2 id="ruby" id="ruby">Ruby?</h2>

<p>Yes, Ruby!</p>

<p>We implemented the <code>libimagruby</code>, which contains Ruby bindings for
<code>libimagstore</code>.
So imag can now be programmed in Ruby!</p>

<p>There is a release (0.3.0) in the pipeline (waiting for fixes in cargo), which
will then contain rudimentary support for programming the store in the wonderful
Ruby programming language.
I&#39;ve written <a href="/blog/2017/01/17/whats-coming-up-in-imag-22/">about that before</a>
and now it finally works.
It is just not released yet.</p>

<p>The next release (0.4.0) will then contain more functionality to program imag,
including some more bindings for libraries.</p>

<p>I think this will speed up development a bit, as we have more libraries in Ruby
available.</p>

<h1 id="what-s-coming" id="what-s-coming">What&#39;s coming?</h1>

<p>Well, I hope to get out 0.3.0 soonish. We have to wait for Cargo, as we ran into
a bug (misbehaviour) of cargo with the current release.
As soon as the next cargo version is out I will try to release 0.3.0 and then
we&#39;ll see...</p>

<p>Of course, I really hope to get some binaries implemented then.
Starting with <code>imag-diary</code> and <code>imag-mail</code>, but also more advanced things like
<code>imag-music</code>, <code>imag-calendar</code> and <code>imag-contacts</code>.</p>

<p>tags:  <a href="https://beyermatthias.de/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a> <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> <a href="https://beyermatthias.de/tag:software" class="hashtag"><span>#</span><span class="p-category">software</span></a> <a href="https://beyermatthias.de/tag:tools" class="hashtag"><span>#</span><span class="p-category">tools</span></a> <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/whats-coming-up-in-imag-23</guid>
      <pubDate>Mon, 20 Feb 2017 18:41:03 +0100</pubDate>
    </item>
    <item>
      <title>What&#39;s coming up in imag (22)</title>
      <link>https://beyermatthias.de/whats-coming-up-in-imag-22</link>
      <description>&lt;![CDATA[This is the&#xA;22th&#xA;iteration on what happened in the last four weeks in the&#xA;imag project, the text based personal information management suite for the commandline.&#xA;&#xA;!-- more --&#xA;&#xA;small&#xA;&#x9;imag is a personal information management suite for the commandline.&#xA;&#x9;Its target audience are commandline- and power-users.&#xA;&#x9;It does not reimplement personal information management (PIM) aspects, but&#xA;    re-uses existing tools and standards to be an iaddition/i to an existing&#xA;&#x9;workflow, so one does not have to learn a new tool before beeing productive&#xA;&#x9;again.&#xA;    Some simple PIM aspects are implemented as imag modules, though.&#xA;&#x9;It gives the user the power to iconnect/i data from different existing&#xA;&#x9;tools and iadd meta-information/i to these connections, so one can do&#xA;&#x9;data-mining on PIM data.&#xA;/small&#xA;&#xA;What happenend?&#xA;&#xA;My masters courses are hard (time-wise).&#xA;I didn&#39;t manage to do anything at all in the imag codebase.&#xA;I hate it.&#xA;I really want to get imag in a usable shape.&#xA;So here&#39;s what I want to do to make this huge task a bit more achieveable.&#xA;&#xA;Focus shift&#xA;&#xA;I wrote about integrations before.&#xA;I want to shift the focus of my work on imag to develop a Ruby gem from the&#xA;imag functionality.&#xA;This will be the next release.&#xA;I will write either one or several gems with the imag libraries as backend, so&#xA;one can write integrations in Ruby.&#xA;I will do this because I think that the Ruby ecosystem fits the problem pretty&#xA;well.&#xA;&#xA;So what is the problem?&#xA;&#xA;The problem is the following.&#xA;We have a working imag store.&#xA;We have working libraries on top of that &#34;database layer&#34; - namingly tags,&#xA;refs (though they could use some polishing and features) and most importantly&#xA;links (both external and internal).&#xA;&#xA;What we do not have is the whole $tool -  database stuff.&#xA;So we cannot put mails into the store, because we need to parse mails.&#xA;We cannot put calendar data files into the store, because we need to parse&#xA;icalendar.&#xA;We cannot put contacts into the store because we need to parse vcard.&#xA;And so on and so forth.&#xA;&#xA;But the Ruby ecosystem has libraries for all these things.&#xA;&#xA;So the obvious solution is to write a Ruby integration.&#xA;We can then write the simple data-format-transformation tools in Ruby and we&#xA;will be faster implementing it.&#xA;We do not need the guarantees Rust gives us here - they would be nice, but&#xA;they are not necessary!&#xA;&#xA;Later, for querying the store, we can write the simple stuff in Ruby as well&#xA;and the more complex stuff - or the performance-critical parts - in Rust.&#xA;&#xA;How to do the shift?&#xA;&#xA;I guess I will branch-off a major branch for the shift and remove some of the&#xA;functionality which is already in the repository, namingly:&#xA;&#xA;imag-bookmark&#xA;imag-counter&#xA;imag-diary&#xA;imag-mail&#xA;libimagbookmark&#xA;libimagcounter&#xA;libimagdiary&#xA;libimagmail&#xA;libimagnotification&#xA;libimagtodo&#xA;&#xA;These tools implement functionality which would be way better be implemented&#xA;in Ruby.&#xA;&#xA;Clearly, some functionality can be kept.&#xA;We can keep some of the more basic commands:&#xA;&#xA;imag-link&#xA;imag-ref&#xA;imag-store&#xA;imag-tag&#xA;imag-view (though a Ruby tool might come up with way better functionality)&#xA;libimagentrytag&#xA;libimagentryview&#xA;&#xA;And the related libraries will be kept as well:&#xA;&#xA;libimagerror&#xA;libimagref&#xA;libimagrt&#xA;libimagstore&#xA;libimagstorestdhook&#xA;libimagutil&#xA;&#xA;I&#39;m not sure about imag-notes though. A Ruby tool might have better&#xA;functionality for this, though imag-notes works for me pretty well so far,&#xA;so we might keep it, and its library:&#xA;&#xA;imag-notes&#xA;libimagnotes&#xA;&#xA;The other libraries... I&#39;m not sure. Maybe some of the tools listed above need&#xA;them (really... I haven&#39;t looked at the codebase for a long time now cry).&#xA;So maybe we must keep them, maybe we can remove them:&#xA;&#xA;libimagentryedit&#xA;libimagentryfilter&#xA;libimagentrylink&#xA;libimagentrylist&#xA;libimagentrymarkdown&#xA;libimagtimeui&#xA;libimaginteraction&#xA;&#xA;imag.rb&#xA;&#xA;And we will introduce one new crate: imag.rb.&#xA;This will be a ruby crate - so we will use&#xA;ruru to build a Ruby gem out of the&#xA;functionality implemented in the core crates.&#xA;Clearly, the first step would be to put the libimagstore interface into this&#xA;crate (plus its dependencies, libimagerror, libimagutil, ...), but I guess&#xA;it is a good idea to have libimagtag, libimaglink and the functionality of&#xA;the other core-libraries in there as well.&#xA;&#xA;How long?&#xA;&#xA;Your question might be: How long will this take? Well. Yes.&#xA;&#xA;I really don&#39;t know. As said countless times: Masters degree is engaging. I&#xA;hope I can get some things done after my exams (which end mid-february).&#xA;until then - I don&#39;t think I have time to do much things.&#xA;&#xA;Help is appreciated, though!&#xA;&#xA;tags:  #programming #rust #software #tools #imag&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>This is the
22th
iteration on what happened in the last four weeks in the
<a href="http://imag-pim.org">imag project, the text based personal information management suite for the commandline</a>.</p>



<p><small>
    imag is a personal information management suite for the commandline.
    Its target audience are commandline- and power-users.
    It does not reimplement personal information management (PIM) aspects, but
    re-uses existing tools and standards to be an <i>addition</i> to an existing
    workflow, so one does not have to learn a new tool before beeing productive
    again.
    Some simple PIM aspects are implemented as imag modules, though.
    It gives the user the power to <i>connect</i> data from different existing
    tools and <i>add meta-information</i> to these connections, so one can do
    data-mining on PIM data.
</small></p>

<h1 id="what-happenend" id="what-happenend">What happenend?</h1>

<p>My masters courses are hard (time-wise).
I didn&#39;t manage to do anything at all in the imag codebase.
I hate it.
I really want to get imag in a usable shape.
So here&#39;s what I want to do to make this huge task a bit more achieveable.</p>

<h2 id="focus-shift" id="focus-shift">Focus shift</h2>

<p>I wrote about integrations before.
I want to shift the focus of my work on imag to develop a Ruby gem from the
imag functionality.
This will be the next release.
I will write either one or several gems with the imag libraries as backend, so
one can write integrations in Ruby.
I will do this because I think that the Ruby ecosystem fits the problem pretty
well.</p>

<h2 id="so-what-is-the-problem" id="so-what-is-the-problem">So what is the problem?</h2>

<p>The problem is the following.
We have a working imag store.
We have working libraries on top of that “database layer” – namingly tags,
refs (though they could use some polishing and features) and most importantly
links (both external and internal).</p>

<p>What we do <em>not</em> have is the whole <code>$tool -&gt; database</code> stuff.
So we cannot put mails into the store, because we need to parse mails.
We cannot put calendar data files into the store, because we need to parse
icalendar.
We cannot put contacts into the store because we need to parse vcard.
And so on and so forth.</p>

<p>But the Ruby ecosystem has libraries for all these things.</p>

<p>So the obvious solution is to write a Ruby integration.
We can then write the simple data-format-transformation tools in Ruby and we
will be faster implementing it.
We do not need the guarantees Rust gives us here – they would be nice, but
they are not necessary!</p>

<p>Later, for querying the store, we can write the simple stuff in Ruby as well
and the more complex stuff – or the performance-critical parts – in Rust.</p>

<h2 id="how-to-do-the-shift" id="how-to-do-the-shift">How to do the shift?</h2>

<p>I guess I will branch-off a major branch for the shift and remove some of the
functionality which is already in the repository, namingly:</p>
<ul><li>imag-bookmark</li>
<li>imag-counter</li>
<li>imag-diary</li>
<li>imag-mail</li>
<li>libimagbookmark</li>
<li>libimagcounter</li>
<li>libimagdiary</li>
<li>libimagmail</li>
<li>libimagnotification</li>
<li>libimagtodo</li></ul>

<p>These tools implement functionality which would be <em>way</em> better be implemented
in Ruby.</p>

<p>Clearly, some functionality can be kept.
We can keep some of the more basic commands:</p>
<ul><li>imag-link</li>
<li>imag-ref</li>
<li>imag-store</li>
<li>imag-tag</li>
<li>imag-view (though a Ruby tool might come up with way better functionality)</li>
<li>libimagentrytag</li>
<li>libimagentryview</li></ul>

<p>And the related libraries will be kept as well:</p>
<ul><li>libimagerror</li>
<li>libimagref</li>
<li>libimagrt</li>
<li>libimagstore</li>
<li>libimagstorestdhook</li>
<li>libimagutil</li></ul>

<p>I&#39;m not sure about <code>imag-notes</code> though. A Ruby tool might have better
functionality for this, though <code>imag-notes</code> works for me pretty well so far,
so we might keep it, and its library:</p>
<ul><li>imag-notes</li>
<li>libimagnotes</li></ul>

<p>The other libraries... I&#39;m not sure. Maybe some of the tools listed above need
them (really... I haven&#39;t looked at the codebase for a long time now <em>cry</em>).
So maybe we must keep them, maybe we can remove them:</p>
<ul><li>libimagentryedit</li>
<li>libimagentryfilter</li>
<li>libimagentrylink</li>
<li>libimagentrylist</li>
<li>libimagentrymarkdown</li>
<li>libimagtimeui</li>
<li>libimaginteraction</li></ul>

<h2 id="imag-rb" id="imag-rb">imag.rb</h2>

<p>And we will introduce one new crate: <code>imag.rb</code>.
This will be a ruby crate – so we will use
<a href="http://this-week-in-ruru.org/">ruru</a> to build a Ruby gem out of the
functionality implemented in the core crates.
Clearly, the first step would be to put the <code>libimagstore</code> interface into this
crate (plus its dependencies, <code>libimagerror</code>, <code>libimagutil</code>, ...), but I guess
it is a good idea to have <code>libimagtag</code>, <code>libimaglink</code> and the functionality of
the other core-libraries in there as well.</p>

<h2 id="how-long" id="how-long">How long?</h2>

<p>Your question might be: How long will this take? Well. Yes.</p>

<p>I really don&#39;t know. As said countless times: Masters degree is engaging. I
<em>hope</em> I can get some things done after my exams (which end mid-february).
until then – I don&#39;t think I have time to do much things.</p>

<p>Help is appreciated, though!</p>

<p>tags:  <a href="https://beyermatthias.de/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a> <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> <a href="https://beyermatthias.de/tag:software" class="hashtag"><span>#</span><span class="p-category">software</span></a> <a href="https://beyermatthias.de/tag:tools" class="hashtag"><span>#</span><span class="p-category">tools</span></a> <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/whats-coming-up-in-imag-22</guid>
      <pubDate>Tue, 17 Jan 2017 17:41:02 +0100</pubDate>
    </item>
    <item>
      <title>What&#39;s coming up in imag (21)</title>
      <link>https://beyermatthias.de/whats-coming-up-in-imag-21</link>
      <description>&lt;![CDATA[This is the&#xA;21th&#xA;iteration on what happened in the last four weeks in the&#xA;imag project, the text based personal information management suite for the commandline.&#xA;&#xA;!-- more --&#xA;&#xA;small&#xA;&#x9;imag is a personal information management suite for the commandline.&#xA;&#x9;Its target audience are commandline- and power-users.&#xA;&#x9;It does not reimplement personal information management (PIM) aspects, but&#xA;    re-uses existing tools and standards to be an iaddition/i to an existing&#xA;&#x9;workflow, so one does not have to learn a new tool before beeing productive&#xA;&#x9;again.&#xA;    Some simple PIM aspects are implemented as imag modules, though.&#xA;&#x9;It gives the user the power to iconnect/i data from different existing&#xA;&#x9;tools and iadd meta-information/i to these connections, so one can do&#xA;&#x9;data-mining on PIM data.&#xA;/small&#xA;&#xA;What happenend?&#xA;&#xA;Well, as I said before, I have a really busy masters degree to do, so progress&#xA;in imag slowed down a lot.&#xA;Believe me or not, I don&#39;t like that.&#xA;I want to continue to work on imag as much as possible, but right now, I just&#xA;do not have enough time for it.&#xA;&#xA;I have a plan, though.&#xA;&#xA;But first, lets see what happenend in the last four weeks.&#xA;&#xA;PRs/Issues&#xA;&#xA;The following issues and PRs were touched in the last weeks:&#xA;&#xA;764 initialized the work on imag-mail&#xA;838 bumped up the clap version&#xA;839 updated dependencies&#xA;840 works on bulk-import for imag-mail&#xA;841 is a bug report on the behaviour of imag link internal --list&#xA;#842 fixes #841&#xA;843 fixes another small bug in a UI&#xA;844 fixes a typo&#xA;845 adds Makefile support for cargo-outdated&#xA;&#xA;What will happen&#xA;&#xA;Well, I cannot predict the future.&#xA;As Christmas (and 33c3) is coming up, I don&#39;t know how much time I will have&#xA;to work on imag.&#xA;&#xA;But what I want to do: Shift my focus a bit.&#xA;Before I had a kind of Shotgun-Approach: Implement everything, work on&#xA;multiple things all the time.&#xA;I will not do this anymore.&#xA;In fact, I will move issues from the 0.3.0 release to 0.4.0 and so on, shift&#xA;everything by one release.&#xA;That will free the 0.3.0 release and I will focus on one goal in this&#xA;release then: A scripting API.&#xA;&#xA;I want to develop an imag library for writing scripts for imag.&#xA;I think about Ruby, because that&#39;s a language I am familiar with.&#xA;Another option would be Lua.&#xA;I hope I can construct the scripting-API interface in a way so it can be&#xA;re-used to write a Lua interface.&#xA;&#xA;But that will it be for 0.3.0.&#xA;Having a neat scripting API (not low-level but rather high-level) gives us the&#xA;possibility to quickly write simple integrations with tools, for example to&#xA;integrate mails, a wiki or something similar.&#xA;&#xA;I hope that&#39;s a plan.&#xA;0.3.0 is due to March 2017 as far as I remember, so there&#39;s plenty of time for&#xA;this.&#xA;&#xA;My next post will be around mid-january 2017, so I think it is appropriate to&#xA;wish you all a very fine Christmas and a good new year!&#xA;&#xA;tags:  #linux #open source #programming #rust #software #tools #imag&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>This is the
21th
iteration on what happened in the last four weeks in the
<a href="http://imag-pim.org">imag project, the text based personal information management suite for the commandline</a>.</p>



<p><small>
    imag is a personal information management suite for the commandline.
    Its target audience are commandline- and power-users.
    It does not reimplement personal information management (PIM) aspects, but
    re-uses existing tools and standards to be an <i>addition</i> to an existing
    workflow, so one does not have to learn a new tool before beeing productive
    again.
    Some simple PIM aspects are implemented as imag modules, though.
    It gives the user the power to <i>connect</i> data from different existing
    tools and <i>add meta-information</i> to these connections, so one can do
    data-mining on PIM data.
</small></p>

<h1 id="what-happenend" id="what-happenend">What happenend?</h1>

<p>Well, as I said before, I have a really busy masters degree to do, so progress
in imag slowed down <em>a lot</em>.
Believe me or not, I don&#39;t like that.
I want to continue to work on imag as much as possible, but right now, I just
do not have enough time for it.</p>

<p>I have a plan, though.</p>

<p>But first, lets see what happenend in the last four weeks.</p>

<h2 id="prs-issues" id="prs-issues">PRs/Issues</h2>

<p>The following issues and PRs were touched in the last weeks:</p>
<ul><li><a href="https://github.com/matthiasbeyer/imag/pull/764">#764</a> initialized the work on <code>imag-mail</code></li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/838">#838</a> bumped up the <code>clap</code> version</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/839">#839</a> updated dependencies</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/840">#840</a> works on bulk-import for <code>imag-mail</code></li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/841">#841</a> is a bug report on the behaviour of <code>imag link internal --list</code></li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/842">#842</a> fixes <a href="https://github.com/matthiasbeyer/imag/pull/841">#841</a></li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/843">#843</a> fixes another small bug in a UI</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/844">#844</a> fixes a typo</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/845">#845</a> adds <code>Makefile</code> support for <code>cargo-outdated</code></li></ul>

<h1 id="what-will-happen" id="what-will-happen">What will happen</h1>

<p>Well, I cannot predict the future.
As Christmas (and 33c3) is coming up, I don&#39;t know how much time I will have
to work on imag.</p>

<p><strong>But</strong> what I want to do: Shift my focus a bit.
Before I had a kind of Shotgun-Approach: Implement everything, work on
multiple things all the time.
I will not do this anymore.
In fact, I will move issues from the 0.3.0 release to 0.4.0 and so on, shift
everything by one release.
That will free the 0.3.0 release and I will focus on <em>one</em> goal in this
release then: A scripting API.</p>

<p>I want to develop an imag library for writing scripts for imag.
I think about Ruby, because that&#39;s a language I am familiar with.
Another option would be Lua.
I hope I can construct the scripting-API interface in a way so it can be
re-used to write a Lua interface.</p>

<p>But that will it be for 0.3.0.
Having a neat scripting API (not low-level but rather high-level) gives us the
possibility to quickly write simple integrations with tools, for example to
integrate mails, a wiki or something similar.</p>

<p>I hope that&#39;s a plan.
0.3.0 is due to March 2017 as far as I remember, so there&#39;s plenty of time for
this.</p>

<p>My next post will be around mid-january 2017, so I think it is appropriate to
wish you all a very fine Christmas and a good new year!</p>

<p>tags:  <a href="https://beyermatthias.de/tag:linux" class="hashtag"><span>#</span><span class="p-category">linux</span></a> <a href="https://beyermatthias.de/tag:open" class="hashtag"><span>#</span><span class="p-category">open</span></a> source <a href="https://beyermatthias.de/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a> <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> <a href="https://beyermatthias.de/tag:software" class="hashtag"><span>#</span><span class="p-category">software</span></a> <a href="https://beyermatthias.de/tag:tools" class="hashtag"><span>#</span><span class="p-category">tools</span></a> <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/whats-coming-up-in-imag-21</guid>
      <pubDate>Fri, 16 Dec 2016 16:37:56 +0100</pubDate>
    </item>
    <item>
      <title>What&#39;s coming up in imag (20)</title>
      <link>https://beyermatthias.de/whats-coming-up-in-imag-20</link>
      <description>&lt;![CDATA[Another 14 days vanished quickly as hell.&#xA;&#xA;Read what happened in the imag codebase in the last 14 days, in this&#xA;20th&#xA;iteration on whats coming up in [imag, the text based personal information&#xA;management suite for the commandline](http://imag-pim.org).&#xA;&#xA;Also, I have some changes to this series of blog posts. Read about it here as&#xA;well.&#xA;&#xA;!-- more --&#xA;&#xA;small&#xA;&#x9;imag is a personal information management suite for the commandline.&#xA;&#x9;Its target audience are commandline- and power-users.&#xA;&#x9;It does not reimplement personal information management (PIM) aspects, but&#xA;    re-uses existing tools and standards to be an iaddition/i to an existing&#xA;&#x9;workflow, so one does not have to learn a new tool before beeing productive&#xA;&#x9;again.&#xA;    Some simple PIM aspects are implemented as imag modules, though.&#xA;&#x9;It gives the user the power to iconnect/i data from different existing&#xA;&#x9;tools and iadd meta-information/i to these connections, so one can do&#xA;&#x9;data-mining on PIM data.&#xA;/small&#xA;&#xA;The past&#xA;&#xA;In the past two weeks, we got almost nothing done, honestly.&#xA;We had four pull requests and no new issues.&#xA;Why is that?&#xA;Well, most of the PRs are mine as well as most of the issues are opened by me.&#xA;And I have a hell lot to do with my masters degree.&#xA;Also, I want to write pull requests to the&#xA;rust-vobject&#xA;crate to give it a high-level interface to be able to write my calendar and&#xA;contacts module with it.&#xA;This is, as you might think, a nontrivial task and therefor take some time as&#xA;well.&#xA;&#xA;We had one new contributor though.&#xA;Thanks to&#xA;Steven Allen&#xA;for&#xA;PR #834.&#xA;&#xA;That&#39;s why we didn&#39;t have that much progress.&#xA;I will sum it up here:&#xA;&#xA;834 optimized one point in&#xA;  libimagutil where I opened one file twice. Thanks again, Steven Allen, for&#xA;  the contribution!&#xA;835 moved the&#xA;  functionality of the EntryHeader (the querying by string in the header&#xA;  toml data structure) to a new libimagstore module, so the module&#xA;  libimagstore::store does only contain a minimal EntryHeader type for&#xA;  backwards compatibility.&#xA;836 eliminates the&#xA;  EntryHeader type completely and replaces it by toml::Value, its inner&#xA;  type. This is not completed at the time of writing.&#xA;837 adds older compilers&#xA;  to the CI setup for travis.&#xA;&#xA;The future&#xA;&#xA;Lets see what will happen in the next four weeks.&#xA;&#xA;Yes, that&#39;s right.&#xA;I will do...&#xA;&#xA;Less updates&#xA;&#xA;I will slow down this blogging series.&#xA;This was the 20th iteration on the subject, so I already do this for 40 weeks&#xA;now.&#xA;I will now slow this down and only post every four weeks about imag.&#xA;Partly because my masters degree is really time consuming, partly because I&#xA;already planned this beforehand.&#xA;Every four weeks will be enough, I guess.&#xA;I&#39;m not sure whether I will continue include all PRs and issues or only the&#xA;major ones.&#xA;We&#39;ll see.&#xA;&#xA;Plans&#xA;&#xA;For the next four weeks I plan to get some functionality into&#xA;rust-vobject.&#xA;I will then start to implement imag-contact and I hope to get some progress&#xA;with imag-mail, but I cannot promise anything.&#xA;&#xA;tags:  #linux #open source #programming #rust #software #tools #imag&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Another 14 days vanished quickly as hell.</p>

<p>Read what happened in the imag codebase in the last 14 days, in this
20th
iteration on whats coming up in <a href="http://imag-pim.org">imag, the text based personal information
management suite for the commandline</a>.</p>

<p>Also, I have some changes to this series of blog posts. Read about it here as
well.</p>



<p><small>
    imag is a personal information management suite for the commandline.
    Its target audience are commandline- and power-users.
    It does not reimplement personal information management (PIM) aspects, but
    re-uses existing tools and standards to be an <i>addition</i> to an existing
    workflow, so one does not have to learn a new tool before beeing productive
    again.
    Some simple PIM aspects are implemented as imag modules, though.
    It gives the user the power to <i>connect</i> data from different existing
    tools and <i>add meta-information</i> to these connections, so one can do
    data-mining on PIM data.
</small></p>

<h1 id="the-past" id="the-past">The past</h1>

<p>In the past two weeks, we got almost nothing done, honestly.
We had four pull requests and no new issues.
Why is that?
Well, most of the PRs are mine as well as most of the issues are opened by me.
And I have a hell lot to do with my masters degree.
Also, I want to write pull requests to the
<a href="https://github.com/untitaker/rust-vobject">rust-vobject</a>
crate to give it a high-level interface to be able to write my calendar and
contacts module with it.
This is, as you might think, a nontrivial task and therefor take some time as
well.</p>

<p>We had one new contributor though.
Thanks to
<a href="https://github.com/Stebalien">Steven Allen</a>
for
<a href="https://github.com/matthiasbeyer/imag/pull/834">PR #834</a>.</p>

<p>That&#39;s why we didn&#39;t have that much progress.
I will sum it up here:</p>
<ul><li><a href="https://github.com/matthiasbeyer/imag/pull/834">834</a> optimized one point in
<code>libimagutil</code> where I opened one file twice. Thanks again, Steven Allen, for
the contribution!</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/835">835</a> moved the
functionality of the <code>EntryHeader</code> (the querying by string in the header
toml data structure) to a new <code>libimagstore</code> module, so the module
<code>libimagstore::store</code> does only contain a minimal <code>EntryHeader</code> type for
backwards compatibility.</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/836">836</a> eliminates the
<code>EntryHeader</code> type completely and replaces it by <code>toml::Value</code>, its inner
type. This is not completed at the time of writing.</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/837">837</a> adds older compilers
to the CI setup for travis.</li></ul>

<h1 id="the-future" id="the-future">The future</h1>

<p>Lets see what will happen in the next four weeks.</p>

<p>Yes, that&#39;s right.
I will do...</p>

<h2 id="less-updates" id="less-updates">Less updates</h2>

<p>I will slow down this blogging series.
This was the 20th iteration on the subject, so I already do this for 40 weeks
now.
I will now slow this down and only post every four weeks about imag.
Partly because my masters degree is really time consuming, partly because I
already planned this beforehand.
Every four weeks will be enough, I guess.
I&#39;m not sure whether I will continue include all PRs and issues or only the
major ones.
We&#39;ll see.</p>

<h2 id="plans" id="plans">Plans</h2>

<p>For the next four weeks I plan to get some functionality into
<a href="https://github.com/untitaker/rust-vobject">rust-vobject</a>.
I will then start to implement <code>imag-contact</code> and I hope to get some progress
with <code>imag-mail</code>, but I cannot promise anything.</p>

<p>tags:  <a href="https://beyermatthias.de/tag:linux" class="hashtag"><span>#</span><span class="p-category">linux</span></a> <a href="https://beyermatthias.de/tag:open" class="hashtag"><span>#</span><span class="p-category">open</span></a> source <a href="https://beyermatthias.de/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a> <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> <a href="https://beyermatthias.de/tag:software" class="hashtag"><span>#</span><span class="p-category">software</span></a> <a href="https://beyermatthias.de/tag:tools" class="hashtag"><span>#</span><span class="p-category">tools</span></a> <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/whats-coming-up-in-imag-20</guid>
      <pubDate>Fri, 18 Nov 2016 16:37:56 +0100</pubDate>
    </item>
    <item>
      <title>What&#39;s coming up in imag (19)</title>
      <link>https://beyermatthias.de/whats-coming-up-in-imag-19</link>
      <description>&lt;![CDATA[Another 14 days vanished quickly as hell.&#xA;&#xA;Read what happened in the imag codebase in the last 14 days, in this&#xA;19th&#xA;iteration on whats coming up in [imag, the text based personal information&#xA;management suite for the commandline](http://imag-pim.org).&#xA;&#xA;!-- more --&#xA;&#xA;small&#xA;&#x9;imag is a personal information management suite for the commandline.&#xA;&#x9;Its target audience are commandline- and power-users.&#xA;&#x9;It does not reimplement personal information management (PIM) aspects, but&#xA;    re-uses existing tools and standards to be an iaddition/i to an existing&#xA;&#x9;workflow, so one does not have to learn a new tool before beeing productive&#xA;&#x9;again.&#xA;    Some simple PIM aspects are implemented as imag modules, though.&#xA;&#x9;It gives the user the power to iconnect/i data from different existing&#xA;&#x9;tools and iadd meta-information/i to these connections, so one can do&#xA;&#x9;data-mining on PIM data.&#xA;/small&#xA;&#xA;The past&#xA;&#xA;We have more than 150 stars now! Wow!&#xA;&#xA;Besides that we had really not that much progress in the last 14 days.&#xA;My masters degree keeps me busy all day long and I really have a hard time with&#xA;all the things I have to do for my courses, so progress slows down way more&#xA;than I expected.&#xA;But I can&#39;t change that, so ...&#xA;&#xA;PRs merged/closed in the last 14 days&#xA;&#xA;821 imported commits from&#xA;  our v0.2.0 release branch into the master branch.&#xA;822 updates our&#xA;  dependencies. Luckily this worked without too much hassle. Still, we had&#xA;  some problems while updating. We only had to update&#xA;  a method from itertools which was removed. We also had to update&#xA;  task-hookrs as both imag and task-hookrs depend on uuid and they&#xA;  really should depend on the same version of uuid, so I updated&#xA;  task-hookrs to the latest uuid, which in fact included some code removal&#xA;  in the codebase of task-hookrs. This was because uuid depends (and we&#xA;  also need it) on serde, which was update from 0.7. to 0.8.. As serde&#xA;  included some new awesome things, we were able to remove some code in&#xA;  task-hookrs.&#xA;823&#xA;827 implements PartialEq&#xA;  on StoreId, which is a really neat improvement in my opinion. We&#xA;  derive()d it before, but we now only compare the local part of the&#xA;  StoreId object (read: The store-part, not the path to the store itself,&#xA;  which could be absent sometimes, causing weird bugs).&#xA;828&#xA;829&#xA;831&#xA;&#xA;Also, two really old PRs were closed. I do not list older PRs normally, but&#xA;these two are really noteworthy:&#xA;&#xA;624 included cargo&#xA;  workspace support in our build setup. I&#39;m not sure it works the way I&#xA;  expected it to, as (for example) clap gets rebuild several times... but at&#xA;  least cargo doesn&#39;t yell at us anymore, so I included it.&#xA;656 sets the codegen units&#xA;  for rustc to 2. I hope we get slightly better build times on travis from&#xA;  that.&#xA;&#xA;PRs opened in the last 14 days and not yet closed&#xA;&#xA;824&#xA;826 bakes in shell&#xA;  completion generation for all the imag- tools&#xA;832 - now, this is a&#xA;  really great PR from mario-kr. Mario found a&#xA;  way to build shell completion for all the imag tools, starting at the&#xA;  imag binary itself. I did not even think about this as solution, but it&#xA;  works and I&#39;m willing to merge this as soon as Mario did some cleanup work&#xA;  in the PR.&#xA;  What he did is: He include()d all ui.rs files, where we (more or less by&#xA;  accident) always used the same function name to build the clap:App:&#xA;  buildui(App) -  App. He includes these source files via a neat macro as&#xA;  sub modules and is then able to call all these buildui functions to build&#xA;  a App object (with subcommands for each imag module). From that App&#xA;  object, he can retrieve the bash/fish/zsh completion (at build time). This&#xA;  is awesome!&#xA;833&#xA;&#xA;Issues opened and already closed&#xA;&#xA;As far as I see, we had no issues opened in the last 14 days that were also&#xA;closed within theses two weeks.&#xA;&#xA;Maybe in the next iteration again.&#xA;&#xA;The future&#xA;&#xA;Lets have a quick look what the future might bring us in the imag codebase.&#xA;&#xA;Issues opened and not yet closed&#xA;&#xA;830 was our only issue&#xA;  we opened in the last 14 days. It wants a rewrite of all the .sh scripts&#xA;  we use to test binaries. These scripts really should be rewritten in Rust,&#xA;  we now have the ability to do tests in-memory, so there shouldn&#39;t be any&#xA;  issues with implementing these things in Rust. It is really a trivial task&#xA;  (not for a complete rust beginner IMO), so I&#39;ll not start implementing this&#xA;  soon, so others can step up.&#xA;&#xA;Other things&#xA;&#xA;As said above, I have a lot to do for my masters degree, so I cannot tell how&#xA;much we can get done in the next two weeks.&#xA;I&#39;d love to see some progress with the email module, so we can merge this one&#xA;at least, but I cannot promise it, sadly.&#xA;&#xA;This does not mean I&#39;m not interested in imag anymore. I&#39;m interested even&#xA;more in it. I just do not have enough time at the moment to do all the things&#xA;I want to do.&#xA;&#xA;tags:  #linux #open source #programming #rust #software #tools #imag&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Another 14 days vanished quickly as hell.</p>

<p>Read what happened in the imag codebase in the last 14 days, in this
19th
iteration on whats coming up in <a href="http://imag-pim.org">imag, the text based personal information
management suite for the commandline</a>.</p>



<p><small>
    imag is a personal information management suite for the commandline.
    Its target audience are commandline- and power-users.
    It does not reimplement personal information management (PIM) aspects, but
    re-uses existing tools and standards to be an <i>addition</i> to an existing
    workflow, so one does not have to learn a new tool before beeing productive
    again.
    Some simple PIM aspects are implemented as imag modules, though.
    It gives the user the power to <i>connect</i> data from different existing
    tools and <i>add meta-information</i> to these connections, so one can do
    data-mining on PIM data.
</small></p>

<h1 id="the-past" id="the-past">The past</h1>

<p>We have more than 150 stars now! Wow!</p>

<p>Besides that we had really not that much progress in the last 14 days.
My masters degree keeps me busy all day long and I really have a hard time with
all the things I have to do for my courses, so progress slows down way more
than I expected.
But I can&#39;t change that, so ...</p>

<h2 id="prs-merged-closed-in-the-last-14-days" id="prs-merged-closed-in-the-last-14-days">PRs merged/closed in the last 14 days</h2>
<ul><li><a href="https://github.com/matthiasbeyer/imag/pull/821">821</a> imported commits from
our <code>v0.2.0</code> release branch into the master branch.</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/822">822</a> updates our
dependencies. Luckily this worked without <em>too</em> much hassle. Still, we had
some problems while updating. We only had to update
a method from <code>itertools</code> which was removed. We also had to update
<code>task-hookrs</code> as both <code>imag</code> and <code>task-hookrs</code> depend on <code>uuid</code> and they
really should depend on the same version of <code>uuid</code>, so I updated
<code>task-hookrs</code> to the latest <code>uuid</code>, which in fact included some code removal
in the codebase of <code>task-hookrs</code>. This was because <code>uuid</code> depends (and we
also need it) on <code>serde</code>, which was update from <code>0.7.*</code> to <code>0.8.*</code>. As serde
included some new awesome things, we were able to remove some code in
<code>task-hookrs</code>.</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/823">823</a></li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/827">827</a> implements <code>PartialEq</code>
on <code>StoreId</code>, which is a really neat improvement in my opinion. We
<code>derive()</code>d it before, but we now only compare the <code>local</code> part of the
<code>StoreId</code> object (read: The store-part, not the path to the store itself,
which could be absent sometimes, causing weird bugs).</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/828">828</a></li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/829">829</a></li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/831">831</a></li></ul>

<p>Also, two <em>really</em> old PRs were closed. I do not list older PRs normally, but
these two are really noteworthy:</p>
<ul><li><a href="https://github.com/matthiasbeyer/imag/pull/624">624</a> included cargo
workspace support in our build setup. I&#39;m not sure it works the way I
expected it to, as (for example) <code>clap</code> gets rebuild several times... but at
least cargo doesn&#39;t yell at us anymore, so I included it.</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/656">656</a> sets the codegen units
for <code>rustc</code> to <code>2</code>. I hope we get slightly better build times on travis from
that.</li></ul>

<h2 id="prs-opened-in-the-last-14-days-and-not-yet-closed" id="prs-opened-in-the-last-14-days-and-not-yet-closed">PRs opened in the last 14 days and not yet closed</h2>
<ul><li><a href="https://github.com/matthiasbeyer/imag/pull/824">824</a></li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/826">826</a> bakes in shell
completion generation for all the <code>imag-*</code> tools</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/832">832</a> – now, this is a
really great PR from <a href="https://github.com/mario-kr">mario-kr</a>. Mario found a
way to build shell completion for <em>all</em> the imag tools, starting at the
<code>imag</code> binary itself. I did not even think about this as solution, but it
works and I&#39;m willing to merge this as soon as Mario did some cleanup work
in the PR.
What he did is: He <code>include()</code>d all <code>ui.rs</code> files, where we (more or less by
accident) always used the same function name to build the <code>clap:App</code>:
<code>build_ui(App) -&gt; App</code>. He includes these source files via a neat macro as
sub modules and is then able to call all these <code>build_ui</code> functions to build
a <code>App</code> object (with subcommands for each imag module). From that <code>App</code>
object, he can retrieve the bash/fish/zsh completion (at build time). This
is awesome!</li>
<li><a href="https://github.com/matthiasbeyer/imag/pull/833">833</a></li></ul>

<h2 id="issues-opened-and-already-closed" id="issues-opened-and-already-closed">Issues opened and already closed</h2>

<p>As far as I see, we had no issues opened in the last 14 days that were also
closed within theses two weeks.</p>

<p>Maybe in the next iteration again.</p>

<h1 id="the-future" id="the-future">The future</h1>

<p>Lets have a quick look what the future might bring us in the imag codebase.</p>

<h2 id="issues-opened-and-not-yet-closed" id="issues-opened-and-not-yet-closed">Issues opened and not yet closed</h2>
<ul><li><a href="https://github.com/matthiasbeyer/imag/issues/830">830</a> was our only issue
we opened in the last 14 days. It wants a rewrite of all the <code>*.sh</code> scripts
we use to test binaries. These scripts really should be rewritten in Rust,
we now have the ability to do tests in-memory, so there shouldn&#39;t be any
issues with implementing these things in Rust. It is really a trivial task
(not for a complete rust beginner IMO), so I&#39;ll not start implementing this
soon, so others can step up.</li></ul>

<h2 id="other-things" id="other-things">Other things</h2>

<p>As said above, I have a lot to do for my masters degree, so I cannot tell how
much we can get done in the next two weeks.
I&#39;d love to see some progress with the email module, so we can merge this one
at least, but I cannot promise it, sadly.</p>

<p>This does <em>not</em> mean I&#39;m not interested in imag anymore. I&#39;m interested even
more in it. I just do not have enough time at the moment to do all the things
I want to do.</p>

<p>tags:  <a href="https://beyermatthias.de/tag:linux" class="hashtag"><span>#</span><span class="p-category">linux</span></a> <a href="https://beyermatthias.de/tag:open" class="hashtag"><span>#</span><span class="p-category">open</span></a> source <a href="https://beyermatthias.de/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a> <a href="https://beyermatthias.de/tag:rust" class="hashtag"><span>#</span><span class="p-category">rust</span></a> <a href="https://beyermatthias.de/tag:software" class="hashtag"><span>#</span><span class="p-category">software</span></a> <a href="https://beyermatthias.de/tag:tools" class="hashtag"><span>#</span><span class="p-category">tools</span></a> <a href="https://beyermatthias.de/tag:imag" class="hashtag"><span>#</span><span class="p-category">imag</span></a></p>
]]></content:encoded>
      <guid>https://beyermatthias.de/whats-coming-up-in-imag-19</guid>
      <pubDate>Fri, 04 Nov 2016 17:37:55 +0100</pubDate>
    </item>
  </channel>
</rss>