<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>nek0's blog</title>
    <link href="https://blog.nek0.eu/atom.xml" rel="self" />
    <link href="https://blog.nek0.eu" />
    <id>https://blog.nek0.eu/atom.xml</id>
    <author>
        <name>nek0</name>
        
        <email>nek0@nek0.eu</email>
        
    </author>
    <updated>2025-08-10T00:00:00Z</updated>
    <entry>
    <title>Restructuring</title>
    <link href="https://blog.nek0.eu/posts/2025-08-10-Restructuring.html" />
    <id>https://blog.nek0.eu/posts/2025-08-10-Restructuring.html</id>
    <published>2025-08-10T00:00:00Z</published>
    <updated>2025-08-10T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks,</p>
<p>As you might have noticed I’ve put some effort in restructuring my web presence a little bit. I now
have a proper <a href="https://nek0.eu">landing page</a> from where you can reach information about (almost)
everything I do. I hope this helps with navigating.</p>
<p>I’ve been postponing this for quite some time now due to stupid perfectionism shenanigans. But it’s
done now.</p>
<p>More news about art will come (hopefully) soon.</p>
<p>Keep calm and wash your paws.</p>]]></summary>
</entry>
<entry>
    <title>And how plans turn out…</title>
    <link href="https://blog.nek0.eu/posts/2025-08-05-And-how-plans-turn-out%E2%80%A6.html" />
    <id>https://blog.nek0.eu/posts/2025-08-05-And-how-plans-turn-out%E2%80%A6.html</id>
    <published>2025-08-05T00:00:00Z</published>
    <updated>2025-08-05T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks.</p>
<p>There’s this expression saying “even the best plan does not survive the first contact with reality”.</p>
<p>This is very much true for my plans I presented in <a href="https://blog.nek0.eu/posts/2025-06-24-Plans.html">my previous post</a>. I did manage to do some
work on my comic but by far not as much as I hoped I would. This forces me to reevaluate.</p>
<p>In reality I am already spread pretty thin across multiple projects and endeavours, my comic being
only one of them, although a very important one for me.</p>
<p>This means I won’t be able to increase my release frequency any time soon, which in turn also
affects the size of the back buffer of pages I need. I won’t be needing as many pages as I initially
had planned.</p>
<p>To also create a little more accountability for me, I strongly consider to do regular streams while
I work on the comic. If and when those streams come will be announced later.</p>
<p>I wish I had better news, but this is still good news.</p>
<p>Keep calm and wash your paws.</p>]]></summary>
</entry>
<entry>
    <title>Plans</title>
    <link href="https://blog.nek0.eu/posts/2025-06-24-Plans.html" />
    <id>https://blog.nek0.eu/posts/2025-06-24-Plans.html</id>
    <published>2025-06-24T00:00:00Z</published>
    <updated>2025-06-24T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks,</p>
<p>I guess you come here to learn the latest news about my comic. You may have followed my updates
on <a href="https://chaos.social/@nek0">Mastodon</a> about the progress I made with planning and layouting chapter three of
<a href="https://comics.nek0.eu/remnants/">my webcomic</a>.</p>
<p>I have laid out 41 pages of comic for chapter 3. This is more pages than the published parts of the
comic combined, which sum up to 30 pages. This may look like an insurmountable task to draw all
these pages and publish them in a timely manner (it sure did to me). After some well-deserved rest
I looked again at the task at hand and tried to divide it up into workable tasks. I made a plan.</p>
<p>The problem with me and plans is, that I tend to make too strict plans and try to adhere to them
despite my limitations and disabilities, beating myself up mentally when I fail to meet the
unrealistic goals and expectations I set myself. So this time I try to make things differently. I
don’t want to be a cause of bad mental health states any longer.</p>
<p>My current plan has a testing period of about a month (4 weeks to be precise) in which I want to
have finished 5 pages of comic. This seems like a reasonable amount for me to accomplish, but it’s
not a hard requirement. After these four weeks of testing I will see, how many pages I actually
finished and project from there, how long it will take me to build a reasonable buffer of finished
pages.</p>
<p>If all goes well, I’ll have about 30 pages done by the end of the year, which would be a great
starting point for resuming a publishing schedule for my comic by the beginning of 2026. Depending
on the pace of drawing I will have picked up by then, I consider releasing pages more frequently
than I did with the previous chapters, but that is yet to be determined.</p>
<p>So much for my plans for my comic’s future. I’ll keep you in the loop with updates. See you here
again in about 4 weeks.</p>
<p>Keep calm and wash your paws.</p>]]></summary>
</entry>
<entry>
    <title>Long time no see</title>
    <link href="https://blog.nek0.eu/posts/2024-05-05-Long-time-no-see.html" />
    <id>https://blog.nek0.eu/posts/2024-05-05-Long-time-no-see.html</id>
    <published>2024-05-05T00:00:00Z</published>
    <updated>2024-05-05T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there!</p>
<p>It’s been a while – almost a year – since my last blog post. That’s a little embarrassing for me
to be honest.</p>
<p>But I wasn’t idle the whole time. <a href="https://comics.nek0.eu/remnants/">My webcomic</a> has been steadily growing since then. You
may read well into chapter 2 at the moment and I’m about to wrap up drawing the last panels of this
chapter so I can start preparing the chapter 3.</p>
<p>I also have other projects, as you may know. I’m still active in game development, where I started
writing a multiplayer game in Haskell last November and hope to finish it by December this year.
There are still my older Haskell gamedev projects around, but they are shelved at the moment.</p>
<p>Apart from Haskell gamedev, I also started dabbling in Rust gamedev and aim to create an adventure
game out of a story idea I initially had intended to work out as a comic.</p>
<p>Another nice thing I came to do around in the past year is taking piano lessons. It’s has been 14
years since I had my last one and boy, am I rusty. I’m very glad the initial frustration has faded
quickly and I’m having fun learning new stuff again.</p>
<p>So I find ways to keep myself busy, as you can see. The projects are so many and tightly packed,
that I started blocking out time for them in a separate calendar some weeks ago. This serves the
purpose to answer the ubiquitous question “What am I going to do today?” and not being paralyzed by
the sheer amount of choices.</p>
<p>This allocation of my free time has worked quite well since I put it in place and it’s nice seeing
the progress on the projects. I tend to procrastinate a lot less since then.</p>
<p>That’s all for this update. I want to return to my old goal to post at least once a month here.
Additionally I want to make small weekly updates over on <a href="https://chaos.social/@nek0">Mastodon</a>.</p>
<p>So until then.</p>
<p>Keep calm and wash your paws.</p>]]></summary>
</entry>
<entry>
    <title>What about the comic?</title>
    <link href="https://blog.nek0.eu/posts/2023-09-10-What-about-the-comic%3F.html" />
    <id>https://blog.nek0.eu/posts/2023-09-10-What-about-the-comic%3F.html</id>
    <published>2023-09-10T00:00:00Z</published>
    <updated>2023-09-10T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there!</p>
<p>I slowly begin to feel like a scratched record as I talk about me making a comic. But hey, I’m
actually making a comic that is out there and people can read it. And they do. If you are
interested, you can read it <a href="https://comics.nek0.eu/remnants/">on its own webpage</a>. This blog post can wait a little longer.</p>
<p>Actually I haven’t posted any new pages since July, because the first chapter of the comic is
concluded and I needed a well-deserved break and some time to figure out my future plans. Now, two
months later, I can tell you what I figured out.</p>
<p>The good news: The story will continue. As I was gradually releasing pages from the first chapter
into the web I was already working on the pages for the second chapter. I even posted some sneak
peeks of it on my <a href="/contact.html">social media</a>. The story for the entire comic is also already written,
so I can disclose the fact, that there is a total sum of eleven chapters planned.</p>
<p>The sad news: I can and will only work on the comic in my free time from my day job next to my
other hobbies. This means the upload schedule of one page per month will not change. At least for
now. I’ll let you all know if that changes.</p>
<p>Because I’m spending so much time drawing, be it comic related or not, I have been thinking about
doing art streams. Those would, if I would draw comic related stuff on stream, of course contain
spoilers. This kinda deters me from doing those streams, as to not lessen your surprise and
anticipation. But I guess I’ll figure something out for those, who are willing to be spoiled and
also for those who prefer not to. But whatever comes out of the still nebulous idea, you’ll hear
about it from me.</p>
<p>And now for the actual announcement: I’m planning to resume posting new pages in December. I hope
You can wait that long, but I need to make sure everything is ready by then.</p>
<p>So much for this blog post. Have a nice time.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>A big anniversary</title>
    <link href="https://blog.nek0.eu/posts/2023-07-28-A-big-anniversary.html" />
    <id>https://blog.nek0.eu/posts/2023-07-28-A-big-anniversary.html</id>
    <published>2023-07-28T00:00:00Z</published>
    <updated>2023-07-28T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks!</p>
<p>I recently had a look inside the <a href="/archive.html">archive</a> of this blog and was quite surprised to
find out I have been maintaining it for 10 years now. That’s quite a long time for human standards.</p>
<p>On this occasion I started to reminisce about the past ten years and the ups and downs I had in
this period of time. There are very mixed feelings when looking into the past and even more when
trying to tell the future.</p>
<p>I feel like I have lost my purpose of being somewhere along the way, but the one I had was not
doing me good either. It gave me a direction whereas now I feel aimless, but it wore me down to
the bone and made me neglect myself. Nowadays I still have the tendency to disregard my own needs
– old habits die hard – but i’m no longer peer-pressured into thinking that it’s alright and
that I need to wear me down even more to succeed. On the contrary even, my friends point out my
flawed thinking and convince me to take care of myself.</p>
<p>Speaking of friends, I feel thankful for the people in my life. Those I keep contact with from
long before and those who came along during the journey. The diversity of life reflected in them
and all the different experiences I have had with them tought me a lot. Often I feel guilty of
being a burden to them…</p>
<p>Change is probably the one lasting constant of life. I hope to change for the better in the future
and never lose my passions.</p>
<p>Ten years ago I wouldn’t have dared to make up characters and stories to share them publicly.
Nowadays I’m publishing <a href="https://comics.nek0.eu/remnants/">my own webcomic</a>, where the first chapter has just been
completed and the second one is about to get ready for release. And I have ideas and plans for
more chapters to come.</p>
<p>Excuse me my rambling in this blog post. It’s just something that occupied my mind lately.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Getting above of things</title>
    <link href="https://blog.nek0.eu/posts/2023-05-16-Getting-above-of-things.html" />
    <id>https://blog.nek0.eu/posts/2023-05-16-Getting-above-of-things.html</id>
    <published>2023-05-16T00:00:00Z</published>
    <updated>2023-05-16T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi, it’s me again.</p>
<p>I thought I’d give you a little update about the things I’ve been up to in the past month or so
since I posted my last blog post.</p>
<p>I actually managed to use some time periods I usually would spend online or working on my projects
at least mentally to wind down a little. For that purpose I looked at some mangas and settled for
“Spy x Family” and boy am I sold on this series. I’m still in the first half of the second issue and
I’m enjoying it more than I had anticipated. I really do recommend this manga series.</p>
<p>My little hiatus from drawing did not last long, because I could not handle my imagination present
me with beautiful ideas for either redraws of old art or even new art ideas. Unfortunately for my
ongoing comic project the ideas I had go into completely different directions. On the other hand I
might have drawn my best drawings so far.</p>
<p>To distract me a little from my urge to draw I started working on my vulkan renderer in Haskell
again, which made some good progress thanks to my renewed passion for it. I optimized some data
handling between CPU and GPU and also am able to load and display textures, but UV maps don’t work
yet and I need to figure out why. But here’s a little video of it’s current capabilities:</p>
<video controls="true">
<source src="/vids/2023-05-16.webm" type="video/webm" />
</video>
<p>I hope soon to be able to actually use this renderer and continue with my game projects, where I
might have gained a new idea…</p>
<p>This is what I’ve been up to so far. I hope to make blog posts a more regular thing again in the
future. See you soon.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>There is a problem</title>
    <link href="https://blog.nek0.eu/posts/2023-04-26-There-is-a-problem.html" />
    <id>https://blog.nek0.eu/posts/2023-04-26-There-is-a-problem.html</id>
    <published>2023-04-26T00:00:00Z</published>
    <updated>2023-04-26T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there!</p>
<p>It’s surely been a while again since I posted something on my blog. I owe you an apology for that.
I have had blog posts I want to write on my mind for some time now, but I never actually got to
execute any of those ideas due to me being too busy.</p>
<p>I am very busy. To name just a few of the things I do: I have work, I have my ongoing comic, I have
ideas for further comics, I draw other stuff, I dabble in Haskell game development, I do photography
and so on and so forth. I don’t do these things all at once, but still it’s a lot.</p>
<p>Lately I’ve had problems drawing new pages for my ongoing comic. Not because I didn’t enjoy thinking
about it any more or I was fed up with the story or the characters. At first I thought it was
because it was always the same project and I needed to spice my drawing time up a little with other
drawings than the comic. But the problem is deeper.</p>
<p>I have been struggling with mental health problems for more than half of my life now and all these
projects on top of my regular dayjob are taking their toll, which I’m slowly beginning to feel.</p>
<p>Over the course of the past years I somehow managed to un-learn a very important activity: I forgot
how to relax. I can’t remember when I last sat down with a good book or comic and read it for the
sake of just reading it. The same goes for watching a movie or an episode of a series. I used to be
playing video games.</p>
<p>I didn’t fully realize I had a problem until very recently, when a friend called me for emotional
support. They told me they are about to burn out. During our conversation they told me some of
the early warning signs they had experienced and I was immediately reminded of myself and the
situation I am in at the moment.</p>
<p>This warrants some changes I need to make to take proper care of myself. I want to re-learn how to
relax and spend time “doing nothing” without havig a bad conscience. Since the amount of time in a
day or a week is limited, this means I need to cut back on other activities in my free time, which
has been mostly taken over by drawing and related activities. This does not mean I’m droppping
drawing and my comic projects altogether, but there is a hiatus coming soon.</p>
<p>On a technical side note: You might have noticed the new design of my blog. I overhauled it because
I have grown increasingly discontent with the old design. I hope you like it. Let me know what you
think.</p>]]></summary>
</entry>
<entry>
    <title>Long overdue updates</title>
    <link href="https://blog.nek0.eu/posts/2022-12-11-Long-overdue-updates.html" />
    <id>https://blog.nek0.eu/posts/2022-12-11-Long-overdue-updates.html</id>
    <published>2022-12-11T00:00:00Z</published>
    <updated>2022-12-11T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks,</p>
<p>Merry Holidays! I sincerely hope you have some relaxed days at the end of this year and get to spend
also some time with people close to you.</p>
<p>I’ve been quite busy in the past months getting up to speed with my job, my personal projects and
everyday life.</p>
<p>As you might have seen, I have been constantly updating <a href="https://comics.nek0.eu/remnants">my comic</a> since may and have
already begun working on the second chapter, from which I sometimes post glimpses on
<a href="https://chaos.social/@nek0">my Mastodon account</a>. I am making good progress, but the update speed will remain the same
for the foreseeable future, as the time I can work on the comic is limited and I don’t want to run
through my backbuffer of pages too fast. Making this comic is definitely one of the most
challenging projects I have ever begun, but I’m having loads of fun doing it and I’m constantly
learning new stuff and improve my technique. It’s also very interesting and satisfying to see the
evolution and refinement of my art style in the course of this project.</p>
<p>Drawing in general has become a very dear hobby of mine in the past three years where I
particularly like, how it engages a more creative and emotional side of me. I kind of wish I hadn’t
been ashamed of being creative in the first place.</p>
<p>Because of my comic and partially also my work my pursuits in gamedev have slowed down
significantly. My games have not had any significant updates for quite some time now, as I am in the
process of learning to use the <a href="https://www.vulkan.org/">vulkan graphics API</a> with the goal of rewriting the
graphics pipelines of my games to use this new standard instead of OpenGL, which is on its way to
deprecation. So far my progress has been good while working through the
<a href="https://www.vkguide.dev/">vkguide vulkan tutorial</a> to build a simple renderer. Like most gamedev tutorials handling
raw graphics code it is written in C++, so I’m making the effort of translating it into Haskell.
You can see my progress as I complete the chapters <a href="https://gitea.nek0.eu/nek0/vulkan-tutorial">in my code repository</a>. Here’s also a
small visual representation of my current state:</p>
<video controls="true">
<source src="/vids/2022-12-11.webm" type="video/webm" />
</video>
<p>So this is what I have been up to in the past months. Lots of different stuff.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Step by step</title>
    <link href="https://blog.nek0.eu/posts/2022-08-07-Step-by-step.html" />
    <id>https://blog.nek0.eu/posts/2022-08-07-Step-by-step.html</id>
    <published>2022-08-07T00:00:00Z</published>
    <updated>2022-08-07T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks,</p>
<p>I thought it’s time for a little update and changes that happened and will happen.</p>
<p>First off some technical changes that happened in the background of all my pages: Roughly a year
ago I decided to install and configure <a href="https://matomo.org">matomo</a> to get some metrics about my
readership. I tried to use it for a year and tried to understand the graphs and numbers it threw at
me, Also the maintainance effort rose, as the software seems to be rather unstable. I always
managed to recover it, but a rather nasty outage convinced me, that the software might be both a
bad fit for me and a disservice on you.</p>
<p>I underwent what now I see as a failed experiment with a little bit of a bad conscience, as I
usually am very against the tracking of people, not only on the internet, but in general and only
managed to justify that to me as I would host the service myself and not share the data anywhere.
So I did basically a 180 degree turn, purged matomo from my server and now I resort to analyzing
the log files of my web server using the application <a href="htps://goaccess.io">goaccess</a>. Additionally
I configured the web server to not store the IP addresses and the user agent strings for any
request. As a bonus the reports generated by goaccess appear more meaningful to me than the matomo
reports ever looked.</p>
<p>Secondly, my treatment in hospital came to an end about a month ago and I am slowly returning to
my old job since then. As you can see I still maintain my upload schedule for my comic, but
unfortunately producing new pages has been slowed down a bit. This will not affect the upload
schedule for the time being, as my buffer of finished pages is still large enough. I hope to return
to my old pace of producing new pages soon. I just need to sort some stuff out and get accustomed
to working a dayjob again.</p>
<p>So far for this very overdue update from me. I also plan on posting more frequently again here and
already have two ideas for blog posts forming in my head, which I hope will be very helpful each in
their own way.</p>
<p>See you around.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>My comic is out there!</title>
    <link href="https://blog.nek0.eu/posts/2022-05-21-My-comic-is-out-there%21.html" />
    <id>https://blog.nek0.eu/posts/2022-05-21-My-comic-is-out-there%21.html</id>
    <published>2022-05-21T00:00:00Z</published>
    <updated>2022-05-21T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks,</p>
<p>Long time no see. About half a year, to be precise.
A lot has happened in that time.</p>
<p>Good news first: My comic is out there. I released it two weeks ago, but did not find the time to
make a proper announcement here, but those of you ho follow me on <a href="https://twitter.com/rys_ostrovid">Twitter</a> and/or
<a href="https://chaos.social/@nek0">Mastodon</a> May have read the news as it was fresh(er). Overall reception seemed good so far,
but feel free to tell me your opinions on it. I would be very interested in constructive feedback
of any kind.</p>
<p>If you are interested, You can read the comic on <a href="https://comics.nek0.eu/remnants/">its own website</a>. I will progressively
upload a new page every month as I work on the next parts of the comic.</p>
<p>Why so slow updates?</p>
<p>This is a fair question, which brings me to the bad news: I am currently in hospital (again) and
getting better again. During the holidays my mental helath took a sharp downturn and I finally
managed to start treatment in march. I kept on drawing, but with a slower pace. So to avoid further
malicious stress from my comic i chose to make the update schedule very slow.</p>
<p>WIth all that said, I wish you all a nice summertime, enjoy the warm days and stay tuned for more
comic pages.</p>
<p>See you soon (hopefully).</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Progress!</title>
    <link href="https://blog.nek0.eu/posts/2021-12-16-Progress%21.html" />
    <id>https://blog.nek0.eu/posts/2021-12-16-Progress%21.html</id>
    <published>2021-12-16T00:00:00Z</published>
    <updated>2021-12-16T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there!</p>
<p>Once again I have to apologise for not having updated my blog in such a long
time. But here I am and I’m trying my best to summarise what has happened so
far.</p>
<p>Long story short: I was busy. Very busy.</p>
<p>I expected drawing a comic alongside my dayjob would be dificult and time
consuming, especially if I wanted to finish it in the foreseeable future. I
shelved my other projects, especially the gamedev ones, so I would have the
focus needed for this. I’m not entirely happy with this arrangement, since I
also enjoy doing gamedev, but I can’t draw a comic and shave a yak at the same
time.</p>
<p>So I set out to draw the first comic out of the upcoming series and started out
with the storyboards and used those later to create page layouts. I did several
iterations on the layouts until I was satisfied. Before that I did not know for
sure, how many pages the comic would even have. After that I started with the
actual drawing. I did that for a month without a schedule, because I did not
know how fast or slow I would progress.</p>
<p>To my surprise I made progress quite quickly and was able to put out around a
page a week. A great help in this regard also was the decision to keep the
comic mostly in grayscale. With this data I could make a rough estimate and set
myself a reasonable schedule. I expect to be finished with the first comic
around the end of February next year.</p>
<p>Since I would like my comic to be actually read by people, I also dod some
research on how to promote it, once it’s out. There were several options, but in
the end I am going to apply at the webcomic collective <a href="https://spiderforest.com">SpiderForest</a> and
already joined their Discord community to get to know each other.</p>
<p>So much for what hapened in the past two months or so. Now you ,ay have a sneak
peek at the comic itself:</p>
<p><img src="/images/2021-12-16-01.png" title="picture of an antspider" /></p>
<p>With all that I wish you also merry christmas and a good start into the new
year.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>One step further ahead</title>
    <link href="https://blog.nek0.eu/posts/2021-10-05-One-step-further-ahead.html" />
    <id>https://blog.nek0.eu/posts/2021-10-05-One-step-further-ahead.html</id>
    <published>2021-10-05T00:00:00Z</published>
    <updated>2021-10-05T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there!</p>
<p>Some time hase passed since my last update and there has been some great
progress. First off: The story outline for my comic or rather series of short
comics is finished!</p>
<p>While being occupied with other things like work, event planning and my ever
returning mental health issues I was unable to work on the story of my comic
very much. What I was able to do, was to draw some reference for one of my main
characters, which led to me drawing a lot (about 20) different facial
expressions of this character for practicing conveying emotions better, which
had been a problem before.</p>
<p>After that I explored a little bit the options of how to color my comic and
came to the conclusion, that most of the comic will be black &amp; white, since
this mode of (not) coloring leads to faster production of pages. Shadows will
be handled as simple cel-shading using semitones as well as hints of color
values. Special pages or panels will be in full colour though.</p>
<p>The nicest breakthrough with my comic happened just this weekend, where I was
able to sit down with my older brother and discuss the story a bit. I already
had a good beginning and a fairly decent ending, but my middle part was still
an unsolidified mess of ideas for possible events.</p>
<p>The process was quite simple in retrospective: I began telling my brother the
story as far as I had it from the beginning and whenever I reached a point of
unsolidified ideas or outright plot holes he would ask critical questions and
we would discuss possible solutions to the problem at hand. A great help in
this whole process was, that my brother at this point was not very well
acquainted with the story, so he head an unbiased and uninformed view on the
whole construct.</p>
<p>The resulting story outline is shorter than I had expected, but it is in
a way the “minimum viable product” to tell the story. Now that the story is
more or less defined and in place I can begin drawing storyboards and layouts
for the individual pages. As always: nothing is set in stone. I might deviate
from the story outline spontaneously during the drawing step, but at least I
have a plan with a finite scope.</p>
<p>So much for this update. I hope to keep you updated here and on my
<a href="https://art.nek0.eu">art portfolio</a> without spoiling too much of the story.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>The long silence</title>
    <link href="https://blog.nek0.eu/posts/2021-09-10-The-long-silence.html" />
    <id>https://blog.nek0.eu/posts/2021-09-10-The-long-silence.html</id>
    <published>2021-09-10T00:00:00Z</published>
    <updated>2021-09-10T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Heya!</p>
<p>It’s been a long time since I posted anything here, which by no means is the
end of this blog or my art journey. Instead I am preparing my next steps while
going through some changes in my life.</p>
<p>I reached a turning point in life with the end of my apprenticeship as IT
specialist for applications development and got transitioned into a job almost
instantly. To get settled in with the job, company, commute and everything else
that comes with it I gave myself four weeks, which are now coming to an end.</p>
<p>The other point is my preparation for something bigger. For the past year I
have been developing story and characters for a series of comics if gradually
increasing intensity. This takes up quite a bit of my free time I would usually
spend drawing or pursuing my other hobbies where I instead write my script or
devour tutorial after tutorial on how to publish webcomics. And lastly I’m
drawing drawing reference material for said comics, which I don’t really want
to publish right now, as it might contain spoilers.</p>
<p>Also my game development projects came to a halt in that time. In that little
time I spent with it I started remodeling the physics “engine” I wrote to a
be based on forces applied to objects and calculated to accelerations,
velocities and movement instead of the other way round. I’m also using some good
literature on that topic: <a href="https://www.oreilly.com/library/view/physics-for-game/9781449361037/">“Physics for game developers”</a> by Brian
Bywalec and David Bourg, which I found to be a good introductory book into the
topic which transitions into more advanced topics rather nicely.</p>
<p>So in conclusion: yes, I am still out here, drawing and plotting. Expect to get
nice things to look at. I sincerely hope it will be rather sooner than later.</p>]]></summary>
</entry>
<entry>
    <title>Bumping things up</title>
    <link href="https://blog.nek0.eu/posts/2021-07-25-Bumping-things-up.html" />
    <id>https://blog.nek0.eu/posts/2021-07-25-Bumping-things-up.html</id>
    <published>2021-07-25T00:00:00Z</published>
    <updated>2021-07-25T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there,</p>
<p>As my apprenticeship slowly winds down and comes to an end, I have found the
time again to work on “Pituicat”. This time I tackled the problem of
interacting with movable objects. This was all possible due to the friendly
Haskell GameDev community on Discord, which gave me valuable hints here and
there, when I needed them.</p>
<p>This meant another rework on the collision handling side of the code, so I had
to break the collectible powerups, but I hope to get them back shortly.</p>
<p>Also I changed the way player movement is handled. I used to apply the move
velocity as a physical velocity before doing collision checks, which tended to
backfire and cause random breakage and unforeseen behaviour, especially when
applying velocity updates after collision. Then just shortly I got the valuable
hint, that player movement should not be really applied as a physical force but
rather “hacked in”. This I managed to do, which now saves me a lot of headache
when updating the player’s velocity.</p>
<p>I rendered a short Video of some interaction between the player and placed
objects on the map. Vertical interactions work well, as you can see, but
horizontal still need work, which is why I chose to ommit them here.</p>
<video controls="true">
<source src="/vids/2021-07-25.webm" type="video/webm" />
</video>
<p>I am quite happy to make progress on this project, no matter how small that
progress seems to be.</p>
<p>As always, you can look into the code and game design documents in
<a href="https://gitea.nek0.eu/nek0/pituicat">the project’s gitea repository</a>.</p>
<p>I wish you all a pleasant sommer. Don’t melt.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Hacking my XP-Pen drawing tablets</title>
    <link href="https://blog.nek0.eu/posts/2021-06-27-Hacking-my-XP-Pen-drawing-tablets.html" />
    <id>https://blog.nek0.eu/posts/2021-06-27-Hacking-my-XP-Pen-drawing-tablets.html</id>
    <published>2021-06-27T00:00:00Z</published>
    <updated>2021-06-27T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there,</p>
<p>Long time no see. I am currently quite busy finishing my apprenticeship so my
free time suffers a bit, but my goal is now in reach. Only my oral exam is left
to pass and then I will be done.</p>
<p>So today I want to write about some hardware issues I had with my drawing
tablets and which I solved thanks to
<a href="https://www.davidrevoy.com/article842/review-of-the-xp-pen-artist-24-pro-on-linux">this blog post by David Revoy</a>.</p>
<p>I have been drawing digitally a lot in my free time and thus own at least one
drawing tablet. I stuck with the brand “XP-Pen” as they seem to have a fairly
good quality for a reasonable price. Also they seem to support linux (at least
in their own strange way). They do ship a driver for their tablets, which is
proprietary and needs to run in the background all the time and seems not to
be able to remember its settings (at least not on my <a href="https://nixos.org">NixOS</a>).</p>
<p>So up until recently I was bound to work with what worked out of the box with
Deco Pro M, which was most of the functionality it provided, even the pen tilt
was recognized out of the box. The only things I was missing was making a
right-click with my pen, assigning the hotkeys on my tablet and mapping the
tablet to a specific Display on a multi monitor setup.</p>
<p>This is where David’s blog post enters the stage, where he provides a detailed
guide on how to set up a XP-Pen Artist 24 drawing monitor in linux without
using the proprietary driver. I was able to extrapolate from that and adjust my
<code>/etc/nixos/configuration.nix</code> to configure my tablet according to my needs.</p>
<p>What I want to try with this blog post is to provide a more general guide on
how to configure most, if not any, XP-Pen drawing tablets or monitors on NixOS.</p>
<h2 id="the-procedure">The procedure</h2>
<p>First of all, You need to find out the identifier for your tablet. with the
tablet plugged into the USB port, run <code>lsusb</code> (which is part of the <code>usbutils</code>
package). You should get some lines of output with an entry similar to this one:</p>
<pre><code>Bus 001 Device 005: ID 28bd:0904 XP-Pen 11 inch PenTablet</code></pre>
<p>The <code>28bd:0904</code> is the ID we are looking for. Note that the part after the
colon varies from device to device, so don’t just copy&amp;paste.</p>
<p>Now we enter the realm of the configuration. First of all, we need to enable
the digimend driver with the following settings:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode nix"><code class="sourceCode nix"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>services<span class="op">.</span>xserver<span class="op">.</span>digimend<span class="op">.</span>enable = <span class="cn">true</span>;</span></code></pre></div>
<p>Now we move on to having the wacom driver actually manage the XP-Pen devices.
For this we have to add rules to the <code>Xorg.conf</code>, which is conveniently handled
like this:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode nix"><code class="sourceCode nix"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>services<span class="op">.</span>xserver<span class="op">.</span>inputClassSections = <span class="op">[</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>  <span class="st">&#39;&#39;</span></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="st">    Identifier &quot;XP-Pen 11 inch PenTablet&quot;</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="st">    MatchUSBID &quot;28bd:0904&quot;</span></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="st">    MatchIsTablet &quot;on&quot;</span></span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a><span class="st">    MatchDevicePath &quot;/dev/input/event*&quot;</span></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a><span class="st">    Driver &quot;wacom&quot;</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a><span class="st">  &#39;&#39;</span></span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a>  <span class="st">&#39;&#39;</span></span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a><span class="st">    Identifier &quot;XP-Pen 11 inch PenTablet&quot;</span></span>
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a><span class="st">    MatchUSBID &quot;28bd:0904&quot;</span></span>
<span id="cb3-12"><a href="#cb3-12" aria-hidden="true" tabindex="-1"></a><span class="st">    MatchIsKeyboard &quot;on&quot;</span></span>
<span id="cb3-13"><a href="#cb3-13" aria-hidden="true" tabindex="-1"></a><span class="st">    MatchDevicePath &quot;/dev/input/event*&quot;</span></span>
<span id="cb3-14"><a href="#cb3-14" aria-hidden="true" tabindex="-1"></a><span class="st">    Driver &quot;libinput&quot;</span></span>
<span id="cb3-15"><a href="#cb3-15" aria-hidden="true" tabindex="-1"></a><span class="st">  &#39;&#39;</span></span>
<span id="cb3-16"><a href="#cb3-16" aria-hidden="true" tabindex="-1"></a><span class="op">]</span>;</span></code></pre></div>
<p>These two sections match to my tablet, so alter all occurences of the lines
<code>Identifier</code> and <code>MatchUSBID</code> to match your device, otherwise it will not work.</p>
<p>With this you tell your system to let the wacom driver handle all tablet input
it can handle, everything else will be interpreted as a keyboard by <code>libinput</code>,
which includes all the hotkeys on your tablet, if you have any.</p>
<p>Now comes the fun part mapping the upper stylus button to be a right-click. For
this we need to analyse the input of the stylus using <code>evtest</code> (which is
contained within the package of the same name). With root permissions we run
<code>evtest</code> and see output containing lines similar to this:</p>
<pre><code>...
/dev/input/event21:	11 inch PenTablet Mouse
/dev/input/event22:	11 inch PenTablet Keyboard
/dev/input/event23:	11 inch PenTablet
...
Select the device event number [0-23]: </code></pre>
<p>Select the device without <code>Mouse</code> or <code>Keyboard</code>, so <code>23</code> in this example.</p>
<p>You will get an overview of all input events supported by this device and when
you bring your stylus near the pad it should pick up all movements and button
presses you make and print them onto the console. To abort this testing, press
<code>Ctrl</code> + <code>C</code> on your keyboard.</p>
<p>Depending on your device, the output of the stylus test will produce a lot of
output, because all position and tilt changes will be recorded onto the console.
what we are looking for though is the input of the upper stylus button, so
press it a few times trying to hold the pen as steady as possible and abort
shortly after your button presses.</p>
<p>Now you need to look for specific lines in the console output, which will look
somewhat like this:</p>
<pre><code>Event: time 1624813216.995575, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0045</code></pre>
<p>The most important keyword here is the <code>code 4 (MSC_SCAN)</code>, so search for that,
and note the value behind it. In this case it is <code>d0045</code>. This value, by the
way, seems to be the standard value for the right-click with XP-Pen tablets,
as it is the same with all three tablets or monitors I have set up with this
method so far.</p>
<p>After we extracted the right-click value of the stylus, let’s return to our
configuration file and add the following option:</p>
<div class="sourceCode" id="cb6"><pre class="sourceCode nix"><code class="sourceCode nix"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>services<span class="op">.</span>udev<span class="op">.</span>extraHwdb = <span class="st">&#39;&#39;</span></span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="st">  evdev:input:b0003v28BDp0904e0100-e0*</span></span>
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a><span class="st">    KEYBOARD_KEY_d0045=0x14c</span></span>
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a><span class="st">&#39;&#39;</span>;</span></code></pre></div>
<p>This rule will do the actual remapping of the button press on the stylus to
right-click. Note, that the USB-ID of your device is present in here too,
so change this line so it matches your device:</p>
<pre><code>evdev:input:b0003v&lt;vendor-id&gt;p&lt;product-id&gt;e0100-e0*</code></pre>
<p>The line below contains the value of the upper stylus button (<code>d0045</code>) and maps
it to the right-click value (<code>0x14c</code>).</p>
<p>Congratulations. You just configured right-click on your stylus.</p>
<p>To map your hotkeys on your tablet, you need to run <code>evtest</code> again, but this
time you want to test the device with the keyboard description. Press your
hotkeys and note the values behind the <code>code 4 (MSC_SCAN)</code> lines.</p>
<p>Then remap the values to your desired keys. Note that not all hotkeys support
multikey bindings, but only those emitting multiple different keypress codes.</p>
<p>I hope this tutorial is helpful for you in any way. If you feel that I missed
something or need some clarification, just get in touch and I will expand this
article as needed.</p>
<p>Keep calm and wash hands.</p>
<h2 id="errata-and-addenda">Errata and Addenda</h2>
<h3 id="how-to-map-your-tablet-input-to-a-specific-monitor">How to map your tablet input to a specific monitor</h3>
<p>I completely forgot to write about this part. The most generic way to do this
is to find out the ID of your stylus via <code>xinput</code>, and then the number of the
graphics output you want to map it to using <code>xrandr --listactivemonitors</code>.
You are interested in the number prefacing the monitor/connection descriptor.</p>
<p>After accomplishing this, you enter the following command:</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="ex">xinput</span> map-to-output <span class="op">&lt;</span>Stylus-ID<span class="op">&gt;</span> HEAD-<span class="op">&lt;</span>Output-No<span class="op">&gt;</span></span></code></pre></div>
<h3 id="wrong-driver-activation">Wrong driver activation</h3>
<p>In the article I stated to enable the wacom driver, which actually is not
absolutely needed, but I forgot to mention the digimend driver,
Which is activated by this setting:</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode nix"><code class="sourceCode nix"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>services<span class="op">.</span>xserver<span class="op">.</span>digimend<span class="op">.</span>enable = <span class="cn">true</span>;</span></code></pre></div>
<p>The according section in the article has also been corrected.</p>]]></summary>
</entry>
<entry>
    <title>Onwards to Powerups!</title>
    <link href="https://blog.nek0.eu/posts/2021-05-02-Onwards-to-Powerups%21.html" />
    <id>https://blog.nek0.eu/posts/2021-05-02-Onwards-to-Powerups%21.html</id>
    <published>2021-05-02T00:00:00Z</published>
    <updated>2021-05-02T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi again!</p>
<p>after the last update I wanted to try implementing something I was a bit
anxious about: Powerups. They were quite a wildcard until then, sonce i didn’t
know how to implement neither the interaction with them nor how effects would
be communicated or even passed on to the player.</p>
<p>Turns out my worries have been ungrounded. Implementing everything was quite a
breeze. Picking them up uses the collision detection system already present, I
only needed to alter the collision reaction. Powerups are their own type using
an enum to define the stored effect. very straightforward. Upon collision with
the player the effect is passed unto the player with a given amount of time how
long the effect lasts. Finally even the powerups present on the map have a time
to live and despawn when their time runs out.</p>
<p>I also started to make some minor tweaks, like the player character looking
in the direction they move. but see for yourself:</p>
<video controls="true">
<source src="/vids/2021-05-02.webm" type="video/webm" />
</video>
<p>The first smaller pituicat is a powerup granting more speed for 5 seconds. The
other one is just a test with collision objects which are not part of the map
definition. I am quite pleased with these results, but I see, that I now need
to work more on visuals to make things on screen more understandable.</p>
<p>At this point I want to stress, how powerful <a href="https://ffmpeg.org">ffmpeg</a> is. The above
video was generated from an OpenGL API trace. If I had known this before, it
would have saved me tons of worries trying setting up a finicky recording
system, which was the cause for the lack of a nice showcase video in the last
update.</p>
<p>All the progress on the code is, as always, for you to see in the
<a href="https://gitea.nek0.eu/nek0/pituicat">gitea repository</a></p>
<p>With all that said, I wish you all happy hacking!</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Bounce 'n' slither</title>
    <link href="https://blog.nek0.eu/posts/2021-04-17-Bounce-%27n%27-slither.html" />
    <id>https://blog.nek0.eu/posts/2021-04-17-Bounce-%27n%27-slither.html</id>
    <published>2021-04-17T00:00:00Z</published>
    <updated>2021-04-17T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>The say “Third time’s the charm”. They may be wrong…</p>
<p>To be honest: I lost track of how often I tinkered on my collision
detection and collision response algorithms, but I have rewritten them
from scratch at least four times. At least so my counter on the branch
names says…</p>
<p>But after all this wailing and gnashing of teeth and lots of hair
pulled, I may finally have a universally working solution for the game.</p>
<p>What helped me to find this solution? One part distance and one part
perseverance. I actually did not have the time and mental capacity to
pursue this project a lot since the last update. My apprenticeship is
coming to an end and I’m busy coding my final project and writing its
documentation.</p>
<p>There’s been going on a lot with my life: I applied for jobs (and
found myself a really neat one), had some hospital visits (nothing
too serious, so no need to worry) and also pursuing art. So I
distanced myself a little from my game.</p>
<p>But every now and then I would still look at it, and at least try to
fix the issue regarding my collision detection. So tonight, after a
longer stretch of not working on the game, I looked at it again and
finally found the flaw in my algorithm. Fixing it and cleaning the
whole mess around it was then only a question of time.</p>
<p>So now I wish you all a good morning and happy hacking, I need to
return to my more mundane projects now.</p>
<p>As always: <a href="https://gitea.nek0.eu/nek0/pituicat">Feel free to look at what I’ve done so far</a>.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>And yet it moves</title>
    <link href="https://blog.nek0.eu/posts/2021-01-14-And-yet-it-moves.html" />
    <id>https://blog.nek0.eu/posts/2021-01-14-And-yet-it-moves.html</id>
    <published>2021-01-14T00:00:00Z</published>
    <updated>2021-01-14T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there!</p>
<p>development on my game has been a little slow lately due to health issues, but
I still managed to get something new working. This time I focused a little bit
on user input, to make this game actually somewhat interactive.</p>
<p>In the process of implementing rudimentary user controls using already
prepared plumbing from my engine I found some errors in the detection and
handling of collisions, so I had to rework that completely.</p>
<p>Physics implementations are hard, as far as my limited experience goes, but I
hope I did it at least halfway right this time. But see for yourselves:</p>
<video controls="true">
<source src="/vids/2021-01-14.webm" type="video/webm" />
</video>
<p>There is still a long way to go to the game I have in mind, but it feels good
make even those small steps in the right direction.</p>
<p>If you are curious about how the physics are actually implemented, go check
out the code from <a href="https://gitea.nek0.eu/nek0/pituicat">the repository</a>. I hope everything is quite
understandable there.</p>
<p>See you next time.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Gravity and collision</title>
    <link href="https://blog.nek0.eu/posts/2021-01-02-Gravity-and-collision.html" />
    <id>https://blog.nek0.eu/posts/2021-01-02-Gravity-and-collision.html</id>
    <published>2021-01-02T00:00:00Z</published>
    <updated>2021-01-02T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hello and first of all a happy new year 2021!</p>
<p>It’s been only a little while since I last worked on my latest game. I took the
time between Christmas and New Year to dive again into the depths of code.</p>
<p>Following the rough roadmap I have in my head I am trying to get the game to
become finally interactive, but being a platformer, this has some prerequisites
on basic physics and collision detection and collision handling. So I prepared
again a lot of reusable plumbing, implemented all the necessary functions
and tied it all together nicely to play along with the already existing parts
of the game. Here is a small video of the result:</p>
<video controls="true">
<source src="/vids/2021-01-02.mp4" type="video/mp4" />
</video>
<p>Again, it does not look like much, but I am very happy about this result.
Although I will surely have to tweak the collision reaction more, but it is a
good start, so I believe.</p>
<p>Next up will be handling of input events including, but not lmited to, keyboard
key presses to control the player. After that I will hopefully be ready to fill
the game with actual content.</p>
<p>As always, you may check out the code of the game and its progress
<a href="https://gitea.nek0.eu/nek0/pituicat">in its repository</a>. I try to leave as many helpful comments and
documentation as possible while programming, but if anything is unclear, you
need further explanation or just want to talk about the game or any other
interesting topic, do not hesitate to contact me <a href="mailto:nek0@nenk0.eu">via email</a> or any
other means listed <a href="https://nek0.eu/contact.html">on my contact page</a>.</p>
<p>So much for this update. I hope I will be able to continue to work on this game
shortly.</p>
<p>Until then, keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Player ready</title>
    <link href="https://blog.nek0.eu/posts/2020-12-23-Player-ready.html" />
    <id>https://blog.nek0.eu/posts/2020-12-23-Player-ready.html</id>
    <published>2020-12-23T00:00:00Z</published>
    <updated>2020-12-23T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hello again and welcome to my little corner of the internet.</p>
<p>Between some christmas preparations and work I was able to squeeze in also some
development time on my game again with some visible results.</p>
<p>Most of the time I was preparing plumbing again for static objects (called
“Props”) and interactable entities (called “Actors”) to be displayed on top of
their according layer of residence.</p>
<p>After having the plumbing ready I created an entity for the player to be
displayed and this was the result:</p>
<figure>
<img src="/images/2020-12-23_preview.png" alt="Screenshot" />
<figcaption aria-hidden="true">Screenshot</figcaption>
</figure>
<p>The player does not move yet and does not interact with anything, so the
graphics just sit there, but I am still quite happy for it to work.</p>
<p>Next up I will probably start implementing keyboard interaction, so the player
can actually move.</p>
<p>Until next time.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Tiles and maps</title>
    <link href="https://blog.nek0.eu/posts/2020-12-14-Tiles-and-maps.html" />
    <id>https://blog.nek0.eu/posts/2020-12-14-Tiles-and-maps.html</id>
    <published>2020-12-14T00:00:00Z</published>
    <updated>2020-12-14T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there!</p>
<p>Another weekend passed and another step has been taken. Last time I was
struggling my way through OpenGL and got a single quad displayed on screen,
which I had hardcoded there. The next step I decided to take was reading level
maps and generate quads where tiles would be and texture them properly.</p>
<p>I had already put some thought into how to store level information.</p>
<p>May train of thought here is, that tiles are static and arranged in layers
above each other. To represent that I use a simple bitmap picture per layer.
every single pixel in this bitmap represents a tile. The red channel contains
the information of the tile type (at the moment there are only solid tiles,
platform tiles and decoration tiles). The green and blue channel mark the
offset on the tilemap. To make the information visible to the naked eye, the
information is stored inverted, so that filled areas appear white and empty
areas black.</p>
<p>I will have to figure out dynamic objects like collectibles or enemies later.</p>
<p>So after defining types for the tiles, the tilemap and the level map I also
defined a rather generic typeclass for anything drawable to spew out vertices
with texture coordinate information. Putting my game on the screen now looks
like this:</p>
<figure>
<img src="/images/2020-12-14_preview.png" title="a black screen with white tiles" alt="Screenshot" />
<figcaption aria-hidden="true">Screenshot</figcaption>
</figure>
<p>Making progress is fun and I enjoy making it in my own bespoken way, though
havig to think in different coordinate systems at the same time (OpenGL
coordinates vs. Image coordinates mostly) can cause quite a headache and some
rather fun bugs.</p>
<p>As always, feel free to check out the code on <a href="https://gitea.nek0.eu/nek0/pituicat">my gitea</a>.</p>
<p>See you next time!</p>]]></summary>
</entry>
<entry>
    <title>A leap forward</title>
    <link href="https://blog.nek0.eu/posts/2020-12-06-A-leap-forward.html" />
    <id>https://blog.nek0.eu/posts/2020-12-06-A-leap-forward.html</id>
    <published>2020-12-06T00:00:00Z</published>
    <updated>2020-12-06T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks, it’s me again. I finally managed to settle into new circumstances
regarding my apprenticeship. I’m in my final year and am very much looking
forward to be finished.</p>
<p>With things getting more calm I found some time and motivation to code again,
so I grabbed my current project “Pituicat” and started out implementing my own
abstractions around OpenGL to get stuff on screen. Today I finally made it:</p>
<figure>
<img src="/images/2020-12-06_preview.png" title="a blue screen with little a green square in the center" alt="Screenshot" />
<figcaption aria-hidden="true">Screenshot</figcaption>
</figure>
<p>I know. It doesn’t look very overwhelming, but it’s a start. The code I wrote
to make this possible should enable me to draw massive amounts of 2D tiles more
efficiently than the library NanoVG does.</p>
<p>This breakthrough is very welcome, since I started considering moving the game
to an engine I do not build myself, namely <a href="https://godotengine.org/">Godot</a>,
which is a powerful free software game engine. I already started to make some
stubs in it, but I seemingly enjoy
<a href="http://www.catb.org/~esr/jargon/html/Y/yak-shaving.html">shaving yaks</a>
far too much…</p>
<p>After this milestone is taken, I can start taking care of the actual in-game
graphics and display them accordingly. Although I’m not absolutely new to
game development, I never actually handled OpenGL myself, so this is a huge,
sometimes fun and sometimes frustrating, learning experience.</p>
<p>At this point I want to thank the Haskell game development community and the
Haskell community in general for being the excellent, friendly and helpful
communities they are.</p>
<p>Also special thanks go to <a href="https://www.thecherno.com/">The Cherno</a>, who has made an
<a href="https://www.youtube.com/playlist?list=PLlrATfBNZ98foTJPJ_Ev03o2oq3-GGOS2">excellent Video tutorial series on OpenGL</a>
available on his YouTube channel. Although the tutorial is held in C++ I could
carry most of the concepts over to Haskell and apply them to my needs.</p>
<p>As always, if you want to see my progress with the code, head over to
<a href="https://gitea.nek0.eu/nek0/pituicat">project repository on my gitea</a>.</p>
<p>So much for this update, I hope to see you soon.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Slimy business</title>
    <link href="https://blog.nek0.eu/posts/2020-10-15-Slimy-business.html" />
    <id>https://blog.nek0.eu/posts/2020-10-15-Slimy-business.html</id>
    <published>2020-10-15T00:00:00Z</published>
    <updated>2020-10-15T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hello again.</p>
<p>As promised I will be writing a bit about my new game project called “Pituicat”.</p>
<p>The idea for this game is rather old and even predates “Tracer” by quite some
time, I even found some code and some assets I drew for the game, but it was
only a stub with broken physics.</p>
<p>The core idea for story and gameplay did not change over time. “Pituicat” will
be a 2D platformer with puzzle elements where the player controls a cat turned
to a slimey blob.</p>
<p>In this game I wanted apply my findings from the book
<a href="https://www.wiley.com/en-us/Level+Up%21+The+Guide+to+Great+Video+Game+Design,+2nd+Edition-p-9781118877166">“Level Up!” by Scott Rogers</a>.
and the
<a href="https://www.youtube.com/watch?v=W3gAzLwfIP0&amp;list=PLlrATfBNZ98foTJPJ_Ev03o2oq3-GGOS2">tutorial series on OpenGL</a>
by The Cherno.</p>
<p>So before I started any coding whatsoever I created some game design documents
to create an overview of the game, the world it is set in and the gameplay
mechanics present in the game. I also created an overview over all the levels
that the player will play to beat the game.</p>
<p>At the time of writing the documents are suficiently complete that i can already
do some coding and figure things out implementations-wise, since I never worked
with persistent maps before (“Tracer” generated its maps randomly).</p>
<p>If you wnat to check out the code for “Pituicat” and its progress, go over
<a href="https://gitea.nek0.eu/nek0/pituicat">to my gitea</a>. Development will most likely
be quite slow, because I am busy at my apprenticeship and have only limited
spare time.</p>]]></summary>
</entry>
<entry>
    <title>Freeze your darlings</title>
    <link href="https://blog.nek0.eu/posts/2020-10-15-Freeze-your-darlings.html" />
    <id>https://blog.nek0.eu/posts/2020-10-15-Freeze-your-darlings.html</id>
    <published>2020-10-15T00:00:00Z</published>
    <updated>2020-10-15T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>There is a motto between writers, that is “kill your darlings”.</p>
<p>I have a lot pf projects and some of them are very dear to me. One of these is
my attempt at a game called “tracer”. This does not mean I am giving up on that.
Instead of “killing” this one of my darlings, I would like ot freeze it. This
menas I put it away for later.</p>
<p>“But why?” you may ask.</p>
<p>Well, simply because the idea has become too complex and difficult to achieve
with my toolset and knowledge. Additionally, I did not make much of a plan
beforehand what to incorporate in the game and how it should all work.</p>
<p>To cover the technical aspects I followed a
<a href="https://www.youtube.com/watch?v=W3gAzLwfIP0&amp;list=PLlrATfBNZ98foTJPJ_Ev03o2oq3-GGOS2">superb tutorial series on OpenGL</a>.
I can hightly recommend it, if you want to learn how modern OpenGL is actually
used. The tutorial series itself is taught in C++, but I was able to translate
it into Haskell, which you can see <a href="https://gitea.nek0.eu/nek0/renderer-tutorial">on my gitea</a>.</p>
<p>Secondly I learned a lot about the game design process from the book
<a href="https://www.wiley.com/en-us/Level+Up%21+The+Guide+to+Great+Video+Game+Design,+2nd+Edition-p-9781118877166">“Level Up!” by Scott Rogers</a>.
I was recommended this book by one of my co-apprentices who used to study
computer science with emphasis on multimedia applications.</p>
<p>The findings from these will go into a new project, which will get its own
blogpost shortly.</p>]]></summary>
</entry>
<entry>
    <title>So many projects, so little time...</title>
    <link href="https://blog.nek0.eu/posts/2020-08-22-So-many-projects%2C-so-little-time....html" />
    <id>https://blog.nek0.eu/posts/2020-08-22-So-many-projects%2C-so-little-time....html</id>
    <published>2020-08-22T00:00:00Z</published>
    <updated>2020-08-22T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there,</p>
<p>Finally I reached the time of year, where I have a long vacation during my
apprenticeship, so I can relax a bit. In theory.</p>
<p>Reality looks a bit different, though. With me moving out of my old place
because of reconstruction works, some paperwork that’s been piling up alongside
personal projects which beg for my attention I am quite busy. But it is still
relaxing, since I have no schedule apart from the schedule I make up myself.</p>
<p>One project that receives quite a lot of attention lately is a short comic I am
drawing. After reading some books on comic drawing and structuring I am trying
to apply some of the findings.</p>
<p>For example I never really did storyboarding or panel layout before. Everything
was more or less on a whim and from the top of my head. That’s not bad per se,
but can make things difficult when not being able to work on a comic page
continuously.</p>
<p>Another thing that’s really helpful for my motivation is that with a proper
plan and structure of my comic I get quite a good sense of progression while
drawing. The number of pages turns finite and you can focus on drawing and not
worry about the story for the next panel or page.</p>
<p>When th comic is finished, I will release it on my <a href="https://art.nek0.eu">art portfolio</a>
in its entirety.</p>
<p>Unfortunately my endeavours in prosa writing came to a full halt, but maybe I
an fix my problems with writing in a similar way like I did with my comic
drawing, but I will have to make some research there.</p>]]></summary>
</entry>
<entry>
    <title>Missed anniversary</title>
    <link href="https://blog.nek0.eu/posts/2020-07-21-Missed-anniversary.html" />
    <id>https://blog.nek0.eu/posts/2020-07-21-Missed-anniversary.html</id>
    <published>2020-07-21T00:00:00Z</published>
    <updated>2020-07-21T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there,</p>
<p>I recently had a look at my blog’s <a href="/archie.html">archive page</a> and realised two
things:</p>
<ul>
<li>It’s quite a long archive which spans seven years worth of blog posts.</li>
<li>I missed the anniversary of this blog by a few days.</li>
</ul>
<p>Seven years is quite a long time in which I personally had a lot of ups and
downs, some of them I even made public here. You have accompanied me
through my hard times and enjoyed the good times. Thanks for all the support.</p>
<p>I also had a look on the other pages of my blog and found some quite outdated
info, especially the page <a href="/about.html">about this blog</a>. I will have to revise
it thoroughly. I will maybe even restructure the whole blog.</p>
<p>Let’s just see what I come up with.</p>
<p>Seeya!</p>]]></summary>
</entry>
<entry>
    <title>What does the future hold?</title>
    <link href="https://blog.nek0.eu/posts/2020-05-28-What-does-the-future-hold%3F.html" />
    <id>https://blog.nek0.eu/posts/2020-05-28-What-does-the-future-hold%3F.html</id>
    <published>2020-05-28T00:00:00Z</published>
    <updated>2020-05-28T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi again, it’s me.</p>
<p>Some folks who are following me on mastodon surely have noticed my increased
output in drawn art. I even created <a href="https://art.nek0.eu">a portfolio page</a> for
that.</p>
<p>As you might remember, I also had some endeavours in creating written art and
even published some short stories here on my blog. I want to revive that,
without subjecting myself to too much pressure, so there will be, like with my
drawings, no schedule.</p>
<p>I will start doing some writing exercises soon, create fragments or even short
stories based on own ideas, random ideas or even writing prompts off the
internet.</p>
<p>Genre-wise I will probably do a lot of fantasy, but I also learned about the
budding genre of Solarpunk and I would like to explore that. This will be a bit
challenging, because Solarpunkt tends to be rather optimistic, what I usually
tend not to be. But this challenge excites me.</p>
<p>Anyway. So much for the update. Expect a new category to pop up on the portfolio
page soon, so check there regularly or get the feed from there.</p>
<p>Keep calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Building an art portfolio</title>
    <link href="https://blog.nek0.eu/posts/2020-04-28-Building-an-art-portfolio.html" />
    <id>https://blog.nek0.eu/posts/2020-04-28-Building-an-art-portfolio.html</id>
    <published>2020-04-28T00:00:00Z</published>
    <updated>2020-04-28T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks!</p>
<p>I apologize for being so silent the past months. Lockdown does strange things
to me, but it’s under control at the moment. I just needed readjustment of
medication.</p>
<p>Since I am human and can’t lie apathetically in a corner all day (which I also
had my good share of) I decided to build a website for my visual pieces of art,
a portfolio, so to speak. You can reach it at <a href="https://art.nek0.eu" class="uri">https://art.nek0.eu</a>.</p>
<p>The website is built with <a href="https://jaspervdj.be/hakyll">Hakyll</a>, of course, and
I took the opportunity to learn some of the more advanced features and even some
supplementary libraries. I was once again very pleasantly surprised how powerful
this software is.</p>
<p>Some of the pictures there are related to my ongoing webcomic
<a href="https://alitheia-comic.eu/">Alitheia Road</a>, which I had currently to put on
hold to alleviate pressure from my mind. But It will continue, I promise. I am
gathering ideas and fleshing out storylines for future pages whenever it feels
ok to do so.</p>
<p>So much for an update from me.</p>
<p>Stay calm and wash hands.</p>]]></summary>
</entry>
<entry>
    <title>Lockdown</title>
    <link href="https://blog.nek0.eu/posts/2020-03-18-Lockdown.html" />
    <id>https://blog.nek0.eu/posts/2020-03-18-Lockdown.html</id>
    <published>2020-03-18T00:00:00Z</published>
    <updated>2020-03-18T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks,</p>
<p>In light of the recent events I would like to make a status update.</p>
<p>I’m overall ok and am on self-imposed lockdown since March 14th and urged the
hackerspace I usually hang out at to do the same.</p>
<p>School has been canceled for now and my apprenticeship practice is
transitioning to home office, but I have no information yet, how exactly this
is supposed to work and fear I might have trouble participating, because I have
no Windows licence. All my computers run Linux-based operating systems (NixOS
specifically).</p>
<p>In the meantime I was able to tackle one bigger project of mine: I am running
my own XMPP-Server based on ejabberd now. Now you can reach me through my new
nek0@jabber.nek0.eu address.</p>
<p>I hope people around here learn their lessons from this event. A pandemic
can happen anytime, so the healthcare system needs its resources to be able to
tackle it. Universal healthcare is a neccessity which mustn’t be run for
profit.</p>
<p>Stay safe.</p>]]></summary>
</entry>
<entry>
    <title>And we are at a full circle</title>
    <link href="https://blog.nek0.eu/posts/2019-12-08-And-we-are-at-a-full-circle.html" />
    <id>https://blog.nek0.eu/posts/2019-12-08-And-we-are-at-a-full-circle.html</id>
    <published>2019-12-08T00:00:00Z</published>
    <updated>2019-12-08T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Time to make a new update. Quite a few things happened lately:</p>
<p><a href="/posts/2019-09-08-Back-to-Debian.html">As I posted earlier</a> I had switched back
to Debian. This did not last long. After visiting
<a href="https://2019.nixcon.org/">NixCon</a> and learning about all the cool new stuff
coming to NixOS (and after breaking my Debian system) I decided to give NixOS
another shot and installed it all. I even got my graphics setup to work
properly thanks to the Optimus Prime setup options.</p>
<p>Now I am learning how to handle
<a href="https://github.com/input-output-hk/haskell.nix">haskell.nix</a>, an alternative
builder for Haskell projects I learned about at NixCon. It works quite well,
despite still being marked as experimental. What I still struggle with, is the
setup of packages depending on other packages available only locally. Until I
can resolve this issue, some of my Haskell development is halted. If someone
has some resource at hand on how to achieve this other than the official docs,
I would be very grateful for a nudge in the right direction.</p>
<p>Some other thing, which happened longer ago, but I failed to announce properly:
Eidolon, my image gallery is down and I am planning to change the scope and
rewrite the project. I took the gallery offline after new legislation passed
the european parliament known as “Article 13”, which would have forced me to
either implement content filtering for copyright infringements at upload or buy
this service externally. The first seems impossible with my resorces and the
latter I am not willing to do. So the gallery will change to a single-user
gallery software.</p>
<p>And this concludes today’s update. I will be present at 36C3, so if you want to
get in touch, you may find me there. I will be most likely hanging around the
ChaosZone assembly or you can call me on DECT 6350.</p>]]></summary>
</entry>
<entry>
    <title>Frustration levels rising</title>
    <link href="https://blog.nek0.eu/posts/2019-10-17-Frustration-levels-rising.html" />
    <id>https://blog.nek0.eu/posts/2019-10-17-Frustration-levels-rising.html</id>
    <published>2019-10-17T00:00:00Z</published>
    <updated>2019-10-17T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>The software projects I do in my spare time often revolve around game
development and usually the language of choice is Haskell. Doing things the
Haskell way demands some frustration tolerance and patience but the
outcome is usually a very robust piece of software. The outcome then usually
outweighs the frustration on the way there and makes programming quite an
enjoyable experience.</p>
<p>Unfortunately this does not apply to game development in Haskell. At least for
me. After years of trying the closest I ever got to a game was
<a href="https://github.com/nek0/tracer">Tracer</a>, which I still wish to complete, but I
doubt I will ever be successful. This is due to the fact that in the current
state it performs badly because of poor technical choices on my side, which I
am trying to rectify. To make better informed decisions I set the game aside
and started experimenting with some new and some different concepts. This
includes concepts like Functional Reactive Programming (FRP) as a new paradigm,
but also better tooling, like proper shader programming.</p>
<p>Finding resources on FRP was quite easy. I was given a good
<a href="https://www.manning.com/books/functional-reactive-programming">itroductory book</a>
and found a capable Haskell library implementing this concept in
<a href="https://hackage.haskell.org/package/reactive-banana">reactive-banana</a>.</p>
<p>Finding resources for shader programming in Haskell was not as successful. There
are some interesting attempts at abstracting the GLSL shader language into
Haskell, so one can profit from static type checking by the compiler, but these
haven’t been updated for at least two years and don’t work anymore. All in all
the whole GPU programming part of game development in Haskell looks very bleak.
To get things done one has to resort to interfacing C libraries oneself, which
is an error prone and tedious task.</p>
<p>For now I am really frustrated by this lack of an ecosystem and by the fact,
that after three years of trying I only have rotting bits and pieces of
software.</p>]]></summary>
</entry>
<entry>
    <title>Datenspuren 2019 - Ein Rückblick</title>
    <link href="https://blog.nek0.eu/posts/2019-09-23-Datenspuren-2019---Ein-R%C3%BCckblick.html" />
    <id>https://blog.nek0.eu/posts/2019-09-23-Datenspuren-2019---Ein-R%C3%BCckblick.html</id>
    <published>2019-09-23T00:00:00Z</published>
    <updated>2019-09-23T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Wie auch schon in den vergangenen Jahren, so war ich auch dieses Jahr bei den
<a href="https://datenspuren.de/2019/">Datenspuren</a> des c3d2 dabei. Aufgrund von
längerfristiger Krankheit bin ich dieses Jahr erst sehr spät zur Orga
dazugestoßen und habe außer einer Pressemitteilung und deren Verteilen gefühlt
nichts zur Organisation der Datenspuren beigetragen. Trotz allem durfte ich auf
der Veranstaltung ein Orge-Team-Shirt tragen, als ich den Infostand übernahm.</p>
<p>Das Motto dieses Jahr war “Patch gehabt” und es haben sich eine Menge
interessanter Talks im Programm angesammelt, welche im Nachgang alle auf
<a href="https://media.ccc.de/c/DS2019">media.ccc.de</a> schauen möchte. Leider konnte ich
die nicht live sehen, da ich ja den Infotresen bedient habe. Aber wozu hat man
Freunde, die einem eine kurze Zusammenfassung liefern und das VOC, das alles
aufzeichnet und abspeichert.</p>
<p>Was ich allerdings aus erster Hand mitbekommen habe, waren ein grober Überblick
über die Besucherzahlen und die Stimmung auf dem Gelände. Das Erstere war etwas
ernüchternd und konnte durch die Zahlen aus dem Netzwerkmonitoring unterfüttert
werden: Es waren nie wirklich mehr als 200 Menschen gleichzeitig auf dem
Gelände. Das ist verglichen mit den Vorjahren weniger, aber unterstützt meinen
zweiten Punkt, nämlich die Stimmung. Diese war nämlich sehr familiär und
entspannt. Ich persönlich habe die Datenspuren von der Seite aus sehr genossen
und war nicht von Menschenmassen erschlagen, wie ich es auf dem Congress, oder
ähnlichen Großveranstaltungen, für gewöhnlich bin.</p>
<p>Es gab auch ein paar Mankos an den Datenspuren, welche ich hier nicht alle
aufführen möchte, da ich diese erst in die Nachbereitung der Datenspuren
einfließen lassen möchte. Erwähnen will ich trotzden den eklatanten Engelmangel.
Wir brauchen für zukünftige Datenspuren dringend mehr Helfer, welche keine Scheu
haben auch mal das Mikro in die Hand zu nehmen und einen Speaker an- und
abzukündigen. Wer sich das nicht zutraut, kann auch gerne als Videoengel den
Schnitt der verschiedenen Kameraeinstellungen vornehmen. Chaos-Veranstaltungen
unabhängig ihrer Größe, wie die Datenspuren oder der Congress, leben davon, dass
die Zuschauer auch mithelfen.</p>
<p>Trotz allen Widrigkeiten waren es aber tolle Datenspuren mit vielen coolen
Inhalten und Ich hoffe einen Großteil der langjährigen Besucher auch nächstes
Jahr zu sehen.</p>]]></summary>
</entry>
<entry>
    <title>Back to Debian</title>
    <link href="https://blog.nek0.eu/posts/2019-09-08-Back-to-Debian.html" />
    <id>https://blog.nek0.eu/posts/2019-09-08-Back-to-Debian.html</id>
    <published>2019-09-08T00:00:00Z</published>
    <updated>2019-09-08T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>A small update from the software front: I left NixOS. I’m back with a Debian
machine, or to be more precise, my Frankenbian.</p>
<p>“But why?” you may ask.</p>
<p>Well, the answer is quite simple. I need a stable operating system on my
workstation, which has to have properly working 3D-hardware acceleration. In the
weeks before my switch back, This was no longer the case and nobody could help
me.</p>
<p>But this all does not mean I abandoned NixOS as a whole or think less of the
project. I still believe it is a very cool concept for an operating system and
package management and will gladly revisit it, when things are more stable and
mature, but for now I only maintain a small virtual machine with a NixOS
installation to run my NixOps deployments.</p>
<p>During my endeavours of switching back I unfortunately lost some data
(e.g. pgp keys), so I updated data where needed. This prompted me to think of
a proper paper backup solution for sensitive data. Maybe I’ll come up with some
acceptable workflow.</p>
<p>Also setting up my laptop anew prompted me to plan new blogposts, especially
about full-disk-encryption and my NixOps setup. These will follow in the future.</p>
<p>So long and thanks for all the fish.</p>]]></summary>
</entry>
<entry>
    <title>Getting better</title>
    <link href="https://blog.nek0.eu/posts/2019-08-15-Getting-better.html" />
    <id>https://blog.nek0.eu/posts/2019-08-15-Getting-better.html</id>
    <published>2019-08-15T00:00:00Z</published>
    <updated>2019-08-15T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks, long time no see.</p>
<p>Since the middle of June things gradually change for me. I am in psychiatry
again, but the outlook is pretty good. I’m getting new medication, which
replaces the cocktail I formerly got. This means less side effects and this new
meds seem to be really working. I feel more energetic than I felt for a long
time, probably years.</p>
<p>I am looking forward to leaving the clinic, yet I still feel anxious about how
life will go on. I deeply hope the positive effects prevail and I can continue
my apprenticeship as energetically as I feel at the moment.</p>
<p>Other positive effects of my stay here is, that I finally found the time to
learn to draw with classical media and I stuck with aquarel colors, because they
work well in my mind. But their outcome is sometimes a bit unpreditable,
especially when applying “wet” techniques. I’ll probably have some off my
pictures I made in clinic scanned and will post them on my deviantart account.
I should generally post more stuff there. As well as here.</p>
<p>With all that being said, I hope you all are well, too.</p>]]></summary>
</entry>
<entry>
    <title>The void</title>
    <link href="https://blog.nek0.eu/posts/2019-03-11-The-void.html" />
    <id>https://blog.nek0.eu/posts/2019-03-11-The-void.html</id>
    <published>2019-03-11T00:00:00Z</published>
    <updated>2019-03-11T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hello folks. I am deeply sorry for not updating my blog for this long.</p>
<p>As some of you might know, I struggle with depression. The last few months have
been very hard for me, as my illness gets more active and unpredictable due to
stress. And I feel more and more like I’m losing ground. Things I enjoyed doing
in the past don’t appeal to me anymore. I have trouble maintaining my sleep
schedule. Everyday tasks are harder and harder to make and my thoughts venture
more and more into darker places. These all and more are warning signs for a
very serious depressive episode.</p>
<p>It feels like nothing really changes. Every time I’m in clinical treatment, most
recently in november, new problems become visible, but none of my complications
ever get resolved. I’m on medication, which messes with my brain and has tons of
side effects and yet it only keeps me barely functioning.</p>
<p>I feel like a burden. Both socially on my friends and family but also on society
as a whole. I don’t dare to speak to my friends too much anymore, to not drag
them down. Everyone has enough of his own problems. And somehow everyone gets
his or her things done, except for me. I am useless.</p>]]></summary>
</entry>
<entry>
    <title>Affection release</title>
    <link href="https://blog.nek0.eu/posts/2018-09-25-Affection-release.html" />
    <id>https://blog.nek0.eu/posts/2018-09-25-Affection-release.html</id>
    <published>2018-09-25T00:00:00Z</published>
    <updated>2018-09-25T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Today I finished up something I had in mind for quite some time: A new relaese
of my game engine affection. It is now officially downloadable from hackage in
its most recent version 0.0.0.9. Please Don’t ask, where version 0.0.0.8 has
gone. I must have lost it somewhere.</p>
<p>With this change you can now build my latest game attempt “tracer” without
having to handle a sandbox or similar.</p>]]></summary>
</entry>
<entry>
    <title>Devlog: Agent System</title>
    <link href="https://blog.nek0.eu/posts/2018-09-08-Devlog%3A-Agent-System.html" />
    <id>https://blog.nek0.eu/posts/2018-09-08-Devlog%3A-Agent-System.html</id>
    <published>2018-09-08T00:00:00Z</published>
    <updated>2018-09-08T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hello again in this little corner of the internet.</p>
<p>As I am busy with my apprenticeship, which started four weeks ago, I don’t get
to code so much lately. I am all the more pleased about the outcome of my latest
coding sprint: An Agent System.</p>
<p>In detail this means, that all the NPCs in my game have stats like hunger,
thirst or attention and thus have needs, which have to be fulfilled. And this
they do themselves, given there is a possibility to do so in the current map.
There are toilets, watercoolers and other things present in the game assets, but
the maps are generated randomly, so if they can’t find a way to fulfill their
need, they go to the elevator.</p>
<p>This also means, that the NPCs don’t walk around randomly, or at least by
default, but walk to targets according to the needs they have.</p>
<p>I also am starting to prepare my talk I’m giving at
<a href="https://datenspuren.de/2018/">Datenspuren</a>. I’m always thankful for input about
what you would like to know. You can leave it here in the comments or use other
means of communication.</p>
<p>See you soon!</p>]]></summary>
</entry>
<entry>
    <title>Devlog: Interactable objects</title>
    <link href="https://blog.nek0.eu/posts/2018-07-22-Devlog%3A-Interactable-objects.html" />
    <id>https://blog.nek0.eu/posts/2018-07-22-Devlog%3A-Interactable-objects.html</id>
    <published>2018-07-22T00:00:00Z</published>
    <updated>2018-07-22T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks. Sorry I haven’t updated in tha past 2 months. I was busy at work and
with everything else. But that didnÄt keep me from making any progress. I got
animations up and running, so the player and the NPCs are no longer just dots,
but they have real bodies.</p>
<p>I also now have loading screens, which were a little
trickier than I thought in the beginning. My problems boiled down to the fact,
that if I have another thread, which wants to do some actions with OpenGL, it
needs to have its own context and context sharing has to be enabled.</p>
<p>My biggest breakthrough I achieved just today: Interactable objects. Until now
you could move around the map and test out collision between the player and his
surroundings, but not more. Now you can move up to any copier and activate it
with a right click when you stand right in front of it and look in the right
direction. For now this just changes the animation, that is played, but it’s a
start. Here is a small screencap I made of the whole process:</p>
<video controls="true">
<source src="/vids/2018-07-22.webm" type="video/webm" />
</video>
<p>The copier itself is also an interesting. because it is animated, it does not
reside in the Matrix where all the walls, tables and boxes are. It resides like
allother animated things (e.g.: the player and the NPCs) inside the Entity
Component System, but it still has collision boundaries, which are respected by
the player and the NPCs. That took me some time to figure out, how to do this.</p>
<p>I am also preparing a possibility to have the game’s solution generated
procedurally. Graph theory for the win!</p>
<p>I already have submitted my talk to the <a href="https://datenspuren.de/2018">“Datenspuren” event</a> and hope it
will get accepted.</p>
<p>See you (hopefully) soon.</p>]]></summary>
</entry>
<entry>
    <title>Devlog: Progress with "Tracer"</title>
    <link href="https://blog.nek0.eu/posts/2018-04-14-Devlog%3A-Progress-with-%22Tracer%22.html" />
    <id>https://blog.nek0.eu/posts/2018-04-14-Devlog%3A-Progress-with-%22Tracer%22.html</id>
    <published>2018-04-14T00:00:00Z</published>
    <updated>2018-04-14T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi. This is the second post in my ongoing devlog for my game “Tracer”. About a
month ago I posted my initial breakthrough, where I could build a floor of the
building the player will be infiltrating. A lot changed since then.</p>
<p>The floors still exist, but are not as colourful as they used to be. The floor
is now uniformly white, because I have no proper texture for the floor, but I
added some furniture. For now it’s just tables and some cardboard boxes, but
there will be more. There is also sanity checking when placing furniture.
Everything that needs to be accessed is reachable.</p>
<p>I reworked the collision system, which used to be tile based. This was good for
the beginning and easy to implement, but I soon realized, that I needed
something more complex. So instead of checking if a tile can be walked upon,
there are now boundaries within a tile, based upon the object existing on that
tile, where the player can’t walk. This took me a whole lot of time getting it
to work properly. I had several instances, where the player could glitch through
walls under certain circumstances.</p>
<p>My biggest breakthrough though I finished just today. I have laid the foundation
for NPCs. For now they don’t have any real appearance, they are just displayed
as red dots (the player is also just a cyan coloured dot). For now they just
walk around randomly between tables, where they stay some random time. Again I
fell, that the Entity Component System is a very powerful tool here. I suspect
that my former game projects failed partly because of the lack of this tool.</p>
<p>This is how it looks now:</p>
<p><img src="/images/2018-04-14_preview.png" /></p>
<p>Unfortunately you don’t get to see the dots moving on a still image, but you can
get an impression.</p>
<p>seeya!</p>]]></summary>
</entry>
<entry>
    <title>Transition to NixOS</title>
    <link href="https://blog.nek0.eu/posts/2018-03-30-Transition-to-NixOS.html" />
    <id>https://blog.nek0.eu/posts/2018-03-30-Transition-to-NixOS.html</id>
    <published>2018-03-30T00:00:00Z</published>
    <updated>2018-03-30T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Just recently I made a transition, I was thinking of for quite some time. What
I’m speaking of is my transition to <a href="https://nixos.org">NixOS</a>.</p>
<p>Two days ago I just installed NixOS on my laptop out of the blue. Now I’m trying
to get my programming projects to build and work again. On may way to accomplish
this, I learned a lot about the system and its configuration.</p>
<p>Overall I must say, that I am quite pleased with the outcome. It is a fairly
usable system, which holds some cool advantages for me as a Haskell developer
over my old Debian system setup. Te biggest one is, That I can scrap all cabal
sandboxes from all my projects and hand the management of the right dependency
versions over to Nix.</p>
<p>What I want to share is a small snippet of a nix expression, that lets you
include local dependencies to your Haskell project’s nix shell (like you would
do with <code>cabal sandbox add-source</code>.</p>
<p>First you need to create a nix shell configuration. There is a handy tool called
<code>cabal2nix</code> which you can install simply by invoking
<code>nix-env -iA nixos.cabal2nix</code>. This is the main work horse for converting any
Haskell package to nix and it does its job very well.</p>
<p>To build your Nix shell configuration you call <code>cabal2nix --shell . &gt; shell.nix</code>
from your project directory. This generates the file <code>shell.nix</code> for you. Check
it for any errors. If you want to use a local package, you can add its
definition to the <code>shell.nix</code> file. To get the definition of that package, you
can again use <code>cabal2nix</code>. Simply invoke <code>cabal2nix file://&lt;path to Package&gt;</code> and
copy the resulting block into the <code>let</code> block of your existing <code>shell.nix</code>
like this:</p>
<pre><code>&lt;packageName&gt; = with haskellPackages; callPackage (
  &lt;packageDefinition&gt;
  ) {};</code></pre>
<p>Where <code>&lt;packageName&gt;</code> is the variable name for the package inside this Nix
expression. <code>&lt;packagDefinition&gt;</code> is the package definition of the local package
we just obtained from <code>cabal2nix</code>. Then delete the original package name form
the arguments of the <code>f</code> function in the let block of the Nix expression.
Finally align everything to look nicely, and save the file. To see an example of
that, you can look at the
<a href="https://github.com/nek0/tracer/blob/master/shell.nix">Nix expression of my latest game project</a>.</p>
<p>To test your setup, just invoke <code>nix-shell shell.nix</code> and watch the system build
a temporary environment for your project and give you a shell to it, if
everything went well. Now all dependencies of your project, including your local
ones are installed in this environment, so you only need to invoke
<code>cabal build</code>.</p>
<p>I hope You find this snippet of my Nix experience helpful, it sure took me some
time to find out.</p>]]></summary>
</entry>
<entry>
    <title>Devlog: Making a game</title>
    <link href="https://blog.nek0.eu/posts/2018-02-27-Devlog%3A-Making-a-game.html" />
    <id>https://blog.nek0.eu/posts/2018-02-27-Devlog%3A-Making-a-game.html</id>
    <published>2018-02-27T00:00:00Z</published>
    <updated>2018-02-27T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks. I have good news. I am making a game.</p>
<p>After tinkering a lot on my game engine i thought it would be nice to have some
“real result”, to be able to present the product of my endeavours. I plan to
make a talk at our local hacker symposium
“<a href="https://datenspuren.de">Datenspuren</a>” and maybe even at 35C3. As a showcase
I want to present a game that is more than just a simple clone of an existing
game. I already have that. No. I want an original game.</p>
<p>What I came up with is a game, where you play as an intruder infiltrating a
company with your main task being getting a copy of their database. But you
have to path your way through their multi-floor building seeking clues and data
traces how to access the next floor and ultimately the server room.</p>
<p>For this I am starting a devlog, to show my progress as I keep on developing the
game.</p>
<p>So far I have my engine <a href="https://github.com/nek0/affection">affection</a> as my
foundation, for drawing I use
<a href="https://github.com/cocreature/nanovg-hs">NanoVG-bindings</a> and as something new
to me, I am using an entity-component-system called
<a href="https://github.com/isovector/ecstasy">ecstasy</a>. For now I have spent the last
month or so figuring out, how to procedurally generate sane floors for the
building and how to use the entity-component-system. So far, the whole thing
looks like this:</p>
<p><img src="/images/2018-02-27_preview.png" /></p>
<p>Pretty neat, isn’t it?</p>
<p>That’s all for now. See you soon!</p>
<p>PS:</p>
<p>I totally forgot to tell you, where you can find the code for my game. It is
hosted on my <a href="https://github.com/nek0/tracer">Github profile</a>. Have fun reading
it.</p>]]></summary>
</entry>
<entry>
    <title>Recent Outage</title>
    <link href="https://blog.nek0.eu/posts/2018-01-30-Recent-Outage.html" />
    <id>https://blog.nek0.eu/posts/2018-01-30-Recent-Outage.html</id>
    <published>2018-01-30T00:00:00Z</published>
    <updated>2018-01-30T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>I’m sorry for the recent outage in my services. I was foolish enough to think,
that I can restart a LXC Container after an update without any hassle.</p>
<p>The whole problem boils down to an incompatibility between unprivileged LXC
Containers and systemd. Thanks a lot for breaking our stuff.</p>
<p>But now everything is fine, my site is runnning again and so is
<a href="https://eidolon.nek0.eu">eidolon</a>.</p>]]></summary>
</entry>
<entry>
    <title>Escapism</title>
    <link href="https://blog.nek0.eu/posts/2018-01-06-Escapism.html" />
    <id>https://blog.nek0.eu/posts/2018-01-06-Escapism.html</id>
    <published>2018-01-06T00:00:00Z</published>
    <updated>2018-01-06T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi again. First off all, I wish you a happy new year. Between finishing one part
of my rehab, holidays and the Chaos Communication Congress I attended I forgot
to write a new post here. I am deeply sorry.</p>
<p>During that time I was also programming a lot, especially on my game engine and
example games, or technical demos, for said engine. I do game development in
Haskell. For fun.</p>
<p>Why game development? Why in Haskell? These are questions I regularly hear from
people, when they get to know me and what I do. Somehow There seems to be a
notion, that game development is not real development and that Haskell is either
an unfit or even impossible choice for that. Both notions are not true. Game
development is a very complex matter (You’re doing real time Simulations of a
world) and Haskell is very fit for the Job. I could be seeing results faster in
different languages, but that’s not the languages fault. I have to write a lot
of the tooling myself, which slows me down. But it’s a great learning
experience.</p>
<p>But why do I do that? Well, I like creating and developing worlds. You can see
that in my <a href="https://nek0.eu/tags/writing.html">writing</a> section. But writing
sometimes is limited when it comes to interaction with the world. In games the
player usually can explore the world to a deeper level. The immersion is
different.</p>
<p>That’s what I always liked about the games I played. They let me escape to a
different world and go on my own adventures. In RPGs I could take on the role of
a brave adventurer, in RTS games I could lead a faction to victory on the
battlefield. Those are the game genres I mostly played.</p>
<p>Nowadays I play less and less, but I do more game development. At the current
stage my knowledge and tooling do not suffice for the kind of game I have in my
mind for quite some time, so I try to take smaller steps. But ultimately I bring
my escapism of past days to a new level. Now I don’t escape into virtual worlds
created by others, but I am in the process of creating them myself. Sometimes
it’s a frustrating experience, but sometimes it’s awesome.</p>
<p>For those of you interested in my games, I can show you at this point only
<a href="https://github.com/nek0/haskelloids">haskelloids</a>. Not the most original name,
but It’s the first real game that runs on my own engine, which you can find
<a href="https://github.com/nek0/affection">in its own Github repo</a>, together with some
small example programs.</p>]]></summary>
</entry>
<entry>
    <title>Phantasie auf Knopfdruck</title>
    <link href="https://blog.nek0.eu/posts/2017-11-30-Phantasie-auf-Kommando.html" />
    <id>https://blog.nek0.eu/posts/2017-11-30-Phantasie-auf-Kommando.html</id>
    <published>2017-11-30T00:00:00Z</published>
    <updated>2017-11-30T00:00:00Z</updated>
    <summary type="html"><![CDATA[<h2 id="oder-das-unmögliche-möglich-machen-und-zwar-von-heute-auf-gestern.">Oder: Das Unmögliche möglich machen und zwar von heute auf gestern.</h2>
<p>Ich weiß, ich habe mir fest vorgenommen mindestens einmal im Monat etwas
sinnvolles hier zu schreiben, aber es fällt mir zunehmend schwer. Ich weiß nicht
so recht, worüber oder was ich schreiben soll. Gleichzeitig will ich mich nicht
zu sehr unter Druck setzen, da dann erst recht nichts bei rauskommt. Und so
sitze ich da im Zwiespalt zwischen schreiben wollen und nicht können.</p>
<p>Entschuldigend könnte man sagen, dass ich in den letzten zwei Monaten mit Reha
ziemlich viel um die Ohren hatte und das darunter meine Freizeitprojekte etwas
leiden. Aber da ich schon länger nichts mehr kreativ geschrieben habe, vermute
ich etwas anderes dahinter.</p>
<p>Ich bin ratlos, was ich machen soll und weiß nicht einmal, an wen ich mich in
solchen Situationen wenden kann. Es fühlt sich falsch an jetzt einfach alles
hinzuschmeißen, weil ich nicht weiterkomme. Dazu habe ich mich viel zu lange
schon mit dem Thema beschäftigt und auch langfristige Projekte angefangen.</p>
<p>Ich könnte wirklich etwas Rat gebrauchen.</p>]]></summary>
</entry>
<entry>
    <title>Up, down, to and fro</title>
    <link href="https://blog.nek0.eu/posts/2017-10-09-Up-down-to-and-fro.html" />
    <id>https://blog.nek0.eu/posts/2017-10-09-Up-down-to-and-fro.html</id>
    <published>2017-10-09T00:00:00Z</published>
    <updated>2017-10-09T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Some time went by, since I last wrote and quite a lot happened.</p>
<p>First of all I had a relapse. One of the ugly kind, but I somehow managed to get
out of it, thanks to the people around me. But from what these people tell me I
seem to get better at handling these situations, which is kind of nice. I took a
small vacation staying with some friends in the countryside for a week. There I
took a step forward in a project of mine. Some of you might know, that I want to
build my own tent for various purposes. One is, to finally have a tent (yay!),
the second is to have a tent to take with me on hacker camps and the third and
most difficult task is to have a tent fit for LARPing. I have a plan, so I could
buy some pure cotton canvas very cheaply directly from a weaving mill. Now I
have to come up with a way to build the struts, before I can get to sewing. But
don’t get the impression I was in any way productive during the vacation. I was
mostly lazily lying around.</p>
<p>After that vacation and spending some time at home again more or less
successfully managing to keep up my daily schedule I got a call from my
vocational rehab I applied for. They wanted to take me in prematurely, because
someone else somehow didn’t show up. Because I had nothing better to do I agreed
to take the opening one month before my scheduled start. So now I’m in my third
week of attending this rehab. I was pretty overwhelmed in the beginning because
of all the testing they ran on me, like another IQ-Test and some testing of my
motor skills. Now I’m getting accustomed to the new schedule and to being pretty
exhausted at the end of the day from doing menial tasks aimed for testing my
capacities in certain fields. For now I have been doing tasks in administration
and economy, which is not really the most interesting field and definitely not
the field I want to work in the future, but the more interesting fields like
design or electronics and computer science will follow. I am looking forward to
these. But because of this I had to tone down on my other activities like coding
or writing. I am simply too exhausted when I come home. But I managed to get my
piano up and running again, which I haven’t touched for at least a year, so I
can relax with playing a little music.</p>
<p>Progress feels good.</p>]]></summary>
</entry>
<entry>
    <title>Countdown</title>
    <link href="https://blog.nek0.eu/posts/2017-08-07-Countdown.html" />
    <id>https://blog.nek0.eu/posts/2017-08-07-Countdown.html</id>
    <published>2017-08-07T00:00:00Z</published>
    <updated>2017-08-07T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Ich habe in den letzten Tagen es ieder geschafft eine Kurzgeschichte zu
schreiben. Diesmal auch tatsächlich auf Deutsch.</p>
<div class="scripture with-initial">
<p>Zehn</p>
<p>Ich haste durch die Bahnhofshalle und verzweifelt halte ich Ausschau nach einem
freien Fahrkartenautomaten. Hinter mir zerre ich meine beiden schweren Koffer
her, in einem meine Kleidung und Reiseutensilien, in dem anderen das Paket.
Vor allen anderen Automaten stehen Menschen, zumeist Touristen, in langen
Schlangen an. Viel Zeit bleibt mir nicht mehr. Ich hätte gerne mehr Vorbereitung
gehabt, aber der Anruf meiner Mutter kam überraschend. Ich verlasse die
Bahnhofshalle und begebe mich in die
verschlungenen Gänge des Bahnhofs. Erst als ich an den Schränken der
Gepäckaufbewahrung vorüber gehe, sehe ich in einer dunklen Ecke einen einsamen
Fahrkartenautomaten stehen. Die Ecke ist dunkel, die Leuchtstoffröhre, die für
Licht sorgen sollte, flackert nur in unregelmäßigen Abständen mal auf und der
Automat ist mit diversen Lackstiften und Permanentmarkern verunstaltet worden,
sodass ich mich eigentlich nicht traue ihn zu bedienen, aber eine kurze
Erinnerung an die übervolle Bahnhofshalle lässt mein Zögern dahinschmelzen.
Derjenige, der den Fahrkartenautomaten verunstaltet hatte, muss wohl ein
ziemlicher Kartenspiel-Narr gewesen sein, denn überall auf dem Automaten sind
Spielkarten aufgemalt, doch alle sind sie von der Farbe Pik.
Ich bin gerade dabei an dem verkrusteten Automaten meine Fahrkarte zu Ziehen, da
krächzt eine weibliche Stimme aus dem schief hängenden Lautsprecher.<br />
“Der IC nach Berlin fährt heute außerplanmäßig von Gleis Neun.”</p>
<p>Flehentlich schaue ich auf das glimmende Licht des Ausgabeschachtes am
Automaten, dass er doch endlich meine Fahrkarte ausspucken möge. Ich muss zum
Gleis 9, am anderen Ende des Bahnhofs, und habe nur noch wenig Zeit. Innerlich
verfluche ich mich selbst, dass ich mich in die Machenschaften meiner Mutter
habe mit hineinziehen lassen. Ich weiß noch nicht mal, was ich in meinem Koffer
habe, aber ich weiß, dass es die Polizei auch nicht wissen sollte.
Endlich flattert die Fahrkarte auf den Boden des Ausgabeschachtes. Ohne zu
zögern greife ich danach und verlasse die unheimliche Ecke des Bahnhofs, noch
bevor mir der Automat eine gute Reise wünschen kann. Ich haste durch den langen
Gang unterhalb der Gleise und durch die Bahnhofshalle, bis ich mein Gleis
erreiche. Ohne zu zögern springe ich in den Zug und kurz nachdem sich die Türen
hinter mir schließen, geht ein Ruck durch den Wagen und langsam setzt er sich in
Bewegung. Langsam manövriere ich mich im Zug vorwärts um an einen Sitzplatz zu
kommen, aber sobald ich in das Innere des Wagens trete, zerfallen meine
Hoffnungen. Alle Sitzplätze sind besetzt und im Gang stehen schon Leute, die,
wie ich, keinen Sitzplatz gefunden haben. Umständlich drehe ich mich mit meinem
schweren Gepäck um, wobei ich meinen Koffer einem besonders breitbeinig
dasitzenden jungen Mann unabsichtlich ins Knie ramme. Dieser entrüstet sich<br />
“Mensch, geben sie mal Acht!”.</p>
<p>Ich entschuldige mich hastig und verlasse so schnell es geht den Ort des
Geschehens. Ich irre weiter durch den Zug bis ich erst nach einiger Zeit einen
freien Sitzplatz finde, der auch nicht reserviert ist. Bevor ich mich erschöpft
auf den Sitzplatz fallen lasse, verstaue ich meine Sieben Sachen in der
Gepäckablage. Der Wagen ist etwas leerer als die anderen, dafür aber lauter.
Familien fahren mit ihren Kindern wohl in den Urlaub und es wird gelacht,
gespielt und im Gang hin und her gerannt. Dabei bleibt ein kleines Mädchen
unvermittelt an meinem Platz stehen und kräht mir mit lauter Stimme “Sieben!”
entgegen, bevor sie weiter ihren Spielkameraden lachend hinterherläuft.</p>
<p>Ich versuche es mir so gut es geht auf meinem Sitzplatz gemütlich zu machen. Ich
ziehe die Jacke aus und rolle sie zu einem behelfsmäßigen Kopfkissen zusammen.
Viel anderes als schlafen bleibt mir nicht übrig, denn mich erwarten sechs
Stunden Fahrt und in meiner Eile habe ich vergessen mir eine passende
Beschäftigung, wie ein Buch, einzupacken. Ich lehne an der Wand des Wagens und
lausche dem monotonen Rattern des Zuges und betrachtete abwesend die Schrauben,
die den Klapptisch am Sitz vor mir halten. Es sind sechs.</p>
<p>Während ich dasitze und meine Augenlider immer schwerer werden höre ich ein
Flattern wie vom Schlagen vieler Flügel. Draußen vor dem Fenster wird es
schlagartig dunkel, der Lärm im Zugwagen verstummt und auch der Zug scheint auf
wundersame Art angehalten zu haben. Ich stehe auf, und schaue mich im Wagen um.
Er ist Leer. Wo eben noch spielende Kinder waren, ist nun niemand. Ich gehe fünf
Sitzreihen vor und versuche irgendjemanden zu finden, doch es ist niemand da.
Der Wagen bleibt leer, geradezu klinisch rein. Plötzlich öffnen sich die Türen
und fünf Raben fliegen laut krächzend herein und kreisen über meinem Kopf. Doch
ihr krächzen ist sonderbar. Jedes einzelne klingt wie ein verzerrtes “Fünf!”</p>
<p>Ich versuche wegzurennen, doch meine Füße stecken fest. Ich bin mittlerweile bis
zu meinen Knöcheln im Boden eingesunken und sinke rasch weiter ein. Schon stecke
ich bis zu den Knien im Boden, da schaue ich auf zu den Raben, welche weiter
hämisch krächzen. Sie kreisen zu viert über meinem Kopf, während der Fünfte in
der Mitte des Kreises flattert und sich mit dem Schnabel vier Federn ausreißt
und zu Boden fallen lässt. Doch noch bevor Sie den Boden erreichen verwandeln
sie sich Spielkarten. Vier Pik-Asse liegen vor mir auf dem Boden, in welchen ich
weiter einsinke. Ich bäume mich weiter auf, doch ich versinke weiter im Boden,
Ich bin schon bis zur Brust eingesunken und habe Schwierigkeiten beim Atmen.</p>
<p>Ein Finger bohrt sich dreimal unsanft in meine Schulter. Ich schrecke hoch. Ich
war eingeschlafen und hatte alles nur geträumt. “Zum dritten Mal: Die Fahrkarte
bitte” sagt der Schaffner ungeduldig, welcher mit gezückter Stempelzange neben
meinem Sitzplatz steht. Ich nestele in meinem Jackett nach der Fahrkarte und
reiche sie ihm. Misstrauisch kontrolliert er sie und obwohl ich mir sicher bin,
dass alles mit ihr in Ordnung ist, verspüre ich Erleichterung, als der Schaffner
sie schließlich abstempelt.</p>
<p>Die restlichen zwei Stunden der Fahrt vergehen ereignislos, doch wage ich es
nicht wieder einzuschlafen aus Angst vor weiteren Albträumen. Ich komme am
Berliner Hauptbahnhof auf dem zweiten Gleis an. Ich steige aus mit meinem
schweren Gepäck und gehe zum Ausgang. Während ich gehe, fühle ich mein Handy
vibrieren. Ich halte an und schaue aufs Display. Zwei verpasste Anrufe. Beide
von meiner Mutter. Mich überkommt Übelkeit, während ich ihre Nummer wähle.
Mit zuckersüßer Stimme begrüßt sie mich am Telefon, doch ohne lange Umschweife
kommt sie auf ihr eigentliches Begehr. “Hast du die beiden Pakete, um
die ich dich gebeten habe?” fragt sie weiter mit zuckersüßer Stimme.
Mutters Pakete. Dinge die sie bei mir deponiert, damit sie das Amt nicht
mitbekommt. “Ich habe nur eines mit. Ich wusste nicht, dass ich beide mitbringen
sollte.” Sage ich wahrheitsgemäß während ich den Bahnhof verlasse.</p>
<p>“Nie kannst du ein einziges Mal eine Sache richtig machen!” schreit mich meine
Mutter aufgebracht vom anderen Ende der Telefonleitung an, während ich die
Straße überquere, “Ich bitte dich nur im eine Sache und du musst es ja
vergessen. Du hast deinen Kopf nur, damit es dir nicht in den Hals
hineinregnet!” führt sie weiter aus. Es folgen weitere wüste Beschimpfungen,
doch ich höre gar nicht mehr hin. Ein Kratzen innerhalb meines linken Ärmels
lenkt mich plötzlich ab. Aus dem Augenwinkel sehe ich, wie eine einzelne
Spielkarte aus meinem Ärmel fällt, zu Boden flattert und mit der Rückseite nach
oben liegen bleibt. Abwesend bücke ich mich, hebe die Karte auf und drehe sie
um. Ein einzelnes Symbol prangt mir entgegen. Es ist ein Pik-Ass. Ich nehme nur
noch ein lautes Hupen wahr und ein Paar heller Scheinwerfer, die auf mich
zurasen.</p>
<p>Null</p>
</div>]]></summary>
</entry>
<entry>
    <title>How to use OTF fonts with pdflatex</title>
    <link href="https://blog.nek0.eu/posts/2017-07-21-How-to-use-OTF-fonts-with-pdflatex.html" />
    <id>https://blog.nek0.eu/posts/2017-07-21-How-to-use-OTF-fonts-with-pdflatex.html</id>
    <published>2017-07-21T00:00:00Z</published>
    <updated>2017-07-21T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>In the last days I had an interesting Problem to solve, which involved
LaTeX, OTF font files and a special set of requirements. I needed to import and
use the OTF fonts in a LaTeX document and this document needed to be compiled
through pdflatex.</p>
<p>First off: If you need to use OTF fonts in LaTeX documents, you can simply
switch to XeLaTeX or LuaLaTeX, like I did in the first place. Both of these
environments support the package <code>fontspec</code>, which makes using fonts installed
in your system extremely easy. So if you can, switch the environment.</p>
<p>If you can’t switch the environment, don’t want to, feel a little adventurous or
even want to feel some of the innards of LaTeX you can choose the path I am
about to show.</p>
<p>Before you can start, you need to install the <a href="http://www.lcdf.org/type/#typetools">LCDF typetools</a>, which is
a set of tools for manipulating the font definitions of LaTeX. Most GNU/Linux
distributions have them in their repositories, Mac users can install them
through homebrew and even Windows binaries are available on the website.
Additionally make sure, that you use <code>updmap</code> in system mode and have root
privileges.</p>
<p>To create the font mappings from the OTF, you simply run</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> otftotfm <span class="at">-a</span> <span class="op">&lt;</span>fontfile<span class="op">&gt;</span> --vendor <span class="op">&lt;</span>vendor<span class="op">&gt;</span> --typeface <span class="op">&lt;</span>typeface<span class="op">&gt;</span> -e texnansx</span></code></pre></div>
<p>Where you replace the items in the angle brackets. This not only produces the
mappings, but also places them in the right directory. (If <code>otftotfm</code> complains
because of <code>updmap</code>, run the <code>updmap</code> commands in the error messages as
<code>updmap-sys</code>.)</p>
<p>Before you can actually use the Font, you have to write your own font
definition. A small template for this follows, which should be saved as
<code>T1&lt;typeface&gt;.df</code></p>
<div class="sourceCode" id="cb2"><pre class="sourceCode latex"><code class="sourceCode latex"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\ProvidesFile</span>{T1&lt;fontname&gt;.fd}</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>[YYYY/mm/dd foobar]</span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\DeclareFontFamily</span>{T1}{&lt;fontname&gt;}{}</span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\DeclareFontShape</span>{T1}{&lt;fontname&gt;}{m}{n} {&lt;-&gt; &lt;fontface&gt; } {}</span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\endinput</span></span></code></pre></div>
<p>Here you can define <code>&lt;fontname&gt;</code> as you wish, the other elements in angle
brackets correspond to the box above.</p>
<p>To actually use it, you can call</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode latex"><code class="sourceCode latex"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\renewcommand*</span>{<span class="ex">\familydefault</span>}{&lt;fontname&gt;}</span></code></pre></div>
<p>from your document to change the font in the whole document, assuming the
<code>T1&lt;fontname&gt;.fd</code> is in your project folder, or call</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode latex"><code class="sourceCode latex"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>Lorem ipsum {<span class="fu">\fontfamily</span>{&lt;fontname&gt;}<span class="fu">\fontseries</span>{m}<span class="fu">\fontshape</span>{n}</span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\selectfont</span> dolor sit} amet</span></code></pre></div>
<p>to change the font only for “dolor sit” in this example.</p>
<p>There are tons of other options how to handle fonts in LaTeX, but this is the
most convenient one I found.</p>]]></summary>
</entry>
<entry>
    <title>Busy doing everything</title>
    <link href="https://blog.nek0.eu/posts/2017-07-10-Busy-doing-everything.html" />
    <id>https://blog.nek0.eu/posts/2017-07-10-Busy-doing-everything.html</id>
    <published>2017-07-10T00:00:00Z</published>
    <updated>2017-07-10T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>First of all I have to apologize for not updating my blog in the past months.
I have been very busy in that time, having my internship and having it converted
to a part-time job, after which I hopefully will be starting my apprenticeship.</p>
<p>In my free time I am still pursuing my projects and starting new ones. For
example: My Game Engine makes progress so far, that I am now implementing
physics. It’s still in testing and doesn’t work always right, but the tests look
promising.</p>
<p>My book also does some progress. I actually managed to make it some kind of
habit to work on it at least on sundays. I usually meet with my older brother
and we discuss things related to writing, while we both work on our books. It’s
cool to exchange Ideas this way and ask for an opinion, when one of us is stuck.</p>
<p>That’s about it. see you soon.</p>]]></summary>
</entry>
<entry>
    <title>Back to life</title>
    <link href="https://blog.nek0.eu/posts/2017-04-19-Back-to-life.html" />
    <id>https://blog.nek0.eu/posts/2017-04-19-Back-to-life.html</id>
    <published>2017-04-19T00:00:00Z</published>
    <updated>2017-04-19T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>After being out of the cycle for quite some time (I was in hospital as I wrote
<a href="https://nek0.eu/posts/2016-09-02-In-other-news.html">earlier</a>) I am gradually coming back into what might be called regular life.</p>
<p>I have been an intern at a local tech company for the past few weeks, where I
mostly write documentation, but also help with other stuff. I work only 20 hours a
week, so I don’t overexert myself too much. I’m still not at all well. I really enjoy
my job there, it’s definitely better than sitting at home and slowly sink back into
depression again.</p>
<p>But still there is some frustration in it. I still remember how I was before and now
some of these qualities have not come back (yet). My concentration got better, thanks
to the job and the programming I still do. I may have arrived at the beginning of the
“valley of despair” with Haskell. My projects don’t progress with the speed i would
like them to progress and the complexity is sometimes a little overwhelming. I have
the impression that I pretty much suck at this language, yet still I don’t want to give
it up.</p>
<p>Writer’s block is also still there, but sometimes I get a little hint of an idea I
immediately put down. I’m trying to get a regular schedule for writing or at least
writing exercises. I am also looking for writing group in my area, but there seems
seems to be nothing around my area.</p>
<p>That’s about it. A short update about my life.</p>]]></summary>
</entry>
<entry>
    <title>Profiling in Haskell</title>
    <link href="https://blog.nek0.eu/posts/2017-03-03-Profiling-in-Haskell.html" />
    <id>https://blog.nek0.eu/posts/2017-03-03-Profiling-in-Haskell.html</id>
    <published>2017-03-03T00:00:00Z</published>
    <updated>2017-03-03T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>On of my projects is a game engine called “Affection”. Its design is loosely
based on the game engine “Löve” for Lua.</p>
<p>Because I have been doing it a lot recently in this project, I would like to
make public the method of profiling I use.</p>
<h2 id="prerequisites">Prerequisites</h2>
<p>first of all, you will need the profiling libraries for Haskell, which in Debian
you can find in the <code>ghc-prof</code> package.</p>
<p>Next you need to enable profiling in your build environment. You can do this
either globally or per-package. If you want to enable it globally, you just need
to add</p>
<pre class="cabal"><code>profiling: True</code></pre>
<p>to your <code>~/.cabal/config</code> file.</p>
<p>If you want to enable it per-package, you need to add the same line to a
<code>cabal.config</code> in your projects root directory (The same directory your
<code>*.cabal</code> file is located.</p>
<p>When enabling profiling, it might happen, that you need to reinstall a whole
lot of packages. Sandboxing your project might be a good idea.</p>
<h2 id="compiling">Compiling</h2>
<p>Recompiling your projects with profiling options should be easy. Just invoke
<code>cabal build</code>.</p>
<h2 id="profiling">Profiling</h2>
<p>After your build succeeded, you can start profiling your executables by</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="ex">path/to/executable</span> +RTS <span class="at">-hc</span></span></code></pre></div>
<p>Your executable will run as expected, you can try it out and everything. When
your application terminates, it produces an file ending with <code>.hp</code>, containing
your profiling information. Its content is rather cryptic, but that doesn’t
matter. There are tools even for that. You can try running</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">hp2ps</span> <span class="at">-c</span> executable.hp</span></code></pre></div>
<p>where <code>executable</code> is the name of your executable. This produces a <code>.ps</code> file,
a simple postscript file, that you can open with your PDF-viewer. You will see
a graph showing memory allocation per function, which might lead you to memory
leaks or similar problems.</p>
<p>If you want to profile your executable by datatype memory allocation, just run
the profiling command (the one with the <code>+RTS</code>) and write <code>-hy</code> instead of <code>-hc</code>
.</p>
<p>I hope this helps you out hunting your bugs, it sure helped me a lot.</p>]]></summary>
</entry>
<entry>
    <title>A new short story</title>
    <link href="https://blog.nek0.eu/posts/2017-02-14-A-new-short-story.html" />
    <id>https://blog.nek0.eu/posts/2017-02-14-A-new-short-story.html</id>
    <published>2017-02-14T00:00:00Z</published>
    <updated>2017-02-14T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>To battle my recent writer’s block, I tried different techniques to come up with
stories. One of these techniques, working with <a href="https://www.storycubes.com/">story cubes</a>, gave me
interesting stuff to work with, resulting in the following short story.</p>
<div class="scripture">
<p>“Come, we have to go on”<br />
said Ari as he reached out to his younger brother Kfir.<br />
Kfir stood up after he had stumbled in the searing hot sand of the
desert.<br />
“It’s been days. Do you think they still pursue us?”<br />
asked Kfir.<br />
“I don’t know, but I don’t want to find out either.”<br />
his brother responded with a strange look on his face.<br />
They were fleeing from the red tower – the place where they had been
held since their village had been attacked by men with strange dark skin
colour and only barely speaking their tongue. Since then they had never
seen anyone from their village again. They had been kept in hot dungeons
stinking of filth and decay with just barely enough to eat and drink.
Every day, people had been taken away from the dungeon, never to return.
Ari had tricked the guards into opening the door so they could escape
their uncertain fate into the desert.<br />
“Ari, I’m thirsty”<br />
“Please don’t complain. I’m thirsty, too. You know just as well as I,
that one apple is all that we have left.”<br />
After that Kfir fell silent. He was too tired to argue and about to lose
all hope. For days, he and his brother had been following the stars at
night. Stars which, some of them, they have never seen before.<br />
Kfir stumped weakly after his brother through the sand when he suddenly
bumped into him.<br />
“Do you hear that?”<br />
Ari asked.<br />
There was a hissing sound in the distance. They looked up into the blue,
cloudless sky to see where it came from. They saw something falling
down. With a loud thud, it dropped into a dune in the distance.
Curiosity befell Kfir. He began to run to the place where the object was
glimmering in the sand. Ari shouted something, but Kfir didn’t listen.
He ran and ran until he reached the small crater in the sand. There it
was. A large, white egg with a visible crack in its shell. Ari arrived
just as Kfir was about to slide down the slope of the crater towards the
egg.<br />
“Wait. We don’t know what it is.”<br />
he said, but that didn’t stop Kfir.<br />
Kfir slid down to the egg and examined it. It was colder than the
surrounding sand with a very smooth surface, which glistened with all
colors of the rainbow. Carefully he knocked on the shell. Suddenly,
there came a loud wailing noise from the egg and Kfir backed off in
surprise. Ari came sliding down the slope.<br />
“What was that?”<br />
he asked with an alarmed voice.<br />
“I think there is something inside the egg.”<br />
Kfir responded and gave the shell another knock. Another heartbreaking
sound came from it. He dug his fingernails into the crack in the shell
and tried to pry it open but to no avail.<br />
“What are you doing? We don’t know what’s inside. What if it’s
hostile?”<br />
Ari interjected.<br />
“You mean more hostile than this desert?”<br />
asked Kfir with bitterness in his voice. He heard his brother breathing
in as if to prepare for a response, but he remained silent in the end.
Instead, Ari kneeled down to the egg and helped Kfir try to open the
egg, but even with their strengths combined, they did not succeed in
prying the egg open. During their attempts the creature inside the egg
kept on wailing, but each time it seemed increasingly faint.<br />
Ari stood up while Kfir was still trying to open the egg.<br />
“We need a tool to open this.”<br />
he said and tapped gently on his brother’s back.<br />
“Look, there are some cliffs over there. If we carry the egg over there,
we can open it with a rock.”<br />
he continued.<br />
Together they picked up the egg. It was still surprisingly chilly and a
lot heavier than it looked. With every shock while carrying the egg the
creature in it let out a small howl and each of these howls stirred a
feeling of compassion in Kfir. He was fighting back his tears by the
time they arrived at the cliffs of red rock. Gently, they lowered the
egg into the sand, grabbed some sharp rocks and hacked at the shell on
the spots already weakened with cracks.<br />
“Hold on just a little longer, we’re nearly finished”<br />
Kfir whispered silently with a soothing voice, unsure whether he tried
to calm himself or the creature inside the egg. They continued until
finally the eggshell broke in half and out of it emerged, with a joyful
purr, a colourful turtle. Its skin was of a dark grey colour, but the
scales on its shell shone in bright colours, each of them in a different
colour. Both brothers sighed with relief, when they heard the turtle’s
soft purr. Kfir slowly approached the turtle and carefully caressed its
head. The turtle responded by closing its eyes and purring again.<br />
“See? It’s not hostile at all”<br />
triumphed Kfir with a laugh.<br />
The turtle backed off slightly and, with a soft hum, lifted itself in
the air and floated slowly in Ari’s direction. It startled to nibble on
the pouch he carried on his belt. Both brothers gasped audibly. They had
never seen anything like this.<br />
“Hey! Back off!”<br />
shouted Ari after he recovered from his shock, He shoved the turtle
gently from his pouch. The turtle backed off slowly with a growl. Kfir’s
stomach rumbled.<br />
“I’m hungry, too”<br />
“This is all we have left, Kfir. We can’t just waste it.”<br />
“I didn’t say to give the turtle the whole apple. We could at least
share it.”<br />
argued Kfir.<br />
Ari sighed and shook his head.<br />
“Let’s at least go into the shade”<br />
he said and went closer to the cliffs. Kfir followed with the turtle.<br />
Once they arrived in the shadows of the ragged cliffs Ari took the
shriveled apple out and broke it into pieces. He gave two to his brother
and resorted to eating the smallest one himself. Kfir delightedly chewed
his part of the apple while feeding the other part to the turtle, which
rested purring on his lap.<br />
After finishing their meagre meal they remained in the shadow of the
cliffs for the remainder of the day. Kfir spent most of the time
sleeping and the turtle did not leave his side. Ari also found the time
to catch some sleep.<br />
As soon as the setting sun touched the horizon a deep rumble shook the
cliffs. The stones began to move and the sand began to shift. Great
black claws emerged from the sand and tried to grab the brothers. They
managed to evade each of the attacks, but could not escape because of
the shaking ground. Ari grabbed Kfir by the waist and tried jumping off
the cliffs. He succeeded to jump down to where the sand had shifted
away, just to see that under the claws waited a giant orifice full of
sharp teeth. Two yellow protruding eyes leered maliciously at the
brothers. The sand was still shifting and dragging them towards their
certain doom, when with a howling sound the turtle came floating down.
The brothers grabbed the turtle by its shell and the turtle started
lifting them out of the danger. Just as they were about to get away,
another claw emerged from the sand and grabbed Ari by the leg.<br />
“You go on without me! It can’t lift us both!”<br />
Ari shouted over the roaring of the shifting sand and rumbling rocks. He
let go of the turtles shell. Kfir reached out. He wanted his brother to
live. He missed Ari’s hand by just a small distance.<br />
With tears in his eyes Kfir looked back and watched as his brother was
dragged towards the maw. He struggled against the grip of the mighty
black claw holding his leg, but he was mercilessly dragged inside the
orifice of the giant crab and crushed by its mighty mandibles. Without
Ari’s weight the turtle increased rapidly in speed and left the place of
horror with Kfir on its back.<br />
They flew night and day until Kfir almost couldn’t hold on the turtle’s
shell any longer when a giant tree appeared on the horizon, its branches
reaching far into the clouds. As they approached he could see houses
built into the boughs and towers and gates on the outermost branches.
Giant birds transporting people and goods on large saddles filled the
air around the tree coming to the gates and leaving in the distance.
Kfir directed the turtle gently towards the nearest gate, where they
landed safely. His legs were weak so he stumbled more than he walked
towards the gate followed by the turtle which floated in midair.<br />
Just before before Kfir could cross the gate and enter the city, he
heard a sharp call.<br />
“Halt! Who are you and what is your desire in Oulian?”<br />
Guards emerged from both sides of the gate. He was too tired and worn
out to respond and broke down on the spot.<br />
“bring water and bring him to the palace!”<br />
were the last words he heard, before his mind turned blank.</p>
<p>Kfir woke up in a warm and comfortable bed. He sat up and looked around.
The room he was in was gorgeous. Beautiful paintings covered the walls
and the furniture was of unparalleled craftsmanship. He had been washed
and wore clean clothes with a flowery scent. Beside his bed on a small
table rested a carafe full of water. He immediately grabbed it and
emptied it in no time. He had been thirsty beyond measure. As he stood
up he heard a familiar purring sound. The turtle lay on a cushion beside
his bed and lifted itself in the air as soon as it saw him. Softly the
turtle nudged Kfir and he began caressing its head when suddenly the
door opened and a young woman entered the room.<br />
“Thanks to the tree, you are awake.”<br />
She exclaimed with joy.<br />
“Where am I?”<br />
Kfir asked. It was not his first time waking up in an unknown room, but
this time it at least seemed a lot nicer than in the red tower.<br />
“You are in Oulian Palace, residence of King Bialden. His highness wants
to see you and your turtle. My name, by the way, is Issajana.”<br />
she answered, opened the door again and beckoned him out of the room.<br />
Kfir followed her through the corridors of the palace. They were of
breathtaking beauty. He stopped at a large window for a while and looked
outside. The palace was at the center of the treetop. Outside was a
great bustle with birds flying to and fro carrying all kinds of things
and people. The roads on the large branches of the tree ware also very
lively with merchant stands and people.<br />
He followed Issajana deeper into the palace, until they finally entered
a large hall. It was decorated with the finest paintings of the whole
palace and on the floor were excellent rugs. On a platform in the middle
of the room stood a single throne. Soft flute music was playing in the
background. They entered the hall until they stood before the throne.
The king sitting on the throne was a frail old man, looking sickly with
his pale skin.<br />
“This is the mysterious foreigner, I presume”<br />
said the king with a soft voice.<br />
“What is your name, boy?”<br />
He asked scrutinizing Kfir.<br />
“My name is Kfir, your highness.”<br />
“Do you know what kind of animal you have as company?”<br />
The king inquired further.<br />
“It’s a floating turtle. I don’t know what it’s called.”<br />
Kfir answered. He was surprised about the king’s interest in the
animal.<br />
“This animal is called a ‘Cloud Glider’ and is believed to be extinct.
It is said its tears can heal any wound and illness.”<br />
The king explained with a sigh.<br />
“You see, I am very ill and my healers are unable to help me. It is a
strange whim of fate for you and your companion to arrive at the gates
of my city. Would you allow your companion to heal me and receive my
eternal gratitude?”<br />
Kfir looked at the turtle and the turtle looked back. It seemed that it
had understood the whole conversation and nodded slightly.<br />
“I will allow it, but I have a condition. I want to erect a tombstone
for my brother, who sacrificed his life to save ours.”<br />
The king didn’t need long to consider this offer.<br />
“I agree. You will be given a spot on the palace grounds and the
services of my master mason for your tombstone. Your brother’s bravery
has to be remembered.”<br />
As the king finished, the turtle purred softly and floated towards him.
A single teardrop rolled down the turtle’s cheek and fell onto the
king’s open hand, where it landed as a clear little gem.<br />
“I thank you so much. I will have everything arranged for you. Be my
guest in the meantime.”<br />
said the king, still looking at the little gem in his hand.<br />
In the next days Kfir spent time with the king’s mason, who made a great
tombstone of marvellous artisanship for Ari. With finally a place to
mourn for his brother, Kfir arranged a symbolic funeral for him.<br />
The king grew fond of Kfir in the time he recovered from his illness and
endowed him a small house in his city.<br />
As the years went on, Kfir spent time looking for his native village on
the back of his cloud glider he named Anani, but he never found his
village nor the red tower and with the years passing he spent more and
more time in Oulian until the death of king Bialden, who, being
childless his whole life, named Kfir his successor.</p>
</div>]]></summary>
</entry>
<entry>
    <title>Writer's block</title>
    <link href="https://blog.nek0.eu/posts/2017-01-10-Writer%27s-block.html" />
    <id>https://blog.nek0.eu/posts/2017-01-10-Writer%27s-block.html</id>
    <published>2017-01-10T00:00:00Z</published>
    <updated>2017-01-10T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi guys. I am having a serious problem with my writing for the past few months.</p>
<p>I am not getting anywhere.</p>
<p>I suspect I have a writer’s block.</p>
<p>A writer’s block is that strange state which I perceive as the inability to come
up with Ideas. I stare at a blank page (more precisely a blank screen in my
case) and my mind is just as blank. I look through my notes, but no new pictures
form in my mind. This is extremely frustrating and the longer it lasts the more
I doubt that my work is good enough to be published one day.</p>
<p>I’m trying not to put myself under too much pressure because of this, but it’s
not easy. I always tend to compare myself with times before. When I was at the
beginning, I had tons of ideas around and was barely fast enough to put them all
down. I suspect that I even missed a great portion of them.</p>
<p>To make things worse, I have not yet managed to make my writing a habit, which
might be beneficial to my case. I only wrote occasionally and for about 3 months
I did not write at all.</p>
<p>I don’t like the idea of abandoning my project even temporarily. I just like the
world and the people I created too much. It would feel like betraying them.</p>
<p>I don’t know what to do.</p>]]></summary>
</entry>
<entry>
    <title>Happy new year</title>
    <link href="https://blog.nek0.eu/posts/2017-01-03-Happy-new-year.html" />
    <id>https://blog.nek0.eu/posts/2017-01-03-Happy-new-year.html</id>
    <published>2017-01-03T00:00:00Z</published>
    <updated>2017-01-03T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Congress is over, the new year has begun. I hope you all had pleasant holidays
and a good start into the new year. I was able to spend New Years Eve with
good friends and relax from congress.</p>
<p>Congress was a new experience for me and sometimes a difficult one. I still
don’t handle large crowds very well. Luckily I had some kind of place of
retreat at the assembly table of our hackerspace.</p>
<p>My problem with large crowds made it hard to visit many talks, but luckily I
will be able to watch them on <a href="http://media.ccc.de" class="uri">http://media.ccc.de</a> thanks to the great work of
the VOC team. At least I got to socialise a little with people I usually don’t
meet due to geographical circumstances.</p>
<p>With me usually spending much time at the assembly table I indulged into
programming Haskell. I wanted to see how much my project of the past few months,
my game engine <a href="https://github.com/nek0/affection">Affection</a>, has grown into a usable state. I implemented a
game similar to <a href="https://en.wikipedia.org/wiki/Asteroids_(video_game)">Asteroids</a> called “Haskelloids”, whose code base can be
seen <a href="https://github.com/nek0/haskelloids">on Github</a>. It is basically playable, but I’m still in the process of
refining it further. Not only the game, but also the engine are still rough at
the edges.</p>
<p>Unfortunately I didn’t dare to make many photos at congress, but when I have my
films developed I’ll upload what I have.</p>]]></summary>
</entry>
<entry>
    <title>Holidays and such</title>
    <link href="https://blog.nek0.eu/posts/2016-12-23-Holidays-and-such.html" />
    <id>https://blog.nek0.eu/posts/2016-12-23-Holidays-and-such.html</id>
    <published>2016-12-23T00:00:00Z</published>
    <updated>2016-12-23T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks. It is already about time this year came to an end.</p>
<p>There is still one thing I’m looking forward to this year. It’s congress time!</p>
<p>This year I will be attending the Chaos Communication Congress for my first
time. I’m afraid of it and still I can’t wait to be there at the same time.
There’s lots of people I want to meet and tons of events I want to attend.
I already got my camera equipment up and running again, so I hope shortly after
the event I will be able to post some impressions on <a href="https://eidolon.nek0.eu">Eidolon</a>.</p>
<p>At congress I will also have my hacker passports with me, so you can look for me
or call me at congress DECT 6350 if you want one.</p>
<p>After congress the next year will get interesting. If all works out right, I
will start a vocational preparation after my long stay in clinic. I got released
just recently, with the outlook of having to attend therapy for quite a long
time.</p>
<p>In closing I wish you all pleasant holidays, we’ll see each other at congress or
next year.</p>]]></summary>
</entry>
<entry>
    <title>Time goes by</title>
    <link href="https://blog.nek0.eu/posts/2016-11-24-Time-goes-by.html" />
    <id>https://blog.nek0.eu/posts/2016-11-24-Time-goes-by.html</id>
    <published>2016-11-24T00:00:00Z</published>
    <updated>2016-11-24T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>I just realised, that it’s has been a month, that I have posted my last post
here. Another month has passed I am not really further in my goals. I’m still
in therapy, which takes up most of my time and energy now. This is very
frustrating for me, as I don’t have neither time nor energy for my projects,
like my book or writing in general. And to top it all off, when I somehow have a
little time and energy, my mind is blank. I can’t come up with ideas. So I’m
either frustrated or frustrated. Great.</p>
<p>Paired with my frustration is fatigue. I’m constantly tired. I can sleep almost
anywhere. I will be having a polysomnography next month because of that. I
dread this appointment. I don’t like being all wired up.</p>]]></summary>
</entry>
<entry>
    <title>Hackerpass now available</title>
    <link href="https://blog.nek0.eu/posts/2016-10-23-Hackerpass-now-available.html" />
    <id>https://blog.nek0.eu/posts/2016-10-23-Hackerpass-now-available.html</id>
    <published>2016-10-23T00:00:00Z</published>
    <updated>2016-10-23T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks. This weekend I was able to make a great accomplishment. I released my
version of the hacker passport at the <a href="https://datenspuren.de/2016/">Datenspuren</a> event.</p>
<p>The reason why I even started making this passport was, that I haven’t found any
source files of existing hacker passports editable with free software. So I
started making my own. I used <a href="https://inkscape.org/en/">Inkscape</a> and <a href="http://www.gimp.org/">GIMP</a> for images and
<a href="http://www.scribus.net/">Scribus</a> for layouting the passport. The result can be seen <a href="https://github.com/nek0/hackerpass">here</a>
in my Github account.</p>
<p>The reception of the passport at the event was quite good and I hope to
distribute even more of them on the Chaos Communication Congress in December.</p>]]></summary>
</entry>
<entry>
    <title>In other news</title>
    <link href="https://blog.nek0.eu/posts/2016-09-02-In-other-news.html" />
    <id>https://blog.nek0.eu/posts/2016-09-02-In-other-news.html</id>
    <published>2016-09-02T00:00:00Z</published>
    <updated>2016-09-02T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks. I’m sorry I missed to make a blogpost last month, so this one is
coming early. The reason for this is, that a lot went on in my life recently. I
had to make hard decisions and set a new course.</p>
<p>I will be quitting university at the end of this semester. I’m not glad about it
and it still bugs me and fills me with uncertainty about my future, but
rationally it’s the only way. I couldn’t continue studying and working at the
same time to pay the bills <em>and</em> stay psychologically healthy. It didn’t work
out for the last three years and it wouldn’t in the foreseeable future.</p>
<p>With the university not being available as a source of qualification, I’m now
trying to get a training as IT specialist. Working on and with computers has
given me a lot of enjoyment in the past years. I learned to code and how to
maintain Linux systems and I loved to do this in my free time. Maybe that’s my
vocation.</p>
<p>In parallel to my training, which will not start before next year, and until
then I will need a thorough psychological treatment. I can’t bury my past as I
initially wanted to. It still affects me. I need to get rid of certain automated
patterns I still follow. They are not doing me good anymore. I need to work on
my crappy past and what happened to me. Wounds also need to be treated properly,
before you can work again.</p>
<p>In conclusion I would like to thank everyone who has helped me so far. I hope I
can repay you in any way.</p>]]></summary>
</entry>
<entry>
    <title>The day has come</title>
    <link href="https://blog.nek0.eu/posts/2016-07-17-The-day-has-come.html" />
    <id>https://blog.nek0.eu/posts/2016-07-17-The-day-has-come.html</id>
    <published>2016-07-17T00:00:00Z</published>
    <updated>2016-07-17T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Exactly Today the blog becomes 3 years old. I celebrated it with migrating the
underlying lxc container to an unprivileged one. Yay for more security.</p>
<p>I promise to post more content soon. I’m preparing something.</p>
<p>See ya!</p>]]></summary>
</entry>
<entry>
    <title>The great anniversary</title>
    <link href="https://blog.nek0.eu/posts/2016-06-11-The-great-anniversary.html" />
    <id>https://blog.nek0.eu/posts/2016-06-11-The-great-anniversary.html</id>
    <published>2016-06-11T00:00:00Z</published>
    <updated>2016-06-11T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Next month my blog will be three years old. I originally wanted to post this on the exact date,
but I’m all giddy about it, so I do it now.</p>
<p>Three years ago I started my little experiment. I wanted to see If I could run my own website, update it
regularly and run all services related to that. Turns out I can and it’s fun to do it, although I don’t
have a great number of readers (it’s around 10 unique visitors per day, most of them spiders). My
expectation was that I would fail somehow, most likely through loss of interest, but that has not
happened and is now highly unlikely.</p>
<p>So if you read this post and are of fleshy nature, expect more content in this blog. I will try to post
more. As always you can contact me through comments to blog post and by <a href="mailto:nek0@nek0.eu">mail</a>.</p>
<p>To round things up I will write about something I stated I would right from the beginning of this blog,
but haven’t yet done. It’s about tea. I mostly drink Earl Grey tea, which I brew from loose tea. I prefer
loose tea, but will also use teabags, if nothing else is available. Additionally I keep Darjeeling, Ceylon
and Assam teas, but I don’t really prefer one over the others. It depends on my mood, which I brew.</p>
<p>I hope you had fun so far with my blog. Keep being excellent to each other!</p>]]></summary>
</entry>
<entry>
    <title>Flattr buttons arrived!</title>
    <link href="https://blog.nek0.eu/posts/2016-05-09-Flattr-buttons-arrived.html" />
    <id>https://blog.nek0.eu/posts/2016-05-09-Flattr-buttons-arrived.html</id>
    <published>2016-05-09T00:00:00Z</published>
    <updated>2016-05-09T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>As I like to experiment with stuff, I am now trying out <a href="https://flattr.com">flattr</a> and modified my blog
to generate flattr-buttons for each post. I’m not expecting much revenue, but you can surprise me.</p>]]></summary>
</entry>
<entry>
    <title>Interfacing variadic functions from Haskell</title>
    <link href="https://blog.nek0.eu/posts/2016-04-19-Interfacing-variadic-functions-from-Haskell.html" />
    <id>https://blog.nek0.eu/posts/2016-04-19-Interfacing-variadic-functions-from-Haskell.html</id>
    <published>2016-04-19T00:00:00Z</published>
    <updated>2016-04-19T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>I confess I am a Haskell aficionado. Whenever I program something for pleasure, I usually prefer this
language because of its elegance.</p>
<p>Currently I am working on Haskell bindings to the <a href="http://www.gegl.org/">GEGL</a> library. The motivation
behind this my desire to dabble in Game development and I have the need for a library to draw on SDL
Surfaces. I am obviously not really a fan of the easy solutions and I try to learn new things. Like using
the Haskell FFI.</p>
<p>While writing the bindings I encountered the problem, that GEGL exposes variadic functions in its header
which I need to interface. This poses a serious Problem for Haskell because the number of function
arguments has to be constant. There is simply no way defining a function without knowing how many
arguments it has and of what type each argument is. This stays true even for my solution. The only reason
my solution works is that I can limit the cases how to interface these variadic functions to a manageable
amount.</p>
<p>To build my bindings I do not use the standard FFI of Haskell, but the Haskell library
<a href="http://hackage.haskell.org/package/inline-c">inline-c</a> to call the C functions directly without using
rigid bindings. This is achieved in inline-c by wrapping the function call into a QuasiQuoter. As I said
earlier, this still requires you to write a QuasiQuoter for every case this function gets called, but you
don’t have to clutter your code with <code>foreign import ccall</code> declarations.</p>
<p>For limiting your cases I recommend using a sum type as a function argument. A sum type is a type which
has multiple constructors. You can have a constructor for each case you need to interface and distinguish
between them using Haskell’s pattern matching. You can see an example on how to make all this
<a href="https://github.com/nek0/gegl/blob/a393f8651c1c00a42e24ee475e39089b66488e4c/src/GEGL/FFI/Node.hs">in my bindings</a>.</p>]]></summary>
</entry>
<entry>
    <title>Archäologe auf Abwegen</title>
    <link href="https://blog.nek0.eu/posts/2016-03-27-Arch%C3%A4ologe-auf-Abwegen.html" />
    <id>https://blog.nek0.eu/posts/2016-03-27-Arch%C3%A4ologe-auf-Abwegen.html</id>
    <published>2016-03-27T00:00:00Z</published>
    <updated>2016-03-27T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Ich habe wieder einmal die Zeit gefunden für eine Schreibübung. Diesmal sogar mit etwas mehr
als einer halben Stunde Schreibzeit.</p>
<div class="scripture with-initial">
<p>Der Sturz war tief gewesen und die frischen blutigen Schrammen von den Wänden des Schachtes
schmerzten noch, aber wie durch ein Wunder hatte er sich nichts gebrochen.<br />
Er brauchte eine Weile, um sich an die ihn umgebende Dunkelheit zu gewöhnen, Doch er konnte
die ganze Zeit hören. Irgendwo hoch über ihm pfiff immer noch der Sandsturm, doch hier unten
erfüllte ein beständiges metallisch schabendes Geräusch die Umgebung.<br />
Mühsam richtete er sich auf und schaute sich angestrengt um. Wo auch immer er war, die Höhle
in die er hineingefallen war, war nicht natürlich. Ein antik aussehender Säulengang führte
tiefer in die Dunkelheit, aus der das Geräusch kam. Er setzte seinen schweren Rucksack ab und
holte aus einer Seitentasche daran seine alte und zuverlässige Taschenlampe hervor. Ein
gelblicher Lichtkegel vertrieb kurz danach die Dunkelheit und brachte verwitterte Reliefs auf
den Steinblöcken der Wände zum Vorschein. Vorsichtig Schritt er den Säulengang entlang und
hinterließ Fußabdrücke im mehligen Sand, welcher wohl Jahrhunderte unberührt geblieben war.<br />
In einiger Entfernung mündete der Gang in einen großen Runden Raum. Anders als der Säulengang
schien dieser jedoch keineswegs aus Steinblöcken gemauert worden zu sein, sondern war tief in
den Fels gehauen. Die Wände hier waren glatt, die Reliefs scharf un deutlich sichtbar.
Auch der Boden, nur hier und da mit Sand bedeckt, war nicht gefliest, sondern mit
konzentrischen Mustern versehen.<br />
In der Mitte des Raumes war schließlich die Quelle des Geräusches zu sehen. Auf einer Säule
ruhte in Brusthöhe eine metallische Kugel. Er traute zuerst seinen Augen nicht und schritt
näher an die Säule heran, um die Kugel genauer betrachten zu können. Im Strahl seiner
Taschenlampe blieb aber kein Zweifel. Segmente der Kugel rotierten unablässig. Er erkannte
alte Hieroglyphen auf der Oberfläche, konnte sie aber wegen der ständigen Bewegung nicht
lesen.<br />
Neugierig umschritt er die Säule und suchte Hinweise darauf, was er durch puren Zufall hier
entdeckt hatte, doch die Säule war kahl und unverziert. Die Reliefs an den Wänden hingegen
bildeten eine Vielzahl menschlicher und menschenähnlicher Gestalten ab, unter denen er auch
vereinzelt Abbildungen antiker Götter erkannte. Wieder wandte er sich der Säule zu und schritt
nahe an sie heran. Vorsichtig streckte er seine Hand nach der fortwährend rotierenden Kugel
aus. In seinen Fingerspitzen kribbelte es förmlich vor Neugier. Schließlich berührte er die
Kugel.<br />
Vor seinen Augen verschwammen plötzlich Lichter und Bilder, abstoßende und zugleich lockende
Laute drangen an sein Ohr und seine Haut fühlte sich an als würde sie gebraten und
gleichzeitig gefroren und sein Geist war völlig gelähmt.
Als er wieder zu sich kam, stand er im Dunkeln. Seine Hand ruhte auf einer glatten, kalten und
gekrümmten Oberfläche.</p>
</div>]]></summary>
</entry>
<entry>
    <title>A small announcement</title>
    <link href="https://blog.nek0.eu/posts/2016-03-16-A-small-announcement.html" />
    <id>https://blog.nek0.eu/posts/2016-03-16-A-small-announcement.html</id>
    <published>2016-03-16T00:00:00Z</published>
    <updated>2016-03-16T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi again, this time in english. I have a small announcement to make.</p>
<p>Recently I obtained a new domain name for this blog, which is <a href="https://nek0.cat">nek0.cat</a>. Some people
already know this, but it was not public knowledge. I almost forgot to mention it.</p>
<p>This also means, that my subdomains of nek0.eu, like my gallery eidolon and the comment system yacs are
also available under the new domain name as <a href="https://eidolon.nek0.cat">eidolon.nek0.cat</a> and
<a href="https://yacs.nek0.cat">yacs.nek0.cat</a>.</p>
<p>This does not mean, I am dropping my old nek0.eu domain and its subdomains. These names will stay, I just
added a second domain to my assets.</p>]]></summary>
</entry>
<entry>
    <title>Was kleines für zwischendurch</title>
    <link href="https://blog.nek0.eu/posts/2016-03-11-Was-kleines-f%C3%BCr-zwischendurch.html" />
    <id>https://blog.nek0.eu/posts/2016-03-11-Was-kleines-f%C3%BCr-zwischendurch.html</id>
    <published>2016-03-11T00:00:00Z</published>
    <updated>2016-03-11T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Ich hatte es ja vor kurzem angekündigt, oder angedroht, hier auch meine literarischen Ergüsse zu
präsentieren. Dass das so schnell geschieht, habe ich aber eigentlich nicht geplant.</p>
<div class="scripture with-initial">
<p>Laut entlud sich der Druck seines Niesanfalls in das Taschentuch, das er gerade rechtzeitig aus seiner
Hosentasche genestelt hatte. Ein scharfer Schmerz schoss ihm dabei in den Kopf, dort, wo er seine
Nasenhöhle vermutete. Der Schmerz pochte noch unangenehm in der Nase, als er das Taschentuch wieder
senkte. Seine Gedanken waren bei einer Aspirintablette, als er das Taschentuch auf dem Weg zurück zur
Arbeit am nächsten Mülleimer entsorgen wollte. Nur beiläufig warf er einen kurzen Blick darauf, bevor er
es in den Schlund des Mülleimers werfen wollte, da sah er es.<br />
Es war ein kleines schwarzes Quadrat, das da inmitten von Rotz und Schnodder im Taschentuch klebte.
Sofort blieb er stehen. Neugier hatte ihn gepackt.<br />
Sorgfältig betrachtete er seinen Auswurf und was darin eingebettet war. Das kleine Quadrat hatte
zu allen vier Seiten winzige silbrig glänzende Beinchen, von denen sich feine blutige Schlieren durch den
klaren Rotz zogen. Es war zweifelsohne ein Mikrochip.<br />
Wo kam dieser her? Der konnte unmöglich schon vorher im Taschentuch gewesen sein. Das ließ nur den
Schluss zu, dass dieser in seinem Kopf gesteckt hatte. Doch wie kam er da hin und was machte er da?<br />
Seine Gedanken drehten sich immer noch im Kreis, als er unsanft von hinten angerempelt wurde.</p>
</div>
<p>Dieses kleine Fragment entstand heute, kurz nachdem ich von einer Technik gelesen habe, um die
Kreativität ein wenig zu üben. Es handelt sich hierbei um eine Verarbeitung eines sogenannten
“Writing Prompt”. Ich habe leider keine adäquate Übersetzung für diesen Begriff gefunden.</p>
<p>Ein Writing Prompt ist eine kleine Idee oder Zündfunke einer Geschichte. Als Autor selber liest man sich
diesen durch. Er ist selten länger als ein Satz. Danach gibt man sich 10 bis 20 Minuten Zeit,
etwas daraus zu machen. Genau das habe ich gemacht und nach 15 Minuten, die ich mir gegeben habe, ist
das hier herausgekommen. Es ist nicht viel und ich hatte eigentlich Ideen für mehr, aber die Zeit war um.
Es ist aber sehr wohl möglich, dass ich das in eine Art Kurzgeschichte ausarbeite.</p>]]></summary>
</entry>
<entry>
    <title>Es geht wieder weiter</title>
    <link href="https://blog.nek0.eu/posts/2016-03-09-Es-geht-wieder-weiter.html" />
    <id>https://blog.nek0.eu/posts/2016-03-09-Es-geht-wieder-weiter.html</id>
    <published>2016-03-09T00:00:00Z</published>
    <updated>2016-03-09T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Ich bin wieder kreativ tätig, nach Stress, Prüfungen und ähnlich unglücklichen Dingen. Ich bin also
gerade im “Wartungsmodus”, jetzt wo der Stress erst mal weg ist und hole Dinge nach, die ich eigentlich
hätte früher machen müssen.</p>
<p>Was eigentlich nicht zu diesen Dingen gehörte, sich aber durch glückliche Umstände ergab, ist die
Tatsache, dass ich es wieder schaffe an meinem Buch zu arbeiten. Das habe ich seit etwa einem halben Jahr
nicht geschafft, aber in den letzten Tagen habe ich einen Ratschlag befolgt und habe angefangen ein
“Review” des bereits geschriebenen zu machen. Das heißt, dass ich zwar nicht unbedingt etwas neues
schreibe, aber dafür das alte teilweise überarbeite, wo ich es für nötig erachte.</p>
<p>Tatsächlich führt das schon zu einer tiefer greifenden Umstrukturierung meines ersten Kapitels und viele
Dinge werden jetzt ausführlicher beschrieben, um dem Leser ein klareres Bild des Schauplatzes und der
darin befindlichen Personen und Objekte zu bieten.</p>
<p>Nach der langen Pause tut das Review auch gut, dass ich mich wieder in die Welt und die Handlung einfinde,
denn das, was mich am meisten daran gehindert hat zu schreiben, war mein Unvermögen mir Dinge im und um
das Buch bildlich vorzustellen. Das klappt jetzt glücklicherweise wieder.</p>
<p>Was mir auch noch auffällt, ist meine mangelnde Übung im eigentlichen Schreiben. Vieles, was ich bisher
geschrieben habe, erscheint mir stilistisch ungelenk. Da fehlt mir wohl der Input anderer. Wiederum möchte
ich den Inhalt meines Buches preisgeben. Dadurch bin ich wohl gezwungen Fragmente zu schreiben, die nichts
oder sehr wenig mit meinem Buch zu tun haben, um sie dann (hoffentlich konstruktiven) Kritiken
auszusetzen.</p>
<p>Es werden also in Zukunft unter dem Tag <a href="/tags/writing.html">“writing”</a> Textfragmente und kurze
Geschichten veröffentlicht, bei denen ich mich sehr um konstruktive Kritiken freuen würde. Das kann in der
Kommentarfunktion zu dem jeweiligen Blogeintrag erfolgen, oder über direkten
<a href="/contact.html">Kontakt zu mir</a>. Ich bedanke mich schon an dieser Stelle bei allen, die sich dafür die
Zeit nehmen.</p>]]></summary>
</entry>
<entry>
    <title>The decline of role play</title>
    <link href="https://blog.nek0.eu/posts/2016-01-31-The-decline-of-roleplay.html" />
    <id>https://blog.nek0.eu/posts/2016-01-31-The-decline-of-roleplay.html</id>
    <published>2016-01-31T00:00:00Z</published>
    <updated>2016-01-31T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>In my life, I have spent ample amounts of time with role playing games. The first games I have
ever encountered in this genre was was Square Enix’s, at that time called Squaresoft,
“Final Fantasy VIII”. This game left a permanent impression and up to today I still find myself
seriously comparing other games with it even on technical aspects.</p>
<p>This doesn’t mean that I view this game as the pinnacle of role playing games, but it was the first
game, that “sucked me in”. I got engaged in the story, identified myself with characters and sometimes
even started making up stories of my own in this setting. This were things I experienced only with books
up to this point.</p>
<p>When I started studying I already had played some good role playing games, but I already missed more
intelligent interaction with other characters in the games and I missed the opportunity the express
myself and the character I was playing freely. Since I haven’t had an internet connection for my free use
at home, so I have never played MMORPGs, apart from a few days when I visited my brother and was allowed
to play a little “World of Warcraft” on his account.</p>
<p>At that time I got first involved with two concepts of role playing at the same time. Role play as
propagated by MMORPGs and role play as experienced with pen &amp; paper RPGs.</p>
<p>I started playing “Guild Wars 2” with some friends at the time and we tried to play “in character” as it
is called, but we gave up on it pretty quickly, because the surroundings did not support it. We couldn’t
indulge in our role play without being distracted by other individuals conversing on broken 1337speak out
of the context or aggressively advertising shady markets to buy in-game currency. It was impossible to
maintain an atmosphere under these circumstances. We kept on playing, but I gradually lost interest.</p>
<p>At the same time I got to know some people looking for a new member for their pen &amp; paper role playing
group and they convinced me to give it a shot. All I had to lose would be some hours on an evening and I
was willing to take the risk. So we set out to play “Opus Anima”, a german role play system with an
intriguing steampunk setting. What I encountered was something I already had wished for: I could freely
decide my characters reactions to certain events compliant to the world he or she lived in. I had not to
follow a predefined plot. And I could let my character express him- or herself I found fitting for the
character in that situation and was not limited to a small number of arbitrarily chosen reactions.
We were fortunate having an experienced game master who could easily adapt to our reactions and change
the plot on the fly.</p>
<p>We kept playing for a longer period of time, eventually we changed the world to “Shadowrun”, a cyberpunk
setting in the 2070s. Some people left the group and others joined, but in the second half of last year
our play came to a sudden halt as the group broke up with rather unpleasant circumstances. I have not
been able to join another group ever since, because I can’t find any.</p>
<p>Having enjoyed this kind of role play, I sought to pursue it further, without being limited to the people
in my geographical surrounding. With my abilities I naturally sought to find role play on the internet
outside of MMORPGs. Much to my surprise I found out, that role playing was relatively closely associated
to hacker culture. I learned of play-by-email RPGs in different settings and joined one, only to find out
that this particular game was quite dead, as well as other games played this way. I learned of MUDs,
MUCKS, MUSHes and their denizens and set to explore them, only to find out, that most of them adapted to
modern MMORPGs, with mostly hack and slay gameplay, and no role play even encouraged.</p>
<p>So I come to the conclusion, that classical role playing, as it is played in pen &amp; paper or those rather
ancient forms of multiplayer RPGs is on the decline. I find it saddening, that young people seemingly
throw their imagination out and accept what they are spoon-fed as role play. This could in the end lead
to an even greater decline of artistic expression in the future. Mainstream art today is rarely worth a
damn to me, but the prospect of it getting even worse is unbearable.</p>]]></summary>
</entry>
<entry>
    <title>Bitcoin crisis</title>
    <link href="https://blog.nek0.eu/posts/2016-01-16-Bitcoin-crisis.html" />
    <id>https://blog.nek0.eu/posts/2016-01-16-Bitcoin-crisis.html</id>
    <published>2016-01-16T00:00:00Z</published>
    <updated>2016-01-16T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>It has been a while, since I posted something on the topic of Bitcoin, since I am only an uninvolved bystander in the whole matter. From what I could perceive, the Bitcoin network was groing and doing rather well.</p>
<p>It naturally struck me with surprise, when I learned, that the Bitcoin network is in grave danger. I have read <a href="https://medium.com/@octskyward/the-resolution-of-the-bitcoin-experiment-dabb30201f7">this</a> article by a former Bitcoin developer, which describes the current Situation rather clearly and with great detail. I will try to summarize it as good as I can, because the article is rather lengthy.</p>
<p>The underlying technical problem the network currently has, is the blocksize limit enforced by the protocol. But it’s not the limit itself causing the problems, but rather the setting of this limit in the implementation. When Bitcoin emerged for the first time, the block size limit was arbitrarily set to 1MB and has not been changed ever since.</p>
<p>This does not mean, that there have not been attempts to increase this limit, most notably by the <a href="https://en.wikipedia.org/wiki/Bitcoin_XT">Bitcoin XT</a> client and the developers behind it. But the technical and philosophical divergence from the original bitcoin client was and still is not well accepted from certein influential members of the bitcoin community and a wide scale deployment of this client is now strongly discouraged because of the DDoS attacks on larger operators of this cleint in the past, which even led to the downbreak of a whole ISP network.</p>
<p>I hope very much, that the community as well as the developers keep in mind, what the whole Bitcoin experiment is about: The creation of a currency, which can not be controlled by a small possibly malevolent but surely selfish minority.</p>]]></summary>
</entry>
<entry>
    <title>Gallery back online</title>
    <link href="https://blog.nek0.eu/posts/2016-01-06-Gallery-back-online.html" />
    <id>https://blog.nek0.eu/posts/2016-01-06-Gallery-back-online.html</id>
    <published>2016-01-06T00:00:00Z</published>
    <updated>2016-01-06T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Just a small heads-up. Your favourite repository of cat pictures, my gallery is online again. Come visit <a href="https://eidolon.nek0.eu">eidolon.nek0.eu</a>!</p>]]></summary>
</entry>
<entry>
    <title>Back again</title>
    <link href="https://blog.nek0.eu/posts/2016-01-04-Back-again.html" />
    <id>https://blog.nek0.eu/posts/2016-01-04-Back-again.html</id>
    <published>2016-01-04T00:00:00Z</published>
    <updated>2016-01-04T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>First of all I wish you all a pleasant new year 2016 or YOLD 3182.</p>
<p>I’m terribly sorry for the long outage. There were some Problems with the server my services run on. The lesson learned: Reboot your servers regularly. At least after every new kernel upgrade.</p>
<p>As the server was completely down and had to be reinstalled, I took the chance to make some changes to my configuration. From now on this site supports the HTTP/2.0 protocol. It is still a little shaky, but i think I will figure it out.</p>
<p>Another change I made was the change of my certificate issuer. I switched to <a href="https://letsencrypt.org/">letsencrypt</a>, so you, the visitors, don’t need to bother with certificate imports or exceptions. This was no easy decision to make, because I personally like <a href="http://www.cacert.org/">CACert</a> more and I haven’t heard too good things about the letsencrypt client. So I generated my certificates manually through <a href="https://gethttpsforfree.com/">gethttpsforfree</a>.</p>
<p>Unfortunately my image gallery eidolon could not be resurrected yet, because the database has not been resurrected yet. You have to hang in there a little longer. sorry.</p>]]></summary>
</entry>
<entry>
    <title>Goodbye Truecrypt</title>
    <link href="https://blog.nek0.eu/posts/2015-10-03-Goodbye-Truecrypt.html" />
    <id>https://blog.nek0.eu/posts/2015-10-03-Goodbye-Truecrypt.html</id>
    <published>2015-10-03T00:00:00Z</published>
    <updated>2015-10-03T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Maybe som of you will remember, that I once <a href="https://nek0.eu/posts/2014-06-13-Crypto-broken.html">mourned the parting of the truecrypt project</a>. It was the best tool at hand i had to generate encrypted file containers.</p>
<p>I continued to use the software even after the death of its underlying project. Even the audit didn’t reveal any critical vulnerabilities. But albeit the thorough search the auditors overlooked two major security bugs in the software, which became buplic just recently.</p>
<p>This sparked another attempt to find an alternative for truecrypt, which I gladly found in <a href="https://veracrypt.codeplex.com/">veracrypt</a>. Veracrypt is based on the original code of truecrypt, but under the apache license. They fixed the vulenrabilities pretty quickly after they became public.</p>
<p>The whole user interface reminds me strongly of truecrypt, but they overhauled the encryption and hash functions and the container generations. This means, that veracrypt containers are not compatible with truecrypt, but truecrypt containers can still be mounted in veracrypt, because of a builtin “legacy mode”.</p>]]></summary>
</entry>
<entry>
    <title>Timing after Cron</title>
    <link href="https://blog.nek0.eu/posts/2015-09-25-Timing-after-Cron.html" />
    <id>https://blog.nek0.eu/posts/2015-09-25-Timing-after-Cron.html</id>
    <published>2015-09-25T00:00:00Z</published>
    <updated>2015-09-25T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Suddenly my Cron stopped working. It was simply gone. Without warning.</p>
<p>With Cron simply disappearing my daily report about the visitors of my blog was gone.</p>
<p>I had two options:</p>
<ul>
<li>tedious debugging of Cron</li>
<li>finding an alternative</li>
</ul>
<p>After trying the first with no success at all, I tried to find an alternative. A friend showed me that Systemd had timer capabilities, which i could use for my problem. After some experimentation I would like to make a tutorial for Systemd timers.</p>
<p>Some explanation aforehand: Systemd timers are more complex than a cronjob but don’t cover all functionalities, that Cron has. For Example: You have to write two files to create one Systemd timer opposed to a single line in the crontab.</p>
<p>To create a Systemd timer, You need a serivce file and a timer file. I already covered how to write a service file in my <a href="https://nek0.eu/posts/2015-08-28-Daemonize-a-Yesod-application-systemd-style.html">Yesod Systemd tutorial</a>, but I will cover it here again, since the service files needed for timers are simpler.</p>
<p>Let’s assume you want to create a timer for a job called … <code>job</code>. First you create as root the file <code>job.service</code> in <code>/etc/systemd/service</code> with the content:</p>
<pre><code>[Unit]
Description=MyScript

[Service]
Type=oneshot
ExecStart=/full/path/to/script
User=user

[Install]
WantedBy=timers.target</code></pre>
<p>The <code>[Unit]</code> section is pretty self-explanatory, so I will skip it. The <code>[Service]</code> section defines how to run our timed service. Don’t be confused about the term “service”. Systemd has a very broad definition of a “service”. In this example we define, that your service will run just once and stop after running. in <code>ExecStart</code> is the absolute path to our executable script. <code>User</code> defines the user, whoch will run the script. This is optional, but if not given, the user will be root. The last section, the <code>[Install]</code> section just defines, that we want to start our service when all other timers get ready.</p>
<p>After creating the service file, we create a timer file called <code>job.timer</code> in the same directory as the service file. But first, we need to determine, what kind of timer you need. There are two kinds. First, there is the “monotonic timer”, which determines its time to execute from how long the system is running. Then there is the “realtime timer”, which determines its time to run from the system clock. The sekond kind is the one more similar to the behaviour of Cron, so we will generate one. The content of the file is as follows:</p>
<pre><code>[Unit]
Description=Runs script every hour

[Timer]
OnCalendar=hourly
Persistent=true</code></pre>
<p>I will skip again the <code>[Unit]</code> part. The <code>[Timer]</code> part is the most interesting one. in <code>OnCalendar</code> You define when to start your service. for example: a daily execution on 0:20 would be <code>*-*-* 00:20:00</code>. For more information on the time codes call <code>man systemd.time</code>. Finally the <code>Persistent</code> flag sets, what should happen, when the service <em>should have</em> run,but the system was offline. When true, the timer will run at the next possible occasion.</p>
<p>To start the timer, you need to call <code>systemctl enable job.timer</code> and <code>systemctl start job.timer</code>. Do not forget the <code>.timer</code> suffix.</p>
<p>This should be it. If I have forgotten something, please tell me in the comments.</p>]]></summary>
</entry>
<entry>
    <title>Goodbye mining pool</title>
    <link href="https://blog.nek0.eu/posts/2015-09-24-Goodbye-mining-pool.html" />
    <id>https://blog.nek0.eu/posts/2015-09-24-Goodbye-mining-pool.html</id>
    <published>2015-09-24T00:00:00Z</published>
    <updated>2015-09-24T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>This is it. After some years (most of them spent in inactivity) I decided to leave my Buitcoin pool at <a href="https://mining.bitcoin.cz/home/">mining.bitcoin.cz</a>.</p>
<p>The reasons for leaving are mostly because I don’t see me mining profitably in the foreseeable future. I was mining once with my graphics card three years ago, but I never had the funds to get an FPGA miner or even an ASIC miner, so i stopped mining alltogether.</p>
<p>I don’t hold any grudges against this pool, moreover I would like to recommend it to anyone. They are very open ybout their share policy and have been always fair and secure from my point of view. They even kept an amount of rewarded bitcoins for three years for me, which I have just recently withdrawn.</p>
<p>My future Bitcoin income will have to depend on Donations I receive through this blog, so please give and give generously. Every little amount will be highly appreciated.</p>
<p>And as always I am very grateful for any advice or comments through my commenting service or via Email found in the <a href="https://nek0.eu/contact.html">contact section</a>.</p>]]></summary>
</entry>
<entry>
    <title>Namensfindung</title>
    <link href="https://blog.nek0.eu/posts/2015-09-05-Namensfindung.html" />
    <id>https://blog.nek0.eu/posts/2015-09-05-Namensfindung.html</id>
    <published>2015-09-05T00:00:00Z</published>
    <updated>2015-09-05T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Wie versprochen führe ich hier meine Posts über das Schreiben weiter. Diesmal mit einem Schwierigerem
Thema.</p>
<p>Ich tue mich schwer mit der Namensfindung von Chrakteren in meinen Geschichten. Sehr lange überlege ich
hin und her, wie er am besten zu klingen hätte und welche Bedeutung er tragen sollte. Außerdem sollte er
individuell zum Charakter passen. Um alle diese Anforderungen erfüllen zu können bedarf es eines großen
Repertoires an Namen. Wie ich meines fülle möchte ich einmal darlegen.</p>
<p>Es gibt jede Menge Literatur über und für die Benennung von Menschen. Sie sind Betitelt mit “Die besten
Babynamen” oder ähnlich. Mag kitschig klingen und auch seltsam wirken, wenn ich im Buchhandel in der
tiefsten Frauenabteilung in derartiger Literatur blättere, aber beim Streifen durch diese Bücher kann
einem, wenn auch selten, ein Kleinod an Namen auffallen.</p>
<p>Eine andere, wenn auch makabre Namensquelle sind Sterbeanzeigen. Auch dort bin ich schon häufiger fündig
geworden und benutze Vor- oder Nachnamen verstorbener Leute. Genauso wie Sterbeanzeigen ist auch ein
aufmerksamer Gang über den Friedhof geradezu erhellend. Insbesondere die älteren Friedhöfe. Die Namen,
welche aus der Mode gekommen sind oder einfach seit einem knappen Jahrhundert nicht mehr vorkommen haben
es mir besonders angetan.</p>
<p>Schließlich ist auch das Internet eine hervorragende Quelle für alle Arten von Namen. Es gibt ein
reichhaltiges Bouquet an Ratgebern, wie man sein Kleinkind benennen sollte. Auch hier gilt: reinschauen
schadet nicht, aber vertiefen sollte man sich darin nicht. Es gibt auch sehr schöne Seiten, die einem ohne
viel Werbung die Wortherkunft und damit die Bedeutung der Namen verraten. Meine beliebteste Seite ist
<a href="http://www.behindthename.com/">behindthename.com</a>, welche auch gute Filterfunktionen hat und auch Namen zu verschiedenen
Themengebieten anbietet.</p>
<p>So viel zu den Namensquellen. Was einem niemand abnehmen kann ist die Entscheidung für einen Namen zu
treffen. Da hat wahrscheinlich jeder seine eigene Methode. Ich versuche im Namen ein wichtiges Merkmal
der Person, die ich benennen möchte, einzufangen. Mal ist es eine Äußerlichkeit, häufiger aber ein
Charakterzug. Nur selten vergebe ich einen namen nur rein zufällig.</p>
<p>Was meiner Meinung nach nicht geht, sind Namen, die entweder durch grobes draufschlagen auf die Tastatur
entstanden sind oder indem man eine Meute Katzen über selbige gejagt hat. Das ist scheinbar insbesondere
im Fantasy-Genre sehr beliebt und soll wohl den Anschein erwecken, dass da tatsächlich eine Sprache vom
Autor entwickelt wurde. Wenn diese allerdings sonst nirgendwo in größeren Mengen auftaucht, außer in
Namen und ein paar Redewendungen, dann kann man es getrost sein lassen. Da rate ich eher dazu den Bereich
der Namensherkunft exotisch zu wählen. Beispielsweise sind Namen für Zwerge “klassischerweise” aus dem
Altnordischen entlehnt. Dadurch ist dann Namen dieser herkunft für Zwerge reserviert.</p>
<p>Natürlich will ich niemanden davon abhalten, sein Buch zu schreiben wie er es möchte. Wie immer gebe ich
nur meine Meinung kund und versuche Ratschläge zu geben.</p>]]></summary>
</entry>
<entry>
    <title>Daemonize a Yesod application systemd style</title>
    <link href="https://blog.nek0.eu/posts/2015-08-28-Daemonize-a-Yesod-application-systemd-style.html" />
    <id>https://blog.nek0.eu/posts/2015-08-28-Daemonize-a-Yesod-application-systemd-style.html</id>
    <published>2015-08-28T00:00:00Z</published>
    <updated>2015-08-28T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hello again. With exam season finally over I finally managed to upgrade my server system and thus ending up with systemd.</p>
<p>I wasn’t convinced initially, that it was for the better, but after handling the matter, I found the whole systemd ecosystem quite helpful. Creating your own service files is something really nice.</p>
<p>Since I’m surely not the only one using systemd for running Yesod applications I want to reiterate my previous tutorial on daemonizing a Yesod application, but this time with systemd.</p>
<p>So let’s create the file <code>my-yesod-app.service</code> in the directory <code>/etc/systemd/service</code></p>
<p>The typical systemd unit or service file is divided into three sections called <code>[Unit]</code>, <code>[Install]</code> and <code>[Service]</code>. The first section contains basic information about the service for the system and the user, notably the description of the service and the conditions of startup. Basically this section could look like this:</p>
<pre><code>[Unit]
Description=My Yesod webapp
After=nginx.service</code></pre>
<p>In this example I am assuming, that you use nginx as reverse proxy to your webapp.
This would be also the place to define your dependency on a certain database service.</p>
<p>The <code>[Install]</code> section contains information about the installation of the service. In our case it contains only one line, which defines, that our service will be a dependency of <code>multi-user.target</code>, which means that the service will be started when the server gets into the multi-user stage.</p>
<pre><code>[Install]
WantedBy=multi-user.target</code></pre>
<p>The last section contains information about the executable itself and the environment it shall run in. in our case we define the working directory and the user, which shall run the service and finally define the exact command for starting your webapp.</p>
<pre><code>[Service]
WorkingDirectory=/absolute/path/to/directory
User=user
ExecStart=/absolute/path/to/executable config/settings.yml</code></pre>
<p>Note that the paths <strong>must</strong> be absolute.</p>
<p>After finishing the file, you need to reload the Systemd daemon with <code>systemctl daemon-reload</code>, enable the automatic startup of your webapp service with <code>systemctl enable my-yesod-app</code> and finally start it with <code>systemctl start my-yesod-app</code>.</p>
<p>So much for the explanation. I hope this turns out to be helpful for others. At the end you will find the complete service file for delicious copypasta.</p>
<pre><code>[Unit]
Description=My Yesod webapp
After=nginx.service

[Install]
WantedBy=multi-user.target

[Service]
WorkingDirectory=/absolute/path/to/directory
User=user
ExecStart=/absolute/path/to/executable config/settings.yml</code></pre>]]></summary>
</entry>
<entry>
    <title>Über das Schreiben</title>
    <link href="https://blog.nek0.eu/posts/2015-07-02-%C3%9Cber-das-Schreiben.html" />
    <id>https://blog.nek0.eu/posts/2015-07-02-%C3%9Cber-das-Schreiben.html</id>
    <published>2015-07-02T00:00:00Z</published>
    <updated>2015-07-02T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>OK. Hier mal etwas anderes. Etwas, was es hier bisher noch nicht gab.</p>
<p>Einige, die mich persönlich kennen, wissen, dass ich an einem Buch schreibe. Das mache ich schon seit
etwa drei Jahren und bin immer noch nicht sehr weit. Jedenfalls, wenn man das fertige Geschriebene
betrachtet. Von der Entwicklung her mit Geschichte und Personen ist es fertig und dass das so ist hat
bisher die meiste Zeit beansprucht.</p>
<p>Ich werde in Zukunft ein wenig über den Fortschritt meines wohl größten und am längsten dauernden
Projektes berichten und auch meine Erfahrungen die ich auf dem Weg sammle teilen.</p>
<p>Was die Erfahrungen angeht, so kann ich natürlich nicht garantieren, dass sie für jeden genauso gut
funktionieren, wie für mich. Jeder ist individuell anders und was dem Einen hilft behindert den
anderen eher beim Schreiben. Dem geneigten Leser ist überlassen selber zu experimentieren.</p>
<p>Eine sehr wichtige Lektion, die ich gleich zu Anfang meiner Bestrebungen lernte, ist, dass man nicht
anfangen sollte zu schreiben, bevor man nicht genau weiß, wie und wohin sich die Geschichte entwickeln
wird. Zum anderen sollte man auch genau wissen, wie die Welt, in der man seine Geschichte platziert,
funktioniert. Beides habe ich zu Anfang nicht gewusst und habe mich sehr schnell in Widersprüche
verstrickt. Ich hatte zwar eine Grobe Ahnung, aber das hat bei Weitem nicht ausgereicht.</p>
<p>Damit begann meine lange Planungsphase, in der ich mir um die Geschichte, die Welt und die Personen
in der Geschichte lange und gründlich Gedanken gemacht habe. Man muss nicht alles Haarklein
durchplanen, damit erschlägt man nur seine Phantasie, aber es sollte alles wichtige erkennbar sein.
Den Rest kann man spontan beim Schreiben entscheiden, sollte das dann aber natürlich nachträglich in
seiner Planungsübersicht notieren, damit man es nicht vergisst.</p>
<p>Vergessen ist ein großes Problem beim Schreiben, weswegen man alles, was man sich an Gedanken gemacht
hat in irgendeiner Form niederschreiben sollte. Nicht zwingend in Form von Fließtext. Ich bin
beispielsweise ein großer Freund von <a href="https://de.wikipedia.org/wiki/Mind-Map">Mind Maps</a> für diesen Zweck.</p>
<p>Ich meine, dass das fürs erste reicht. Speziellere Artikel werden folgen, wobei ich gerne
Themenvorschläge aus den Kommentaren berücksichtigen werde.</p>]]></summary>
</entry>
<entry>
    <title>We have SSL again</title>
    <link href="https://blog.nek0.eu/posts/2015-06-09-We-have-SSL-again.html" />
    <id>https://blog.nek0.eu/posts/2015-06-09-We-have-SSL-again.html</id>
    <published>2015-06-09T00:00:00Z</published>
    <updated>2015-06-09T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>I bid you all a well-encrypted welcome.</p>
<p>After a configuration marathon I managed to create a working configuration for my new web server. This means that all my websites are now served via SSL. Additionally the community I share the server with has an easy way to configure their certificates now, too.</p>]]></summary>
</entry>
<entry>
    <title>Version bump</title>
    <link href="https://blog.nek0.eu/posts/2015-05-31-Version-bump.html" />
    <id>https://blog.nek0.eu/posts/2015-05-31-Version-bump.html</id>
    <published>2015-05-31T00:00:00Z</published>
    <updated>2015-05-31T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>After roaming around on the internet checking out some of my favourite software projects I realised, that my blog is running on an outdated version of Hakyll, so I bumped it to the newest available version.</p>
<p>This upgrade made it possible to implement Hakyll’s relatively new pagination feature into my blog. After tinkering around on it for about a day I finally succeeded.</p>
<p>This means in conclusion, that you can skip from one blogpost to its two chronological neighbours with just one click. Pretty neat.</p>
<p>The next thing I would like to do ist transitioning my markup language for authoring my posts from Markdown to <a href="http://en.wikipedia.org/wiki/AsciiDoc">AsciiDoc</a>. It has some interesting features, which I would like to use. Unfortunately the <a href="http://en.wikipedia.org/wiki/Pandoc">Pandoc</a> project does not support reading Asciidoc yet, so I will have to wait.</p>]]></summary>
</entry>
<entry>
    <title>New sticky footer</title>
    <link href="https://blog.nek0.eu/posts/2015-05-28-New-sticky-footer.html" />
    <id>https://blog.nek0.eu/posts/2015-05-28-New-sticky-footer.html</id>
    <published>2015-05-28T00:00:00Z</published>
    <updated>2015-05-28T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hello again.</p>
<p>A friend of mine, who is active in web-development, pointed out, that my method for creating a sticky foooter is a bit obsolete and showed me the proper CSS3 way to do it, which I would like to share.</p>
<p>First you need to prepare your site for the footer, which in the simplest terms may look like this:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode html"><code class="sourceCode html"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="dt">&lt;</span><span class="kw">html</span><span class="dt">&gt;</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a>	<span class="dt">&lt;</span><span class="kw">head</span><span class="dt">&gt;</span> some info <span class="dt">&lt;/</span><span class="kw">head</span><span class="dt">&gt;</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a>	<span class="dt">&lt;</span><span class="kw">body</span><span class="ot"> class</span><span class="op">=</span><span class="st">&quot;site&quot;</span><span class="dt">&gt;</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a>		<span class="dt">&lt;</span><span class="kw">div</span><span class="ot"> class</span><span class="op">=</span><span class="st">&quot;wrapper&quot;</span><span class="dt">&gt;</span></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a>			<span class="dt">&lt;</span><span class="kw">header</span><span class="dt">&gt;</span> Your header here <span class="dt">&lt;/</span><span class="kw">header</span><span class="dt">&gt;</span></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a>			<span class="dt">&lt;</span><span class="kw">article</span><span class="dt">&gt;</span> Content here <span class="dt">&lt;/</span><span class="kw">article</span><span class="dt">&gt;</span></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a>		<span class="dt">&lt;/</span><span class="kw">div</span><span class="dt">&gt;</span></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a>		<span class="dt">&lt;</span><span class="kw">footer</span><span class="dt">&gt;</span> Your awesome sticky footer <span class="dt">&lt;/</span><span class="kw">footer</span><span class="dt">&gt;</span></span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a>	<span class="dt">&lt;</span><span class="kw">body</span><span class="dt">&gt;</span></span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a><span class="dt">&lt;/</span><span class="kw">html</span><span class="dt">&gt;</span></span></code></pre></div>
<p>You simply wrap your entire content apart from your footer inside a <code>div</code>.</p>
<p>Next we’re going to look on your css rules.</p>
<p>The <code>site</code> class needs a little setup:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode css"><code class="sourceCode css"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">.site</span> {</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>	<span class="kw">display</span><span class="ch">:</span> <span class="dv">flex</span><span class="op">;</span></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>	<span class="kw">min-height</span><span class="ch">:</span> <span class="dv">100</span><span class="dt">vh</span><span class="op">;</span></span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a>	<span class="kw">flex-direction</span><span class="ch">:</span> <span class="dv">column</span><span class="op">;</span></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
<p>This rules put your whole site in a so called flexbox, which in our case expands vertically by setting the <code>flex-direction</code>. By doing so, wee need to specify the height of the flexbox, in our case <code>100vh</code>, which is the complete height of the viewport.</p>
<p>Next is the setup of the wrapper:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode css"><code class="sourceCode css"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="fu">.wrapper</span> {</span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>	<span class="kw">flex</span><span class="ch">:</span> <span class="dv">1</span><span class="op">;</span></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
<p>This is it!</p>
<p>Now your wrapper should be docked always on the bottom of your page or at the bottom of your content, when your content gets longer than your viewport.</p>
<p>The great advantage of this method over my old setup is, that you don’t need to know the height of your footer, it will fit in automagically.</p>]]></summary>
</entry>
<entry>
    <title>Back again</title>
    <link href="https://blog.nek0.eu/posts/2015-05-11-Back-again.html" />
    <id>https://blog.nek0.eu/posts/2015-05-11-Back-again.html</id>
    <published>2015-05-11T00:00:00Z</published>
    <updated>2015-05-11T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks. You might have wondered where my blog has gone in the past few days.</p>
<p>The truth is: It hasn’t gone anywhere. It was still there, but the domain name was no longer resolved due to the fact, that i forgot to renew it in time. I’ll do my best not to let that happen again.</p>
<p>On the personal side I haven’t been at all well. I don’t want to go into more detail, but mental illness is no fun at all.</p>]]></summary>
</entry>
<entry>
    <title>DN42</title>
    <link href="https://blog.nek0.eu/posts/2015-03-31-DN42.html" />
    <id>https://blog.nek0.eu/posts/2015-03-31-DN42.html</id>
    <published>2015-03-31T00:00:00Z</published>
    <updated>2015-03-31T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Good news everyone! ^^</p>
<p>The server I maintain with a few friends is Member of the <a href="https://dn42.net/Home">DN42</a> network and we decided to make some of our services also available there.</p>
<p>This means, when you come from within DN42 you can resolve the address <a href="http://nek0.dn42">nek0.dn42</a> and will be led here to my blog. I also pushed my gallery into DN42, so it is now available on <a href="http://eidolon.nek0.dn42">eidolon.nek0.dn42</a>.</p>
<p>There is not much to say on other news. I’m still working, so my free time is a bit limited.</p>]]></summary>
</entry>
<entry>
    <title>Bitcoin stuff</title>
    <link href="https://blog.nek0.eu/posts/2015-03-13-Bitcoin-stuff.html" />
    <id>https://blog.nek0.eu/posts/2015-03-13-Bitcoin-stuff.html</id>
    <published>2015-03-13T00:00:00Z</published>
    <updated>2015-03-13T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>After poking around in my files on my computer I found something interesting. Something I thought I had lost it. my trusty old <a href="http://en.wikipedia.org/wiki/Bitcoin">Bitcoin</a> wallet.</p>
<p>I am far from being an early adopter, but there was a time in 2012 where I was mining a little bit on my graphics card. It was not very effective, but it still has its worth (especially nowadays, where almost everybody is speculating with them).</p>
<p>I personally dislike the idea of speculating mith my bitcoins like in a stock exchange. The case of Mt. Gox has shown how badly things can end. That’s why I’m keeping my Bitcoins only on my own devices.</p>
<p>With the reappearence of my wallet and my newly emerged interest in the Bitcoin matter I decided to implement an address for Bitcoin donations. I don’t think it will come to great use, but feel free to surprise me.</p>]]></summary>
</entry>
<entry>
    <title>Long time no see</title>
    <link href="https://blog.nek0.eu/posts/2015-03-05-Long-time-no-see.html" />
    <id>https://blog.nek0.eu/posts/2015-03-05-Long-time-no-see.html</id>
    <published>2015-03-05T00:00:00Z</published>
    <updated>2015-03-05T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks, it has been a while since my last entry here. For that I want to apologize.</p>
<p>The last two months have been tough, but I was able to manage it. First of all I moved to a new flat and my job as student assistant demands more performance from me. I don’t see that negatively since I have the feeling of being trusted by my boss and colleagues.</p>
<p>Because of all the other action, my leisure time coding went down, but I still make progress. I have added the feature of pagination on the front page to my gallery system <a href="https://github.com/nek0/eidolon">Eidolon</a> and worked with the medium site so now all mozilla-based browsers now correctly switch the background image. This was up until now only possible with webkit browsers.</p>
<p>Just recently while browsing through my older posts I realized that this blog exists now for far more than a year. I recall myself wondering at the beginning, whether I would be able to update this blog regularly and I’m glad I could. So thanks to you all out there bearing with me.</p>
<p>(Well I at least hope, that there are some people out there reading this. I have no clue because I don’t have any form of user tracking.)</p>]]></summary>
</entry>
<entry>
    <title>Sicherheitsprobleme in Sachsen</title>
    <link href="https://blog.nek0.eu/posts/2015-01-07-Sicherheitsprobleme-in-Sachsen.html" />
    <id>https://blog.nek0.eu/posts/2015-01-07-Sicherheitsprobleme-in-Sachsen.html</id>
    <published>2015-01-07T00:00:00Z</published>
    <updated>2015-01-07T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Ich betreibe ja schon seit einiger Zeit mit Freunden einen Server, auf welchem ich mich vornehmlich für die Email-Infrastruktur verantwortlich fühle.</p>
<p>Neulich wurde ich auf ein Problem aufmerksam gemacht, dass der Emailverkehr mit den Hochschulen zum Erliegen gekommen ist. Zuerst vermutete ich einen Fehler in unserer Konfiguration, doch die Wahrheit war schlimmer. Die Hochschulen und Universitäten können kein TLS.</p>
<p>Warum dieser Fehler erst jetzt aufgekommen ist, ist schnell erklärt. Aus Kompatibilitätsgründen hatten wir Unterstützung für SSLv3 aktiv gehabt. Kurz nach dem bekannt werden der <a href="http://de.wikipedia.org/wiki/Poodle">Poodle Attacke</a>, welche auch die letzten Stückchen Sicherheit im SSL-Protokol aushebelt, habe ich bei unserem Server die Unterstützung für das Protokoll abgeschaltet, in dem Vertrauen, dass andere Betreiber von Mailservern zeitgemäße Sicherheitsstandards bei sich durchsetzen.</p>
<p>Leider werde ich im Moment von den Einrichtungen, welche eigentlich für Innovation und technologische Vorreiter stehen enttäuscht. Nicht nur dass diese immer noch das veraltete SSL-Protokoll unterstützen. Sie unterstützen gar kein TLS im Mailverkehr. Überhaupt nicht. Auch die hochgelobte Exzellenz-Universität in Dresden nicht.</p>
<p>Es kann doch nicht sein, dass die Rechenzentren an Hochschulen keine zeitgemäße Sicherheit anbieten. Nicht nur das, sie arbeiten technisch wörtlich auf dem Stand des letzten Jahrtausends, denn immerhin stammt TLS aus dem Jahre 1999. Es ist also zwischendurch genug Zeit gewesen die Konfigurationen anzupassen.</p>
<p>&lt;/rant&gt;</p>]]></summary>
</entry>
<entry>
    <title>Gallery is now online!</title>
    <link href="https://blog.nek0.eu/posts/2015-01-06-Gallery-is-now-online%21.html" />
    <id>https://blog.nek0.eu/posts/2015-01-06-Gallery-is-now-online%21.html</id>
    <published>2015-01-06T00:00:00Z</published>
    <updated>2015-01-06T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>As I promised by the end of last year, I am happy tp announce, that the gallery system “Eidolon” is now up for testing.</p>
<p>You can reach it over <a href="http://eidolon.nek0.eu">eidolon.nek0.eu</a> or <a href="http://nek0.zeigt.photos">nek0.zeigt.photos</a>. Feel free to sign up and test it out. It may look a bit barren at first, but I haven’t worked much on the appearance yet.</p>
<p>Should you encounter any errors or miss some features, I would be glad receiving an issue at the <a href="https://github.com/nek0/eidolon">github project page</a></p>]]></summary>
</entry>
<entry>
    <title>Pending data loss</title>
    <link href="https://blog.nek0.eu/posts/2014-12-29-Pending-data-loss.html" />
    <id>https://blog.nek0.eu/posts/2014-12-29-Pending-data-loss.html</id>
    <published>2014-12-29T00:00:00Z</published>
    <updated>2014-12-29T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>I have an unfortunate announcement to make. Due to a software upgrade the commenting system will lose all comments. This has to do something with the upgrade of the package dependency on <code>persistent</code> to a version greater than 2.0.</p>
<p>I will wait until my issues with other dependencies are closed for pushing some dependency boundaries, so it will build on the server without dependency hell.</p>
<p><strong><em>EDIT from 30.12.2014:</em></strong></p>
<p>After looking deeper into that matter, I have fund out, that I will be able to migrate the data. So no dataloss will happen. Sorry for the hassle.</p>]]></summary>
</entry>
<entry>
    <title>Eidolon</title>
    <link href="https://blog.nek0.eu/posts/2014-12-20-Eidolon.html" />
    <id>https://blog.nek0.eu/posts/2014-12-20-Eidolon.html</id>
    <published>2014-12-20T00:00:00Z</published>
    <updated>2014-12-20T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Those who follow my actions on <a href="https://github.com/nek0">GitHub</a> may know it already, but for those who don’t it’s new, that I was working on a gallery system called <a href="https://github.com/nek0/eidolon">Eidolon</a> for some time. It is a project which I started in the late phase of my commentary system <a href="https://github.com/nek0/yacs">Yacs</a> due to my growing discomfort with <a href="http://mediagoblin.org/">Mediagoblin</a>, which is currently in use at our hackerspace.</p>
<p>The name derives from the same greek word which means something like mirage or illusion. I can’t really say, why I named it like that, but I’m quite happy with the name.</p>
<p>The gallery system is almost complete and I will start stress testing it in the next year. The images in the gallery are organized in albums, which themselves belong to certain users. Additional features include at the moment:</p>
<ul>
<li>Commenting pictures</li>
<li>Tagging pictures</li>
<li>sharing albums with other users</li>
<li>Atom and RSS feeds of the whole gallery, users, albums and picture comments.</li>
<li>HMAC-SHA user authentication</li>
</ul>
<p>The whole system is set up as a <a href="http://www.yesodweb.com/">Yesod</a> webapp and is written mostly in Haskell.</p>
<p>I have been working with Yesod for quite some time now, mostly for learning Haskell, but I found it also entertaining to make some web-development. I would really recommend using this framework. The static typing of Haskell might be a bit of a pain in the butt at first, but it also grants your applications level of security, which I haven’t observed anywhere else.</p>]]></summary>
</entry>
<entry>
    <title>Frohes Fest?</title>
    <link href="https://blog.nek0.eu/posts/2014-12-19-Frohes-Fest.html" />
    <id>https://blog.nek0.eu/posts/2014-12-19-Frohes-Fest.html</id>
    <published>2014-12-19T00:00:00Z</published>
    <updated>2014-12-19T00:00:00Z</updated>
    <summary type="html"><![CDATA[<h2 id="oder-was-im-moment-ziemlich-schief-läuft.">oder: was im Moment ziemlich schief läuft.</h2>
<p>Zuallererst: Frohe Weihnachten. Es gibt ja Menschen die auf so etwas Wert legen. Ich komme um Weihnachten herum nie wirklich in Feierstimmung, aber das heißt nicht, dass ich die Laune jedem verderben möchte.</p>
<p>Warum ich heute eigentlich schreibe ist, dass in den letzten Wochen eine nette Vereinigung brauner und bräunlich gesinnter Menschen in meiner Umgebung ihr Unwesen treibt. Die Rede ist konkret von der Vereinigung “PEGIDA”, aufgeschlüsselt heißt das “Patriotische Europäer gegen die Islamisierung des Abendlandes”, wobei ich stark bezweifle, dass die dort Teilnehmenden das Akronym überhaupt aufschlüsseln können. Das würde auch erklären, warum sich dort auch Menschen wiederfinden, die gegen die GEZ demonstrieren. Oder gegen die grenzenlose Bankenrettung. Da fragt min sich schon, ob diese Menschen wissen, wo sie sich gerade befinden.</p>
<p>Das die Menschen unzufrieden sind, ist verständlich. Ich bin es auch. Aber die PEGIDA ist keine Plattform für den Normalbürger, um seine Wut über die Politik zum Ausdruck zu bringen. Das zum einen. Zum anderen braucht das Abendland gegen eine Islamisierung nicht verteidigt werden. und schon gar nicht in Sachsen, wo es eh nur 2% Ausländische Menschen gibt.</p>
<p>Eigentlich wollte ich meinen Blog unpolitisch belassen, aber bei derartig grobem Unfug der da gerade passiert bin ich der Meinung, auch etwas sagen zu müssen. Am Ende würde ich aber durch mein Stillschweigen derartige Aktionen billigen.</p>]]></summary>
</entry>
<entry>
    <title>New DIY Watch project</title>
    <link href="https://blog.nek0.eu/posts/2014-11-18-New-DIY-Watch-project.html" />
    <id>https://blog.nek0.eu/posts/2014-11-18-New-DIY-Watch-project.html</id>
    <published>2014-11-18T00:00:00Z</published>
    <updated>2014-11-18T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>After long hours of browsing in the depths of the internet I stumbeled upon the <a href="http://www.johngineer.com/blog/?p=1595">“Chronode VFD”</a> watch.</p>
<p>The first time I saw it I was completely baffled. I immediately wanted one of my own, but with some alterations. Problem is: I have absolutely no experience in hardware hacking. Luckily as a frequent visitor of my local hackerspace I know some people who have experience.</p>
<p>First I want to build a simplified version without that gorgeous vacuum fluorescence tube using LED-Modules as display and thus give it a longer battery life.</p>
<p>For now I am creating a bill of materials and looking for parts. you can check the progress at the <a href="https://github.com/nek0/pentawatch">github project</a> I created and occasionally I will post the progress here.</p>]]></summary>
</entry>
<entry>
    <title>Desktop forwarding via X using Xephyr</title>
    <link href="https://blog.nek0.eu/posts/2014-10-25-Desktop-forwarding-via-X-using-Xephyr.html" />
    <id>https://blog.nek0.eu/posts/2014-10-25-Desktop-forwarding-via-X-using-Xephyr.html</id>
    <published>2014-10-25T00:00:00Z</published>
    <updated>2014-10-25T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hello again folks. Tonight I was in an adventurous mood and wanted to see, if I can forward a desktop session from my home computer to my laptop. I had distinct interest in OpenGL applications, since my laptop is only minimally capable of it.</p>
<p>Before I dive into the more technical depths I would like to conclude my findings here: Generally it is possible to forward a desktop session including a window manager, but not GL applications (yet). In general this method is a possible replacement for classical <a href="http://de.wikipedia.org/wiki/Virtual_Network_Computing">VNC</a> setups.</p>
<p>Before you can start, there are some prerequisites that must be met:</p>
<p>First you need the software <a href="http://www.freedesktop.org/wiki/Software/Xephyr/">Xephyr</a> on your client system (which is the System, where you want to receive your session and work on it). To install it grab the package <code>xserver-xephyr</code> with the package manager of your choice. I am assuming a <a href="https://www.debian.org/">Debian</a> system here, so it might be possible, that the configuration files are located elsewhere on other GNU/Linux flavours.</p>
<p>Secondly there are some configurations to be made on the host system (the system you want to access remotely). You need to enable X forwarding in your SSH server in <code>/etc/ssh/sshd_config</code> by stating:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="ex">X11Forwarding</span> yes</span></code></pre></div>
<p>After that you are ready to give it a first shot. Fire up a terminal of your choice on your client and start up Xephyr like this:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="ex">Xephyr</span> :1 <span class="at">-screen</span> 800x600 <span class="at">-resizeable</span> <span class="kw">&amp;</span></span></code></pre></div>
<p>Mark the capital X at the beginning. This command means: start Xephyr as display <code>:1</code>, <code>-screen</code> sets the resolution and thus the size of the emerging window. Finally <code>-resizeable</code> makes the window resizeable in contrast to its normal behaviour. The last <code>&amp;</code> puts the process in the background.</p>
<p>After completing this you should see a new window, which is completely black. This means everything is, as it is meant to be. You have just created a new blank display within your existing X session.</p>
<p>Now it’s time to make the connection to your host system. This is done by:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="va">DISPLAY</span><span class="op">=</span>:1 <span class="fu">ssh</span> <span class="at">-Y</span> <span class="op">&lt;</span>user<span class="op">&gt;</span>@<span class="op">&lt;</span>host<span class="op">&gt;</span></span></code></pre></div>
<p>Translation: set the display environment variable to <code>:1</code> and start a ssh connection with the host. The <code>-Y</code> opens a trusted X forwarding connection. Due to the setting of the display variable the X forwarding connects to your Xephyr session, which is what we want.</p>
<p>Now you can start up any window manager in the ssh console, preferably something lighweight like <a href="http://awesome.naquadah.org/">awesome</a>.</p>]]></summary>
</entry>
<entry>
    <title>Daemonize a Yesod application</title>
    <link href="https://blog.nek0.eu/posts/2014-10-23-Daemonize-a-yesod-app.html" />
    <id>https://blog.nek0.eu/posts/2014-10-23-Daemonize-a-yesod-app.html</id>
    <published>2014-10-23T00:00:00Z</published>
    <updated>2014-10-23T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p><strong>If you want to create a systemd service file, look <a href="https://nek0.eu/posts/2015-08-28-Daemonize-a-Yesod-application-systemd-style.html">here</a></strong></p>
<p>As you might know I have written my own commenting service, which up until recently I had to start manually in a <a href="https://www.gnu.org/software/screen/">screen</a> session. Then I decided to write my own init-script.</p>
<p>I have to admit, that I am no experienced sysadmin or something like that, but just a random guy with a strange love (or addiction) to computers. So this is my first time doing this.</p>
<p>For managing the starting and stopping of the service I chose to use the start-stop-daemon shipped with the system on my server. Additionally I used the skeleton file for init-scripts, which you can find in <code>/etc/init.d/skeleton</code>.</p>
<p>After consulting the manpage of start-stop-daemon I came up with the following command for starting the commenting service:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="ex">start-stop-daemon</span> <span class="at">--start</span> <span class="at">-b</span> <span class="at">-u</span> nek0 <span class="at">--chuid</span> nek0 <span class="at">--name</span> yacs <span class="at">--exec</span> ./yacs <span class="at">-d</span> /home/nek0/www/yacs-run/ <span class="dt">\</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a>-- config/settings.yml <span class="op">&gt;</span> /var/log/yacs.log</span></code></pre></div>
<p>What this actually means: The first option ist pretty self explanatory. <code>-b</code> starts the service in the background. <code>-u</code> and <code>--chuid</code> ensure, that the service runs as a user, not as root. I chose my own user here, but you can also use <code>nobody</code> if you like. The name of the service is specified by <code>--name</code>. <code>-d</code> specifies the working directory of the service you want to start and finally <code>--exec</code> is the path to the executable, in this case relative to the working directory. Everything after the final double-dashes are arguments passed to the executable itself.</p>
<p>for stopping the whole thing I use the following command:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="ex">start-stop-daemon</span> <span class="at">--stop</span> <span class="at">-u</span> nek0 <span class="at">--name</span> yacs</span></code></pre></div>
<p>This is even simpler than the above and is really self explanatory after all the information you got above.</p>
<p>the whole init-script looks like this:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="co">#! /bin/sh</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="co">### </span><span class="re">BEGIN</span><span class="co"> INIT INFO</span></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="co"># Provides:          yacs</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="co"># Required-Start:    $nginx</span></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="co"># Required-Stop:</span></span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a><span class="co"># Default-Start:     2 3 4 5</span></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a><span class="co"># Default-Stop:</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a><span class="co"># Short-Description: Start YACS commenting service</span></span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a><span class="co"># Description:       start YACS commenting service</span></span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a><span class="co">### </span><span class="re">END</span><span class="co"> INIT INFO</span></span>
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-12"><a href="#cb3-12" aria-hidden="true" tabindex="-1"></a><span class="cf">case</span> <span class="st">&quot;</span><span class="va">$1</span><span class="st">&quot;</span> <span class="kw">in</span></span>
<span id="cb3-13"><a href="#cb3-13" aria-hidden="true" tabindex="-1"></a>  <span class="ss">start</span><span class="kw">)</span></span>
<span id="cb3-14"><a href="#cb3-14" aria-hidden="true" tabindex="-1"></a>        <span class="ex">logger</span> starting YACS</span>
<span id="cb3-15"><a href="#cb3-15" aria-hidden="true" tabindex="-1"></a>        <span class="ex">start-stop-daemon</span> <span class="at">--start</span> <span class="at">-b</span> <span class="at">-u</span> nek0 <span class="at">--chuid</span> nek0 <span class="at">--name</span> yacs <span class="at">--exec</span> ./yacs <span class="at">-d</span> /home/nek0/www/yacs-run/ <span class="dt">\</span></span>
<span id="cb3-16"><a href="#cb3-16" aria-hidden="true" tabindex="-1"></a>        <span class="at">--</span> config/settings.yml <span class="op">&gt;</span> /var/log/yacs.log</span>
<span id="cb3-17"><a href="#cb3-17" aria-hidden="true" tabindex="-1"></a>        <span class="cf">;;</span></span>
<span id="cb3-18"><a href="#cb3-18" aria-hidden="true" tabindex="-1"></a>  <span class="ss">stop</span><span class="kw">)</span></span>
<span id="cb3-19"><a href="#cb3-19" aria-hidden="true" tabindex="-1"></a>        <span class="ex">logger</span> stopping YACS</span>
<span id="cb3-20"><a href="#cb3-20" aria-hidden="true" tabindex="-1"></a>        <span class="ex">start-stop-daemon</span> <span class="at">--stop</span> <span class="at">-u</span> nek0 <span class="at">--name</span> yacs </span>
<span id="cb3-21"><a href="#cb3-21" aria-hidden="true" tabindex="-1"></a>        <span class="cf">;;</span></span>
<span id="cb3-22"><a href="#cb3-22" aria-hidden="true" tabindex="-1"></a>  <span class="ss">restart</span><span class="kw">)</span></span>
<span id="cb3-23"><a href="#cb3-23" aria-hidden="true" tabindex="-1"></a>        <span class="ex">logger</span> restarting YACS</span>
<span id="cb3-24"><a href="#cb3-24" aria-hidden="true" tabindex="-1"></a>        <span class="ex">start-stop-daemon</span> <span class="at">--stop</span> <span class="at">-u</span> nek0 <span class="at">--name</span> yacs</span>
<span id="cb3-25"><a href="#cb3-25" aria-hidden="true" tabindex="-1"></a>        <span class="ex">start-stop-daemon</span> <span class="at">--start</span> <span class="at">-b</span> <span class="at">-u</span> nek0 <span class="at">--chuid</span> nek0 <span class="at">--name</span> yacs <span class="at">--exec</span> ./yacs <span class="at">-d</span> /home/nek0/www/yacs-run/ <span class="dt">\</span></span>
<span id="cb3-26"><a href="#cb3-26" aria-hidden="true" tabindex="-1"></a>        <span class="at">--</span> conifg/settings.yml <span class="op">&gt;</span> /var/log/yacs.log</span>
<span id="cb3-27"><a href="#cb3-27" aria-hidden="true" tabindex="-1"></a>        <span class="cf">;;</span></span>
<span id="cb3-28"><a href="#cb3-28" aria-hidden="true" tabindex="-1"></a>  <span class="ss">status</span><span class="kw">)</span></span>
<span id="cb3-29"><a href="#cb3-29" aria-hidden="true" tabindex="-1"></a>        <span class="co"># No-op</span></span>
<span id="cb3-30"><a href="#cb3-30" aria-hidden="true" tabindex="-1"></a>        <span class="cf">;;</span></span>
<span id="cb3-31"><a href="#cb3-31" aria-hidden="true" tabindex="-1"></a>  <span class="pp">*</span><span class="kw">)</span></span>
<span id="cb3-32"><a href="#cb3-32" aria-hidden="true" tabindex="-1"></a>        <span class="bu">echo</span> <span class="st">&quot;Usage: yacs {start|stop|restart}&quot;</span> <span class="op">&gt;&amp;</span><span class="dv">2</span></span>
<span id="cb3-33"><a href="#cb3-33" aria-hidden="true" tabindex="-1"></a>        <span class="bu">exit</span> 3</span>
<span id="cb3-34"><a href="#cb3-34" aria-hidden="true" tabindex="-1"></a>        <span class="cf">;;</span></span>
<span id="cb3-35"><a href="#cb3-35" aria-hidden="true" tabindex="-1"></a><span class="cf">esac</span></span></code></pre></div>
<p>I hope this is helpful for others. If something is unclear, you can always leave a comment now ^^</p>]]></summary>
</entry>
<entry>
    <title>Feed chaos</title>
    <link href="https://blog.nek0.eu/posts/2014-10-06-Feed-chaos.html" />
    <id>https://blog.nek0.eu/posts/2014-10-06-Feed-chaos.html</id>
    <published>2014-10-06T00:00:00Z</published>
    <updated>2014-10-06T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>First I have to apologise, that I haven’t found the error earlier, it was literally a single line of code.</p>
<p>For all those relying on my feeds, you may have encountered problems with links going still to the old server. After I moved my server to a new location I forgot to change the feed settings accordingly. Now I fixed it.</p>]]></summary>
</entry>
<entry>
    <title>Visit at home</title>
    <link href="https://blog.nek0.eu/posts/2014-10-01-Visit-at-home.html" />
    <id>https://blog.nek0.eu/posts/2014-10-01-Visit-at-home.html</id>
    <published>2014-10-01T00:00:00Z</published>
    <updated>2014-10-01T00:00:00Z</updated>
    <summary type="html"><![CDATA[<!--[![](/images/2014-10-01-01_preview.jpg)](/images/2014-10-01-01.jpg "View of the castle")-->
<p>After a long time I decided to visit my old birthplace, the city of Prague. I have spent there a week with my grandmother, visiting concerts and the theatre. It has been the best time I have had in a while.</p>
<p><a href="/images/2014-10-01-02.jpg" title="Karel IV"><img src="/images/2014-10-01-02_preview.jpg" /></a>
I also took the opportunity to take out my trusty old camera on the journey to take some photos. The ones I consider the best are here in this post.</p>
<p>Prague is a beautyful city with lots of history and legends and you need more than one visit to see everything of it. There is always something to discover and to learn.</p>
<p><a href="/images/2014-10-01-03.jpg" title="Prague castle with Carl&#39;s bridge"><img src="/images/2014-10-01-03_preview.jpg" /></a>
For instance: the castle of Prague is centuries old with lots of legends. Numberless historical figures have visited this place, not only the city itself, but also the castle. The cathedral is a wonderful piece of architecture and artisanship.</p>
<p><a href="/images/2014-10-01-04.jpg" title="Carl&#39;s bridge entrance"><img src="/images/2014-10-01-04_preview.jpg" /></a>
Another masterpiece is Carl’s bridge, the oldest bridge of the city. according to a legend the sword of the legendary national hero Brunclík is buried in the foundation of the Bridge. On the bridge there are also statues depicting various historical and mythical events of czech history.</p>
<p><a href="/images/2014-10-01-05.jpg" title="Old townhall"><img src="/images/2014-10-01-05_preview.jpg" /></a>
This is the old townhall of Prague with its famous astronomical clock. every 15 minutes the small blue doors on the top open and you can see a small procession of saints, while the clock rings the time. This is one of the greatest tourist magnets in the whole city. Regardless of weather or temperature, there is always a giant crowd in front of this building.</p>
<p><a href="/images/2014-10-01-06.jpg" title="brmlab"><img src="/images/2014-10-01-06_preview.jpg" /></a>
While I was in the city, I also took the opportunity to visit the local hackerspace <a href="https://brmlab.cz/">brmlab</a>.
<a href="/images/2014-10-01-07.jpg" title="brmlab"><img src="/images/2014-10-01-07_preview.jpg" /></a>
It is way bigger than I first imagined. These photos were taken only in their main room, but they have seperate labs for chemistry, biology and high voltage alectricity in the basement, which they gladly showed me. It is a great place to be, so if you are in Prague, be sure to pay them a visit.</p>]]></summary>
</entry>
<entry>
    <title>Finally</title>
    <link href="https://blog.nek0.eu/posts/2014-09-11-Finally.html" />
    <id>https://blog.nek0.eu/posts/2014-09-11-Finally.html</id>
    <published>2014-09-11T00:00:00Z</published>
    <updated>2014-09-11T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Finally I made it. The commenting system I have been working on for the past few months is deployed for testing.</p>
<p>Also the blog was moved to another server, as I give up my own little sandbox of virtual server, which has become increasingly unreliable. Hence the outage from last month, for which I am very sorry. Soon I will also have set up my domain here.</p>
<p>As you can see, the iframes have come to life with the promised commenting system. feel free to comment anything you want under any blog post. Knock yourselves out. Unfortunately, I can’t guarantee, that your comments will stay, as this is just a test deployment and I will still work heavily on the code.</p>
<p>When you encounter any problems, errors, bugs or have feature requests, drop an issue at the <a href="https://github.com/nek0/yacs">GitHub project page</a>.</p>]]></summary>
</entry>
<entry>
    <title>Comment system slowly emerging</title>
    <link href="https://blog.nek0.eu/posts/2014-07-25-Comment-system-slowly-emerging.html" />
    <id>https://blog.nek0.eu/posts/2014-07-25-Comment-system-slowly-emerging.html</id>
    <published>2014-07-25T00:00:00Z</published>
    <updated>2014-07-25T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hey folks, long time no see.</p>
<p>I have been busy in the past month studying. Exam season is coming rapidly nearer.</p>
<p>Aside from learning and the general procrastination I have worked on my own implementation of a commenting service, which is now ready to be doployed for testing. It is called “yacs” for now, which stands for “yet another commenting service”. It is written in Haskell as a Yesod web-app. Check it out on <a href="https://github.com/nek0/yacs/">Github</a>.</p>
<p>I decided to use this approach, because I wanted to know the language Haskell better. It was really challenging wrapping the logic of a commenting service aroud the possibilities I had with Haskell, since I am still very new to this language.</p>
<p>Right now I am still stuck in some kind of dependency hell and my project does not build on the server. As soon as I resolve this problem, the newly added iframes, which you may have noticed on the bottom of every blogpost, will come to life. After that i will write a Documentation for the whole project.</p>]]></summary>
</entry>
<entry>
    <title>Crypto broken?</title>
    <link href="https://blog.nek0.eu/posts/2014-06-13-Crypto-broken.html" />
    <id>https://blog.nek0.eu/posts/2014-06-13-Crypto-broken.html</id>
    <published>2014-06-13T00:00:00Z</published>
    <updated>2014-06-13T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Ever since the strange breakup of the <a href="http://truecrypt.sourceforge.net/">truecrypt project</a> I am unsure wether I can still trust the software. This is bad for me, because I rely on it in several cases.</p>
<p>Because of the non-standard license of truecrypt there has not formed a forked project yet which I could rely on. I am looking for alternatives, but have not found anything suiting my needs.</p>
<p>For example there is <a href="https://www.gnupg.org/">GnuPG</a>, which can encrypt single files and also folders, but you have to do it manually every time you change something. Furthermore you can not mount it like you could do with a truecrypt container.</p>
<p>Then there is <a href="https://code.google.com/p/cryptsetup/">LUKS</a>, which can encrypt whole filesystems, but not singular containers.</p>
<p>For now i will remain using truecrypt and trust the <a href="https://opencryptoaudit.org/reports/">outcome</a> of the first stage of the source code audit of truecrypt.</p>
<p>I know I don’t present any solutions here, but I will be looking into that matter in the future and hopefully I come out with something better than keep using truecrypt.</p>]]></summary>
</entry>
<entry>
    <title>Comment service</title>
    <link href="https://blog.nek0.eu/posts/2014-05-17-Comment-service.html" />
    <id>https://blog.nek0.eu/posts/2014-05-17-Comment-service.html</id>
    <published>2014-05-17T00:00:00Z</published>
    <updated>2014-05-17T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>As I stated earlier, I want to add a commenting service to my blog. I could use already existing Software, like <a href="http://disqus.com/">Disqus</a> or as self hosted service the <a href="http://posativ.org/isso/">Isso</a> commenting service. But lastly I decided to write my own commenting service.</p>
<p>I chose to do so, because my blog is generated by <a href="http://jaspervdj.be/hakyll/">Hakyll</a>, a static site generator written in <a href="http://www.haskell.org/haskellwiki/Haskell">Haskell</a>, I wanted my site to stay in the realm of this programming language.</p>
<p>Since there is no such commenting service implemented in Haskell yet, I have to write my own. I chose the <a href="http://www.yesodweb.com/">Yesod</a> web framework as foundation for my project. It already has basic functionality, but because I have not implemented spam protection and moderation yet, I do not recommend using it outside of testing purposes. You can check it out at my git repository at Github <a href="https://github.com/nek0/yacs">here</a>.</p>]]></summary>
</entry>
<entry>
    <title>New domain</title>
    <link href="https://blog.nek0.eu/posts/2014-04-10-New-domain.html" />
    <id>https://blog.nek0.eu/posts/2014-04-10-New-domain.html</id>
    <published>2014-04-10T00:00:00Z</published>
    <updated>2014-04-10T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>I now have a new (and real) domain. Now you can find my blog at <a href="https://nek0.eu">nek0.eu</a>.</p>
<p>Now I am deciding wether to put comments on my website and what service to use. Under all circumstances it will be a selfhosted service.</p>]]></summary>
</entry>
<entry>
    <title>Alternate Dropbox service</title>
    <link href="https://blog.nek0.eu/posts/2014-03-28-Alternate-Dropbox-service.html" />
    <id>https://blog.nek0.eu/posts/2014-03-28-Alternate-Dropbox-service.html</id>
    <published>2014-03-28T00:00:00Z</published>
    <updated>2014-03-28T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Are you looking for a Dropbox alternative? An open spurce alternative hosted on your own server? I may have found an answer.</p>
<p>The Answer is <a href="http://seafile.com">seafile</a>, a pretty powerful piece of software written in C and Python. I started my own seafile service on this server and am pretty happy with it. There’s only one drawback I have found out: the upload rates are pretty low, which could be caused by crappy ISPs or the encryption of seafile itself. But even Dropbox doesn’t have the best upload rates, so what.</p>
<p>Additionally there are clients for most platforms and even the source code is available, so you can build it yourself, if it’s not available for your platform.</p>
<p>The installation itself is pretty straightforward if you follow the wiki, even if you want some specialties like nginx as your webserver.</p>]]></summary>
</entry>
<entry>
    <title>Certificate problems</title>
    <link href="https://blog.nek0.eu/posts/2014-03-20-Certificate-problems.html" />
    <id>https://blog.nek0.eu/posts/2014-03-20-Certificate-problems.html</id>
    <published>2014-03-20T00:00:00Z</published>
    <updated>2014-03-20T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi folks.</p>
<p>As I just recently learned the debian maintainers want to discntinue the distribution of the <a href="http://cacert.org">CACert</a> root certificate with their package <code>ca-certificates</code>. More details <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718434">here</a>.</p>
<p>This is particularly bad for me, as my certificates are all from CACert, for example even the certificate for the https connection. So when you come from a Debian-based system and see a certificate issue while you connect to my site, please trust this certificate, it will be the same as it ever was.</p>
<p>I really hope that CACert passes its oncoming audit so that the Debian maintainers will trust the root certificate of CACert again</p>]]></summary>
</entry>
<entry>
    <title>Mailserver</title>
    <link href="https://blog.nek0.eu/posts/2014-02-25-Mailserver.html" />
    <id>https://blog.nek0.eu/posts/2014-02-25-Mailserver.html</id>
    <published>2014-02-25T00:00:00Z</published>
    <updated>2014-02-25T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Some time ago a few friends and I rented a root server, each of us maintaining one or more services on
it. Since I gathered some experience in the field my part is to maintain the mailserver. This way we
have a decentralized mail service at our hand, that is not so easily spied upon.</p>
<p>For running the mailservice I chose the combination of Postfix and Dovecot with SASL managed by
Dovecot. To configure everything I really recommend the
<a href="http://wiki2.dovecot.org/StartSeite">Dovecot wiki</a> as well as the
<a href="http://www.postfix.org/documentation.html">Postfix documentation</a>. When installing from Debian
repositories you get a simple working configuration out of the box.</p>
<p>If you want to learn to do this by yourself, just install these services and tinker with them. Thats
the best approach I can recommend, though maybe not the simplest.</p>]]></summary>
</entry>
<entry>
    <title>Cryptoparty</title>
    <link href="https://blog.nek0.eu/posts/2014-02-08-Cryptoparty.html" />
    <id>https://blog.nek0.eu/posts/2014-02-08-Cryptoparty.html</id>
    <published>2014-02-08T00:00:00Z</published>
    <updated>2014-02-08T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>I am just attending a cryptoparty, where we sign each other’s pgp-keys.</p>
<p>It is my first time doing so, but I think it is very important to know your possibilities, especially in the light of recent events and revelations. This is also one of the reasons I run my own mailserver. Other reasons are just to see if I can.</p>
<p>On this occasion I stumbled upon the debian package “signing-party” and the tool in it called <code>sig2dot</code>, which creates a nice graph out of your key signatures. Although dot has its flaws, I think this is a wonderful way to visualize your chains of trust.</p>]]></summary>
</entry>
<entry>
    <title>Now new: Syntax highlighting!</title>
    <link href="https://blog.nek0.eu/posts/2014-01-14-Now-new%3A-Syntax-highlighting%21.html" />
    <id>https://blog.nek0.eu/posts/2014-01-14-Now-new%3A-Syntax-highlighting%21.html</id>
    <published>2014-01-14T00:00:00Z</published>
    <updated>2014-01-14T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hey folks!
I have been tinkering again with this site and i found out that my markdown compiler pandoc supports syntax highlighting, so from now on all code bubbles will have proper syntax highlighting. Additionally I played with the navbar and the code bubbles themselves, so they show the proper language.</p>]]></summary>
</entry>
<entry>
    <title>Impressum eingefügt</title>
    <link href="https://blog.nek0.eu/posts/2014-01-14-Impressum.html" />
    <id>https://blog.nek0.eu/posts/2014-01-14-Impressum.html</id>
    <published>2014-01-14T00:00:00Z</published>
    <updated>2014-01-14T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Aufgrund der Rechtslage in unserem deutschen Land habe ich nun ein Impressum zu meiner Seite hinzugefügt, bevor ich noch größerem Publikum entgegentrete. Es ist nervig und unschön, aber was soll’s. Ich komme letztendlich nicht drum herum so etwas anzulegen, also besser früher als später.</p>]]></summary>
</entry>
<entry>
    <title>Tagcloud!</title>
    <link href="https://blog.nek0.eu/posts/2014-01-10-Tagcloud%21.html" />
    <id>https://blog.nek0.eu/posts/2014-01-10-Tagcloud%21.html</id>
    <published>2014-01-10T00:00:00Z</published>
    <updated>2014-01-10T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>I dived in to Hakyll configuration unexpectedly deep and found a solution for my tagcloud problem. From now on you have the tagcloud in the navigation bar.</p>]]></summary>
</entry>
<entry>
    <title>Sticky footer</title>
    <link href="https://blog.nek0.eu/posts/2014-01-09-Sticky-footer.html" />
    <id>https://blog.nek0.eu/posts/2014-01-09-Sticky-footer.html</id>
    <published>2014-01-09T00:00:00Z</published>
    <updated>2014-01-09T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Here is a simple recipe for the sticky footer that is used on this site. As this site runs on HTML5 it might not work on all browsers (Sorry, Microsoft).</p>
<p>first you need to define in your css or add to your existing rules:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode css"><code class="sourceCode css"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a>html {  </span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a>	<span class="kw">height</span><span class="ch">:</span> <span class="dv">100</span><span class="dt">%</span><span class="op">;</span>  </span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a>}  </span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a>body {  </span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a>	<span class="kw">height</span><span class="ch">:</span> <span class="dv">100</span><span class="dt">%</span><span class="op">;</span>  </span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
<p>additionally you need a wrapper class for your content. You need to adjust the negative margin value to your footer height. The value given here is only an example. Actually this will require some tinkering.</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode css"><code class="sourceCode css"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">.wrapper</span> {  </span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>	<span class="kw">min-height</span><span class="ch">:</span> <span class="dv">100</span><span class="dt">%</span><span class="op">;</span>  </span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>	<span class="kw">height</span><span class="ch">:</span> <span class="bu">auto</span> <span class="at">!important</span><span class="op">;</span>  </span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a>	<span class="kw">height</span><span class="ch">:</span> <span class="dv">100</span><span class="dt">%</span><span class="op">;</span>  </span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>	<span class="kw">margin</span><span class="ch">:</span> <span class="dv">0</span> <span class="dv">-65</span><span class="dt">px</span><span class="op">;</span></span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
<p>now you need to wrap your site content in a div with the wrapper class.</p>
<p>If something is messed up, it is most likely because of paddings or margins. Take special care, that <code>body</code> and <code>html</code> have none of them.</p>
<p>The according html file might look something like this:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode html"><code class="sourceCode html"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="dt">&lt;</span><span class="kw">html</span><span class="dt">&gt;</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>	<span class="dt">&lt;</span><span class="kw">head</span><span class="dt">&gt;</span> some info <span class="dt">&lt;/</span><span class="kw">head</span><span class="dt">&gt;</span></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>	<span class="dt">&lt;</span><span class="kw">body</span><span class="dt">&gt;</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a>		<span class="dt">&lt;</span><span class="kw">div</span><span class="ot"> class</span><span class="op">=</span><span class="st">&quot;wrapper&quot;</span><span class="dt">&gt;</span></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a>			<span class="dt">&lt;</span><span class="kw">header</span><span class="dt">&gt;</span> your header here <span class="dt">&lt;</span><span class="kw">header</span><span class="dt">&gt;</span></span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a>			<span class="dt">&lt;</span><span class="kw">article</span><span class="dt">&gt;</span> content here <span class="dt">&lt;/</span><span class="kw">article</span><span class="dt">&gt;</span></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a>		<span class="dt">&lt;/</span><span class="kw">div</span><span class="dt">&gt;</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a>		<span class="dt">&lt;</span><span class="kw">footer</span><span class="dt">&gt;</span> your awesome sticky footer<span class="dt">&lt;/</span><span class="kw">footer</span><span class="dt">&gt;</span></span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a>	<span class="dt">&lt;/</span><span class="kw">body</span><span class="dt">&gt;</span></span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a><span class="dt">&lt;/</span><span class="kw">html</span><span class="dt">&gt;</span></span></code></pre></div>
<p>I hope this is helpful for your website, if you were looking for a solution.</p>]]></summary>
</entry>
<entry>
    <title>Newest changes</title>
    <link href="https://blog.nek0.eu/posts/2014-01-09-Newest-changes.html" />
    <id>https://blog.nek0.eu/posts/2014-01-09-Newest-changes.html</id>
    <published>2014-01-09T00:00:00Z</published>
    <updated>2014-01-09T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Now after tinkering with this site again I managed to tag all posts appropriatelty. unfortunately i was not able to create a tag cloud, because i don’t know how. It is somehow possible with Hakyll.<br />
Additionally I made a sticky footer for this page. How it actually works is in another post.</p>]]></summary>
</entry>
<entry>
    <title>New changes</title>
    <link href="https://blog.nek0.eu/posts/2014-01-03-New-changes.html" />
    <id>https://blog.nek0.eu/posts/2014-01-03-New-changes.html</id>
    <published>2014-01-03T00:00:00Z</published>
    <updated>2014-01-03T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Hi there.<br />
Firstly, I am deeply sorry for not updating for a while, but I have been sick.<br />
Meanwhile I figured out (thanks to ripping code from other good Hakyll blogs) how to implement post tags.<br />
So in conclusion you can browse all posts by tags. a tag cloud should follow shortly.</p>]]></summary>
</entry>
<entry>
    <title>Merry Christmas</title>
    <link href="https://blog.nek0.eu/posts/2013-12-20-Merry-Christmas.html" />
    <id>https://blog.nek0.eu/posts/2013-12-20-Merry-Christmas.html</id>
    <published>2013-12-20T00:00:00Z</published>
    <updated>2013-12-20T00:00:00Z</updated>
    <summary type="html"><![CDATA[<h1 id="happy-holidays">Happy Holidays</h1>
<p>I wish you all out there happy holidays, merry christmas and a happy new year. Spend the time with people dear to you.</p>]]></summary>
</entry>
<entry>
    <title>Code Experiment</title>
    <link href="https://blog.nek0.eu/posts/2013-11-20-Code-Experiment.html" />
    <id>https://blog.nek0.eu/posts/2013-11-20-Code-Experiment.html</id>
    <published>2013-11-20T00:00:00Z</published>
    <updated>2013-11-20T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Today I made some effort to learn a bit more in Haskell and finished a working implementation of the unix utility ddate. It is nothing much, but it means a alot to me that I start to understand how to think in the paradigm of the language. If you are curious about my code, have a look at <a href="https://github.com/nek0/n-ddate">my github account</a>.</p>]]></summary>
</entry>
<entry>
    <title>Construction underway</title>
    <link href="https://blog.nek0.eu/posts/2013-10-21-Construction-underway.html" />
    <id>https://blog.nek0.eu/posts/2013-10-21-Construction-underway.html</id>
    <published>2013-10-21T00:00:00Z</published>
    <updated>2013-10-21T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>The Hackerspace I am affiliated with, the <a href="http://c3d2.de">c3d2</a>, is currently moving. It is very fascinating seeing this project evolve and helping with it.
We hope that this move will bring us forward and that we will grow from it.</p>]]></summary>
</entry>
<entry>
    <title>Moodswing</title>
    <link href="https://blog.nek0.eu/posts/2013-10-01-Moodswing.html" />
    <id>https://blog.nek0.eu/posts/2013-10-01-Moodswing.html</id>
    <published>2013-10-01T00:00:00Z</published>
    <updated>2013-10-01T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Today I have a very strange and very rare Moodswing. I’m in a good mood, which is great.</p>
<p>I know I am sick and will be for some time in the future, but today I see a better future. It’s not an easy time for me, not knowing exactly, why I am sick or even what exactly it is I suffer from.<br />
My doctors do their best to treat me and my friends are a great support. I wish to thank them all for keeping up with me.</p>
<p>This moment is very precious to me and I hope that once in a while everybody has a similar feeling.</p>]]></summary>
</entry>
<entry>
    <title>Wahlkampf</title>
    <link href="https://blog.nek0.eu/posts/2013-09-20-Wahlkampf.html" />
    <id>https://blog.nek0.eu/posts/2013-09-20-Wahlkampf.html</id>
    <published>2013-09-20T00:00:00Z</published>
    <updated>2013-09-20T00:00:00Z</updated>
    <summary type="html"><![CDATA[<h2 id="es-ist-wahl">Es ist Wahl!</h2>
<p>In den deutschen Landen ist Wahl, der wahlkampf ist auf Hochtouren.<br />
Doch wem können wir vertrauen? Alle, die sie ihre Namen auf den Plakaten haben stehen aus schlechter Erfahrung im Verdacht ihre Versprechen doch nciht zu erfüllen.<br />
Aus diesem Grund gebe ich meine Stimme an Cthulhu, den Herrn von R’lyeh. Warum sich mir dem kleineren Übel zu frieden geben?</p>]]></summary>
</entry>
<entry>
    <title>Constant change</title>
    <link href="https://blog.nek0.eu/posts/2013-09-16-constant-change.html" />
    <id>https://blog.nek0.eu/posts/2013-09-16-constant-change.html</id>
    <published>2013-09-16T00:00:00Z</published>
    <updated>2013-09-16T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>As promised in the about-page, i have made some improvements to this blog. I am now officially using html5.<br />
I have introduced <code>nav</code>, <code>article</code>, <code>header</code> and <code>footer</code> tags where necessary.<br />
Additionally, for those with mobile devices, all screens with a width of 600px and lesser get a more declutterized version of the site with no navigation sidebar but as a line above the article.<br />
I hope you enjoy it.</p>]]></summary>
</entry>
<entry>
    <title>Just a radom thought</title>
    <link href="https://blog.nek0.eu/posts/2013-09-02-Just-a-random-thought.html" />
    <id>https://blog.nek0.eu/posts/2013-09-02-Just-a-random-thought.html</id>
    <published>2013-09-02T00:00:00Z</published>
    <updated>2013-09-02T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>There is a project of mine now progressing pretty good at the moment.<br />
I am trying to convert an old typewriter into a full-fledged computer using a cubieboard or something similar.<br />
Now I am looking for a way to get printer output from the typewriter using its own types. I was thinking of magnetic force pushing down the levers inside the machine and so simulating typepresses.<br />
Maybe I am just crazy and nobody shoud listen to me closely, but I think, that should be bossible, if I could get my hands on the right magnetic coils and some neodymium magnets.</p>
<p><a href="/images/2013-09-02-typewriter.jpg" title="The Typewriter"><img src="/images/2013-09-02-typewriter_preview.jpg" /></a>
This is the Typewriter I will be working with: An old Continental typewriter from Germany, built in the early 20eth Century. It might seem a bit abusive using such an old machine for it, but if I wouldn’t use it, it would just rust in some place never to be touched again. I have the intention to bring it to new life.</p>]]></summary>
</entry>
<entry>
    <title>Language problems</title>
    <link href="https://blog.nek0.eu/posts/2013-08-11-Language-problems.html" />
    <id>https://blog.nek0.eu/posts/2013-08-11-Language-problems.html</id>
    <published>2013-08-11T00:00:00Z</published>
    <updated>2013-08-11T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>Because I am capable of fluently communicating in three languages, I now have a Problem with the decision, in which one of them i will write this blog. For now I am using english because it’s the most widely used language in the world that I can communicate in.</p>
<p>In the future I might write posts that only matter in one country or one city. Maybe i will even comment on the politics in the country i live in, but that’s not an english speaking country.</p>
<p>Maybe I will write the posts in any language I see fit at the Moment and tag it with its language. That should do it.</p>]]></summary>
</entry>
<entry>
    <title>Post for testing purposes</title>
    <link href="https://blog.nek0.eu/posts/2013-07-17-post-for-testing-purposes.html" />
    <id>https://blog.nek0.eu/posts/2013-07-17-post-for-testing-purposes.html</id>
    <published>2013-07-17T00:00:00Z</published>
    <updated>2013-07-17T00:00:00Z</updated>
    <summary type="html"><![CDATA[<p>##Hello World!</p>
<p>This is a post in which I try to use the markdown language for writing my own posts.</p>
<p>Markdown is very useful for this purpose since it does not clutter the sourcefile with tags, which need to be opened and closed and thus making it hard to read. Most of the topology
of the outcoming texts like headlines, paragraphs or even more like links to different sites can be managed in a more easier and convenient way.</p>
<p>If you have become interested in learning how to use markdown you can look at <a href="http://en.wikipedia.org/wiki/Markdown" title="Markdown at Wikipedia">Wikipedia’s page on markdown</a>.</p>
<p>Have fun!</p>]]></summary>
</entry>

</feed>
