GhostLyrics' Journalhttp://ghostlyrics.net/2020-05-21T01:44:00+02:00by Alexander Skibasessions.all2020-05-21T01:01:00+02:002020-05-21T01:44:00+02:00Alexander Skibatag:ghostlyrics.net,2020-05-21:/sessionsall.html<p>I’m rarely enthusiastic about long-term projects and so, when I dived
head-first into the <em>Sessions project</em> for creating immersive interactive
stories with some friends I was fire and flame but found it to be a
a chore very soon, especially with all the reformatting and editing required to
publish …</p><p>I’m rarely enthusiastic about long-term projects and so, when I dived
head-first into the <em>Sessions project</em> for creating immersive interactive
stories with some friends I was fire and flame but found it to be a
a chore very soon, especially with all the reformatting and editing required to
publish them on my blog.</p>
<p>When S asked me if we could revisit this system with more dedication and less
pressure behind the both of us to continue all the time and perhaps less
editing, I was interested. S asked me if I could reveal the mechanics I had
used, given I had hidden stats, stat checks and most of the character sheet to
force the player to be creative and rely on exploration instead of experience.</p>
<p>This post tries to explain the mechanics using snippets from <a href="http://ghostlyrics.net/sessionsky-1.html">sessions.KY</a>
and <a href="http://ghostlyrics.net/sessionsxn-1.html">sessions.XN</a>.</p>
<h2 id="basic-settings">Basic Settings</h2>
<p>At the beginning, I asked 3 questions and after receiving the answers, prompted
for confirmation. Video game players are used to this - it’s basically
choosing game modes, of a sort.</p>
<h3 id="choosing-difficulty">Choosing Difficulty</h3>
<p>The first question I asked was the preferred level of difficulty.</p>
<blockquote>
<p>Please choose your level of difficulty:</p>
<ul>
<li>Take me for walk in the park</li>
<li>Give me a challenge</li>
<li>Grind my bones and drink my blood.</li>
</ul>
</blockquote>
<p>This choice defined two different parameters: </p>
<p><strong>How peaceful I would write the setting.</strong> Are there conflicts in the world? Is
it safe to walk outside during night-time? Are there guards patrolling? Things
like crime rate and political climate were to be influenced by this.</p>
<p><strong>How much the character would struggle.</strong> For a story to be interesting, the
characters need to undergo hardships. Reading or playing a power fantasy is
nice, but really engrossing stories take you through ups <em>and</em> downs on the
journey. Things to be influenced were examples like presense of prejudice
against the player, presense of a class-based society, relation of the player’s
powers to the general level of strength or magic ability in the world as well
as stat growth in relation to actual achieved success.</p>
<h3 id="choosing-absurdity">Choosing Absurdity</h3>
<p>The second question I asked was the level of absurdity.</p>
<blockquote>
<p>Please choose your level of absurdity:</p>
<ul>
<li>This is pretty reasonable</li>
<li>WTF?</li>
<li>Maybe you should not have eaten those mushrooms</li>
</ul>
</blockquote>
<p>This choice defined <strong>how much I tried to stick to existing fantasy
conventions</strong> and <strong>how much I was willing to bend rules of reality to make
the fantasy setting convenient</strong>. Would there be machinery and magic in
combination? Are there fantastic semi-human races? Would magical
items and abilities be something common or rare? Would using said abilities
have side-effects or would they be cost free? All these things defined the
perceived power - but moreover they would hugely affect the believabilty of
the story. Not every reader is able to deal with the same setting and maintain
their <em>suspension of disbelief</em>.</p>
<h3 id="choosing-a-gender">Choosing a Gender</h3>
<p>The last question influenced a very rudimentary part of how I’d approach the
writing of the story - how other characters would perceive the player.</p>
<blockquote>
<p>Is your persona:</p>
<ul>
<li>A man</li>
<li>A woman</li>
<li>A person of mysterious and indistinct gender (Write my story so that it stays a mystery and NPCs are unsure)</li>
<li>Does it matter, really? I find it offensive you would even ask that. (Write the story so that it’s gender neutral and NPCs don’t care)</li>
</ul>
</blockquote>
<p>You might wonder, why ask this and is this inclusive? My answer is:
It’s easier to tailor the reaction of the world’s characters to the player if
you can establish some conventions of how different societies react to
different genders. </p>
<p>Is it inclusive? Frankly, I don’t know. I tried to cater
to someone who doesn’t want to say a man or a woman in two different ways and
am absolutely open to suggestions in that regard - after all, sexuality is not
in the questionaire.</p>
<p>The third choice was the choice for gender-neutral characters in
<a href="https://www.fallenlondon.com/login">Fallen London</a> for a <em>long</em> time before the developers
<a href="https://www.failbettergames.com/the-mysterious-and-indistinct-art-of-pronouns/">rewrote this part of the texts</a>. However, part of the community
really enjoyed being unidentifyable and
<a href="https://www.failbettergames.com/the-mysterious-and-indistinct-art-of-pronouns-revisited/">it has been brought back</a>.</p>
<h3 id="bonus-scenario">Bonus: Scenario</h3>
<p>During the second attempt at starting a session, I also gave the player the
option to quick-start their adventure by giving me a scenario template. I tried
this to offer the player the chance to pick their story setting in case they are
fond of a special type of story.</p>
<blockquote>
<p>Would you like to specify a theme or go with the narrator’s choice?<br>
Standing on a grassland path with a large, ginormous city on the far horizon,
but something feels wrong.</p>
</blockquote>
<h3 id="confirmation">Confirmation</h3>
<p>Lastly, I put the choices into a neat sentence, making for a one-liner
representative of the chosen adventure.</p>
<p><a href="http://ghostlyrics.net/sessionsky-1.html">sessions.KY</a>:</p>
<blockquote>
<p>Please confirm: You will awake as a man seeking a challenge in a world of
unbelievable absurd wonders, magic and fantastical creatures.</p>
</blockquote>
<p><a href="http://ghostlyrics.net/sessionsxn-1.html">sessions.XN</a>:</p>
<blockquote>
<p>Please confirm: You will awake as a man seeking a challenge in a mostly
believable world who starts his adventure with a metropolis in sight and a
feeling of uneasy in his heart.</p>
</blockquote>
<p>Making this the final choice was done on purpose to give the game a feeling of
“logging in” to the world. It is from this stated point that the adventure
starts.</p>
<h2 id="gameplay-loop">Gameplay Loop</h2>
<p>From there on, I’d write a few sentences to establish the area, the people in
it, objects of interest, locations and other details that are necessary to
breath life into narration. There would likely also be a tiny bit of action
going on, perhaps the player would spot a merchant passing by or some other
thing of note would happen to catch the player’s interest.</p>
<p>They might also be confronted with a question, like how they feel, how they
want to react, what they want to do or where they would like to travel.</p>
<p>All stories use “credits” as a unit for money. While this isn’t strictly
speaking the best for immersion, it provides two things:</p>
<ol>
<li>The system will be consistent even if the narrator hosts several games.</li>
<li>The system suggests that all rounds are instances of the same meta game. </li>
</ol>
<p>Changes in location would be announced via special messages that could be
interpreted as chapters or loading screens if the player felt like. I enjoyed
adding those to stick closer to a video game concept.</p>
<blockquote>
<p>You are now in Romanique, Outskirts.</p>
</blockquote>
<h3 id="starting-gear">Starting Gear</h3>
<p>Every player would start out with one unique item that would be able to
strongly define how their character interacted with the world. I would also
<em>always</em> remind the player this is a game, even if it doesn’t feel so to the
person they were playing, by attaching a very specific message to the item.</p>
<blockquote>
<p>You did well in the last round, so here’s a little gift. ~ a friend</p>
</blockquote>
<p>The effects of the item might be noticable immediately or <em>the friend</em> would
provide additional guidance for how to use it.</p>
<p>In <a href="http://ghostlyrics.net/sessionsky-1.html">sessions.KY</a>, said item was a business suit that completely circumvented
all charisma checks and would make the player an expert at charming people.
They would appear as an extremely charismatic person while wearing it,
regardless of the player’s actual charisma.</p>
<blockquote>
<p>…<br>
while checking, you notice you are wearing a business suit<br>
…<br>
The guard seems overly friendly. When you reach into the pockets of your
suit, you find a little card.<br>
You did well in the last round, so here’s a little gift.
Make sure it’s always well ironed and snazzy. ~ a friend<br>
“You’re very much welcome. A pleasure to talk to you, sir”, the guardsman
shouts after you as you leave.</p>
</blockquote>
<p>In <a href="http://ghostlyrics.net/sessionsxn-1.html">sessions.XN</a>, said item was a book that converted memories into stat
boosts. Writing about your adventure in the book would remove those memories
from your mind but reward you with stat boosts that relate to the actual
events experienced.</p>
<blockquote>
<p>There’s a book lying next to you in the grass. It looks like it has been
placed there very carefully.<br>
…<br>
There’s a dedication in the book.<br>
You did well in the last round, so here’s a little gift.
Make sure you fill it with notes of your adventures. ~ a friend<br>
…<br>
Aside from the dedication, the book is completely blank. Apart from the
mysterious dedication at the start, the book is empty. Its pages are of
great quality paper and the binding is beautiful mahogany coloured leather.
It’s supposed to be tied shut by a leather string. There’s a linen
bookmark with golden stitching on it, should you require it.
The whole thing is likely handmade.<br>
…<br>
The ink dries instantly, something as simple as a name and a date looking
like a work of art inside the gorgeous book. Something urges you to write
more.<br>
…<br>
The book seems satisfied for now.</p>
</blockquote>
<p>Lastly, in the unpublished <em>sessions.SK</em>, said item was a pair of glasses that
was able to provide insight into the game world to a disturbingly deep level.</p>
<blockquote>
<p>As you get up, you notice that the only thing that’s really clean on you
is the pair of elegant reading glasses. A label is wrapped around one part
of the frame. There seems to be some writing on it.<br>
…<br>
read the label<br>
You did well in the last round, so here’s a little gift. Make sure it’s
always clean. ~ a friend<br>
The clocktower is clearly too far away, but as you look through your glasses,
there’s tiny white writing on them, telling you the current time.
It’s 11:35.<br>
…<br>
Maybe the glasses could help you again?<br>
i put the glasses back on<br>
Water contaminated. Infection chance: 2%</p>
</blockquote>
<h3 id="character-stats">Character Stats</h3>
<p>A player character had several stats whose initial values were hidden from the
player but they could be guessed to a fairly precise amount by trying different
things and reading my answers.</p>
<p>Stat checks required a certain level of a specific stat to be passed, where
luck would always be factored into the decision. Additionally, based on a system
I had seen in the <a href="https://store.steampowered.com/app/266510/Hand_of_Fate/">Hand of Fate</a> series of games, all success was further
divided into “minor success” and “major success”.</p>
<p>A major success triggered if the stat check was in favor of the player by
more than 5 points and resulted in an additional beneficial effect.</p>
<ul>
<li>Starting values for stats are in the appendix</li>
<li>Action requirements are in the appendix</li>
</ul>
<p>Please note that most of these stats were not designed up front but made up
during writing and therefore do not represent a detailed
sheet of an individual character (e.g. Dexterity might be a candidate to think
about but did not come up in the stories written so far).</p>
<h4 id="fitness">Fitness</h4>
<p>Fitness determines endurance when running, general condition of the player’s
body, ability to stay alert for a longer period of time and might influence
more involved activities like parkour, climbing or physical and magical
sparring.</p>
<h4 id="strength">Strength</h4>
<p>Strength determines impact of strikes, force available during combat and ability
to carry heavy items. I tried to apply this as literal as possible, with the
value also affecting ability to wear heavy armor. Note that this explicitly did
not affect carried inventory - my intention was to use actual bag sizes for this
(e.g. a messenger bag).</p>
<h4 id="imagination">Imagination</h4>
<p>Magical capability is reprensented by this. It’s both a measure of how big a
single feat one can achieve with their current abilties as well as how many
tiny convenient spells one might be able to cast. Even a medium rating in this
can be a great boon for a creative player.</p>
<h4 id="reaction">Reaction</h4>
<p>Reaction is as much about reflexes as it is about being quick-witted. Thwarting
pick-pockets, weaving through traffic, dodging arrows and catching a ball are
typical actions for which a reaction check would be used. It is <em>not</em> a 1:1
mapping of what Dexterity is often used for in systems like this one.</p>
<h4 id="charisma">Charisma</h4>
<p>Charisma is the ability to influence people and to passively make people like
you. It’s applied when you first meet a new person and potentially on every
significant conversation with them. It can determine how they think about
you and how willing they are to help you, regardless of your previous actions
towards them. It would also be used during attempts to seduce them.</p>
<h4 id="perception">Perception</h4>
<p>Perception influences the ability to pick up cues in conversations, to see
tiny details in scenes like a detective would, to memorize events in more
greater clarity and generally see things that other people are too busy or
pre-occupied to notice. It could influence a certain affinity for the occult.</p>
<h4 id="luck">Luck</h4>
<p>Every stat check would factor in the character’s luck. The formula for using
luck was: <code>value(checked_stat) + random(0, luck)</code>.
The result of this would be the success or failure of a stat check.</p>
<div class="highlight"><pre><span></span><code>STATS: luck 2, strength 5, required_strength 7
CHECK: value(strength) + random(0, luck) >= required_strength
EXAMPLE: roll 2 => the condition is fulfilled
5 + 2 >= 7
RESULT: True
</code></pre></div>
<h3 id="percentage-based-checks">Percentage-based Checks</h3>
<p>For percentage based checks, your luck will always be taken into account.
Take the following example from the unpublished <em>sessions.SK</em>.</p>
<div class="highlight"><pre><span></span><code>SCENARIO: Water contaminated. Infection chance 2%.
CHECK: random(0,100) + random(0, luck) >= 3
EXAMPLE: 86 + 2 >= 3
RESULT: True
</code></pre></div>
<h2 id="appendix-a-initial-stats">Appendix A: Initial Stats</h2>
<p>Please note that this is a summary of stats used <em>so far</em> and not a design
for a complete system.</p>
<table>
<thead>
<tr>
<th>Stat</th>
<th>Start value</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Charisma</td>
<td>5</td>
<td></td>
</tr>
<tr>
<td>Fitness</td>
<td>8</td>
<td></td>
</tr>
<tr>
<td>Imagination</td>
<td>4</td>
<td>First level will be gained during initial experimentation</td>
</tr>
<tr>
<td>Luck</td>
<td>2</td>
<td></td>
</tr>
<tr>
<td>Perception</td>
<td>5</td>
<td></td>
</tr>
<tr>
<td>Reaction</td>
<td>?</td>
<td>This was determined based on the backstory of the character</td>
</tr>
<tr>
<td>Strength</td>
<td>5</td>
<td>Usage restricted until first use of Fitness</td>
</tr>
</tbody>
</table>
<h2 id="appendix-b-skill-table">Appendix B: Skill Table</h2>
<p>For the context of this section, “skill”, “spell class” and “ability” are
equivalent. They represent a <em>type of action</em>, the requirement of which can
be seen in the table. Sections labelled <code>N/A</code> were not investigated during
sessions because pre-requisites had been deemed missing.</p>
<table>
<thead>
<tr>
<th>Skill</th>
<th>Required Stat</th>
<th>Value</th>
<th>Unlockable via</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Charm average person</td>
<td>Charisma</td>
<td>10</td>
<td>Base</td>
<td>None</td>
</tr>
<tr>
<td>Conjure flame</td>
<td>Imagination</td>
<td>N/A</td>
<td>Fire Creation</td>
<td>None</td>
</tr>
<tr>
<td>Conjure iron item</td>
<td>Imagination</td>
<td>50</td>
<td>Base</td>
<td>None</td>
</tr>
<tr>
<td>Conjure wooden item</td>
<td>Imagination</td>
<td>20</td>
<td>Base</td>
<td>None</td>
</tr>
<tr>
<td>Decipher simple runes</td>
<td>Imagination</td>
<td>2</td>
<td>Base</td>
<td>None</td>
</tr>
<tr>
<td>Detect harmless deceit</td>
<td>Perception</td>
<td>10</td>
<td>Base</td>
<td>None</td>
</tr>
<tr>
<td>Detect life</td>
<td>Imagination</td>
<td>5</td>
<td>Base</td>
<td>Would scale up radius, additional findings</td>
</tr>
<tr>
<td>Detect low charm</td>
<td>Perception</td>
<td>5</td>
<td>Base</td>
<td>None</td>
</tr>
<tr>
<td>Detect white lie</td>
<td>Perception</td>
<td>6</td>
<td>Base</td>
<td>None</td>
</tr>
<tr>
<td>Determine water quality</td>
<td>N/A</td>
<td>N/A</td>
<td>Survival Instincts</td>
<td>None</td>
</tr>
<tr>
<td>Driving a motorcycle in heavy traffic</td>
<td>Reaction</td>
<td>20</td>
<td>Story specific</td>
<td></td>
</tr>
<tr>
<td>Driving inside the city, medium traffic at night</td>
<td>Reaction</td>
<td>26</td>
<td>Story specific</td>
<td>daytime * 2</td>
</tr>
<tr>
<td>Driving inside the city, medium traffic</td>
<td>Reaction</td>
<td>13</td>
<td>Story specific</td>
<td></td>
</tr>
<tr>
<td>Jogging</td>
<td>Fitness</td>
<td>5</td>
<td>Base</td>
<td>None</td>
</tr>
<tr>
<td>Manipulate air</td>
<td>Imagination</td>
<td>N/A</td>
<td>Air manipulation</td>
<td>None</td>
</tr>
<tr>
<td>Manipulate wooden item</td>
<td>Imagination</td>
<td>15</td>
<td>Base</td>
<td>None</td>
</tr>
<tr>
<td>Move tiny object</td>
<td>Imagination</td>
<td>N/A</td>
<td>Telekinesis</td>
<td>None</td>
</tr>
<tr>
<td>Read animal mind</td>
<td>Imagination</td>
<td>N/A</td>
<td>Animal Empathy</td>
<td>None</td>
</tr>
</tbody>
</table>Improving Junit-style reporting in PHP CodeSniffer Pipelines2020-05-16T23:47:00+02:002020-05-17T22:04:00+02:00Alexander Skibatag:ghostlyrics.net,2020-05-16:/improving-junit-style-reporting-in-php-codesniffer-pipelines.html<p>Recently I was shown that in a GitLab-based pipeline I had designed and
implemented, the results were presented poorly. Here is an example of how this
looked like.</p>
<div class="highlight"><pre><span></span><code># example output from failing pipeline
Running before_script and script
$ mkdir -p test-reports
$ phpcs --version
PHP_CodeSniffer version 3.5.4 (stable) by Squiz …</code></pre></div><p>Recently I was shown that in a GitLab-based pipeline I had designed and
implemented, the results were presented poorly. Here is an example of how this
looked like.</p>
<div class="highlight"><pre><span></span><code># example output from failing pipeline
Running before_script and script
$ mkdir -p test-reports
$ phpcs --version
PHP_CodeSniffer version 3.5.4 (stable) by Squiz (http://www.squiz.net)
$ phpcs --basepath="$PWD" --parallel=$(nproc --all) --report=junit --report-file=test-reports/php-codesniffer.xml "$PWD"
Time: 21.21 secs; Memory: 7.25MB
Running after_script
Uploading artifacts for failed job
Uploading artifacts...
test-reports/*.xml: found 1 matching files
[...]
ERROR: Job failed: exit code 1
</code></pre></div>
<p>From this output, it was clear that the job failed, but there was no immediate
hint why it failed. That’s because we were writing the report as XML to the
specified file - and only there. Here’s how the pipeline definition for this
step looked like.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># fragment from .gitlab-ci.yml</span>
<span class="nt">PHP Coding Standard</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">fast checks</span>
<span class="nt">image</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">timetac/ci:php5.6</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">mkdir -p test-reports</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">phpcs --version</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">phpcs</span>
<span class="l l-Scalar l-Scalar-Plain">--basepath="$PWD"</span>
<span class="l l-Scalar l-Scalar-Plain">--parallel=$(nproc --all)</span>
<span class="l l-Scalar l-Scalar-Plain">--report=junit</span>
<span class="l l-Scalar l-Scalar-Plain">--report-file=test-reports/php-codesniffer.xml "$PWD"</span>
<span class="nt">artifacts</span><span class="p">:</span>
<span class="nt">reports</span><span class="p">:</span>
<span class="nt">junit</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">test-reports/*.xml</span>
<span class="nt">tags</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">docker</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">timetac</span>
</code></pre></div>
<h2 id="improving-display-of-details-on-stdout">Improving Display of Details on stdout</h2>
<p>After some research I found that <a href="https://github.com/squizlabs/PHP_CodeSniffer">phpcs</a>, the tool we’re using to enforce
our PHP coding standard is capable of generating multiple reports in one run.
I slightly modified the pipeline instructions:</p>
<div class="highlight"><pre><span></span><code># changes to .gitlab-ci.yml
<span class="gd">- --report=junit</span>
<span class="gd">- --report-file=test-reports/php-codesniffer.xml "$PWD"</span>
<span class="gi">+ --report-full</span>
<span class="gi">+ --report-junit=test-reports/php-codesniffer.xml "$PWD"</span>
</code></pre></div>
<p>I instructed phpcs to generate both reports and then made the check fail on
purpose to see example output:</p>
<div class="highlight"><pre><span></span><code># example output from pipeline with adjusted report display
Running before_script and script
$ mkdir -p test-reports
$ phpcs --version
PHP_CodeSniffer version 3.5.4 (stable) by Squiz (http://www.squiz.net)
$ phpcs --basepath="$PWD" --parallel=$(nproc --all) --report-full --report-junit=test-reports/php-codesniffer.xml "$PWD"
FILE: cli-config.php
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
18 | ERROR | [x] Concat operator must not be surrounded by spaces
----------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------
Time: 14.85 secs; Memory: 7MB
</code></pre></div>
<p>While waiting for the results of this run, I made some screenshots how our
development team can find the parsed Junit results in GitLab’s web interface.
They are surfaced in the <strong>Tests</strong> tab of a Pipeline (in addition to being
displayed directly in Merge Requests if you happen to use GitLab for both
Continuous Integration and Development).</p>
<p><img alt="Screenshot of the Tests tab missing classname and barely readable test name" src="http://ghostlyrics.net/images/ttleviathan/01-tests-tab-before.png"></p>
<h2 id="improving-display-of-results-in-gitlab">Improving Display of Results in GitLab</h2>
<p>However, as evident in the screenshot, the results weren’t presented as nicely
as they could be. This sent me quite far down the PHP rabbit hole. After some
research I understood that the collected XML file was missing the <code>classname</code>
attribute. I checked the issue link to see that GitLab instead of customizing
their parsing fixed the issue upstream instead, which is commendable.</p>
<p>References:</p>
<ul>
<li><a href="https://docs.gitlab.com/ee/ci/junit_test_reports.html#limitations">GitLab docs, section: CI/CD, topic: Junit test reports, note “limitations”</a></li>
<li><a href="https://gitlab.com/gitlab-org/gitlab-foss/-/issues/50964">GitLab issue from gitlab-org/gitlab-foss, topic: Support JUnit test report which does not have <code>classname</code> (eslint/sasslint)</a></li>
<li><a href="https://github.com/eslint/eslint/pull/11683">Pull Request to eslint/eslint, topic: Add classname attribute to JUnit testcase</a></li>
<li><a href="https://github.com/windyroad/JUnit-Schema">Junit-Schema on GitHub (contains detailed description of Junit XML format)</a></li>
</ul>
<blockquote>
<p>Well, let’s also do that. On the other hand, who knows how long it takes for a
PR to be accepted and merged? Perhaps a custom report is an option while I
wait for upstream to accept possible contributions. </p>
</blockquote>
<p>I pinged one of the developers of phpcs via Twitter and got a reply from a
project contributor, that yes, it is possible to generate a custom report. This
was <a href="https://github.com/squizlabs/PHP_CodeSniffer/wiki/Reporting#printing-full-and-summary-reports">not evident in its documentation</a>. To use a custom report type,
you need to ask for a relative path, an absolute path or a Fully Qualified
Function (FQN) in the <code>--report</code> parameter.</p>
<p>Example:</p>
<div class="highlight"><pre><span></span><code># call to phpcs requesting a custom report type
phpcs \
--basepath="$PWD" \
--parallel=$(nproc --all) \
--report="$HOME/Repositories/PHP_CodeSniffer/src/Reports/Junit.php" \
--report-file=testreport.xml \
"$PWD"
</code></pre></div>
<p>It is also possible to request this inside the <code>.phpcs.xml</code> configuration for
your project.</p>
<div class="highlight"><pre><span></span><code><span class="c"><!-- fragment requesting a custom report of type "WPQA" --></span>
<span class="nt"><arg</span> <span class="na">name=</span><span class="s">"report"</span> <span class="na">value=</span><span class="s">"WPQA"</span><span class="nt">/></span>
</code></pre></div>
<p>References:</p>
<ul>
<li><a href="https://github.com/squizlabs/PHP_CodeSniffer/issues/1942">Issue at squizlabs/PHP_CodeSniffer, topic: Allow requesting a custom report using the report FQN</a></li>
<li><a href="https://github.com/squizlabs/PHP_CodeSniffer/pull/1948">Pull Request to squizlabs/PHP_Codesniffer, topic: Allow requesting a custom report using the report name or FQN</a></li>
<li><a href="https://github.com/squizlabs/PHP_CodeSniffer/pull/2451">Pull Request to squizlabs/PHP_CodeSniffer, topic: SonarQube report format</a></li>
<li><a href="https://github.com/squizlabs/PHP_CodeSniffer/pull/2918">Pull Request to squizlabs/PHP_CodeSniffer, topic: Add GitHub Actions annotations report</a></li>
<li><a href="https://github.com/jrfnl/QA-WP-Projects/blob/master/WP-QA-Basic/ruleset.xml">Custom phpcs ruleset from jrfnl/QA-WP-Projects</a></li>
</ul>
<p>The next step in my adventure was to investigate how the Junit report was
generated at the moment and hoping it can be understood easily. Simple enough,
I found <a href="https://github.com/squizlabs/PHP_CodeSniffer/blob/master/src/Reports/Junit.php">Junit.php</a> which looked straightforward <em>on
the first glance</em>.</p>
<p>On a more closer inspection I found some things I was dumbfounded by.</p>
<h2 id="making-indention-consistent">Making indention consistent</h2>
<p>The first thing that struck me as odd was that in <code>generateFileReport()</code> the
XML is produced by building it step by step via <code>XMLWriter</code> and its methods
while in <code>generate()</code> the beginning of the document is written out via <code>echo</code>
calls that contain the actual XML-formatted string. <em>I initially investigated
this because I was wondering why the final XML report uses correct indentation
for the first elements and then seems off for the bulk of the file.</em></p>
<div class="highlight"><pre><span></span><code><span class="x">// original snippet generating report.xml</span>
<span class="cp"><?php</span> <span class="c1">// This opening tag is only for syntax highlighting with pygments</span>
<span class="k">echo</span> <span class="s1">'<?xml version="1.0" encoding="UTF-8"?>'</span><span class="o">.</span><span class="nx">PHP_EOL</span><span class="p">;</span>
<span class="k">echo</span> <span class="s1">'<testsuites name="PHP_CodeSniffer '</span><span class="o">.</span><span class="nx">Config</span><span class="o">::</span><span class="na">VERSION</span><span class="o">.</span><span class="s1">'" errors="0" tests="'</span><span class="o">.</span><span class="nv">$tests</span><span class="o">.</span><span class="s1">'" failures="'</span><span class="o">.</span><span class="nv">$failures</span><span class="o">.</span><span class="s1">'">'</span><span class="o">.</span><span class="nx">PHP_EOL</span><span class="p">;</span>
<span class="k">echo</span> <span class="nv">$cachedData</span><span class="p">;</span>
<span class="k">echo</span> <span class="s1">'</testsuites>'</span><span class="o">.</span><span class="nx">PHP_EOL</span><span class="p">;</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="c"><!-- inconsistently indented fragment of report.xml --></span>
<span class="cp"><?xml version="1.0" encoding="UTF-8"?></span>
<span class="nt"><testsuites</span> <span class="na">name=</span><span class="s">"PHP_CodeSniffer 3.5.4"</span> <span class="na">errors=</span><span class="s">"0"</span> <span class="na">tests=</span><span class="s">"104"</span> <span class="na">failures=</span><span class="s">"1"</span><span class="nt">></span>
<span class="nt"><testsuite</span> <span class="na">name=</span><span class="s">"tests/unit/MiscUtilTest.php"</span> <span class="na">errors=</span><span class="s">"0"</span> <span class="na">tests=</span><span class="s">"1"</span> <span class="na">failures=</span><span class="s">"0"</span><span class="nt">></span>
<span class="nt"><testcase</span> <span class="na">name=</span><span class="s">"tests/unit/MiscUtilTest.php"</span><span class="nt">/></span>
<span class="nt"></testsuite></span>
</code></pre></div>
<p>In trying to make this uniformly written using calls intended for writing XML, I
learned that between <code>XMLWriter</code>, <code>SimpleXML</code>, <code>XMLReader</code> and <code>DOM</code>, it can
be tricky to find the correct solution for your problem. In my specific case,
the only solution that worked for accepting and later properly formatting
<em>partial, invalid</em> XML fragments was <code>DOM</code>. However, this attempt at making
the final result prettier comes with downsides in readability.</p>
<div class="highlight"><pre><span></span><code><span class="x">// new snippet generating report.xml</span>
<span class="cp"><?php</span> <span class="c1">// This opening tag is only for syntax highlighting with pygments</span>
<span class="nv">$dom</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\DOMDocument</span><span class="p">();</span>
<span class="nv">$dom</span><span class="o">-></span><span class="na">formatOutput</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span>
<span class="nv">$dom</span><span class="o">-></span><span class="na">encoding</span> <span class="o">=</span> <span class="s2">"UTF-8"</span><span class="p">;</span>
<span class="nv">$dom</span><span class="o">-></span><span class="na">preserveWhiteSpace</span> <span class="o">=</span> <span class="k">false</span><span class="p">;</span>
<span class="nv">$testsuites</span> <span class="o">=</span> <span class="nv">$dom</span><span class="o">-></span><span class="na">createElement</span><span class="p">(</span><span class="s2">"testsuites"</span><span class="p">);</span>
<span class="nv">$testsuites</span><span class="o">-></span><span class="na">setAttribute</span><span class="p">(</span><span class="s2">"name"</span><span class="p">,</span> <span class="s1">'PHP_CodeSniffer '</span><span class="o">.</span><span class="nx">Config</span><span class="o">::</span><span class="na">VERSION</span><span class="p">);</span>
<span class="nv">$testsuites</span><span class="o">-></span><span class="na">setAttribute</span><span class="p">(</span><span class="s2">"errors"</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
<span class="nv">$testsuites</span><span class="o">-></span><span class="na">setAttribute</span><span class="p">(</span><span class="s2">"tests"</span><span class="p">,</span> <span class="nv">$tests</span><span class="p">);</span>
<span class="nv">$testsuites</span><span class="o">-></span><span class="na">setAttribute</span><span class="p">(</span><span class="s2">"failures"</span><span class="p">,</span> <span class="nv">$failures</span><span class="p">);</span>
<span class="nv">$fragment</span> <span class="o">=</span> <span class="nv">$dom</span><span class="o">-></span><span class="na">createDocumentFragment</span><span class="p">();</span>
<span class="cm">/*</span>
<span class="cm"> * Using XML that is partially formatted in appendXML() results in</span>
<span class="cm"> * dom->formatOutput ignoring the fragment during formatting.</span>
<span class="cm"> */</span>
<span class="nv">$fragment</span><span class="o">-></span><span class="na">appendXML</span><span class="p">(</span><span class="nv">$cachedData</span><span class="p">);</span>
<span class="nv">$testsuites</span><span class="o">-></span><span class="na">appendChild</span><span class="p">(</span><span class="nv">$fragment</span><span class="p">);</span>
<span class="nv">$dom</span><span class="o">-></span><span class="na">appendChild</span><span class="p">(</span><span class="nv">$testsuites</span><span class="p">);</span>
<span class="c1">// Saving and loading the string forces pretty formatting.</span>
<span class="nv">$tmp</span> <span class="o">=</span> <span class="nv">$dom</span><span class="o">-></span><span class="na">saveXML</span><span class="p">();</span>
<span class="nv">$dom</span><span class="o">-></span><span class="na">loadXML</span><span class="p">(</span><span class="nv">$tmp</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$dom</span><span class="o">-></span><span class="na">saveXML</span><span class="p">();</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="c"><!-- consistently indented fragment of report.xml --></span>
<span class="cp"><?xml version="1.0" encoding="UTF-8"?></span>
<span class="nt"><testsuites</span> <span class="na">name=</span><span class="s">"PHP_CodeSniffer 3.5.4"</span> <span class="na">errors=</span><span class="s">"0"</span> <span class="na">tests=</span><span class="s">"104"</span> <span class="na">failures=</span><span class="s">"1"</span><span class="nt">></span>
<span class="nt"><testsuite</span> <span class="na">name=</span><span class="s">"tests/unit/MiscUtilTest.php"</span> <span class="na">errors=</span><span class="s">"0"</span> <span class="na">tests=</span><span class="s">"1"</span> <span class="na">failures=</span><span class="s">"0"</span><span class="nt">></span>
<span class="nt"><testcase</span> <span class="na">name=</span><span class="s">"tests/unit/MiscUtilTest.php"</span><span class="nt">/></span>
<span class="nt"></testsuite></span>
</code></pre></div>
<p>The upside of this approach was that I was able to keep <code>generateFileReport()</code>
exactly as it is. Since I could not figure out what the point to having partial
results as a string that differs for every report type is, I was happy to not
have to change this function. <em>A nice side effect of consistent indention is
code folding working with more editors.</em></p>
<h2 id="implementing-missing-attributes">Implementing missing attributes</h2>
<p>The second issue I was facing is that for GitLab to display the test results
properly, several attributes were missing and some were formatted in a way that
were less useful than they could be. Since GitLab are typically quite thorough
at requiring tests for how their software should behave, it was helpful to look
at the rspec for this behavior to find which XML attributes are supported.</p>
<p>References:</p>
<ul>
<li><a href="https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/spec/lib/gitlab/ci/parsers/test/junit_spec.rb">GitLab’s rspec for Junit report parsing (has exact details against which tests are run)</a></li>
<li><a href="https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/spec/fixtures/junit/junit.xml">GitLab’s fixture for testing Junit reporting (has example values)</a></li>
</ul>
<div class="highlight"><pre><span></span><code><span class="c1"># snippet from GitLab's Junit rspec</span>
<span class="n">expect</span><span class="p">(</span><span class="n">test_case</span><span class="o">.</span><span class="n">classname</span><span class="p">)</span><span class="o">.</span><span class="n">to</span> <span class="n">eq</span><span class="p">(</span><span class="s1">'Calculator'</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="n">test_case</span><span class="o">.</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">to</span> <span class="n">eq</span><span class="p">(</span><span class="s1">'sumTest1'</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="n">test_case</span><span class="o">.</span><span class="n">execution_time</span><span class="p">)</span><span class="o">.</span><span class="n">to</span> <span class="n">eq</span><span class="p">(</span><span class="mi">0</span><span class="o">.</span><span class="mo">01</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="n">test_case</span><span class="o">.</span><span class="n">status</span><span class="p">)</span><span class="o">.</span><span class="n">to</span> <span class="n">eq</span><span class="p">(</span><span class="n">status</span><span class="p">)</span>
<span class="n">expect</span><span class="p">(</span><span class="n">test_case</span><span class="o">.</span><span class="n">system_output</span><span class="p">)</span><span class="o">.</span><span class="n">to</span> <span class="n">eq</span><span class="p">(</span><span class="n">output</span><span class="p">)</span>
</code></pre></div>
<p>Given the above list, <code>classname</code> was missing. When checking the Junit fixtures
found in GitLab’s code, it seemed <code>file</code> was also missing. I went to verify this
theory by breaking some files in the scanned code base on purpose.</p>
<div class="highlight"><pre><span></span><code># call to phpcs after putting coding standard violations into 2 files
phpcs --basepath="$PWD" --parallel=$(nproc --all) --report-full "$PWD"
FILE: tests/unit/DeploymentCommandsTest.php
------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 1 LINE
------------------------------------------------------------------------------
44 | ERROR | [x] Space after opening parenthesis of function call prohibited
44 | ERROR | [x] Space after opening parenthesis of function call prohibited
------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
------------------------------------------------------------------------------
FILE: cli-config.php
------------------------------------------------------------------------------
FOUND 3 ERRORS AFFECTING 3 LINES
------------------------------------------------------------------------------
18 | ERROR | [x] Concat operator must not be surrounded by spaces
19 | ERROR | [x] Concat operator must not be surrounded by spaces
77 | ERROR | [x] Space after opening parenthesis of function call prohibited
------------------------------------------------------------------------------
PHPCBF CAN FIX THE 3 MARKED SNIFF VIOLATIONS AUTOMATICALLY
------------------------------------------------------------------------------
</code></pre></div>
<p>The generated <code>report.xml</code> was missing the attributes that could make our lives
easier.</p>
<div class="highlight"><pre><span></span><code><span class="c"><!-- fragment of report.xml after inserting coding standard violations --></span>
<span class="cp"><?xml version="1.0" encoding="UTF-8"?></span>
<span class="nt"><testsuites</span> <span class="na">name=</span><span class="s">"PHP_CodeSniffer 3.5.4"</span> <span class="na">errors=</span><span class="s">"0"</span> <span class="na">tests=</span><span class="s">"107"</span> <span class="na">failures=</span><span class="s">"5"</span><span class="nt">></span>
<span class="c"><!-- ... --></span>
<span class="nt"><testsuite</span> <span class="na">name=</span><span class="s">"tests/unit/DeploymentCommandsTest.php"</span> <span class="na">errors=</span><span class="s">"0"</span> <span class="na">tests=</span><span class="s">"2"</span> <span class="na">failures=</span><span class="s">"2"</span><span class="nt">></span>
<span class="nt"><testcase</span> <span class="na">name=</span><span class="s">"PSR2.Methods.FunctionCallSignature.SpaceAfterOpenBracket at tests/unit/DeploymentCommandsTest.php (44:35)"</span><span class="nt">></span>
<span class="nt"><failure</span> <span class="na">type=</span><span class="s">"error"</span> <span class="na">message=</span><span class="s">"Space after opening parenthesis of function call prohibited"</span><span class="nt">/></span>
<span class="nt"></testcase></span>
<span class="nt"><testcase</span> <span class="na">name=</span><span class="s">"PEAR.Functions.FunctionCallSignature.SpaceAfterOpenBracket at tests/unit/DeploymentCommandsTest.php (44:35)"</span><span class="nt">></span>
<span class="nt"><failure</span> <span class="na">type=</span><span class="s">"error"</span> <span class="na">message=</span><span class="s">"Space after opening parenthesis of function call prohibited"</span><span class="nt">/></span>
<span class="nt"></testcase></span>
<span class="c"><!-- ... --></span>
<span class="nt"><testsuite</span> <span class="na">name=</span><span class="s">"cli-config.php"</span> <span class="na">errors=</span><span class="s">"0"</span> <span class="na">tests=</span><span class="s">"3"</span> <span class="na">failures=</span><span class="s">"3"</span><span class="nt">></span>
<span class="nt"><testcase</span> <span class="na">name=</span><span class="s">"Squiz.Strings.ConcatenationSpacing.PaddingFound at cli-config.php (18:17)"</span><span class="nt">></span>
<span class="nt"><failure</span> <span class="na">type=</span><span class="s">"error"</span> <span class="na">message=</span><span class="s">"Concat operator must not be surrounded by spaces"</span><span class="nt">/></span>
<span class="nt"></testcase></span>
<span class="nt"><testcase</span> <span class="na">name=</span><span class="s">"Squiz.Strings.ConcatenationSpacing.PaddingFound at cli-config.php (19:16)"</span><span class="nt">></span>
<span class="nt"><failure</span> <span class="na">type=</span><span class="s">"error"</span> <span class="na">message=</span><span class="s">"Concat operator must not be surrounded by spaces"</span><span class="nt">/></span>
<span class="nt"></testcase></span>
<span class="nt"><testcase</span> <span class="na">name=</span><span class="s">"PSR2.Methods.FunctionCallSignature.SpaceAfterOpenBracket at cli-config.php (77:50)"</span><span class="nt">></span>
<span class="nt"><failure</span> <span class="na">type=</span><span class="s">"error"</span> <span class="na">message=</span><span class="s">"Space after opening parenthesis of function call prohibited"</span><span class="nt">/></span>
<span class="nt"></testcase></span>
<span class="nt"></testsuite></span>
</code></pre></div>
<p>As expected, there was neither <code>file</code> nor <code>classname</code>. Furthermore, the line and
column indicator should likely be moved to <code>message</code> in <code>failure</code> for easier
remediation. Taking the first failure as an example, it should probably look
like this:</p>
<div class="highlight"><pre><span></span><code><span class="nt"><testcase</span> <span class="na">name=</span><span class="s">"PSR2.Methods.FunctionCallSignature.SpaceAfterOpenBracket"</span> <span class="na">classname=</span><span class="s">"DeployCommandsTest"</span> <span class="na">file=</span><span class="s">"tests/unit/DeploymentCommandsTest.php"</span><span class="nt">></span>
<span class="nt"><failure</span> <span class="na">type=</span><span class="s">"error"</span> <span class="na">message=</span><span class="s">"Space after opening parenthesis of function call prohibited (line 44, column 35)"</span><span class="nt">/></span>
<span class="nt"></testcase></span>
</code></pre></div>
<p>The next block is what the final XML structure looks like, after some iterations. I
wanted to completely remove the <code>line:column</code> part from <code>name</code> but realized
that some consumers of the report might not be able to cope well with <code>testcase</code>
elements that have both the same <code>classname</code> and <code>name</code>. I used the
<a href="https://github.com/eslint/eslint/pull/11683">Pull Request to eslint</a> as template for how to implement the
additional attributes.</p>
<div class="highlight"><pre><span></span><code><span class="nt"><testcase</span> <span class="na">classname=</span><span class="s">"DeploymentCommandsTest"</span> <span class="na">file=</span><span class="s">"tests/unit/DeploymentCommandsTest.php"</span> <span class="na">name=</span><span class="s">"PSR2.Methods.FunctionCallSignature.SpaceAfterOpenBracket (44:35)"</span><span class="nt">></span>
<span class="nt"><failure</span> <span class="na">type=</span><span class="s">"error"</span> <span class="na">message=</span><span class="s">"Space after opening parenthesis of function call prohibited (line 44, column 35)"</span><span class="nt">/></span>
<span class="nt"></testcase></span>
</code></pre></div>
<p>Here’s what the difference looks like when viewed in GitLab.
<img alt="Screenshot of the Tests tab with classnames, almost readable test names as well as line and column numbers in the error message" src="http://ghostlyrics.net/images/ttleviathan/01-tests-tab-after.png"></p>
<p>Given that, I have adjusted <code>Junit.php</code> and sent a
<a href="https://github.com/squizlabs/PHP_CodeSniffer/pull/2964">Pull Request to phpcs</a>.</p>
<h3 id="make-it-work-right-now">Make it work right now</h3>
<p>While I wait for this part to be merged, I’ve manually patched it into the
phpcs installation we use during testing by overwriting the file.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># fragment of .gitlab-ci.yml</span>
<span class="nt">script</span><span class="p">:</span>
<span class="c1"># manually copy custom report. It's not possible to print a custom report to a file</span>
<span class="c1"># AND a builtin one to stdout in the same run.</span>
<span class="c1"># remove after https://github.com/squizlabs/PHP_CodeSniffer/pull/2964 is released</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">cp resources/scripts/ci/Junit.php /opt/vendor/squizlabs/php_codesniffer/src/Reports/Junit.php</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">phpcs --version</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">phpcs</span>
<span class="l l-Scalar l-Scalar-Plain">--basepath="$PWD"</span>
<span class="l l-Scalar l-Scalar-Plain">--parallel=$(nproc --all)</span>
<span class="l l-Scalar l-Scalar-Plain">--report-full</span>
<span class="l l-Scalar l-Scalar-Plain">--report-junit=test-reports/php-codesniffer.xml "$PWD"</span>
</code></pre></div>
<hr>
<p><em>Dismantling a Leviathan is a series about improving tests and
automated quality tools on a large existing codebase.</em></p>
<!-- links -->
<!-- images -->Smalltalk with the Neighbours2020-05-10T11:15:00+02:002020-05-10T11:15:00+02:00Alexander Skibatag:ghostlyrics.net,2020-05-10:/smalltalk-with-the-neighbours.html<p>Today, a very large bug jumped in when I opened my right window. I was
displeased and moved to the left window to have a conversation that I felt was
long overdue.</p>
<p><strong>Smaller Spider:</strong> The human is coming. Quick, look non-threatening!</p>
<p><strong>Me:</strong> Yo, spider-san. We need to have a talk …</p><p>Today, a very large bug jumped in when I opened my right window. I was
displeased and moved to the left window to have a conversation that I felt was
long overdue.</p>
<p><strong>Smaller Spider:</strong> The human is coming. Quick, look non-threatening!</p>
<p><strong>Me:</strong> Yo, spider-san. We need to have a talk.<br>
<strong>Large Spider:</strong> I can’t understand you very well, maybe open the window?<br>
<strong>Me:</strong> Yeah, no, I’m not falling for that.<br>
<strong>Spider:</strong> heh, worth a try.<br>
<strong>Me:</strong> I thought we had an agreement?<br>
<em>The spider takes a long drag on its cigarette.</em><br>
<strong>Spider:</strong> That agreement being?<br>
<strong>Me:</strong> I leave you, your net and your coworkers in peace while you keep the bugs
out.<br>
<strong>Spider:</strong> Did we, huh?<br>
<em>The spider looks out towards the river.</em><br>
<strong>Me:</strong> Pretty sure we did.<br>
<strong>Spider:</strong> Listen, kid. You’re in no position to make demands here. I know you’re
scared of me. Get lost.<br>
<strong>Me:</strong> That may be so, spider-san. But I assure you that the vacuum cleaner is
not scared of you.<br>
<strong>Vacuum cleaner:</strong> Leave me out of this.<br>
<strong>Me:</strong> Shut up or you go back to the dark closet immediately, without food.<br>
<em>The vacuum cleaner stares accusingly. It remains silent but I hear faint music
from its earphones. The track is End of an Empire - Comaduster Remix. The
vacuum cleaner often feels like it is subtle, but really, it’s not.</em><br>
<strong>Spider:</strong> You just MURDERED one of my friends, Alex. I have seen it
happening.<br>
<strong>Me:</strong> Jep. Because they crossed the line. I have explicitly said on many
occasions that entering the apartment is a death sentence for your kind. Hanging
over my head while I was playing video games was a very bad move.<br>
<em>The spider takes another drag on its cigarette and is quiet for some time.</em><br>
<strong>Spider:</strong> We’ll talk about this again, human.<br>
<strong>Me:</strong> Say, where do you stay in winter?<br>
<strong>Spider:</strong> Attic.<br>
<em>The spider responds too quickly for my taste but I don’t have any evidence of
the opposite.</em><br>
<strong>Me:</strong> Is that so?<br>
<em>All the spider does is wait in stony silence. I make a point of ignoring the
spider outside the window and leave.</em></p>sessions.XN 12019-11-03T12:57:00+01:002020-05-20T22:04:00+02:00Alexander Skibatag:ghostlyrics.net,2019-11-03:/sessionsxn-1.html<p><em>Here’s the first session of my second player.</em></p>
<hr>
<p>Please choose your level of difficulty:</p>
<ul>
<li>Take me for walk in the park</li>
<li>Give me a challenge</li>
<li>Grind my bones and drink my blood.</li>
</ul>
<blockquote>
<p>Let’s start with a challenge.</p>
</blockquote>
<p>Please choose your level of absurdity:</p>
<ul>
<li>This is pretty reasonable</li>
<li>WTF …</li></ul><p><em>Here’s the first session of my second player.</em></p>
<hr>
<p>Please choose your level of difficulty:</p>
<ul>
<li>Take me for walk in the park</li>
<li>Give me a challenge</li>
<li>Grind my bones and drink my blood.</li>
</ul>
<blockquote>
<p>Let’s start with a challenge.</p>
</blockquote>
<p>Please choose your level of absurdity:</p>
<ul>
<li>This is pretty reasonable</li>
<li>WTF?</li>
<li>Maybe you should not have eaten those mushrooms</li>
</ul>
<blockquote>
<p><em>What… How do you define “WTF” absurdity compared to “pretty reasonable”?</em></p>
</blockquote>
<p>[silence]</p>
<blockquote>
<p>Let’s keep it pretty reasonable.</p>
</blockquote>
<p>Is your persona:</p>
<ul>
<li>A man</li>
<li>A woman</li>
<li>A person of mysterious and indistinct gender (Write my story so that it stays
a mystery and NPCs are unsure)</li>
<li>Does it matter, really? I find it offensive you would even ask that. (Write
the story so that it’s gender neutral and NPCs don’t care)</li>
</ul>
<blockquote>
<p>A man</p>
</blockquote>
<p>Would you like to specify a theme or go with the narrator’s choice?</p>
<blockquote>
<p>Standing on a grassland path with a large, ginormous city on the far horizon,
but something feels wrong.</p>
</blockquote>
<p>Please confirm: You will awake as a man seeking a challenge in a mostly
believable world who starts his adventure with a metropolis in sight and a
feeling of uneasy in his heart.</p>
<blockquote>
<p>Sounds good</p>
</blockquote>
<p>You open your eyes and look straight ahead. You must’ve fallen asleep sitting
against this medium size rock. Far on the horizon you can see Romanique, the city
you have heard so many stories about. A city that never sleeps. A city in which
all men and women are equal. A city like no other. A place of discoveries and
innovation. Your clothes are slightly stained from the grass you are sitting in.
There’s a book lying next to you in the grass. It looks like it has been placed
there very carefully.</p>
<blockquote>
<p>I pick up the book and open it slightly confused after just waking up.</p>
</blockquote>
<p>There’s a dedication in the book.</p>
<p><strong>You did well in the last round, so here’s a little gift. Make sure you fill it
with notes of your adventures. ~ a friend</strong></p>
<blockquote>
<p>Strange. I look at it for a moment, flip through the other pages, then stuff
the book in my backpack and get on my motorbike.</p>
</blockquote>
<p>Aside from the dedication, the book is completely blank. You do not have a
backpack, so you put the book into the tiny storage compartment of your
motorbike - the one directly beneath the handlebar - and climb on.</p>
<blockquote>
<p><em>Just big enough to fit the book in sideways, that’s convenient. Now I better
put the pedal to the metal if I want to reach the security check by the
evening.</em></p>
</blockquote>
<p>You start the bike and drive towards the city. Maybe you should experiment a
bit? What can you do? How fast does this go? After a moment you remember that
the bike has a radio that transmits its music to the rider wirelessly.</p>
<blockquote>
<p>I check my fuel gauge. It’s still 80% so I decide to swirl down this small
path back onto the main road, and once there, I go as fast as I, can zooming
past the other people - dangerously weaving in-between, hyped by the music to
reach my goal.</p>
<p>The radio plays <a href="https://www.youtube.com/watch?v=_mgB-zwOkwY">a mix of Stars and Flowers by Keiichi Okabe & Kuniyuki
Takahashi</a>. </p>
</blockquote>
<p><strong>Reaction check. required: 20. current: 47. luck: +0. major success.</strong> On the
main road you are blazing ahead of everyone else, while some other drivers are
giving you the finger. You arrive at your destination - city portal NNW - before
it’s dark. You used 2% of the fuel.</p>
<blockquote>
<p>Ooh, I better hurry inside, past the city portal.</p>
</blockquote>
<p>Guardsmen at the city portal block your way and you slow down, reluctantly, and
eventually stop. “Do you have anything to declare?”, the man wearing a red
uniform asks you.</p>
<blockquote>
<p>Nothing unusual, sir. A few books, a camera with accessories and some clothes.
Oh, and a bike, sir, in case you hadn’t noticed.</p>
</blockquote>
<p>“Surely you jest. Nobody here has seen a book for decades.” He shakes his head
in disbelief. “Please stop wasting my time. You may pass.” The guards let you
pass through the city portal. <strong>You are now in Romanique, Outskirts.</strong></p>
<blockquote>
<p>Hmm, I rush off and head straight for Crystal Beach on the far end of the city.
Underway to there I’m still thinking about what that guard said. “Nobody has
seen a book? Surely he must be joking right? What the hell was he thinking, my
home is filled with books from wall to wall, after all my wife loved only two
things in life, the sunset at the beach and her job as a librarian.”</p>
</blockquote>
<p><strong>Reaction check. required: 13. current: 47. luck: +2. major success.</strong> You
arrive at the beach just in time to admire the sunset after parking the bike
without any traffic incidents. <strong>You are now in Romanique, Crystal Beach.</strong></p>
<blockquote>
<p>I pull my camera out, put the stand down in the beautiful shimmering sand and
dial down the exposure. Snap. I look at it. “That’s one of the most gorgeous
views I’ve ever seen, damn it was really worth coming out here during spring,
and I even managed to snap the picture today. I was sure it would take me at
least another week.”
I start laughing out loud staring at the picture on the display, and
eventually sit down in the sand to enjoy the last rays of sunlight sinking
down.</p>
</blockquote>
<p>“Wanna buy some walnuts? Almonds? Cashews? Got all the nutty things you can
imagine, lad. Bottled water too.”, a big man pushing a ridiculously colorful
cart in front of him yells. You are startled. Romanced by the view you were
close to drifting off again - something that happens often lately.</p>
<blockquote>
<p>Ooh, how much are the walnuts, sir?</p>
</blockquote>
<p>“20 credits. no discounts.”</p>
<blockquote>
<p>Hey, that’s quite cheap, sure. Give me that bag in the corner there.</p>
</blockquote>
<p>You pay the man, receive your snack and watch him push his cart off.</p>
<blockquote>
<p>After eating most of the walnuts, I close the bag and put it in my pocket,
heading back to my bike. </p>
</blockquote>
<p>You’re tackled from the back by a child. <strong>Reaction check. required: 35.
current: 47. luck: +1. major success.</strong> You catch the tiny criminal that was
about to nab your nuts and your purse.</p>
<blockquote>
<p>“Bwahaha, want a walnut kid? Don’t try to steal my purse while you’re at it
though, this evening is too beautiful for that.” And with that I toss him the
bag, I wasn’t going to finish it anyways.</p>
</blockquote>
<p>The kid stares at you in disbelief for a moment and then scuttles off, his
reptilian tail flying as he hurries out of sight. It’s getting dark.</p>
<blockquote>
<p>I watch him run out of sight, then walk the last few paces back to my bike,
unlock it from the lamppost I chained it to just as the light flickers on..
<em>Guess i should go looking for a place to spend the night.</em> And with that i
head into the city.</p>
</blockquote>
<p>You head into the city. <strong>Reaction check. required: 26. current: 47. luck: +2.
major success.</strong> You arrive in the city center, near the University Grande
Halle, the Recipio Grande Halle and stop on Grande Halle Patio to consider your
next actions. You arrive there speedily, using barely any fuel and with little
difficulties despite the sun having set. Of course, the street lights help.
<strong>You are now in Romanique, Center.</strong></p>
<blockquote>
<p>I’ll look around for a nice place to stay in, on the slightly more expensive
side with promises of a good breakfast. Credits aren’t too big of a deal since
I’ve been saving over a decade for this adventure anyways.</p>
</blockquote>
<p>There’s a good hotel a few hundred meters down the road. There’s also a
decadently expensive place you passed on the way here.</p>
<blockquote>
<p>I’ll drive to the good hotel, park and lock up and go inside.</p>
</blockquote>
<p>A woman standing at the reception who was looking at the back panel with the
keys on a wall turns her owl head almost 180° to look a you. “Welcome to Eden
Center, dear guest. Do you have a reservation?”</p>
<blockquote>
<p>“No, i was looking if i could still get a room until the end of the week, with
breakfast included.”</p>
</blockquote>
<p>She turns around to face you properly. “Give me a moment to check.” She types a
few keys on her computer and adjusts her glasses. “I don’t think we have…”
<strong>Charisma check. required: 10. current: 5. luck: +1. failed.</strong> “…no, really,
there’s no empty room for you, but maybe there might be something we can do
about that if you’re really in a pinch. Otherwise I’m extremely sorry to have to
refer you to another hotel.”</p>
<blockquote>
<p>“Oh that’s fine, got any recommendations for hotels around the area miss?”</p>
</blockquote>
<p>“Well, there’s the Nightingale Inn, that’s about 1 km towards the Crystal Beach.
There’s also the motel a few blocks away. And of course, there’s the Grande
Halle Palace but you don’t strike me as the type to waste your money on
extravagance.” <strong>Perception check. required: 5. current: 5. luck: 0. minor
success.</strong> You don’t like the emphasis she places on the motel. It’s getting
very late. You should rest soon.</p>
<blockquote>
<p>“Aah, thanks then I’ll go and check with the Nightingale Inn, good evening…
eeh.. night.” I travel to the Nightingale Inn.</p>
</blockquote>
<p>The clerk at the Nightingale Inn barely looks up from the video game he’s
engrossed in.</p>
<blockquote>
<p>“Hello! Sorry to ask so late but do you have any free rooms left?”</p>
</blockquote>
<p>The clerk grumbles “Reservation?” but it is barely understandable.</p>
<blockquote>
<p>“I eeh, no I don’t have a reservation.”</p>
</blockquote>
<p>The clerk sighs and unwillingly puts his game away to check the computer for
open spots. He replies: “We still … room, yes. How long… intend to stay?”.
<strong>Perception check. required: 6. current: 5. luck: +1. minor success.</strong> He’s
mumbling because he’s hiding something in his mouth. </p>
<blockquote>
<p>“4 nights if possible please”. I smile.</p>
</blockquote>
<p>“… credits. cash. up front.” You don’t understand the actual amount, only that
it starts with “3”.</p>
<blockquote>
<p>“I’m sorry, can you repeat that?”
In the meantime I get my actual wallet out from the inner pocket of my jacket
and check how much cash I have.</p>
</blockquote>
<p>The clerk rolls his eyes and speaks again, just a hint more clearly this time.
“3200 credits.” When you fiddle with your jacket he notices the stitched part of
it where you had the logo removed. He eyes you suspiciously. “…you trouble?”</p>
<blockquote>
<p>“Nah mate, that was a mistake from a long time ago, as long as I get a nice
breakfast in the morning you won’t have trouble with me. I laugh.</p>
</blockquote>
<p>“…not be trouble. Owner said make trouble disappear.” This time he spoke clearly
on purpose. <strong>Perception check. required: 10. current: 5. luck: 0. failed.</strong> But
you could not make out what he’s hiding in his mouth. What he said was not
exactly a subtle threat. He puts a small input terminal for you to fill the form
on the counter. You are starting to lose his interest.</p>
<blockquote>
<p>I quickly fill it in reassuring him I’m fine, and pay.</p>
</blockquote>
<p>He hands you a key with the number 5 on its keyring and goes back to his video
game. Looks like you’ll have to find the room yourself. There’s a hallway and
there are spiral stairs.</p>
<blockquote>
<p><em>Well it’s just number 5 right? It can’t be that far I walk down the hallway.</em></p>
</blockquote>
<p>The hallway ends in a dining room. Everything is neatly arranged for the next
morning already.</p>
<blockquote>
<p><em>Whoops, at least I already found where the dining room is, better go check
upstairs for number 5.</em> I head upstairs to the first floor, looking around.</p>
</blockquote>
<p>Upstairs you immediately find number 5 as it’s the door that’s visible at the
end of the corridor from the stairs. You unlock the door and enter. It smells a
bit of cleaning solution. Everything is very clean and again, the items are
neatly arranged. There’s a white gift box with a golden ribbon around it on the
bed.</p>
<blockquote>
<p>I unpack my stuff and then look inside the white box.</p>
</blockquote>
<p>There’s an elegant wooden pen in it and a card. The card says</p>
<p><strong>I thought you might end up here eventually. This will make your beginning a
bit easier. ~ a friend</strong></p>
<blockquote>
<p><em>What the heck, this is getting creepy. Oh well at least I don’t have to worry
about how I’m gonna write in the book anymore.</em> With that thought, I grab the
book, sit down in a chair and flick through it looking at it and the pen in
detail. </p>
</blockquote>
<p>Apart from the mysterious dedication at the start, the book is empty. Its pages
are of great quality paper and the binding is beautiful mahogany coloured
leather. It’s supposed to be tied shut by a leather string. There’s a linen
bookmark with golden stitching on it, should you require it. The whole thing is
likely handmade.</p>
<blockquote>
<p>I take the pen and try writing in it, just a small footnote with my name and
the date to see how it writes.</p>
</blockquote>
<p>The ink dries instantly, something as simple as a name and a date looking like a
work of art inside the gorgeous book. Something urges you to write more.</p>
<blockquote>
<p>I’ll write a few paragraphs about my journey so far, the names of the few
beaches so far, and the Crystal Beach from today. After that i put the book
away, and walk up to the mirror in the bathroom, inspecting myself to check
that I don’t look filthy or anything, and practice having a conversation with
myself in the mirror for a bit, before taking a shower.</p>
</blockquote>
<p>The book seems satisfied for now. The mirror politely asks you not to
over-exaggerate your mimics while you’re trying to convince someone you’re an
honest person and respectfully suggests taking a shower. </p>
<p>You’re all clean after your shower. It’s the dead of the night.</p>
<blockquote>
<p>Happy with everything I got done today I head to bed, but first I make sure to
put the book in my bag on the chair, far away from my bed.</p>
</blockquote>sessions.KY 12019-10-27T10:55:00+01:002020-05-20T22:03:00+02:00Alexander Skibatag:ghostlyrics.net,2019-10-27:/sessionsky-1.html<p><em>Lately I’ve been thinking about holding some ad-hoc role playing sessions again
and this was an attempt to get the thought going. Quite some concepts are rather
unrefined at this point and I’ll continue to make things up as I go. However,
some mechanics have already started to …</em></p><p><em>Lately I’ve been thinking about holding some ad-hoc role playing sessions again
and this was an attempt to get the thought going. Quite some concepts are rather
unrefined at this point and I’ll continue to make things up as I go. However,
some mechanics have already started to form and work fairly well.</em></p>
<p><em>In this I try to encourage some experimentation by having the player start with
nearly no resources and no prior knowledge about the world or its inhabitants.
They are not familiar with its systems and moreover, they are not aware of what
actions they can perform or how their body reacts at the start. Players are
expected to keep their own characters sheets in order to keep tabs on what is
achievable for them as I am thinking about implementing negative consequences.
For example, in this session, a <a href="https://docs.google.com/spreadsheets/">Google Sheet</a> was used.</em></p>
<hr>
<p>Please choose your level of difficulty:</p>
<ul>
<li>Take me for walk in the park</li>
<li>Give me a challenge</li>
<li>Grind my bones and drink my blood.</li>
</ul>
<blockquote>
<p>2</p>
</blockquote>
<p>Please choose your level of absurdity:</p>
<ul>
<li>This is pretty reasonable</li>
<li>WTF?</li>
<li>Maybe you should not have eaten those mushrooms</li>
</ul>
<blockquote>
<p>3</p>
</blockquote>
<p>Is your persona:</p>
<ul>
<li>A man</li>
<li>A woman</li>
<li>A person of mysterious and indistinct gender (Write my story so that it stays
a mystery and NPCs are unsure)</li>
<li>Does it matter, really? I find it offensive you would even ask that. (Write
the story so that it’s gender neutral and NPCs don’t care)</li>
</ul>
<blockquote>
<p>1</p>
</blockquote>
<p>Please confirm: You will awake as a man seeking a challenge in a world of
unbelievable absurd wonders, magic and fantastical creatures.</p>
<blockquote>
<p>Yes</p>
</blockquote>
<p>“Sir? Sir? Please wake up, you cannot sleep in Lord Melisano’s gardens. I must
ask you to leave”, the guardsman tells you. You sleepily open your eyes and
notice you have been dozing on a perfectly groomed lawn under an equally
perfectly cut apple tree. In a slight distance you see a fence. You feel a bit
uncomfortable in your clothes and while checking, you notice you are wearing a
business suit.</p>
<p>What’s your reaction?</p>
<blockquote>
<p>I blink and look up at the guard. “I’m sorry, I was so tired I just… dozed
off.”
Wondering how I ended up here I get up, looking around briefly. Figuring it’s
probably a dream I ponder what to do.
<em>He asked me to leave, I probably should.</em>
“I apologize once more. This should not have happened. I will take my leave
now.”
I head toward the fence, figuring that’s probably the way out of the gardens.</p>
</blockquote>
<p>The guard sighs and answers “Yeah, I know the feeling of being dead tired. I can
relate. Sir, I will escort you to the front gate. Please make sure Lord Melisano
never hears of you entering his property without permission.” He steps into your
way and gentle nudges you into the other direction from where you were heading.
The guard seems overly friendly. When you reach into the pockets of your suit,
you find a little card.</p>
<p><strong>You did well in the last round, so here’s a little gift. Make sure it’s always
well ironed and snazzy. ~ a friend</strong></p>
<p>It would probably be wise to follow the guardsman. But maybe you have other
intentions?</p>
<blockquote>
<p>I nod politely at the guardsman and follow him to the front gate. The card I
put back into my pocket.
“Thank you,” I say to the guard as I pass him at the front gate.
Once outside of Lord Melisano’s gardens I take a look around to see where I
can go from the gate.</p>
</blockquote>
<p>“You’re very much welcome. A pleasure to talk to you, sir”, the guardsman shouts
after you as you leave. There’s a signpost at the fork of the road. One
direction says “harbor”, the other “botanical library”. In the distance you can
spot a tower. Everything else is either hilly farm land or lush forest. From
what you remember from botany and geography, you’re likely in temperate climate.</p>
<blockquote>
<p>“Have a good day!”
I start heading toward the botanical library. As I walk down the road headed
there I take the card out again and flip it over to see if there’s anything
else on there. If not, I put it back in my pocket.
During my walk to the library I subtly check out how my body functions. I
tense some of my muscles to get a sense of what I’m capable of doing.
<em>Weird dream this. It feels so real… Hmm, if it’s a lucid one I should be
able to…</em>
I hold my hand in front of me and try will a sword into existence.</p>
</blockquote>
<p>The card has the format of a business card but there are no logos on it, and
neither is a company name. The elaborate design involving black, sweeping lines
along the borders of the card as well as the quality of the paper suggest it is
expensive. </p>
<p>Your muscles… <strong>Strength check. current: 2, required: 5, luck: +2. failed.</strong>
…hurt. They feel like the haven’t been used in ages.
You try to conjure up a sword. <strong>Imagination check. current:4, required: 50,
luck: +1. failed.</strong> It’s not working. You can feel you’re on the right path, but
maybe you require instructions? </p>
<p>You hear a faint voice chuckling.</p>
<blockquote>
<p>I come to a stop and turn my head in the direction the sound came from, a
slight frown on my brow. “Hmm?” </p>
</blockquote>
<p>Nobody is there.</p>
<blockquote>
<p>“Who’ s there?” I call out, looking around more carefully.</p>
</blockquote>
<p>Even upon closer inspection, careful observation of the nothing, thoughts about
nihilism and intense deliberation of the nothingness, the void and its meaning,
in the end it is still nothing. <em>Nobody is there.</em></p>
<p><strong>You gain Imagination +1.</strong></p>
<blockquote>
<p>I ponder the situation a bit longer, but then decide to move on. As I continue
walking I try my hand at various other things: conjure up a small knife
instead, create a flame in my hand, stare at a bird and try to read its mind,
push a pebble away with my mind, and focus on ‘feeling’ the area around me to
see if I am capable of perceiving more than my normal senses.</p>
</blockquote>
<ul>
<li>You try to conjure up a knife. <strong>Imagination check. current:5, required: 50,
luck: +0. failed.</strong> Nothing happens. </li>
<li>You try to create a flame. <strong>Required ability not learned.</strong> Nothing happens.</li>
<li>You try to read the bird’s mind. <strong>Required ability not learned.</strong> Nothing
happens. </li>
<li>You try to push a pebble with your mind. <strong>Required ability not learned.</strong>
Nothing happens. </li>
<li>You try to focus on feeling your surrounding area. <strong>Imagination check.
current: 5, required: 5, luck: +1. minor success.</strong> You can sense that there
are living beings nearby. You do not know how many, what kind or how far away
they are. </li>
</ul>
<blockquote>
<p><em>Okay, so that’s at least something I can do…</em>
I look around for a place where I can sit down for a moment. Something like a
bench or a log maybe. </p>
</blockquote>
<p>There are no logs or benches on the long paths through the grain fields. You
find a medium sized rock though, that will do in a pinch. You sit down. You nod.
Good rock. <em>Maybe you should try rolling it.</em> </p>
<blockquote>
<p>Before doing rock (‘n) rolling I sit down on the rock and once more try my
hand at conjuring something, figuring conjuring up something that isn’t a
weapon might be easier.
<em>Okay… something easy and small…</em>
With nothing else coming to mind I try to conjure up a toothpick.</p>
</blockquote>
<p>You try to conjure a toothpick. <strong>Imagination check. current:5, required:20,
luck:+2. failed.</strong> Nothing happens.</p>
<blockquote>
<p>It feels like the toothpick is not as far out of reach as the sword or knife,
but still well above what I’m capable of right now, and so I give up on
conjuring right now.
I look around and pick up a small twig I see lying around. Focusing my
thoughts I try to bend it with my mind and turn it into a round shape. </p>
</blockquote>
<p>You try to manipulate the twig. <strong>Imagination check. current:5, required:15,
luck:0. failed.</strong> Nothing happens. You notice a difference in difficulty despite
the failed attempt.</p>
<blockquote>
<p>I place the twig on the ground in front of me. Moving the pebble had not
worked, but I now try to move the air surrounding the twig and push it that
way. </p>
</blockquote>
<p>You try to move air. <strong>Required ability not learned.</strong> Nothing happens.</p>
<blockquote>
<p><em>Okay, let’s focus on the single thing that actually</em> <strong><em>did</em></strong> <em>work.</em>
I close my eyes and focus on feeling the life around me, both plants and
animals. After a while I try to shift my focus on specific life forms, if I’m
able to pick out anything. If I’m not able to pick out anything with my eyes
closed I’ll open my eyes and try to find something, on which I will then focus
the ability to sense its life force. </p>
</blockquote>
<p>You don’t see anything moving around you apart from the grain gently swaying in
the wind. There’s a cool breeze. Your suit is not made for harsh weather. At
this point you’re not sure what you feel, aside from something alive being
there. </p>
<blockquote>
<p>I get up from the rock and get moving again, toward the botanical library I
was originally headed for.</p>
</blockquote>
<p>You walk the road for a while. After an hour or so, you come to another fork in
the road. One path goes to the library. The sign for the other path is
completely faded from wear. Someone has hung a nice black leather messenger bag
on the signpost. The wind is cooling down. The sun will likely set soon.</p>
<blockquote>
<p>I look down the road where the faded sign’s pointing, to see if there’s a
building within view. I then try to get a sneak peek of what’s inside the
messenger bag.</p>
</blockquote>
<p>You spot ruins of what might’ve been an outpost made of big stone blocks long
ago in the past. The messenger bag contains a neatly wrapped bread, a piece of
hard cheese, a full flagon and another card. </p>
<p><strong>I thought you might venture into this direction. This will make your beginning
a bit easier. You’re welcome to keep the bag as well. ~ a friend</strong> </p>
<blockquote>
<p>I take the messenger bag and break off some of the bread, which I start eating.
<em>Library isn’t gonna be open at night, I guess. Need a place to sleep… Let’s
check out those ruins.</em>
I head over to the ruins and check those out from up close, trying to work out
if I could use the ruins as shelter for the night. </p>
</blockquote>
<p>The ruins are nothing more than some remainders of walls. Relics of once great
buildings, now just crumbled remains. There’s the occasional stone arch, but
nothing in the vicinity looks like it could provider shelter in case of rain or
wind.
As you inspect the ruins closer, you find withered writing on the wall. Symbols
are engraved on the arch. And if your mind isn’t tricking you… <strong>Imagination
check. current:5, required:2, luck:0. minor success.</strong> which it isn’t, then the
ruins are a perfect triangle when seen from the sky.</p>
<blockquote>
<p>I give the ruins a thumb-up, then turn around and head toward the library after all.
<em>Nowhere else to go, I suppose.</em>
While walking some more bread is consumed, as well as some cheese. I take some
sips from the flagon to taste what’s inside.</p>
</blockquote>
<p>The flagon is filled with nicely chilled chocolate milk. After some more time of
walking, you can spot a building far off. Even though its green walls make it a
bit harder to spot in this light, especially amidst the trees surrounding it,
the place must be massive in size.</p>
<blockquote>
<p>When I feel like I’ve had a decent fill I put everything away in the bag. The
moment I see the building I start an easy paced jog toward it, keeping the
messenger bag tightly against my body by lifting it a little with one arm. As
soon as I start to feel somewhat tired or sweaty I will resume moving toward
the library at a walking pace. </p>
</blockquote>
<p><strong>Fitness check. current:8, required:5, luck:+2. major success.</strong> You arrive at
the library speedily, without breaking any sweat. Your suit pants suffer further
wear from the earthy ground. Your run left you feeling great and your muscles
are starting to come back to life.</p>
<p><strong>Strength restriction lifted, value restored to original value: 5</strong></p>
<blockquote>
<p>As I arrive I head straight over to the door and see if the place is still
open. If it is, I enter. </p>
</blockquote>
<p>You arrive at an elaborate wrought iron fence. There is no guard at the open
portal, so you simply pass through. There is also nobody guarding the large
wooden gate, but that is closed. Light can be seen through the windows and
underneath the door. The wooden gate is locked and doesn’t move an inch when you
try pulling and pushing. </p>
<blockquote>
<p>I knock on the gate and call out: “Hello?”</p>
</blockquote>
<p>A sleepy girl in her teens sticks her blond head out of the slightly opened
gate. “Who’s there?” She has a half circle in blue tattooed around one of her
eyes. You might’ve woken her. </p>
<blockquote>
<p>“I’m terribly sorry for waking you up, but I am without a place to spend the
night.” I make an apologetic expression. “I was hoping to find one. Do you
happen to know where I could go?”</p>
</blockquote>
<p>She looks you up (to your apologetic expression) and down (to your dirty clothes
and shoes). <strong>Charisma check. circumvented.</strong> “Good sir, please wait for a
moment while I wake a librarian. I’m sure we’ll find you a place to stay. It’d
be a pleasure, in fact.”</p>
<blockquote>
<p>I nod understandingly as I smile softly. “Will do. My apologies for the
inconvenience.” </p>
</blockquote>
<p>After a few minutes (which most certainly feel like an eternity. or two) the
door opens. The girl is clad in a grey robe and so is the middle-aged woman next
to her. She, too, is wearing the same tattoo on her face. Her robe has
additional silver decorations at the end of her sleeves, perhaps to signify her
importance. A book is embroidered on the robe just where her heart would be.
“Greetings. I hear you require shelter?”</p>
<blockquote>
<p>“That I do,” I reply while giving the older woman an apologetic smile as well.
“My sincere apologies for the inconvenient time at which I show up at your
doorstep.” </p>
</blockquote>
<p>The older woman looks at your apologetic smile. <strong>Charisma check.
circumvented.</strong> “No, good, sir, it’s no matter. You’re welcome as a guest in the
Botanical Library. Please, follow me, we’ll find you a chamber. I cannot promise
that it will be the finest we have - you might have to make do with a room in
the acolytes’ wing. It will most definitely be more comfortably than sleeping
outside though.” She gives you a warm smile and leads the way. </p>
<p>The teen stays behind at the door. You take the opportunity to check out your
surroundings while you walk. It is indeed a Botanical Library. In the most
literal sense of the term. There are both bookshelves as well as planters
everywhere you look, even in the walkways connecting different buildings inside
the complex. </p>
<blockquote>
<p>My own smile brightens a bit as the woman returns it warmly. “Thank you, miss.
I am very grateful for that.”
I follow the woman to the room where I’m allowed to spend the night, checking
out the various sections of the library we pass while keeping an eye open for
things that might be of interest to me.
<em>Maybe there’s a section that can help me with this magic thing… Or to help
me figure out where I actually am… The latter’s probably more important
right now given I need to be able to get around in this world, find an actual
place to stay long term. This place is bound to have info about the local
area.</em> </p>
</blockquote>
<p>Despite trying your best, you cannot figure out how the books are ordered and
what kind of knowledge is available. </p>
<p>The room is plain. There is a bed, a desk, a chair and a commode. There’s also a
chest. No, not a treasure chest. The desk has some ink stains, so clearly has
seen use recently. Of course, there’s also a stack of books. It’s propped on the
windowsill.</p>
<blockquote>
<p>“Thank you,” I say as I put my messenger bag down next to the bed, “and once
more, my apologies for the inconvenient time at which I arrived.”
“If I need a toilet, where can I find one?” I ask before the woman leaves.
Once she’s gone I check out the books on the windowsill out of a sense of
curiosity. </p>
</blockquote>Grazer Linuxtage 20192019-07-13T20:25:00+02:002019-09-29T22:50:00+02:00Alexander Skibatag:ghostlyrics.net,2019-07-13:/grazer-linuxtage-2019.html<p><em>This post is late, but I’m going through my backlog and trying to get some
things out, so that’s that. Furthermore it is potentially
inaccurate given that I cannot find my notes form the event.</em></p>
<p>First, I need to apologize. I mistakenly assumed that one of the key …</p><p><em>This post is late, but I’m going through my backlog and trying to get some
things out, so that’s that. Furthermore it is potentially
inaccurate given that I cannot find my notes form the event.</em></p>
<p>First, I need to apologize. I mistakenly assumed that one of the key people
involved in the <a href="https://www.linuxtage.at">Grazer Linuxtage</a> who’s working for the <a href="https://www.fh-joanneum.at">FH Joanneum</a>, its
previous location, was leaving. I arrived at that conclusion by the fact that
the Linuxtage changed their location from the FH to the <a href="https://tugraz.at">Technical University
Graz</a> as well as a job posting for the same position the person is working
in. So that’s that. I was wrong. Linuxtage changed location due to space
constraints. The community had simply grown beyond the space the FH could easily
provide.</p>
<p>For me, 2019 was the first year in which I joined both days of the conference in
April: Friday for the workshops and Saturday for the talks. It was both
interesting and exhausting. In my case, exhausting enough that I didn’t want to
attend another event several days long just the weekend after - so I ended up
not attending <a href="https://www.pydays.at">PyDays</a> in Vienna despite my original plans to do so. I’m sure
my friend D was a bit disappointed I didn’t attend his talk there.</p>
<h2 id="friday">Friday</h2>
<p>On Friday I worked on various projects until about noon when I had planned to
leave with G for the Linuxtage. However, him being stuck in a never-ending
meeting meant I was going alone after all. Unfortunately that meant that
I was also late due to waiting a little longer and in consequence the allotted
time for lunch was gone.</p>
<h3 id="automate-server-configuration-with-ansible">Automate server configuration with Ansible</h3>
<p>I arrived at the TU Graz after a few minutes and went straight to the first
workshop - <a href="https://pretalx.linuxtage.at/glt19/talk/KMN9XM/">Automate server configuration with Ansible</a> by <a href="https://pretalx.linuxtage.at/glt19/speaker/SPBBWG/">Vid
Jelen</a>. This was the talk I wish I had had before I was thrown into learning the
concepts of Ansible with an existing, complex codebase provided by a partner
company of Timetac. It went over the basics really well and the presenter was
prepared, handing out USB drives with example code snippets and tasks for
the participants. I would’ve liked him to also host those in a public repository
so I would not have to plug an untrusted device into my company machine. This
resulted in me taking a lot of notes instead of working along, which was fine as
well. <em>Notes, which I might add I can no longer find.</em></p>
<p>Overall the workshop was very informative and showed me some things that I had
overlooked by jumping into the deep end. <em>I think I took some notes here about
little tricks that I wanted to incorporate into the codebase at work, but alas,
without my notes that’s going to be a bit hard.</em></p>
<p>Funnily enough my successor from ICG at TU Graz joined the same talk. I think
that’s a good sign that we made the right choice given M showed
interest in educating himself past the required tasks.</p>
<h3 id="beginner-introduction-to-python-unit-testing-write-your-first-test">Beginner Introduction to Python Unit Testing - Write your first test!</h3>
<p>One area in DevOps I’m personally interested in is automated testing. I have
written both unit tests and integration tests for several projects now and am
always curious about how to better structure my tests. This second workshop was
therefore a good choice to expand my knowledge. <a href="https://pretalx.linuxtage.at/glt19/talk/UQGAJK/">Beginner Introduction to Python
Unit Testing - Write your first test!</a> by <a href="https://pretalx.linuxtage.at/glt19/speaker/MH33YU">Peter Kofler</a> was a good
introduction to unit testing in general but I underestimated my experience
in the field and was not challenged, blazing through most of the tasks due
to them being structured fairly simple. <em>I should’ve listened to G who pointed
out that this might be the case.</em></p>
<p>I have to further point out that in contrast to the presenter, I personally
prefer <a href="https://pytest.org">pytest</a> as a testing framework and test runner when working with
Python due to how they make writing tests extremely easy using <code>assert</code>
statements.</p>
<h2 id="saturday">Saturday</h2>
<p>Saturday focuses on talks and lectures instead of workshops and typically has a
lot more on the schedule in many different tracks. The intended audience of
these reaches from linux hobbyist to system administrator and back. </p>
<p>I happened to meet a few acquaintances as I do every year at Linuxtage, simply
because there are some local Linux veterans that will not miss these meetings. I
mostly know these through my previous work at the TU Graz. I typically end up
chatting with them for quite some time and end up not attending at least one
talk.</p>
<h3 id="wsl-powershell-chocolatey-ein-hauch-von-linux">WSL, PowerShell & Chocolatey: Ein Hauch von Linux</h3>
<p>I started the day with <a href="https://pretalx.linuxtage.at/glt19/talk/UTWRXY/">WSL, PowerShell & Chocolatey: Ein Hauch von Linux</a>
by <a href="https://pretalx.linuxtage.at/glt19/speaker/8RPEBU">Manfred Wallner</a>, whom I know from university. I occasionally have to work
with some Windows machines at work, so <a href="https://chocolatey.org">chocolatey</a> to achieve some level of
sanity while installing software is as essential as the <a href="https://brew.sh">homebrew</a> project on
macOS. I am still not convinced that I would want to use PowerShell over Python
for writing scripts. Manfred’s argument was for PowerShell over Bash, but I
already avoid writing anything longer than five lines in Bash if possible.</p>
<p>Windows Subsystem for Linux will be even more essential in the future for my
work, <a href="https://engineering.docker.com/2019/06/docker-hearts-wsl-2/">when Docker Desktop switches from Hyper-V to WSL2 for their Windows
support</a>.</p>
<h3 id="best-practices-in-der-it-administration-version-2019">Best Practices in der IT-Administration, Version 2019</h3>
<p>Sometimes, you have these rare moments in which you get confirmation that many
of your ideas and principles are correct, state of the art and best practise.
For me, that was <a href="https://pretalx.linuxtage.at/glt19/talk/YNSEM3/">Best Practices in der IT-Administration, Version 2019</a>
by <a href="https://pretalx.linuxtage.at/glt19/speaker/AXRDSG">Michael Prokop</a>. He went over a checklist of things you should be asking
your IT department to see if your business is prepared for the worst. Backups,
Configuration Management and keeping detailed logs (not log files, but rather
per customer journals) were only some points of his list for how modern IT
administration should work. I admire the consideration and preparation
as well as years of experience that went into compiling these principles.</p>
<h3 id="container-alles-sicher-oder-was">Container - Alles sicher oder was?</h3>
<p><a href="https://pretalx.linuxtage.at/glt19/talk/KTPHLH/">Container - Alles sicher oder was?</a> by <a href="https://pretalx.linuxtage.at/glt19/speaker/FQDJ8L">Michael Maurer</a> was supposed to give you a more
detailed insight into how containers and their security can affect your
deployment. In reality, the talk wasn’t terribly helpful - it mainly pointed out
the usage of SAST and DAST tools to run against containers. When pressed, the
presenter said that their workplace uses no such tools which undermined
their entire point.</p>
<p>Now, while I don’t like pointing fingers, after 2018, this was the second year
in which I attended presentations given by employees of Netconomy, a local
shop from Graz. Of the two talks and one workshop I’ve been to, both talks were…
not good. Frankly, having had a job interview at their place I don’t understand
why. I’ve talked to these guys and they really seem to know what they are doing.
Their presentations on Linuxtage 2018 and 2019 were completely superficial and
provided little more help than “you might want to do X” instead of giving
insight how security can be affected by essential things like monitoring,
alerting, automated scanning and much more. Either they have strong restrictions
on what they are allowed to show off at events or they need to prepare their
topics for another audience - namely tech workers already familiar with the
ideas they are presenting.</p>
<p>To end on a good note, the workshop done by their WebOps person (see the
corresponding section on Friday) was awesome and I’d happily go to another
presentation given by him!</p>
<h3 id="terraform-ein-einblick-der-moglichkeiten-von-infrastructure-as-a-code">Terraform - Ein Einblick der Möglichkeiten von Infrastructure-as-a-Code</h3>
<p>In <a href="https://pretalx.linuxtage.at/glt19/talk/WFXHK8/">Terraform - Ein Einblick der Möglichkeiten von
Infrastructure-as-a-Code</a> by <a href="https://pretalx.linuxtage.at/glt19/speaker/JKNF3A">Dr. Sebastian Oehlke</a> tried to
show the participants how some experiments using Terraform as infrastructure as
code tool could look like. He acknowledged that his examples weren’t taken from
reality and walked us through the setups of several example networks.
Personally, I don’t see the appeal of the tool given that Ansible modules for
the same tasks exist and Ansible is generally the tool which can solve more
problems due to its versatility. The presenter argued for better visibility of
the changes and initial state than with Ansible.</p>
<h3 id="next-level-ansible">Next Level Ansible</h3>
<p><a href="https://pretalx.linuxtage.at/glt19/talk/HRLWJ8">Next Level Ansible</a> by <a href="https://pretalx.linuxtage.at/glt19/speaker/87K9EH">Manuel Bonk</a> was the logical followup to the
Ansible workshop on the first day and I remember taking quite some notes
during this talk. Specifically I wanted to look into Ansible’s support of
<a href="https://junit.org">Junit</a> as well as the <code>serial</code> option for doing slower host-by-host
deployments. Giving this talk a good structure was hard due to its nature as
collection of various bits and general hints, and it showed. The content itself
was well prepared - it was mainly the thread holding the topics together that
wasn’t always there.</p>
<p>The talk also went over <code>ansible-vault</code> and Jinja2 templates, both of which are
in use at <a href="https://www.timetac.com">Timetac</a>.</p>Scenes of music: Fable 2 music box2019-04-13T23:43:00+02:002019-04-13T23:43:00+02:00Alexander Skibatag:ghostlyrics.net,2019-04-13:/scenes-of-music-fable-2-music-box.html<p>Song: <a href="https://www.youtube.com/watch?v=UfNgPWzbM5c&">Fable 2 Music Box</a> (this links loops, the theme itself is very short)</p>
<p>Now, I picture you. Going into the attic and looking for a huge, immensely dusty suitcase, or rather a treasure chest with several locks on them. It also has a sign on it, neatly made but …</p><p>Song: <a href="https://www.youtube.com/watch?v=UfNgPWzbM5c&">Fable 2 Music Box</a> (this links loops, the theme itself is very short)</p>
<p>Now, I picture you. Going into the attic and looking for a huge, immensely dusty suitcase, or rather a treasure chest with several locks on them. It also has a sign on it, neatly made but with a text akin to “If you’re not Sara, don’t even bother. The locks are magically enhanced”. Then you gently wipe away a layer of dust and pat the chest. So many memories in there. You’re slightly unsure if you should even open it.</p>
<p>First you open the outermost lock. That one is fairly simple and somewhat high-tech. It’s unlocked by your fingerprint.<br>
The second lock is a bit more involved. You take the standard, comparatively boring key from your every day keychain and unlock it.<br>
The third lock is a striking crimson and so magical, it has comedic value. You prick yourself in the finger with a needle in order to drop a single droplet of blood on it.<br>
The fourth lock is unlocked with a teeny-tiny key that you keep on your bracelet. Even if the keychain is lost, the bracelet never leaves your arm.<br>
The last lock is special. It’s not actually visible, but the chest won’t open if you don’t unlock it. You focus, smile and think, yes, you are sure you want to access the memories.</p>
<p>The chest opens. More dust is spreading and you hear a slight squeak from the gears that have become just a tad rusty. And then, the memories flood back. A slight golden shine comes out of the box and the impossibly romantic sound of a musical box is playing.</p>
<hr>
<p><em>I wrote this for a friend on a whim while chatting. I picked the music to the scene this time instead of the other way around since she inquired what music the music box would be playing.</em></p>I enjoy Cooking with Friends. Truly.2019-04-13T23:16:00+02:002019-04-13T23:16:00+02:00Alexander Skibatag:ghostlyrics.net,2019-04-13:/i-enjoy-cooking-with-friends-truly.html<p>Yesterday has seen the 10th episode of <a href="http://ghostlyrics.net/pages/cooking-with-friends.html#cooking-with-friends">Cooking with Friends</a>. It was an event I’m proud to have held. With me were L, a first timer here at Cooking with Friends, and W, a seasoned veteran of culinary delights. Both assured me they had a great evening and the …</p><p>Yesterday has seen the 10th episode of <a href="http://ghostlyrics.net/pages/cooking-with-friends.html#cooking-with-friends">Cooking with Friends</a>. It was an event I’m proud to have held. With me were L, a first timer here at Cooking with Friends, and W, a seasoned veteran of culinary delights. Both assured me they had a great evening and the food which we prepared together was awesome. For this occasion I made something special: <a href="https://en.wikipedia.org/wiki/Smyrna_meatballs">Soutzoukakia</a>, a meatball dish from Greece.</p>
<p>I have imported this recipe from a vacation on Crete, Greece, when I had the chance to take cooking classes in the tiny hotel I was staying in. The friendly chef entertained all my question and showed me several recipes, the details of some are lost to time and some others in the combined mess of my hand-writing and confused note-taking that occurs when learning several dishes at the same time and working with limited amount of paper.</p>
<p>I’ll be frank with you: I had doubts about this episode of Cooking with Friends. I seem to have picked a bad date for the invitation. After 3 days of waiting I only had a handful of replies to the invite and one confirmation. In contrast to that, all slots for the event in November were gone within less than 24 hours. I even debated if cancelling the event to avoid a bad experience for my newcomer would be preferable.</p>
<p>In the end I got a second positive reply and we held the event. Great food was made, no accidents happened, I’ve made some notes for refinement of the dishes (<em>technically a lie, I’ll make some notes after publishing this, probably</em>) and we’ve sat together until the early night, playing <a href="https://en.wikipedia.org/wiki/Carcassonne_(board_game)">Carcassonne</a>, a board game. I admit not liking many board games, but this one, which is about clever thinking and construction instead of racing or battling others, fits my taste.</p>
<p>In the end I’m just rambling but I wanted to note how much these little social events tend to improve my mood. They do wonders for my mental health. This week has been harsh before, I had at least two days on which I felt awful and noticed some setbacks at work more than I should have but most of that has been blown away by the happiness I get from successfully holding such an evening. I needed to share that this is something that makes me happy, despite the work and effort that goes into it. Or maybe because of it. I couldn’t say.</p>
<p>Should you be on the guest list and be reading this: <em>I’m extraordinarily glad to host you. Thank you.</em></p>Scenes of music: Broken Crown2019-02-20T01:20:00+01:002019-06-20T14:08:00+02:00Alexander Skibatag:ghostlyrics.net,2019-02-20:/scenes-of-music-broken-crown.html<p>Song: <a href="https://www.youtube.com/watch?v=1LBx2YjDtYg">Broken Crown</a></p>
<p>They sneak up on her when she leaves the tavern. Several of them, all brandishing swords, sabers, daggers or spears. She smiles softly. There’s only ten of them. And she’d actually been hoping for a real challenge. Ridiculous. They approach. Slowly at first but more …</p><p>Song: <a href="https://www.youtube.com/watch?v=1LBx2YjDtYg">Broken Crown</a></p>
<p>They sneak up on her when she leaves the tavern. Several of them, all brandishing swords, sabers, daggers or spears. She smiles softly. There’s only ten of them. And she’d actually been hoping for a real challenge. Ridiculous. They approach. Slowly at first but more confident when she doesn’t run or scream. She adjusts her wide hat. The feather on it is slightly waving in the evening breeze.</p>
<p>She takes the rapier from her belt and raises it. The bandits are hesitant. They have not expected resistance. Her flamboyant appearance and the gilded rapier have thrown them off. They expected a traveling noble on a stupid quest for adventure. She takes two steps forward to approach the first bandit and her smile widens.</p>
<p>He raises his sword to stop her. Too late, much too late. In the time it took him to decide his next action her rapier has sliced through his jugular after she closed the distance with a leap forward nobody expected. Blood rushes out of the wound while he collapses. Some of it splatters onto her elaborate leather armor but the stains are almost invisible on its red color. The other bandits are furious. They attack ferociously. So the dance begins.</p>
<p>With flowing, almost dance-like movements she waves between her attackers, elegantly taking out one after the other without ever being touched by them. A slit throat here, a stabbed heart there, a hand clean cut off - the bandits are going down fast. To finish the last three she jumps out of range and shocks the first with a sudden burst of electricity, then sends sharp, cutting winds towards the second one, sending him flying. The last one is burned so quickly by an intense heat without flame that only ashes remain. She is skilled and her swagger was not a sign of arrogance - it was pure confidence in her well-honed skills as a duelist.</p>
<p>They picked the wrong woman to rob.</p>
<hr>
<p><em>The song had me immediately thinking of a Western theme but I wanted something fancier than cowboys while still following the theme of confrontation. I liked the swagger of the Red Mage class (RDM) from Final Fantasy XIV (FF) and thought to use this as a template for the character. After <a href="https://www.youtube.com/watch?v=SUMrVNlD48I">some research</a> and questions to people I play with, I adjusted the combat scene to its current version. In contrast to FF it is more based on melee and less on magic; this is how I envisioned the scene in my head - it does not have to be a close representation of how the class plays.</em></p>
<p><em>Thanks to Zurin Arctus and Aruktai for their input on RDM style and gameplay.</em></p>
<p><em>Requested by Deithwen Addan.</em></p>Scenes of music: Greensleeves2019-02-20T00:02:00+01:002019-02-20T00:02:00+01:00Alexander Skibatag:ghostlyrics.net,2019-02-20:/scenes-of-music-greensleeves.html<p>Song: <a href="https://www.youtube.com/watch?v=vNtVN_B7U78">Greensleeves</a></p>
<p>The old adventurer tells the tale of his life to his friends and family one last time. He tells of his youth, of his prime, of his exploits and how his life has treated him until now, at high age. He has invited everyone to one last feast …</p><p>Song: <a href="https://www.youtube.com/watch?v=vNtVN_B7U78">Greensleeves</a></p>
<p>The old adventurer tells the tale of his life to his friends and family one last time. He tells of his youth, of his prime, of his exploits and how his life has treated him until now, at high age. He has invited everyone to one last feast to celebrate because he feels he does not have much time left. They hang to his every word, for while he was only ever mediocre in combat, there was no finer storyteller in his time.</p>
<p>He speaks of years long past, of serving kings and queens. He tells of journeys across foreign lands, of conquests. He explains tense situations he barely survived and has his former companions speak about their common adventures. His life has been a long life and certainly a good life. A life whose stories are worth remembering; that is what he hopes to achieve with this last coming together - that his stories will be remembered even if he himself fades away.</p>
<p>He is a romantic if I’ve ever seen one.<br>
I am captivated by his words and vow to carry his stories onward.</p>
<hr>
<p><em>It took me only half the song to find a theme for it. The melody, despite being somewhat different from what I remember - I read this song is frequently used with a part for personal interpretation - and its varying tempo as well as tone sets up a story of multiple parts.</em></p>
<p><em>Requested by Kishuri Yllis.</em></p>Scenes of music: Riverside2019-02-17T02:59:00+01:002019-02-17T02:59:00+01:00Alexander Skibatag:ghostlyrics.net,2019-02-17:/scenes-of-music-riverside.html<p>Song: <a href="https://www.youtube.com/watch?v=vjncyiuwwXQ">Riverside</a> - (<a href="https://open.spotify.com/track/1UmFRZU3taMGZApPhK32mc?si=gcxi04CoSoC3jCskDwFZFw&nd=1">Originally a spotify link</a>)</p>
<p>“The young nymphs are dancing near the river”, that’s what the uncle used to tell the kids whenever he told the story of that particular tale of his. “You’re not to go near them if you ever see them”, he emphasized. </p>
<p>Why …</p><p>Song: <a href="https://www.youtube.com/watch?v=vjncyiuwwXQ">Riverside</a> - (<a href="https://open.spotify.com/track/1UmFRZU3taMGZApPhK32mc?si=gcxi04CoSoC3jCskDwFZFw&nd=1">Originally a spotify link</a>)</p>
<p>“The young nymphs are dancing near the river”, that’s what the uncle used to tell the kids whenever he told the story of that particular tale of his. “You’re not to go near them if you ever see them”, he emphasized. </p>
<p>Why would he say that when they are so pretty?<br>
Why would he say that when their voices are so sweet?<br>
Why would he say that when their dance is so enticing?<br>
Why would you doubt their friendly intentions when they are inviting you to dance with them?</p>
<p>“The humans in their towns are too serious”, that’s what the old fairy told the nymph younglings. “You’re not ever to show yourselves to them”, she emphasized.</p>
<p>Why would we hide though?<br>
Why would we stop our dance though?<br>
Why would we not sing from the bottom of our hearts?<br>
Why would we not invite them to our revelries?</p>
<p>That is the story told among the people who carry both nymph and human blood. You thought it was something more epic? Something from a legend? Nay, I tell you. It was a trait common to both nymph and human by nature: curiosity.</p>
<hr>
<p><em>Riverside is a quite focussed on its lyrics by itself; there’s definitely a story in the text. I did not want to stick too closely to what I heard, but only use it as a guiding line for my writing. The calm but not too slow piano in the background brought up a certain mood for exploration and a slight positive mood which is what I focussed on.</em></p>
<p><em>Requested by The knight of the routing table.</em></p>Scenes of music: No Stars2019-02-17T02:33:00+01:002019-02-20T00:02:00+01:00Alexander Skibatag:ghostlyrics.net,2019-02-17:/scenes-of-music-no-stars.html<p>Song: <a href="https://www.youtube.com/watch?v=NJSCk0roBMk">No Stars</a></p>
<p>The singer looks at you. Directly at you. She’s not looking at the audience per se. You know she’s looking at you. You also know she’s weaving in the little Spanish intermezzos for you. For you are her love and she has learned to …</p><p>Song: <a href="https://www.youtube.com/watch?v=NJSCk0roBMk">No Stars</a></p>
<p>The singer looks at you. Directly at you. She’s not looking at the audience per se. You know she’s looking at you. You also know she’s weaving in the little Spanish intermezzos for you. For you are her love and she has learned to love your heritage, your language, your country in which you live together whenever she can rest from being on the road. Musicians are always on tour, they say. It’s not quite wrong, that much you’ve understood by now.</p>
<p>But you know it’s worth it. Nothing but standing on the stage and performing makes your sweetheart so happy. It does not matter whether she sings a sad song, whether she sings a desperate song, whether she sings a happy song. The look in her eyes, the wrinkles next to her eyes, the expression on her face are priceless. The time you spent together and the things you experience together gives both of you inspiration for you are as much an artist as she is.</p>
<p>You live together, you dream together.<br>
In the starless nights.</p>
<hr>
<p><em>This was one of the more difficult songs for me. It has this really slow movement which I found hard to transform into an elaborate story. Because of this I tried a short scene, something that is very focussed on the moment the music would be heard, like at a bar concert. I’m not sure I’m doing the singer justice with this. I tried to go for that dreamy moment when a lover is at her concert and still has this long-lasting affection. They still enjoy hearing their loved one’s voice after many years together.</em></p>
<p><em>Requested by Seren Seraph.</em></p>Scenes of music: Your Bones2019-02-17T01:47:00+01:002019-02-17T01:47:00+01:00Alexander Skibatag:ghostlyrics.net,2019-02-17:/scenes-of-music-your-bones.html<p>Song: <a href="https://www.youtube.com/watch?v=wXUloVYbchg">Your Bones</a></p>
<p>In all my travels across the realm I have never met people with such a strange custom regarding funerals as the Viirani. Their funerals are less funerals in the sense we know them from other people and more akin to dissections. They have a way to repurpose …</p><p>Song: <a href="https://www.youtube.com/watch?v=wXUloVYbchg">Your Bones</a></p>
<p>In all my travels across the realm I have never met people with such a strange custom regarding funerals as the Viirani. Their funerals are less funerals in the sense we know them from other people and more akin to dissections. They have a way to repurpose almost all parts of the bodies of the deceased. The bones of their ancestors form the columns of their culture, often quite literally. They believe that everything you do must contribute to the community. I find it fascinating to see that such a culture could develop from individuals not connected by a hive-mind like you’d find in ants, for example.</p>
<p>I look at the bloody and gruesome business. Everyone here is calm, even the young ones are used to seeing this. Theirs is a culture of warriors and hunters; bones will be parts of their weapons, their armor. The strength of their ancestors is with them, always. Other necessities and sometimes decorations are made from the less solid remains. Put your mind at ease, friend, they are not a cannibalistic culture. I know it is a thought that comes up when you imagine these rites I speak of.</p>
<p>The simple fact is that all of their society is organized heavily towards reuse of things. There is little they despite as much as wastefulness. Visiting them for even a few days is fraught with danger for me even though I try my best to leave my habits of our civilization in the cities far away. You don’t realize how much you take for granted until you’ve seen people living the other extreme.</p>
<hr>
<p><em>When writing this piece I didn’t listen too closely to the lyrics at first. I let the melody guide me, then dove into the lyrics later. I want to interpret as a moment of loss, but not a moment of sadness. In addition, a story I’ve seen recently inspired me in regard of the reuse/recycle mentality. There is an arc in <a href="https://www.crunchyroll.com/en-gb/that-time-i-got-reincarnated-as-a-slime">That Time I Got Reincarnated As A Slime</a> spanning several episodes about a people eating their dead and their fallen foes to become stronger that gave me an idea to try something a little less offensive. I wanted the people to be admired, not despised.</em></p>
<p><em>Requested by Stephen Voss.</em></p>Scenes of music: Siúil a Rúin2019-01-07T02:46:00+01:002019-01-07T02:46:00+01:00Alexander Skibatag:ghostlyrics.net,2019-01-07:/scenes-of-music-siuil-a-ruin.html<p>Song: <a href="https://www.youtube.com/watch?v=ogdxae_2uj4">Siúil a Rúin</a></p>
<p>I see the woman every day when I pass by on my way home from work. She’s always sitting on the same boulder, next to an ancient oak. Sometimes she’s humming and on some rare days she’s singing a sad song in her …</p><p>Song: <a href="https://www.youtube.com/watch?v=ogdxae_2uj4">Siúil a Rúin</a></p>
<p>I see the woman every day when I pass by on my way home from work. She’s always sitting on the same boulder, next to an ancient oak. Sometimes she’s humming and on some rare days she’s singing a sad song in her clear, beautiful voice. I usually stop to listen. She doesn’t seem to mind. Only very rarely does she look up or even notices someone more than in passing.</p>
<p>The song is so sad that it brings me to tears despite all the things I’ve seen in my life. Her eyes and her soul are far away. I have seen the woman every single day without fail since I moved to this town fifteen years ago. She has aged but her resolve and her devotion has never wavered. I’m never sure whether to pity her or whether to admire her for the way she lives her live.</p>
<hr>
<p><em>This one was the most difficult song I tried yet because I was not sure for a long while how to tackle this. Then I gave it some more plays and figured it would make most sense to stick close to the theme and the sad melody. I love the song and tried hard to write something that would live up to the emotion welling up when I listen to it.</em></p>
<p><em>Requested by Regin Theradiant.</em></p>Scenes of music: Gold and Slaves2018-12-31T22:23:00+01:002018-12-31T22:23:00+01:00Alexander Skibatag:ghostlyrics.net,2018-12-31:/scenes-of-music-gold-and-slaves.html<p>Song: <a href="https://secretarchivesofthevatican.bandcamp.com/track/gold-and-slaves">Gold and Slaves</a></p>
<p>“Quick”, she tells us. We keep to our guide, faces deep in the hoods of our disguises. The sun burns as we hurry along. She leads us across the markets. “You mustn’t let others see how much you detest the slave trade.” She had told …</p><p>Song: <a href="https://secretarchivesofthevatican.bandcamp.com/track/gold-and-slaves">Gold and Slaves</a></p>
<p>“Quick”, she tells us. We keep to our guide, faces deep in the hoods of our disguises. The sun burns as we hurry along. She leads us across the markets. “You mustn’t let others see how much you detest the slave trade.” She had told us that many times already. We still had trouble not acting, not caring. Slavery goes against so many of Gibraltar’s teachings. But we had a specific goal here. We were on a mission that took priority over our resentment. I take a short look at the people. Almost all of them have resigned to their fate. They all look like they haven’t gotten a single meal for days. I tend to feel little for others but this misery is too much. Ashamed I look away and continue following our local guide as the rest of my team does. I am certain they each have their own thoughts about what they see here. Currently we can’t risk to cause a diplomatic incident though. We are to retrieve a certain object in the possession of a local businessman. Gibraltar had made it clear that it was of the utmost importance that the university was not to be implicated in this. He also stressed that a legal, nonviolent way of retrieval was highly preferred. </p>
<p>Truth be told I shouldn’t even be here. I’m here because I complained about boredom and the university system being useless. So the Administrator decided to teach me a lesson by including me in a mission even though my education was far from finished. How do you even get the idea to send a first year student on a foreign trip, no matter how great the rest of the team?</p>
<p>Two of them made pretty clear how they felt about an absolute beginner joining them. Not so the team lead - but on the other hand I knew Kakysha already. She’s professional and wouldn’t let her feelings influence the potential success of a mission. I was worried and distraught by the thought of going on a mission. I would’ve never even chosen this life, but sometimes you just aren’t given a choice. Kakysha was one of the most commendable fighters at university though. Most of her performance evaluations were amazing. Those things gave me some comfort and made it just a little easier to do this - to go hunting for a relic in a foreign nation.</p>
<hr>
<p><em>This one was gathering dust in my drafts folder for a long, long time because I never thought this would fit what I usually write. I am publishing it now since it was a major inspiration for some of the scenes I talk about; the combination of atmospheric music and intense narration going hand in hand.</em></p>Scenes of music: You should see me in a crown2018-12-31T22:12:00+01:002019-02-20T00:03:00+01:00Alexander Skibatag:ghostlyrics.net,2018-12-31:/scenes-of-music-you-should-see-me-in-a-crown.html<p>Song: <a href="https://www.youtube.com/watch?v=za8Ki4CCXgg">You should see me in a crown</a></p>
<p>You wonder why it is that they always hurt you. They also make you hurt others. You shut out the pain and cut them down. Puppets. You pretend the other kids are the same as the training puppets earlier. The screams are …</p><p>Song: <a href="https://www.youtube.com/watch?v=za8Ki4CCXgg">You should see me in a crown</a></p>
<p>You wonder why it is that they always hurt you. They also make you hurt others. You shut out the pain and cut them down. Puppets. You pretend the other kids are the same as the training puppets earlier. The screams are muted. You only hear the sounds of your blades and their blades. Everyone is dying.</p>
<p>This is what the training is every day, every month, every year since you were taken. You don’t know how long you have been in this place. The only thing that matters is survival. Survival and the crown. The others have made a crown out of scrap metal and glass shards, because that is all you have when you’re not made to fight others. The one who owns the crown is in charge. You only want to be left in peace. When you have the crown, the others will leave you alone. Or be left in pieces.</p>
<p>The crown is symbolic - it cannot be worn without pain, it cannot be gained without pain, it cannot be held without pain. Nobody wants to be a ruler here.</p>
<hr>
<p><em>When writing this one, the greatest hints were the recurring metallic sounds that I immediately associated with blades. It was the young sounding voice and the crown in the lyrics that made me think of a horrific death camp for kids.</em></p>
<p><em>Requested by Hax Silverstone.</em></p>Scenes of music: Soul Surrender2018-12-31T21:41:00+01:002018-12-31T21:41:00+01:00Alexander Skibatag:ghostlyrics.net,2018-12-31:/scenes-of-music-soul-surrender.html<p>Song: <a href="https://www.youtube.com/watch?v=aYVFNPv6iAI">Soul Surrender</a></p>
<p>You hear the righteous choirs singing in your head. They sing of glory and destruction. They sing of conquest. You rush ahead, up the stairs, along the castle walls. The guards try to stop you but you dodge some. You attack some others to throw them off …</p><p>Song: <a href="https://www.youtube.com/watch?v=aYVFNPv6iAI">Soul Surrender</a></p>
<p>You hear the righteous choirs singing in your head. They sing of glory and destruction. They sing of conquest. You rush ahead, up the stairs, along the castle walls. The guards try to stop you but you dodge some. You attack some others to throw them off balance. You run. You practically fly because you have your sights set on your goal.</p>
<p>This time, this glorious night you will succeed and throw the empress from her throne. You’ll get the justice you wish for, the justice your family deserved ever since it has been driven from these lands. You’ll stop her reign of terror, that’s what you keep repeating to yourself. No locked door can stop you now. The magic in your veins allows you to break them with a single touch of your hand.</p>
<p>Your allies have done their deeds as well. They poisoned the high guard and its numbers are reduced to a handful of soldiers. The rest has come down from food poisoning. Knocked out but not dead. The only death tonight will be her, her life yours to take. That has been your intent ever since she deemed all of you unworthy of continued existence. You feel the steel of your blade in your hand. It sings for blood. Blood of the oppressor.</p>
<p>Spirits high, but blade held higher, you barge into her quarters. No one dares fire an arrow here. She seems to have expected you and draws her sword, a wicked grin on her face.</p>
<hr>
<p><em>This was an easier request. I was already familiar with the song from many hours playing Final Fantasy XIV and its grand theme invites an equally grand scene, like a battlefield, or something with a lot of fast action and drama. I believe that political impact is important for this piece, that’s why I had an assassination in mind. Or rather, a noisy coup then a sneaky assassination.</em></p>
<p><em>Requested by Anja Kreutz.</em></p>Anno 2205: Stories of Possible Futures2018-12-31T19:05:00+01:002018-12-31T19:05:00+01:00Alexander Skibatag:ghostlyrics.net,2018-12-31:/anno-2205-stories-of-possible-futures.html<p>I wanted to play <a href="https://store.steampowered.com/app/375910/Anno_2205/">Anno 2205</a> for quite a while because of its setting in the far future, being able to colonize the moon and all that, but I was never entirely sure it is the right kind of game for me. I usually stick to more story based games …</p><p>I wanted to play <a href="https://store.steampowered.com/app/375910/Anno_2205/">Anno 2205</a> for quite a while because of its setting in the far future, being able to colonize the moon and all that, but I was never entirely sure it is the right kind of game for me. I usually stick to more story based games. However, after giving <a href="https://store.steampowered.com/app/464920/Surviving_Mars/">Surviving Mars</a> a try and finding it overall very enjoyable, my opinion against buying the title wasn’t as strong as before. I consulted a friend who ensured me that if I liked <em>Surviving Mars</em>, there’s a very good chance I’d like <em>Anno 2205</em> as well. Some time later, I snagged the game as well as all its expansions for €14.</p>
<p>Overall, I immensely enjoy seeing different visions of what our far future could look like, be it <a href="https://en.wikipedia.org/wiki/The_Expanse_(TV_series)">The Expanse</a>, <em>Anno 2205</em> or <em>Surviving Mars</em>, maybe even <a href="https://store.steampowered.com/app/238010/Deus_Ex_Human_Revolution__Directors_Cut/">Deus Ex: Human Revolution</a>. I truly hope we - as the human race - will make it that far without annihilating ourselves over petty conflicts or choking in our self-made garbage problem. Now, what is it that makes these scenarios more interesting? They have visions of what will be better, but the makers of these works of fiction acknowledge that the future will also have its own problems - something that comes up too rarely in “clean” fiction like <a href="http://www.startrek.com">Star Trek</a>.</p>
<ul>
<li><em>The Expanse</em> has a myriad problems, from Earth’s overpopulation, to the political climate of Earth versus Mars, to the general suffering of people in what’s called the Belt.</li>
<li><em>Surviving Mars</em> has at least one scenario in which a Third World War is happening on Earth. Leaving Earth for Mars is pictured as dangerous but also very promising, while conflicts on Earth don’t cease. While your Marsian colony is backed by an entity on Earth, you can make it without overly relying on them.</li>
<li><em>Anno 2205</em> has its own share of political problems with the first wave of colonists on the moon being very unhappy and taking military action against your cooperation back on Earth. The game also acknowledges climate factors, like arctic nights and smog. The further you progress the more you might be horrified by how much of what you ship around the globe are actually not necessary products but consumer goods. It’s a crass reminder of how far consumerism has progressed. I wonder if it might have made sense to include some waste management mechanic to convey a more ecologic perspective for the future.</li>
</ul>
<p>With that prelude out of the way, let me tell you about a corporation called <em>Abstergo Industries</em> (<em>I usually choose that Assassin’s Creed-inspired name for companies in video games</em>).<br>
<em>Abstergo Industries</em> started out relatively small in a region called Cape Ambar in Earth’s temperate region. It was there that they collaborated with Ibarra-FoxCom when trying to lift an old ark out of the depths of the ocean - a project that is still ongoing.</p>
<p>In trying to face the needs of both its customers and its employees, <em>Abstergo</em> expanded to Kinngait Protectorate, a region in the arctic. The company showed both its resourcefulness in settling the uninviting region as well as its good will towards the Arctic Custodians by helping with repairs and research concerning one of Earth’s Climate Stabilizers.</p>
<p>Dedicated <em>Abstergo</em> security professionals stopped several attempts by terrorists trying to disrupt <em>Abstergo’s</em> supply lines and operations. Its growth progressing smoothly, the company was proud to launch its own space station hosting a wealth of scientific experiments. Furthermore, their expansion onto Luna was a great success, with the first base being situated in Iwamoto Crater. Here, a collaboration with Cassian Industries led to a very profitable operation in mining meteroids. Only a while later, <em>Abstergo</em> would settle in a second lunar region, Novikov Crater, to help with refugee relief efforts.</p>
<p>Using a massive fleet of cargo ships, shuttles and space elevators, <em>Abstergo</em> grew from a small company into a massive MegaCorp and expanded into one more region - Vanha Plains in the Tundra. As the company developed, so did its awareness of logistics and environmental needs, leading to the implementation of several optimizations in its production processes building on scientific breakthroughs from its orbital science team. Fewer transport routes would be needed and more goods could be sourced locally. Additionally, in order to provide a clean environment for its inhabitants, <em>Abstergo</em> started separating sectors into living and production areas, leading to happier and healthier citizens.</p>
<p>With <em>Abstergo</em> drawing a healthy amount of investors, financial options seemed to skyrocket, leading to the company aquiring settlement rights for Walbruck Basin, Greentide Archipelago and Wildwater Bay. Development of these areas is still in progress and reports about local activity are scarce. Rumors have also surfaced about a potential health hazard from Vanha Plains, but the company keeps a tight lid on these issues.</p>
<p><em>Abstergo Industries</em> has announced it will enter the stock market later this year.</p>Unused concert ticket2018-12-09T16:55:00+01:002018-12-31T19:20:00+01:00Alexander Skibatag:ghostlyrics.net,2018-12-09:/unused-concert-ticket.html<p>My mind latches to something that is still on my desk. I only recently took it out of a bag I use for work. It’s a ticket to a show of <a href="https://www.apocalyptica.com/en/">Apocalyptica</a> in Graz, from 2017.</p>
<p>I remember talking with A about the show during a vacation in Greece …</p><p>My mind latches to something that is still on my desk. I only recently took it out of a bag I use for work. It’s a ticket to a show of <a href="https://www.apocalyptica.com/en/">Apocalyptica</a> in Graz, from 2017.</p>
<p>I remember talking with A about the show during a vacation in Greece. I wasn’t sure I had the time and nerve to go see it. She assured me it would be nice change of pace and might improve my mood. After all, I tremendously liked Apocalyptica and “20 Years of Plays Metallica by four Cellos”, sounded awesome. I still remember the hoops we had to jump through to get the ticket online and pay with card. It felt more complicated than it should, really. The ticket websites usually do. The seat selection was especially awful, as is tradition for this kind of website.</p>
<p>I had enjoyed the Apocalyptica concert in Vienna back in 2010 and decided to splurge the €60 for one of the best seats, a “Logenplatz”. I was looking forward to the concert in that moment. The show was going to be on the <a href="https://www.spielstaetten.at/kasematten.287.htm">Kasemattenbühne</a>, which is the stage at the top of the Schlossberg. Awesome.</p>
<p>Flash forward a few days. We had returned to Austria. I wasn’t well. I had trouble sleeping and on the day of the concert I was feeling particularly unwell which prompted me to take a short nap. Which became… not so short. I woke up in the evening, a bit dizzy. A returned from where ever she had been and asked me why I wasn’t at the concert. I had completely forgotten the show. I could’ve started and tried to catch a last few songs but I couldn’t be bothered. I had totally screwed myself with this ticket and the nap.</p>
<p>I should’ve set an alarm or something. I mean, you would, right? But sometimes your physical condition does strange things to your awareness of reality. Lack of sleep is bad. That’s not all though. I think I may have been in the early stages of depression back then.</p>
<p>I crumble the envelope and throw the ticket into the paper shredder. Maybe I have better luck with 30 years of cellos.</p>
<hr>
<p><em>This post was written in back in 2017. It lingered unpublished in my drafts folder. Only now - in 2018 - I reworked it and decided I was confident enough to publish more personal stories.</em></p>Scenes of music: Revenge of the Wolves2018-12-09T16:08:00+01:002018-12-09T16:08:00+01:00Alexander Skibatag:ghostlyrics.net,2018-12-09:/scenes-of-music-revenge-of-the-wolves.html<p>Song: <a href="https://www.youtube.com/watch?v=VU1LkCa1_bk">Revenge of the Wolves</a></p>
<p>The moment you open the door of your hut, you have a bad feeling. Your wife is not there, neither are your children. You had asked them to stay inside because of the impending danger of the hordes. You feel a chill run down your …</p><p>Song: <a href="https://www.youtube.com/watch?v=VU1LkCa1_bk">Revenge of the Wolves</a></p>
<p>The moment you open the door of your hut, you have a bad feeling. Your wife is not there, neither are your children. You had asked them to stay inside because of the impending danger of the hordes. You feel a chill run down your spine. Ice flows through your veins. You start running towards the market stalls when you see the state of your rooms - everything is messed up and destroyed, as if a tornado had torn everything inside.</p>
<p>Nobody is at the market and the stalls are broken - splintered wood everywhere, the occasional trampled vegetable. You don’t see any blood but that doesn’t make it better. It seems like no one put up a fight. You run further, to the one friend you’d trust with your live and your family. But she is not at her house. In fact, all the houses along this road are empty, with their front doors wide open and the lights inside still burning.</p>
<p>Despair has you firmly in its grasp.</p>
<hr>
<p><em>This was a little easier to write than the first scene, given that it was both an instrumental piece and from the soundtrack of a game I have played extensively. The theme here is the urge to hurry, to do something, anything not to go mad from inaction.</em></p>
<p><em>Requested by Waran.</em></p>Red Lipstick on White Fabric2018-11-11T22:44:00+01:002018-11-11T23:00:00+01:00Alexander Skibatag:ghostlyrics.net,2018-11-11:/red-lipstick-on-white-fabric.html<p>I let my thoughts drift. My mind wanders to an old memory. It is a piece of white cloth with a red stain on it. The stain is not fresh but slightly faded, someone has tried to remove it with washing powder but it didn’t entirely work.</p>
<p>It was …</p><p>I let my thoughts drift. My mind wanders to an old memory. It is a piece of white cloth with a red stain on it. The stain is not fresh but slightly faded, someone has tried to remove it with washing powder but it didn’t entirely work.</p>
<p>It was the day before carnival at school and I spent the evening chatting with M who had been a friend for 2-3 years at this point. We exchanged messages via <a href="https://en.wikipedia.org/wiki/ICQ">ICQ</a> - which was the messaging service of choice in my circle of friends back then. I didn’t like the thought of dressing up and was generally grumpy. I have not been a fan of costumes since elementary school but I don’t remember what soured the fun in dressing up. Bets are either the feeling of carnival being childish and immature or the dislike of the drunk masses during the gatherings in town.</p>
<p>M mentioned that she would be going as a vampire. Truth be told I was probably into her back then. I certainly remember making advances towards her and being rejected at some point; but I cannot figure out if that was the same year. As much as it pains me to admit, the years from school are blurry and I’m having trouble remembering whom exactly I liked at which moment. It’s not always so clean cut during puberty, as you might have experienced yourself. </p>
<p>I sensed the opportunity to blend in a little easier with folks in school while not being entirely dressed up and suggest that, should she go as vampire I might be the victim of her bite, with some blood, stains and all.</p>
<p>I’m not sure whether I asked M to wear red lipstick that day. My mind might have added that detail in hindsight to make the memory livelier. I asked my mother in the morning to help me with some of her makeup, to make a more convincing vampire victim - the usual things but not going over the top. So we stick to the kiss mouth painted on with lipstick and use a little bit of eyeliner for a different colored red. We could’ve gone for some ghoulish smokey eyes effect, I realize now.</p>
<p>M and I had a lot of fun parading around at school, with all the usual jokes you do on carnival. At least that’s what I prefer to think, given that I lack any detailed memories here. I would be willing to bet there were <a href="https://en.wikipedia.org/wiki/Berliner_(doughnut)">krapfen</a> at some point and I believe I messed up my white hoodie with the jam from the krapfen. When undressing I smeared some of the lipstick to the collar of the white hoodie. Mum was never able to get it perfectly white again and asked me multiple times to give it away or discard it but I kept it for years, the stain a reminder of a nice memory.</p>Scenes of music: Only My Railgun (Original Version)2018-10-30T00:58:00+01:002018-10-30T00:58:00+01:00Alexander Skibatag:ghostlyrics.net,2018-10-30:/scenes-of-music-only-my-railgun-original-version.html<p>Song: <a href="https://www.youtube.com/watch?v=yvS0Sr-2RH0">Only My Railgun</a></p>
<p>You arrive late to the concert. It’s not really your style, but nevertheless you look forward to enjoying it, having been handed free tickets from a friend. You enter the club located near the exterior hull of the space station, where rent is cheap and …</p><p>Song: <a href="https://www.youtube.com/watch?v=yvS0Sr-2RH0">Only My Railgun</a></p>
<p>You arrive late to the concert. It’s not really your style, but nevertheless you look forward to enjoying it, having been handed free tickets from a friend. You enter the club located near the exterior hull of the space station, where rent is cheap and gravitation is low enough for many to feel uneasy. The unfamiliar music with synths and Japanese voiceovers is already playing. When you open the door, bright neon lights flash and you see the mob jumping in ecstasy. They cheer to the music filling their lives with joy apart from the dreary daily life. You’re a bit sad that the voice is from an android proxy performer. Certainly you didn’t expect them to show up personally on a mining station that remote?</p>
<p>You ease into the beat of the music and move with the rest of the crowd, forgetting your calling for the moment and focus on the beat driving you forward. You haven’t felt this energetic for the whole week and hope it lasts to get you through the rest of this assignment so you can return to your clan where you’ll be surrounded by familiar faces once more.</p>
<hr>
<p><em>This is the first scene that I wrote to accompany a piece of music. The idea came up during a session of writing music recommendations that didn’t go as well as they usually do, so I tried to mix things up a bit. I asked the participants to give me one song each and I wrote a little flavor text to go with them. This one was inspired by The Expanse, both the novels and the TV series.</em></p>
<p><em>Requested by Xeha North.</em></p>Reading recommendations (2018-09-29)2018-09-29T13:44:00+02:002018-09-29T13:44:00+02:00Alexander Skibatag:ghostlyrics.net,2018-09-29:/reading-recommendations-2018-09-29.html<p>I’m writing this while I’m still on sick leave, so not terribly talkative or inspired. I played a lot more <em>Assassin’s Creed 3</em> since I blew through the most interesting content in the latest <em>Final Fantasy XIV</em> patch in just two evenings. I even got around to …</p><p>I’m writing this while I’m still on sick leave, so not terribly talkative or inspired. I played a lot more <em>Assassin’s Creed 3</em> since I blew through the most interesting content in the latest <em>Final Fantasy XIV</em> patch in just two evenings. I even got around to reading the next book from <em>The Expanse</em>, which - I now know thanks to iOS 12’s “Screen Time”, took me about 14 hours.</p>
<ul>
<li><a href="http://blog.jaredsinclair.com/post/170463595025/whats-the-deal-with-no-downloads-in-sodes">http://blog.jaredsinclair.com/post/170463595025/whats-the-deal-with-no-downloads-in-sodes</a></li>
<li><a href="http://wilwheaton.net/2018/08/the-world-is-a-terrible-place-right-now-and-thats-largely-because-it-is-what-we-make-it/">http://wilwheaton.net/2018/08/the-world-is-a-terrible-place-right-now-and-thats-largely-because-it-is-what-we-make-it/</a> (the highlight)</li>
<li><a href="http://www.novacrystallis.com/2018/02/zodiac-age-pc-final-fantasy-xiis-definitive-version/">http://www.novacrystallis.com/2018/02/zodiac-age-pc-final-fantasy-xiis-definitive-version/</a></li>
<li><a href="https://blog.cryptographyengineering.com/2018/09/23/why-im-leaving-chrome/">https://blog.cryptographyengineering.com/2018/09/23/why-im-leaving-chrome/</a></li>
<li><a href="https://docs.google.com/document/d/199PqyG3UsyXlwieHaqbGiWVa8eMWi8zzAn0YfcApr8Q/">https://docs.google.com/document/d/199PqyG3UsyXlwieHaqbGiWVa8eMWi8zzAn0YfcApr8Q/</a> (Thoughts on Alerting for operations teams by a Google engineer)</li>
<li><a href="https://robertheaton.com/2018/08/20/how-i-kicked-my-email-compulsion/">https://robertheaton.com/2018/08/20/how-i-kicked-my-email-compulsion/</a></li>
<li><a href="https://stackoverflow.com/questions/7714326/git-submodule-url-not-including-username">https://stackoverflow.com/questions/7714326/git-submodule-url-not-including-username</a></li>
<li><a href="https://support.apple.com/en-us/HT207005">https://support.apple.com/en-us/HT207005</a> (What exactly is in those background updates in macOS)</li>
<li><a href="https://talesofthecocktail.com/behind-bar/creating-best-cocktail-experience-non-drinkers">https://talesofthecocktail.com/behind-bar/creating-best-cocktail-experience-non-drinkers</a></li>
<li><a href="https://www.falter.at/archiv/FALTER_20180725CAD1BF82FD/operation-turkenfuhrerschein-mobbing-statt-politik">https://www.falter.at/archiv/FALTER_20180725CAD1BF82FD/operation-turkenfuhrerschein-mobbing-statt-politik</a></li>
<li><a href="https://www.macstories.net/news/steam-link-rejected-by-app-review/">https://www.macstories.net/news/steam-link-rejected-by-app-review/</a></li>
<li><a href="https://www.reuters.com/article/us-northkorea-usa-maximumpressure-insigh/door-already-ajar-trump-may-struggle-to-isolate-north-korea-again-idUSKCN1J600L">https://www.reuters.com/article/us-northkorea-usa-maximumpressure-insigh/door-already-ajar-trump-may-struggle-to-isolate-north-korea-again-idUSKCN1J600L</a></li>
<li><a href="https://www.reuters.com/article/us-russia-politics-history/russian-historians-raise-alarm-after-stalin-victims-prison-card-destroyed-idUSKCN1J50RE">https://www.reuters.com/article/us-russia-politics-history/russian-historians-raise-alarm-after-stalin-victims-prison-card-destroyed-idUSKCN1J50RE</a></li>
<li><a href="https://www.securemessagingapps.com/">https://www.securemessagingapps.com/</a> (A meaningful comparison of secure messaging apps)</li>
<li><a href="https://www.zdziarski.com/blog/?p=7360">https://www.zdziarski.com/blog/?p=7360</a> (About blindly following orders)</li>
<li><a href="https://david-smith.org/blog/2016/04/04/a-nerds-review-of-the-tesla-model-s/">https://david-smith.org/blog/2016/04/04/a-nerds-review-of-the-tesla-model-s/</a> (the archive pick.)</li>
</ul>Reading recommendations (2018-09-05)2018-09-05T09:07:00+02:002018-09-29T13:58:00+02:00Alexander Skibatag:ghostlyrics.net,2018-09-05:/reading-recommendations-2018-09-05.html<p>I’ve been very active in the Discord belonging to my MMO group lately, including hosting a choose-your-own-adventure style game that’s held regularly. It’s a very fun exercise for me to come up with entertaining texts fitting a scenario as well as the input of the players. I …</p><p>I’ve been very active in the Discord belonging to my MMO group lately, including hosting a choose-your-own-adventure style game that’s held regularly. It’s a very fun exercise for me to come up with entertaining texts fitting a scenario as well as the input of the players. I imagine this is a bit like a Dungeons and Dragons campaign with close to no rules. It’s been a joyous experience so far and I want to keep this up to keep my writing in shape for a good while.</p>
<p>I might even consider asking the players if it is alright to publish the full story after it has come to a close.</p>
<p>On the tech side I find myself shifting more and more away from Vagrant and towards Docker, having gone so far as to remove the VirtualBox layer between my Windows instance and the Docker I’m using to publish this site. Using <code>docker-compose</code> has allowed this to be a lot more comfortable. I had not used <code>docker-compose</code> before but got into it recently.</p>
<p>I’m currently working with a rather complex Docker container at work and find myself needing to customize various things. Using <code>docker-compose</code> instead of listing dozens of command line parameters when starting the container has made this easier. I remembered the simplicity of <code>docker-compose</code> when I got annoyed by specifying and remembering all the options. A while ago, a colleague had showed me project using <code>docker-compose</code> but I didn’t see its usefulness - especially when moving between the different OSs - back then. Having worked with the tool myself now, I can definitely see how it’s going to simplify my setup.</p>
<ul>
<li><a href="http://galesaur.com/portfolio/jon-2/">http://galesaur.com/portfolio/jon-2/</a> (The highlight, comic.)</li>
<li><a href="https://billmoyers.com/story/after-living-in-norway-america-feels-backward/">https://billmoyers.com/story/after-living-in-norway-america-feels-backward/</a> (The archive pick.)</li>
<li><a href="https://news.vice.com/en_us/article/evkg9e/former-cia-ray-mcgovern-protested-at-gina-haspels-cia-confirmation-hearing">https://news.vice.com/en_us/article/evkg9e/former-cia-ray-mcgovern-protested-at-gina-haspels-cia-confirmation-hearing</a></li>
<li><a href="https://sixcolors.com/post/2018/06/mojave-beta/">https://sixcolors.com/post/2018/06/mojave-beta/</a></li>
<li><a href="https://theoutline.com/post/3402/tinder-is-not-actually-for-meeting-anyone">https://theoutline.com/post/3402/tinder-is-not-actually-for-meeting-anyone</a></li>
<li><a href="https://web.archive.org/web/20120723173702/http://blog.okcupid.com/index.php/your-looks-and-online-dating/">https://web.archive.org/web/20120723173702/http://blog.okcupid.com/index.php/your-looks-and-online-dating/</a></li>
<li><a href="https://www.macstories.net/stories/apple-books-a-love-letter-to-readers/">https://www.macstories.net/stories/apple-books-a-love-letter-to-readers/</a></li>
<li><a href="https://www.pcgamer.com/prominent-final-fantasy-14-community-leader-accused-of-blackmail-and-sexual-harassment-by-over-a-dozen-women/">https://www.pcgamer.com/prominent-final-fantasy-14-community-leader-accused-of-blackmail-and-sexual-harassment-by-over-a-dozen-women/</a> (Horrifying. A very sad read.)</li>
<li><a href="https://www.polygon.com/2018/5/25/17391878/detroit-become-human-review-ps4">https://www.polygon.com/2018/5/25/17391878/detroit-become-human-review-ps4</a></li>
<li><a href="https://www.polygon.com/e3/2018/6/10/17445806/kingdom-hearts-3-release-date-2019">https://www.polygon.com/e3/2018/6/10/17445806/kingdom-hearts-3-release-date-2019</a></li>
<li><a href="https://www.polygon.com/reviews/2018/9/4/17689100/polygon-reviews-no-scores">https://www.polygon.com/reviews/2018/9/4/17689100/polygon-reviews-no-scores</a></li>
<li><a href="https://www.reuters.com/article/us-europe-migrants-italy-malta/italy-shuts-ports-to-migrant-boat-asks-malta-to-open-its-doors-idUSKBN1J60UY">https://www.reuters.com/article/us-europe-migrants-italy-malta/italy-shuts-ports-to-migrant-boat-asks-malta-to-open-its-doors-idUSKBN1J60UY</a></li>
<li><a href="https://www.theguardian.com/law/2018/jun/15/upskirting-to-become-a-criminal-offence-punishable-by-two-years-in-jail">https://www.theguardian.com/law/2018/jun/15/upskirting-to-become-a-criminal-offence-punishable-by-two-years-in-jail</a></li>
<li><a href="https://www.theguardian.com/technology/2018/may/24/amazon-alexa-recorded-conversation">https://www.theguardian.com/technology/2018/may/24/amazon-alexa-recorded-conversation</a></li>
<li><a href="https://www.truetrophies.com/n14954/etherborn-funded-and-coming-to-consoles-soon">https://www.truetrophies.com/n14954/etherborn-funded-and-coming-to-consoles-soon</a></li>
</ul>Reading recommendations (2018-09-01)2018-09-01T03:40:00+02:002018-09-29T13:58:00+02:00Alexander Skibatag:ghostlyrics.net,2018-09-01:/reading-recommendations-2018-09-01.html<p>I find that I want to spend more time writing and am inspired by <a href="https://mattgemmell.com">Matt Gemmell</a> to publish more personal piece as well as shorter articles as well. Quantity doesn’t mean quality after all. To start this I’ve polished up my notes from Rome and <a href="http://ghostlyrics.net/rome-2018-bsides-roma-sightseeing.html#rome-2018-bsides-roma-sightseeing">published them as …</a></p><p>I find that I want to spend more time writing and am inspired by <a href="https://mattgemmell.com">Matt Gemmell</a> to publish more personal piece as well as shorter articles as well. Quantity doesn’t mean quality after all. To start this I’ve polished up my notes from Rome and <a href="http://ghostlyrics.net/rome-2018-bsides-roma-sightseeing.html#rome-2018-bsides-roma-sightseeing">published them as an article</a>. Aside from that, I’m still battling with my Internet provider, trying to find a good balance between sleeping, working and leisure time and finally getting some more things for the new apartment.</p>
<ul>
<li><a href="https://www.destructoid.com/rock-of-ages-2-bigger-boulder-looks-wild-455054.phtml">https://www.destructoid.com/rock-of-ages-2-bigger-boulder-looks-wild-455054.phtml</a></li>
<li><a href="https://www.joelonsoftware.com/2018/01/12/birdcage-liners/">https://www.joelonsoftware.com/2018/01/12/birdcage-liners/</a> (About the disgusting grab for attention by social media)</li>
<li><a href="https://www.reddit.com/r/Guildwars2/comments/6y8xkc/gemstore_update_geomancer_gliderrox_and_taimis/dmlylx0/">https://www.reddit.com/r/Guildwars2/comments/6y8xkc/gemstore_update_geomancer_gliderrox_and_taimis/dmlylx0/</a></li>
<li><a href="https://www.reddit.com/r/ffxiv/comments/7si550/endgame_raiding_14_tips_to_becoming_an_excellent/">https://www.reddit.com/r/ffxiv/comments/7si550/endgame_raiding_14_tips_to_becoming_an_excellent/</a></li>
<li><a href="https://www.reuters.com/article/us-afghanistan-artlords/afghanistans-artlords-daub-walls-with-messages-of-defiance-hope-idUSKCN1G4030">https://www.reuters.com/article/us-afghanistan-artlords/afghanistans-artlords-daub-walls-with-messages-of-defiance-hope-idUSKCN1G4030</a></li>
<li><a href="https://www.reuters.com/article/us-afghanistan-graves/afghan-police-discover-mass-graves-after-village-attack-idUSKCN1AW0Q6">https://www.reuters.com/article/us-afghanistan-graves/afghan-police-discover-mass-graves-after-village-attack-idUSKCN1AW0Q6</a></li>
<li><a href="https://www.reuters.com/article/us-britain-politics-bigben/britains-big-ben-falls-silent-for-four-years-of-renovation-work-idUSKCN1B11DZ">https://www.reuters.com/article/us-britain-politics-bigben/britains-big-ben-falls-silent-for-four-years-of-renovation-work-idUSKCN1B11DZ</a></li>
<li><a href="https://www.reuters.com/article/us-northkorea-missiles-university-exclus/exclusive-pyongyang-university-to-start-fall-classes-without-american-staff-after-travel-ban-idUSKCN1BC3R6">https://www.reuters.com/article/us-northkorea-missiles-university-exclus/exclusive-pyongyang-university-to-start-fall-classes-without-american-staff-after-travel-ban-idUSKCN1BC3R6</a></li>
<li><a href="https://www.theroot.com/millions-of-black-voters-are-being-purged-from-voter-ro-1827808612">https://www.theroot.com/millions-of-black-voters-are-being-purged-from-voter-ro-1827808612</a></li>
<li><a href="https://www.falter.at/archiv/wp/heimlich-still-und-leise/">https://www.falter.at/archiv/wp/heimlich-still-und-leise/</a> (German, a critical look at the Austrian government at the time of publishing this.)</li>
<li><a href="https://robertheaton.com/2016/04/09/in-context/">https://robertheaton.com/2016/04/09/in-context/</a> (The highlight.)</li>
<li><a href="https://robertheaton.com/2018/07/04/i-went-to-skyrim-once/">https://robertheaton.com/2018/07/04/i-went-to-skyrim-once/</a></li>
<li><a href="https://robertheaton.com/2018/07/02/stylish-browser-extension-steals-your-internet-history/">https://robertheaton.com/2018/07/02/stylish-browser-extension-steals-your-internet-history/</a></li>
<li><a href="https://www.nytimes.com/2018/05/11/technology/kevins-week-in-tech-are-googles-ai-powered-phone-calls-cool-creepy-or-both.html">https://www.nytimes.com/2018/05/11/technology/kevins-week-in-tech-are-googles-ai-powered-phone-calls-cool-creepy-or-both.html</a></li>
<li><a href="https://www.polygon.com/features/2016/4/8/11376970/train-jam-2016">https://www.polygon.com/features/2016/4/8/11376970/train-jam-2016</a> (The archive pick.)</li>
</ul>Rome 2018 (BSides Roma & Sightseeing)2018-08-30T02:10:00+02:002018-08-30T02:10:00+02:00Alexander Skibatag:ghostlyrics.net,2018-08-30:/rome-2018-bsides-roma-sightseeing.html<p><em>Back when I was traveling to Rome with my dad in January I took some notes and sent them as an informal German newsletter to a couple of friends and family. Since I thought there are quite some good moments in there, mixed with scenes that I’m sure will …</em></p><p><em>Back when I was traveling to Rome with my dad in January I took some notes and sent them as an informal German newsletter to a couple of friends and family. Since I thought there are quite some good moments in there, mixed with scenes that I’m sure will make you chuckle, I thought I’d polish this up a bit and finally publish the piece. Additionally, I added some context where appropriate and some more humor for flavor.</em></p>
<p>From Roma. To Roma. In Roma. Doesn’t matter, really.</p>
<h2 id="day-zero">Day Zero</h2>
<p>We’re going there by airplane via Vienna. Immediately when dad picks me up in Graz with his car, I get both an e-mail as well as a text message that our flight will be delayed. As we arrive at the airport, so arrives notification #2 about a further delay. We sit down for breakfast and another delay arises. Two hours pass. Nothing special to report from the flight. Eurowings has you pay even for snacks, but I’m not that starved. And I can’t see myself wasting money on something so terrible anyway, considering an experience from a previous flight.</p>
<p>After we arrive at Fuimicino, we wait for the bus - which is also delayed but that delay is not announced. Rather, we idle outside and I’m freezing and shivering. Not that it would surprise anyone, I’m cold all the time.</p>
<p>Then the bus takes us to the central train station. Dad wants to take a cab from there to the hotel. The driver intends to bill us 25€ for one kilometer and refuses to write a receipt (<em>I wonder why…</em>), so dad and me walk to the hotel. He’s a bit sick and has quite a heavy suitcase with him. I, uhm, well, I am reminded of walking with my (former) girlfriend, who also always seems slow to me. That is unexpected and I mention it to my dad. He replies: “well, I am getting old, you know”. I don’t reply since I’m not sure whether there’s a good answer to that.</p>
<p>It is evening when we arrive at the hotel. The room is tiny. No, not what you’re thinking. It’s still tinier. The electronic safe has a malfunction. We point that out and are relocated to another room. That one is - at least in my opinion - even smaller but the safe works. But we manage to damage the light switch which gets stuck in the socket. Our patience for pointing out issues has run dry for one day and by the next day the problem has resolved itself. I assume the cleaning crew noticed and got it fixed.</p>
<p>Dad wants to take a shower before bed. There’s no hot water - lukewarm is the best the shower gives you. Hot water is only available in the morning. This repeats on several evenings, leading me to suspect that the hotel is only heating the water in the night hours.</p>
<p>We have dinner, with tiramisu. I like tiramisu a lot.</p>
<p>On the way to bed I notice that Italy uses different power plugs than Austria and I get a really bad feeling since we’re planning to rely on Google Maps on my phone for navigating public transport thanks to <a href="https://twitter.com/viticci">@viticci</a>‘s assurance that this works well for Rome. Later, I realize that I can use the plug of my iPhone but not the one of my iPad, which is bad because it dramatically reduces my potential maximum reading time. Read: I cannot charge and read at the same time.</p>
<h2 id="day-one">Day One</h2>
<p>The next morning I wake up after little sleep and a lot of reading. No, I’m not looking for your sympathy, that’s okay. I’m not looking for your understanding either.</p>
<p>Breakfast provided by the hotel has cake, toast with jam, orange juice, coffee and tea. I can’t talk about the toast but the rest was between okay and terrible. So much for “breakfast included”. <em>Nah, thank you, I’m good.</em> (For context: I had argued that we don’t need a hotel with breakfast included since I tend not to have breakfast and suggested grabbing something at food carts)</p>
<p><a href="http://ghostlyrics.net/images/2018-01-rome/IMG_1217-PANO.jpg"><img alt="View of city walls, taking from a bus stop we frequently used, Rome" src="http://ghostlyrics.net/images/2018-01-rome/IMG_1217-PANO-thumb.jpg"></a></p>
<p>Since we have some time left before our scheduled visit of the <a href="http://ghostlyrics.net/images/2018-01-rome/IMG_1262.jpg">coliseum</a> (pre-booked online to save queuing time) we get ourselves public transport tickets which are valid for a whole week. Well, after discussions with the clerks of various minor shops on where to get such a ticket. The answer is, unsurprisingly: the vending machine. (For context: That’s not how it works in my hometown where the vending machines provide only shorter durations) Then we go - heavily reliant on Google Maps and its awesome feature for navigating public transport - to <a href="https://en.wikipedia.org/wiki/Baths_of_Caracalla">Terme di Caracalla</a> and enjoy the scenery. I am strongly reminded of <a href="https://en.wikipedia.org/wiki/Assassin%27s_Creed:_Brotherhood">Assassin’s Creed: Brotherhood</a> which is good and a prime reason I wanted to go to Rome. It’s constantly raining, but only lightly.</p>
<p>Next is the coliseum. We take the metro there but are wondering if our ticket is actually valid for the subway (<em>at the point of taking the notes I didn’t know; at the point of typing this I still don’t know</em>), but a friendly man waves us through after seeing our confusion. The moment we arrive the rainstorm <a href="https://www.meetcarrot.com/weather/">CARROT</a> warned me about started. Some minutes later though, everything around the coliseum is empty and only a few tourists stream back in. We are checking it out using an audio guide. Yes, one audio guide. My hearing is good enough that I can listen to the one that my dad wears without stepping closer and I opt to just ignore the one I’m wearing. It’s a strange feeling listening to the German guide after opting for English in just about everything for years due to excessive Internet usage and being scarred by bad video game translations.</p>
<p>The coliseum is indeed massive and extremely impressive. Due to the small amount of people who have not escaped the rain it’s possible to take lots of great pictures without being trampled or having to hurry. Where there is usually a waiting time of several hours, we manage to pass through in about ten minutes, for <strong>two</strong> queues.</p>
<p><a href="http://ghostlyrics.net/images/2018-01-rome/IMG_1262.jpg"><img alt="View inside the coliseum, from one of the lower floors down into the basement area, Rome" src="http://ghostlyrics.net/images/2018-01-rome/IMG_1262-thumb.jpg"></a></p>
<p>Afterwards we’re looking for nourishment. I suggest #1 from the Tripadvisor suggestions (or was it #7?). Dad wants to sit though and not eat street food. Given this sounds smart, I stop arguing. The alternative restaurant is… okay. The chocolate cake is extremely chocolatey. They serve neither fruit tea nor mint tea and I’m annoyed. Nevertheless we sit down again and have a second serving to escape the second rain this day.</p>
<p>The rest of the evening consists of long conversations and reading time. In hindsight it’s likely I read until the iPad ran out of battery.</p>
<h2 id="day-two">Day Two</h2>
<p>I spare myself another disappointment and skip breakfast. Dad comments on how miraculous a skill it is to be able to burn coffee.</p>
<p>We spend the morning visiting <a href="https://en.wikipedia.org/wiki/Roman_Forum">Forum Romanum</a> which is again, very impressive with all the ruins and temple structures. It is amazing that they are so well preserved. We are taking many, <em>many</em> pictures. Dad is mostly taking video scenes of a few seconds each which he will compose into a longer movie at home. I’m the photo guy, capturing everything with my phone’s camera. I’m a little disappointed by the <a href="https://en.wikipedia.org/wiki/Farnese_Gardens">garden on top of the Palatin</a> but that’s to be expected when visiting in January. It’s a pity, really. I have seen many trees in and around Rome that are already bearing oranges and lemons. There are also birds chirping, something that happens much later in Austria.</p>
<p><a href="http://ghostlyrics.net/images/2018-01-rome/IMG_1283-PANO.jpg"><img alt="Panorama of ruins on top of Palatin, Rome" src="http://ghostlyrics.net/images/2018-01-rome/IMG_1283-PANO-thumb.jpg"></a></p>
<p>We spend our lunchtime at the train station. It’s okay. There’s Fanta Lemon which is an exceedingly great find and suddenly my world is whole. Next we ~~hippity~~- hop over to the Hop On Hop Off bus, or at least we try. Despite my advanced mastery of Google Maps we’re not able to find the bus stop and go for the next one. (Since the Internet isn’t too great a medium for relaying tone: yes, that was indeed sarcasm.) We manage that and are taking the red line. We’re passing many sights, for example the <a href="https://en.wikipedia.org/wiki/Castel_Sant%27Angelo">Castel Sant’Angelo</a> and I’m not sure which ones we want to visit next. The bus has an open roof with a panorama deck and - as expected - I am cold for 1.5 hours. I’d still recommend the tour with audio guide, though.</p>
<p>Dad mentions how well we’re finding our way around with Google Maps. I respond that would also be possible in Austria if the companies behind our public transportation weren’t so hard-headed about opening their routes and schedules. The keyword here is <em>open data</em>.</p>
<p><em>The following days were part 2 of the newsletter.</em></p>
<h2 id="day-three">Day Three</h2>
<p><a href="https://en.wikipedia.org/wiki/Tiber_Island">Tiber Island</a>. It’s not as spectacular as expected. Might be because that’s where my video game used a lot of creative freedom to make it more interesting to the players. In the game, the headquarters of the assassins is located here. The island itself is smaller than I remembered from the game - there’s only place for some buildings that make up a hospital, one larger church and one or two <a href="https://en.wikipedia.org/wiki/Trattoria">trattorias</a>. I make photos of the currently used bridges as well as the damaged ancient one.</p>
<p><a href="https://en.wikipedia.org/wiki/Pantheon,_Rome">Pantheon</a>. “That’s the big round thing with the hole”, I say. I explain the scene featuring the pantheon from the game where you’re climbing in through the hole in the roof. The conversion of the temple to a church is fascinating and the scale of the building is incredible. I am distracted and my thoughts revolve around tiramisu to come but I’m still taking a lot of pictures.</p>
<p><a href="https://www.tripadvisor.com/Restaurant_Review-g187791-d13223918-Reviews-Mr_100_Tiramisu-Rome_Lazio.html">Mr. 100 Tiramisu</a>. After delicious lunch at a baguette store with fresh bread - that happens not be part of a franchise like Subway - we’re finally getting to the main part of this day. This shop has 100 different variations of tiramisu. The ingredients for the one I wanted are both no longer in stock (mint, strawberry). They have a tiramisu template and that one is garnished with fresh ingredients before your eyes. I order one with orange zest and dark chocolate… and another one with lemon zest, rosemary and honey. Both are excellent. Dad complains that his one was too sweet. I look at him, puzzled and try to imagine how <strong>anything</strong> can be too sweet. Despite my best attempts I fail to integrate this view into my world view and give up. I neglect to take pictures of dad’s tiramisu but since it has nuts, I can’t have been good anyway.</p>
<p><a href="http://ghostlyrics.net/images/2018-01-rome/IMG_1394.jpg"><img alt="Tiramisu with orange zest and dark chocolate, beautifully arranged on a clean plate with a silver spoon." src="http://ghostlyrics.net/images/2018-01-rome/IMG_1394-thumb.jpg"></a></p>
<p>I praise the tiramisu and talk with Mr. Tiramisu about Tripadvisor (we’re sadly losing a joke due to the translation since “via Tripadavisor” and “about Tripadvisor” use the same words in German). <em>Have I mentioned that I like tiramisu?</em></p>
<p>In the evening we’re eating at <a href="https://www.tripadvisor.com/Restaurant_Review-g187791-d1632970-Reviews-Il_Tempio_di_Minerva-Rome_Lazio.html">Tempio di Minerva</a> again. I get a stew, dad goes for the delicious tomato soup I had the day before. That one was superb and most definitely one of the culinary highlights of this journey. The waitress smiles and laughs when I order a soup after the main course, stating “A nice dessert, yes”.</p>
<h2 id="day-four">Day Four</h2>
<p>Already in the morning there’s trouble brewing since ATAC (the public transport provider) is on strike (which is a regular thing on Fridays as I’ve learned later). Due to this a lot of the buses aren’t on their usual routes and if they are, they are <strong>packed</strong>. They are so filled that it’s literally impossible to fall down due to your fellow humans propping you up. In my hometown that’s when I just use the next line or go by foot…</p>
<p><a href="https://en.wikipedia.org/wiki/Castel_Sant%27Angelo">Castel Sant’Angelo</a>, outside. We spot a signpost detailing the changes made to the castel through the centuries. I am trying to figure out which of the pictures resembles the model I know from the game most.</p>
<p>We’re moving on to <a href="https://en.wikipedia.org/wiki/St._Peter%27s_Square">St. Peter’s Square</a> but due to lack of faith we’re neither entering the unending queues to visit the Vatican nor the Sixtine Chapel. Instead, we head for the museum about Leonardo da Vinci. In their exposition, there are pieces known from the game like the parachute, the tank, the machine gun as well as multiple flying machines. Near St. Peter’s Square, we are having coffee and Coca Cola where the 0.5 liter bottle goes for 8€. <em>Yes, there was actually a reason behind this. I think. Memory is a funny thing.</em></p>
<p>We walk into the Vatican’s area, though we are not strictly inside the walled off area. Technically we have a sandwich in the Vatican but it’s bland and I disagree with the decision of exchanging flavor for more sightseeing time.</p>
<p><a href="https://en.wikipedia.org/wiki/Castel_Sant%27Angelo">Castel Sant’Angelo</a>, inside. The whole building and the surrounding walls are extremely impressive. I remember a lot of stories from the whole Assassin’s Creed series and tell them to dad, whether he wants to hear them or not. We’re at the terrace on the roof and I take some panorama pictures. The place is awe-inspiring but we’re not going for the audio guide this time around.</p>
<p><a href="http://ghostlyrics.net/images/2018-01-rome/IMG_1499.jpg"><img alt="View from the Castel Sant'Angelo down onto the Ponte Sant'Angelo, reminiscent of a famous scene from Assassin's Creed: Brotherhood" src="http://ghostlyrics.net/images/2018-01-rome/IMG_1499-thumb.jpg"></a></p>
<p>We have bad luck on the way back from the castel. Really bad luck. Due to the strike the bus is very late and extremely packed. I’m talking so packed that I cannot stand straight in there and I can only manage to grab something not to fall over while bending in pain. I would’ve exited immediately, that’s something I have to admit. Dad wants to go by bus. I would’ve preferred an eternity of walking to sharing basically no space at all with strangers. Especially when you’re pressed to each other already.</p>
<p>Dinner at an Indian restaurant (<em>because that’s what you go to Italy for, right?</em>). While the restaurant looks closed from the outside… it also looks kind of shady on the inside. It’s very dark, often black or purple with low ambient lighting. The food is awesome though. Ginger tea. <a href="https://simple.wikipedia.org/wiki/Okra">Gumbo</a> (also known as lady’s fingers). Despite my anger about the effects of the ATAC strike and going by bus I judge this a good day. <em>It’s interesting how much effect the last impression of a day has on the overall impression of a day.</em></p>
<p>Upon returning to our hotel room I have to smile given that the cleaning crew has arranged my stuffed elephant I have with me on the pillow to look at everyone coming in through the door. I think that’s a cute gesture.</p>
<p><a href="http://ghostlyrics.net/images/2018-01-rome/IMG_1515.jpg"><img alt="Stuffed elephant sitting on a pillow" src="http://ghostlyrics.net/images/2018-01-rome/IMG_1515-thumb.jpg"></a></p>
<p><em>The following sections are written for publication and not based on notes from the trip.</em></p>
<h2 id="day-five">Day Five</h2>
<p>I get up and use the <a href="https://itunes.apple.com/us/app/mytaxi-tap-move-freely/id357852748">mytaxi app</a> to call a cab which works perfectly. I arrive quite a bit early and talk with some of the <a href="https://www.bsidesroma.it">BSides Roma</a> organizers. They are stumped that someone made the long trip from Austria as they expected mostly locals to show up. I ask which of their presentations will be held in English since I saw that one had an Italian title on the schedule. They aren’t entirely sure. They say they will talk to the speakers and let me know that the global BSides community told them not to expect too many internationals at the first event.</p>
<p>So, of the 8 sessions, only 2 are held in English. If you’re about to ask me if I didn’t expect this: No, I didn’t. This was my 3rd or 4th BSides and the first one that had any non-English talks.</p>
<p><em>Feel free to skip this part if you’re not here for the tech.</em></p>
<h3 id="i-bootkit-non-sono-morti-il-ritorno-di-pitou">I Bootkit non sono morti, il ritorno di Pitou!</h3>
<p>I have a vague idea of what is in this talk. That is because while the talk is in Italian, all the slides are in English. I don’t understand why the talk isn’t in English if the slides are. The topic isn’t that interesting to me but it has some nice refreshers on concepts I have forgotten.</p>
<h3 id="js-deobfuscation-with-jstillery">JS Deobfuscation with JStillery</h3>
<p>The JS deobfuscation impresses me a lot, as I have never seen such a thing before. Entirely unreadable structure are translated into code that can be reverse engineered for analysis and threat detection. The presentation is in Italian but easily followed due to good slides and demonstrations.</p>
<h3 id="red-team-techniques-or-how-to-expand-your-empire-in-active-directory-environment">Red Team techniques, or how to expand your empire in Active Directory Environment</h3>
<p>I spend the majority of this talk in a nearby café talking with, well, someone I cannot find anymore on Twitter. Or in another form. I was sure they had a blog too but I cannot find that either.</p>
<h3 id="network-hacks-for-smart-attacks">Network Hacks for Smart Attacks</h3>
<p>This is the first talk held in English. The presenter <a href="https://twitter.com/Ghostlyrics/status/952164555915919360">only decided in the morning</a> that he would hold the talk in EN. I really wish I had taken notes during this since the topic of routing protocols is fascinating and leads to some understanding of large scale attacks.</p>
<blockquote>
<p>Routing: “Basically it’s broken at the protocol level.” All three times. (<a href="https://twitter.com/Ghostlyrics/status/952149777143263232">from the talk</a>)</p>
</blockquote>
<h3 id="supply-chain-attack-through-ccleaner-evidence-aurora-operation-still-active">Supply Chain Attack Through CCleaner – Evidence Aurora Operation Still Active</h3>
<p>I wish I took notes. According to <a href="https://twitter.com/Ghostlyrics/status/952176153258856449">my tweet</a> this is the second talk held in English but I don’t remember it matching my interests too much.</p>
<h3 id="building-an-effective-info-sharing-community">Building an Effective Info Sharing Community</h3>
<p>I leave because I don’t expect the following talks to be in English and it has been a long and exhausting day due to trying hard not to fall asleep when you can’t understand most of the content that’s being presented to you.</p>
<h2 id="day-five-after-bsides">Day Five (after BSides)</h2>
<p>I decide to walk to the hotel, taking a long detour and hoping my phone battery doesn’t die from all the tweeting at BSides since I need it to find back. I still take some pictures of the city walls in the gentle evening sun and pass by the <a href="http://www.aeronautica.difesa.it/Pagine/default.aspx">Ministero Difesa Aeronautica</a>. There’s a striking monument on top of the building shaped like a bird spreading its wings. Dad and I spend the evening with dinner, me with a lasagna and him with a risotto. I declare that I don’t have any inclination for long conversations on this evening, having had to listen to people talking all day.</p>
<h2 id="day-six">Day Six</h2>
<p>We visit the <a href="https://en.wikipedia.org/wiki/Pyramid_of_Cestius">Pyramid of Cestius</a> - another remarkable landmark that I remember from Assassin’s Creed. I am sad that we cannot get a tour. We meet people who are taking a tour despite arriving there on a day not listed for public tours. In a show of my brain not working, I don’t get the idea of asking to pay right there and then and joining. I really want to see the inside but that isn’t enough to try and be spontaneous. I take pictures, we talk a bit about the historical background of the pyramid and move on.</p>
<p>The <a href="https://en.wikipedia.org/wiki/Capitoline_Hill">Capitoline Hill</a> has a nice view and some spectacular buildings. While the buildings are fine, I spend quite some time taking shots of seagulls who are okay with you walking as close as one meter, some even looking at the camera. I am half expecting one to ask me for food if I continue taking photos without asking for permission first. We have lunch in the vicinity and I eat the most disappointing lasagna I ever had, deep-frozen ones included.</p>
<p><a href="http://ghostlyrics.net/images/2018-01-rome/IMG_1616.jpg"><img alt="Seagull sitting on a waist-high wall, looking into the camera" src="http://ghostlyrics.net/images/2018-01-rome/IMG_1616-thumb.jpg"></a></p>
<p>Towards the evening, we visit the <a href="https://en.wikipedia.org/wiki/Spanish_Steps">Spanish Steps</a> and walk down to the <a href="https://en.wikipedia.org/wiki/Piazza_di_Spagna">Piazza di Spagna</a> which is incredibly crowded. If you were to try and take a shot of the fountain in its middle, you couldn’t see anything on the image due to the crowds. The view on the steps is very nice, with more orange trees already bearing fruit in a fenced off area on the steps.</p>
<p><a href="http://ghostlyrics.net/images/2018-01-rome/IMG_1679.jpg"><img alt="Orange trees in a fenced off area at the Spanish Steps, Rome" src="http://ghostlyrics.net/images/2018-01-rome/IMG_1679-thumb.jpg"></a></p>
<p>I suggest stopping at the <a href="https://en.wikipedia.org/wiki/Mausoleum_of_Augustus">Mausoleo di Augusto</a> on the way back, but that one is undergoing renovation and not open for public.</p>
<h2 id="day-seven">Day Seven</h2>
<p>On the way back, I make the usual paranoid InfoSec jokes about public phone charging stations and their security implications. Dad looks at me confused and I go back to reading my next novel. I am very pleased with the diverse food offers at Fuimicino airport and the journey back to Graz is without any disturbances.</p>Nighttime excursions2018-08-15T00:03:00+02:002018-08-15T00:03:00+02:00Alexander Skibatag:ghostlyrics.net,2018-08-15:/nighttime-excursions.html<p>It was late. It usually is, given I’m much more comfortable at night than during the day, when there is less noise. I was listening to music with my headphones on, deciding on some ideas for songs I wanted to recommend to friends. I remember it being a hot …</p><p>It was late. It usually is, given I’m much more comfortable at night than during the day, when there is less noise. I was listening to music with my headphones on, deciding on some ideas for songs I wanted to recommend to friends. I remember it being a hot day - that was contributing to me not wanting to go to bed earlier.</p>
<p>Between the music, I heard a noise as if metal was clanging to metal. Suddenly I was wide awake, taking off my headphones as I’m often enough a cautious person. As I heard the chuckling it was clear to me what was happening.</p>
<p>I switched off the lights and closed the open and tilted windows. Then I waited a bit, looking out of the center window. It didn’t take long for a young man - probably in his teens - to appear and look in.</p>
<p>And I was looking out. I didn’t say anything and neither did he. I don’t think he expected anyone to be looking out of the window at 01:30 AM, when he had just climbed the scaffolding some construction workers had put up a few days before and looked through the window into the third floor.</p>
<p>After a moment he left. I didn’t sleep well that night. I’m not sure what to think. I have an apartment that’s not on the ground floor in order to prevent exactly this kind of situation from ever happening, but it still did. I don’t think he’ll return, but given this is a large city, others might get the same idea. I reckon this was a more of a dare or a drunk stunt than an attempted burglary.</p>
<p>I’ve been asked if I wasn’t afraid. Afraid? No. The thought that I might be in danger never entered my mind. It might’ve been the giggling that made this seem so harmless. I was a bit annoyed that the situation I had gone to extra lengths to avoid had still occurred. I was also surprised how far people are willing to go for an adrenaline kick.</p>
<p><em>I wonder though how it would’ve played out, had I taken a strong flashlight and pointed it towards the man.</em></p>Reading recommendations (2018-08-13)2018-08-13T00:05:00+02:002018-08-13T00:05:00+02:00Alexander Skibatag:ghostlyrics.net,2018-08-13:/reading-recommendations-2018-08-13.html<p>It’s been a while since the last post because I’m still busy handling all the paperwork that comes with changes in lifestyle. Meanwhile I’ve watched some new anime on <a href="https://crunchyroll.com">Crunchyroll</a>: <a href="https://www.crunchyroll.com/caligula">Caligula</a>, <a href="https://www.crunchyroll.com/phantom-in-the-twilight">Phantom in the Twilight</a>, <a href="https://www.crunchyroll.com/how-not-to-summon-a-demon-lord">How not to summon a demon lord</a>, <a href="https://www.crunchyroll.com/isekai-izakaya-japanese-food-from-another-world">Isekai Izakaya: Japanese Food From …</a></p><p>It’s been a while since the last post because I’m still busy handling all the paperwork that comes with changes in lifestyle. Meanwhile I’ve watched some new anime on <a href="https://crunchyroll.com">Crunchyroll</a>: <a href="https://www.crunchyroll.com/caligula">Caligula</a>, <a href="https://www.crunchyroll.com/phantom-in-the-twilight">Phantom in the Twilight</a>, <a href="https://www.crunchyroll.com/how-not-to-summon-a-demon-lord">How not to summon a demon lord</a>, <a href="https://www.crunchyroll.com/isekai-izakaya-japanese-food-from-another-world">Isekai Izakaya: Japanese Food From Another World</a> and <a href="https://www.crunchyroll.com/bungo-stray-dogs">Bungo Stray Dogs</a>. Of these, BSD and PitT were the truly great ones, whereas C felt like a plagiarized version of The World Ends With You. Not a bad thing, it just leaves a strange aftertaste.</p>
<p>I’ve also checked out <a href="https://store.steampowered.com/app/439190/Stories_The_Path_of_Destinies/">Stories: Path of Destinies</a> since I got it for free a while back and it’s fun. There could be a little more depth to it since I unlocked the true ending in 8 hours while still missing more than 2/3 of the other dead ends.</p>
<ul>
<li><a href="https://blog.google/products/gmail/g-suite-gains-traction-in-the-enterprise-g-suites-gmail-and-consumer-gmail-to-more-closely-align/">https://blog.google/products/gmail/g-suite-gains-traction-in-the-enterprise-g-suites-gmail-and-consumer-gmail-to-more-closely-align/</a></li>
<li><a href="https://en.m.wikipedia.org/wiki/Hydroponics">https://en.m.wikipedia.org/wiki/Hydroponics</a> (I got into reading this after watching some sci-fi games.)</li>
<li><a href="https://kurier.at/chronik/oesterreich/berittene-polizei-hofreitschule-im-clinch-mit-kickl/400042252">https://kurier.at/chronik/oesterreich/berittene-polizei-hofreitschule-im-clinch-mit-kickl/400042252</a> (German)</li>
<li><a href="https://mattgemmell.com/points-of-view-in-ulysses/">https://mattgemmell.com/points-of-view-in-ulysses/</a></li>
<li><a href="https://medium.com/@waxinlyrical/yoko-taro-things-id-like-to-tell-my-followers-who-are-thinking-of-suicide-cac5696d7a8c">https://medium.com/@waxinlyrical/yoko-taro-things-id-like-to-tell-my-followers-who-are-thinking-of-suicide-cac5696d7a8c</a> (fascinating read)</li>
<li><a href="https://writing.stackexchange.com/questions/37862/is-it-considered-lazy-writing-to-have-a-dry-prelude-at-the-start-of-a-book">https://writing.stackexchange.com/questions/37862/is-it-considered-lazy-writing-to-have-a-dry-prelude-at-the-start-of-a-book</a></li>
<li><a href="https://www.destructoid.com/pc-port-report-crash-bandicoot-n-sane-trilogy-510182.phtml">https://www.destructoid.com/pc-port-report-crash-bandicoot-n-sane-trilogy-510182.phtml</a></li>
<li><a href="https://www.destructoid.com/valve-raises-more-questions-about-its-steam-policies-after-removing-aids-simulator-from-the-platform-506831.phtml">https://www.destructoid.com/valve-raises-more-questions-about-its-steam-policies-after-removing-aids-simulator-from-the-platform-506831.phtml</a></li>
<li><a href="https://www.heise.de/newsticker/meldung/Staatstrojaner-Polizei-soll-in-Wohnungen-einbrechen-duerfen-4075115.html">https://www.heise.de/newsticker/meldung/Staatstrojaner-Polizei-soll-in-Wohnungen-einbrechen-duerfen-4075115.html</a> (German)</li>
<li><a href="https://www.macrumors.com/2018/05/21/apple-id-passwords-leaked-teensafe-server/">https://www.macrumors.com/2018/05/21/apple-id-passwords-leaked-teensafe-server/</a></li>
<li><a href="https://www.polygon.com/2018/5/22/17378250/the-expanse-season-4-amazon-prime-video-streaming">https://www.polygon.com/2018/5/22/17378250/the-expanse-season-4-amazon-prime-video-streaming</a></li>
<li><a href="https://www.polygon.com/2018/5/24/17392456/totalbiscuit-john-bain-obituary">https://www.polygon.com/2018/5/24/17392456/totalbiscuit-john-bain-obituary</a> (I was sad since I enjoyed his videos.)</li>
<li><a href="https://www.reuters.com/article/us-afghanistan-online/afghan-shoppers-go-online-to-avoid-bombs-harassment-idUSKCN1J5028">https://www.reuters.com/article/us-afghanistan-online/afghan-shoppers-go-online-to-avoid-bombs-harassment-idUSKCN1J5028</a></li>
<li><a href="https://www.reuters.com/article/us-soccer-worldcup-blacklist-exclusive/exclusive-blacklisted-fan-bypasses-russias-world-cup-security-system-idUSKCN1IQ1C7">https://www.reuters.com/article/us-soccer-worldcup-blacklist-exclusive/exclusive-blacklisted-fan-bypasses-russias-world-cup-security-system-idUSKCN1IQ1C7</a></li>
<li><a href="https://www.truetrophies.com/n14974/kingdom-hearts-iii-release-date-announced">https://www.truetrophies.com/n14974/kingdom-hearts-iii-release-date-announced</a></li>
</ul>The A1 Internet Odyssey2018-07-14T01:37:00+02:002018-09-13T01:15:00+02:00Alexander Skibatag:ghostlyrics.net,2018-07-14:/the-a1-internet-odyssey.html<p>Let’s start with some context. I have moved recently. After a period of searching I have found an apartment that I liked and that was within my budget. Fast forward a bit to the point after I had moved in and was in the process of organizing an Internet …</p><p>Let’s start with some context. I have moved recently. After a period of searching I have found an apartment that I liked and that was within my budget. Fast forward a bit to the point after I had moved in and was in the process of organizing an Internet connection. That’s how I arrived at this post.</p>
<p><strong>Update</strong>: 2018-08-07 - added new information, updated timeline, added table<br>
<strong>Update</strong>: 2018-08-17 - added new information, updated timeline<br>
<strong>Update</strong>: 2018-09-13 - added new information, updated timeline, added PDFs, added conversations with customer service (German), added table of contents</p>
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
<!-- use gitlab syntax for this -->
<p><strong>Table of Contents</strong> <em>generated with <a href="https://github.com/thlorenz/doctoc">DocToc</a></em></p>
<ul>
<li><a href="#intel-gathering">Intel gathering</a></li>
<li><a href="#contract-signing">Contract signing</a></li>
<li><a href="#installation">Installation</a></li>
<li><a href="#the-waiting-game">The Waiting Game</a></li>
<li><a href="#research-more-calls">Research & more calls</a></li>
<li><a href="#update-2018-08-06-more-calls-and-no-changes">Update: 2018-08-06, more calls and no changes</a></li>
<li><a href="#update-2018-08-17-i-finally-filed-the-form">Update: 2018-08-17: I finally filed the form</a></li>
<li><a href="#update-2018-09-13-cancellation-denied">Update: 2018-09-13: Cancellation denied</a></li>
<li><a href="#appendix">Appendix</a><ul>
<li><a href="#timeline">Timeline</a></li>
<li><a href="#documents">Documents</a></li>
<li><a href="#correspondence">Correspondence</a><ul>
<li><a href="#mail-1">Mail 1</a></li>
<li><a href="#reply-to-mail-1">Reply to mail 1</a></li>
<li><a href="#mail-2">Mail 2</a></li>
<li><a href="#reply-to-mail-2">Reply to mail 2</a></li>
</ul>
</li>
<li><a href="#measurements">Measurements</a></li>
</ul>
</li>
</ul>
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<h2 id="intel-gathering">Intel gathering</h2>
<p>I called <a href="https://www.upc.at">UPC</a> since I had a running contract there for the previous apartment. I was excited to order their <strong>125Mb/s package</strong> for <strong>~ €31/month</strong>. Sadly, the helpful operator told me that this is not available at the specified address. I was floored, but after a short time of sulking I was reconsidering my options.</p>
<p><a href="https://www.a1.net">A1</a> – a fusion of a mobile phone provider and one of our oldest Internet service providers in Austria – had a tempting offer. Theoretical <strong>150Mb/s</strong> using both DSL (which goes to a maximum of about 40Mb/s via telephone cable) augmented by LTE, in the same box, using a technique called <em>Bonding</em> which is also used for servers. My first encounter with it was when reading about the networking that is done for the yearly CCC meetings in Germany. This offer is for <strong>~ €60/month</strong> though. Considerably harder to argue, but still tempting.</p>
<h2 id="contract-signing">Contract signing</h2>
<p>It happens that I ventured to one of their stores on Saturday to sign the contract. <em>For reasons I’ll explain later, that might not have been the best idea.</em> I was told that I’ll receive a box with everything I need to set up the connection myself within 3 working days. With that said and the contract in my bag, I left. What was strange though was the employee’s reaction upon me asking the following question: “What do I do if I am not satisfied with the quality of the product? What do I do if it doesn’t work?” He looked at my as if I was an alien. Apparently their equipment and network not living up to the full expectation of the customer is <em>not</em> part of the training the shopkeepers receive. <em>Or is it and I didn’t realize?</em></p>
<h2 id="installation">Installation</h2>
<p>Of course, if a company says “It will be there after 3 working days” what they really mean is “There’s a slight chance that it will be there after 3 working days, but 5 is more likely”. After the postman woke me up in the morning I opened the package, connected everything, waited the recommended amount of time and <em>nothing</em>. So, I called the support hotline even though I strongly dislike calling support for any reason. After a bit of to and fro the person on the other side of the line said “but you had a technician connect the line for you”.<br>
My answer: “No.”<br>
Him: “But it says here that an appointment for the technician was arranged for [date 3 days in the past], that he was there and everything was handled properly.”<br>
Me: “I assure you, I had no appointment and nobody was ever at my place. Your colleague in the shop also failed to mention that I <em>need</em> an appointment for a technician.”<br>
Him: “Alright, please stay on the line, I need to clear this internally.”</p>
<p>After some waiting time, he assured me that a technician would contact me for an appointment. I got a call in the afternoon and we fixed an appointment for the morning of the next day.</p>
<p>The next day, the technician arrived, did their job in a few minutes and left. Again, I waited for a while and then tried if I had a connection. I had working Internet! However, I was far from the theoretical 150 Mb/s I paid for, getting only <strong>~ 35 Mb/s</strong>. That is less than the physical limit of the DSL connection (that being around 40-42 Mb/s according to my research), never mind the possible augmentation through LTE.</p>
<p>Since I didn’t get the full speed I paid for even after an hour of waiting, I called support again. They told me that the modem needs about 24 hours of searching for cellphone towers to be properly configured. To be honest, this came with an immediate feeling of disbelief to me. I mean, this is based on cellphone technology and we surely don’t need to wait a full day before we can use our mobile Internet connection after moving a few kilometers. However, I was running out of time as well as patience and went to work. On the way there I checked my postbox and found an advertisement by UPC which offers great cheap Internet, except that they didn’t offer the product on the flyer at my address so I felt just a little taunted. <em>Just a lil’.</em></p>
<p>However, I didn’t have time to look into this after 24 hours because by then I was traveling.</p>
<h2 id="the-waiting-game">The Waiting Game</h2>
<p>So, rather, I gave it more than 48 hours and checked upon returning on Sunday. Of course, no significant changes had happened. I called support and the technician ran tests, then acknowledged there was a problem. She understood that I would be paying too much for the performance provided and wanted to send me an antenna which functions as accessory for the device to improve cellphone reception. However, A1 had internal IT issues on that weekend. She asked me to call again the next day and ask to specifically be connected to her so I wouldn’t have to explain the issue another time. <em>What she, for some reason, didn’t realize is that with their system it is technically impossible to reach a certain individual inside their support group.</em></p>
<p>The next day, I did as told and called support asking for the technician in question. I was told that it’s not possible to connect me directly and they would leave a note for her to call me back.</p>
<p>After some time, I received a call from another person saying the technician in question was sick on that day and they would take over. I was told that yes, I did need an antenna and they could send it to me. It would take several days – to which I replied that I could just pick it up at the store since it’s nearby. I would not need to pay the €35 for shipping.</p>
<p>I headed over to the store. The customer representative told me that they had an antenna, but they could only send them via mail, else I would have to buy one and that would be €60. I was told I should call support again.</p>
<p>I returned home and called support again. Support assured me that the treatment I received was very unfortunate and they were working on it. They would call me back.</p>
<p>I received another call from support. They were still working on the issue and just wanted to let me know that I had not been forgotten. I would receive another call.</p>
<p>Meanwhile I found out that I would’ve been able to cut down the minimum contract length from the brazen 24 months to a mere 6 months had I told them that I was a student. I swore and felt another pang of buyer’s remorse.</p>
<p>Later, I did in fact receive another call. They told me that the antenna has already been deducted from my bill and it would cost those €35 in the store. They would not be billed but deducted from the overall bill instead. I still needed to get the antenna. I got a more detailed description of what I was to ask for at the store.</p>
<p>I ventured to the store again, hopeful of finally getting what I need to achieve the Internet performance I paid for. Another clerk told me they knew what I needed but they sold the last one mere minutes ago. I was getting frustrated at that point and lost my cool in the shop. After some very cynical remarks, I left and went home. The clerk had told me that there was no delivery with new antennas until the coming week.</p>
<p>Having arrived at home, I was on the phone with support again. That time, they apologized even more sincerely. The technician checked every avenue he could think of, even checking the inventories of surrounding stores whether any had antennas left. He was also out of antennas in their warehouse. I was told that I would have to wait until Wednesday the following week until they received new antennas. Starting from then it would take three more business days for the antenna to arrive at my place.</p>
<p><em>Now, if I were a cynical man, I’d suggest that this company is playing the long game hoping that I’m willing to stick with their bullshit until I can’t cancel the contract.</em> However, the joke’s <em>already</em> on me because I signed the contract at their store, which means I don’t have the usual 14 days of cancellation rights you get when ordering online.</p>
<p>I was assured that A1 would arrange for an antenna for me since I have one of their most expensive consumer products. They would decide whether my payments might be reduced due to reduced service, but really it didn’t make a difference. I mean, all their products of this line cost the same amount during the initial 3 months phase.</p>
<h2 id="research-more-calls">Research & more calls</h2>
<p>Understandably, my patience was wearing extremely thin at that point. I vented my frustration via chat to a friend. She did a bit of research and found out that <a href="https://www.t-mobile.at/">T-Mobile</a>, another mobile service provider, had a similar offer with the same theoretical speed for €15 less per month. I was even more frustrated and checkout out the product page. I considered canceling right then and there, but opened the customer chat instead. I received the following information.</p>
<ul>
<li>no technician is necessary to switch if there already is a working DSL connection</li>
<li>no antenna is shipped with the device</li>
<li>they offer a testing phase which starts with the DSL connection</li>
<li>their product retrieves its configuration via LTE (whereas the A1 modem does so via DSL and <strong>disables</strong> its LTE completely without DSL as I have seen during testing)</li>
<li>they can cancel my service with another company for me</li>
<li>when I cancel such a contract, the service ends immediately but <a href="https://www.a1.net/hilfe-kontakt/article/Vertrag-Services/Vertrag/K%C3%BCndigung-%C3%9Cbertragung/Kann-ich-meinen-Vertrag-k%C3%BCndigen-wenn-ich-noch-gebunden-bin-/500000000007381/500000000027553">one still needs to pay the <strong>full sum</strong> of all remaining payments</a>. (<code>remainining_months * monthly_payments</code>). From a customer’s point of view, this is insane. From any ISPs point of view, this is standard procedure. <em>Can you tell I dislike ISPs and MSPs?</em></li>
</ul>
<p>Angrily, I called another friend who has a background in law and asked for her opinion. She replied that there was little I could do. I needed to give the company the chance to fulfill the contract and wait. Then, if things did still not improve I could talk to them again about either completely canceling it or working out a possible downgrade to an option which is technically possible at my address.</p>
<p><em>Now I know why the sales rep at the store looked at me as if I were mad when I asked what to do in case I’m not satisfied. If this is how everyone’s experience with A1 is, I’m not sure they even have satisfied customers.</em></p>
<p>By the time of me publishing this, I have given them ample time to send me an antenna and nothing happened. So I’ll pester A1 again. Until they fix my Internet or openly admit that they can’t give me what I pay them for.</p>
<h2 id="update-2018-08-06-more-calls-and-no-changes">Update: 2018-08-06, more calls and no changes</h2>
<p>In the afternoon of the same day I initially published this article, I had yet another phone call with support. They agreed to send me the <a href="https://www.a1blog.net/2017/01/06/a1-hybrid-box-antenne/">external antenna</a> and some cables.</p>
<p>Four days later I picked up the boxes at my local post office, went home, installed them and <em>nothing</em>. It should not even be technically possible, but connecting the antenna changed nothing at all. So I called support again, had them provide instructions, checked the box. We did the remote measurements again, I took more notes and detailed measurements. At least in the second call, since the first one abruptly ended. Then, I was told that “yes, measuring via a WLAN device versus a cable connected device makes a difference” which annoys me since I had several dozen measurements that prove that it hardly makes one. However, I agreed and the difference in speed was negligible (around <strong>5 Mb/s</strong> when I’m about ten times that amount).</p>
<p>Additionally, their competitor just so happened to mail me a survey about satisfaction with mobile phone providers the same day. <em>I love how cynical all of this is without me twisting something to fit the narrative.</em></p>
<p>After which they told me that this is all they can do. Then they found out there’s a damaged cellphone tower in my vicinity and argue this might be the problem. I inquired since when the tower has been damaged and after I got a day, I informed them that my problem has been going back a lot longer, so that is not the issue.</p>
<p>I was enraged and the next day I called the <a href="https://stmk.arbeiterkammer.at/beratung/konsumentenschutz/index.html">Konsumentenschutz</a> what to do. I’m still incapable of believing they can’t offer one of their flagship products in the city center of Austria’s second largest city. The nice lady told me that there might be a way to cancel the contract if they are clearly not able to offer the performance I’m paying for but I need to get that in writing.</p>
<h2 id="update-2018-08-17-i-finally-filed-the-form">Update: 2018-08-17: I finally filed the form</h2>
<p>After dealing with many other bureaucratic hurdles over the last weeks, I finally sent a strongly worded letter asking what A1 is going to do about the situation and that I’ll consider the contract as not fulfilled on their part if they don’t do something about the under-performing connection.</p>
<h2 id="update-2018-09-13-cancellation-denied">Update: 2018-09-13: Cancellation denied</h2>
<p>A1 suggested that I downgrade my connection. I called the Konsumentenschutz again and they argued for cancellation of the contract. I mail A1 asking for the contract cancellation but they refuse, referring me to the AGB, the description of their services etc. I downloaded and read them. I was infuriated. Money quote:</p>
<blockquote>
<p>Die Hybrid-Technologie ermöglicht die Erhöhung der Internetbandbreite des fixen Breitband Internetanschlusses durch die mobile Übertragungstechnologie LTE <strong>von mindestens mehr als 20480/5120 kbit/s auf maximal bis zu 153600/20480 kbit/s (downstream/upstream).</strong> (emphasis theirs)</p>
</blockquote>
<p>Effectively, A1 advertises up to <strong>150Mbit/s</strong> of which they are only required to deliver <strong>20Mbit/s</strong>. I am in contact with the Konsumentenschutz and will update this post with further developments.</p>
<p><em>I’ve added the conversations I had with A1 service team and the PDFs with their terms of service to the end of this post.</em></p>
<h2 id="appendix">Appendix</h2>
<h3 id="timeline">Timeline</h3>
<ul>
<li><code>2018-06-16</code>, Saturday - signed contract</li>
<li><code>2018-06-21</code>, Thursday - received router, call <strong>#1</strong>, call <strong>#2</strong></li>
<li><code>2018-06-22</code>, Friday - DSL enabled by technician, call <strong>#3</strong>; got shitty ad from competitor</li>
<li><code>2018-06-24</code>, Sunday - call <strong>#4</strong>, antenna is promised but not sent</li>
<li><code>2018-06-25</code>, Monday - call <strong>#5</strong>, call <strong>#6</strong>, store does not give out antenna, call <strong>#7</strong>, call <strong>#8</strong>, call <strong>#9</strong>, store does give out antenna but does not have any left, call <strong>#10</strong></li>
<li><code>2018-07-14</code>, Saturday - article is published, no improvement, no antenna, call <strong>#11</strong></li>
<li><code>2018-07-18</code>, Wednesday - call <strong>#12</strong>, call <strong>#13</strong>, got survey from competitor</li>
<li><code>2018-07-19</code>, Thursday - call to Konsumentenschutz</li>
<li><code>2018-08-06</code>, Monday - antenna received and no improvement</li>
<li><code>2018-08-07</code>, Tuesday - article updated.</li>
<li><code>2018-08-16</code>, Thursday - sent an annoyed mail to support asking for further directions</li>
<li><code>2018-08-17</code>, Friday - article updated.</li>
<li><code>2018-08-21</code>, Tuesday - response from A1 service team, suggesting downgrade</li>
<li><code>2018-08-22</code>, Wednesday - mail to A1 service team asking for cancellation due to extraordinary circumstances</li>
<li><code>2018-08-27</code>, Monday - response from A1 service team, cancellation due to extraordinary circumstances is denied, suggesting downgrade again</li>
<li><code>2018-09-06</code>, Tuesday - third call to Konsumentenschutz, am asked for a detailed mail including docs</li>
<li><code>2018-09-13</code>, Thursday - sent detailed mail to Konsumentenschutz</li>
<li><code>2018-09-13</code>, Thursday - article updated.</li>
</ul>
<h3 id="documents">Documents</h3>
<ul>
<li>A1: <a href="http://ghostlyrics.net/files/AGB-Access.pdf">AGB Access</a> (terms of service), retrieved on <code>2018-08-27</code></li>
<li>A1: <a href="http://ghostlyrics.net/files/EB-A1-Internet-L.pdf">EB-A1-Internet-L</a> (description of fees for package L), retrieved on <code>2018-08-27</code></li>
<li>A1: <a href="http://ghostlyrics.net/files/LB-A1-Internet-L.pdf">LB-A1-Internet-L</a> (description of services for package L), retrieved on <code>2018-08-27</code></li>
</ul>
<h3 id="correspondence">Correspondence</h3>
<h4 id="mail-1">Mail 1</h4>
<blockquote>
<p>Ich habe vor einiger Zeit (2018-06-18) bei Ihnen das 150 MBit/s
Hybridpaket unterzeichnet. Jetzt versuche ich, durch Auszenantenne,
zahlreiche Telefonate mit Ihrem Kundendienst (wie Sie sicher meiner
Kartei entnehmen koennen) und nachschlagen auf die von mir bezahlte
Leistung zu kommen.</p>
<p>Dies hat allerdings trotz Ihren aeuszerst bemuehten Technikern kaum zu
einer erkennbaren Besserung gefuehrt. Der hoechste jemals an meiner
Leitung gemessene Wert liegt immer noch deutlich unter dem
naechstniedrigerem Angebot dass Sie im Portfolio haben - naemlich bei
ca. der Haelfte der Leistung deren Vertrag ich mit Ihnen abgeschlossen
habe. Mir wurde am Telefon gesagt dass es trotz meiner zentralen Lage in
Graz nicht moeglich ist eine bessere Leistung zur Verfuegung zu stellen.</p>
<p>Im Anhang befindet sich das CSV mit Geschwindigkeitsmessungen ueber
speedtest.net. Ich moechte von Ihnen jetzt wissen was Sie gedenken zu
unternehmen bzw. welche Optionen Sie mir anbieten um diese Situation zu
beheben.</p>
<p>Falls Sie es tatsaechlich nicht schaffen die versprochene Leistung zur
Verfuegung zu stellen sehe ich mich gezwungen den Vertrag als
gegenstandslos zu betrachten.</p>
</blockquote>
<h4 id="reply-to-mail-1">Reply to mail 1</h4>
<blockquote>
<p>Guten Tag Herr Skiba,</p>
<p>danke für Ihr E-Mail.</p>
<p>Wir sind derzeit sehr gefragt. Bitte entschuldigen Sie unsere späte
Antwort.</p>
<p>Natürlich ist eine stabile und schnelle Internetverbindung wichtig. Wir
können jedoch nicht immer die maximale Geschwindigkeit garantieren. </p>
<p>Da uns Ihre Zufriedenheit aber wichtig ist, biete ich Ihnen gerne einen
kostenlosen Tarifwechsel auf einen niedrigeren und somit auch
günstigeren Tarif an, wie zum Beispiel A1 Internet S oder XS. Mehr
Informationen zu unseren aktuellen Tarifen finden Sie hier: https://www.a1.net/internet/festnetz-internet/tarife/s/internet-pur</p>
<p>Sind Sie mit dieser Lösung einverstanden? Dann geben Sie mir bitte in
den nächsten Tagen Ihren Wunschtarif bekannt. Antworten Sie einfach auf
mein E-Mail, vielen Dank. </p>
</blockquote>
<h4 id="mail-2">Mail 2</h4>
<blockquote>
<p>Nein, ein Tarifwechsel dieser Art ist für mich nicht akzeptabel -
insbesondere da dies einen weiteren massiven Geschwindigkeitsverlust
bedeuten würde. Von den theoretischen 150MBit/s aufgrund denen ich bei
genau Ihrer Firma den Vertrag abgeschlossen habe bieten Sie mir jetzt als
Ausweichmöglichkeit 40 bzw 20 an. Das ist keinesfalls ein realistisches
Angebot.</p>
<p>Aufgrund dessen dass A1 es nicht schafft die von mir gewünschte und
bezahlte Leistung zur Verfügung zu stellen, ist mein nächster Schritt die
außerordentliche Kündigung des Vertrages. Unter Betrachtnahme der Tatsache
dass ich im Besten Fall maximal die Hälfte der theoretischen Leistung
erreicht habe, kann hier von einem erfüllten Vertrag nicht die Rede sein.</p>
<p>Ich kündige hiermit den Vertrag außerordentlich.</p>
<p>Bitte lassen Sie mich noch wissen ob ich ihr Equipment (Modem,
Außenantenne, etc) zurücksenden muss oder in einem nahen A1 Shop abgeben kann.</p>
</blockquote>
<h4 id="reply-to-mail-2">Reply to mail 2</h4>
<blockquote>
<p>Lieber Herr Skiba,
meine Kollegin hat Ihnen bereits einen kostenlosen Tarifwechsel in einen kleineren Tarif angeboten. Bei den Geschwindigkeiten handelt es sich um “bis zu” Werte.</p>
<p>Über die Standleitung erreichen Sie in etwa Werte zwischen 50 und 60 Mbit/s im Download. Der Rest wird über das LTE Netz A1 Hybrid Power ermöglicht. Sofern Sie mit dem Produkt zu wenig Bandbreite erhalten können Sie natürlich auf ein kleineres Produkt wechseln.</p>
<p>Die Errichtung einer Funkstation ist immer mit großem Aufwand und sehr hohen Investitionen verbunden. Daher müssen wir im Zuge der Funknetzplanung alle Rahmenbedingungen sorgfältig abwägen.</p>
<p>Eine außerordentliche Kündigung können wir jedoch nicht anbieten. Unsere Leistungsbeschreibungen finden Sie unter www.A1.net/agb</p>
<p>Es tut uns leid, dass wir Ihnen dieses Mal nichts Besseres mitteilen können.</p>
<p>Information gemäß Alternative-Streitbeilegung-Gesetz (AStG): Wenn Sie mit unserer Antwort nicht zufrieden sind, können Sie sich an die Schlichtungsstelle der RTR GmbH wenden. Alle Kontaktdaten sowie Informationen zum Verfahren finden Sie unter www.rtr.at. Kommt es zu einem Schlichtungsverfahren, wird A1 daran teilnehmen.</p>
</blockquote>
<h3 id="measurements">Measurements</h3>
<table>
<thead>
<tr>
<th>IP_ADDRESS</th>
<th>TEST_DATE</th>
<th>TIME_ZONE</th>
<th>DOWNLOAD_MEGABITS</th>
<th>UPLOAD_MEGABITS</th>
<th>LATENCY_MS</th>
<th>SERVER_NAME</th>
<th>DISTANCE_MILES</th>
</tr>
</thead>
<tbody>
<tr>
<td>194.118.72.xxx</td>
<td>6/22/2018 8:03 AM</td>
<td>GMT</td>
<td>36.76</td>
<td>9.12</td>
<td>13</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>194.118.82.xxx</td>
<td>6/22/2018 8:33 AM</td>
<td>GMT</td>
<td>35.71</td>
<td>9.29</td>
<td>12</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>194.118.82.xxx</td>
<td>6/22/2018 8:42 AM</td>
<td>GMT</td>
<td>35.17</td>
<td>9.49</td>
<td>12</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>194.118.120.xxx</td>
<td>6/22/2018 8:57 AM</td>
<td>GMT</td>
<td>44.30</td>
<td>11.11</td>
<td>13</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>194.118.120.xxx</td>
<td>6/22/2018 9:00 AM</td>
<td>GMT</td>
<td>35.17</td>
<td>9.56</td>
<td>12</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/22/2018 9:07 AM</td>
<td>GMT</td>
<td>36.57</td>
<td>9.64</td>
<td>13</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/22/2018 9:10 AM</td>
<td>GMT</td>
<td>37.94</td>
<td>9.72</td>
<td>12</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/22/2018 9:12 AM</td>
<td>GMT</td>
<td>35.59</td>
<td>9.51</td>
<td>14</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/22/2018 9:15 AM</td>
<td>GMT</td>
<td>34.23</td>
<td>9.91</td>
<td>13</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/22/2018 9:23 AM</td>
<td>GMT</td>
<td>33.17</td>
<td>9.68</td>
<td>15</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/22/2018 10:00 AM</td>
<td>GMT</td>
<td>33.33</td>
<td>9.09</td>
<td>14</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/22/2018 1:01 PM</td>
<td>GMT</td>
<td>17.12</td>
<td>12.17</td>
<td>14</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/22/2018 1:02 PM</td>
<td>GMT</td>
<td>49.14</td>
<td>14.94</td>
<td>14</td>
<td>Graz</td>
<td>100</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/24/2018 3:53 PM</td>
<td>GMT</td>
<td>7.96</td>
<td>7.99</td>
<td>22</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/24/2018 3:53 PM</td>
<td>GMT</td>
<td>16.73</td>
<td>6.18</td>
<td>13</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/24/2018 3:54 PM</td>
<td>GMT</td>
<td>3.05</td>
<td>7.76</td>
<td>20</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/24/2018 3:55 PM</td>
<td>GMT</td>
<td>20.65</td>
<td>5.20</td>
<td>20</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/24/2018 3:57 PM</td>
<td>GMT</td>
<td>17.31</td>
<td>5.83</td>
<td>28</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/24/2018 4:00 PM</td>
<td>GMT</td>
<td>12.23</td>
<td>8.07</td>
<td>12</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/24/2018 4:02 PM</td>
<td>GMT</td>
<td>18.73</td>
<td>6.68</td>
<td>12</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/24/2018 4:03 PM</td>
<td>GMT</td>
<td>31.96</td>
<td>7.41</td>
<td>23</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/24/2018 4:04 PM</td>
<td>GMT</td>
<td>33.91</td>
<td>9.51</td>
<td>9</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/25/2018 11:10 AM</td>
<td>GMT</td>
<td>63.10</td>
<td>22.54</td>
<td>9</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/25/2018 11:50 AM</td>
<td>GMT</td>
<td>65.69</td>
<td>23.26</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>91.113.127.xxx</td>
<td>6/25/2018 12:13 PM</td>
<td>GMT</td>
<td>62.78</td>
<td>24.52</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.80.90.xxx</td>
<td>6/25/2018 3:53 PM</td>
<td>GMT</td>
<td>35.24</td>
<td>9.08</td>
<td>11</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.80.90.xxx</td>
<td>6/25/2018 3:55 PM</td>
<td>GMT</td>
<td>55.65</td>
<td>24.46</td>
<td>12</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.80.90.xxx</td>
<td>6/25/2018 4:06 PM</td>
<td>GMT</td>
<td>55.07</td>
<td>21.74</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.80.90.xxx</td>
<td>6/26/2018 8:35 PM</td>
<td>GMT</td>
<td>60.55</td>
<td>24.92</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.80.90.xxx</td>
<td>6/29/2018 6:53 AM</td>
<td>GMT</td>
<td>55.18</td>
<td>23.65</td>
<td>12</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.141.xxx</td>
<td>7/18/2018 4:09 PM</td>
<td>GMT</td>
<td>35.41</td>
<td>9.63</td>
<td>8</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.141.xxx</td>
<td>7/18/2018 4:11 PM</td>
<td>GMT</td>
<td>34.28</td>
<td>9.35</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.140.xxx</td>
<td>7/18/2018 4:18 PM</td>
<td>GMT</td>
<td>35.15</td>
<td>9.70</td>
<td>11</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.140.xxx</td>
<td>7/18/2018 4:20 PM</td>
<td>GMT</td>
<td>35.42</td>
<td>9.67</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.140.xxx</td>
<td>7/18/2018 4:22 PM</td>
<td>GMT</td>
<td>57.43</td>
<td>25.04</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.140.xxx</td>
<td>7/18/2018 4:23 PM</td>
<td>GMT</td>
<td>62.88</td>
<td>23.82</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.140.xxx</td>
<td>7/18/2018 4:24 PM</td>
<td>GMT</td>
<td>64.72</td>
<td>25.53</td>
<td>11</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.140.xxx</td>
<td>7/18/2018 4:26 PM</td>
<td>GMT</td>
<td>64.06</td>
<td>24.64</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.140.xxx</td>
<td>7/18/2018 4:30 PM</td>
<td>GMT</td>
<td>56.46</td>
<td>24.93</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.140.xxx</td>
<td>7/18/2018 4:32 PM</td>
<td>GMT</td>
<td>61.14</td>
<td>22.91</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.140.xxx</td>
<td>7/18/2018 4:33 PM</td>
<td>GMT</td>
<td>35.44</td>
<td>9.61</td>
<td>8</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.136.xxx</td>
<td>7/18/2018 4:37 PM</td>
<td>GMT</td>
<td>56.96</td>
<td>24.67</td>
<td>9</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.136.xxx</td>
<td>7/18/2018 4:38 PM</td>
<td>GMT</td>
<td>18.65</td>
<td>17.02</td>
<td>17</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.136.xxx</td>
<td>7/18/2018 4:45 PM</td>
<td>GMT</td>
<td>17.96</td>
<td>17.27</td>
<td>16</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.136.xxx</td>
<td>7/18/2018 5:16 PM</td>
<td>GMT</td>
<td>20.98</td>
<td>16.14</td>
<td>18</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.136.xxx</td>
<td>7/18/2018 5:48 PM</td>
<td>GMT</td>
<td>31.39</td>
<td>25.36</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>193.83.136.xxx</td>
<td>7/18/2018 5:49 PM</td>
<td>GMT</td>
<td>46.84</td>
<td>24.70</td>
<td>10</td>
<td>Vienna</td>
<td>0</td>
</tr>
<tr>
<td>194.118.74.xxx</td>
<td>8/6/2018 10:54 PM</td>
<td>GMT</td>
<td>72.98</td>
<td>24.79</td>
<td>13</td>
<td>Linz</td>
<td>100</td>
</tr>
</tbody>
</table>Reading recommendations (2018-05-18)2018-05-18T22:00:00+02:002018-05-18T22:07:00+02:00Alexander Skibatag:ghostlyrics.net,2018-05-18:/reading-recommendations-2018-05-18.html<p>Recently I’ve spent a lot of time playing <a href="https://store.steampowered.com/app/589360/Ni_no_Kuni_II_Revenant_Kingdom/">Ni No Kuni 2: Revenant Kingdom</a> and some <a href="https://store.steampowered.com/app/203160/Tomb_Raider/">Tomb Raider</a>, in addition to one of my classics, <a href="https://store.steampowered.com/app/386620/Cook_Serve_Delicious_2/">Cook, Serve, Delicious! 2</a>. I’ve also taken some time to revisit <a href="http://finalfantasy.wikia.com/wiki/Final_Fantasy_Tactics_A2:_Grimoire_of_the_Rift">Final Fantasy Tactics Advance 2: Grimoire of the Rift</a>, my favorite title …</p><p>Recently I’ve spent a lot of time playing <a href="https://store.steampowered.com/app/589360/Ni_no_Kuni_II_Revenant_Kingdom/">Ni No Kuni 2: Revenant Kingdom</a> and some <a href="https://store.steampowered.com/app/203160/Tomb_Raider/">Tomb Raider</a>, in addition to one of my classics, <a href="https://store.steampowered.com/app/386620/Cook_Serve_Delicious_2/">Cook, Serve, Delicious! 2</a>. I’ve also taken some time to revisit <a href="http://finalfantasy.wikia.com/wiki/Final_Fantasy_Tactics_A2:_Grimoire_of_the_Rift">Final Fantasy Tactics Advance 2: Grimoire of the Rift</a>, my favorite title for the DS.</p>
<p>I’ve also discovered <a href="http://www.crunchyroll.com/">Crunchyroll</a> which is an awesome service which lets you stream licensed anime for free, legally. I’ll happily disable my adblocker for that service — <em>though I do find it curious that the ads I get are so strange. Sometimes they don’t load at all. Sometimes I get the same clip six times in a row.</em> So far I’ve checked out <em>Black Clover</em>, <em>Darling in the FRANXX</em>, <em>Restaurant to Another World</em> and <em>Interviews with Monster Girls</em>. Sadly, some series are not available in my region.</p>
<ul>
<li><a href="http://www.sueddeutsche.de/wirtschaft/eu-kommission-klage-deutschland-1.3983793">http://www.sueddeutsche.de/wirtschaft/eu-kommission-klage-deutschland-1.3983793</a> (German)</li>
<li><a href="https://blog.chromium.org/2018/05/evolving-chromes-security-indicators.html">https://blog.chromium.org/2018/05/evolving-chromes-security-indicators.html</a></li>
<li><a href="https://blog.innerht.ml/google-yolo/F">https://blog.innerht.ml/google-yolo/F</a> (Please don’t click anything on this site… including the cookie notice.)</li>
<li><a href="https://blogs.dropbox.com/tech/2018/04/4696/">https://blogs.dropbox.com/tech/2018/04/4696/</a> “MacOS monitoring the open source way”</li>
<li><a href="https://marco.org/2018/04/27/overcast42">https://marco.org/2018/04/27/overcast42</a> (Overcast reworked to work anonymously by default, option to migrate from existing account)</li>
<li><a href="https://panic.com/blog/mystery-of-the-slow-downloads/">https://panic.com/blog/mystery-of-the-slow-downloads/</a> (Panic working with ISPs to debug slowness)</li>
<li><a href="https://stardewvalley.net/stardew-valley-v1-3-beta/">https://stardewvalley.net/stardew-valley-v1-3-beta/</a></li>
<li><a href="https://techniktagebuch.tumblr.com/post/173931527347/14-mai-2018">https://techniktagebuch.tumblr.com/post/173931527347/14-mai-2018</a> (German, Komfortcheckin bei der Deutschen Bahn)</li>
<li><a href="https://www.destructoid.com/s-t-a-l-k-e-r-2-is-coming-in-2021-apparently-503146.phtml">https://www.destructoid.com/s-t-a-l-k-e-r-2-is-coming-in-2021-apparently-503146.phtml</a></li>
<li><a href="https://www.macstories.net/news/twitter-announces-new-end-of-life-date-for-apis-and-pricing-that-affects-third-party-apps/">https://www.macstories.net/news/twitter-announces-new-end-of-life-date-for-apis-and-pricing-that-affects-third-party-apps/</a></li>
<li><a href="https://www.reuters.com/article/us-britain-russia-chemicalweapons-german/wests-knowledge-of-novichok-came-from-sample-secured-in-1990s-report-idUSKCN1IH2HC">https://www.reuters.com/article/us-britain-russia-chemicalweapons-german/wests-knowledge-of-novichok-came-from-sample-secured-in-1990s-report-idUSKCN1IH2HC</a></li>
<li><a href="https://www.reuters.com/article/us-northkorea-nuclear-ctbto/nuclear-test-ban-body-says-ready-to-verify-korean-site-closure-if-asked-idUSKCN1IH2E4">https://www.reuters.com/article/us-northkorea-nuclear-ctbto/nuclear-test-ban-body-says-ready-to-verify-korean-site-closure-if-asked-idUSKCN1IH2E4</a></li>
<li><a href="https://www.theguardian.com/environment/2018/may/16/mysterious-rise-in-banned-ozone-destroying-chemical-shocks-scientists">https://www.theguardian.com/environment/2018/may/16/mysterious-rise-in-banned-ozone-destroying-chemical-shocks-scientists</a></li>
<li><a href="https://www.trueachievements.com/n23642/downloadable-discontent">https://www.trueachievements.com/n23642/downloadable-discontent</a> (An older, but very interesting discussion about DLC for games)</li>
<li><a href="https://www.trustwave.com/Resources/SpiderLabs-Blog/CVE-2018-1000136---Electron-nodeIntegration-Bypass/">https://www.trustwave.com/Resources/SpiderLabs-Blog/CVE-2018-1000136—Electron-nodeIntegration-Bypass/</a> (Electron has security issues, again)</li>
</ul>Interviewing for a successor2018-05-11T23:58:00+02:002018-05-18T22:09:00+02:00Alexander Skibatag:ghostlyrics.net,2018-05-11:/interviewing-for-a-successor.html<p>I left my job at <a href="https://icg.tugraz.at">the ICG</a> in March 2018. One of my last tasks there was helping in searching for a successor for my position whom I could hand over my responsibilities with as little worries as possible. I updated the same job posting that had been used to …</p><p>I left my job at <a href="https://icg.tugraz.at">the ICG</a> in March 2018. One of my last tasks there was helping in searching for a successor for my position whom I could hand over my responsibilities with as little worries as possible. I updated the same job posting that had been used to announce the opening when I applied and updated it with new phrasing. I wanted to emphasize that a lot of learning can be done on the job. Experience in the comprehensive list of open source technologies the institute uses was a definite plus but I was certain that a minimum of understanding of Linux, good written and spoken English as well as the willingness to learn were enough to grow into the job. <em>After all, usually people apply who do not have all qualifications matching your list but some that are not on the list and help them anyway.</em></p>
<p>I wanted to make sure that we had as much of an objective method to judge the applicants as possible — therefor I put together a questionnaire containing two real life scenarios as well as a short list of bonus points. These questions were discussed with the applicants and I decided which topics were sufficiently answered. I held the entire technical part of each interview.</p>
<p>I want to point out that my goal was not — as some of my colleagues joked — to create a test which one could “pass” or “fail”. I simply wanted to measure applicants by a more meaningful measure than “they were good” or “they were ok”. I had the hope that my scenarios would give us a heads-up whose technical knowledge was better if applicants were subjectively close to each other.</p>
<h2 id="section-1-vm-diagnosis-rescue">Section 1 - VM diagnosis & rescue</h2>
<p><em>You have a physical machine running a Hypervisor (e.g. Xen) and a virtual machine running a Debian based Linux distribution (e.g. Ubuntu). You notice that the VM has stopped checking in with your monitoring solution. What do you do?</em></p>
<div class="highlight"><pre><span></span><code>- contact via SSH
- check if the machine is listening (e.g. `ping`, `nmap`)
- check if the machine is running (e.g. `xl list`, `xl top`)
- send out notice that you're working on said machine (*bonus*)
</code></pre></div>
<p>The initial step of the diagnosis is for steps one can take really quickly. I accepted solutions that did not name command line utilities suggested if they served a similar purpose (e.g. <code>VBoxManage</code> would be fine). Bonus questions give additional points that can raise the score above the maximum points of a given question.</p>
<p><em>You have established that the machine is indeed not running. When you tried to restart the machine via the hypervisor, it is showing activity in the hypervisor output but it is neither accessible remotely (via SSH) nor does it show up in the monitoring solution. What are your next steps?</em></p>
<div class="highlight"><pre><span></span><code>- check log files
- host logs => there is nothing relevant in them
- guest logs
- centralized logging solution (*bonus*)
- try starting the machine with more verbose output from the hypervisor (*bonus*)
- check with some tool that displays screen of VM (e.g. VNC with SSH forwarding, `virt-manager`)
</code></pre></div>
<p>The second step is trying to figure out the cause of the issue after having verified the issue in step one.</p>
<p><em>You realize that the machine is not booting. It looks like a problem with GRUB but you are not entirely sure. You’d like to access the guest logs, just to be sure. The guest’s entire disk is a LVM logical volume mounted directly into the VM by the hypervisor. How do you proceed?</em></p>
<div class="highlight"><pre><span></span><code>- find a tool to mount the logical volume on the host
- read-only (*bonus*)
- `kpartx` (*bonus*)
- check the logs in `/var/log/syslog` and similars in `/var/log`. Check `/var/log/dpkg.log`.
</code></pre></div>
<p>Step number 3 is to make reasonably sure it is a problem that has surfaced due to a problem with GRUB and has not been triggered by something else entirely.</p>
<p><em>The chance that it is a GRUB problem is more likely than ever. How do you proceed to try and fix the VM?</em></p>
<div class="highlight"><pre><span></span><code>- boot from ISO (or remount read-write on host)
- `boot-repair` (*bonus*)
- reinstall GRUB
</code></pre></div>
<p>The last step of the first scenario deals with an actual attempt at fixing the VM. The infrastructure at ICG is built in a way that makes repairs more feasible than spinning up and configuring new machines without data loss.</p>
<p><em>Open question: What do you think could be the cause of such an issue?</em></p>
<p>No points were given for this question, but I noted down what the applicants came up with and commented on the likeliness of their thoughts, so they had some immediate feedback.</p>
<h2 id="section-2-server-best-practices">Section 2 - Server best practices</h2>
<p><em>You have a service that you need to provide to the whole internet (or rather, your colleagues who are currently abroad). It has at least one component accessible by a web browser and one more component (e.g. SSH, IMAP, POP) that needs to be protected. How would you make reasonably sure that things are protected?</em></p>
<div class="highlight"><pre><span></span><code>- protect the web service with a TLS certificate [and encryption]
- redirect port 80 to 445 to always enforce encryption
- implement a rate limit against brute force attacks (e.g. `fail2ban`, builtin software)
- have the server update the software on its on (or have a way to be notified of updates, e.g. mail, RSS)
- implement a backup strategy [and test it]
- provide VPN access or suggest using TU VPN and restrict firewall settings (*bonus*)
- **set up monitoring for aforementioned things**
</code></pre></div>
<p>The server best practices section was my attempt to get a feel for what the applicant knows about operations. While the previous scenario revolved around troubleshooting, this one is focused on knowledge and understanding of running servers in production. This was a question where I almost always received additional answers to the ones I hoped for.</p>
<h2 id="section-3-short-questions">Section 3 - Short questions</h2>
<p><em>Do you have any experience with:</em></p>
<div class="highlight"><pre><span></span><code>- Git
- Continuous integration (e.g. GitLab CI, Jenkins)
- Configuration management (e.g. Puppet, Chef, Salt)
- standard monitoring tools (e.g. Nagios, Sensu, Elastic products)
- NFS and auto-mounting
- web servers (e.g. Apache, Nginx)
- debugging software not written by you (e.g. Python code that shipped with your distribution)
</code></pre></div>
<p>This last section of questions aims to establish which topics the applicant might need training in order to fully understand and utilize existing ICG infrastructure.</p>
<h2 id="conclusion">Conclusion</h2>
<p>After careful review of all applicants and their technical skills and demonstrated understanding of systems in use I gave an informed recommendation on whom to hire. I had the — very short — opportunity to introduce my successor to the most critical systems. For everything else they will have to rely on the documentation I wrote, their team members and their own skillset.</p>
<p>I certainly wish them all the best.</p>Ljubljana 2018 (BSides Ljubljana)2018-03-24T00:35:00+01:002019-02-17T03:04:00+01:00Alexander Skibatag:ghostlyrics.net,2018-03-24:/ljubljana-2018-bsides-ljubljana.html<p>Going to Ljubljana for BSides Ljubljana 2017 was comparatively without troubles, not counting my scheduling difficulties resulting in several annoying waiting times.</p>
<h2 id="day-1">Day 1</h2>
<p>I took the train from Graz and <a href="https://www.goodreads.com/book/show/39082727-open-minds">read a book I had previously purchased but never read</a>, as I usually do when trying to pass time …</p><p>Going to Ljubljana for BSides Ljubljana 2017 was comparatively without troubles, not counting my scheduling difficulties resulting in several annoying waiting times.</p>
<h2 id="day-1">Day 1</h2>
<p>I took the train from Graz and <a href="https://www.goodreads.com/book/show/39082727-open-minds">read a book I had previously purchased but never read</a>, as I usually do when trying to pass time. When the scheduled arrival time came I was a bit nervous as I feared I might have missed my stop. Several minutes after the scheduled time I still didn’t hear an announcement saying the next stop would be Ljubljana. Nervousness turned into slight annoyance. By now I just assumed I had either missed the stop - which was bad - or the train was delayed - which was slightly less bad. I didn’t need to catch a connection. It just meant the people responsible for the apartment would have to wait even longer for me though.</p>
<p>I left the train and wondered why the train station would be so small. In retrospect I only saw the underground and the back exit on that day. The actual train station is larger, though not especially large. It’s also a short walk away from most of the tracks, which was part of the reason for my confusion.</p>
<p>Since - <em>obviously</em> - leaving the train station through the wrong exit does not lead one directly to waiting taxis, I had no luck there. So I asked Google Maps to find me an ATM and plot a route to my accommodation. The suggestion included a bus ride with pricing information for the bus. Upon entering I saw people paying with a contactless card. No one paid in cash as it is common in Graz. I asked the bus driver but he waved me away, so I took a seat, next to a helpful information panel. Said panel happened to spell out the usage instructions for the contactless payment but not where to get such a card.</p>
<p>Once I arrived at the loft - <a href="https://www.booking.com/hotel/si/tobacna-red.html">Tobacna Red</a> - it really was as nice as the reviews and images had suggested. I don’t remember asking my contact for information about the Urbana bus cards which was an oversight. I ventured out to find something to eat and asked in a kiosk for the tickets because I had read earlier on the Internet that you could “get them basically everywhere”. So, yeah, newsflash. Don’t believe everything on the Internet, regardless of how nicely made the site is. Anyway, the friendly lady at the kiosk couldn’t help me and I had happened to find a resident whose English wasn’t up to explaining me where to go either though she clearly understood what I meant.</p>
<p>I had lunch at <a href="http://metainbazilika.si">Meta in Bazilika</a> where the hint from the waiter not to take the “wok risotto” should’ve been a clue not to eat there. Or the fact that despite the nice weather both the garden and the interior were completely empty.</p>
<blockquote>
<p>I’m honest, the wok risotto… don’t take that. It’s just not good.</p>
</blockquote>
<p>Well, thanks for that, but neither was the risotto with turkey and tomatoes. Now, I’m <a href="http://ghostlyrics.net/pages/cooking-with-friends.html#cooking-with-friends">not a cook</a>, so what do I know… but <em>you might want to try seasoning the turkey</em> next time. Or making the risotto actually creamy. However, the waiter also gave me the hint that the Urbana card was available “in the center”. </p>
<p>After venturing there, I found a tourist information spot which sold the cards. Paid €2 for the card and €5 for an initial charge. Then I walked up the castle hill but by the time I was done taking some pictures and having an initial walk around the castle it was too late to go inside with only 20 minutes remaining.</p>
<p><a href="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1820.JPG"><img alt="View of some part of Ljubljana, taken from the castle hill in the afternoon sun" src="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1820-thumb.JPG"></a></p>
<p><a href="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1819.jpg"><img alt="A tower as part of the castle in Ljubljana, Slovenia" src="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1819-thumb.jpg"></a></p>
<p>So, down into the old parts of the town it was. I fancied a cake and looked around until I found a restaurant with great looking Tiramisu visible from outside. Sadly, the waiter told me he could not sell me the Tiramisu. It was reserved for dinner guests and official dinner hours wouldn’t start until later. However, he pointed me to a café which serves great cakes. I checked out <a href="https://www.facebook.com/Cokoladnica/">Slaščičarna pri Vodnjaku</a>. The cake made with Nutella and bananas was delicious. The tea was… okay I guess. I have rarely had fruit tea that was that sour though - not sure what was in there. I even ventured back to the restaurant to thank the waiter for his suggestion after checking whether he was currently busy. That earned me another recommendation - <a href="http://www.lepetit.si">Le Petit Cafe</a> which served excellent breakfast, according to him. <em>Now, breakfast isn’t really my time of day, but this opinion slightly changes when it’s served until 1 PM.</em></p>
<p>After that I was getting tired, so I grabbed a Sub for later and headed home. By foot, since the route planner didn’t suggest any buses. After checking I realized why. Going by foot was 12 minutes. Waiting for the next bus would’ve been 24 minutes. <em>Getting over that annoyance was several days.</em></p>
<h2 id="day-2">Day 2</h2>
<h3 id="bsides">BSides</h3>
<p>Due to sleepiness I only attended the last few seconds of the BSides keynote even though the event was literally in the next building. Also, before I forget, the videos have been <a href="https://archive.org/details/BSidesLjubljana2018">archived at archive.org</a>. If you want to watch just one talk, make it “The consequences of bad security and privacy in healthcare” by <a href="https://twitter.com/_j3lena_">Jelena Milosevic</a>.</p>
<h4 id="one">one</h4>
<p>The first talk I attended was <a href="https://0x7e2.bsidesljubljana.si/security-automation-ci-pipeline-abdollah-shajadi/">Security Automation in CI pipeline</a>. I considered most of the lessons from there obvious, but this is after working as a developer and as an admin with a CI pipeline I built due to personal interest. <em>Basically if things can be automated to avoid problems, let’s try to automate them.</em> I don’t think many companies have existing pipelines in place that allow for testing security in a reproducible and automated way. Of particular interest to me was the way this was suggested in the talk.</p>
<p>The (GitLab) pipeline had a test stage, a deploy-to-staging stage, ran the security tests against staging and afterwards deployed to production. I like this idea but am somewhat curious how much delay this separation adds. I usually try to increase parallelism and would’ve preferred an approach in which the security testing isn’t adding 2 mores stages. My preference for this is because stages are run sequentially while jobs in the same stage can be run in parallel. (<a href="https://docs.gitlab.com/ee/ci/yaml/">Gitlab terminology and CI doc</a>)</p>
<h4 id="two">two</h4>
<p>I listened to the last words from the first talk in track 1 since my talk ended early. The presenter had to defend his work and lecture since no one outside the corporate/government environment actually felt the need to decrypt QUIC and TLS 1.3 traffic. I sat down for <a href="https://0x7e2.bsidesljubljana.si/trape-evolution-phishing-attacks-jose-pino-jhonathan-espinosa/">Trape – the evolution of phishing attacks</a>.</p>
<p>I don’t think I know quite enough about how phishing attacks and persistence on machine are typically done to properly evaluate the use of Trape. Quite frankly, while the automated profiling of social media and general website accounts seemed handy, they didn’t impress me. Yes, that was certainly convenient but I hardly found exploitation of browser implementation details from a local server all that exciting.</p>
<h4 id="three">three</h4>
<p><a href="https://0x7e2.bsidesljubljana.si/consequences-bad-security-privacy-health-care-jelena-milosevic/">The consequences of bad security and privacy in healthcare</a> was my favorite talk this BSides. It wasn’t purely technical nor was it theoretical. Instead, it was a window into how hospital IT security is often run. Opsec as seen in reality. Some of the results where really bleak and quite frankly, horrifying in terms of possible implications for abuse of power, abuse of data or loss of data.</p>
<p>Here’s a quote - which I note from my memories instead of the stream, so it might not be entirely accurate:</p>
<blockquote>
<p>So, I asked them, have they upgraded all systems and secured all things properly. And they answered, yes, of course, everything is fine. But then you find a blood bank running on Windows XP.</p>
</blockquote>
<p>These are the scenarios that make you shiver as someone with even a faint interest in information security. Mission critical infrastructure running on an OS of which even the successor has already been retired.</p>
<h4 id="lunch">lunch</h4>
<p>There was pizza. Pizza is the default for BSides events from what I’ve seen so far, except when you’re <a href="https://www.bsidesroma.it">in the land of pizza</a> in which case there’s a mixed buffet arranged by a catering firm.</p>
<h4 id="four">four</h4>
<p>Someone made a joke up front how the <a href="https://0x7e2.bsidesljubljana.si/docker-security-simon-janz/">Docker security</a> talk would probably be short. It was. It was extremely short and disappointing. I joined the talk in the hope of learning something valuable that might be substantial to gaining an understanding of the security aspects of a technology I had almost no experience with yet.</p>
<p>There are two sides to this talk: One was great and one was depressing. The depressing part was how the advice for Docker security came down to three bullet points:</p>
<ul>
<li>don’t use <code>--privileged</code></li>
<li>don’t mount the Docker socket inside the container</li>
<li>don’t use the <code>docker</code> group and prefer usage of <code>sudo</code> instead</li>
</ul>
<p>I have furthermore been told that this should’ve been extended by at least:</p>
<ul>
<li>drop the <code>root</code> privileges in the container </li>
<li>if possible</li>
<li>as soon as possible</li>
</ul>
<p>Now, the <strong>cool</strong> part of this was that the speaker demonstrated the ways each of these flaws could be used to gain <code>root</code> on the host. Frankly speaking, that these kind of configurations might be deployed to production are a bit terrifying. </p>
<h4 id="five">five</h4>
<p>The speaker in <a href="https://0x7e2.bsidesljubljana.si/not-fail-security-professional-lessons-learned-neven-biruski/">How (not) to fail as a security professional [Lessons learned]</a> has been working in InfoSec, development and administration for years and shared some advice how to fail. While the talk was indeed very entertaining and certainly helpful, I don’t remember a good lot of it. One should think that not being an asshole and never stopping to learn would be a good starting point for people in <em>any</em> career. <em>Also, writing articles about individual talks several weeks after the talk without any notes isn’t particularly easy…</em></p>
<h4 id="six">six</h4>
<p>The <a href="http://www.finux.co.uk">keynote speaker, Finux</a> threw up an impromptu version of the third part of his privacy focussed lecture. I’ll be frank, I didn’t like part 1 a lot in 2016. However, I was positively surprised by the content and the blend of disciplines in this one. The impact of architecture on the concept of privacy was a fascinating topic I’d probably never have considered getting informed about.</p>
<h3 id="csides-so-to-say">CSides, so to say</h3>
<p>After listening with a sharp mind for the whole day I wanted some relaxation and went to one of the fancier restaurants. I wasn’t exactly sure what to go for, but ended up in <a href="http://vanderhotel.com/eng/food_and_drink/dinner_a_la_carte">Vander</a> restaurant, eating boar and <a href="https://twitter.com/Ghostlyrics/status/972548473512955905">fancy dessert</a>. The city is lovely in the evening - even when it was pitch dark, people were still out and about, huddling around heating lamps and enjoying their drinks near the river. The atmosphere was amazing and I struggle to imagine how nice it has to be when it’s not too cold for my taste. Ljubljana’s cafés also happened to have <a href="https://twitter.com/Ghostlyrics/status/972539706188673024">fruit tea in stock</a> which was a huge step up from my Rome visit. ;)</p>
<p><a href="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1864.jpg"><img alt="Shot across the river, people sitting around heating lamps in front of a brightly lit bar, shot taken during the dark of the night" src="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1864-thumb.jpg"></a></p>
<h2 id="day-3">Day 3</h2>
<p>I checked out at 11:00 and sat around until 16:00 when my train left back for Graz. The weather wasn’t suited for grand adventures given that there was constant slight rain that made the perceived temperature drop. I’m already constantly cold, so no need to stay outside longer than necessary in suboptimal conditions. Still, I was inclined to check out the café and headed there. I arrived and it was packed. Even the tables on the outside below big umbrellas with heating lamps were full.</p>
<p>Resorting to the <a href="http://www.kaval-group.si/lolita.asp">Café Lolita</a> where I had seen the waiter juggling the evening before, I had the most delicious <a href="https://en.wikipedia.org/wiki/Black_Forest_gateau">Black Forest cake</a> I’ve ever tasted. I ordered that with “hot chocolate” and was pleasantly surprised when I actually <em>got</em> hot chocolate instead of the regular cocoa. <em>As an aside, I order hot chocolate since I’m used to getting cocoa and the term seems to be more common in the foreign countries I’ve been to yet than just cocoa.</em> </p>
<p><a href="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1878.jpg"><img alt="A rectangular dish with a small piece of Black Forest cake. Behind the dish a cup with liquid brown chocolate" src="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1878-thumb.jpg"></a></p>
<p>Since I sat there for several hours, I also had non-alcoholic punch which was very tasty. I liked the berries and mandarin oranges a lot. I wholeheartedly recommend this place.</p>
<p>Of course, no place is perfect.</p>
<blockquote>
<p>I realize I’m the stupid tourist her[e] but wouldn’t you want to label your restrooms in your prime location cafe in a way that is somewhat clear to foreigners? ~Alexander Skiba (@ghostlyrics), <a href="https://twitter.com/Ghostlyrics/status/972831514110066688">March 11, 2018</a></p>
</blockquote>
<p><a href="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1879.jpg"><img alt="A tall glass filled with red punch. It has fruits swimming in the punch" src="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1879-thumb.jpg"></a></p>
<p>After some more sitting around and waiting I finally walked to the train station, all the while looking for some kind of food place along the way. None of them tickled my fancy, so I boarded hungrily and made for the dining car after a while. Food there was rather plain, but I liked the open car. The low chair backs and plush seats combined with large panorama windows reminded me of the <a href="http://www.imdb.com/title/tt3402236/">Murder in the Orient Express</a> movie that had impressed me last year.</p>
<p><a href="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1882.jpg"><img alt="A wide open dining car with cozy benches the low backs of which offer a great view of the scenery through panorama windows" src="http://ghostlyrics.net/images/2018-03-ljubljana/IMG_1882-thumb.jpg"></a></p>
<p>As an aside, I <em>did</em> check out the train station hall and noticed something that would’ve helped me a lot on my first day: Of course, the tourist information point <em>inside</em> the train station would have been the other viable option for purchasing an Urbana card. <em>Had one realized that there was a main building. Had one bothered to check inside.</em></p>
<!-- images -->Reading recommendations (2018-02-19)2018-02-19T01:07:00+01:002018-02-19T01:07:00+01:00Alexander Skibatag:ghostlyrics.net,2018-02-19:/reading-recommendations-2018-02-19.html<p>I spend most of my time with <a href="http://store.steampowered.com/app/595520/FINAL_FANTASY_XII_THE_ZODIAC_AGE/">Final Fantasy XII</a> recently which has been remastered for PC and is as great as I remember. Some light reading, novels and writing job applications are what the rest of my free time was invested in. Apart from that I continue to play …</p><p>I spend most of my time with <a href="http://store.steampowered.com/app/595520/FINAL_FANTASY_XII_THE_ZODIAC_AGE/">Final Fantasy XII</a> recently which has been remastered for PC and is as great as I remember. Some light reading, novels and writing job applications are what the rest of my free time was invested in. Apart from that I continue to play <a href="https://www.finalfantasyxiv.com">Final Fantasy XIV</a> but I <a href="http://ghostlyrics.net/tag/stories.html">write about that</a> from time to time anyway.</p>
<ul>
<li><a href="http://bhagpuss.blogspot.com/2017/09/the-medium-was-tedium-everquest-eq2.html">http://bhagpuss.blogspot.com/2017/09/the-medium-was-tedium-everquest-eq2.html</a></li>
<li><a href="http://blog.erratasec.com/2018/01/the-problematic-wannacry-north-korea.html#.Wm8pn2aZOlk">http://blog.erratasec.com/2018/01/the-problematic-wannacry-north-korea.html#.Wm8pn2aZOlk</a></li>
<li><a href="http://blog.instapaper.com/post/170231611161">http://blog.instapaper.com/post/170231611161</a> (10 Years of Instapaper)</li>
<li><a href="http://blog.rescuetime.com/science-of-willpower/">http://blog.rescuetime.com/science-of-willpower/</a></li>
<li><a href="http://blog.rescuetime.com/weekly-roundup-noisy-office/">http://blog.rescuetime.com/weekly-roundup-noisy-office/</a></li>
<li><a href="https://eclecticlight.co/2017/12/10/last-week-on-my-mac-documenting-the-hidden/">https://eclecticlight.co/2017/12/10/last-week-on-my-mac-documenting-the-hidden/</a></li>
<li><a href="https://twitter.com/pgwipeout/status/958330210348347392">https://twitter.com/pgwipeout/status/958330210348347392</a> (Live tweets of a pen test)</li>
<li><a href="https://whydoesaptnotusehttps.com">https://whydoesaptnotusehttps.com</a></li>
<li><a href="https://www.cbsnews.com/news/dutch-intelligence-us-fbi-russian-hacking-cozy-bear-democratic-national-committee/">https://www.cbsnews.com/news/dutch-intelligence-us-fbi-russian-hacking-cozy-bear-democratic-national-committee/</a></li>
<li><a href="https://www.macrumors.com/2017/09/20/bluetooth-wifi-not-disabled-ios-11-control-center/">https://www.macrumors.com/2017/09/20/bluetooth-wifi-not-disabled-ios-11-control-center/</a></li>
<li><a href="https://www.macrumors.com/2017/10/06/eff-says-ios-11-control-center-toggles-misleading/">https://www.macrumors.com/2017/10/06/eff-says-ios-11-control-center-toggles-misleading/</a></li>
<li><a href="https://www.nytimes.com/interactive/2018/01/27/technology/social-media-bots.html">https://www.nytimes.com/interactive/2018/01/27/technology/social-media-bots.html</a></li>
<li><a href="https://www.polygon.com/2017/8/20/16174374/playstation-4-download-speed-sucks">https://www.polygon.com/2017/8/20/16174374/playstation-4-download-speed-sucks</a></li>
<li><a href="https://www.vox.com/policy-and-politics/2018/1/29/16906558/anthem-emergency-room-coverage-denials-inappropriate">https://www.vox.com/policy-and-politics/2018/1/29/16906558/anthem-emergency-room-coverage-denials-inappropriate</a></li>
<li><a href="https://www.wired.com/story/tinder-lack-of-encryption-lets-strangers-spy-on-swipes/">https://www.wired.com/story/tinder-lack-of-encryption-lets-strangers-spy-on-swipes/</a></li>
</ul>Final Fantasy XIV: Stories of Departures2018-01-29T00:27:00+01:002018-01-29T12:54:00+01:00Alexander Skibatag:ghostlyrics.net,2018-01-29:/final-fantasy-xiv-stories-of-departures.html<p><em>This wasn’t an easy post to write but I still needed to get it out.</em> You can ignore the following while muttering <code>#mmoproblems</code> to yourself. I won’t fault you. I’d still appreciate if you kept on reading though.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-departure/bed.png"><img alt="Kakysha lying in bed and contemplating" src="http://ghostlyrics.net/images/final-fantasy-departure/bed-thumb.png"></a></p>
<p>I have been thinking. There’s an aspect to …</p><p><em>This wasn’t an easy post to write but I still needed to get it out.</em> You can ignore the following while muttering <code>#mmoproblems</code> to yourself. I won’t fault you. I’d still appreciate if you kept on reading though.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-departure/bed.png"><img alt="Kakysha lying in bed and contemplating" src="http://ghostlyrics.net/images/final-fantasy-departure/bed-thumb.png"></a></p>
<p>I have been thinking. There’s an aspect to playing an online game that was somewhat unexpected to me - you bond with people even though you don’t personally know them. You log in every so often and run with the same crowd (yes, I totally typoed that into “crown” at first). You check in with <a href="http://ghostlyrics.net/final-fantasy-xiv-stories-from-the-regulars.html">the regulars</a> from your Free Company (read: guild). You have a set of people in your friends list. Maybe you have some additional linkshells (read: private group chats) that you like to visit every so often.</p>
<p>There’s a certain comfort in seeing familiar… well, not exactly faces. You meet avatars, fantastical characters that sometimes make you forget you’re there together with real people. For every player character there’s a person sitting somewhere behind a keyboard or a gamepad (well, almost, but botting is technically against the TOS).</p>
<p>I’m not a person to bond or trust easily. That’s just my personality. The interaction by proxy, like the ingame avatars makes things much, much easier though. I can still be witty, make stupid jokes, annoy others with inappropriate comments and help them all the while. But if I decide to cease interaction, that’s easier too. That’s the part where your brain tricks you into thinking even people you have spent many hours with are not important because they’re “hidden” behind characters.</p>
<p>I have watched the ebb and flow of people in our FC. FFXIV is a highly cooperative game, so you feel the impact of fellow players not being around anymore. It’s not necessarily that you’re losing. It’s the feeling of loss despite achieving your goals. The lessened atmosphere. The absence of a familiar friendly face.</p>
<p>This post was prompted by someone whom I consider a good friend leaving the FC. But the thoughts behind it have been true for a while now.</p>
<h2 id="departures">Departures</h2>
<p>Whenever people leave I wonder what their reasons were. Were they unhappy? Did they get into an argument? Did their friends wander off? Or perhaps something else alltogether?</p>
<p>I try to talk to people, then. Yes, talking is hard, I get that. However, I consider not trying a personal failure. It’s not that I have the need to convince people to return. My curiousity drives me to learn their reasons for leaving so that perhaps the FC can be a more friendly place in the future with fewer reasons for members to leave.</p>
<h3 id="memories">memories</h3>
<p>I remember a while ago when a group of friends left. They were open to discussion and it was clear from the beginning that the group had only sought temporary refuge at The Black Crown. Them leaving to start up their own Free Company was a decision that was given a lot of thought. They are still open to communication and it was a pleasure to host them as long as it lasted.</p>
<p>I remember someone leaving who was a roamer. It’s hard to quantify how many of players are this type of person, but they did not stay long in any FC. They even said so up front and close to no one gave it a lot of thought when they left, eventually. It hit a bit harder when their partner in crime left because they had earlier stated they would not leave together, but it wasn’t completely unexpected either.</p>
<p>I remember talking to Kakysha’s big brother at length why he left his previous FC, how he talked about a feeling of not belonging and why he preferred to play in solitude for a while. I think he described it as feeling alone in a crowd. I’ve suggested back then that perhaps it was not the right crowd for him while at that time not directly inviting them into our FC because I felt that was tactless. I merely stated he was welcome should he ever want to join. Kakysha and her brother rarely meet - Eorzea is a big world after all, but they enjoy each other’s company tremendously.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-departure/bigbrother.png"><img alt="Kakysha discussing important issues with her bigger brother in Kakysha's room" src="http://ghostlyrics.net/images/final-fantasy-departure/bigbrother-thumb.png"></a></p>
<p>I remember my honored friend leaving with neither farewell nor complaint. It still hurts. I inquired for their reasons and received a vague answer that perhaps it was due to an argument or something that another person might have said. Polite inquiry would not reveal a more concrete answer and I respect my friend too much to be nosier, even though I’m implictly required to be since my recent promotion to a leadership position in the FC. I was merely saddened that they neither tried to talk to leadership nor the person(s) in question. Without pointing out what exactly was wrong and talking through both actions and consequences, how can we strive to improve the trust and respect that I feel we owe our members? How can I try to provide sprouts (read: newcomers still in the early stages of the game) as comfortable a home as the Seraphs provided me when I was full of disappointment about my previous FC?</p>
<p><em>Should you read this, friend, good bye but not farewell. Know that you have a place at Crown, should you want to return.</em></p>
<h2 id="closing">closing</h2>
<p>Kakysha sends her greetings from Tamamizu where’s she’s still trying to gain the favor of the Kojin people so they grant her permission to obtain a striped ray. She’s looking forward to meeting the Ananta people though because she heard they are breeding elephants. Our favorite adventurer loves elephants. <em>She said to tell you she’s sorry this isn’t a more story-heavy post.</em></p>Final Fantasy XIV: Stories from the Regulars2017-10-24T15:42:00+02:002018-02-12T09:28:00+01:00Alexander Skibatag:ghostlyrics.net,2017-10-24:/final-fantasy-xiv-stories-from-the-regulars.html<p>I’ve been playing <a href="http://eu.finalfantasyxiv.com">Final Fantasy XIV</a> (FFXIV) for more than half a year now. I can say without doubt that I have yet to run out of interesting stories to experience. The game is just so packed full with activities and seemingly none of them come without their own …</p><p>I’ve been playing <a href="http://eu.finalfantasyxiv.com">Final Fantasy XIV</a> (FFXIV) for more than half a year now. I can say without doubt that I have yet to run out of interesting stories to experience. The game is just so packed full with activities and seemingly none of them come without their own stories and lore.</p>
<p>After you have progressed to a certain point in the story, you can develop relations with beast tribes in the game, earning their respect and helping them develop their society. There is a long quest chain revolving around clumsy inspector Hildibrand Manderville. Even progression for gathering and crafting is involved with their own quests and stories.</p>
<p>I will not deny that there is a bit of stretch between patches when you have completed all that is to the current main story. I don’t think you can really prevent that while ensuring that the quality of the main story is top notch. Releasing too often might have the quality of the writing and the setting suffering and I most certainly do not advocate that tradeoff.</p>
<p>Let me tell you another chapter of <em>Kakysha Saranictil’s</em> story. <a href="http://ghostlyrics.net/final-fantasy-xiv-stories-about-fellowship.html#final-fantasy-xiv-stories-about-fellowship">Last time</a> I told you about her role in the liberation of Doma and Ala Mhigo. Kakysha has not been idle for long even though she managed to sneak in a little vacation at the Rhalgr’s Reach holiday resort with Deithwen Addan, a long time friend.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_15102017_011740.png"><img alt="Deithwen and Kakysha sitting on a high stone column looking down on Rhalgr's Reach" src="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_15102017_011740-thumb.png"></a></p>
<p>She was pleasantly surprised when Jenji Seraph also popped in. Images worthy of post cards were taken. “Wish you were here!”, to send home to other people in the Free Company.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-regulars/20171015004142_1.jpg"><img alt="Jenji, Deithwen and Kakysha taking a swim" src="http://ghostlyrics.net/images/final-fantasy-regulars/20171015004142_1-thumb.jpg"></a></p>
<p>Between helping with the efforts of rebuilding Ala Mhigo, she was helping out the Kojin beast tribe - a people of bipedal turtles - coming to terms with the conflict between the red and the blue faction of their people. She had some very busy weeks heading more into diplomacy and getting an understanding of more beast tribes. She reached an understanding with the Sahagin, fish people of La Noscea. She helped the colony of Vath, bug people of the Dravanian Forelands. She danced with the Vanu, bird people of The Sea of Clouds and even spoke to the Kobolds, who are mine dwellers of La Noscea. All that running around left her pretty exhausted but she found a serene place to relax in the newly arranged garden of her Free Company.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_20102017_213843.png"><img alt="Kakysha sitting in a garden, below a tree and between falling cherry blossoms" src="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_20102017_213843-thumb.png"></a></p>
<p>Kakysha tried to branch into a few more different activities, like learning the <em>Gladiator</em> class and improving her fishing skills. Furthermore she’s been on a few expeditions to Rabanastre, not all of which have been entirely successful. She met Deithwen again when exploring the desert for places to fish.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_03092017_045941.png"><img alt="Kakysha and Deithwen posing for an image" src="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_03092017_045941-thumb.png"></a></p>
<p>She vividly remembers trying to climb the big tower in Kugane. It was a frustrating experienced that she decided to abandon after a few days of trying. Making precise jumps in the middle of the night with little illumination is hard, which is why she asked her fellow climbers (via <code>/shout</code>) to put up their Wind-up Suns to light up the tower. The community was nice and obliged and soon they had half of the tower lit for climbers and the challenge at hand could continue regardless of sunlight.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_26062017_170355.png"><img alt="Multiple wind-up suns illuminating Kugane tower" src="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_26062017_170355-thumb.png"></a></p>
<p>Lately, there has been more work with the FC and Kakysha has been all over Eorzea, helping out where she could. She went with Syn Seraph, Jenji Seraph and Hugo Razgriz to Hax Silverstone’s battle against Susano. She joined Zireael Addan’s battle against Ravana and Hax’s battle against Sri Lakshmi. The greatest memory was helping Selina Unfug getting together a party of seasoned adventurers against Vishap for The Steps of Fate. The Full Party of Selina, Kakysha, Hax, Ianna Stark, Chiyuri Nelhal, Lieselotte Harnisch, Fancydoughnut Drayon and Seraphie Eryniel made short work of the dragon and didn’t even let him reach the third part of the arena. It was by far the best performance of this challenge ever experienced by Kakysha.</p>
<p>Some of this more recent work was due to more active recruitment of new members to Crown, some of it was due to more people joining Kakysha’s linkshell “Kaky’s dungeoneers” which she founded with the intent of helping people find helpful and friendly players for their duties.</p>
<h2 id="bonus-kakyshas-ninja-playstyle">bonus: Kakysha’s ninja playstyle</h2>
<p><em>Excerpt from Kakysha’s notes.</em></p>
<p>The usage of <strong>Mug</strong>, <strong>Armor Crush</strong>, <strong>Jugulate</strong> and <strong>Assassinate</strong> is pretty self explanatory. The only thing worth adding to <strong>Shadow Fang</strong> is that <strong>Fuma Shuriken</strong> is said to be affected by it, but I do not know this for certain.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_17092017_000312.png"><img alt="Kakysha sitting in the middle of Doton area of effect" src="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_17092017_000312-thumb.png"></a></p>
<h3 id="marking-single-target">marking & single target</h3>
<p>Before the fight, I prepare with <strong>Jin</strong> (Yellow) => <strong>Chi</strong> (Red) => <strong>Ten</strong> (Blue) to use <strong>Huton</strong> and be faster. I follow up with <strong>Hide</strong> since that resets the countdown for <strong>Mudra</strong>.</p>
<p>Depending on the situation I will open with <strong>Shadewalker+</strong> (see <a href="#macros">macros</a>) after the tank pulls to shift enmity for my following actions onto them.</p>
<p>If we’re up against a single target, I’ll use <strong>Mark</strong> (see <a href="#macros">macros</a>) to show my fellow adventurers which enemy will get +10% damage due to vulnerability.</p>
<ul>
<li>I follow this up by either Blue => Red => Yellow => <strong>Suiton</strong> and <strong>North Wind</strong> if we’re already in battle and there is a likelihood that the target will move. </li>
<li>If the battle has not yet started or I’m about to <strong>Mark</strong> a target while no enemy is alive that has ever had enmity on me, I’ll go with <strong>Hide</strong>.</li>
</ul>
<p>The mark will then be stabbed using <strong>Overwhelm</strong> (see <a href="#macros">macros</a>) and I’ll use as many skills that do a lot of damage while the vulnerability debuff is up, e.g.</p>
<ul>
<li><strong>Dream Within a Dream</strong></li>
<li>Blue => Red => <strong>Raiton</strong></li>
<li><strong>Kassatsu</strong> => Blue => Red => <strong>Raiton</strong></li>
<li><strong>Spinning Edge</strong> => <strong>Gust Slash</strong> => <strong>Duality</strong> => <strong>Aeolian Edge</strong></li>
</ul>
<p>If I’m not pressed for time and the likelihood of Area of Effect (AoE) attacks is low, <strong>Ten Chi Jin</strong> followed by Blue => <strong>Fuma Shuriken</strong>, Red => <strong>Raiton</strong>, Blue => <strong>Suiton</strong> is a good bet. In a more busy fight I’ll stick with the faster and more mobile <strong>Bhavacakra</strong> <em>so that the healers have less reason to hate me.</em></p>
<h3 id="multi-target">multi target</h3>
<p>When fighting multiple targets with a group it is important to realize that enemies who have not attacked me and have never been affected by my actions are unaware I exist. If all who are aware have perished, <strong>Hide</strong> may be used again without the need for <strong>Suiton</strong>. As ninja have great damage output against single targets, this might be worth keeping in mind.</p>
<p>If above section does not apply, one may safely use Yellow => Blue => Red => <strong>Doton</strong> to place an AoE with some duration. If one expects the battle to be relatively short, Yellow => Blue => <strong>Futon</strong> may be preferred. <strong>Futon</strong> <em>should also be preferred if one does not trust the tank to keep all enemies safely in one place.</em> Personally, I dislike using <strong>Death Blossom</strong> as it feels inefficient. <em>Furthermore I dislike hearing the sound of repeated</em> <strong>Death Blossom</strong> <em>as that gives me the impression my fellow ninjas are choosing the most convenient playstyle using only one button.</em> <strong>Hellfrog Medium</strong> is also a good choice when up against multiple opponents who are already aware of one.</p>
<h3 id="survival-skills">survival skills</h3>
<p>You do get into some hairy situations as an adventurer. I’ll use <strong>Shade Shift</strong> if I feel that a particularly heavy blow is coming and will use <strong>Bloodbath</strong> to get some health back while the healer might be busy helping others. If the situation is very dire, I’ll fall back to <strong>Second Wind</strong> though that one cannot be used very often and will rarely be enough to make a significant difference.</p>
<p>Since <strong>Shadewalker</strong> cannot be used too often either, I’ll sometimes throw in a <strong>Diversion</strong>.</p>
<p>I cannot overstate the usefulness of <strong>Shukuchi</strong> when evading large scale AoEs, especially in raids where there is often lots of space available. <em>Note: Do not use the skill to go through ticking AoEs, e.g. with Hashmal in Rabanastre.</em> <strong>Shukuchi</strong> can also be used to make up for situations when the party coordination isn’t great, e.g. who attacks which target. I’ll be able to help out with other targets with less travel time after I eliminated my own.</p>
<p>While I’m on the topic of survival - treat <strong>Ten Chi Jin</strong> as a double edged sword - it can massively increase your damage output but also plays tricks on your mind, e.g. “nah, I’ll want to get the third attack out, the healer will be fine if I get hit by the AoE once”. When in doubt, <em>do not use it.</em></p>
<h3 id="little-used-skills">little used skills</h3>
<p>I’ll freely admit that most of the time I forget that <strong>Smoke Screen</strong> even exists, the same goes for <strong>Hyoton</strong>. I deliberately do not use <strong>Death Blossom</strong> since it rarely feels appropriate. Enmity mitigation is easier done by using <strong>Shadewalker</strong> and then letting loose a burst of damage since the tank should try to get enmity back from non-tank roles anyway.</p>
<h3 id="macros">macros</h3>
<p>When I’m writing macros, I try to make sure they fit some criteria. I want my macros to be helpful first, but it’s important to me that they also have some entertainment value (e.g. they have some sass) and that they fit the lore of FFXIV.</p>
<p><strong>Shadewalker+</strong> - shift 80% of enmity generated after action to target of target</p>
<div class="highlight"><pre><span></span><code>/macroicon "Shadewalker"
/grin
/party Now blaming <tt> for everything that's wrong with Eorzea. auto-translate:Shadewalker
/action "Shadewalker" <tt>
</code></pre></div>
<p><strong>Mark</strong> - point out which target will get vulnerability debuff</p>
<div class="highlight"><pre><span></span><code>/macroicon Circle enemysign
/marking "Circle" <t>
/party Marking vulnerable target. auto-translate:Trick Attack imminent.
</code></pre></div>
<p><strong>Overwhelm</strong> - cast debuff and remove target indicator after effect has ended</p>
<div class="highlight"><pre><span></span><code>/macroicon "Trick Attack"
/action "Trick Attack"
/wait 10
/mk off
</code></pre></div>
<p><em>Prowess in battle, luck and a trustworthy selection of comrades is what brings you to the deepest chamber of the Lost Canals of Uznair. This was together with Mia Guilharthina.</em></p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_19102017_233221.png"><img alt="Kakysha, Mia and other treasure hunters posing in the deepest sluice of the Lost Canals" src="http://ghostlyrics.net/images/final-fantasy-regulars/ffxiv_19102017_233221-thumb.png"></a></p>
<hr>
<p>Image credit:</p>
<ul>
<li>“Jenji, Deithwen and Kakysha taking a swim” by ~Jenji Seraph</li>
</ul>An explanation to a hand full of rsync parameters2017-10-05T12:34:00+02:002017-10-05T12:34:00+02:00Alexander Skibatag:ghostlyrics.net,2017-10-05:/an-explanation-to-a-hand-full-of-rsync-parameters.html<p>If you check out one of the community’s most favourite syncing and file transfer tools, <code>rsync</code> on any day, you will notice it has quite a lot of parameters (<code>rsync --help</code>). Here’s a short explanation of some of them and what they can be used for - taken from …</p><p>If you check out one of the community’s most favourite syncing and file transfer tools, <code>rsync</code> on any day, you will notice it has quite a lot of parameters (<code>rsync --help</code>). Here’s a short explanation of some of them and what they can be used for - taken from the <a href="https://docs.gitlab.com/ce/ci/yaml/README.html">.gitlab-ci.yml</a> files of their respective projects.</p>
<h2 id="example-1">example 1</h2>
<p>This call is used in our automated deployment process for a web based project. It deploys the project into the correct directory, ensuring that it can still be read and executed after syncing. This is where the setting of group and user is important, since those are used for the creation of new files as well as reading of code by the interpreter. Since this is from a Git repository, it only makes sense to have a hidden file present to avoid syncing of specific files. Personally, I prefer to add <code>--stats</code> and <code>--human-readable</code> to every <code>rsync</code> that’s used for a deployment since you can see what changed on site in the GitLab build logs.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># In the .gitlab-ci.yml the command is on one line to avoid errors</span>
<span class="c1"># for the sake of readability I have reformatted the call.</span>
<span class="c1"># The order of the optional parameters has been changed to be</span>
<span class="c1"># more coherent.</span>
sudo rsync --recursive <span class="se">\</span>
--perms <span class="se">\</span>
--stats <span class="se">\</span>
--human-readable <span class="se">\</span>
--times <span class="se">\</span>
--group <span class="se">\</span>
--owner <span class="se">\</span>
--usermap<span class="o">=</span>gitlab-runner:labelme,0:labelme <span class="se">\</span>
--groupmap<span class="o">=</span>gitlab-runner:labelme,0:labelme <span class="se">\</span>
--super <span class="se">\</span>
--exclude-from<span class="o">=</span>.rsyncExcludeFiles <span class="se">\</span>
. /home/labelme/LabelMeAnnotationTool-master/
</code></pre></div>
<ul>
<li>Copy everything including all files and subfolders (<code>--recursive</code>) from the current location (<code>.</code>) to the target (<code>/home/labelme/LabelMeAnnotationTool-master</code>).</li>
<li>Ensure that the permissions are the same at the target as they were at the source (<code>--perms</code>).</li>
<li>Afterwards display detailed, human-readable statistics about the transfer (<code>--human-readable</code>, <code>--stats</code>).</li>
<li>Make sure the modification times of the files at the target location matches the ones at the source location (<code>--times</code>).</li>
<li>Modify the group and owner of the files (<code>--group</code>, <code>--owner</code>)</li>
<li>from <code>gitlab-runner</code> and from the user with userid <code>0</code> to <code>labelme</code> (<code>--usermap=FROM_USER:TO_USER,FROM_USERID:TO_USER</code>,<code>--groupmap=FROM_GROUP:TO_GROUP,FROM_GROUPID:TO_GROUP</code>).</li>
<li>Explicitly try to use super-user operations (<code>--super</code>), e.g. changing owners. This will lead to errors if such operations are not permitted on the receiving side, indicating a lack of permissions or filesystem features, enabling you to detect if something went wrong.</li>
<li>Skip listed files in <code>.rsyncExcludeFiles</code> while syncing (<code>--exclude-from=EXCLUSION_LIST_FILE</code>).</li>
</ul>
<h1 id="example-2">example 2</h1>
<p>This call is used when deploying our <a href="https://puppet.com">Puppet</a> configuration from Git. It was here that I first had the need to use the <code>--*map:</code> features, since the files initially ended up being owned by <code>gitlab-runner</code>. This is fine when every file you deploy via Puppet to another machine is explicitly listed with its permissions and owner set in your codebase. If this is not the case, Puppet (3.x) will implicitly set the owner to the same UID that is used on the Puppetmaster - leading to all kinds of strange situations. To avoid this, I’m mapping owners and groups.</p>
<p><em>Additionally I’ll</em> <code>chmod 640</code> <em>all files and</em> <code>chmod 750</code> <em>all directories that have been synced via the call to avoid having unsafe permissions on anything. All critical things should have their permissions set explicitly in our codebase anyway.</em></p>
<p>I have arrived at this specific combination of options when I wanted to list only files that are <em>really</em> changed at the Deploy step. Since during downloading dependencies the cache of Puppet modules is invalidated, all external files are marked as new every time. This can be circumvented via checksumming but it still leaves the modification date of directories changed (they are set when the downloaded archives are unpacked), therefore requiring the <code>--omit-dir-times</code>. Now, with this combination and <code>--verbose</code> the logs contain only files changed in our codebase and ones that changed due to changes in our dependencies. There are no longer hundreds of files marked as changed just because <code>r10k</code> needed to fetch a module again.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># in the .gitlab-ci.yml the command is on one line to avoid errors</span>
<span class="c1"># for the sake of readability I have reformatted the call.</span>
<span class="c1"># The order of the optional parameters has been changed to be</span>
<span class="c1"># more coherent.</span>
sudo rsync --recursive <span class="se">\</span>
--times <span class="se">\</span>
--omit-dir-times <span class="se">\</span>
--checksum <span class="se">\</span>
--sparse <span class="se">\</span>
--force <span class="se">\</span>
--delete <span class="se">\</span>
--links <span class="se">\</span>
--exclude<span class="o">=</span>.git* <span class="se">\</span>
--group <span class="se">\</span>
--owner <span class="se">\</span>
--usermap<span class="o">=</span>gitlab-runner:root <span class="se">\</span>
--groupmap<span class="o">=</span>gitlab-runner:puppet <span class="se">\</span>
--human-readable <span class="se">\</span>
--stats <span class="se">\</span>
--verbose <span class="se">\</span>
. /etc/puppet
</code></pre></div>
<ul>
<li>Copy everything including all files and subfolders (<code>--recursive</code>) from the current location (<code>.</code>) to the target (<code>/etc/puppet</code>).</li>
<li>Make sure the modification times of the files at the target location matches the ones at the source location (<code>--times</code>).</li>
<li>When checking which files to sync, ignore the modification dates on folders (<code>--omit-dir-times</code>) and rely on checksumming only (<code>--checksum</code>) instead of checking modification times and file size.</li>
<li>Try to intelligently handle sparse files (<code>--sparse</code>). <em>I’m rather sure this ended up here without any actual cause, by picking parameters from a meta parameter.</em></li>
<li>Delete files at the destination that are not at the source (<code>--delete</code>) and include empty directories while deleting (<code>--force</code>).</li>
<li>Recreate symlinks at the destination if there are any at the source (<code>--links</code>).</li>
<li>Exclude Git specific files and folders (<code>--exclude=.git*</code>).</li>
<li>Modify the group and owner of the files (<code>--group</code>, <code>--owner</code>)</li>
<li>Change the owner from <code>gitlab-runner</code> to <code>root</code> (<code>--usermap=FROM_USER:TO_USER</code>)</li>
<li>Change the group from <code>gitlab-runner</code> to <code>puppet</code> (<code>--groupmap=FROM_GROUP:TO_GROUP</code>)</li>
<li>Afterwards display detailed, human-readable statistics about the transfer (<code>--human-readable</code>, <code>--stats</code>).</li>
<li>Additionally display files transferred and a summary (<code>--verbose</code>).</li>
</ul>
<h2 id="notes">Notes</h2>
<p>If you are using <code>sudo</code> in combination with an automated system in which non-admin users can access <code>sudo</code> without password for specific tasks, make sure you have appropriate whitelists in place. You could, for example, restrict the use of <code>sudo</code> to a specific user, on a specific host witch a specific command. Given that the syntax of <code>sudoers</code> is not as precise as it might be with regular expressions, you’ll have to be quite specific what command you’ll want to allow and where to put wildcards, should you use any. Here’s an example.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># No line breaks here, since it might confuse readers and they might end up with a damaged `sudoers` config.</span>
your_user your_host.fully.qualified.domain<span class="o">=</span> NOPASSWD: /full/path/to/command --a_parameter --another__parameter /the_source /the/target/location
</code></pre></div>Technical skills after almost 4 years at ICG2017-09-28T22:05:00+02:002017-09-28T22:05:00+02:00Alexander Skibatag:ghostlyrics.net,2017-09-28:/technical-skills-after-almost-4-years-at-icg.html<p><em>Please note that this post is intentionally written in past tense to avoid having to rewrite it completely in the future.</em></p>
<p>This post aims to be a summary of technologies I’ve learned to use during my period at the <a href="https://www.icg.tugraz.at">Institute for Computer Vision and Computer Graphics</a> at TU Graz …</p><p><em>Please note that this post is intentionally written in past tense to avoid having to rewrite it completely in the future.</em></p>
<p>This post aims to be a summary of technologies I’ve learned to use during my period at the <a href="https://www.icg.tugraz.at">Institute for Computer Vision and Computer Graphics</a> at TU Graz.</p>
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
<p><strong>Table of Contents</strong> <em>generated with <a href="https://github.com/thlorenz/doctoc">DocToc</a></em></p>
<ul>
<li><a href="#monitoring">monitoring</a></li>
<li><a href="#web-servers">web servers</a></li>
<li><a href="#source-control">source control</a></li>
<li><a href="#datastores">datastores</a></li>
<li><a href="#virtualization-and-containerization">virtualization and containerization</a></li>
<li><a href="#configuration-management">configuration management</a></li>
<li><a href="#security">security</a></li>
<li><a href="#troubleshooting-oss">troubleshooting OSs</a></li>
<li><a href="#upgrades-and-migrations">upgrades and migrations</a></li>
<li><a href="#remainders">remainders</a></li>
<li><a href="#writing">writing</a></li>
</ul>
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<h2 id="monitoring">monitoring</h2>
<p>While I was fortunate to avoid Nagios, I have quite a lot of experience with <strong>Sensu</strong> and its quirks. I <a href="https://github.com/sensu-plugins/sensu-plugins-imap/pull/2">sent</a> <a href="https://github.com/sensu-plugins/sensu-plugins-nvidia/pull/3">several</a> <a href="https://github.com/sensu-plugins/sensu-plugins-raid-checks/pull/11">patches</a> <a href="https://github.com/sensu-plugins/sensu-plugins-environmental-checks/pull/5">to their plugins</a> and deployed a sizeable setup of checks and metrics, some of which were heavily customised to the ICG’s needs. We deployed Sensu for Linux and Windows. You might like <a href="http://ghostlyrics.net/example-of-a-sensu-puppet-class.html#example-of-a-sensu-puppet-class">this post about how to set up Sensu with Puppet</a> I’ve written about part of that work. I was also active on the <a href="https://groups.google.com/forum/?nomobile=true#!forum/sensu-users">sensu-users mailing list</a>.</p>
<p>Furthermore I deployed <strong>Logstash</strong> and <strong>Logstash-forwarder</strong> for collecting, analysing and structuring log files. This work included coming up with custom patterns for matching as well as defining configuration for ingesting logs of <code>dpkg</code>, <code>syslog</code>, <code>apache & apache-error</code>, <code>nginx & nginx-error</code>, <code>seafile & seahub</code> as well as <code>fail2ban</code>.</p>
<p>The collected data was available via <strong>Grafana</strong> for metrics, <strong>Uchiwa</strong> for results of Sensu and <strong>Kibana</strong> for logs, all protected behind an Apache reverse proxy with authentication via whitelisted LDAP accounts. I integrated custom URLs to easily go from Sensu to the corresponding results in Grafana and Kibana and built multiple custom Grafana dashboards. Those dashboards either displayed general information or were custom-tailored to solving particular problems in operations.</p>
<p>Before becoming more intimate with Sensu, I <a href="https://github.com/GhostLyrics/collection/blob/master/check-raid-status.py">wrote our own script</a> for monitoring the output of two CLIs of hardware RAID vendors (<code>storcli</code>, <code>tw_cli</code>).</p>
<h2 id="web-servers">web servers</h2>
<p>I have worked with <strong>Apache</strong> as well as <strong>Nginx</strong>, the majority of time with Apache, setting up static websites, WSGI based applications and reverse proxies with LDAP or password authentication. A part of the work with Apache was done via Puppet modules.</p>
<h2 id="source-control">source control</h2>
<p>I was in charge of two <strong>GitLab</strong> instances - one of which I migrated from a source installation to the Omnibus package - and maintained an old <strong>Apache Subversion</strong> instance. I am a strong supporter of <strong>Git</strong> and if need be can adjust to using <strong>SVN</strong> again. I’ve <a href="http://ghostlyrics.net/building-and-deploying-a-c-library-with-gitlab.html">helped several of the researchers to set up their projects</a> for <strong>GitLab Continuous Integration</strong> and used the feature myself extensively for both development and administration projects - <a href="http://ghostlyrics.net/using-continuous-integration-for-puppet.html">a topic very dear to me</a>.</p>
<h2 id="datastores">datastores</h2>
<p>For monitoring purposes I have built a setup including <strong>Graphite</strong> for storing metrics data, <strong>Redis</strong> for keeping monitoring related transient data for Sensu and <strong>Elasticsearch</strong> for storing logs with <strong>Elastic curator</strong> for removing them after a defined retention period. Setup of Graphite and Redis was done via Puppet modules.</p>
<p>I have limited knowledge of <strong>MySQL</strong> and <strong>PostgreSQL</strong>. I was part of a team developing an application using a Postgres backend. Further tasks included creating backups with <code>pg_dump</code> and editing a huge database dump by hand in an editor. <em>The thought of this should give you nightmares.</em> MySQL tasks were mostly creating backups.</p>
<p>I learned a few things about <strong>LDAP</strong> while I was modifying users, groups and configuration entries during everyday operations and operating system upgrades. Given my dislike of Java, I refused to install Java and by extension avoided using Apache Directory Studio, instead writing my <code>.ldif</code> files by hand using templates in my editor and applying them via <code>ldapadd</code>.</p>
<h2 id="virtualization-and-containerization">virtualization and containerization</h2>
<p>For various development processes I was using <strong>Virtualbox</strong> together with <strong>Vagrant</strong> for easy setup of new machines that get thrown away. In production, <strong>Xen</strong> was used - I’ve <a href="http://ghostlyrics.net/improving-our-xen-usage.html">written about some of that experience</a>. Additionally, I built several custom <strong>Docker</strong> containers for the GitLab CI. We did not use any Docker containers hosting services in production. <em>I have written <a href="http://ghostlyrics.net/how-i-publish-this-blog.html">about building a container for this very blog</a> though.</em></p>
<h2 id="configuration-management">configuration management</h2>
<p>I’ve written the <strong>Puppet</strong> setup at the institute managing many, many services. Some hosts are entirely controlled by Puppet. The configuration is deployed from a git repository to the Puppetmaster after being run through syntax tests and integration tests via GitLab and Docker.</p>
<p>For shorter, one-shot tasks on multiple hosts I’ve lately taken a liking to <strong>Ansible</strong>. Generally I find configuration management solutions more intuitive than ones that specify processes.</p>
<h2 id="security">security</h2>
<p>I’ve cleaned up, simplified and improved readability of an existing <strong>Shorewall</strong> setup. The entire configuration is being dry-run in the GitLab CI before being deployed to production on success.</p>
<p>I’ve configured and deployed <strong>TLS</strong> for several services, including LDAP, web servers, IMAP/POP3 (Cyrus), SMTP (Postfix), Rabbitmq, Logstash and more. I’ve rolled out several versions of <strong>Openssh</strong> configurations and <strong>Fail2ban</strong> deployments via our own Puppet code. Generally I’m of the opinion that even traffic in your own datacenter should be encrypted - that’s a remainder after reading that Google’s internal lines were tapped a few years back.</p>
<p>I was in charge during some unfortunate events where <strong>security issues</strong> popped up and had to be investigated or <strong>violations to our IT policies</strong> had to be dealt with. These policies were based on the Admin Team’s decisions and put into text by me. I’ve submitted <strong>detailed written reports</strong> about these activities to my boss.</p>
<h2 id="troubleshooting-oss">troubleshooting OSs</h2>
<p>While my main focus has been on Linux servers - mostly <strong>Ubuntu</strong> with some <strong>Debian</strong> - I have been busy troubleshooting problems on Linux desktops too, including broken X, crashing LightDM, missing CUDA drivers, issues with Secure Boot (and the <code>shim-signed</code> package). I’ve also seen my fair share of <strong>macOS</strong> problems given that we had several Mac users, including myself. Amongst the problems there were inaccessible BootCamp and completely broken installations due to users aborting upgrade processes. I have been mostly saved from Windows issues by my colleagues handling those. I have however written <a href="https://github.com/GhostLyrics/collection/blob/master/boot-into-windows.py">a tiny script allowing you to easily boot into Windows</a> from your Ubuntu installation after realising the convenience of such a solution when using BootCamp.</p>
<h2 id="upgrades-and-migrations">upgrades and migrations</h2>
<p>Over the years I’ve successfully upgraded many of our existing servers via <code>do-release-upgrade</code> or changing the Debian repository and fixed all occurring issues. I’ve also <a href="http://ghostlyrics.net/improving-our-xen-usage.html#drbd-9-auto-promotion">migrated a part of our infrastructure</a> from <strong>DRBD 8</strong> to <strong>DRBD 9</strong> in order to replicate to more machines without layering.</p>
<p>Upgrading was made much easier by having all systems at a current state which I achieved by using <strong>Unattended Upgrades</strong> for many of our sources. Reading changelogs and news about new features to improve our infrastructure has been very helpful in that regard. One achievement I am very proud of is having a <a href="https://github.com/mvo5/unattended-upgrades/pull/6">patch accepted into Ubuntu</a> (Precise and Trusty).</p>
<p>Usually I’m working with a list of things that I check after upgrading and manually merge or rewrite configuration files which I find using the following command. A look into the logfiles of various services is always a good idea too.</p>
<div class="highlight"><pre><span></span><code>find /etc -name "*dpkg-*" -or -name "*ucf-*" -or -name "*.merged" | sort
</code></pre></div>
<p>Additionally I oversaw and implemented the switch from manual configuration and firewall rule sync to a setup controlled by Puppet which is able to keep two hosts synced and configured.</p>
<h2 id="remainders">remainders</h2>
<p><em>This is the grab-bag area. Most things in here didn’t warrant a longer section.</em></p>
<p>I replaced a manual process of dealing with DHCP with a Puppet-controlled setup - that’s thankfully very easy using <strong>ISC-DHCP-SERVER</strong>. I deployed multiple applications that use <strong>Shibboleth</strong> authentication and worked with the central university IT section on that. I configured and deployed <strong>Mattermost</strong> and <strong>Seafile</strong>, made sure our <strong>network mounts</strong>, <strong>automounts</strong>, <strong>samba shares</strong> and <strong>Mailman</strong> instance worked and <strong>NTP</strong> is synced.</p>
<h2 id="writing">writing</h2>
<p>I’ve written extensive <strong>documentation for new users</strong> and the on-boarding process, <strong>documentation for the Admin Team</strong> as well as a <strong>policy section</strong>. Additionally, I <a href="http://ghostlyrics.net/tag/institute-for-computer-vision-and-computer-graphics.html">published several posts about my work</a> with permission from the ICG here on my personal website.</p>
<p>Furthermore I meticulously took <strong>notes on all new issues and their solutions in our GitLab issue tracker</strong>, so that a knowledge base containing previous experiences was created instead of letting all my experience evaporate.</p>Reading recommendations (2017-08-13)2017-08-13T00:39:00+02:002017-08-13T00:54:00+02:00Alexander Skibatag:ghostlyrics.net,2017-08-13:/reading-recommendations-2017-08-13.html<p>~Onatcer tells devastating things about the new exams required to study Computer Science in Vienna in <a href="http://senfautomat.com/der-tu-aufnahme-test-pleiten-fur-alle/">Der TU-Aufnahme-Test: Pleiten für alle!</a> (German).</p>
<p>Troy Hunt provides a new service where one can check passwords against a gigantic collection of millions of leaked passwords with <a href="https://www.troyhunt.com/introducing-306-million-freely-downloadable-pwned-passwords/">Introducing 306 Million Freely Downloadable Pwned Passwords …</a></p><p>~Onatcer tells devastating things about the new exams required to study Computer Science in Vienna in <a href="http://senfautomat.com/der-tu-aufnahme-test-pleiten-fur-alle/">Der TU-Aufnahme-Test: Pleiten für alle!</a> (German).</p>
<p>Troy Hunt provides a new service where one can check passwords against a gigantic collection of millions of leaked passwords with <a href="https://www.troyhunt.com/introducing-306-million-freely-downloadable-pwned-passwords/">Introducing 306 Million Freely Downloadable Pwned Passwords</a>.</p>
<p>Currently Final Fantasy XIV’s <a href="http://eu.finalfantasyxiv.com/lodestone/special/2017/Moonfire_Faire/">Moonfire Faire seasonal festival</a> is running and I already played through the seasonal quests in order not to miss anything. ~Luxpheras from the Community Team put up the post <a href="http://eu.finalfantasyxiv.com/pr/blog/002118.html">Shaved Ice Ice Baby</a> to promote <a href="http://eu.finalfantasyxiv.com/lodestone/special/2017/Moonfire_Faire/">the event</a> with some pictures of the spoils.</p>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://www.npr.org/sections/money/2014/10/21/357629765/when-women-stopped-coding">http://www.npr.org/sections/money/2014/10/21/357629765/when-women-stopped-coding</a></li>
<li><a href="http://www.reuters.com/article/us-usa-afghanistan-trump-idUSKBN1AM0F5">http://www.reuters.com/article/us-usa-afghanistan-trump-idUSKBN1AM0F5</a></li>
<li><a href="http://www.reuters.com/article/us-yemen-cholera-idUSKBN1AA15D">http://www.reuters.com/article/us-yemen-cholera-idUSKBN1AA15D</a></li>
<li><a href="https://about.gitlab.com/2017/07/22/gitlab-9-4-released/">https://about.gitlab.com/2017/07/22/gitlab-9-4-released/</a></li>
<li><a href="https://blog.hboeck.de/archives/888-How-I-tricked-Symantec-with-a-Fake-Private-Key.html">https://blog.hboeck.de/archives/888-How-I-tricked-Symantec-with-a-Fake-Private-Key.html</a></li>
<li><a href="https://daringfireball.net/2017/08/safari_should_display_favicons_in_its_tabs">https://daringfireball.net/2017/08/safari_should_display_favicons_in_its_tabs</a></li>
<li><a href="https://openmw.org/2017/openmw-multiplayer-here/">https://openmw.org/2017/openmw-multiplayer-here/</a></li>
<li><a href="https://worldbuilding.stackexchange.com/questions/33680/how-could-a-secret-terrorist-organization-rise-to-great-power-without-anybody-re">https://worldbuilding.stackexchange.com/questions/33680/how-could-a-secret-terrorist-organization-rise-to-great-power-without-anybody-re</a></li>
<li><a href="https://www.elastic.co/blog/building-a-better-search-experience-in-kibana">https://www.elastic.co/blog/building-a-better-search-experience-in-kibana</a></li>
<li><a href="https://www.glamour.com/story/taylor-swift-sexual-assault-trial-cross-examination">https://www.glamour.com/story/taylor-swift-sexual-assault-trial-cross-examination</a></li>
<li><a href="https://www.heise.de/newsticker/meldung/Roomba-Hersteller-der-Staubsaugerroboter-will-Karten-der-Wohnungen-verkaufen-3782216.html">https://www.heise.de/newsticker/meldung/Roomba-Hersteller-der-Staubsaugerroboter-will-Karten-der-Wohnungen-verkaufen-3782216.html</a></li>
<li><a href="https://www.polygon.com/2017/7/24/16010982/kingsway-review">https://www.polygon.com/2017/7/24/16010982/kingsway-review</a></li>
<li><a href="https://www.polygon.com/2017/7/26/16026296/game-of-thrones-season-7-episode-2-stormborn-sex">https://www.polygon.com/2017/7/26/16026296/game-of-thrones-season-7-episode-2-stormborn-sex</a></li>
<li><a href="https://www.polygon.com/2017/8/5/16101700/social-skyrim-mod-ai-research">https://www.polygon.com/2017/8/5/16101700/social-skyrim-mod-ai-research</a></li>
<li><a href="https://www.washingtonpost.com/local/the-kkk-once-attacked-her-family-now-she-was-writing-to-a-former-neo-nazi/2017/08/09/be143f0a-7319-11e7-8f39-eeb7d3a2d304_story.html">https://www.washingtonpost.com/local/the-kkk-once-attacked-her-family-now-she-was-writing-to-a-former-neo-nazi/2017/08/09/be143f0a-7319-11e7-8f39-eeb7d3a2d304_story.html</a> (via Fefe’s blog)</li>
<li><a href="https://www.youtube.com/watch?v=MK6ub-Z7snI">https://www.youtube.com/watch?v=MK6ub-Z7snI</a> (Hyrule Myths - Can You Beat Breath of the Wild Without Climbing?)</li>
<li><a href="https://yuumei.deviantart.com/art/In-This-Moment-696987877">https://yuumei.deviantart.com/art/In-This-Moment-696987877</a> (a fantastic painting of a pale girl with white hair in a white dress morphing into white roses playing a glass violin)</li>
</ul>How I publish this blog2017-08-07T04:26:00+02:002017-08-26T11:00:00+02:00Alexander Skibatag:ghostlyrics.net,2017-08-07:/how-i-publish-this-blog.html<p>It was 2015 when I finally decided to act upon my dissatisfaction with the <a href="https://wordpress.org">WordPress</a> publishing process and move to a different solution. I exported my posts and pages from its MySQL database and moved on to <a href="https://blog.getpelican.com">Pelican</a> - a static site generator written in Python. Usually, when you hear “static …</p><p>It was 2015 when I finally decided to act upon my dissatisfaction with the <a href="https://wordpress.org">WordPress</a> publishing process and move to a different solution. I exported my posts and pages from its MySQL database and moved on to <a href="https://blog.getpelican.com">Pelican</a> - a static site generator written in Python. Usually, when you hear “static site generator” you think of <a href="https://jekyllrb.com">Jekyll</a>. Jekyll is <em>the static site generator</em> people know of - the major reason for that being that it is used behind the scenes for <a href="https://pages.github.com">Github Pages</a>.</p>
<p>Jekyll is written in Ruby, however, and I have not put enough time into Ruby to be more familiar with it than exchanging some lines in existing code here and there. Python is my tool of choice and when a friend mentioned Pelican I was immediately hooked - even though it took me many months to finally put my plans into motion.</p>
<h2 id="back-in-the-days-wordpress">Back in the days: WordPress</h2>
<p>WordPress had always struck me as being built for ease of use. It is heavyweight, can be deployed almost everywhere and its features are plentiful. There was one major pain point for me though: For a reason I have never figured out, none of the available native clients (e.g. <a href="https://www.getblogo.com">Blogo</a>, <a href="https://www.red-sweater.com/marsedit/">Marsedit</a>) ever managed to show me more than my last few posts instead of a full view of all historical ones.</p>
<p>I frequently edit posts in the days after they are published. I fix typos, update the wording if I think it is bad after reading it again and sometimes add additional information. I consider publishing an article a bit like writing software or configuring a system. It often needs a little adjustment after it has been in use (or in testing) for some time. With WordPress that meant I had to go to the admin page every time to change something. The workflow was something akin to:</p>
<ul>
<li>go to bookmarked login site</li>
<li><em>swear about login being insecure due to missing TLS deployment</em></li>
<li>log in</li>
<li>go to section “posts”</li>
<li>find the post in question</li>
<li>edit the post by copying the modified content from my local file to the website</li>
<li>preview the post on the site</li>
<li>save the post</li>
</ul>
<p>I dislike the need to look for click targets, to scan for the relevant article in the list, the waiting between interactions on a slow connection. The setup screamed for some sort of automation but nothing seemed easy to set up at that point.</p>
<h2 id="uploading-pelican">Uploading Pelican</h2>
<p>Immediately after switching to <a href="https://blog.getpelican.com">Pelican</a> for content generation, I found myself in the puzzling situation of having a blog but no easy way to publish it. A bit of investigation uncovered Pelican shipping with a <code>Makefile</code> that includes a <code>ftp_upload</code> target though. I configured this and added a <code>~/.netrc</code> file so I didn’t need to type my password every time an upload was performed. This worked fine for a while. I even wrote a little bash aliases to run it.</p>
<div class="highlight"><pre><span></span><code>source ~/.virtualenvironments/pelican/bin/activate \
&& cd ~/…/ghostlyrics-journal/Pelican \
&& make ftp_upload \
&& deactivate \
&& cd - \
&& terminal-notifier -message "GhostLyrics Journal published." -open "http://ghostlyrics.net
</code></pre></div>
<p>It was in May 2016 that the <code>lftp</code> <a href="https://github.com/Homebrew/homebrew-core/pull/1509">build for macOS broke</a>. That means that after an upgrade of macOS I was left without a way of easily deploying changes to the blog. Pelican uses <code>lftp</code> because of some of its features like mirroring a local folder and updating only the differences instead of copying the whole folder recursively every time you kick it. I think I tried to publish with <a href="https://panic.com/transmit/">Transmit</a> once or twice but it is simply not built for this task.</p>
<p>I was enormously frustrated and heartbroken. I didn’t write anything for weeks, instead hoping a solution would surface that didn’t require engineering effort on my part. However, the build remained broken and so did my FTP upload.</p>
<p>After being inspired I decided that the status quo wasn’t acceptable and went on to build a way that allowed me to simply run <code>publish</code> in Terminal and have everything done for me - reproducibly and rock solid.</p>
<h3 id="up-comes-vagrant">Up comes Vagrant</h3>
<p>In October 2016 I came up with a <code>Vagrantfile</code> that allowed me to publish from an Ubuntu machine via <a href="https://www.vagrantup.com">Vagrant</a>. This worked around the author of <code>lftp</code> seemingly having little interest in building for macOS.</p>
<div class="highlight"><pre><span></span><code><span class="no">Vagrant</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="s2">"2"</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span>
<span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">box</span> <span class="o">=</span> <span class="s2">"bento/ubuntu-16.04"</span>
<span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">synced_folder</span> <span class="s2">"/…/ghostlyrics-journal"</span><span class="p">,</span> <span class="s2">"/pelican"</span>
<span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">provision</span> <span class="s2">"file"</span><span class="p">,</span> <span class="ss">source</span><span class="p">:</span> <span class="s2">"~/.netrc"</span><span class="p">,</span> <span class="ss">run</span><span class="p">:</span> <span class="s2">"always"</span><span class="p">,</span> <span class="ss">destination</span><span class="p">:</span> <span class="s2">".netrc"</span>
<span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">provision</span> <span class="s2">"shell"</span><span class="p">,</span> <span class="ss">env</span><span class="p">:{</span><span class="s2">"DEBIAN_FRONTEND"</span> <span class="o">=></span> <span class="s2">"noninteractive"</span><span class="p">},</span> <span class="ss">inline</span><span class="p">:</span> <span class="o"><<-</span><span class="dl">SHELL</span>
<span class="sh"> apt-get -qq update</span>
<span class="sh"> apt-get -qq -o=Dpkg::Use-Pty=0 install -y --no-install-recommends \</span>
<span class="sh"> make \</span>
<span class="sh"> python-markdown \</span>
<span class="sh"> python-typogrify \</span>
<span class="sh"> python-bs4 \</span>
<span class="sh"> python-pygments \</span>
<span class="sh"> pelican \</span>
<span class="sh"> lftp</span>
<span class="dl"> SHELL</span>
<span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">provision</span> <span class="s2">"shell"</span><span class="p">,</span> <span class="ss">privileged</span><span class="p">:</span> <span class="kp">false</span><span class="p">,</span> <span class="ss">run</span><span class="p">:</span> <span class="s2">"always"</span><span class="p">,</span> <span class="ss">inline</span><span class="p">:</span> <span class="o"><<-</span><span class="dl">SHELL</span>
<span class="sh"> make -C /pelican/Pelican ftp_upload</span>
<span class="dl"> SHELL</span>
<span class="k">end</span>
</code></pre></div>
<p>In short: I use a <a href="http://chef.github.io/bento/">bento</a> Ubuntu box because I’ve had bad experience on multiple occasions with the boxes in the Ubuntu namespace. I sync the folder my blog resides in to <code>/pelican</code> in the VM. I copy the <code>.netrc</code> file with the credentials. The VM gets some packages I need to run Pelican and calls the <code>ftp_upload</code> <code>make</code> target. This also got a new bash alias.</p>
<div class="highlight"><pre><span></span><code>cd ~/vagrant/xenial-pelican \
&& vagrant up \
&& vagrant destroy -f \
&& cd - \
&& tput bel
</code></pre></div>
<p>Now, if you only ever publish a few times, this works fine and is perfectly acceptable. If you intend to iterate, pushing out changes a few times within half an hour, you’ll be stuck waiting more often than you’d like due to the VM booting and reconfiguring. This was necessary to avoid conflicts when I work on different machines with the <code>Vagrantfile</code> being in my Dropbox.</p>
<h3 id="wrapping-it-up-with-docker">Wrapping it up with Docker</h3>
<p>Enter <a href="https://www.docker.com">Docker</a>. Now I know what you are thinking: “Docker is not the solution to all our problems” and I agree - it is not. It seems like the right kind of tool for this job though. Being built on <a href="https://github.com/mist64/xhyve">xhyve</a> and therefore <a href="https://developer.apple.com/library/mac/documentation/DriversKernelHardware/Reference/Hypervisor/index.html">Hypervisor.framework</a> it is decidedly more lightweight than <a href="https://www.virtualbox.org">Virtualbox</a>. When it is already running, firing up a container that builds the blog, uploads it and shuts the running container down again is very, very fast.</p>
<p>I built the following <code>Dockerfile</code> with the command <code>docker build -t pelican .</code> while in the directory containing the <code>Dockerfile</code> and <code>.netrc</code>.</p>
<div class="highlight"><pre><span></span><code><span class="k">FROM</span> <span class="s">buildpack-deps:xenial</span>
<span class="k">LABEL</span> <span class="nv">maintainer</span><span class="o">=</span><span class="s2">"Alexander Skiba"</span>
<span class="k">VOLUME</span><span class="s"> "/pelican"</span>
<span class="k">WORKDIR</span><span class="s"> /pelican</span>
<span class="k">ENV</span> DEBIAN_FRONTEND noninteractive
<span class="k">ADD</span> <span class="s2">".netrc"</span> <span class="s2">"/root"</span>
<span class="k">RUN</span> apt-get update <span class="se">\</span>
<span class="o">&&</span> apt-get install -y --no-install-recommends <span class="se">\</span>
make <span class="se">\</span>
python3-pip <span class="se">\</span>
python3-setuptools <span class="se">\</span>
python3-wheel <span class="se">\</span>
lftp
<span class="k">RUN</span> pip3 install <span class="se">\</span>
pelican <span class="se">\</span>
markdown <span class="se">\</span>
typogrify <span class="se">\</span>
bs4 <span class="se">\</span>
pygments
<span class="k">CMD</span> <span class="p">[</span><span class="s2">"make"</span><span class="p">,</span> <span class="s2">"-C"</span><span class="p">,</span> <span class="s2">"/pelican/Pelican"</span><span class="p">,</span> <span class="s2">"ftp_upload"</span><span class="p">]</span>
</code></pre></div>
<p>Again, I build on top of a Ubuntu Xenial machine, work in <code>/pelican</code>, copy the <code>.netrc</code> file and install packages. This time, however I install the packages via <code>pip</code> to get current versions. It is also of note that while building the image, one does not have access to files outside of the current directory and its subdirectory, which made a local copy of <code>.netrc</code> necessary. Furthermore, the paths for Docker volumes cannot be defined in the Dockerfile by design. Because of that, the new bash aliases is this:</p>
<div class="highlight"><pre><span></span><code>docker run -v /…/ghostlyrics-journal/:/pelican pelican
</code></pre></div>
<p>This short command starts the container called <code>pelican</code> with the given folder mounted as volume into <code>/pelican</code>. Since I don’t specify interactive mode, the <code>CMD</code> defined earlier is called and the blog built and uploaded. Afterwards the container exits since the command itself exits. Quite an elegant solution, I think.</p>Final Fantasy XIV: Stories about Fellowship2017-08-05T23:29:00+02:002017-08-07T02:41:00+02:00Alexander Skibatag:ghostlyrics.net,2017-08-05:/final-fantasy-xiv-stories-about-fellowship.html<p>I started playing <a href="http://eu.finalfantasyxiv.com">Final Fantasy XIV</a> (FF) in February when my disappointment about the many quirks of Black Desert Online (BDO) reached an all-time high. After feeling that a lot of things were unpolished in BDO I wanted to try an MMO with monthly subscription - the assumption being that the …</p><p>I started playing <a href="http://eu.finalfantasyxiv.com">Final Fantasy XIV</a> (FF) in February when my disappointment about the many quirks of Black Desert Online (BDO) reached an all-time high. After feeling that a lot of things were unpolished in BDO I wanted to try an MMO with monthly subscription - the assumption being that the extra money was used for a certain layer of polish and QA that I long for when playing a video game.</p>
<p>I was pleasantly surprised. All the GUIs were fine, not overloaded, no text outside of its intended boxes or similar stuff showing neglect on behalf of the developer. While the beginning of combat is rather boring and depressingly slow, it grows better when you get more skills. The world is build with attention to detail even though I felt that BDO’s world felt more alive, especially Altinova. I want to point out that the writing is superb. The jokes, pop culture references and times when the game doesn’t take itself serious are amazing.</p>
<p>When taking pictures in FF I am almost always taking images of events and experiences, even characters whereas in BDO my favorite motive was the environment.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-fellowship/2016-05-18_77030270.PNG"><img alt="Nadzeya looking at grilled food in Altinova" src="http://ghostlyrics.net/images/final-fantasy-fellowship/2016-05-18_77030270-thumb.PNG"></a></p>
<p>Another thing I realized early on is how the game is build to foster community and friendliness. There are systems in place to help new players (Novice Chat), that encourage players to play older content with others (dungeon bonuses, second chances for Khloe’s <em>Wondrous Tails</em>) and to be generally helpful and cooperative while in an instance (player recommendations). All this is just so fundamentally different from the dog-eat-dog mentality in BDO where you can basically get stabbed outside safe zones with little to no repercussions for the murderer.</p>
<p>Let me tell you about <em>Kakysha Saranictil</em>, a rogue and ninja fighting for the good of the people of Eorzea. She is a hero both to the common folk as she is to statesmen. Fighting for the right cause is reason enough for her to help everyone, be them a poor miner in a almost forsaken village or the ruler of a grand city-state.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_08022017_041733.png"><img alt="An airship leaving Ul'dah" src="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_08022017_041733-thumb.png"></a></p>
<p>While she started her journey as pugilist (<em>read: martial artist</em>) in Ul’dah, the prosperous desert nation, she soon discovered that her true calling are the shadows and so she became a member of <em>The Dutiful Sisters of the Edelweiss</em> in Limsa Lominsa where she studied under Captain Jacke. As her travels led her all over Eorzea she sadly realized that Jacke had little left to teach her. Gladly Oboro, a ninja hailing from Doma in the Far East took her under his wings and taught her the ways of the ninja.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_06062017_195821.png"><img alt="Kakysha sitting cloaked in Idyllshire" src="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_06062017_195821-thumb.png"></a></p>
<p>Now, while her comrades at the Scions of the Seventh Dawn certainly kept her busy defending this or that nation from both primal and Garlean threat, she certainly did spent her downtime well, building trust with a more conservative faction of Ul’dah’s lizard people, the Amalj’aa. A proud folk of warriors, they came to respect her when she helped them uphold their traditions again and again against their religious fanatical kin revering Ifrit as well as defending their clanswoman.</p>
<p>Admittedly even a hero needs a little rest from time to time and what better use of said downtime would there be than finally having dinner with her close friend, Ser Aymeric de Borel.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_08062017_014454.png"><img alt="Aymeric laughing about a joke Kakysha made" src="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_08062017_014454-thumb.png"></a></p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_08062017_014859.png"><img alt="Kakysha smiling at Aymeric" src="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_08062017_014859-thumb.png"></a></p>
<p>But even between all those events, she found a sense of belonging, of fellowship. Kakysha joined a Free Company soon after starting her journey, but ultimately felt unfulfilled by both the people and their way of treating each other. After a long period of solitude she ultimately came across the Seraphs, Jenji and Syn Seraph, who invited her to join their Free Company, <em>The Black Crown</em>, where people were pleasant and all was well. While <em>Crown</em> has a considerable amount of adventurers who have failed to show up in recent times there is a core group of heroes who are there to help others, to talk and to have fun with.</p>
<p>Recently one might come to the impression that Kakysha had become complacent, ignoring the plight of her fellow people. Nothing could be further from the truth - it is only that she needed to focus on solving the biggest issues first (namely, the liberation of Doma and Ala Mhigo) before tackling the smaller issues (left over sidequests) now that a manner of peace has been established.</p>
<p><a href="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_01082017_013859.png"><img alt="Kakysha watching the people in Quarrymill" src="http://ghostlyrics.net/images/final-fantasy-fellowship/ffxiv_01082017_013859-thumb.png"></a></p>
<p>Look out for her on the <em>Phoenix, EU</em> server - you’ll know her by her completely sand colored clothes - be they adorned by gems and jewels or more work oriented with belts and pouches, bright red hair and glasses.</p>Reading recommendations (2017-07-26)2017-07-26T01:51:00+02:002017-07-26T01:51:00+02:00Alexander Skibatag:ghostlyrics.net,2017-07-26:/reading-recommendations-2017-07-26.html<p>Pieter Hintjens has <a href="http://hintjens.com/blog:107">Ten Steps to Better Public Speaking</a> for you. Amongst them is to avoid using slides since they send the audience into passive ‘consumer only’ mode. I’m definitely guilty of doing that as a listener.</p>
<p>Here is an interview with Craig Schaefer, author of one of my …</p><p>Pieter Hintjens has <a href="http://hintjens.com/blog:107">Ten Steps to Better Public Speaking</a> for you. Amongst them is to avoid using slides since they send the audience into passive ‘consumer only’ mode. I’m definitely guilty of doing that as a listener.</p>
<p>Here is an interview with Craig Schaefer, author of one of my favorite book series, the Faust books. - <a href="http://fantasybookcritic.blogspot.co.at/2017/06/cover-reveal-and-mini-q-with-craig.html">Cover Reveal and Mini-Q&A with Craig Schaefer (by Mihir Wanchoo)</a>. I’m very sad that he still hasn’t resumed selling his books on Apple’s iBooks, my preferred source.</p>
<p>Jason Schreier writes in <a href="http://kotaku.com/final-fantasy-xii-the-zodiac-age-the-kotaku-review-1796816046">Final Fantasy XII: The Zodiac Age: The Kotaku Review</a> that one of the most interesting games in the Final Fantasy series is as good as I remember it and might be even better in its new version. I’m very pleased to hear that even though I don’t currently own a PS4. <em>They even removed that one quirk where you mustn’t open a specific chest for the whole game in order to get one of the best weapons.</em></p>
<p>Matt Gemmell’s <a href="http://mattgemmell.com/regulars/">Regulars</a> is about peoplewatching. It’s about the what-ifs. It’s what happens when observation and imagination meet and have a great time in a coffee shop. (pun intended)</p>
<blockquote>
<p>With every new framework release comes the fresh chance of masking your lack of fundamental JavaScript knowledge. <a href="https://twitter.com/iamdevloper/status/866243727798542339">@iamdevloper</a></p>
</blockquote>
<p><em>I also happened to read the comic books I got with The Witcher 2 and Alan Wake, but sadly those didn’t click with me.</em></p>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://blog.equinux.com/2017/07/cracking-the-code-behind-apples-app-store-promo-card-design/">http://blog.equinux.com/2017/07/cracking-the-code-behind-apples-app-store-promo-card-design/</a></li>
<li><a href="http://inessential.com/2015/06/30/love">http://inessential.com/2015/06/30/love</a></li>
<li><a href="http://thecodinglove.com/post/117603337882">http://thecodinglove.com/post/117603337882</a> (GIF about incoming deadline)</li>
<li><a href="http://www.reuters.com/article/us-europe-migrants-farright-millennials-idUSKBN1A61J6">http://www.reuters.com/article/us-europe-migrants-farright-millennials-idUSKBN1A61J6</a></li>
<li><a href="http://www.reuters.com/article/us-myanmar-un-idUSKBN1A61ZR">http://www.reuters.com/article/us-myanmar-un-idUSKBN1A61ZR</a></li>
<li><a href="http://www.reuters.com/article/us-russia-politics-history-idUSKBN19Y11V">http://www.reuters.com/article/us-russia-politics-history-idUSKBN19Y11V</a></li>
<li><a href="http://www.sciencemag.org/careers/2017/04/phd-students-face-significant-mental-health-challenges">http://www.sciencemag.org/careers/2017/04/phd-students-face-significant-mental-health-challenges</a></li>
<li><a href="http://www.wienerzeitung.at/meinungen/blogs/freitritt/895774_Das-Maerchen-von-der-Verkehrsentlastung.html">http://www.wienerzeitung.at/meinungen/blogs/freitritt/895774_Das-Maerchen-von-der-Verkehrsentlastung.html</a></li>
<li><a href="https://about.gitlab.com/2017/06/14/on-calliday-unsucking-your-on-call-experience/">https://about.gitlab.com/2017/06/14/on-calliday-unsucking-your-on-call-experience/</a></li>
<li><a href="https://arstechnica.co.uk/security/2017/05/the-hijacking-flaw-that-lurked-in-intel-chips-is-worse-than-anyone-thought/">https://arstechnica.co.uk/security/2017/05/the-hijacking-flaw-that-lurked-in-intel-chips-is-worse-than-anyone-thought/</a></li>
<li><a href="https://blogs.microsoft.com/on-the-issues/2017/05/14/need-urgent-collective-action-keep-people-safe-online-lessons-last-weeks-cyberattack/">https://blogs.microsoft.com/on-the-issues/2017/05/14/need-urgent-collective-action-keep-people-safe-online-lessons-last-weeks-cyberattack/</a></li>
<li><a href="https://blogs.technet.microsoft.com/johnla/2015/09/26/the-inside-story-behind-ms08-067/">https://blogs.technet.microsoft.com/johnla/2015/09/26/the-inside-story-behind-ms08-067/</a></li>
<li><a href="https://doublepulsar.com/eternalpot-lessons-from-building-a-global-nation-state-smb-exploit-honeypot-infrastructure-3f2a0b064ffe">https://doublepulsar.com/eternalpot-lessons-from-building-a-global-nation-state-smb-exploit-honeypot-infrastructure-3f2a0b064ffe</a></li>
<li><a href="https://futurezone.at/netzpolitik/bundestrojaner-justizministerium-blockiert-protest-mails/275.961.619">https://futurezone.at/netzpolitik/bundestrojaner-justizministerium-blockiert-protest-mails/275.961.619</a></li>
<li><a href="https://jrpgsaredead.fyi/2017/03/11/written-in-the-land/">https://jrpgsaredead.fyi/2017/03/11/written-in-the-land/</a> (a great Final Fantasy XV analysis worth reading)</li>
<li><a href="https://krebsonsecurity.com/2017/02/who-ran-leakedsource-com/">https://krebsonsecurity.com/2017/02/who-ran-leakedsource-com/</a></li>
<li><a href="https://labsblog.f-secure.com/2017/07/19/break-your-own-product-and-break-it-hard/">https://labsblog.f-secure.com/2017/07/19/break-your-own-product-and-break-it-hard/</a></li>
<li><a href="https://medium.com/elementaryos/making-granite-a-better-library-8b925859e9fb">https://medium.com/elementaryos/making-granite-a-better-library-8b925859e9fb</a></li>
<li><a href="https://netzpolitik.org/2017/tuerkische-polizei-ermittelt-flugblaetter-gegen-erdogan-mit-ferngesteuertem-drucker-am-gezi-park-abgeworfen/">https://netzpolitik.org/2017/tuerkische-polizei-ermittelt-flugblaetter-gegen-erdogan-mit-ferngesteuertem-drucker-am-gezi-park-abgeworfen/</a></li>
<li><a href="https://panic.com/blog/stolen-source-code/">https://panic.com/blog/stolen-source-code/</a></li>
<li><a href="https://privacylog.blogspot.co.at/2017/04/what-happens-when-you-send-zero-day-to.html">https://privacylog.blogspot.co.at/2017/04/what-happens-when-you-send-zero-day-to.html</a></li>
<li><a href="https://security.utexas.edu/food-policy">https://security.utexas.edu/food-policy</a></li>
<li><a href="https://thenerdsofcolor.org/2016/05/06/jon-tsuei-is-right-a-whitewashedout-ghost-in-the-shell-misses-the-cultural-mark/">https://thenerdsofcolor.org/2016/05/06/jon-tsuei-is-right-a-whitewashedout-ghost-in-the-shell-misses-the-cultural-mark/</a></li>
<li><a href="https://twitter.com/MichelePlayfair/status/869171522941861888">https://twitter.com/MichelePlayfair/status/869171522941861888</a> (image: the legacy software dragon)</li>
<li><a href="https://twitter.com/jessysaurusrex/status/885552338395475969">https://twitter.com/jessysaurusrex/status/885552338395475969</a> (infosec for seniors issue and usability)</li>
<li><a href="https://twitter.com/jessysaurusrex/status/885556817912143873">https://twitter.com/jessysaurusrex/status/885556817912143873</a> (old lady hacking her relatives devices for vacation)</li>
<li><a href="https://twitter.com/mattgemmell/status/887613552097415169">https://twitter.com/mattgemmell/status/887613552097415169</a> (GIF about how to improve visual presentation of data in tables)</li>
<li><a href="https://twitter.com/pptsapper/status/887836859300229120">https://twitter.com/pptsapper/status/887836859300229120</a> (military analysis of Star Wars: Rogue One)</li>
<li><a href="https://www.hanselman.com/blog/URLsAreUI.aspx">https://www.hanselman.com/blog/URLsAreUI.aspx</a></li>
<li><a href="https://www.lowyinstitute.org/the-interpreter/why-australia-might-be-right-encryption-cracking-track">https://www.lowyinstitute.org/the-interpreter/why-australia-might-be-right-encryption-cracking-track</a></li>
<li><a href="https://www.ncsc.gov.uk/blog-post/let-them-paste-passwords">https://www.ncsc.gov.uk/blog-post/let-them-paste-passwords</a></li>
<li><a href="https://www.nytimes.com/2017/05/17/arts/television/jimmy-fallon-tonight-show-interview-trump.html">https://www.nytimes.com/2017/05/17/arts/television/jimmy-fallon-tonight-show-interview-trump.html</a></li>
<li><a href="https://www.nytimes.com/2017/07/16/business/china-cash-smartphone-payments.html">https://www.nytimes.com/2017/07/16/business/china-cash-smartphone-payments.html</a></li>
<li><a href="https://www.theguardian.com/environment/2017/may/19/arctic-stronghold-of-worlds-seeds-flooded-after-permafrost-melts">https://www.theguardian.com/environment/2017/may/19/arctic-stronghold-of-worlds-seeds-flooded-after-permafrost-melts</a></li>
<li><a href="https://www.wired.com/2017/06/diversity-open-source-even-worse-tech-overall/">https://www.wired.com/2017/06/diversity-open-source-even-worse-tech-overall/</a></li>
<li><a href="https://www.youtube.com/watch?v=U3QXMMV-Srs">https://www.youtube.com/watch?v=U3QXMMV-Srs</a> (The Wolf Starring Christian Slater | HP Studios)</li>
<li><a href="https://www.youtube.com/watch?v=rsvYZCJqd4w">https://www.youtube.com/watch?v=rsvYZCJqd4w</a> (How to Actually Cook With Spices: Cumin)</li>
</ul>Example of a Sensu Puppet class2017-07-13T14:05:00+02:002017-09-04T21:07:00+02:00Alexander Skibatag:ghostlyrics.net,2017-07-13:/example-of-a-sensu-puppet-class.html<p>At the <a href="https://groups.google.com/forum/#!forum/sensu-users">sensu-users</a> mailing list <a href="https://groups.google.com/forum/#!topic/sensu-users/AeRSAHOOX4Y">someone asked</a> how they could deploy Sensu plugins with Puppet. After giving a short snippet, I was asked for further help whether to implement the snippet as a class or what I would recommend. Therefore I present you: A slightly redacted example of a Sensu …</p><p>At the <a href="https://groups.google.com/forum/#!forum/sensu-users">sensu-users</a> mailing list <a href="https://groups.google.com/forum/#!topic/sensu-users/AeRSAHOOX4Y">someone asked</a> how they could deploy Sensu plugins with Puppet. After giving a short snippet, I was asked for further help whether to implement the snippet as a class or what I would recommend. Therefore I present you: A slightly redacted example of a Sensu Puppet class taken from production.</p>
<p>I will attempt to walk you through the sections I used and at the end there will be a big code block with the complete class, for easier copy & paste.</p>
<p>Please note that this class was written with <a href="https://github.com/sensu/sensu/blob/master/CHANGELOG.md#0260---2016-09-06">Sensu 0.26</a> and <a href="https://github.com/sensu/sensu-puppet/blob/master/CHANGELOG.md#v220-2016-11-27">sensu-puppet 2.2.0</a> in mind and may not include all the latest features you expected to use and does not use features available in versions of Sensu or sensu-puppet.</p>
<h2 id="detailed-explanation">Detailed explanation</h2>
<h3 id="docs">docs</h3>
<div class="highlight"><pre><span></span><code><span class="c"># Class: services::sensu</span>
<span class="c"># Manages configuration, checks, handlers and certs for</span>
<span class="c"># the sensu monitoring system</span>
<span class="c">#</span>
<span class="c"># parameters:</span>
<span class="c"># (bool) is_main_server: makes this server the main host on which sensu is run</span>
<span class="c"># (bool) consistent_connection: if set to `false`, enables high-value timeouts</span>
<span class="c"># for sensu keepalive checks</span>
<span class="c"># (array) subscriptions: the check groups a host should subscribe to</span>
</code></pre></div>
<p>You will always want some form of documentation. Leaving a little bit in the code is considered good practice and <a href="http://puppet-lint.com">puppet-lint</a> will (rightfully) complain if you don’t. I make sure to also leave hints about class parameters and their types since I don’t use them a lot in this project.</p>
<h3 id="default-parameters">default parameters</h3>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">(</span><span class="nv">$is_main_server</span> <span class="o">=</span> <span class="k">false</span><span class="p">,</span>
<span class="nv">$consistent_connection</span> <span class="o">=</span> <span class="k">true</span><span class="p">,</span>
<span class="nv">$subscriptions</span> <span class="o">=</span> <span class="p">[])</span>
<span class="p">{</span>
</code></pre></div>
<p>As you might have seen, I use <code>is_main_server</code> to denote the <code>sensu-server</code> instance, so it defaults to <code>false</code>. <code>consistent_connection</code> will be manually set to <code>false</code> for desktop or laptop machines that will be turned off regularly and is <code>true</code> by default. <em>In a later version of Sensu and sensu-puppet this can be solved easier with deregistration.</em> The <code>subscriptions</code> array will be filled with strings that enable subscriptions and checks that are not automatically detected and is empty by default.</p>
<h3 id="manual-configuration">manual configuration</h3>
<div class="highlight"><pre><span></span><code><span class="c"># configuration</span>
<span class="nv">$rabbitmq_password</span> <span class="o">=</span> <span class="s">'REDACTED'</span>
<span class="nv">$gitlab_health_token</span> <span class="o">=</span> <span class="s">'REDACTED'</span>
<span class="nv">$gitlab_issues_token</span> <span class="o">=</span> <span class="s">'REDACTED'</span>
<span class="nv">$assignments_health_token</span> <span class="o">=</span> <span class="s">'REDACTED'</span>
<span class="nv">$sensu_monitoring_password</span> <span class="o">=</span> <span class="s">'REDACTED'</span><span class="c"></span>
<span class="c"># installed sensu plugins</span>
<span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[</span><span class="s">'sensu-plugins-cpu-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-disk-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-environmental-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-filesystem-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-http'</span><span class="p">,</span>
<span class="s">'sensu-plugins-load-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-memory-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-network-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-nvidia'</span><span class="p">,</span>
<span class="s">'sensu-plugins-ntp'</span><span class="p">,</span>
<span class="s">'sensu-plugins-postfix'</span><span class="p">,</span>
<span class="s">'sensu-plugins-process-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-puppet'</span><span class="p">,</span>
<span class="s">'sensu-plugins-raid-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-uptime-checks'</span><span class="p">]</span><span class="c"></span>
<span class="c"># kibana URL - allows clicking to jump to filtered log results</span>
<span class="nv">$kibana_url</span> <span class="o">=</span> <span class="s">"https://REDACTED/#/discover?_g=()&_a=(columns:!(_source),interval:auto,query:(query_string:(analyze_wildcard:!t,query:'host:${::hostname}')),sort:!('@timestamp',desc),index:%5Blogstash-%5DYYYY.MM.DD)#"</span><span class="c"></span>
<span class="c"># grafana URL - allows clicking to jump to filtered metrics</span>
<span class="nv">$grafana_url</span> <span class="o">=</span> <span class="s">"https://REDACTED/dashboard/db/single-host-overview?var-hostname=${::hostname}"</span><span class="c"></span>
<span class="c"># runbook prefix - allows linking directly to a propose solution</span>
<span class="nv">$runbook_prefix</span> <span class="o">=</span> <span class="s">'https://REDACTED/administrators/documentation/blob/master/runbooks/sensu'</span><span class="c"></span>
<span class="c"># how many times should keepalive fire before notifications</span>
<span class="nv">$keepalive_occurrences</span> <span class="o">=</span> <span class="s">'1'</span><span class="c"></span>
<span class="c"># how much time needs to pass until keepalive notification is repeated (in seconds)</span>
<span class="nv">$keepalive_refresh</span> <span class="o">=</span> <span class="s">'3600'</span><span class="c"></span>
<span class="c"># impact text for keepalive</span>
<span class="nv">$keepalive_impact</span> <span class="o">=</span> <span class="s">'Host is not checking in with monitoring and may be completely unavailable.'</span><span class="c"></span>
<span class="c"># suggestion text for keepalive</span>
<span class="nv">$keepalive_suggestion</span> <span class="o">=</span> <span class="s">'Check if the host is frozen, stuck, down or offline.'</span>
</code></pre></div>
<p>This is the section where details specific to our deployment reside. There is one block that holds tokens and passwords that used by Puppet during the deployment (<code>rabbitmq_password</code>) and ones that are used by Sensu during standard operation (e.g. <code>gitlab_health_token</code> when monitoring <a href="https://docs.gitlab.com/ce/user/admin_area/monitoring/health_check.html">GitLab’s health API</a>).</p>
<ul>
<li><code>plugins</code>: lists Sensu plugins that should be installed on all machines.</li>
<li><code>kibana_url</code>, <code>grafana_url</code>: We have systems in place to collect log files and metrics from the systems we monitor. These are easy links that will be displayed in <a href="https://uchiwa.io/#/">Uchiwa</a> and notifications (e-mail, Mattermost) that link directly to data for the host in question.</li>
<li><code>runbook_prefix</code>: I wrote runbooks for most checks so that my colleagues can resolve issues while I’m on vacation. This is prepended in checks, so that one only needs to concatenate the prefix with the filename of the runbook in question to get a full URL.</li>
</ul>
<p>The next block describes Sensu’s keepalive events - you get these when Sensu has lost contact with a client (meaning your client hasn’t checked in with the Sensu server for some time). The <code>keepalive_occurrences</code> and <code>keepalive_refresh</code> attributes are used for filtering of notifications.</p>
<p><code>keepalive_impact</code> and <code>keepalive_suggestion</code> are part of a concept I use throughout our Sensu deployment - Every check that can trigger a notification needs to have information on what the real-world impact of a failure is and what the quickest and most common solution to the problem could be.</p>
<h3 id="automatic-subscriptions">automatic subscriptions</h3>
<div class="highlight"><pre><span></span><code><span class="c"># automatic subscriptions computed from machine properties</span>
<span class="k">if</span> <span class="p">(</span><span class="na">str2bool</span><span class="p">(</span><span class="nv">$::is_virtual)</span> <span class="o">==</span> <span class="k">true</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$machine_type</span> <span class="o">=</span> <span class="p">[</span><span class="s">'virtual'</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="nv">$machine_type</span> <span class="o">=</span> <span class="p">[</span><span class="s">'physical'</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="na">str2bool</span><span class="p">(</span><span class="nv">$::has_nvidia_graphics_card)</span> <span class="o">==</span> <span class="k">true</span> <span class="na">and</span> <span class="na">str2bool</span><span class="p">(</span><span class="nv">$::using_nouveau_driver)</span> <span class="o">==</span> <span class="k">false</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$gpu</span> <span class="o">=</span> <span class="p">[</span><span class="s">'nvidia'</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="nv">$gpu</span> <span class="o">=</span> <span class="p">[]</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">((</span><span class="nv">$::operatingsystem</span> <span class="o">==</span> <span class="s">'Ubuntu'</span> <span class="na">and</span> <span class="k">versioncmp</span><span class="p">(</span><span class="nv">$::operatingsystemrelease,</span> <span class="s">'16.04'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">)</span> <span class="na">or</span>
<span class="p">(</span><span class="nv">$::operatingsystem</span> <span class="o">==</span> <span class="s">'Debian'</span> <span class="na">and</span> <span class="k">versioncmp</span><span class="p">(</span><span class="nv">$::operatingsystemrelease,</span> <span class="s">'8.0'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">))</span>
<span class="p">{</span>
<span class="nv">$systemd_enabled</span> <span class="o">=</span> <span class="p">[</span><span class="s">'systemd'</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="nv">$systemd_enabled</span> <span class="o">=</span> <span class="p">[]</span>
<span class="p">}</span>
<span class="nv">$automatic_subscriptions</span> <span class="o">=</span> <span class="na">concat</span><span class="p">(</span><span class="nv">$machine_type,</span> <span class="nv">$gpu,</span> <span class="nv">$systemd_enabled,</span> <span class="p">[</span><span class="s">'client_specific'</span><span class="p">])</span>
</code></pre></div>
<p>After a while, hardcoding checks gets annoying and that’s why I try to automatically detect some things based on hardware or operating system.</p>
<ul>
<li><code>::is_virtual</code> is a default Puppet fact. I’ll add checks for S.M.A.R.T. as well as RAID checks and <code>sensors</code> metrics if run on a physical machine. <em>(not included in this example)</em></li>
<li><code>::has_nvidia_graphics_card</code> is a fact taken from <a href="https://github.com/jaredjennings/puppet-nvidia_graphics">jaredjennings/puppet-nvidia_graphics</a>. I’ll add GPU specific metrics based on that. <em>(not included in this example)</em></li>
<li>I’ll also try to decide whether Systemd is managing the host or not. I’ll add some specific service checks based on that. <em>(not included in this example)</em></li>
</ul>
<p>The automatic subscriptions are then combined with a pseudo-subscription called <code>client_specific</code> that I use to distribute only the configuration of various client specific checks to hosts.</p>
<h3 id="metrics-templates">metrics templates</h3>
<div class="highlight"><pre><span></span><code><span class="c"># template variables (must be in class scope)</span>
<span class="nv">$default_scheme</span> <span class="o">=</span> <span class="s">'sensu.host.$(hostname)'</span>
<span class="nv">$metrics_handler</span> <span class="o">=</span> <span class="p">[</span><span class="s">'graphite_tcp'</span><span class="p">]</span>
<span class="nv">$timestamp</span> <span class="o">=</span> <span class="s">'`date +%s`'</span>
</code></pre></div>
<p>For easier use of metrics checks that are not written with <a href="https://github.com/sensu-plugins/sensu-plugin">sensu-plugin (the framework)</a> I have some variables that are reused whenever hacking together a check on the quick.</p>
<ul>
<li><code>default_scheme</code> is prepended to a metric, resulting in something like <code>sensu.host.myawesomehostname.cpu.usage</code></li>
<li><code>metrics_handler</code> is an easier way of specifying the handler should we ever need to change it <em>(or extend it).</em></li>
<li><code>timestamp</code> is a simple way to get a UNIX timestamp.</li>
</ul>
<h3 id="sensu-server-packages-and-subscriptions">sensu-server: packages and subscriptions</h3>
<div class="highlight"><pre><span></span><code><span class="c"># SENSU SERVER</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$is_main_server</span> <span class="o">==</span> <span class="k">true</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$combined_subscriptions</span> <span class="o">=</span> <span class="na">unique</span><span class="p">(</span><span class="na">concat</span><span class="p">([</span><span class="s">'proxy'</span><span class="p">],</span> <span class="nv">$subscriptions,</span> <span class="nv">$automatic_subscriptions))</span>
<span class="nv">$server_packages</span> <span class="o">=</span> <span class="p">[</span><span class="s">'redis-server'</span><span class="p">,</span> <span class="s">'curl'</span><span class="p">,</span> <span class="s">'jq'</span><span class="p">]</span>
<span class="nv">$server_plugins</span> <span class="o">=</span> <span class="p">[</span> <span class="s">'sensu-plugins-imap'</span><span class="p">,</span>
<span class="s">'sensu-plugins-slack'</span><span class="p">,</span>
<span class="s">'sensu-plugins-ssl'</span><span class="p">,</span>
<span class="s">'sensu-extensions-occurrences'</span><span class="p">]</span><span class="c"></span>
<span class="c"> # install server-only packages</span>
<span class="k">package</span>
<span class="p">{</span>
<span class="nv">$server_packages:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">present</span><span class="p">,</span>
<span class="p">}</span><span class="c"></span>
<span class="c"> # install plugins for proxy group</span>
<span class="k">package</span>
<span class="p">{</span>
<span class="nv">$server_plugins:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">present</span><span class="p">,</span>
<span class="na">provider</span> <span class="o">=></span> <span class="s">'sensu_gem'</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Package</span><span class="p">[</span><span class="nv">$server_packages],</span>
<span class="p">}</span>
</code></pre></div>
<p>The Sensu server is the machine handling proxy requests for me. That means that checks that check e.g. if a site is available via HTTP on another machine is a proxy check and will in my deployment be run on the Sensu server. To achieve this, a <code>proxy</code> subscription is added to the subscriptions of the server.</p>
<p>Next, the <code>server_packages</code> are installed via the default package management (e.g. <code>apt</code> in my case) and the <code>server_plugins</code> are Sensu specific ruby gems that are installed via the <code>sensu_gem</code> provider that comes with <a href="https://github.com/sensu/sensu-puppet">sensu-puppet</a>.</p>
<h3 id="sensu-server-workaround">sensu-server: workaround</h3>
<div class="highlight"><pre><span></span><code><span class="c"># Workaround for sensu-api not subscribing to check updates.</span>
<span class="k">Class</span><span class="p">[</span><span class="s">'::sensu::client::service'</span><span class="p">]</span> <span class="o">~></span> <span class="k">Class</span><span class="p">[</span><span class="s">'::sensu::api::service'</span><span class="p">]</span>
</code></pre></div>
<p>Sometimes I had the problem that the results for some queries in Uchiwa were not the most recent ones and this snippet seems to have solved them.</p>
<h3 id="sensu-server-configuration">sensu-server: configuration</h3>
<p>This is the part where the <a href="https://github.com/sensu/sensu-puppet">sensu-puppet</a> module is configured by my class.</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span>
<span class="p">{</span>
<span class="s">'::sensu'</span><span class="p">:</span>
<span class="na">rabbitmq_password</span> <span class="o">=></span> <span class="nv">$rabbitmq_password,</span>
<span class="na">server</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">client</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">api</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">api_bind</span> <span class="o">=></span> <span class="s">'127.0.0.1'</span><span class="p">,</span>
<span class="na">use_embedded_ruby</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">rabbitmq_reconnect_on_error</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">redis_reconnect_on_error</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">redis_auto_reconnect</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">subscriptions</span> <span class="o">=></span> <span class="nv">$combined_subscriptions,</span>
<span class="na">rabbitmq_host</span> <span class="o">=></span> <span class="s">'127.0.0.1'</span><span class="p">,</span>
<span class="na">redis_host</span> <span class="o">=></span> <span class="s">'127.0.0.1'</span><span class="p">,</span>
<span class="na">redact</span> <span class="o">=></span> <span class="p">[</span><span class="s">'password'</span><span class="p">,</span> <span class="s">'pass'</span><span class="p">,</span> <span class="s">'api_key'</span><span class="p">,</span><span class="s">'token'</span><span class="p">],</span>
<span class="na">purge</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">safe_mode</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Package</span><span class="p">[</span><span class="nv">$server_packages],</span>
<span class="na">client_custom</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">kibana_url</span> <span class="o">=></span> <span class="nv">$kibana_url,</span>
<span class="na">grafana_url</span> <span class="o">=></span> <span class="nv">$grafana_url,</span>
<span class="na">type</span> <span class="o">=></span> <span class="nv">$::virtual,</span>
<span class="na">operating_system</span> <span class="o">=></span> <span class="nv">$::lsbdistdescription,</span>
<span class="na">kernel</span> <span class="o">=></span> <span class="nv">$::kernelrelease,</span>
<span class="na">puppet_version</span> <span class="o">=></span> <span class="nv">$::puppetversion,</span>
<span class="na">gitlab_health</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">token</span> <span class="o">=></span> <span class="nv">$gitlab_health_token,</span>
<span class="p">},</span>
<span class="na">ldap_sensu</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">password</span> <span class="o">=></span> <span class="nv">$sensu_monitoring_password,</span>
<span class="p">},</span>
<span class="na">gitlab_issues</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">token</span> <span class="o">=></span> <span class="nv">$gitlab_issues_token,</span>
<span class="p">},</span>
<span class="na">assignments_health</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">token</span> <span class="o">=></span> <span class="nv">$assignments_health_token,</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<p>You can read about most parameters <a href="https://github.com/sensu/sensu-puppet/blob/master/README.md">in the docs</a>. Here are some general hints:</p>
<ul>
<li><code>api_bind</code>: I bind to the machine so everything needs to be proxied (e.g. with Apache or Nginx).</li>
<li><code>rabbitmq_reconnect_on_error</code>, <code>redis_reconnect_on_error</code>, <code>redis_auto_reconnect</code>: I want my deployment to be potentially self-healing.</li>
<li><code>redact</code>: I have some additional keywords here that will be redacted in the API output. Please check out the <a href="https://sensuapp.org/docs/latest/reference/clients.html#client-attributes">Sensu docs on redaction</a>, it’s a great feature.</li>
<li><code>purge</code>: I enable this since I control all changes centrally. <em>[<a href="https://www.youtube.com/watch?v=p3h8ZnXLsRg">queue Mass Effect 2 taking direct control soundbite</a>]</em></li>
<li><code>safe_mode</code>: Though it is more work, you probably do not want your hosts to run arbitrary commands.</li>
</ul>
<p>The <code>client_custom</code> section is where additional attributes are defined. I’ve already talked about <code>kibana_url</code> and <code>grafana_url</code>. I find that the <code>operating system</code>, the <code>kernel</code> version, the <code>puppet_version</code> and whether the host is virtual or physical are helpful information to display on its dashboard page, so I include these.</p>
<p>The tokens and passwords are written to files on the host, and can then easily be referenced in Sensu <code>command</code>s using e.g. <code>:::gitlab_health.token:::</code>.</p>
<h3 id="sensu-server-uchiwa">sensu-server: uchiwa</h3>
<div class="highlight"><pre><span></span><code><span class="k">class</span>
<span class="p">{</span>
<span class="s">'::uchiwa'</span><span class="p">:</span>
<span class="na">install_repo</span> <span class="o">=></span> <span class="k">false</span><span class="p">,</span>
<span class="k">host</span> <span class="o">=></span> <span class="s">'127.0.0.1'</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Class</span><span class="p">[</span><span class="s">'::sensu'</span><span class="p">],</span>
<span class="p">}</span>
</code></pre></div>
<p>I run <a href="https://uchiwa.io/#/">Uchiwa</a>, the dashboard for Sensu on the same machine and have it proxied. Note that this requires the <a href="https://github.com/Yelp/puppet-uchiwa">yelp/uchiwa</a> Puppet module.</p>
<h3 id="sensu-server-includes">sensu-server: includes</h3>
<div class="highlight"><pre><span></span><code><span class="c"> # sensu server specific checks</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">core</span><span class="c"></span>
<span class="c"> # include all checks here, so that the master has all in order to run</span>
<span class="c"> # with safe_mode => true</span>
<span class="c"> # subscription: proxy</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">imap</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">certificates</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">client_specific</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">api_health</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">availability</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">remote_metrics</span><span class="c"></span>
<span class="c"> # automatic subscriptions</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">nvidia</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">physical</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">systemd</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">virtual</span><span class="c"></span>
<span class="c"> # last part is subscription name</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">elasticsearch</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">fail2ban</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">kibana</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">ldap</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">mailman</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">logstash</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">seafile</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">seahub</span><span class="c"></span>
<span class="c"> # include handler definitions</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">handlers</span>
<span class="p">}</span>
</code></pre></div>
<p>Since I’m using <code>safe_mode</code>, the Sensu server needs to have every single check that should be run. I include them here, manually.</p>
<p>Structuring your checks into neatly partitioned and readable files is a daunting task. I’ve tried to do it the following way: There is one file that holds checks that are common (<code>core</code>). I’ve grouped all <code>proxy</code> subscription checks into one block, automatic subscriptions into the second block and files that are automatically included based on the content of the <code>subscriptions</code> array that the class receives in the third block. Handler definitions also get their own file (<code>handlers</code>) since they get unwieldy even with only a few handlers.</p>
<h3 id="sensu-client-subscriptions">sensu-client: subscriptions</h3>
<div class="highlight"><pre><span></span><code><span class="c"># SENSU CLIENT</span>
<span class="k">else</span>
<span class="p">{</span><span class="c"></span>
<span class="c"> # default client configuration</span>
<span class="nv">$combined_subscriptions</span> <span class="o">=</span> <span class="na">unique</span><span class="p">(</span><span class="na">concat</span><span class="p">(</span><span class="nv">$subscriptions,</span> <span class="nv">$automatic_subscriptions))</span><span class="c"></span>
<span class="c"> # default include checks and metrics</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">core</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">client_specific</span><span class="c"></span>
<span class="c"> # automatically include checks for subscriptions</span>
<span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">combined_subscriptions</span><span class="p">{</span><span class="nv">$combined_subscriptions:}</span>
</code></pre></div>
<p>Similar to the server, the client gets a combination of (manual) <code>subscription</code> and <code>automatic_subscriptions</code>. Then, the <code>core</code> checks and metrics are included as well as any <code>client_specific</code> ones. I include Puppet classes automatically based on the <code>combined_subscriptions</code> then. For your convenience I’ll include this Puppet hack.</p>
<div class="highlight"><pre><span></span><code><span class="c">## combined_subscriptions.pp</span>
<span class="c"># Define: services::sensu::combined_subscriptions</span>
<span class="c"># use a define to dynamically include classes with checks</span>
<span class="k">define</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">combined_subscriptions</span>
<span class="p">{</span>
<span class="k">include</span> <span class="s">"services::sensu::${name}"</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="sensu-client-keepalive-configuration">sensu-client: keepalive configuration</h3>
<div class="highlight"><pre><span></span><code><span class="c"># if the client is not consistently connected, warn after 2 weeks</span>
<span class="c"># and throw a critical error after 4 weeks</span>
<span class="c"># something will be wrong, outdated or the client can be removed</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$consistent_connection</span> <span class="o">==</span> <span class="k">false</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$client_keepalive</span> <span class="o">=</span>
<span class="p">{</span>
<span class="na">thresholds</span> <span class="o">=></span>
<span class="p">{</span>
<span class="k">warning</span> <span class="o">=></span> <span class="mi">1209600</span><span class="p">,</span>
<span class="na">critical</span> <span class="o">=></span> <span class="mi">2419200</span><span class="p">,</span>
<span class="p">},</span>
<span class="na">handlers</span> <span class="o">=></span> <span class="p">[</span><span class="s">'default'</span><span class="p">,</span> <span class="s">'mail'</span><span class="p">,</span> <span class="s">'mattermost'</span><span class="p">],</span>
<span class="na">runbook</span> <span class="o">=></span> <span class="s">"${runbook_prefix}/keepalive.markdown"</span><span class="p">,</span>
<span class="na">occurences</span> <span class="o">=></span> <span class="nv">$keepalive_occurrences,</span>
<span class="na">refresh</span> <span class="o">=></span> <span class="nv">$keepalive_refresh,</span>
<span class="na">impact</span> <span class="o">=></span> <span class="nv">$keepalive_impact,</span>
<span class="na">suggestion</span> <span class="o">=></span> <span class="nv">$keepalive_suggestion,</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="nv">$client_keepalive</span> <span class="o">=</span>
<span class="p">{</span>
<span class="na">handlers</span> <span class="o">=></span> <span class="p">[</span><span class="s">'default'</span><span class="p">,</span> <span class="s">'mail'</span><span class="p">,</span> <span class="s">'mattermost'</span><span class="p">],</span>
<span class="na">runbook</span> <span class="o">=></span> <span class="s">"${runbook_prefix}/keepalive.markdown"</span><span class="p">,</span>
<span class="na">occurences</span> <span class="o">=></span> <span class="nv">$keepalive_occurrences,</span>
<span class="na">refresh</span> <span class="o">=></span> <span class="nv">$keepalive_refresh,</span>
<span class="na">impact</span> <span class="o">=></span> <span class="nv">$keepalive_impact,</span>
<span class="na">suggestion</span> <span class="o">=></span> <span class="nv">$keepalive_suggestion,</span>
<span class="p">}</span>
</code></pre></div>
<p>The configuration for keepalive events is part of the client attributes, not a separate check. If I set <code>consistent_connection</code> to <code>false</code>, it will take some weeks until I am notified of a “missing” device. Filters are configured via <code>occurrences</code> and <code>refresh</code>. The Sensu developers wrote a <a href="https://blog.sensuapp.org/deprecating-event-filtering-in-sensu-plugin-b60c7c500be3">helpful blog post on that</a>.
<em>Again, if you have a new enough version of Sensu, you should not need this.</em></p>
<p>As you can see, the “check” also has a runbook, an impact description and an operator suggestion defined to make manual intervention very easy.</p>
<h3 id="sensu-client-configuration">sensu-client: configuration</h3>
<p>This is the part where the <a href="https://github.com/sensu/sensu-puppet">sensu-puppet</a> module is configured by my class.</p>
<div class="highlight"><pre><span></span><code> <span class="k">class</span>
<span class="p">{</span>
<span class="s">'::sensu'</span><span class="p">:</span>
<span class="na">rabbitmq_password</span> <span class="o">=></span> <span class="nv">$rabbitmq_password,</span>
<span class="na">rabbitmq_host</span> <span class="o">=></span> <span class="s">'REDACTED'</span><span class="p">,</span>
<span class="na">rabbitmq_port</span> <span class="o">=></span> <span class="s">'5671'</span><span class="p">,</span>
<span class="na">server</span> <span class="o">=></span> <span class="k">false</span><span class="p">,</span>
<span class="na">api</span> <span class="o">=></span> <span class="k">false</span><span class="p">,</span>
<span class="na">client</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">client_keepalive</span> <span class="o">=></span> <span class="nv">$client_keepalive,</span>
<span class="na">subscriptions</span> <span class="o">=></span> <span class="nv">$combined_subscriptions,</span>
<span class="na">rabbitmq_ssl</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">rabbitmq_ssl_private_key</span> <span class="o">=></span> <span class="s">'puppet:///modules/services/sensu/client-key.pem'</span><span class="p">,</span>
<span class="na">rabbitmq_ssl_cert_chain</span> <span class="o">=></span> <span class="s">'puppet:///modules/services/sensu/client-cert.pem'</span><span class="p">,</span>
<span class="na">use_embedded_ruby</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">rabbitmq_reconnect_on_error</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">purge</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">safe_mode</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Package</span><span class="p">[</span><span class="s">'ruby-json'</span><span class="p">],</span>
<span class="na">client_custom</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">kibana_url</span> <span class="o">=></span> <span class="nv">$kibana_url,</span>
<span class="na">grafana_url</span> <span class="o">=></span> <span class="nv">$grafana_url,</span>
<span class="na">type</span> <span class="o">=></span> <span class="nv">$::virtual,</span>
<span class="na">operating_system</span> <span class="o">=></span> <span class="nv">$::lsbdistdescription,</span>
<span class="na">kernel</span> <span class="o">=></span> <span class="nv">$::kernelrelease,</span>
<span class="na">puppet_version</span> <span class="o">=></span> <span class="nv">$::puppetversion,</span>
<span class="p">},</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<p>There is nothing especially fancy here except the <code>client_keepalive</code> which gets filled with the values from a previous section. Everything else should either be taken from the docs or was already explained earlier.</p>
<p>Of note: <code>rabbitmq_ssl_private_key</code> and <code>rabbitmq_ssl_cert_chain</code> are the same for every host. This is an (unfortunate) implementation detail which allows only one cert in use for the whole Sensu transport deployment. <em>I think I would’ve liked to piggyback onto Puppet’s certificates if possible, but am quite aware this is neither good in terms of compartmentalization nor good design.</em></p>
<h3 id="common">common</h3>
<div class="highlight"><pre><span></span><code> <span class="k">package</span>
<span class="p">{</span>
<span class="nv">$plugins:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">installed</span><span class="p">,</span>
<span class="na">provider</span> <span class="o">=></span> <span class="s">'sensu_gem'</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">file</span>
<span class="p">{</span>
<span class="s">'/etc/sudoers.d/sensu'</span><span class="p">:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">file</span><span class="p">,</span>
<span class="na">owner</span> <span class="o">=></span> <span class="s">'root'</span><span class="p">,</span>
<span class="na">group</span> <span class="o">=></span> <span class="s">'root'</span><span class="p">,</span>
<span class="na">mode</span> <span class="o">=></span> <span class="s">'0440'</span><span class="p">,</span>
<span class="na">source</span> <span class="o">=></span> <span class="s">'puppet:///modules/services/sensu/sudoers.d'</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Package</span><span class="p">[</span><span class="s">'sudo'</span><span class="p">],</span>
<span class="p">}</span><span class="c"></span>
<span class="c"> # all nodes need development dependencies for native extentions</span>
<span class="nv">$client_packages</span> <span class="o">=</span> <span class="p">[</span><span class="s">'g++'</span><span class="p">,</span> <span class="s">'make'</span><span class="p">,</span> <span class="s">'ruby-json'</span><span class="p">,</span> <span class="s">'sudo'</span><span class="p">]</span>
<span class="k">Class</span><span class="p">[</span><span class="s">'apt::update'</span><span class="p">]</span>
<span class="o">-></span> <span class="k">Package</span><span class="p">[</span><span class="nv">$client_packages]</span>
<span class="k">package</span>
<span class="p">{</span>
<span class="nv">$client_packages:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">present</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<p>This section is for both the server and the client part. The list of sensu-plugins is installed via <code>sensu_gem</code>. Some checks I use with Sensu require <code>sudo</code> rights, so I distribute a customized sudoers file directly into <code>/etc/sudoers.d/</code> which whitelists some commands for Sensu.</p>
<p>Since it is often the case that Ruby gems try to build native extensions on installation we require development tools on each host.</p>
<p>As a last little detail I make sure to only install packages after an <code>apt-get update</code> run. <em>I think I added this since I was often testing my setup in a Docker container via GitLab’s CI feature. It is good practice to have a container that is as small as possible, so people delete the cached <code>apt</code> sources which leads to errors while installing packages if <code>apt-get update</code> is not run before an <code>apt-get install PACKAGE</code>.</em></p>
<h2 id="minimal-example">Minimal example</h2>
<p>Alright, so now I’ve written quite a bit about this specific class, but how would one actually use all of this? Let’s see a minimal working example.</p>
<div class="highlight"><pre><span></span><code><span class="c"># site.pp</span>
<span class="k">node</span> <span class="s">'myhostname.mydomain.com'</span>
<span class="p">{</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span>
<span class="p">}</span>
</code></pre></div>
<p>If you wanted to add additional (previously implemented) subscriptions, you would use something like this:</p>
<div class="highlight"><pre><span></span><code><span class="c"># site.pp</span>
<span class="k">node</span> <span class="s">'example.domain.com'</span>
<span class="p">{</span>
<span class="k">class</span><span class="p">{</span> <span class="s">'services::sensu'</span><span class="p">:</span> <span class="na">subscriptions</span> <span class="o">=></span> <span class="p">[</span><span class="s">'fail2ban'</span><span class="p">,</span> <span class="s">'ldap'</span><span class="p">]}</span>
<span class="p">}</span>
</code></pre></div>
<h2 id="sensupp">sensu.pp</h2>
<div class="highlight"><pre><span></span><code><span class="c"># Class: services::sensu</span>
<span class="c"># Manages configuration, checks, handlers and certs for</span>
<span class="c"># the sensu monitoring system</span>
<span class="c">#</span>
<span class="c"># parameters:</span>
<span class="c"># (bool) is_main_server: makes this server the main host on which sensu is run</span>
<span class="c"># (bool) consistent_connection: if set to `false`, enables high-value timeouts</span>
<span class="c"># for sensu keepalive checks</span>
<span class="c"># (array) subscriptions: the check groups a host should subscribe to</span>
<span class="k">class</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">(</span><span class="nv">$is_main_server</span> <span class="o">=</span> <span class="k">false</span><span class="p">,</span>
<span class="nv">$consistent_connection</span> <span class="o">=</span> <span class="k">true</span><span class="p">,</span>
<span class="nv">$subscriptions</span> <span class="o">=</span> <span class="p">[])</span>
<span class="p">{</span><span class="c"></span>
<span class="c"> # configuration</span>
<span class="nv">$rabbitmq_password</span> <span class="o">=</span> <span class="s">'REDACTED'</span>
<span class="nv">$gitlab_health_token</span> <span class="o">=</span> <span class="s">'REDACTED'</span>
<span class="nv">$gitlab_issues_token</span> <span class="o">=</span> <span class="s">'REDACTED'</span>
<span class="nv">$assignments_health_token</span> <span class="o">=</span> <span class="s">'REDACTED'</span>
<span class="nv">$sensu_monitoring_password</span> <span class="o">=</span> <span class="s">'REDACTED'</span><span class="c"></span>
<span class="c"> # installed sensu plugins</span>
<span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[</span><span class="s">'sensu-plugins-cpu-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-disk-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-environmental-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-filesystem-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-http'</span><span class="p">,</span>
<span class="s">'sensu-plugins-load-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-memory-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-network-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-nvidia'</span><span class="p">,</span>
<span class="s">'sensu-plugins-ntp'</span><span class="p">,</span>
<span class="s">'sensu-plugins-postfix'</span><span class="p">,</span>
<span class="s">'sensu-plugins-process-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-puppet'</span><span class="p">,</span>
<span class="s">'sensu-plugins-raid-checks'</span><span class="p">,</span>
<span class="s">'sensu-plugins-uptime-checks'</span><span class="p">]</span><span class="c"></span>
<span class="c"> # kibana URL - allows clicking to jump to filtered log results</span>
<span class="nv">$kibana_url</span> <span class="o">=</span> <span class="s">"https://REDACTED/#/discover?_g=()&_a=(columns:!(_source),interval:auto,query:(query_string:(analyze_wildcard:!t,query:'host:${::hostname}')),sort:!('@timestamp',desc),index:%5Blogstash-%5DYYYY.MM.DD)#"</span><span class="c"></span>
<span class="c"> # grafana URL - allows clicking to jump to filtered metrics</span>
<span class="nv">$grafana_url</span> <span class="o">=</span> <span class="s">"https://REDACTED/dashboard/db/single-host-overview?var-hostname=${::hostname}"</span><span class="c"></span>
<span class="c"> # runbook prefix - allows linking directly to a propose solution</span>
<span class="nv">$runbook_prefix</span> <span class="o">=</span> <span class="s">'https://REDACTED/administrators/documentation/blob/master/runbooks/sensu'</span><span class="c"></span>
<span class="c"> # how many times should keepalive fire before notifications</span>
<span class="nv">$keepalive_occurrences</span> <span class="o">=</span> <span class="s">'1'</span><span class="c"></span>
<span class="c"> # how much time needs to pass until keepalive notification is repeated (in seconds)</span>
<span class="nv">$keepalive_refresh</span> <span class="o">=</span> <span class="s">'3600'</span><span class="c"></span>
<span class="c"> # impact text for keepalive</span>
<span class="nv">$keepalive_impact</span> <span class="o">=</span> <span class="s">'Host is not checking in with monitoring and may be completely unavailable.'</span><span class="c"></span>
<span class="c"> # suggestion text for keepalive</span>
<span class="nv">$keepalive_suggestion</span> <span class="o">=</span> <span class="s">'Check if the host is frozen, stuck, down or offline.'</span><span class="c"></span>
<span class="c"> # automatic subscriptions computed from machine properties</span>
<span class="k">if</span> <span class="p">(</span><span class="na">str2bool</span><span class="p">(</span><span class="nv">$::is_virtual)</span> <span class="o">==</span> <span class="k">true</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$machine_type</span> <span class="o">=</span> <span class="p">[</span><span class="s">'virtual'</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="nv">$machine_type</span> <span class="o">=</span> <span class="p">[</span><span class="s">'physical'</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="na">str2bool</span><span class="p">(</span><span class="nv">$::has_nvidia_graphics_card)</span> <span class="o">==</span> <span class="k">true</span> <span class="na">and</span> <span class="na">str2bool</span><span class="p">(</span><span class="nv">$::using_nouveau_driver)</span> <span class="o">==</span> <span class="k">false</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$gpu</span> <span class="o">=</span> <span class="p">[</span><span class="s">'nvidia'</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="nv">$gpu</span> <span class="o">=</span> <span class="p">[]</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">((</span><span class="nv">$::operatingsystem</span> <span class="o">==</span> <span class="s">'Ubuntu'</span> <span class="na">and</span> <span class="k">versioncmp</span><span class="p">(</span><span class="nv">$::operatingsystemrelease,</span> <span class="s">'16.04'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">)</span> <span class="na">or</span>
<span class="p">(</span><span class="nv">$::operatingsystem</span> <span class="o">==</span> <span class="s">'Debian'</span> <span class="na">and</span> <span class="k">versioncmp</span><span class="p">(</span><span class="nv">$::operatingsystemrelease,</span> <span class="s">'8.0'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">))</span>
<span class="p">{</span>
<span class="nv">$systemd_enabled</span> <span class="o">=</span> <span class="p">[</span><span class="s">'systemd'</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="nv">$systemd_enabled</span> <span class="o">=</span> <span class="p">[]</span>
<span class="p">}</span>
<span class="nv">$automatic_subscriptions</span> <span class="o">=</span> <span class="na">concat</span><span class="p">(</span><span class="nv">$machine_type,</span> <span class="nv">$gpu,</span> <span class="nv">$systemd_enabled,</span> <span class="p">[</span><span class="s">'client_specific'</span><span class="p">])</span><span class="c"></span>
<span class="c"> # template variables (must be in class scope)</span>
<span class="nv">$default_scheme</span> <span class="o">=</span> <span class="s">'sensu.host.$(hostname)'</span>
<span class="nv">$metrics_handler</span> <span class="o">=</span> <span class="p">[</span><span class="s">'graphite_tcp'</span><span class="p">]</span>
<span class="nv">$timestamp</span> <span class="o">=</span> <span class="s">'`date +%s`'</span><span class="c"></span>
<span class="c"> # SENSU SERVER</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$is_main_server</span> <span class="o">==</span> <span class="k">true</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$combined_subscriptions</span> <span class="o">=</span> <span class="na">unique</span><span class="p">(</span><span class="na">concat</span><span class="p">([</span><span class="s">'proxy'</span><span class="p">],</span> <span class="nv">$subscriptions,</span> <span class="nv">$automatic_subscriptions))</span>
<span class="nv">$server_packages</span> <span class="o">=</span> <span class="p">[</span><span class="s">'redis-server'</span><span class="p">,</span> <span class="s">'curl'</span><span class="p">,</span> <span class="s">'jq'</span><span class="p">]</span>
<span class="nv">$server_plugins</span> <span class="o">=</span> <span class="p">[</span> <span class="s">'sensu-plugins-imap'</span><span class="p">,</span>
<span class="s">'sensu-plugins-slack'</span><span class="p">,</span>
<span class="s">'sensu-plugins-ssl'</span><span class="p">,</span>
<span class="s">'sensu-extensions-occurrences'</span><span class="p">]</span><span class="c"></span>
<span class="c"> # install server-only packages</span>
<span class="k">package</span>
<span class="p">{</span>
<span class="nv">$server_packages:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">present</span><span class="p">,</span>
<span class="p">}</span><span class="c"></span>
<span class="c"> # install plugins for proxy group</span>
<span class="k">package</span>
<span class="p">{</span>
<span class="nv">$server_plugins:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">present</span><span class="p">,</span>
<span class="na">provider</span> <span class="o">=></span> <span class="s">'sensu_gem'</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Package</span><span class="p">[</span><span class="nv">$server_packages],</span>
<span class="p">}</span><span class="c"></span>
<span class="c"> # Workaround for sensu-api not subscribing to check updates.</span>
<span class="k">Class</span><span class="p">[</span><span class="s">'::sensu::client::service'</span><span class="p">]</span> <span class="o">~></span> <span class="k">Class</span><span class="p">[</span><span class="s">'::sensu::api::service'</span><span class="p">]</span>
<span class="k">class</span>
<span class="p">{</span>
<span class="s">'::sensu'</span><span class="p">:</span>
<span class="na">rabbitmq_password</span> <span class="o">=></span> <span class="nv">$rabbitmq_password,</span>
<span class="na">server</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">client</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">api</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">api_bind</span> <span class="o">=></span> <span class="s">'127.0.0.1'</span><span class="p">,</span>
<span class="na">use_embedded_ruby</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">rabbitmq_reconnect_on_error</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">redis_reconnect_on_error</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">redis_auto_reconnect</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">subscriptions</span> <span class="o">=></span> <span class="nv">$combined_subscriptions,</span>
<span class="na">rabbitmq_host</span> <span class="o">=></span> <span class="s">'127.0.0.1'</span><span class="p">,</span>
<span class="na">redis_host</span> <span class="o">=></span> <span class="s">'127.0.0.1'</span><span class="p">,</span>
<span class="na">redact</span> <span class="o">=></span> <span class="p">[</span><span class="s">'password'</span><span class="p">,</span> <span class="s">'pass'</span><span class="p">,</span> <span class="s">'api_key'</span><span class="p">,</span><span class="s">'token'</span><span class="p">],</span>
<span class="na">purge</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">safe_mode</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Package</span><span class="p">[</span><span class="nv">$server_packages],</span>
<span class="na">client_custom</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">kibana_url</span> <span class="o">=></span> <span class="nv">$kibana_url,</span>
<span class="na">grafana_url</span> <span class="o">=></span> <span class="nv">$grafana_url,</span>
<span class="na">type</span> <span class="o">=></span> <span class="nv">$::virtual,</span>
<span class="na">operating_system</span> <span class="o">=></span> <span class="nv">$::lsbdistdescription,</span>
<span class="na">kernel</span> <span class="o">=></span> <span class="nv">$::kernelrelease,</span>
<span class="na">puppet_version</span> <span class="o">=></span> <span class="nv">$::puppetversion,</span>
<span class="na">gitlab_health</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">token</span> <span class="o">=></span> <span class="nv">$gitlab_health_token,</span>
<span class="p">},</span>
<span class="na">ldap_sensu</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">password</span> <span class="o">=></span> <span class="nv">$sensu_monitoring_password,</span>
<span class="p">},</span>
<span class="na">gitlab_issues</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">token</span> <span class="o">=></span> <span class="nv">$gitlab_issues_token,</span>
<span class="p">},</span>
<span class="na">assignments_health</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">token</span> <span class="o">=></span> <span class="nv">$assignments_health_token,</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">class</span>
<span class="p">{</span>
<span class="s">'::uchiwa'</span><span class="p">:</span>
<span class="na">install_repo</span> <span class="o">=></span> <span class="k">false</span><span class="p">,</span>
<span class="k">host</span> <span class="o">=></span> <span class="s">'127.0.0.1'</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Class</span><span class="p">[</span><span class="s">'::sensu'</span><span class="p">],</span>
<span class="p">}</span><span class="c"></span>
<span class="c"> # sensu server specific checks</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">core</span><span class="c"></span>
<span class="c"> # include all checks here, so that the master has all in order to run</span>
<span class="c"> # with safe_mode => true</span>
<span class="c"> # subscription: proxy</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">imap</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">certificates</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">client_specific</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">api_health</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">availability</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">remote_metrics</span><span class="c"></span>
<span class="c"> # automatic subscriptions</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">nvidia</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">physical</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">systemd</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">virtual</span><span class="c"></span>
<span class="c"> # last part is subscription name</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">elasticsearch</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">fail2ban</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">kibana</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">ldap</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">mailman</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">logstash</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">seafile</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">seahub</span><span class="c"></span>
<span class="c"> # include handler definitions</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">handlers</span>
<span class="p">}</span><span class="c"></span>
<span class="c"> # SENSU CLIENT</span>
<span class="k">else</span>
<span class="p">{</span><span class="c"></span>
<span class="c"> # default client configuration</span>
<span class="nv">$combined_subscriptions</span> <span class="o">=</span> <span class="na">unique</span><span class="p">(</span><span class="na">concat</span><span class="p">(</span><span class="nv">$subscriptions,</span> <span class="nv">$automatic_subscriptions))</span><span class="c"></span>
<span class="c"> # default include checks and metrics</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">core</span>
<span class="k">include</span> <span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">client_specific</span><span class="c"></span>
<span class="c"> # automatically include checks for subscriptions</span>
<span class="na">services</span><span class="p">::</span><span class="na">sensu</span><span class="p">::</span><span class="na">combined_subscriptions</span><span class="p">{</span><span class="nv">$combined_subscriptions:}</span><span class="c"></span>
<span class="c"> # if the client is not consistently connected, warn after 2 weeks</span>
<span class="c"> # and throw a critical error after 4 weeks</span>
<span class="c"> # something will be wrong, outdated or the client can be removed</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$consistent_connection</span> <span class="o">==</span> <span class="k">false</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$client_keepalive</span> <span class="o">=</span>
<span class="p">{</span>
<span class="na">thresholds</span> <span class="o">=></span>
<span class="p">{</span>
<span class="k">warning</span> <span class="o">=></span> <span class="mi">1209600</span><span class="p">,</span>
<span class="na">critical</span> <span class="o">=></span> <span class="mi">2419200</span><span class="p">,</span>
<span class="p">},</span>
<span class="na">handlers</span> <span class="o">=></span> <span class="p">[</span><span class="s">'default'</span><span class="p">,</span> <span class="s">'mail'</span><span class="p">,</span> <span class="s">'mattermost'</span><span class="p">],</span>
<span class="na">runbook</span> <span class="o">=></span> <span class="s">"${runbook_prefix}/keepalive.markdown"</span><span class="p">,</span>
<span class="na">occurences</span> <span class="o">=></span> <span class="nv">$keepalive_occurrences,</span>
<span class="na">refresh</span> <span class="o">=></span> <span class="nv">$keepalive_refresh,</span>
<span class="na">impact</span> <span class="o">=></span> <span class="nv">$keepalive_impact,</span>
<span class="na">suggestion</span> <span class="o">=></span> <span class="nv">$keepalive_suggestion,</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="p">{</span>
<span class="nv">$client_keepalive</span> <span class="o">=</span>
<span class="p">{</span>
<span class="na">handlers</span> <span class="o">=></span> <span class="p">[</span><span class="s">'default'</span><span class="p">,</span> <span class="s">'mail'</span><span class="p">,</span> <span class="s">'mattermost'</span><span class="p">],</span>
<span class="na">runbook</span> <span class="o">=></span> <span class="s">"${runbook_prefix}/keepalive.markdown"</span><span class="p">,</span>
<span class="na">occurences</span> <span class="o">=></span> <span class="nv">$keepalive_occurrences,</span>
<span class="na">refresh</span> <span class="o">=></span> <span class="nv">$keepalive_refresh,</span>
<span class="na">impact</span> <span class="o">=></span> <span class="nv">$keepalive_impact,</span>
<span class="na">suggestion</span> <span class="o">=></span> <span class="nv">$keepalive_suggestion,</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">class</span>
<span class="p">{</span>
<span class="s">'::sensu'</span><span class="p">:</span>
<span class="na">rabbitmq_password</span> <span class="o">=></span> <span class="nv">$rabbitmq_password,</span>
<span class="na">rabbitmq_host</span> <span class="o">=></span> <span class="s">'REDACTED'</span><span class="p">,</span>
<span class="na">rabbitmq_port</span> <span class="o">=></span> <span class="s">'5671'</span><span class="p">,</span>
<span class="na">server</span> <span class="o">=></span> <span class="k">false</span><span class="p">,</span>
<span class="na">api</span> <span class="o">=></span> <span class="k">false</span><span class="p">,</span>
<span class="na">client</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">client_keepalive</span> <span class="o">=></span> <span class="nv">$client_keepalive,</span>
<span class="na">subscriptions</span> <span class="o">=></span> <span class="nv">$combined_subscriptions,</span>
<span class="na">rabbitmq_ssl</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">rabbitmq_ssl_private_key</span> <span class="o">=></span> <span class="s">'puppet:///modules/services/sensu/client-key.pem'</span><span class="p">,</span>
<span class="na">rabbitmq_ssl_cert_chain</span> <span class="o">=></span> <span class="s">'puppet:///modules/services/sensu/client-cert.pem'</span><span class="p">,</span>
<span class="na">use_embedded_ruby</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">rabbitmq_reconnect_on_error</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">purge</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">safe_mode</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Package</span><span class="p">[</span><span class="s">'ruby-json'</span><span class="p">],</span>
<span class="na">client_custom</span> <span class="o">=></span>
<span class="p">{</span>
<span class="na">kibana_url</span> <span class="o">=></span> <span class="nv">$kibana_url,</span>
<span class="na">grafana_url</span> <span class="o">=></span> <span class="nv">$grafana_url,</span>
<span class="na">type</span> <span class="o">=></span> <span class="nv">$::virtual,</span>
<span class="na">operating_system</span> <span class="o">=></span> <span class="nv">$::lsbdistdescription,</span>
<span class="na">kernel</span> <span class="o">=></span> <span class="nv">$::kernelrelease,</span>
<span class="na">puppet_version</span> <span class="o">=></span> <span class="nv">$::puppetversion,</span>
<span class="p">},</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">package</span>
<span class="p">{</span>
<span class="nv">$plugins:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">installed</span><span class="p">,</span>
<span class="na">provider</span> <span class="o">=></span> <span class="s">'sensu_gem'</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">file</span>
<span class="p">{</span>
<span class="s">'/etc/sudoers.d/sensu'</span><span class="p">:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">file</span><span class="p">,</span>
<span class="na">owner</span> <span class="o">=></span> <span class="s">'root'</span><span class="p">,</span>
<span class="na">group</span> <span class="o">=></span> <span class="s">'root'</span><span class="p">,</span>
<span class="na">mode</span> <span class="o">=></span> <span class="s">'0440'</span><span class="p">,</span>
<span class="na">source</span> <span class="o">=></span> <span class="s">'puppet:///modules/services/sensu/sudoers.d'</span><span class="p">,</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">Package</span><span class="p">[</span><span class="s">'sudo'</span><span class="p">],</span>
<span class="p">}</span><span class="c"></span>
<span class="c"> # all nodes need development dependencies for native extentions</span>
<span class="nv">$client_packages</span> <span class="o">=</span> <span class="p">[</span><span class="s">'g++'</span><span class="p">,</span> <span class="s">'make'</span><span class="p">,</span> <span class="s">'ruby-json'</span><span class="p">,</span> <span class="s">'sudo'</span><span class="p">]</span>
<span class="k">Class</span><span class="p">[</span><span class="s">'apt::update'</span><span class="p">]</span>
<span class="o">-></span> <span class="k">Package</span><span class="p">[</span><span class="nv">$client_packages]</span>
<span class="k">package</span>
<span class="p">{</span>
<span class="nv">$client_packages:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">present</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>Site structure updates2017-06-23T20:32:00+02:002017-06-23T20:32:00+02:00Alexander Skibatag:ghostlyrics.net,2017-06-23:/site-structure-updates.html<p>I’ve archived the pages for “Companion Gaming” and “The Tea” since I haven’t updated them for a while and no longer plan to do, for several reasons.</p>
<p>In order to make up for that, I’ve put up a page for <a href="/pages/cooking-with-friends.html">Cooking with Friends</a>, a social event I …</p><p>I’ve archived the pages for “Companion Gaming” and “The Tea” since I haven’t updated them for a while and no longer plan to do, for several reasons.</p>
<p>In order to make up for that, I’ve put up a page for <a href="/pages/cooking-with-friends.html">Cooking with Friends</a>, a social event I hold for a circle of my friends and acquaintances and have come to enjoy quite a lot.</p>Stellaris: Stories about an Empire2017-06-17T15:32:00+02:002017-06-17T15:39:00+02:00Alexander Skibatag:ghostlyrics.net,2017-06-17:/stellaris-stories-about-an-empire.html<p>I had the chance to play more <a href="http://store.steampowered.com/app/281990/Stellaris/">Stellaris</a> when Final Fantasy XIV was in maintenance mode to prepare for the release and Early Access period of its expansion, Stormblood. This time I took some notes. While the storytelling of Stellaris tends to be very direct, I find it fascinating to …</p><p>I had the chance to play more <a href="http://store.steampowered.com/app/281990/Stellaris/">Stellaris</a> when Final Fantasy XIV was in maintenance mode to prepare for the release and Early Access period of its expansion, Stormblood. This time I took some notes. While the storytelling of Stellaris tends to be very direct, I find it fascinating to see an empire evolve and make different decisions when playing - leading to an experience that is never quite the same.</p>
<p>Let me tell you about <em>the Rhator, of the Rhatorian Collective</em>. They were a <a href="http://store.steampowered.com/app/616190/Stellaris_Nova_Edition_Upgrade_Pack/">race of arachnoids</a> hailing from the desert planet Yuria. Their interest in technology and robots to serve them was almost as old as their civilization and their prevalent reason to take to space was fear - fear of the cycle of destruction and recreation that is life in their galaxy.</p>
<p>While taking their first baby steps exploring via the <a href="http://www.stellariswiki.com/FTL#Warp">Warp</a> drive engines they discovered structures in space - temples to the very gods of their own religion but much older than their civilization. This in turn triggered a revolution and their culture turned to newfound spiritualism, casting aside their former wishes to create artificial servants, for they themselves were but servants to beings of greater nature.</p>
<p>After investigating several worlds that harbored life in the past, the Rhatorian scientists arrived at the conclusion that it was highly unlikely their planet would be to be eradicated of life anytime soon - as a result the report of these findings was made public. Another thing that they found during exploration of nearby star systems was the existence of another society, from 600 000 years ago. The Rhator termed them “Cybrex”. The Cybrex were sentient machines that had developed a massive empire in their time until they started a crusade to wipe out organic machines from the galaxy. Traces of their ruins could be found in various star systems.</p>
<p>When they colonized their first world, it was a curious act. Their thirst for scientific discoveries prompted them not to colonize a neighboring star system but one further away. The first colony was named <em>Memenos</em> and it was a desert world, for that is what the Rhator felt most comfortable with.</p>
<p>The Rhatorian people began to wonder whether there actually is intelligent life out in the galaxy beside themselves, when they finally encountered a space commerce station. It was a curious finding to see a neutral space station not belonging to any other spacefaring society.</p>
<p>Then began the emigration waves. The next planet to be settled was <em>Lazon Prime</em>, in the neighboring star system. However, not all was great in the empire. They failed. They, as a collective, failed to protect their people on Memenos when they could not stop the impact of a gigantic asteroid on Memenos. Millions died that day and would be mourned for generations to come.</p>
<p>After several attempts at centralized governing all colonies and its home world, the Rhatorian Collective decided that Lazon Prime should be their first individual sector.</p>
<p>It was not long until they made contact with the Mandasura Empire, a society of evangelizing plantoid zealots. They were initially sceptic towards the Rhatorian ways and later turned into the reason of the Rhatorian empire’s decline. When several disputes about border rights triggered a war, the Rhator took heavy losses and had to cede four of their systems to the Mandasura. The population consisting of Rhator was enslaved and the indigenous population of primitives was even killed off. The Rhator faced the dreaded end of their civilization - but by different means than they had expected when they took to the stars.</p>
<p><em>This was the point where I concluded that I didn’t want to continue this game since the Mandasura attacked me with a fleet with a value of 4600 and my whole fleet was positioned at 600 at the start of the conflict. Needless to say the situation was more than bleak.</em></p>
<p>I really like how there’s so much story telling potential in Stellaris, but really wish that there was a log of events or such. Some player-accessible record of things that happened during one game. Such a log would allow me to better review how my empire had developed and share my experiences with others.</p>Reading recommendations (2017-04-15)2017-04-15T13:13:00+02:002017-04-15T13:13:00+02:00Alexander Skibatag:ghostlyrics.net,2017-04-15:/reading-recommendations-2017-04-15.html<p>I feel bad about dropping so many things into the Sidenotes uncommented - however not putting out this post for longer only makes it worse. I’ve been very, very busy in the last few weeks and expect it to stay this way for some more time.</p>
<p>Here’s a <a href="https://twitter.com/MicroSFF/status/834023565427089410">great …</a></p><p>I feel bad about dropping so many things into the Sidenotes uncommented - however not putting out this post for longer only makes it worse. I’ve been very, very busy in the last few weeks and expect it to stay this way for some more time.</p>
<p>Here’s a <a href="https://twitter.com/MicroSFF/status/834023565427089410">great micro story by the ever interesting @microsff Twitter</a> account:</p>
<blockquote>
<p>“Assassin?” the emperor said.<br>
“Yes?” the assassin said.<br>
“I employed you, once, did I not?”<br>
“In case you became a tyrant.”<br>
“Did I?”<br>
“Yes.”</p>
</blockquote>
<p><a href="http://blog.rescuetime.com/2017/01/10/a-lack-of-nature-in-the-office-could-be-decreasing-your-productivity/">A lack of nature in the office could be decreasing your productivity</a> by Belle B. Cooper (blog.rescuetime.com feed)</p>
<blockquote>
<p>But at lunchtime or in the afternoon when you’re facing a slump in energy and struggling to focus, a walk through nature could be just what you need to get through the rest of your workday.</p>
</blockquote>
<p><a href="http://lifehacker.com/why-you-need-a-morning-ritual-not-just-morning-routine-1790830421">Why You Need a Morning Ritual, not Just Morning Routine</a> by Alan Henry (lifehacker.com feed)</p>
<blockquote>
<p>It’s a simple mind shift, but super empowering when you realize that before you even left the house, you’ve done something good, crossed an item off your to-do list, and practiced a little self-care.</p>
</blockquote>
<p><a href="https://tisiphone.net/2017/01/25/thwart-my-osint-efforts-while-binging-tv/">Thwart my OSINT Efforts while Binging TV!</a> by Lesley Carhart (tisiphone.net feed)<br>
<em>In which @hacks4pancakes shows you how not to show up in every identity database, ever.</em></p>
<p><a href="https://code.facebook.com/posts/557147474482256">This browser tweak saved 60% of requests to Facebook</a> by Ben Maurer, Nate Schloss (minus points for the awful title, probably via Bulletproof TLS newsletter)<br>
<em>Technical post about static resources and how browsers treat them when reloading the current page.</em></p>
<p><a href="http://www.macrumors.com/2016/11/11/filing-yahoo-aware-hack-2014/">New Filing Confirms Yahoo Was Aware of Large-Scale Email Hack in 2014</a> by Mitchel Broussard (macrumors.com feed)</p>
<blockquote>
<p>In September, Yahoo confirmed that at least 500 million of its users’ accounts had been compromised during an attack in late 2014. Now, in a recent filing with the Securities and Exchange Commission, it was revealed that the company knew about the hack when it originally happened in 2014, but waited two years to divulge it to the public</p>
</blockquote>
<p><a href="http://www.macrumors.com/2016/12/05/amazon-go/">‘Amazon Go’ Stores Will Let You Grab Groceries and Go, No Checkout Needed</a> by Joe Rossignol (macrumors.com feed)</p>
<blockquote>
<p>Amazon Go provides a checkout-free shopping experience that, to the naked eye, looks exactly like shoplifting.</p>
</blockquote>
<p><em>You might agree that the promise of such a convenient shopping experience has its allure.</em></p>
<p><a href="https://medium.com/elementaryos/redesigning-bluetooth-settings-ab30abca480f#.b6luyzqnk">Redesigning Bluetooth Settings</a> by Daniel Foré (twitter)<br>
<em>Even if you’re not that into application design, you might want to check out the images from this iterative design process to see how a user interface can change. Even better, Foré has provided reasons for every time a design was changed.</em></p>
<p><a href="https://cmdchallenge.com/#/">CMD challenge</a> - <em>It’s a browser-based commandline interface asking you to perform many differenct tasks using tools readily available in command CLIs. I was intrigued by this coding project and managed to achieve 2/3 of the challenges offered when I took the challenge. Or, to be perfectly honest, I didn’t want to give up until solving 2/3. What ever version you prefer.</em></p>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://bhagpuss.blogspot.com/2017/02/keeping-up-with-current-events-gw2.html">http://bhagpuss.blogspot.com/2017/02/keeping-up-with-current-events-gw2.html</a></li>
<li><a href="http://blog.elementary.io/post/154211655821/making-system-settings-access-a-cross-desktop">http://blog.elementary.io/post/154211655821/making-system-settings-access-a-cross-desktop</a></li>
<li><a href="http://blog.supertop.co/post/156735025162">http://blog.supertop.co/post/156735025162</a> (About prefering non-modal notifications to modal alerts)</li>
<li><a href="http://blog.thedigitalcatonline.com/blog/2016/03/06/python-mocks-a-gentle-introduction-part-1/#.WNpP-hgRrbh">http://blog.thedigitalcatonline.com/blog/2016/03/06/python-mocks-a-gentle-introduction-part-1/#.WNpP-hgRrbh</a></li>
<li><a href="http://char.gd/microsoft/why-i-left-mac-for-windows/">http://char.gd/microsoft/why-i-left-mac-for-windows/</a></li>
<li><a href="http://stackoverflow.com/questions/12179271/meaning-of-classmethod-and-staticmethod-for-beginner">http://stackoverflow.com/questions/12179271/meaning-of-classmethod-and-staticmethod-for-beginner</a></li>
<li><a href="http://stackoverflow.com/questions/13183730/how-to-use-git-mergetools-filemerge">http://stackoverflow.com/questions/13183730/how-to-use-git-mergetools-filemerge</a></li>
<li><a href="http://thecodeship.com/patterns/guide-to-python-function-decorators/">http://thecodeship.com/patterns/guide-to-python-function-decorators/</a></li>
<li><a href="http://www.computerworld.com/article/2931534/it-management/what-are-unix-swap-swp-files.html">http://www.computerworld.com/article/2931534/it-management/what-are-unix-swap-swp-files.html</a></li>
<li><a href="http://www.macrumors.com/2016/11/14/microsoft-visual-studio-mac/">http://www.macrumors.com/2016/11/14/microsoft-visual-studio-mac/</a></li>
<li><a href="http://www.macrumors.com/2016/11/15/apple-app-store-purge-october-2016/">http://www.macrumors.com/2016/11/15/apple-app-store-purge-october-2016/</a></li>
<li><a href="http://www.macrumors.com/2016/11/15/whatsapp-gains-end-to-end-encrypted-video-calling/">http://www.macrumors.com/2016/11/15/whatsapp-gains-end-to-end-encrypted-video-calling/</a></li>
<li><a href="http://www.macrumors.com/2016/11/16/mac-automation-sal-soghoian-position-eliminated/">http://www.macrumors.com/2016/11/16/mac-automation-sal-soghoian-position-eliminated/</a></li>
<li><a href="http://www.macrumors.com/2016/12/14/yahoo-major-hack-1-billion-accounts/">http://www.macrumors.com/2016/12/14/yahoo-major-hack-1-billion-accounts/</a></li>
<li><a href="http://www.macrumors.com/2016/12/16/evernote-not-implement-privacy-policy/">http://www.macrumors.com/2016/12/16/evernote-not-implement-privacy-policy/</a></li>
<li><a href="http://www.macrumors.com/2017/01/28/tim-cook-on-immigration-order/">http://www.macrumors.com/2017/01/28/tim-cook-on-immigration-order/</a></li>
<li><a href="http://www.novacrystallis.com/2017/02/tracking-down-ff15-first-timed-quest/">http://www.novacrystallis.com/2017/02/tracking-down-ff15-first-timed-quest/</a></li>
<li><a href="http://www.nytimes.com/2017/01/05/well/family/the-unspoken-rules-kids-create-for-instagram.html?nytmobile=0">http://www.nytimes.com/2017/01/05/well/family/the-unspoken-rules-kids-create-for-instagram.html?nytmobile=0</a></li>
<li><a href="http://www.nzherald.co.nz/world/news/article.cfm?c_id=2&objectid=11823052">http://www.nzherald.co.nz/world/news/article.cfm?c_id=2&objectid=11823052</a> (Why the US ban on laptops might be economically motivated)</li>
<li><a href="http://www.polygon.com/2017/1/10/14230454/contest-offers-10k-prize-for-a-game-about-migration">http://www.polygon.com/2017/1/10/14230454/contest-offers-10k-prize-for-a-game-about-migration</a></li>
<li><a href="http://www.polygon.com/2017/1/12/14251800/elite-dangerous-thargoids-dr-kaii-interview-first-contact">http://www.polygon.com/2017/1/12/14251800/elite-dangerous-thargoids-dr-kaii-interview-first-contact</a></li>
<li><a href="http://www.polygon.com/2017/1/3/14158544/tomb-raider-reboot-writer-bids-franchise-farewell">http://www.polygon.com/2017/1/3/14158544/tomb-raider-reboot-writer-bids-franchise-farewell</a></li>
<li><a href="http://www.polygon.com/2017/3/22/15023004/mass-effect-andromeda-alec-ryder-appearance">http://www.polygon.com/2017/3/22/15023004/mass-effect-andromeda-alec-ryder-appearance</a></li>
<li><a href="http://www.tagesanzeiger.ch/ausland/amerika/es-liegt-etwas-aehnliches-in-der-luft-wie-in-den-1930erjahren/story/27519272">http://www.tagesanzeiger.ch/ausland/amerika/es-liegt-etwas-aehnliches-in-der-luft-wie-in-den-1930erjahren/story/27519272</a></li>
<li><a href="http://www.thegeekstuff.com/2014/12/patch-command-examples/">http://www.thegeekstuff.com/2014/12/patch-command-examples/</a></li>
<li><a href="https://about.gitlab.com/2017/03/17/how-is-team-member-1-doing/">https://about.gitlab.com/2017/03/17/how-is-team-member-1-doing/</a></li>
<li><a href="https://astralflamesblog.wordpress.com/delightful-detestable-desynthesis/">https://astralflamesblog.wordpress.com/delightful-detestable-desynthesis/</a></li>
<li><a href="https://blog.csiro.au/tinker-torrentor-streamer-spy-vpn-privacy-alert/">https://blog.csiro.au/tinker-torrentor-streamer-spy-vpn-privacy-alert/</a></li>
<li><a href="https://blog.packagecloud.io/eng/2016/09/27/fixing-apt-hash-sum-mismatch-consistent-apt-repositories/">https://blog.packagecloud.io/eng/2016/09/27/fixing-apt-hash-sum-mismatch-consistent-apt-repositories/</a></li>
<li><a href="https://github.com/omniauth/omniauth-saml/commit/eacc53659d60e34f1e9090d7744dd4c469ccb19d">https://github.com/omniauth/omniauth-saml/commit/eacc53659d60e34f1e9090d7744dd4c469ccb19d</a></li>
<li><a href="https://krausefx.com/blog/scaling-open-source-communities">https://krausefx.com/blog/scaling-open-source-communities</a></li>
<li><a href="https://nakedsecurity.sophos.com/2016/08/18/nists-new-password-rules-what-you-need-to-know/">https://nakedsecurity.sophos.com/2016/08/18/nists-new-password-rules-what-you-need-to-know/</a></li>
<li><a href="https://nolanlawson.com/2017/03/05/what-it-feels-like-to-be-an-open-source-maintainer/">https://nolanlawson.com/2017/03/05/what-it-feels-like-to-be-an-open-source-maintainer/</a></li>
<li><a href="https://textslashplain.com/2017/01/16/certified-malice/">https://textslashplain.com/2017/01/16/certified-malice/</a></li>
<li><a href="https://www.bleepingcomputer.com/news/software/dropbox-kept-files-around-for-years-due-to-delete-bug/">https://www.bleepingcomputer.com/news/software/dropbox-kept-files-around-for-years-due-to-delete-bug/</a></li>
<li><a href="https://www.caseyliss.com/2017/1/1/a-magic-moment">https://www.caseyliss.com/2017/1/1/a-magic-moment</a></li>
<li><a href="https://www.thefword.org.uk/2017/01/i-wore-mens-clothes-for-a-month-and-it-changed-my-life/">https://www.thefword.org.uk/2017/01/i-wore-mens-clothes-for-a-month-and-it-changed-my-life/</a></li>
<li><a href="https://www.truetrophies.com/n10390/should-we-be-concerned-about-mass-effect-andromeda">https://www.truetrophies.com/n10390/should-we-be-concerned-about-mass-effect-andromeda</a></li>
<li><a href="https://www.youtube.com/watch?v=AGbfaadASVk">https://www.youtube.com/watch?v=AGbfaadASVk</a> (Apple Mirror - Smart Touchscreen Mirror)</li>
<li><a href="https://www.youtube.com/watch?v=NOIzH6UcoW4">https://www.youtube.com/watch?v=NOIzH6UcoW4</a> (MASS EFFECT: ANDROMEDA – Official Gameplay Trailer - 4K)</li>
</ul>Black Desert Online: Stories about Travel2017-01-27T23:29:00+01:002017-06-17T15:39:00+02:00Alexander Skibatag:ghostlyrics.net,2017-01-27:/black-desert-online-stories-about-travel.html<p>There are two quotes I frequently think about when playing <a href="https://www.blackdesertonline.com">Black Desert Online</a> (BDO).</p>
<blockquote>
<p>People need stories, more than bread, itself.</p>
</blockquote>
<p>This first one I got from “Storyteller” by <a href="https://secretarchivesofthevatican.bandcamp.com">Secret Archives of the Vatican</a>. Some minutes of research tell me that the quote is actually from <a href="https://en.wikipedia.org/wiki/Arabian_Nights_(miniseries)">Arabian Nights</a> which in …</p><p>There are two quotes I frequently think about when playing <a href="https://www.blackdesertonline.com">Black Desert Online</a> (BDO).</p>
<blockquote>
<p>People need stories, more than bread, itself.</p>
</blockquote>
<p>This first one I got from “Storyteller” by <a href="https://secretarchivesofthevatican.bandcamp.com">Secret Archives of the Vatican</a>. Some minutes of research tell me that the quote is actually from <a href="https://en.wikipedia.org/wiki/Arabian_Nights_(miniseries)">Arabian Nights</a> which in turn sourced it from <a href="https://en.wikipedia.org/wiki/One_Thousand_and_One_Nights">One Thousand and One Nights</a>.</p>
<p>This quote speaks to me because few of the several story lines in BDO are truly great - remind you, they don’t need to be. BDO is not a story driven game. It has some story driven elements that are there to amuse you during endless stretches of slaying evil in whatever form it happens to manifest today. Emergent narrative is something that becomes important. And while I didn’t believe in the concept of emergent narrative until revelation struck me when telling my girlfriend about a prolonged session of <a href="http://www.stellarisgame.com">Stellaris</a> I am now convinced that remarkable stories can form this way.</p>
<blockquote>
<p>I become their eyes and feet.</p>
</blockquote>
<p>This second quote is part of the description of the second-highest exploration title during the time of this writing, “Desert Guide”. It speaks to me since I am very curious in terms of lore and exploring in games. I need to have seen every nook and cranny of even huge worlds - especially if they happen to be detailed as BDO happens to be. I especially like the allusion that you’re doing the exploring for other people so you can tell of your adventures in faraway lands - it’s the romantic thought that captures me.</p>
<p><em>Note: all images shown in this post are heavily scaled down. To see their originals, simply click them.</em></p>
<h2 id="the-case-of-fun-over-efficiency">the case of fun over efficiency</h2>
<p>There are a lot of PvP oriented players in BDO. I’m decidedly not one of them - I almost never enjoy PvP regardless of the game. I prefer to do things my way, the way it pleases me and allows me to have fun with the game instead of mindlessly grinding; only to rush through new content in order to mindlessly grind so you can stay on top of the stats oriented food chain.</p>
<p><a href="images/black-desert-nadzeya/2016-09-24_183580814.PNG"><img alt="Nadzeya looking at camera" src="images/black-desert-nadzeya/2016-09-24_183580814-thumb.PNG"></a></p>
<p>Let me tell you about <em>Nadzeya Saranictil</em>. She’s a woman, a craftswoman, a kunoichi, an avid reader, a trader, a hero and much more. But more than anything else, she’s a curious explorer - eager to see what the world has to offer and with an endless thirst for knowledge. If there is something to be learned she must learn it. If there are sights to be seen, creatures to be discovered, dark caves to be ventured into - she will be there.</p>
<p>Until the recent discovery of new lands (read: <a href="https://www.youtube.com/watch?v=Ds5lNaoVazw">the Magorian Seas expansion</a>) she has travelled far and wide to see all of Balenos, Serendia, Calpheon, Mediah and Valencia. Before achieving enough fame in combat to be allowed a camel she travelled to <a href="http://www.somethinglovely.net/bdo/#node/1301">Valencia City</a> on foot, through the dangerous Northern canyons, always on the lookout for cutthroats going for her life. Sneaking past the <a href="http://www.somethinglovely.net/bdo/#node/1327">Gahaz Bandit’s Lair</a>, marveling at the sights in <a href="http://www.somethinglovely.net/bdo/#node/1329">Iris Canyon</a>, dodging the lions at <a href="http://www.somethinglovely.net/bdo/#node/1375">Ancado Coast</a> to finally have a cool drink at <a href="http://www.somethinglovely.net/bdo/#node/1343">Ancado Inner Harbor</a>.</p>
<p>Nadzeya in particularly enjoys being the tour guide for other adventurers. She fondly remembers her trips. The memories of the following ones are that she looks back to in times of desperation to keep her head up. She’s also excentric enough to only cook and craft with materials gathered herself if possible and never handing in items bought from the market place. She’s usually found riding her adorable miniature elephant, Jade, wearing a desert suit with a turquoise sash and showing her long bright orange hair uncovered.</p>
<p><a href="images/black-desert-nadzeya/2016-09-18_1165567979.PNG"><img alt="Nadzeya on Jade" src="images/black-desert-nadzeya/2016-09-18_1165567979-thumb.PNG"></a></p>
<h3 id="desert-sea">Desert & Sea</h3>
<p><em>Nadzeya</em> intended to go all the way by fishing boat from <a href="http://www.somethinglovely.net/bdo/#node/1343">Ancado Inner Harbor</a> to <a href="http://www.somethinglovely.net/bdo/#node/1380">Arehaza</a>, the easternmost settlement of Valencia (and the known regions so far). While she had stowed her boat in Ancado after sailing across the vast seas North of Calpheon, Balenos and finally Mediah in order to tour the canal with a certain adventurer, that one unfortunately never showed up.</p>
<p><a href="images/black-desert-nadzeya/2016-07-31_1386800655.PNG"><img alt="Nadzeya waiting in Heidel" src="images/black-desert-nadzeya/2016-07-31_1386800655-thumb.PNG"></a></p>
<p>However, she met a friendly sorceress who goes by the name of <em>MorbidAngel</em> and the two decided to take a long boat trip. After an exciting ride through the desert on <em>MorbidAngel</em>‘s horse they embarked the <em>Yennefer</em> in Ancado and sailed away. After some time and only a fraction of the journey completed they came across a beautiful beach and stopped there for some sightseeing. The vulcano there is a strange, vast landscape and it was only after some urging that the two left the small crater again to continue their journey.</p>
<p>Before setting course for their main destination, Arehaza, their way led further east to <a href="http://www.somethinglovely.net/bdo/#node/1394">Hakoven Island</a>, the only known island east of Valencia. There was time for one last quick stop at <a href="http://www.somethinglovely.net/bdo/#node/1389">Gavinya Coastal Cliff</a> before heading all the way South to Arehaza, where the boat landed and the tour ended at an amazing sandy beach only for <em>Nadzeya</em> to part ways with her fellow traveller sheltered from the heat under palm trees.</p>
<h3 id="the-sights-of-valencia">The Sights of Valencia</h3>
<p>After getting to know one of her former guild members - <em>LegendaryBrot</em> - better, <em>Nadzeya</em> and her partner were often seen together, exploring Valencia. <em>Nadzeya</em> played the tour guide for the Northern part of Valencia to which she had been before and showed off the wonders of Iris Canyon and the safest route to Valencia through the cliffs. <em>Nadzeya</em> also remembers both the short visit to <a href="http://www.somethinglovely.net/bdo/#node/1345">Crescent Shrine</a> and the seemingly neverending search for the <a href="http://bddatabase.net/us/theme/3425/">Oasis of Bless</a>. She admits feeling a pang of nostalgia whenever thinking about travelling with <em>LegendaryBrot</em> for whom she held the greatest mutual respect.</p>
<p><a href="images/black-desert-nadzeya/2016-10-17_362332710.PNG"><img alt="Nadzeya and LegendaryBrot looking down Iris Canyon" src="images/black-desert-nadzeya/2016-10-17_362332710-thumb.PNG"></a></p>
<h3 id="the-depths-of-mediah">The Depths of Mediah</h3>
<p>However, <em>Nadzeya</em> and <em>LegendaryBrot</em> did not only explore vast amounts of desert territory together, oh no. On multiple occations have they been seen delving into the subterranean depths of Mediah. Once they ventured all the way down the mines in <a href="http://www.somethinglovely.net/bdo/#node/1157">Helms Post</a> to look for ancient secrets only to have to fight for every step forward against dangerous Helm Golems. To this day <em>Nadzeya</em> wonders how <em>LegendaryBrot</em> manipulated fate into rewarding him that many more <a href="http://bddatabase.net/us/item/55044/">Broken Golem’s Cores</a>.</p>
<p>Another time they sought to map the innards of Tungrad, the ruin below <a href="http://www.somethinglovely.net/bdo/#node/1172">Hasrah Cliff</a>. Fighting off hundreds of Ancient Weapons, they finally managed to wrestle some meager findings from the ruins, like a diamond mining node.</p>
<h3 id="a-guide-to-the-oasis">A Guide to the Oasis</h3>
<p>It was only recently that <em>Nadzeya</em> heard a plea for help from one of the members of her current guild, <em>Helena23</em> and responded since she was in the vicinity. Together the two fought valiantly in the <a href="http://www.somethinglovely.net/bdo/#node/1316">Basilisk Den</a>. After an exhausting battle they sought a bit of refreshment and rode their mounts North to the sea, stopping at the <a href="http://www.somethinglovely.net/bdo/#node/1377">Abandoned Ferry in Shakatu</a> and then heading for a swim and refreshments in the lush <a href="http://www.somethinglovely.net/bdo/#node/1314">Shakatu</a>, along with a swim amongst the local elephants. Having shown another adventurer the pleasures of travelling together, <em>Nadzeya</em> looks forward to more adventures in the future.</p>
<p><a href="images/black-desert-nadzeya/2016-09-18_24459695.PNG"><img alt="Nadzeya taking a rest in her home in Epheria Port" src="images/black-desert-nadzeya/2016-09-18_24459695-thumb.PNG"></a></p>
<h3 id="other-adventures">Other adventures</h3>
<p>While there are certainly even more adventures worth mentioning, these are better told another time.</p>
<hr>
<p><em>Should you want to take a tour someday, feel free to reach out in-game or otherwise. If however, you would prefer to read another amazing story instead, <a href="https://www.reddit.com/r/blackdesertonline/comments/5q8bbs/yes_i_crossed_the_magoria_in_a_fishing_boat_and/">there’s one over at Reddit by someone who crossed over to Port Ratt on a fishing boat</a>.</em></p>Reading recommendations (2017-01-10)2017-01-10T11:50:00+01:002017-01-10T11:50:00+01:00Alexander Skibatag:ghostlyrics.net,2017-01-10:/reading-recommendations-2017-01-10.html<p>Trying to reduce the backlog of unread Read-it-later articles and feeds. Little else to say this time. Some work to catch up with, sick over the holidays. Additionally, Final Fantasy XV turned out not to be as awesome as hoped which saddens me.</p>
<p><a href="http://gfsc.network/2016/10/10/no-false-users.html" title="twitter">No False Users</a> by Kim Foale (Twitter …</p><p>Trying to reduce the backlog of unread Read-it-later articles and feeds. Little else to say this time. Some work to catch up with, sick over the holidays. Additionally, Final Fantasy XV turned out not to be as awesome as hoped which saddens me.</p>
<p><a href="http://gfsc.network/2016/10/10/no-false-users.html" title="twitter">No False Users</a> by Kim Foale (Twitter)<br>
<em>Please stop making up user stories to develop features nobody needs or uses.</em></p>
<p><a href="https://medium.com/@yanismydj/why-i-only-work-remotely-2e5eb07ae28f#.wu5pmkivq">Why I only work remotely</a> by Yan Lhert (via Medium related articles)<br>
<em>I fully agree with this article. Coming in in the morning works the same for me - I’m constantly tired and little productive activity will happen in the hours I’m there. Working past noon has very positive effect on my output.</em></p>
<p><a href="http://www.novacrystallis.com/2017/01/kingdom-hearts-15th-anniversary-memorial-stained-glass-clock-campaign-shinjuku-station/">Kingdom Hearts 15th anniversary ‘Memorial Stained Glass Clock’ campaign in Shinjuku Station</a> by Wassim Mokhtar (novacrystallis.com feed)<br>
<em>I would love to see this clock in person.</em></p>
<p><a href="https://medium.com/@justamikeperry/technology-in-hostile-states-ten-principles-for-user-protection-a11968ac3527#.hk3me14zp">Technology in Hostile States: Ten Principles for User Protection</a> by Mike Perry (via Twitter)</p>
<blockquote>
<p>There is a disturbing trend for automated abuse detection systems to harshly penalize shared IP address infrastructure of all kinds, leading to loss of access.</p>
</blockquote>
<p><a href="https://www.washingtonpost.com/news/the-switch/wp/2016/05/13/new-government-data-shows-a-staggering-number-of-americans-have-stopped-basic-online-activities/">Why a staggering number of Americans have stopped using the Internet the way they used to</a> by Andrea Peterson (via Twitter)<br>
<em>End users are more and more losing their trust in our IT infrastructure as well as their trust in companies as a whole.</em></p>
<p><a href="http://thedailywtf.com/articles/Batch-of-Trouble">BATCH OF TROUBLE</a> by Remy Porter (via Twitter)<br>
<em>Sometimes what appears to be simple but ugly can still be enormously more useful than complex, nice but still broken.</em></p>
<p><a href="https://itfettchen.wordpress.com/2017/01/06/ueber-it-regel-18-und-katzen">Über IT-Regel 18 und Katzen</a> by Stephan Witt (German, itfettchen.wordpress.com feed)<br>
<em>This should be read in combination with the link about BATCH OF TROUBLE, since they are both about the same topic of simplifying processes.</em></p>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://boingboing.net/2017/01/02/automated-book-culling-softwar.html">http://boingboing.net/2017/01/02/automated-book-culling-softwar.html</a></li>
<li><a href="http://deviating.net/firearms/packing/accounts/knife/">http://deviating.net/firearms/packing/accounts/knife/</a></li>
<li><a href="http://motherboard.vice.com/read/new-evidence-suggests-rogue-government-agent-deleted-evidence-in-silk-road-case">http://motherboard.vice.com/read/new-evidence-suggests-rogue-government-agent-deleted-evidence-in-silk-road-case</a></li>
<li><a href="http://www.atlasobscura.com/places/the-cincinnati-subway">http://www.atlasobscura.com/places/the-cincinnati-subway</a></li>
<li><a href="http://www.macrumors.com/2016/11/30/netflix-offline-viewing-app/">http://www.macrumors.com/2016/11/30/netflix-offline-viewing-app/</a></li>
<li><a href="http://www.macrumors.com/2016/12/01/apple-fixes-boot-camp-macbook-pro-speaker-issue/">http://www.macrumors.com/2016/12/01/apple-fixes-boot-camp-macbook-pro-speaker-issue/</a></li>
<li><a href="http://www.macrumors.com/2016/12/01/youtube-4k-live-streaming-support/">http://www.macrumors.com/2016/12/01/youtube-4k-live-streaming-support/</a></li>
<li><a href="http://www.macrumors.com/2016/12/06/instagram-turn-comments-off/">http://www.macrumors.com/2016/12/06/instagram-turn-comments-off/</a></li>
<li><a href="http://www.macrumors.com/2016/12/06/samsung-galaxy-s8-no-headphone-jack/">http://www.macrumors.com/2016/12/06/samsung-galaxy-s8-no-headphone-jack/</a></li>
<li><a href="http://www.macrumors.com/2016/12/07/bluetooth-5-officially-approved/">http://www.macrumors.com/2016/12/07/bluetooth-5-officially-approved/</a></li>
<li><a href="http://www.macrumors.com/2016/12/08/europe-no-roaming-charges-proposal/">http://www.macrumors.com/2016/12/08/europe-no-roaming-charges-proposal/</a></li>
<li><a href="https://futurezone.at/myfuzo/blog/aus-der-filterbubble-33c3-zurueck-in-die-realitaet/238.879.507">https://futurezone.at/myfuzo/blog/aus-der-filterbubble-33c3-zurueck-in-die-realitaet/238.879.507</a></li>
<li><a href="https://medium.engineering/the-curious-case-of-disappearing-polish-s-fa398313d4df#.ppssfv376">https://medium.engineering/the-curious-case-of-disappearing-polish-s-fa398313d4df#.ppssfv376</a></li>
<li><a href="https://opensource.googleblog.com/2017/01/grumpy-go-running-python.html?m=1">https://opensource.googleblog.com/2017/01/grumpy-go-running-python.html?m=1</a></li>
<li><a href="https://tisiphone.net/2017/01/04/infographic-credit-cards/">https://tisiphone.net/2017/01/04/infographic-credit-cards/</a></li>
</ul>Reading recommendations (2016-10-08)2016-10-08T22:19:00+02:002016-10-30T05:36:00+01:00Alexander Skibatag:ghostlyrics.net,2016-10-08:/reading-recommendations-2016-10-08.html<p>While I wait for feedback on the <a href="https://github.com/GhostLyrics/sensu-plugin-doc-draft">draft for Sensu plugin documentation</a> that I wrote I have some new reading recommendations. I’m also working on two more substantial articles but those are not polished enough yet for publication.</p>
<p><a href="https://www.troyhunt.com/content-images-2016-09-a-one-week-traffic-snapshot-1-png/">The “Have I been pwned” API rate limit has been brought …</a></p><p>While I wait for feedback on the <a href="https://github.com/GhostLyrics/sensu-plugin-doc-draft">draft for Sensu plugin documentation</a> that I wrote I have some new reading recommendations. I’m also working on two more substantial articles but those are not polished enough yet for publication.</p>
<p><a href="https://www.troyhunt.com/content-images-2016-09-a-one-week-traffic-snapshot-1-png/">The “Have I been pwned” API rate limit has been brought forward - here’s why</a> by Troy Hunt (troyhunt.com feed)<br>
<em>This extremely useful service was first abused, then attacked by what can only be assumed to be criminals. Fortunately Hunt had already been preparing to implement a rate limit anyway and just had to speed up his efforts.</em></p>
<p><a href="http://www.polygon.com/2016/8/30/12710076/dead-or-alive-vr-mode-harassment">With VR mode, Dead or Alive goes from creepy to harassment</a> by Allegra Frank (polygon.com feed)<br>
<em>One of the first not-so-great VR activities.</em></p>
<p><a href="http://www.usgamer.net/articles/true-tales-from-localization-hell">True Tales from Localization Hell</a> by Bob Mackey (probably Twitter, possibly cross-reference from other article)<br>
<em>Localizing games is a challenging activity. Not only have do the texts have to be translated, but there are also restrictions in place, for example the amount of space available for the text or whether phrases need to end on a vowel or consonant.</em></p>
<p><a href="https://smspillaz.wordpress.com/2016/08/07/safety-is-not-our-first-priority/">Safety is not our first priority</a> by ~smspillaz (smspillaz.wordpress.com feed) </p>
<blockquote>
<p>Every day we hear of a new data leak. Confidential information is stolen and
sold to the highest bidder. Lives are meddled with and lives are ruined.</p>
</blockquote>
<p><a href="http://mmogypsy.com/2016/08/blaugust2016-food.html">#BLAUGUST2016: FOOD</a> by ~Syl (mmogypsy.com feed)<br>
<em>Sometimes the best posts on gaming blogs are not even related to video games. Here’s a nice one on eating habits instead.</em></p>
<p><a href="https://blogs.dropbox.com/dropbox/2016/08/the-case-for-gratitude-at-work/">Thanks for everything! The case for gratitude at work</a> by Juli Fischer (blogs.dropbox.com feed)<br>
<em>I make a point of being thankful at work because it’s an easily visible sign that I respect my coworkers. This post goes into detail on methods that an organization can use to nurture a culture of gratitude. I especially like the wall of post-its.</em></p>
<p><a href="http://blog.instapaper.com/post/149374303661">Instapaper is joining pinterest</a> by The Instapaper Team (blog.instapaper.com feed)<br>
<em>I am concerned by this acquisition. Usually in today’s tech world that means the product will be sunset in 18 months tops. Though I dislike Safari’s Reading List feature, I dislike Pocket even more, so Reading List it is. I have a hard time putting my trust into Instapaper. Good thing I started this blog mini-series to save the most interesting articles somewhere else.</em> :)</p>
<p>This time the one link from the archives is Matt Gemmell’s <a href="http://mattgemmell.com/ideology/">Ideology</a> in which he makes a bold statement about violent reactions to terrorism, bombardments and hatred. He wrote this moving piece as reaction to the terrorist attacks in Paris in 2015.</p>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://chubigans.tumblr.com/post/150037874814/cook-serve-delicious-game-maker-edition-now">http://chubigans.tumblr.com/post/150037874814/cook-serve-delicious-game-maker-edition-now</a></li>
<li><a href="http://skillet.lifehacker.com/make-a-summery-caramel-sauce-with-watermelon-juice-1785917954">http://skillet.lifehacker.com/make-a-summery-caramel-sauce-with-watermelon-juice-1785917954</a></li>
<li><a href="http://store.steampowered.com/news/24155/">http://store.steampowered.com/news/24155/</a> (About filtering and review score of Steam games ratings)</li>
<li><a href="http://techniktagebuch.tumblr.com/post/148936080717/august-2016">http://techniktagebuch.tumblr.com/post/148936080717/august-2016</a> (About smart phone based communication methods for school children)</li>
<li><a href="http://www.macrumors.com/2016/08/25/driverless-taxi-service-trials-singapore/">http://www.macrumors.com/2016/08/25/driverless-taxi-service-trials-singapore/</a></li>
<li><a href="http://www.macrumors.com/2016/09/24/itunes-backups-easier-to-crack-ios-10/">http://www.macrumors.com/2016/09/24/itunes-backups-easier-to-crack-ios-10/</a></li>
<li><a href="http://www.reuters.com/article/us-afghanistan-university-idUSKCN1102OQ">http://www.reuters.com/article/us-afghanistan-university-idUSKCN1102OQ</a></li>
<li><a href="http://www.reuters.com/article/us-southasia-disappeared-idUSKCN116029">http://www.reuters.com/article/us-southasia-disappeared-idUSKCN116029</a></li>
<li><a href="http://www.startribune.com/before-russian-victory-a-can-of-spam/44622382/">http://www.startribune.com/before-russian-victory-a-can-of-spam/44622382/</a></li>
<li><a href="https://github.com/blog/2247-improving-collaboration-with-forks">https://github.com/blog/2247-improving-collaboration-with-forks</a></li>
<li><a href="https://www.destructoid.com/what-s-eating-adam-jensen--383410.phtml">https://www.destructoid.com/what-s-eating-adam-jensen--383410.phtml</a></li>
<li><a href="https://www.reddit.com/r/Teachers/comments/4z6yff/i_pretended_to_be_a_student_on_the_first_day/">https://www.reddit.com/r/Teachers/comments/4z6yff/i_pretended_to_be_a_student_on_the_first_day/</a></li>
<li><a href="https://www.youtube.com/watch?v=USVr936aKzs">https://www.youtube.com/watch?v=USVr936aKzs</a> (Game Maker’s Toolkit: In Praise of Prague (and other small worlds))</li>
</ul>Reading recommendations (2016-09-29)2016-09-29T01:43:00+02:002016-09-29T14:38:00+02:00Alexander Skibatag:ghostlyrics.net,2016-09-29:/reading-recommendations-2016-09-29.html<p>Between trying to figure out why one of our servers at work keeps insisting its RAID storage controller disappears after a few days of work and researching file exchange platforms like <a href="https://syncthing.net">Syncthing</a>, <a href="https://owncloud.org">Owncloud</a> and <a href="https://www.seafile.com/en/home/">Seafile</a> I’ve been quite busy for a while. I’ve also played more <a href="https://www.blackdesertonline.com">Black Desert …</a></p><p>Between trying to figure out why one of our servers at work keeps insisting its RAID storage controller disappears after a few days of work and researching file exchange platforms like <a href="https://syncthing.net">Syncthing</a>, <a href="https://owncloud.org">Owncloud</a> and <a href="https://www.seafile.com/en/home/">Seafile</a> I’ve been quite busy for a while. I’ve also played more <a href="https://www.blackdesertonline.com">Black Desert</a> and watched quite a lot of <a href="https://en.wikipedia.org/wiki/Star_Wars:_The_Clone_Wars_(2008_TV_series)">Star Wars: The Clone Wars</a> on Netflix.</p>
<p><a href="http://www.theatlantic.com/magazine/archive/2016/10/fear-of-a-female-president/497564/">Fear of a Female President</a> by Peter Beinart (via Twitter)<br>
<em>Misogeny waves abound even - or respectively especially - in the case of Clinton winning the elections and becoming the first female US president.</em></p>
<p><a href="http://cyber-itl.org/blog-1/2016/9/12/a-closer-look-at-the-osx-continuum">Software Application Risks on the OSX Continuum</a> by The Cyber Independent Testing Lab (via Twitter)<br>
<em>Firefox on macOS is abysmal, Google Chrome is great (as expected). Microsoft’s auto updater is evil personified while Apple’s Software Update for the OS itself is quite good.</em></p>
<p><a href="https://thinkprogress.org/trump-no-factcheck-please-56950561d41c#.a5i7o190j">Trump campaign says media should not be ‘fact-checkers’</a> by Samantha Page (via Twitter)<br>
<em>Let me rephrase that: Trump campaign prefers not being told they blatantly lie on camera.</em></p>
<p><a href="http://www.monroe.k12.nj.us/site/handlers/filedownload.ashx?moduleinstanceid=10379&dataid=13594&FileName=all%20summer%20in%20a%20day.pdf">All Summer in a Day</a> by Ray Bradbury (PDF, via Twitter)<br>
<em>A story to show you exactly how awful children can be.</em></p>
<p><a href="https://www.schneier.com/blog/archives/2016/09/someone_is_lear.html">Someone Is Learning How to Take Down the Internet</a> by Bruce Schneier<br>
<em>Interesting theory about testing the Internet’s “weak points” and how much pressure they can endure.</em></p>
<p><a href="http://www.theatlantic.com/technology/archive/2016/03/history-of-the-meatball/475083/">Not Your Grandmother’s Meatball</a> by Marissa Landrigan (browsing on theatlantic.com)<br>
<em>I found this short history of the American Meatball used in their Spaghetti most enjoyable. It depicts nicely how food can change and develop according to the circumstances of the demographic of its cooks.</em></p>
<p><a href="http://www.zeit.de/2016/38/silicon-valley-kalifornien-usa-armut">Die armen Kinder vom Silicon Valley</a> by Moritz Aisslinger (probably via Twitter, German)<br>
<em>I did not expect the difference between rich and poor in what I would call the global IT capital to be this extreme.</em></p>
<p>Bonus from the archive: <a href="https://www.mattermost.org/why-we-made-mattermost-an-open-source-slack-alternative/">Why we made Mattermost an open source Slack-alternative</a> by The Mattermost Team is a enlightening, medium-length tale of how this software came to be.</p>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://blog.elementary.io/post/147637979911/loki-04-stable-release">http://blog.elementary.io/post/147637979911/loki-04-stable-release</a></li>
<li><a href="http://blog.jonaspasche.com/2011/01/16/iowait-ein-lehrstuck/">http://blog.jonaspasche.com/2011/01/16/iowait-ein-lehrstuck/</a></li>
<li><a href="http://www.polygon.com/2016/9/27/12987932/witcher-3-monomyth-star-wars-harry-potter">http://www.polygon.com/2016/9/27/12987932/witcher-3-monomyth-star-wars-harry-potter</a></li>
<li><a href="http://www.spiegel.de/netzwelt/web/julian-assange-macht-wikileaks-zum-instrument-fuer-donald-trump-a-1112249.html">http://www.spiegel.de/netzwelt/web/julian-assange-macht-wikileaks-zum-instrument-fuer-donald-trump-a-1112249.html</a></li>
<li><a href="http://www.susanjfowler.com/blog/2016/9/6/whos-on-call">http://www.susanjfowler.com/blog/2016/9/6/whos-on-call</a></li>
<li><a href="http://www.theatlantic.com/technology/archive/2016/09/how-to-use-fun-to-find-meaning-in-life/499805/">http://www.theatlantic.com/technology/archive/2016/09/how-to-use-fun-to-find-meaning-in-life/499805/</a></li>
<li><a href="http://www.thekitchn.com/10-little-things-i-do-for-houseguests-221392">http://www.thekitchn.com/10-little-things-i-do-for-houseguests-221392</a></li>
<li><a href="http://www.vice.com/alps/read/dieser-fall-eines-wieners-der-in-berlin-in-u-haft-sitzt-koennte-die-retourkutsche-fuer-josef-s-sein">http://www.vice.com/alps/read/dieser-fall-eines-wieners-der-in-berlin-in-u-haft-sitzt-koennte-die-retourkutsche-fuer-josef-s-sein</a></li>
<li><a href="https://blogs.dropbox.com/tech/2012/04/zxcvbn-realistic-password-strength-estimation/">https://blogs.dropbox.com/tech/2012/04/zxcvbn-realistic-password-strength-estimation/</a></li>
<li><a href="https://m.reddit.com/r/HowToHack/comments/52udkv/a_day_in_the_life_of_a_pentester_how_i_owned_your/">https://m.reddit.com/r/HowToHack/comments/52udkv/a_day_in_the_life_of_a_pentester_how_i_owned_your/</a></li>
<li><a href="https://mjg59.dreamwidth.org/44694.html">https://mjg59.dreamwidth.org/44694.html</a></li>
<li><a href="https://thinkprogress.org/not-all-heroes-wear-capes-db25e613bf6#.k9ymsgfpz">https://thinkprogress.org/not-all-heroes-wear-capes-db25e613bf6#.k9ymsgfpz</a></li>
<li><a href="https://www.agwa.name/blog/post/how_to_crash_systemd_in_one_tweet">https://www.agwa.name/blog/post/how_to_crash_systemd_in_one_tweet</a></li>
</ul>I updated older posts with newer tech (August 2016)2016-08-28T18:19:00+02:002016-08-28T18:19:00+02:00Alexander Skibatag:ghostlyrics.net,2016-08-28:/i-updated-older-posts-with-newer-tech-august-2016.html<p>I’ve taken some time today to update my system operations related posts with newer information. This information is based on the usage and issues that we faced and will hopefully prevent others from stumbling into the same problems should they choose to follow my guidance.</p>
<ul>
<li><a href="http://ghostlyrics.net/using-continuous-integration-for-puppet.html">Using Continuous Integration for …</a></li></ul><p>I’ve taken some time today to update my system operations related posts with newer information. This information is based on the usage and issues that we faced and will hopefully prevent others from stumbling into the same problems should they choose to follow my guidance.</p>
<ul>
<li><a href="http://ghostlyrics.net/using-continuous-integration-for-puppet.html">Using Continuous Integration for puppet</a> was updated with sections about prebuilding your Docker image to speedup a build process as well as some advice for continuous deployment and an improved <code>Makefile</code>.</li>
<li><a href="http://ghostlyrics.net/improving-our-xen-usage.html">Improving our Xen Usage</a> was updated with sections about DRBD 9 auto promotion of resources and the “folder per hostname” approach we use in production.</li>
<li><a href="http://ghostlyrics.net/building-and-deploying-a-c-library-with-gitlab.html">Building and Deploying a C++ library with GitLab</a> was updated with a section concerning use of the <code>expire_in</code> parameter for GitLab CI jobs.</li>
</ul>Reading recommendations (2016-08-24)2016-08-24T17:56:00+02:002016-08-24T17:56:00+02:00Alexander Skibatag:ghostlyrics.net,2016-08-24:/reading-recommendations-2016-08-24.html<p>This time I had to dump quite a lot of links into the sidenotes since it’s been longer since the last post. But that’s how it is given that I really want to adhere to my self-imposed 7 big links rule.</p>
<ul>
<li><a href="http://www.kennethreitz.org/essays/on-cybersecurity-and-being-targeted">On Cybersecurity and Being Targeted</a> by Kenneth …</li></ul><p>This time I had to dump quite a lot of links into the sidenotes since it’s been longer since the last post. But that’s how it is given that I really want to adhere to my self-imposed 7 big links rule.</p>
<ul>
<li><a href="http://www.kennethreitz.org/essays/on-cybersecurity-and-being-targeted">On Cybersecurity and Being Targeted</a> by Kenneth Reitz (via Twitter)<br>
<em>Reitz describes an attack on his person via GitHub and his DNS provider. The short lesson here is to use common e-mail provider when registering with services instead of a small one or your own. Two factor authentication helps.</em></li>
<li><a href="https://www.youtube.com/watch?v=BLGFriOKz6U">Behind the Scenes of iOS Security</a> by Ivan Krstic (via macrumors.com feed and others, presentation video)<br>
<em>It’s been a long time since Apple presented at a hacker congress. Krstic discusses iOS encryption, encryption for iCloud Keychain and introduces Apple’s invite-only bug bounty program.</em></li>
<li><a href="http://www.trueachievements.com/n24957/sunday-conversation-games-that-made-you-cry.htm">Sunday Conversation: Games That Made You Cry</a> by Mark Delaney (trueachievements.com feed)<br>
<em>While this article is focused on Xbox games I have fond memories of playing <a href="https://en.wikipedia.org/wiki/Grandia_(video_game)">Grandia</a> where I cried at the sweet and peaceful conclusion of its epic journey.</em></li>
<li><a href="http://www.reuters.com/article/us-germany-security-stockpiling-idUSKCN10W0MJ">Germany to tell people to stockpile food and water in case of attacks: FAS</a> by Caroline Copley, Andrew Bolton (reuters.com World News feed)<br>
<em>I don’t really know what to say here. I’m shocked. The post makes it sound as if Germany is preparing for war. Not that it is. I mean, probably not. Hopefully. It might be a precaution in case a city is in a state of emergency again as it was during the Munich shooting.</em></li>
<li><a href="https://xorcatt.wordpress.com/2016/08/16/equationgroup-tool-leak-extrabacon-demo/">EquationGroup Tool Leak – ExtraBacon Demo</a> by ~XORcat (via Twitter)<br>
<em>Experiment with the leaked NSA tools. Technical read.</em></li>
<li><a href="https://twitter.com/EndTrumpsHate/timelines/766715037725626368">Twitter timeline about inciting hatred against the press at one of Trump’s rallies</a> by Jared Yates Saxton (curated by @EndTrumpsHate, via blog.fefe.de feed)<br>
<em>Yes, another Trump link. This one shows the disgusting inciting of hatred towards press.</em></li>
<li><a href="https://www.schneier.com/blog/archives/2015/10/friday_squid_bl_497.html#c6708072">Notes from a lecture about C</a> by Nick P (via blog.fefe.de feed)<br>
<em>Haven’t seen the presentation itself yet, but the notes about the design process of C are both enlightening and amusing.</em></li>
</ul>
<p>Despite the self-restraint stated above, I’ve elected to include one gem from my archives which I’d like to add to these posts slowly until the archive is drained and I’ve fully switched to the <a href="http://ghostlyrics.net/tag/reading-recommendations.html">Reading Recommendation</a> posts.</p>
<p>“<a href="http://www.newstatesman.com/laurie-penny/on-nerd-entitlement-rebel-alliance-empire">On Nerd Entitlement</a>” by Laurie Penny is a fascinating read about how nerds who were shunned can in turn be no better than their tormentors by shunning women who don’t adhere to the typical pretty woman stereotypes. I really can’t stress how important it is for one to have a moment of introspection from time to time.</p>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://blog.erratasec.com/2016/08/a-lesson-in-social-engineering.html">http://blog.erratasec.com/2016/08/a-lesson-in-social-engineering.html</a></li>
<li><a href="http://lifehacker.com/the-science-behind-why-you-feel-sick-when-you-try-to-re-1785228181">http://lifehacker.com/the-science-behind-why-you-feel-sick-when-you-try-to-re-1785228181</a></li>
<li><a href="http://martinfowler.com/articles/microservice-trade-offs.html">http://martinfowler.com/articles/microservice-trade-offs.html</a></li>
<li><a href="http://randsinrepose.com/archives/the-half-life-of-joy/">http://randsinrepose.com/archives/the-half-life-of-joy/</a></li>
<li><a href="http://www.macrumors.com/2016/07/26/guidelines-halt-sms-two-factor/">http://www.macrumors.com/2016/07/26/guidelines-halt-sms-two-factor/</a></li>
<li><a href="http://www.macrumors.com/2016/08/02/97-percent-of-youtube-encrypted/">http://www.macrumors.com/2016/08/02/97-percent-of-youtube-encrypted/</a></li>
<li><a href="http://www.macrumors.com/2016/08/02/uber-invest-global-mapping-project/">http://www.macrumors.com/2016/08/02/uber-invest-global-mapping-project/</a></li>
<li><a href="http://www.macrumors.com/2016/08/03/mozilla-announces-firefox-48-mac/">http://www.macrumors.com/2016/08/03/mozilla-announces-firefox-48-mac/</a></li>
<li><a href="http://www.macrumors.com/2016/08/14/imessage-encryption-vulnerable-attack/">http://www.macrumors.com/2016/08/14/imessage-encryption-vulnerable-attack/</a></li>
<li><a href="http://www.macrumors.com/2016/08/16/apple-security-talk-full-video-available/">http://www.macrumors.com/2016/08/16/apple-security-talk-full-video-available/</a></li>
<li><a href="http://www.macrumors.com/2016/08/22/microsoft-office-for-mac-64-bit-support/">http://www.macrumors.com/2016/08/22/microsoft-office-for-mac-64-bit-support/</a></li>
<li><a href="http://www.macrumors.com/2016/08/22/privacy-advocates-link-nsa-hack-apple-fight-fbi/">http://www.macrumors.com/2016/08/22/privacy-advocates-link-nsa-hack-apple-fight-fbi/</a></li>
<li><a href="http://www.polygon.com/2016/8/18/12530732/overwatch-gremlin-dva-emote">http://www.polygon.com/2016/8/18/12530732/overwatch-gremlin-dva-emote</a></li>
<li><a href="http://www.reuters.com/article/india-land-desertification-idUSL3N1AZ29V">http://www.reuters.com/article/india-land-desertification-idUSL3N1AZ29V</a></li>
<li><a href="http://www.reuters.com/article/us-europe-migrants-greece-village-idUSKCN10T0OB">http://www.reuters.com/article/us-europe-migrants-greece-village-idUSKCN10T0OB</a></li>
<li><a href="http://www.reuters.com/article/us-europe-migrants-identification-idUSKCN10S1C8">http://www.reuters.com/article/us-europe-migrants-identification-idUSKCN10S1C8</a></li>
<li><a href="https://about.gitlab.com/2016/08/12/moving-from-ops-to-infrastructure/">https://about.gitlab.com/2016/08/12/moving-from-ops-to-infrastructure/</a></li>
<li><a href="https://medium.com/@N/how-i-lost-my-50-000-twitter-username-24eb09e026dd#.wdggeyn2b%5D">https://medium.com/@N/how-i-lost-my-50-000-twitter-username-24eb09e026dd#.wdggeyn2b%5D</a></li>
<li><a href="https://www.destructoid.com/permadeath-in-fallout-4-s-survival-mode-broke-me-381799.phtml">https://www.destructoid.com/permadeath-in-fallout-4-s-survival-mode-broke-me-381799.phtml</a></li>
<li><a href="https://www.macstories.net/news/googles-chrome-browser-to-block-flash/">https://www.macstories.net/news/googles-chrome-browser-to-block-flash/</a></li>
<li><a href="https://www.thrillist.com/tech/nation/apple-store-secrets-horror-stories-revealed-by-former-employees">https://www.thrillist.com/tech/nation/apple-store-secrets-horror-stories-revealed-by-former-employees</a></li>
<li><a href="https://www.troyhunt.com/website-enumeration-insanity-how-our-personal-data-is-leaked/">https://www.troyhunt.com/website-enumeration-insanity-how-our-personal-data-is-leaked/</a></li>
<li><a href="https://www.whitehatsec.com/blog/the-ad-blocking-wars-ad-blockers-vs-ad-tech/">https://www.whitehatsec.com/blog/the-ad-blocking-wars-ad-blockers-vs-ad-tech/</a></li>
<li><a href="https://www.youtube.com/watch?v=2zK8ItePe3Y">https://www.youtube.com/watch?v=2zK8ItePe3Y</a> (Game Maker’s Toolkit: How Jonathan Blow Designs a Puzzle)</li>
<li><a href="https://www.youtube.com/watch?v=3kEpZWGgJks">https://www.youtube.com/watch?v=3kEpZWGgJks</a> (Civil Forfeiture: Last Week Tonight with John Oliver)</li>
<li><a href="https://www.youtube.com/watch?v=3UhV1wKxEd0">https://www.youtube.com/watch?v=3UhV1wKxEd0</a> (Final Fantasy XV “Master Version Gameplay”)</li>
<li><a href="https://www.youtube.com/watch?v=gg0Nbfzo_00">https://www.youtube.com/watch?v=gg0Nbfzo_00</a> (Game Maker’s Toolkit: What Mirror’s Edge Catalyst Should Have Learned From Burnout Paradise)</li>
<li><a href="https://www.youtube.com/watch?v=kbyTOAlhRHk">https://www.youtube.com/watch?v=kbyTOAlhRHk</a> (Game Maker’s Toolkit: The Comeback of the Immersive Sim)</li>
</ul>Sensu widget for Übersicht2016-08-18T02:09:00+02:002017-07-13T14:07:00+02:00Alexander Skibatag:ghostlyrics.net,2016-08-18:/sensu-widget-for-ubersicht.html<p>Initially I was on the look for an alternative to <a href="http://www.tynsoe.org/v2/geektool/">Geektool</a> for macOS that would not crash if I was to run an interactive script like <code>iftop</code>. When I saw that <a href="https://github.com/things/uebersicht-statuscake">StatusCake report widget by Colin O’Brien</a> for an HTML based Geektool alternative called <a href="http://tracesof.net/uebersicht/">Übersicht</a> and saw that it …</p><p>Initially I was on the look for an alternative to <a href="http://www.tynsoe.org/v2/geektool/">Geektool</a> for macOS that would not crash if I was to run an interactive script like <code>iftop</code>. When I saw that <a href="https://github.com/things/uebersicht-statuscake">StatusCake report widget by Colin O’Brien</a> for an HTML based Geektool alternative called <a href="http://tracesof.net/uebersicht/">Übersicht</a> and saw that it was just processing some JSON I felt the urge to build something like that widget for our <a href="https://sensuapp.org">Sensu</a> monitoring.</p>
<p>A few hours of research, cursing and reconfiguring systems I had a working solution even though my Javascript is still awful and I still don’t know what’s so great about CoffeeScript.</p>
<p>I’ve based my widget on O’Brien’s and also provide my copy under the <strong>MIT License</strong>. I’ve commented functions and parameters for readability’s sake. Yes, the changed colors might seem unnecessary but I took them straight from the <a href="https://uchiwa.io/#/">Uchiwa</a> interface for Sensu for consistency.</p>
<p>You can easily toggle on or off:</p>
<ul>
<li>Sorting the events by hostname (default: <code>true</code> - <em>I can’t see why you wouldn’t do that</em>)</li>
<li>Display of the command run by Sensu that triggered this event (default: <code>false</code>)</li>
<li>Display of the output run of the failed check (default: <code>true</code>)</li>
<li>Blinking of certain indicators by warning level (default: <code>[]</code> - <em>I hate the blinking but since it was already in the base I chose to support it anyway</em>)</li>
</ul>
<h2 id="screenshots">Screenshots</h2>
<h3 id="minimal-version">minimal version</h3>
<p><img alt="no extra features enabled" src="images/sensu-uebersicht/none.png"></p>
<h3 id="only-output">only output</h3>
<p><img alt="Only output enabled" src="images/sensu-uebersicht/output.png"></p>
<h3 id="only-command">only command</h3>
<p><img alt="Only command enabled" src="images/sensu-uebersicht/command.png"></p>
<h3 id="everything-enabled">everything enabled</h3>
<p><img alt="All features enabled" src="images/sensu-uebersicht/all.png"></p>
<h2 id="script">Script</h2>
<div class="highlight"><pre><span></span><code><span class="nv">SENSU_PASSWORD = </span><span class="s">"password"</span>
<span class="nv">SENSU_USERNAME = </span><span class="s">"username"</span>
<span class="nv">SENSU_URL = </span><span class="s">"https://sensu.domain.example:port"</span>
<span class="c1"># display options</span>
<span class="nv">SORT_BY_HOSTNAME = </span><span class="kc">true</span>
<span class="nv">SHOW_COMMAND = </span><span class="kc">false</span>
<span class="nv">SHOW_OUTPUT = </span><span class="kc">true</span>
<span class="c1"># blink indicators - possible values: "warn", "error", "unknown"</span>
<span class="c1"># e.g. BLINKING_INDICATORS = ["warn", "error"]</span>
<span class="nv">BLINKING_INDICATORS = </span><span class="p">[]</span>
<span class="nv">command: </span><span class="s">"curl -sS --user </span><span class="si">#{</span><span class="nx">SENSU_USERNAME</span><span class="si">}</span><span class="s">:</span><span class="si">#{</span><span class="nx">SENSU_PASSWORD</span><span class="si">}</span><span class="s"> </span><span class="si">#{</span><span class="nx">SENSU_URL</span><span class="si">}</span><span class="s">/events"</span>
<span class="nv">refreshFrequency: </span><span class="mi">60000</span> <span class="c1"># Milliseconds between calls</span>
<span class="nv">render: </span><span class="nf">-></span> <span class="s">"""</span>
<span class="s"><div></span>
<span class="s"> <table></table></span>
<span class="s"> <style></span>
<span class="s"> @-webkit-keyframes blink {</span>
<span class="s"> from { opacity: 1; }</span>
<span class="s"> to { opacity: 0.2; }</span>
<span class="s"> }</span>
<span class="s"> </style></span>
<span class="s"></div></span>
<span class="s">"""</span>
<span class="nv">update: </span><span class="nf">(output, domEl) -></span>
<span class="c1"># Redraw the widget</span>
<span class="nv">events = </span><span class="nx">JSON</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">output</span><span class="p">)</span>
<span class="nv">table = </span><span class="nx">$</span><span class="p">(</span><span class="nx">domEl</span><span class="p">).</span><span class="nx">find</span><span class="p">(</span><span class="s">'table'</span><span class="p">)</span>
<span class="nx">table</span><span class="p">.</span><span class="nx">html</span><span class="p">(</span><span class="s">''</span><span class="p">)</span>
<span class="nv">translateStatus = </span><span class="nf">(code) -></span>
<span class="c1"># translate between text and Sensu/Nagios status codes</span>
<span class="k">if</span> <span class="nx">code</span> <span class="o">==</span> <span class="mi">0</span>
<span class="k">return</span> <span class="s">"ok"</span>
<span class="k">if</span> <span class="nx">code</span> <span class="o">==</span> <span class="mi">1</span>
<span class="k">return</span> <span class="s">"warn"</span>
<span class="k">if</span> <span class="nx">code</span> <span class="o">==</span> <span class="mi">2</span>
<span class="k">return</span> <span class="s">"error"</span>
<span class="k">else</span>
<span class="k">return</span> <span class="s">"unknown"</span>
<span class="nv">showCommand = </span><span class="nf">(check) -></span>
<span class="c1"># display the check command if enabled</span>
<span class="k">if</span> <span class="nx">check</span><span class="p">.</span><span class="nx">command</span><span class="o">?</span> <span class="o">and</span> <span class="nx">SHOW_COMMAND</span> <span class="o">==</span> <span class="kc">true</span>
<span class="k">return</span> <span class="s">"<= "</span> <span class="o">+</span> <span class="nx">check</span><span class="p">.</span><span class="nx">command</span>
<span class="k">else</span>
<span class="k">return</span> <span class="s">""</span>
<span class="nv">showOutput = </span><span class="nf">(check) -></span>
<span class="c1"># display the check output if enabled</span>
<span class="k">if</span> <span class="nx">check</span><span class="p">.</span><span class="nx">output</span><span class="o">?</span> <span class="o">and</span> <span class="nx">SHOW_OUTPUT</span> <span class="o">==</span> <span class="kc">true</span>
<span class="k">return</span> <span class="s">"=> "</span> <span class="o">+</span> <span class="nx">check</span><span class="p">.</span><span class="nx">output</span>
<span class="k">else</span>
<span class="k">return</span> <span class="s">""</span>
<span class="nv">showBlinking = </span><span class="nf">(status) -></span>
<span class="c1"># blink indicators if enabled</span>
<span class="k">if</span> <span class="s">"warn"</span> <span class="k">in</span> <span class="nx">BLINKING_INDICATORS</span> <span class="o">and</span> <span class="nx">status</span> <span class="o">==</span> <span class="mi">1</span>
<span class="k">return</span> <span class="s">"blink"</span>
<span class="k">if</span> <span class="s">"error"</span> <span class="k">in</span> <span class="nx">BLINKING_INDICATORS</span> <span class="o">and</span> <span class="nx">status</span> <span class="o">==</span> <span class="mi">2</span>
<span class="k">return</span> <span class="s">"blink"</span>
<span class="k">if</span> <span class="s">"unknown"</span> <span class="k">in</span> <span class="nx">BLINKING_INDICATORS</span> <span class="o">and</span> <span class="nx">status</span> <span class="o">!=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="s">"blink"</span>
<span class="k">else</span>
<span class="k">return</span> <span class="s">""</span>
<span class="nv">insertNewline = </span><span class="nf">() -></span>
<span class="c1"># dynamically insert a newline between check command and check output if both are enabled</span>
<span class="k">if</span> <span class="nx">SHOW_OUTPUT</span> <span class="o">==</span> <span class="kc">true</span> <span class="o">and</span> <span class="nx">SHOW_COMMAND</span> <span class="o">==</span> <span class="kc">true</span>
<span class="k">return</span> <span class="s">"<br>"</span>
<span class="k">else</span>
<span class="k">return</span> <span class="s">""</span>
<span class="nv">sortByHostname = </span><span class="nf">(a, b) -></span>
<span class="c1"># sort the results by hostname if enabled</span>
<span class="k">return</span> <span class="nx">a</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">name</span><span class="p">.</span><span class="nx">localeCompare</span><span class="p">(</span><span class="nx">b</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">name</span><span class="p">)</span>
<span class="nv">renderEvent = </span><span class="nf">(event) -></span>
<span class="c1"># render one event</span>
<span class="s">"""</span>
<span class="s"> <tr></span>
<span class="s"> <td class="status </span><span class="si">#{</span><span class="nx">translateStatus</span><span class="p">(</span><span class="nx">event</span><span class="p">.</span><span class="nx">check</span><span class="p">.</span><span class="nx">status</span><span class="p">)</span><span class="si">}</span><span class="s"> </span><span class="si">#{</span><span class="nx">showBlinking</span><span class="p">(</span><span class="nx">event</span><span class="p">.</span><span class="nx">check</span><span class="p">.</span><span class="nx">status</span><span class="p">)</span><span class="si">}</span><span class="s">"><div class="disc"></div></td></span>
<span class="s"> <td class="sitename"></span><span class="si">#{</span><span class="nx">event</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">name</span><span class="si">}</span><span class="s"></td></span>
<span class="s"> <td class="check"></span><span class="si">#{</span><span class="nx">event</span><span class="p">.</span><span class="nx">check</span><span class="p">.</span><span class="nx">name</span><span class="si">}</span><span class="s"> </td></span>
<span class="s"> <td class="impact"></span><span class="si">#{</span><span class="nx">showCommand</span><span class="p">(</span><span class="nx">event</span><span class="p">.</span><span class="nx">check</span><span class="p">)</span><span class="si">}#{</span><span class="nx">insertNewline</span><span class="p">()</span><span class="si">}#{</span><span class="nx">showOutput</span><span class="p">(</span><span class="nx">event</span><span class="p">.</span><span class="nx">check</span><span class="p">)</span><span class="si">}</span><span class="s">\</td></span>
<span class="s"> </tr></span>
<span class="s"> """</span>
<span class="k">if</span> <span class="nx">SORT_BY_HOSTNAME</span> <span class="o">==</span> <span class="kc">true</span>
<span class="nv">results = </span><span class="nx">events</span><span class="p">.</span><span class="nx">sort</span><span class="p">(</span><span class="nx">sortByHostname</span><span class="p">)</span>
<span class="k">for</span> <span class="nx">event</span> <span class="k">in</span> <span class="nx">events</span>
<span class="nx">table</span><span class="p">.</span><span class="nx">append</span> <span class="nx">renderEvent</span><span class="p">(</span><span class="nx">event</span><span class="p">)</span>
<span class="nv">style: </span><span class="s">"""</span>
<span class="s">top: 20px</span>
<span class="s">left: 80px</span>
<span class="s">right: 80px</span>
<span class="s">color: #ffffff</span>
<span class="s">margin: 0 auto</span>
<span class="s">font-family: Helvetica Neue, Sans-serif</span>
<span class="s">font-smoothing: antialias</span>
<span class="s">font-weight: 300</span>
<span class="s">font-size: 16px</span>
<span class="s">line-height: 27px</span>
<span class="s">td</span>
<span class="s"> vertical-align:top</span>
<span class="s">.status</span>
<span class="s"> padding: 8px 9px 0 0</span>
<span class="s">.sitename, .check</span>
<span class="s"> padding: 0 20px 0 0</span>
<span class="s">.disc</span>
<span class="s"> width: 12px</span>
<span class="s"> height: 12px</span>
<span class="s"> border-radius: 50%</span>
<span class="s">.warn .disc</span>
<span class="s"> background-color: rgba(249,186,70,1)</span>
<span class="s">.error .disc</span>
<span class="s"> background-color: rgba(234,84,67,1)</span>
<span class="s">.unknown .disc</span>
<span class="s"> background-color: rgba(77,77,77,1)</span>
<span class="s">.blink</span>
<span class="s"> animation: blink 2s cubic-bezier(0.950, 0.050, 0.795, 0.035) infinite alternate</span>
<span class="s">"""</span>
</code></pre></div>
<h2 id="notes">notes</h2>
<ul>
<li>I recommend using an additional layer of protection in front of your Sensu API (e.g. Apache/Nginx Basic Auth + Fail2ban)</li>
<li>I have not tested this with a Sensu which has no currently failing checks.</li>
<li>Please excuse me protecting the privacy of our servers in the screenshots :)</li>
</ul>Reading recommendations (2016-08-07)2016-08-07T23:40:00+02:002016-08-07T23:47:00+02:00Alexander Skibatag:ghostlyrics.net,2016-08-07:/reading-recommendations-2016-08-07.html<p>Haven’t had the time to work on the new thing for this category yet, so here’s another round of links without the bonus feature I’m working on.</p>
<ul>
<li>
<p><a href="http://www.heise.de/security/meldung/Cyber-Grand-Challenge-IT-Security-koennte-sich-radikal-aendern-3288820.html">Cyber Grand Challenge: IT-Security könnte sich radikal ändern</a> by Daniel AJ Sokolov (heise.de Security RSS, German)<br>
<em>At Defcon there …</em></p></li></ul><p>Haven’t had the time to work on the new thing for this category yet, so here’s another round of links without the bonus feature I’m working on.</p>
<ul>
<li>
<p><a href="http://www.heise.de/security/meldung/Cyber-Grand-Challenge-IT-Security-koennte-sich-radikal-aendern-3288820.html">Cyber Grand Challenge: IT-Security könnte sich radikal ändern</a> by Daniel AJ Sokolov (heise.de Security RSS, German)<br>
<em>At Defcon there was a demonstration of an automatic system to detect and patch vulnerabilities.</em></p>
</li>
<li>
<p><a href="http://www.macrumors.com/2016/08/04/apple-launches-bug-bounty-program/">Apple Launches Bug Bounty Program, Offers Up to $200,000 for Software Vulnerabilities Discovered</a> by Juli Clover (macrumors.com RSS)<br>
<em>At Black Hat, Apple gave a talk after several years of complete silence in regard to conference talks. They happened to introduce a bug bounty program. However, for now it is invite-only and limited to several core categories.</em></p>
</li>
<li>
<p><a href="https://www.amnesty.org/en/latest/news/2016/07/turkey-independent-monitors-must-be-allowed-to-access-detainees-amid-torture-allegations/">Turkey: Independent monitors must be allowed to access detainees amid torture allegations</a> (via blog.fefe.de RSS)<br>
<em>Turkey allegedly tortures and rapes soldiers and others who were supposedly part of the attempted coup.</em></p>
</li>
<li>
<p><a href="http://catb.org/~esr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a> by Eric Steven Raymond (research on hacker manifesto)<br>
<em>I wish everyone asking technical questions would read this. That would lessen the support burden by a lot.</em></p>
</li>
<li>
<p><a href="https://bdomaths.wordpress.com/2016/08/06/the-end-of-a-short-journey/">The end of a short journey</a> by ~Featherine (bdomaths.wordpress.com RSS)<br>
<em>The community of Black Desert Online is up in arms while the community managers and European/North American employees are treating individual, critical but well-argumented posters with disrespect. Posts are removed, accounts are blocked. Criticism on the official forums simply disappears. Personally I’m still playing, but until there are steps towards reconciliation with the playerbase I refuse to invest any more money.</em></p>
</li>
<li>
<p><a href="https://medium.com/@joonaski/this-is-what-apple-should-tell-you-when-you-lose-your-iphone-8f07cf73cf82">This is what Apple should tell you when you lose your iPhone</a> by Joonas Kiminki (via Twitter)<br>
<em>In Italy, criminals are stealing your iPhones and then try to scam you into revealing your account credentials. I assume they want to unlock the phones and disable Find My Phone but they could also be after credit card information.</em></p>
</li>
<li>
<p><a href="http://www.sueddeutsche.de/kultur/tuerkei-nimmt-angehoerige-in-geiselhaft-1.3101991">Die Türkei nimmt Angehörige in Geiselhaft</a> by Yavuz Baydar (via blog.fefe.de RSS, German)<br>
<em>Wife of journalist was arrested in Turkey since he could not be found.</em></p>
</li>
</ul>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://blog.fefe.de/?ts=a95d9ab2">http://blog.fefe.de/?ts=a95d9ab2</a> (about PostgreSQL’s examplary behaviour)</li>
<li><a href="http://dayoneapp.com/2016/08/encryption-update/">http://dayoneapp.com/2016/08/encryption-update/</a></li>
<li><a href="http://gawker.com/peter-thiel-is-interested-in-harvesting-the-blood-of-th-1784649830">http://gawker.com/peter-thiel-is-interested-in-harvesting-the-blood-of-th-1784649830</a></li>
<li><a href="http://krebsonsecurity.com/2016/08/the-reincarnation-of-a-bulletproof-hoster/">http://krebsonsecurity.com/2016/08/the-reincarnation-of-a-bulletproof-hoster/</a></li>
<li><a href="http://lifehacker.com/have-two-drinks-at-a-party-1784669979">http://lifehacker.com/have-two-drinks-at-a-party-1784669979</a></li>
<li><a href="http://lifehacker.com/how-to-mirror-androids-notifications-to-windows-10-usin-1784693893">http://lifehacker.com/how-to-mirror-androids-notifications-to-windows-10-usin-1784693893</a></li>
<li><a href="http://mlkshk.com/p/53QK">http://mlkshk.com/p/53QK</a> (Posters about Programming in WWII propaganda style)</li>
<li><a href="http://playstarbound.com/quest-friends-forever/">http://playstarbound.com/quest-friends-forever/</a></li>
<li><a href="http://techniktagebuch.tumblr.com/post/148342922237">http://techniktagebuch.tumblr.com/post/148342922237</a> (about German passports and fingerprints)</li>
<li><a href="http://techniktagebuch.tumblr.com/post/148497351912">http://techniktagebuch.tumblr.com/post/148497351912</a> (about phantom vibrantions and blinking LEDs)</li>
<li><a href="http://thedailywtf.com/articles/the-inner-json-effect">http://thedailywtf.com/articles/the-inner-json-effect</a></li>
<li><a href="http://venturebeat.com/2016/08/02/hackers-break-into-telegram-revealing-15-million-users-phone-numbers/">http://venturebeat.com/2016/08/02/hackers-break-into-telegram-revealing-15-million-users-phone-numbers/</a></li>
<li><a href="http://www.catb.org/esr/faqs/hacker-howto.html">http://www.catb.org/esr/faqs/hacker-howto.html</a></li>
<li><a href="http://www.paulgraham.com/procrastination.html">http://www.paulgraham.com/procrastination.html</a></li>
<li><a href="http://www.reuters.com/article/olympics-rio-brazil-food-idUSL8N1AL2FS">http://www.reuters.com/article/olympics-rio-brazil-food-idUSL8N1AL2FS</a></li>
<li><a href="http://www.reuters.com/article/olympics-rio-carioca-food-idUSL1N1AL1F2">http://www.reuters.com/article/olympics-rio-carioca-food-idUSL1N1AL1F2</a></li>
<li><a href="http://www.reuters.com/article/us-commentary-putin-vanburen-idUSKCN10D03T">http://www.reuters.com/article/us-commentary-putin-vanburen-idUSKCN10D03T</a></li>
<li><a href="https://bdomaths.wordpress.com/2016/07/16/your-new-liverto-a-daunting-experience/">https://bdomaths.wordpress.com/2016/07/16/your-new-liverto-a-daunting-experience/</a></li>
<li><a href="https://medium.com/equal-future/airbnbs-racism-problem-is-much-bigger-than-a-few-racist-hosts-a1dea9c77586">https://medium.com/equal-future/airbnbs-racism-problem-is-much-bigger-than-a-few-racist-hosts-a1dea9c77586</a></li>
<li><a href="https://medium.com/equal-future/bending-the-moral-arc-of-the-gig-economy-648f8e65219c#.nqj24db8o">https://medium.com/equal-future/bending-the-moral-arc-of-the-gig-economy-648f8e65219c#.nqj24db8o</a></li>
<li><a href="https://readonmydear.wordpress.com/2016/08/04/die-stasi-am-kuchentisch/">https://readonmydear.wordpress.com/2016/08/04/die-stasi-am-kuchentisch/</a></li>
<li><a href="https://twitter.com/i/moments/761011730298249216">https://twitter.com/i/moments/761011730298249216</a> (about Trump’s curiousity on nuclear weapons)</li>
<li><a href="https://www.reddit.com/r/EnoughTrumpSpam/comments/4teoxl/a_final_response_to_the_tell_me_why_trump_is_a/">https://www.reddit.com/r/EnoughTrumpSpam/comments/4teoxl/a_final_response_to_the_tell_me_why_trump_is_a/</a></li>
</ul>Reading recommendations (2016-07-30)2016-07-30T01:37:00+02:002016-07-30T01:37:00+02:00Alexander Skibatag:ghostlyrics.net,2016-07-30:/reading-recommendations-2016-07-30.html<p>Here’s another round of reading recommendations. The nice addition to these links I mentioned <a href="http://ghostlyrics.net/reading-recommendations-2016-07-18.html#reading-recommendations-2016-07-18">last time</a> is progressing nicely with what I think is probably a third of the work already completed.</p>
<ul>
<li>
<p><a href="http://techniktagebuch.tumblr.com/post/147643674782">Pokémon GO – Persönliche Erfahrungen innerhalb von zehn Tagen sowie eine Hypothese zur Bildung urbaner Legenden</a> by Sebastian …</p></li></ul><p>Here’s another round of reading recommendations. The nice addition to these links I mentioned <a href="http://ghostlyrics.net/reading-recommendations-2016-07-18.html#reading-recommendations-2016-07-18">last time</a> is progressing nicely with what I think is probably a third of the work already completed.</p>
<ul>
<li>
<p><a href="http://techniktagebuch.tumblr.com/post/147643674782">Pokémon GO – Persönliche Erfahrungen innerhalb von zehn Tagen sowie eine Hypothese zur Bildung urbaner Legenden</a> by Sebastian Standke (RSS, Techniktagebuch, German)<br>
<em>Standke sums up several experiences during the first weeks of Pokémon GO which seems to bring people closer together in their fandom and nostalgia to work together and make new experiences.</em></p>
</li>
<li>
<p><a href="https://reverse.put.as/2016/07/22/shut-up-snitch-reverse-engineering-and-exploiting-a-critical-little-snitch-vulnerability/">Shut up snitch! – reverse engineering and exploiting a critical Little Snitch vulnerability</a> by ~osxreverser (RSS, Reverse Engineering Mac OS X)<br>
<em>If you are into reverse engineering software, this is a very detailed report you might want to look at, especially if you’re on macOS and happen to be using <a href="https://www.obdev.at/products/littlesnitch/index.html">Snitch</a> to help improve your privacy. Great read.</em></p>
</li>
<li>
<p><a href="https://www.reddit.com/r/StarWars/comments/3qvj6w/theory_jar_jar_binks_was_a_trained_force_user/">[Theory] Jar Jar Binks was a trained Force user, knowing Sith collaborator, and will play a central role in The Force Awakens</a> by ~Lumpawarroo (newsletter, Reddit upvoted weekly)<br>
<em>An amusing, well argued theory that Jar Jar might not be as harmless and clumsy as we perceived him to be. Gotta love a good conspiracy theory for its entertainment value.</em></p>
</li>
<li>
<p><a href="http://www.trueachievements.com/n23467/fumbling-the-handoff.htm">Fumbling The Handoff</a> by Mark Delaney (RSS, Trueachievements)<br>
<em>Because many video game series would be better of without spin offs or botched sequels. More of the same is often worse than nothing if the quality is terrible.</em></p>
</li>
<li>
<p><a href="http://www.macrumors.com/2016/07/22/edward-snowden-iphone-case-guard-radio-snitching/">Edward Snowden Designed an iPhone Case to Guard Against Radio Snitching</a> by Tim Hardwick (RSS, MacRumors)<br>
<em>I’m curious if this will indeed become a real product. Given the healthy dose of paranoia one is required to have when working in IT, I can see the appeal of such a “radioproof” case; even more so if you’re a high-value target for intelligence agencies.</em></p>
</li>
<li>
<p><a href="http://blog.fefe.de/?ts=a9745ed7">Fefe about Daniel Suarez’s ‘Daemon’</a> by Felix von Leitner (RSS, Fefes Blog, German)<br>
<em>I had read both Daemon and Freedom in the past and could really relate to this line of thought. It’s absolutely fascinating and somewhat terrifying how easy it has become to mobilize many people by the means of gamification.</em></p>
</li>
<li>
<p><a href="https://losfuzzys.github.io/writeup/2016/03/17/bsidesljubljana-ctf-2016/">BSides Ljubljana CTF 2016</a> by ~f0rki, verr (private message)<br>
<em>A write-up of the Capture The Flag hacking challenges from BSides Ljubljana, a conference I attended with colleagues from university.</em></p>
</li>
</ul>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html">http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html</a></li>
<li><a href="http://blog.erratasec.com/2016/07/my-raspeberry-pi-cluster.html">http://blog.erratasec.com/2016/07/my-raspeberry-pi-cluster.html</a></li>
<li><a href="http://blog.trello.com/phone-notifications-ruin-productivity/">http://blog.trello.com/phone-notifications-ruin-productivity/</a></li>
<li><a href="http://motherboard.vice.com/read/a-lesson-from-tesla-autopilot-cities-will-have-to-be-redesigned-to-confuse-invading-robots">http://motherboard.vice.com/read/a-lesson-from-tesla-autopilot-cities-will-have-to-be-redesigned-to-confuse-invading-robots</a></li>
<li><a href="http://techniktagebuch.tumblr.com/post/147585546837">http://techniktagebuch.tumblr.com/post/147585546837</a></li>
<li><a href="http://www.blabbermouth.net/news/director-brendan-malloy-discusses-the-metallica-st-anger-music-video/">http://www.blabbermouth.net/news/director-brendan-malloy-discusses-the-metallica-st-anger-music-video/</a></li>
<li><a href="http://www.failbettergames.com/interface-update-coming-to-sunless-sea/">http://www.failbettergames.com/interface-update-coming-to-sunless-sea/</a></li>
<li><a href="http://www.macrumors.com/2016/07/20/brazil-upholds-whatsapp-encryption/">http://www.macrumors.com/2016/07/20/brazil-upholds-whatsapp-encryption/</a></li>
<li><a href="http://www.polygon.com/2016/7/21/12235452/how-we-made-the-best-game-ever">http://www.polygon.com/2016/7/21/12235452/how-we-made-the-best-game-ever</a></li>
<li><a href="http://www.polygon.com/2016/7/21/12239704/ghostbusters-is-still-haunted-by-negative-racial-tropes">http://www.polygon.com/2016/7/21/12239704/ghostbusters-is-still-haunted-by-negative-racial-tropes</a></li>
<li><a href="http://www.polygon.com/2016/7/21/12241890/women-game-development">http://www.polygon.com/2016/7/21/12241890/women-game-development</a></li>
<li><a href="http://www.sandraandwoo.com/woode/2016/07/28/0806-die-goettliche-komoedie-seite-5/">http://www.sandraandwoo.com/woode/2016/07/28/0806-die-goettliche-komoedie-seite-5/</a></li>
<li><a href="http://www.tagesschau.de/ausland/trump-341.html">http://www.tagesschau.de/ausland/trump-341.html</a></li>
<li><a href="https://playthroughline.com/blog/2016/07/25/script-pok%C3%A9mon-go">https://playthroughline.com/blog/2016/07/25/script-pok%C3%A9mon-go</a></li>
<li><a href="https://www.slightfuture.com/webdev/excessive-applenewsbot-requests">https://www.slightfuture.com/webdev/excessive-applenewsbot-requests</a></li>
</ul>Reading recommendations (2016-07-18)2016-07-18T12:17:00+02:002016-07-18T12:37:00+02:00Alexander Skibatag:ghostlyrics.net,2016-07-18:/reading-recommendations-2016-07-18.html<p>It’s kind of amazing that there’s still some time left between work, playing Black Desert Online and doing household chores. I have a little idea about these link posts in the back of my head but don’t know yet how much coding effort is required to make …</p><p>It’s kind of amazing that there’s still some time left between work, playing Black Desert Online and doing household chores. I have a little idea about these link posts in the back of my head but don’t know yet how much coding effort is required to make that work, so I’ll not go into specifics just yet.
Let’s get to it. </p>
<ul>
<li>
<p><a href="https://www.proofpoint.com/us/threat-insight/post/droidjack-uses-side-load-backdoored-pokemon-go-android-app">DroidJack Uses Side-Load…It’s Super Effective! Backdoored Pokemon GO Android App Found</a> by Proofpoint Staff (via Polygon.com RSS)<br>
<em>In the craze that is Pokémon GO and its staggered release over the world, it is not suprising to see criminals jumping to exploit the people’s impatience. Personally, I’ve seen more than a few players last week in Graz even though the game was released in most of Europa on Saturday. A DDOS immediately followed the release and prevented my girlfriend and me from trying ourselves.</em></p>
</li>
<li>
<p><a href="http://www.fastcodesign.com/3061519/evidence/the-ux-secret-that-will-ruin-apps-for-you">The UX Secret That Will Ruin Apps For You</a> by Mark Wilson (via mjtsai.com RSS)<br>
<em>While I can imagine that checks that take - relatively speaking - too little time have the potential to make people feel insecure I think that’s just the assumption that we have been grown accustomed to by using slower internet connections and systems (e.g. without Solid State Drives) for years. Now, if things are done in an instant, it ‘seems wrong’. As someone working in tech, it’s a different thing because there’s a lot more understanding for how fast computers have become and how much you can optimize a problem.</em></p>
</li>
<li>
<p><a href="http://www.polygon.com/2016/7/5/11819438/starcraft-ghost-what-went-wrong">STARCRAFT: GHOST: WHAT WENT WRONG</a> by Patrick Stafford (RSS, Polygon)<br>
<em>I really wanted Starcraft: Ghost to become a real thing. The Starcraft lore is overall very good and would’ve provided ample room for such a stealth based game with its distinct Ghost units. It’s saddening to read about the multiple failures of a project of such potential.</em></p>
</li>
<li>
<p><a href="http://lifehacker.com/the-psychological-benefits-of-writing-regularly-1783693547">The Psychological Benefits of Writing Regularly</a> by Gregory Ciotti (RSS, Lifehacker)<br>
<em>I can attest to that. While I do love writing in general, there’s writing which feels nice and writing that is a drag. Writing technical documentation is a kind of let down - you have to be precise, think hard whether what you write is understandable to your target audience. Prose on the other hand feels like what I imagine painting would be for an artist. I’ll just grab the (virtual) pen and let loose.</em></p>
</li>
<li>
<p><a href="https://www.quora.com/In-a-nutshell-why-do-a-lot-of-developers-dislike-Agile/answer/Miles-English?srid=i5M8&share=1">Answer to ‘In a nutshell, why do a lot of developers dislike Agile?’</a> by Miles English (via Fefes Blog RSS)<br>
<em>Have you ever wondered why such a lot of things seem to go wrong when developing software and planning is not done before, but during the project?</em></p>
</li>
<li>
<p><a href="http://www.vox.com/2015/5/28/8661977/race-police-officer">I’m a black ex-cop, and this is the real truth about race and policing</a> by Redditt Hudson (via Fefes Blog RSS)<br>
<em>Horrifying read. These problems in America’s police force are of nightmarish dimensions. Abuse of power in many, many forms. Reminds me of a tweet I read recently which discussed new gun regulations for officers in another country. A commenter added ‘that they act like they were ashamed of gun use’. Well, yes. In countries other than the US, guns are not glorified. They are to be used with caution and preferably not at all by police force.</em></p>
</li>
<li>
<p><a href="http://www.trueachievements.com/n24413/ta-top-five-main-menu-themes.htm">TA Top Five: Main Menu Themes</a> by Marc Hollinshead (RSS, TrueAchievements)<br>
<em>TA’s nice feature on video game menu music has some gems. Didn’t know the Dark Souls III one before and was surprised. Oblivion’s theme and Mass Effect’s theme were immediately recognizable to me; having played many hours of either.</em></p>
</li>
</ul>
<p>I picked 7 links for some additional commentary. Further links which were candidates can be found below for archival purposes.</p>
<hr>
<p>Sidenotes.</p>
<ul>
<li><a href="http://techniktagebuch.tumblr.com/post/146913150817">http://techniktagebuch.tumblr.com/post/146913150817</a></li>
<li><a href="http://www.polygon.com/2016/7/14/12187898/banned-on-twitch">http://www.polygon.com/2016/7/14/12187898/banned-on-twitch</a></li>
<li><a href="http://www.polygon.com/2016/7/9/12134860/starbounds-full-launch-is-coming-july-22">http://www.polygon.com/2016/7/9/12134860/starbounds-full-launch-is-coming-july-22</a></li>
<li><a href="http://www.popsci.com/police-used-bomb-disposal-robot-to-kill-dallas-shooting-suspect">http://www.popsci.com/police-used-bomb-disposal-robot-to-kill-dallas-shooting-suspect</a></li>
<li><a href="https://blog.malwarebytes.com/cybercrime/2016/07/mac-malware-osx-keydnap-steals-keychain/">https://blog.malwarebytes.com/cybercrime/2016/07/mac-malware-osx-keydnap-steals-keychain/</a></li>
<li><a href="https://medium.com/message/never-trust-a-corporation-to-do-a-librarys-job-f58db4673351">https://medium.com/message/never-trust-a-corporation-to-do-a-librarys-job-f58db4673351</a></li>
<li><a href="https://twitter.com/boonerang/status/751983397363445760">https://twitter.com/boonerang/status/751983397363445760</a></li>
<li><a href="https://twitter.com/TyStopTweeting/status/752529684303343620/video/1">https://twitter.com/TyStopTweeting/status/752529684303343620/video/1</a></li>
<li><a href="https://www.engadget.com/2015/12/02/paypal-square-and-big-bankings-war-on-the-sex-industry/">https://www.engadget.com/2015/12/02/paypal-square-and-big-bankings-war-on-the-sex-industry/</a></li>
<li><a href="https://www.metronaut.de/2016/07/der-lkw-als-waffe/">https://www.metronaut.de/2016/07/der-lkw-als-waffe/</a></li>
</ul>Building and Deploying a C++ library with GitLab2016-07-14T16:27:00+02:002016-08-28T18:04:00+02:00Alexander Skibatag:ghostlyrics.net,2016-07-14:/building-and-deploying-a-c-library-with-gitlab.html<p>I’ve already <a href="http://ghostlyrics.net/using-continuous-integration-for-puppet.html">written once before</a> that I like working with GitLab’s Continuous Integration (CI) technology. I’ve now had the chance to set up a project for one of our research teams using GitLab CI and it’s been a true success.</p>
<ul>
<li>This post was updated once (2016-08-28 …</li></ul><p>I’ve already <a href="http://ghostlyrics.net/using-continuous-integration-for-puppet.html">written once before</a> that I like working with GitLab’s Continuous Integration (CI) technology. I’ve now had the chance to set up a project for one of our research teams using GitLab CI and it’s been a true success.</p>
<ul>
<li>This post was updated once (2016-08-28)</li>
</ul>
<p>In short: <strong>We’re using GitLab CI to build and deploy a C++ library.</strong> We are downloading its dependencies, compiling them, compiling our library, creating Debian packages and installing them on the 6 servers we use for heavy-duty computing.</p>
<ul>
<li>This writeup contains notes on <code>vagrant</code>, <code>docker</code>, <code>gitlab-ci-multi-runner</code>, <code>fpm</code> and <code>cmake</code>.</li>
<li>I worked with <strong>Christian Mostegel</strong> and <strong>Markus Rumpler</strong> on this project.</li>
</ul>
<p><strong>Sections:</strong> </p>
<ul>
<li>Preparation</li>
<li>Automatic Building</li>
<li>Docker</li>
<li>GitLab Runners</li>
<li>GitLab CI<ul>
<li>GitLab CI: Details on Jobs</li>
<li>GitLab CI: Details on Script</li>
<li>GitLab CI: Details on FPM</li>
<li>GitLab CI: Building the library</li>
</ul>
</li>
<li>Automatic Deployment</li>
<li>Deployment: Sudoers</li>
<li>Deployment: Jobs</li>
<li>Summary</li>
<li>What went wrong</li>
</ul>
<h2 id="preparation">Preparation</h2>
<p>We already had a GitLab instance that I’m very fond of and some knowledge on how to set up automatic builds from previous projects.</p>
<p>First we needed to verify that the library would build at all under the given conditions (Debian Jessie, amd64, specified dependencies). To ensure this, we used <a href="https://www.vagrantup.com">Vagrant</a> to create a virtual machine whose configuration in terms of installed development packages was similar our local environment.</p>
<p>Using this VM as testbed we prepared the download and build of the dependencies of which Debian packages didn’t readily exist in the configuration the researchers specified by writing a simple shell script.</p>
<p>Next we tried to build the library in this machine and added the required packages bit by bit after verifying what was really needed to build. These packages were collected since they would be the base of the <a href="https://www.docker.com">Docker</a> image we would build later to speed up the CI runs.</p>
<p>The final result of our preparation was a Vagrantfile which set up the machine and compiled as well as packaged our library with a simple <code>vagrant up</code>.</p>
<h2 id="automatic-building">Automatic Building</h2>
<h3 id="docker">Docker</h3>
<p>The next step was to build the Docker image. This was fairly simple given that we already relied on two other automatically built Docker images from previous projects. We created another repository on GitHub to link with Docker Hub and waited for everything to be built (<em>of course it didn’t work perfectly and there was quite a lot of iteration in about every step I mention</em>).</p>
<p>We typically build our images on top of <code>buildpack-deps</code> given that it’s an official, somewhat slim, development oriented image. Here’s the <code>Dockerfile</code> currently in use during writing this article:</p>
<div class="highlight"><pre><span></span><code><span class="k">FROM</span> <span class="s">buildpack-deps:jessie</span>
<span class="k">MAINTAINER</span><span class="s"> Alexander Skiba <alexander.skiba@icg.tugraz.at></span>
<span class="k">ENV</span> DEBIAN_FRONTEND noninteractive
<span class="k">RUN</span> apt-get update <span class="o">&&</span> apt-get install -y --no-install-recommends <span class="se">\</span>
build-essential <span class="se">\</span>
cmake <span class="se">\</span>
freeglut3 <span class="se">\</span>
freeglut3-dev <span class="se">\</span>
gcc <span class="se">\</span>
git <span class="se">\</span>
g++ <span class="se">\</span>
libatlas-dev <span class="se">\</span>
libatlas-base-dev <span class="se">\</span>
libboost-all-dev <span class="se">\</span>
libblas-dev <span class="se">\</span>
libcgal-dev <span class="se">\</span>
libdevil-dev <span class="se">\</span>
libeigen3-dev <span class="se">\</span>
libexiv2-dev <span class="se">\</span>
libglew-dev <span class="se">\</span>
libgoogle-glog-dev <span class="se">\</span>
liblapack-dev <span class="se">\</span>
liblas-dev <span class="se">\</span>
liblas-c-dev <span class="se">\</span>
libpcl-dev <span class="se">\</span>
libproj-dev <span class="se">\</span>
libprotobuf-dev <span class="se">\</span>
libqglviewer-dev <span class="se">\</span>
libsuitesparse-dev <span class="se">\</span>
libtclap-dev <span class="se">\</span>
libtinyxml-dev <span class="se">\</span>
mlocate <span class="se">\</span>
ruby <span class="se">\</span>
ruby-dev <span class="se">\</span>
unzip <span class="se">\</span>
wget <span class="se">\</span>
<span class="o">&&</span> apt-get clean <span class="se">\</span>
<span class="o">&&</span> rm -rf /var/lib/apt/lists/* <span class="se">\</span>
<span class="o">&&</span> gem install --no-rdoc --no-ri fpm
</code></pre></div>
<h3 id="gitlab-runners">GitLab Runners</h3>
<p>After the image was built, we set up GitLab runners on each of our computing machines so that we could also use their cores and memory to speed up building the project itself. On each of these machines two runners were configured - one with <code>shell</code>, the other with <code>docker</code> as <code>executor</code>. Here’s an example <code>/etc/gitlab-runner/config.toml</code> from production.</p>
<div class="highlight"><pre><span></span><code>concurrent = 1
[[runners]]
name = "example1"
url = "REDACTED"
token = "REDACTED"
executor = "docker"
[runners.docker]
tls_verify = false
image = "icgoperations/3dlib"
privileged = false
disable_cache = false
volumes = ["/cache"]
[runners.cache]
Insecure = false
[[runners]]
name = "example1-shell"
url = "REDACTED"
token = "REDACTED"
executor = "shell"
[runners.ssh]
[runners.docker]
tls_verify = false
image = ""
privileged = false
disable_cache = false
[runners.parallels]
base_name = ""
disable_snapshots = false
[runners.virtualbox]
base_name = ""
disable_snapshots = false
[runners.cache]
Insecure = false
</code></pre></div>
<h3 id="gitlab-ci">GitLab CI</h3>
<p>Next we converted the previously written Bash script into the format needed by <code>.gitlab-ci.yml</code>. In the <code>*-build</code> jobs we download, build and package our dependencies.</p>
<div class="highlight"><pre><span></span><code><span class="nt">stages</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">dependencies</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">build</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">deploy</span>
<span class="nt">ceres-build</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">dependencies</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">export I3D_CERES_VERSION=1.11.0</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">wget --quiet https://github.com/ceres-solver/ceres-solver/archive/$I3D_CERES_VERSION.tar.gz</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">mkdir ceres-source ceres-build ceres-install</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tar xvfz $I3D_CERES_VERSION.tar.gz -C ceres-source --strip-components=1</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">cmake -Bceres-build -Hceres-source</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make -j$(nproc) -C ceres-build</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make -C ceres-build install DESTDIR=../ceres-install</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">bash .gitlab_build_files/build_ceres_debian_pkg.sh</span>
<span class="nt">artifacts</span><span class="p">:</span>
<span class="nt">paths</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">i3d-ceres_*_amd64.deb</span>
<span class="nt">tags</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">linux,debian-jessie</span>
<span class="nt">opencv-build</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">dependencies</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">export I3D_OPENCV_VERSION=2.4.10</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">wget --quiet https://github.com/Itseez/opencv/archive/$I3D_OPENCV_VERSION.tar.gz</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">mkdir opencv-source opencv-build opencv-install</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tar xvfz $I3D_OPENCV_VERSION.tar.gz -C opencv-source --strip-components=1</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">cmake -Bopencv-build -Hopencv-source -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_JPEG=ON -DBUILD_PNG=ON -DBUILD_TIFF=ON -DBUILD_opencv_gpu=OFF -DWITH_FFMPEG=OFF</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make -j$(nproc) -C opencv-build</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make -C opencv-build install DESTDIR=../opencv-install</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">bash .gitlab_build_files/build_opencv_debian_pkg.sh</span>
<span class="nt">artifacts</span><span class="p">:</span>
<span class="nt">paths</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">i3d-opencv_*_amd64.deb</span>
<span class="nt">tags</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">linux,debian-jessie</span>
</code></pre></div>
<h4 id="gitlab-ci-details-on-jobs">GitLab CI: Details on Jobs</h4>
<p>Since this can be a little overwhelming, I’d like to explain one section in detail. I’ll write GitLab terms italicized.</p>
<div class="highlight"><pre><span></span><code><span class="nt">ceres-build</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">dependencies</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">export I3D_CERES_VERSION=1.11.0</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">wget --quiet https://github.com/ceres-solver/ceres-solver/archive/$I3D_CERES_VERSION.tar.gz</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">mkdir ceres-source ceres-build ceres-install</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tar xvfz $I3D_CERES_VERSION.tar.gz -C ceres-source --strip-components=1</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">cmake -Bceres-build -Hceres-source</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make -j$(nproc) -C ceres-build</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make -C ceres-build install DESTDIR=../ceres-install</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">bash .gitlab_build_files/build_ceres_debian_pkg.sh</span>
<span class="nt">artifacts</span><span class="p">:</span>
<span class="nt">paths</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">i3d-ceres_*_amd64.deb</span>
<span class="nt">tags</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">linux,debian-jessie</span>
</code></pre></div>
<p>Here <code>ceres-build</code> is the unique name for the <em>job</em> (one step of a build process) - it’s the identifier of one build unit. </p>
<p>The <code>stage</code> describes where in the build <em>pipeline</em> (all jobs combined for one project) you want this job to be executed. The default stages are <code>build => test => deploy</code>. We defined our stages to be <code>dependencies => build => deploy</code> before for this project, so <code>ceres-build</code> is executed in the first stage. Jobs in the same stage will be run in parallel, if possible (e.g. you have more than one runner, or at least one runner set to use concurrent builds).</p>
<p>After a build has finished running, you may choose not to discard all files automatically when using Docker and opt to keep some selected ones. This is done by specifying <code>artifacts</code>. We specified that all files matching <code>i3d-ceres_*_amd64.deb</code> shall be kept - a matching example would be <code>i3d-ceres_1.11.0_amd64.deb</code>. <del><em>We also experimented with the newly released option of automatically expiring artifacts after a given amount of time has passed but were not convinced this was mature enough just yet.</em></del></p>
<p>The <code>tags</code> section helps GitLab Runner decide which machine to run the job on. We tagged our runners with <code>linux</code> and <code>debian-jessie</code> before. By using the same tags in <code>.gitlab-ci.yml</code> we make sure that one of the prepared machines is used.</p>
<p>The <code>script</code> section consists of a list of shell commands to run for the build. If one exists with a different code than <code>0</code>, the build is assumed to have failed, otherwise it’s good.</p>
<h4 id="gitlab-ci-details-on-script">GitLab CI: Details on Script</h4>
<div class="highlight"><pre><span></span><code><span class="c1"># Use an environment variable to avoid hardcoding the version number</span>
<span class="nb">export</span> <span class="nv">I3D_CERES_VERSION</span><span class="o">=</span><span class="m">1</span>.11.0
<span class="c1"># Download the given release directly from the GitHub project releases</span>
wget --quiet https://github.com/ceres-solver/ceres-solver/archive/<span class="nv">$I3D_CERES_VERSION</span>.tar.gz
<span class="c1"># Prepare the directories we are going to be working in</span>
mkdir ceres-source ceres-build ceres-install
<span class="c1"># Unpack the archive and strip the folder containing the version number</span>
tar xvfz <span class="nv">$I3D_CERES_VERSION</span>.tar.gz -C ceres-source --strip-components<span class="o">=</span><span class="m">1</span>
<span class="c1"># Configure Makefiles with given Build directory and Home (source) directory</span>
cmake -Bceres-build -Hceres-source
<span class="c1"># Build the project with the same number of threads as the machine has cores</span>
make -j<span class="k">$(</span>nproc<span class="k">)</span> -C ceres-build
<span class="c1"># "Install" the finished product locally into a given directory</span>
make -C ceres-build install <span class="nv">DESTDIR</span><span class="o">=</span>../ceres-install
<span class="c1"># Package the result with FPM (see FPM section)</span>
bash .gitlab_build_files/build_ceres_debian_pkg.sh
</code></pre></div>
<h4 id="gitlab-ci-details-on-fpm">GitLab CI: Details on FPM</h4>
<p>As you might have already seen, I use long option names where possible to improve readability. In the following <code>fpm</code> command there are some short names however.</p>
<ul>
<li><code>t</code> is for <code>type of target</code></li>
<li><code>s</code> is for <code>type of source</code></li>
<li><code>C</code> is for <code>source directory</code></li>
</ul>
<p>You can find even more parameters in the <a href="https://github.com/jordansissel/fpm/wiki">fpm wiki</a>.</p>
<div class="highlight"><pre><span></span><code><span class="ch">#! /usr/bin/env bash</span>
fpm <span class="se">\</span>
-t deb <span class="se">\</span>
-s dir <span class="se">\</span>
-C ceres-install <span class="se">\</span>
--name <span class="s2">"i3d-ceres"</span> <span class="se">\</span>
--version <span class="nv">$I3D_CERES_VERSION</span> <span class="se">\</span>
--license <span class="s2">"BSD"</span> <span class="se">\</span>
--vendor <span class="s2">"ICG TU Graz"</span> <span class="se">\</span>
--category <span class="s2">"devel"</span> <span class="se">\</span>
--architecture <span class="s2">"amd64"</span> <span class="se">\</span>
--maintainer <span class="s2">"Aerial Vision Group <aerial@icg.tugraz.at>"</span> <span class="se">\</span>
--url <span class="s2">"https://aerial.icg.tugraz.at/"</span> <span class="se">\</span>
--description <span class="s2">"Compiled Ceres solver for i3d library"</span> <span class="se">\</span>
--depends cmake <span class="se">\</span>
--depends libatlas-dev <span class="se">\</span>
--depends libatlas-base-dev <span class="se">\</span>
--depends libblas-dev <span class="se">\</span>
--depends libeigen3-dev <span class="se">\</span>
--depends libgoogle-glog-dev <span class="se">\</span>
--depends liblapack-dev <span class="se">\</span>
--depends libsuitesparse-dev <span class="se">\</span>
--verbose <span class="se">\</span>
.
</code></pre></div>
<p>After running FPM we have a nice, installable Debian package.</p>
<h4 id="gitlab-ci-building-the-library">GitLab CI: Building the library</h4>
<p>While building our own library is similar to the previously shown build, there are some differences worth mentioning.</p>
<ul>
<li>There is no need to download/fetch/checkout the source, GitLab Runner already does that automatically.</li>
<li>The version which is later used for building the package includes the current date, time and the commit hash (example:<code>2016-07-10~1138.ea246ba</code>) This ensures that the package version is both ever increasing and easily resolved into the source commit.</li>
<li>We install the <code>.deb</code> packages built in the previous stage. This is simple since GitLab CI makes artifacts of the previous stage available to the current stage automatically. Notice we also avoid specifying a version number by using a wildcard.</li>
<li><em>While I prefer not to jump around with <code>cd</code> during the build process and suggest to use flags instead, we had some trouble making that work with our library; so the <code>cd</code> statements stuck around.</em></li>
</ul>
<div class="highlight"><pre><span></span><code><span class="nt">icg3-build</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">build</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">export I3D_CORE_VERSION="$(date +%Y-%m-%d~%H%M)"."$(git rev-parse --short HEAD)"</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">dpkg -i i3d-*.deb</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">mkdir icg3d-build icg3d-install</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">cd icg3d-build</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">cmake -DUSE_CUDA=OFF -DAPP_SFM=OFF -DWITH_CGAL=ON -DWITH_QGL_VIEWER=ON -DWITH_QT=ON -DCORE_WITH_LAS=ON ..</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">cd ..</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make -j$(nproc) -C icg3d-build/ICG_3DLib</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make -C icg3d-build/ICG_3DLib install DESTDIR=../../icg3d-install</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">bash .gitlab_build_files/build_icg3d_debian_pkg.sh</span>
<span class="nt">artifacts</span><span class="p">:</span>
<span class="nt">paths</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">i3d-core_*_amd64.deb</span>
<span class="nt">tags</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">linux,debian-jessie</span>
</code></pre></div>
<h2 id="automatic-deployment">Automatic Deployment</h2>
<p>Automatic deployment was a greater issue than automatic building due to security and infrastructure considerations.</p>
<p>Since we already used Puppet, one idea was to use Puppet to <code>ensure => latest</code> on the packages we were building ourselves. However, the <code>apt</code> provider needs a repository and we were not sure the <code>dpkg</code> provider supported versioned packages and using <code>latest</code>. In order to use our repository we would have had to set it up to automatically sign new packages. Furthermore we would’ve had to run <code>apt-get update</code> against every server on every machine virtually all the time which is bad practice since we’re not using an Apt Proxy or similar.</p>
<p>Another idea was to have locally scheduled execution via <code>cron</code> but that amounted to the same thing in my opinion.</p>
<p>Essentially I disliked any solution based on polling since this meant additional waiting time for the researchers with each build. When doing everything via the GitLab CI system, they would be able to configure notifications when all servers have received the newest build.</p>
<h3 id="deployment-sudoers">Deployment: Sudoers</h3>
<p>However, to install something one needs <code>sudo</code> rights. Essentially, one would have to configure a special <code>/etc/sudoers.d</code> entry for <code>gitlab-runner</code> to be able to install the packages that we build previously and store with the <em>artifacts</em> feature. The required entry looked like this for our machines:</p>
<div class="highlight"><pre><span></span><code>gitlab-runner machine[1-6]= NOPASSWD: /usr/bin/dpkg -i i3d-core_*_amd64.deb i3d-opencv_*_amd64.deb i3d-ceres_*_amd64.deb
</code></pre></div>
<p>For user <code>gitlab-runner</code> allow the command <code>/usr/bin/dpkg -i i3d-core_*_amd64.deb i3d-opencv_*_amd64.deb i3d-ceres_*_amd64.deb</code> on the machines <code>machine[1-6]</code> without asking for a password.</p>
<p>Additonally the shell runners are private runners and must be explicitly whitelisted by an admin or the owner for use on other projects. (<em>read: should we get another project which needs automatic deployment</em>)</p>
<h3 id="deployment-jobs">Deployment: Jobs</h3>
<p>Deployment jobs at the ICG work by specifying the host to which one needs to deploy as tag. In case something unstable hits a development branch, we only deploy the <code>master</code> branch. However, compilation and packaging is enabled for all branches. If needed, one could download those package via the GitLab web interface. The unfortunate side-effect of this is that the approch scales really, really bad. We have this section 6 times in own CI file - once for each machine we deploy to.</p>
<div class="highlight"><pre><span></span><code><span class="nt">deploy-machine1</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">deploy</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">sudo dpkg -i i3d-core_*_amd64.deb i3d-opencv_*_amd64.deb i3d-ceres_*_amd64.deb</span>
<span class="nt">tags</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">machine1</span>
<span class="nt">only</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">master</span>
</code></pre></div>
<h2 id="summary">Summary</h2>
<p>It is possible to build a pipeline which gets, compiles and packages dependencies, builds and packages your own C/C++ project and deploys it to multiple machines with GitLab CI. In our case, the whole process takes about <strong>8 minutes or less</strong>, depending on which machines are picked for the build process and if a new version of the Docker image has been build and must be fetched first.</p>
<p>If you had the need to distribute to more machines but immediate feedback is not that important, uploading to the <code>import</code> folder of an automated Debian repository (e.g. Reprepro) should scale really well.</p>
<p>Building for other linux platforms (e.g. Ubuntu instead of Debian) should be easily solved via Docker images, while different architectures (e.g. <code>i386</code> instead of <code>amd64</code>) would require another host or a VM. The build process could even be modified to build for Windows or macOS hosts with prepared VMs or hosts. <em>We currently don’t have any experience with either, though.</em></p>
<h3 id="update-2016-08-28">Update (2016-08-28)</h3>
<p>Since GitLab 8.11 has solved our issues with artifact expiry, we’ve now enabled automatic expiration with success and are quite satisfied with the result.</p>
<p>It is as easy as adding one section to a job.</p>
<div class="highlight"><pre><span></span><code>icg3-build:
stage: build
script:
- export I3D_CORE_VERSION="$(date +%Y-%m-%d~%H%M)"."$(git rev-parse --short HEAD)"
- dpkg -i i3d-*.deb
- mkdir icg3d-build icg3d-install
- cd icg3d-build
- cmake -DUSE_CUDA=OFF -DAPP_SFM=OFF -DWITH_CGAL=ON -DWITH_QGL_VIEWER=ON -DWITH_QT=ON -DCORE_WITH_LAS=ON ..
- cd ..
- make -j$(nproc) -C icg3d-build/ICG_3DLib
- make -C icg3d-build/ICG_3DLib install DESTDIR=../../icg3d-install
- bash .gitlab_build_files/build_icg3d_debian_pkg.sh
artifacts:
paths:
- i3d-core_*_amd64.deb
tags:
- linux,debian-jessie
<span class="gi">+ expire_in: 1 month</span>
</code></pre></div>
<hr>
<h2 id="what-went-wrong">What went wrong</h2>
<p>As I said, not everything went right from the beginning. I thought it might be interesting to add some notes on possible issues.</p>
<ul>
<li>The <code>.deb</code>s ended up empty. => The source directory was empty to begin with since <code>make install</code> had been forgotten.</li>
<li>The <code>.deb</code>s were extraordinarily large. => The wrong source directory was chosen - probably the <code>*_build</code> folder instead of <code>*_install</code>.</li>
<li>Cmake didn’t pick up the Build/Home directory and refused to run. => There mustn’t be any spaces between <code>-B</code> and the target directory.</li>
<li>Cmake refused to acknowledge options. => There mustn’t be any spaces between <code>-D</code> and the option; there must be a <code>=</code> between the option and its value.</li>
<li>Jobs were picked up by the wrong runner and failed. => Improve labeling of different private and public runners so that e.g. <code>linux</code> & <code>debian-jessie</code> are only labels of the Docker runner, not the Shell one; configure runners as private runners to not pick up unlabeled jobs.</li>
</ul>Reading recommendations (2016-07-11)2016-07-11T02:08:00+02:002016-07-18T12:37:00+02:00Alexander Skibatag:ghostlyrics.net,2016-07-11:/reading-recommendations-2016-07-11.html<p>While I’m waiting for review of another article containing information from a project done at my current employer, I wanted to share some reading recommendations for articles I came across recently.</p>
<p>I’m not yet sure if this is going to be become a regular thing, but it might …</p><p>While I’m waiting for review of another article containing information from a project done at my current employer, I wanted to share some reading recommendations for articles I came across recently.</p>
<p>I’m not yet sure if this is going to be become a regular thing, but it might - sharing links via Twitter or other platforms is something I tend to dislike more and more while other low-friction options have let me down in the past, so the blog seems the most likely home for such content.</p>
<p>Besides the link I’ll try to include the author name or nickname and how I found the interesting piece - maybe a little description to each of them where it feels appropriate.</p>
<ul>
<li>
<p><a href="https://blog.travis-ci.com/2016-06-09-start-meetings-with-personal-checkins">Start Every Meeting with a Personal Check-in</a> by Mathias Meyer (RSS, Travis CI blog)<br>
<em>I find this concept to be very smart but am reluctant to suggest such a thing for the fear of being ridiculed. Being honest I wouldn’t care too much about others’ feelings in general but being forwarned that I shouldn’t expect them to be at their best when they’re feeling low is a major selling point for me.</em></p>
</li>
<li>
<p><a href="http://saint-arthur.tumblr.com/post/146680746144/riding-immortal-on-the-seeking-road">Riding Immortal on the Seeking Road</a> by ~Saint Arthur (RSS, I’m a candle blog, Fallen London universe)<br>
<em>A chronicle of what is in my opinion Fallen London’s most fascinating piece of lore. Seeking the Name, from its inception via the hiatus to its conclusion in 2016. If you’re not into Fallen London or soaking up details in wikis about things you like, you will want to skip this one.</em></p>
</li>
<li>
<p>Answer to <a href="https://www.reddit.com/r/AskHistorians/comments/4r17fc/what_lead_to_the_ottoman_empire_decriminalizing/d4xwz1l?ref_type=copy1">What lead to the Ottoman Empire decriminalizing homosexuality in 1858? Was there a lot of opposition and controversy around this?</a> on Reddit by ~PaxOttomanica (newsletter, Reddit upvoted weekly)<br>
<em>Interesting, detailed answer that mentions a fact we currently seem to be forgetting: Sometimes, laws need to be adjusted and modernized in order to avoid criminalizing everyone for something that has become common practice.</em></p>
</li>
<li>
<p><a href="https://storify.com/thegrugq/once-upon-a-time-in-the-valley">Once Upon A Time in the Valley</a> by various Twitter users (unearthed from the depths of my Instapaper, originally almost certainly via Twitter)<br>
<em>A humorous, cynic critique from InfoSec about how silly the Silicon Valley startup culture can be perceived. Good for a laugh or two.</em></p>
</li>
<li>
<p><a href="http://postcardsfromspace.tumblr.com/post/113194431198/gamergate-is-killing-video-games">GamerGate is killing video games</a> by ~Zennistrad, ~segoli, Jay Rachel Eddin (unearthed from the depths of my Instapaper, originally via Twitter)<br>
<em>Although GG is thankfully a thing of the past, this is a very thoughtful piece on the effect of GamerGate on video game archiving and the perception of video games in academia. I think the original article I read in the past was from ~Zennistrad, but this one has additional commentary and the one from ~Zennistrad appears to offline.</em></p>
</li>
<li>
<p><a href="http://qz.com/362958/hiring-in-tech-should-prioritize-skill-not-charisma/">Hiring in tech should prioritize skill, not charisma</a> by Thomas H. Ptacek (unearthed from the depth of my Instapaper, probably via Twitter)<br>
<em>Interestingly, although I currently don’t plan of changing employers soon, I come back to the idea what I’d try to do differently when interviewing and choosing my successor. The potential scenarios are all interesting.</em></p>
</li>
<li>
<p><a href="http://blog.erratasec.com/2016/06/reverse-turing-testing-tech-support.html">Reverse Turing testing tech support</a> by Rob Graham (unearthed from the depth of my Instapaper, original via RSS, Errata Security blog)<br>
<em>A critical experience report about getting tech support from official sources and how researching yourself safes time if you already have a clue what you’re looking for. Might make you cringe and smile at the same time.</em></p>
</li>
</ul>
<p>7 is a good number. Let’s stick with that. Good night.</p>Improving our Xen Usage2016-05-31T16:57:00+02:002016-08-28T17:43:00+02:00Alexander Skibatag:ghostlyrics.net,2016-05-31:/improving-our-xen-usage.html<p>The software we use at ICG for virtualizing servers is <a href="http://www.xenproject.org">Xen</a>. That’s fine because it has not made my life unnecessarily hard yet. There are however, some things that could be done better - especially while handling things with puppet.</p>
<ul>
<li>This post was updated once (2016-08-28)</li>
</ul>
<h2 id="how-it-used-to-work">How it used to …</h2><p>The software we use at ICG for virtualizing servers is <a href="http://www.xenproject.org">Xen</a>. That’s fine because it has not made my life unnecessarily hard yet. There are however, some things that could be done better - especially while handling things with puppet.</p>
<ul>
<li>This post was updated once (2016-08-28)</li>
</ul>
<h2 id="how-it-used-to-work">How it used to work</h2>
<p>When I initially found the infrastructure for our Xen guests, the configuration files were located in a subdirectory of <code>/srv</code> that turned out to be an NFS share (mounted with <code>hard</code> because that’s the default). This was the same for all our Xen hosts apart from one which had local configurations, but symlinked to a similar folder.</p>
<p>Inside these folders were many previous configuration files of VMs that had been retired long ago which made finding the currently used files somewhat of an annoying task.</p>
<p>The main reason I chose to rework this was the NFS mount - when the host providing the NFS share wouldn’t reboot during a standard maintenance I had no configuration for any guest on all but one of our Xen hosts. That was an inconvenient situation I hoped to avoid in the future.</p>
<h2 id="how-it-works-right-now">How it works right now</h2>
<p>One of my issues with the previous solution was that it left important configuration files in a non-standard path instead of <code>/etc/…</code>. Furthermore I wanted to use version control (<a href="https://git-scm.com">Git</a>, to be precise) in order to keep the directory clean and current while also maintaining the file histories.</p>
<p>I integrated everything into our Git versioned <a href="https://puppet.com">Puppet</a> code by writing a class which installs the <code>xen-hypervisor-4.4-amd64</code> package, maintains the <code>/etc/xen/xl.conf</code> and <code>/etc/xen/xend-config.sxp</code> files as well as the directory <code>/etc/xen/domains</code> - the latter of which is a single flat directory where I keep all Xen guest configuration files.</p>
<p>The files are named according to a special syntax so that it’s possibly to see with a glance where the domains are supposed to be run. (e.g. <code>02-example_domain.cfg</code>)</p>
<p>While further improving our Xen hosts with additional monitoring, <a href="https://github.com/mvo5/unattended-upgrades">unattended upgrades</a> and optimizing the <a href="http://www.drbd.org/en/">DRBD</a> running on some of them I soon found out that this solution wasn’t great either. The flat directory prevented me from writing simple Puppet code to use Xen’s <code>/etc/xen/auto</code> directory to have certain guests automatically started (or resumed, depending on circumstances) on boot of the host.</p>
<h2 id="how-the-suggested-solution-looks-like">How the suggested solution looks like</h2>
<p>Since Puppet is not a scripting language it’s often that your <a href="http://stackoverflow.com/questions/6399922/are-there-iterators-and-loops-in-puppet">established way of thinking</a> (<em>mine being, “I know, I’ll use a ‘for’ loop”</em>) can’t solve the problem and you either have to research new ways of working around the problem or finding idiomatic ways to solve it.</p>
<p>I needed a way to make sure the right Xen configurations would end up in each host’s <code>/etc/xen/auto</code> without them trying to start configurations for other hosts. Given the naming scheme this could be as easy as the following snippet.</p>
<div class="highlight"><pre><span></span><code><span class="c"># NOTE: untested and only here for illustration purposes</span>
<span class="c"># You need to get the host number from somewhere</span>
<span class="c"># but that wouldn't be the main issue.</span>
<span class="k">exec</span>
<span class="p">{</span>
<span class="s">'link-xen-configurations'</span><span class="p">:</span>
<span class="na">refreshonly</span> <span class="o">=></span> <span class="k">true</span><span class="p">,</span>
<span class="na">path</span> <span class="o">=></span> <span class="s">'/usr/bin/find /etc/xen/domains -type f -name "NUMBER-*.cfg" | /usr/bin/xargs -I FILENAME -n1 -t ln -f -s FILENAME /xen/auto/FILENAME'</span><span class="p">,</span>
<span class="k">user</span> <span class="o">=></span> <span class="s">'root'</span><span class="p">,</span>
<span class="p">}</span>
</code></pre></div>
<p>Of course you would need to remove existing links to files first and using <code>exec</code>s is a messy business after all. Besides - something I hadn’t touched yet - there are also VM configurations that have two prefixes to signify on which hosts they can be run due to DRBD (e.g. <code>01-03-other_example.cfg</code>) syncing their contents on a block level between two hosts.</p>
<p>Given this it’s even more complex to build such a system well in a way that won’t break in spectacular fashion the first time you look away after a deploy.</p>
<p>My plan is to create host-specific folders in our Puppet code <del>and have Puppet symlink those since using the <code>$::hostname</code> variable provided by Puppet’s Facter makes this extremely easy</del>. In addition, disentangling the multiple-host configurations will be necessary - this will avoid having DRBD capable hosts starting the same VM at the same time. <del>I might combine this with changing the device specified in the Xen configurations.</del></p>
<div class="highlight"><pre><span></span><code><span class="gd">-disk = ["phy:/dev/drbd13,xvda,w"]</span>
<span class="gi">+disk = ["drbd:myresource,xvda,w"]</span>
</code></pre></div>
<blockquote>
<p>This will direct Xen to put the DRBD resource named ‘myresource’
into the Primary role, and configure it as device xvda in your
domU. ~<code>/etc/xen/scripts/block-drbd</code> (slightly changed to use whole disk instead of partition)</p>
</blockquote>
<p>The interesting thing here is that the resource will automatically become primary when the Xen domain is started - there is no need to automatically become primary on startup on a particular node with DRBD itself - this will be done on demand as soon as a Xen guest requires it.</p>
<p><em>In time - with DRBD 9 - it might even be reasonable to have all VM hosts be able to run all guests due to <a href="https://www.drbd.org/en/doc/users-guide-90/s-dm-add-node">cluster-mode</a> block syncing.</em></p>
<h2 id="update-2016-08-28">Update (2016-08-28)</h2>
<p>After some planning, some research and testing, I arrived at the following setup.</p>
<h3 id="drbd-9-auto-promotion">DRBD 9 auto promotion</h3>
<p>I previously thought that one could use the <code>drbd:resource</code> syntax to automatically mount the storage for our VMs. This does not work due to it being incompatible with HVM guests. The <code>drbd</code> syntax is only enabled for PV guests. This seems to be due to a timing issue and is <a href="http://old-list-archives.xenproject.org/archives/html/xen-devel/2010-04/msg01608.html">a known complication</a>. The bad news is that previously this has been solved by patching a <code>sleep(5)</code> in which I really didn’t want to do.</p>
<p>The great news however is that this is obsolete since <a href="https://www.drbd.org/en/doc/users-guide-90/s-automatic-promotion">DRBD 9 supports auto-promotion</a>. This means that when there is currently no <code>primary</code> for a resource in a cluster and one node wants to have write-access then that node is promoted to <code>primary</code>. This works great and requires no further configuration.</p>
<p>With a simple <code>xl create my_vm.cfg</code> the node becomes primary and the VM is booted.</p>
<h3 id="folders-per-host">Folders per host</h3>
<p>There was an easier option than symlinking available. Instead of relying on symlinks all the time, I created folders matching the hostnames of all Xen hosts. Then I have Puppet modify the <code>/etc/default/xendomains</code> script to automatically start the configurations from said directory by using a template.</p>
<div class="highlight"><pre><span></span><code> <span class="k">file</span>
<span class="p">{</span>
<span class="s">'/etc/default/xendomains'</span><span class="p">:</span>
<span class="na">ensure</span> <span class="o">=></span> <span class="k">file</span><span class="p">,</span>
<span class="na">owner</span> <span class="o">=></span> <span class="s">'root'</span><span class="p">,</span>
<span class="na">group</span> <span class="o">=></span> <span class="s">'root'</span><span class="p">,</span>
<span class="na">mode</span> <span class="o">=></span> <span class="s">'0644'</span><span class="p">,</span>
<span class="na">content</span> <span class="o">=></span> <span class="k">template</span><span class="p">(</span><span class="s">'automation/xen_configurations/xendomains.erb'</span><span class="p">),</span>
<span class="na">require</span> <span class="o">=></span> <span class="k">File</span><span class="p">[</span><span class="s">'/etc/xen/domains'</span><span class="p">],</span>
<span class="p">}</span>
</code></pre></div>
<p>The only line deviating from the previous version of the <code>xendomains</code> file is the one with the folder according to the hostname.</p>
<div class="highlight"><pre><span></span><code><span class="x">XENDOMAINS_AUTO=/etc/xen/domains/</span><span class="cp"><%=</span> <span class="vi">@hostname</span> <span class="cp">%></span><span class="x"></span>
</code></pre></div>
<p>This ensures me that only the correct VMs will be booted on startup of a machine. Furthermore I can also modify the place where a VM will be booted on next start from our GitLab by modifying the file path - which makes working with others much easier. <em>You want to move where the VM runs? Just move the config over to the other folder, shut the machine down, boot it on the other host.</em></p>
<p>While creating the hostname folders, one should not forget to make a <code>touch .gitkeep</code> inside each of them, to have them in your repository and distributed to the machines even if they are ostensibly empty.</p>On changing hard disks2016-01-22T17:01:00+01:002016-05-31T11:46:00+02:00Alexander Skibatag:ghostlyrics.net,2016-01-22:/on-changing-hard-disks.html<p>Now, I might have mentioned in the past that despite me working as a system administrator, I dislike working with actual hardware and prefer to touch machines as soon as they are SSH-ready or at most as soon as an operating system can be installed.</p>
<ul>
<li>This post has been updated …</li></ul><p>Now, I might have mentioned in the past that despite me working as a system administrator, I dislike working with actual hardware and prefer to touch machines as soon as they are SSH-ready or at most as soon as an operating system can be installed.</p>
<ul>
<li>This post has been updated once.</li>
</ul>
<p>Well, let’s assume for a moment that a disk needs changing and neither the senior admin in my current job nor my predecessor are available. Let’s assume that this has happened twice already and led to rather amusing stories; both times. </p>
<h2 id="first-times-always-fun">first time’s always fun</h2>
<p>The first time I was to change a disk I had help from my colleague <strong>Daniel Brajko</strong> who accompanied me to the server room, but let’s start at the beginning.</p>
<p>I noticed that something was up and a disk had an error when I wrote <a href="https://github.com/ghostlyrics/collection">my script to check the output</a> of the RAID controllers’ status information to get notified automatically when something was wrong. I decided to tackle this task since it was one important piece of work that my senior admin had assigned me during his absence.</p>
<p>After checking the serial and the disk size of the faulty drive when headed to the storage space and picked several disks since we were not sure which one was to go into exactly that server. Actually, at that time we were also not sure because some of the disks were not labelled with their disk size (<em>looking at you, Seagate</em>). With the disks and more equipment in a backpack, we ventured to the server room which is conveniently located within walking distance of our office.</p>
<p>We only came as far as the server room door, though. Neither my employee card nor the one of my colleague was authorized to enter, even though at least he’s been in this job for over a year. <em>Great.</em> Alright, the helpful thing was that authorization had not yet been transferred from my predecessor to me yet and he still worked at our institute in a different position. He knew us and lent us the card in order to change disks as he clearly recognized the need for such maintenance. <em>I had a bad feeling the whole time that someone would “catch” us and we’d have to explain why we were using this card in an extremely awkward situation.</em></p>
<p>With this card - impersonating our former colleague - we ventured into the server room, only to find that the machine in question was in our secondary server room - the one who is multiple blocks away. <em>Alright, this wasn’t going to be easy.</em></p>
<p>So we packed everything back up and walked to the secondary building. Daniel had only ever been there once, I had never been there. The building has two basement levels which are not particularly well lit nor particularly easy to find your way around in. I wouldn’t necessarily call it a maze but it’s certainly not far from that. After 15 minutes of running around without any clue we surrendered and went up to the ground floor to consult one of the university’s information terminals to find our own server room. <em>A glorious day, let me tell you.</em></p>
<p>After finding our server room and granting ourselves access with the borrowed card we entered the room, looked for our server cabinet <em>(of course it was the only unlabelled one)</em> and well… uhm. That was the point were we Daniel pointed out that, yes, we <em>do</em> need the keychain that I told him to leave behind because, “I already have everything we need”.</p>
<p>And back we went. <em>*sigh*</em>. After fetching the keychain we also borrowed my predecessor’s bike as well as another one and went back, back into the basement, changed the drive which was relatively painless after realizing we only had one disk with the correct storage capacity with us and returned.</p>
<p>And that’s how it took two sysadmins a whole afternoon to change a damaged disk. After that episode we phoned the person in charge and got ourselves assigned the server room access permissions. <em>but…</em></p>
<h2 id="second-time-youre-quickly-done">second time you’re quickly done</h2>
<p>Today this little e-mail arrived. That’s the second time it did and I always like when my efforts pay out. :)</p>
<div class="highlight"><pre><span></span><code>RAID status problematic.
Unit UnitType Status %RCmpl %V/I/M Stripe Size(GB) Cache AVrfy
------------------------------------------------------------------------------
u0 RAID-6 DEGRADED - - 256K 5587.88 RiW ON
Port Status Unit Size Blocks Serial
---------------------------------------------------------------
p0 OK u0 931.51 GB 1953525168 [REDACTED]
p1 OK u0 931.51 GB 1953525168 [REDACTED]
p2 DEVICE-ERROR u0 931.51 GB 1953525168 [REDACTED]
p3 OK u0 931.51 GB 1953525168 [REDACTED]
p4 OK u0 931.51 GB 1953525168 [REDACTED]
p5 OK u0 931.51 GB 1953525168 [REDACTED]
p6 OK u0 931.51 GB 1953525168 [REDACTED]
p7 OK u0 931.51 GB 1953525168 [REDACTED]
</code></pre></div>
<p>Okay. So. Senior admin is absent again, disk fails again. This time Daniel is also not there. “Fine,” I tell myself, it will be painless this time. I was so, <em>so wrong</em>.</p>
<p>After making a quick joke with the researchers that maybe they should go home early because if I fail when replacing the disk, we won’t have any e-mail service I grabbed the keys and a replacement disk - this time I couldn’t find one with the right storage capacity again, but I got smarter and made an educated guess based on 5 of 8 characters of the serial number matching. I headed to the next building, ran into the admin from the other institute and joked if they also had “those mean things lacking a storage capacity description”. He helpfully stated that they use the same model and they were 1 TB models which gave me some relief. After opening our server racks and checking all devices in there I came to a terrible realization: Of course I was in the wrong building. <em>Again.</em> (This time I made a list of all our devices in this building for our internal <code>docs</code>.)</p>
<p>Alright, back up from the basement, notified the office that the keychain has not gone missing and I’m taking it to go to the other building. I walked through the cold winter air to the other building, entered the basement and found the server room on the first try. <em>This is a thing that tends to happen. If I am ever required to find my way to a place by myself I will keep finding the way there in the future.</em> Anyway, so I hold my card to the scanner and… nothing happens. I cursed, waited a bit and tried again. Again, nothing. There’s an emergency contact on the door and after returning to the ground floor in order to have cellphone reception I called that, we had a longer conversation and obviously I didn’t receive all the permissions I should have gotten when the issue arose the first time. <em>Shall we say I was a little annoyed that not both permissions had been transferred from my predecessor directly to me?</em></p>
<p><strong>Update</strong>: It turns out I am again to blame for something, as I <em>did</em> have the permissions. However, I didn’t know that the card activation via sensor only works for the building you last <em>checked in</em> at the sensor. So, believing my card is supposed to work after having just been at one sensor I obviously didn’t visit the sensor at the other building.</p>
<p>After managing emergency access I scoured the room for our server rack. I panicked a little when there was nothing where I remembered seeing it last time. I mean, yes, it had been a while but my memory for locations is pretty accurate and I don’t think anyone would’ve moved the machines without the admins noticing. Good thing no one else was in the room since I must’ve looked like a burglar using my iPhone’s flashlight to search the empty server cabinet where our machines were supposed to be. Then I noticed that there were <em>indeed</em> machines. It was just that both were in real slim chassis and they were located in the topmost and bottommost slots. In addition one was turned off and so I missed both when looking less carefully. Oh, yeah. Our stuff was in the <em>only unlabelled rack</em>, because of course it <em>still</em> was. <em>I really hope the people in charge don’t have microphones there since I might’ve been swearing quite a lot.</em></p>
<p>The rest was easy work. Change the disk, make sure the RAID recognizes the new drive and, pack everything up and go home.</p>
<p><em>I’m morbidly curious what surprises the next drive change will offer me.</em></p>
<p><del>PS: Yes, labelling our rack is on top of my TODOs.</del></p>Unattended-Upgrades patch for Remove-unused-dependencies backported to Trusty, Precise2016-01-06T19:36:00+01:002016-05-31T11:46:00+02:00Alexander Skibatag:ghostlyrics.net,2016-01-06:/unattended-upgrades-patch-for-remove-unused-dependencies-backported-to-trusty-precise.html<p>As of today my <a href="http://ghostlyrics.net/preparing-the-virtual-reality-course-at-icg.html">contribution to unattended-upgrades</a> <a href="https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1267059">has been backported</a> into Ubuntu <a href="https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1267059/comments/48">Trusty Tahr</a> and Ubuntu <a href="https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1267059/comments/55">Precise Pangolin</a>, which are both LTS version currently in use. I’m probably more proud of myself than I should be but it was a great feeling to be of help to a global …</p><p>As of today my <a href="http://ghostlyrics.net/preparing-the-virtual-reality-course-at-icg.html">contribution to unattended-upgrades</a> <a href="https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1267059">has been backported</a> into Ubuntu <a href="https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1267059/comments/48">Trusty Tahr</a> and Ubuntu <a href="https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1267059/comments/55">Precise Pangolin</a>, which are both LTS version currently in use. I’m probably more proud of myself than I should be but it was a great feeling to be of help to a global community and prevent further issues with automatic updates making systems unusable.</p>
<p>I will be removing the manually patched packages at the ICG soon and look forward to not maintaining a fork of the software for internal use as that tended to eat up valuable time from other projects.</p>Media Recap 2015 - II2015-12-02T01:07:00+01:002015-12-02T01:07:00+01:00Alexander Skibatag:ghostlyrics.net,2015-12-02:/media-recap-2015-ii.html<p>After watching TotalBiscuit’s <a href="https://www.youtube.com/watch?v=4qS2gUhy2t8">video</a> for <a href="http://store.steampowered.com/app/319740/">There Came an Echo</a> I wasn’t really into playing the game, but when the soundtrack went up at <a href="http://music.biggiantcircles.com">Big Giant Circles</a> I couldn’t pass it up. Bought it some time ago and still love it, especially “Ignite Defense” and “LAX” (those are …</p><p>After watching TotalBiscuit’s <a href="https://www.youtube.com/watch?v=4qS2gUhy2t8">video</a> for <a href="http://store.steampowered.com/app/319740/">There Came an Echo</a> I wasn’t really into playing the game, but when the soundtrack went up at <a href="http://music.biggiantcircles.com">Big Giant Circles</a> I couldn’t pass it up. Bought it some time ago and still love it, especially “Ignite Defense” and “LAX” (those are great Audiosurf tracks, BTW).</p>
<p>You should really <a href="http://music.biggiantcircles.com/album/there-came-an-echo">listen to the soundtrack</a>.</p>
<h2 id="video-games">Video Games</h2>
<ul>
<li><a href="http://store.steampowered.com/app/235800/">Audiosurf 2</a> (Steam, formerly Early Access)</li>
<li><a href="http://store.steampowered.com/app/214340/">Deponia</a> (Steam) - Hard to like the game given that none of its characters is written in a likable way. It does contain some rememorable scenes though. “Rufus has stolen the screws from the children’s merry-go-round.”</li>
<li><a href="http://dragonage.bioware.com/da2/">Dragon Age 2</a> (Xbox 360) - Playing again with all the DLC to show the girlfriend how constrained the team was making this, as well as how great the dialogue was.</li>
<li><a href="http://store.steampowered.com/app/317820/">Guild of Dungeoneering</a> (Steam) - Yes, you can actually <a href="https://youtu.be/DLoiZeYFhMs">sell games based on their trailer soundtrack</a>.</li>
<li><a href="https://store.xbox.com/en-US/Xbox-One/Games/Halo-The-Master-Chief-Collection/f33009f4-14ff-4821-94e3-c3573c868c2e">Halo 1</a> (Xbox One, Master Chief Collection) - Bought this one together with my Xbox One in order to relive the old times. Have fond memories of ploughing through the actual Halo 1 with Martin.</li>
<li><a href="https://store.xbox.com/en-US/Xbox-One/Games/Halo-The-Master-Chief-Collection/f33009f4-14ff-4821-94e3-c3573c868c2e">Halo Spartan Ops</a> (Xbox One, Master Chief Collection) - Unless I got something wrong this seems to be the multiplayer replacement for Firefight. I loved ODST’s Firefight and am deeply disappointed by this. I used Firefight as a kind of training ground for the campaign, but the Spartan Op I played solo was boring.</li>
<li><a href="http://store.steampowered.com/app/327670/">Ironcast</a> (Steam) - I couldn’t resist buying a new “match 3” game, especially one with elements of a roguelike. It was marked down during the Steam Exploration sale. Like this one quite a lot. I wish I had found the ‘skip’ button in dialogues earlier though. I accidentally clicked away quite some choices.</li>
<li><a href="http://store.steampowered.com/app/368230/">Kingdom</a> (Steam) - Beautiful indie title which is deeper than one would expect at first sight.</li>
<li><a href="http://kingdomhearts.wikia.com/wiki/Kingdom_Hearts_-HD_1.5_ReMIX-#Kingdom_Hearts_Re:Chain_of_Memories" title="Link goes to Kingdom Hearts wiki. Sony doesn't have a store page for several Kingdom Hearts titles.">Kingdom Hearts Re:Chain of Memories HD</a> (Playstation 3) - Last time I played this game was a pirated version of the Game Boy Advance edition some years ago. Still, the later boss fights were as tough as I remembered them and I tended to switch off the PS3 due to rising anger at least one per boss fight in the mid-section.</li>
<li><a href="http://www.lifeisstrange.com">Life is Strange</a> (Xbox One) - While I am not as heavily into Life is Strange as my girlfriend, I can acknowledge it for the interesting and original game that it is. Its contemporary theme struck a nerve for the both of us.</li>
<li><a href="http://runefactory4.com">Rune Factory 4</a> (Nintendo 3DS)</li>
<li><a href="http://store.steampowered.com/app/216210/">Secret Files 3</a> (Steam) - Disappointing. Feels incomplete, almost like sentence.</li>
<li><a href="http://store.steampowered.com/app/211820/">Starbound</a> (Steam, Early Access)</li>
<li><a href="http://store.steampowered.com/app/243040/">Startopia</a> (Steam) - Felt nostalgic. Initially played this title years ago when I borrowed it from Lukas.</li>
<li><a href="http://store.steampowered.com/app/105600/">Terraria</a> (Steam) - Terraria has arrived on the Mac. I don’t need to say more.</li>
<li><a href="http://thewitcher.com/witcher3">The Witcher 3</a> (Xbox One) - Holy… I adore the Witcher books and absolutely, wholeheartedly recommend The Witcher 3 to anyone on the look for a gritty, mature and sarcastic fantasy adventure RPG. I played this with the girlfriend on a completionist run. The game and its awesome first expansion <em>Hearts of Stone</em> kept us busy <strong>from June to November</strong>.</li>
</ul>
<h2 id="books">Books</h2>
<ul>
<li>Spider’s Bite - <a href="http://www.jenniferestep.com">Jennifer Estep</a></li>
<li>Tangled Threads - <a href="http://www.jenniferestep.com">Jennifer Estep</a></li>
<li>Venom - <a href="http://www.jenniferestep.com">Jennifer Estep</a></li>
<li>Web of Lies - <a href="http://www.jenniferestep.com">Jennifer Estep</a></li>
<li>Zeit des Sturms, Die - <a href="https://www.goodreads.com/author/show/38569.Andrzej_Sapkowski">Andrzej Sapkowski</a></li>
</ul>
<p>It’s a <em>Witcher</em> book aside from the main five books which was an entertaining read. Then there’s Jennifer Estep’s series about an assassin which had the usual fault of her books: She is explaining everything in every book in minuscule detail again even though many people will either still remember or read the books a binge.</p>
<h3 id="books-by-richard-schwartz">Books by Richard Schwartz</h3>
<p>I bought a stack of books from the friend of a friend who wanted to clear house. Those turned out to be very entertaining fantasy novels by <a href="https://de.wikipedia.org/wiki/Richard_Schwartz" title="German wikipedia: Richard Schwartz">Richard Schwartz</a>. I haven’t read the single titles in this universe yet, but due to traveling I spent some iTunes credits on the later books in order to avoid packing more. I even turned on data roaming and bought one book in the train in Germany - that should give you a good impression how much I enjoyed the series so far.</p>
<ul>
<li>Das erste Horn</li>
<li>Die zweite Legion</li>
<li>Das Auge der Wüste</li>
<li>Der Herr der Puppen</li>
<li>Die Feuerinseln</li>
<li>Der Kronrat</li>
<li>Die Rose von Illian</li>
<li>Die weiße Flamme</li>
<li>Das blutige Land</li>
<li>Die Festung der Titanen</li>
<li>Die Macht der Alten</li>
</ul>
<h2 id="movies">Movies</h2>
<p>I’ve suggested watching the Fast and the Furious movies since I like them and in turn I watched the Harry Potter ones since I didn’t know them. Due to conflicts of time and interest we haven’t seen the last two Potters yet.</p>
<p>I recommend Inside Out. I can’t remember when I’ve had such a nice time in cinema. It’s easily my favorite movie of the year. Yeah, don’t go and watch Minions - it’s disappointing and weak.</p>
<ul>
<li>Fast and the Furious, The</li>
<li>Fast and the Furious, The: Tokyo Drift</li>
<li>Fracture (Netflix, DE: Das perfekte Verbrechen)</li>
<li>Harry Potter and the Philosopher’s Stone</li>
<li>Harry Potter and the Chamber of Secrets</li>
<li>Harry Potter and the Prisoner of Azkaban</li>
<li>Harry Potter and the Goblet of Fire</li>
<li>Harry Potter and the Order of the Phoenix</li>
<li>Harry Potter and the Half-Blood Prince</li>
<li>Inside Out (cinema, DE: Alles steht Kopf)</li>
<li>Jumper (Netflix)</li>
<li>Minions (cinema)</li>
<li>Transporter, The (Netflix)</li>
<li>V for Vendetta (Netflix)</li>
<li>xXx (Netflix)</li>
</ul>
<h3 id="videos-on-netflix">Videos on Netflix</h3>
<ul>
<li><a href="http://www.netflix.com/title/80007945">Chef’s Table</a> season 1, episode 1</li>
<li><a href="http://www.cbs.com/shows/elementary/about/">Elementary</a> season 2, complete</li>
<li><a href="http://www.bbc.co.uk/programmes/articles/3FvspTyB0YHhtN7MRns2Fm/about-sherlock">Sherlock</a> season 1, episode 3</li>
<li><a href="http://www.nbc.com/grimm/about">Grimm</a> season 3, episodes 1-8</li>
</ul>
<p>The Netflix series consumption has been more or less the same. Some Grimm, some Sherlock, a lot of Elementary. I have also checked out a documentary series about famous chefs which proved to be interesting.</p>
<h2 id="presentations">Presentations</h2>
<ul>
<li>Dan Tentler (<a href="https://twitter.com/viss">@viss</a>): <a href="https://www.youtube.com/watch?v=WTKpmfoheNw">How not to Infosec</a> - This presentation is the one I recommend for your leisure viewing. It’s helpful though it teaches basic things and viss has made it very amusing too.</li>
<li>Mikko Hyppönen (<a href="https://twitter.com/mikko">@mikko</a>): <a href="https://vimeo.com/143161609">Losing the Game</a></li>
<li>Peiter Zatko (<a href="https://twitter.com/dotmudge">@dotmudge</a>): <a href="https://www.youtube.com/watch?v=h9wXq6oRBnI">Unexpected Stories - From a Hacker Who Made It Inside the Government</a> - Oh dear. The story with the gold ATM is just pure comedy.</li>
<li>Laurent Ghigonis and Alexandre De Oliveira: <a href="https://koeln.media.ccc.de/v/31c3_-_6531_-_en_-_saal_6_-_201412272300_-_ss7map_mapping_vulnerability_of_the_international_mobile_roaming_infrastructure_-_laurent_ghigonis_-_alexandre_de_oliveira">SS7map : mapping vulnerability of the international mobile roaming infrastructure</a> - Legacy and undocumented crap wherever you look.</li>
<li>hannes and David Kaloper: <a href="https://media.ccc.de/v/31c3_-_6443_-_en_-_saal_2_-_201412271245_-_trustworthy_secure_modular_operating_system_engineering_-_hannes_-_david_kaloper">Trustworthy secure modular operating system engineering</a></li>
<li>Wil Shepley (<a href="https://twitter.com/wilshepley">@wilshepley</a>): <a href="https://realm.io/news/altconf-wil-shipley-git-document-format/">Git as a Document Format</a></li>
<li>Olivier Deriviere (<a href="https://twitter.com/oderiviere">@oderiviere</a>) - <a href="https://www.youtube.com/watch?v=kWyf90LXLAg">How did I do: Remember Me - The Fight</a></li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<ul>
<li><a href="http://www.relay.fm/virtual/41">Virtual E41</a>: E3 2015: Microsoft and Sony</li>
</ul>Using Continuous Integration for puppet2015-11-01T03:30:00+01:002016-05-31T11:46:00+02:00Alexander Skibatag:ghostlyrics.net,2015-11-01:/using-continuous-integration-for-puppet.html<p>I’ll admit the bad stuff right away. I’ve been checking in bad code, I’ve had wrong configuration files on our services and it’s happened quite often that files referenced in <code>.pp</code> manifests have had a different name than the one specified or were not moved to …</p><p>I’ll admit the bad stuff right away. I’ve been checking in bad code, I’ve had wrong configuration files on our services and it’s happened quite often that files referenced in <code>.pp</code> manifests have had a different name than the one specified or were not moved to the correct directory during refactoring. I’ve made mistakes that in other languages would’ve been considered “breaking the build”. </p>
<p>Given that most of the time I’m both developing and deploying our <code>puppet</code> code I’ve found many of my mistakes the hard way. Still I’ve wished for a kind of safety net for some time. <code>Gitlab</code> 8.0 finally gave me the chance by integration easy to use CI.</p>
<ul>
<li>This post was updated once (2016-08-28)</li>
</ul>
<h2 id="getting-started-with-gitlab-ci">Getting started with Gitlab CI</h2>
<ol>
<li>Set up a runner. We use a private runner on a separate machine for our administrative configuration (<code>puppet</code>, etc.) to have a barrier from the regular CI our researchers are provided with (<em>or, as of the time of this writing, will be provided with soonish</em>). I haven’t had any problems with our <code>docker</code> runners yet.</li>
<li>Enable Continuous Integration for your project in the <code>gitlab</code> webinterface.</li>
<li>Add a <code>gitlab-ci.yml</code> file to the root of your repository to give instructions to the CI.</li>
</ol>
<h2 id="test-setup">Test setup</h2>
<p>I’ve improved the test setup quite a bit before writing this and aim to improve it further. I’ve also considered making the tests completely public on my <a href="https://github.com/GhostLyrics/">github account</a>, parameterize some scripts, handle configuration specific data in <code>gitlab-ci.yml</code> and using the github repository as a <code>git submodule</code>.</p>
<h3 id="before-script">before script</h3>
<p>In the <code>before_script</code> section which is run in every instance immediately before a job is run, I set some environment variables and run <code>apt</code>‘s update procedure once to ensure only the latest versions of packages are installed when packages are requested.</p>
<div class="highlight"><pre><span></span><code><span class="nt">before_script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">export DEBIAN_FRONTEND=noninteractive</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">export NOKOGIRI_USE_SYSTEM_LIBRARIES=true</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">apt-get -qq update</span>
</code></pre></div>
<ul>
<li><code>DEBIAN_FRONTEND</code> is set to suppress configuration prompts and just tell <code>dpkg</code> to use safe defaults.</li>
<li><code>NOKOGIRI_USE_SYSTEM_LIBRARIES</code> greatly reduces build time for <code>ruby</code>‘s native extensions by not building its own libraries which are already on the system.</li>
</ul>
<h3 id="optimizations">Optimizations</h3>
<ul>
<li>Whenever <code>apt-get install</code> is called, I supply <code>-qq</code> and <code>-o=Dpkg::Use-Pty=0</code> to reduce the amount of text output generated.</li>
<li>Whenever <code>gem install</code> is called, I supply <code>--no-rdoc</code> and <code>--no-ri</code> to improve installation speed.</li>
</ul>
<h2 id="puppet-tests">Puppet tests</h2>
<p>All tests which I consider to belong to puppet itself run in the <code>build</code> stage. As is usual with Gitlab CI, only if all tests in this stage pass, the tests in the next stage will be run. Given that sanity checking application configurations which puppet won’t be able to apply doesn’t make a lot of sense, I’ve moved those checks into another stage.</p>
<p>I employ two of the three default stages for <code>gitlab-ci</code>: <code>build</code> and <code>test</code>. I haven’t had the time yet to build everything for automatic deployment after all tests pass using the <code>deploy</code> stage.</p>
<div class="highlight"><pre><span></span><code><span class="nt">puppet</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">build</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">apt-get -qq -o=Dpkg::Use-Pty=0 install puppet ruby-dev</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">gem install --no-rdoc --no-ri rails-erb-lint puppet-lint</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make libraries</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make links</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/puppet-validate.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/puppet-lint.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/erb-syntax.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/puppet-missing-files.py</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/puppet-apply-noop.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/documentation.sh</span>
</code></pre></div>
<p>While <code>puppet-lint</code> exists as <code>.deb</code> file, this installs it as a <code>gem</code> in order to have Ubuntu docker containers running the latest <code>puppet-lint</code>.</p>
<p>I use a <code>Makefile</code> in order to install the dependencies of our puppet code quickly as well as to create symlinks to simplify the test process instead of copying files around the test VM.</p>
<div class="highlight"><pre><span></span><code><span class="nf">libraries</span><span class="o">:</span>
@echo <span class="s2">"Info: Installing required puppet modules from forge.puppetlabs.com."</span>
puppet module install puppetlabs/stdlib
puppet module install puppetlabs/ntp
puppet module install puppetlabs/apt --version <span class="m">1</span>.8.0
puppet module install puppetlabs/vcsrepo
<span class="nf">links</span><span class="o">:</span>
@echo <span class="s2">"Info: Symlinking provided modules for CI."</span>
ln -s <span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>/modules/core /etc/puppet/modules/core
ln -s <span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>/modules/automation /etc/puppet/modules/automation
ln -s <span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>/modules/packages /etc/puppet/modules/packages
ln -s <span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>/modules/services /etc/puppet/modules/services
ln -s <span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>/modules/users /etc/puppet/modules/users
ln -s <span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>/hiera.yaml /etc/puppet/hiera.yaml
</code></pre></div>
<p>As you can see, I haven’t had the chance to migrate to <code>puppetlabs/apt</code> 2.x yet.</p>
<h3 id="puppet-validate">puppet-validate</h3>
<p>I use the <code>puppet validate</code> command on every <code>.pp</code> file I come across in order to make sure it is parseable. It is my first line of defense given that files which are not even able to make it pass the parser are certainly not going to do what I want in production.</p>
<div class="highlight"><pre><span></span><code><span class="ch">#!/bin/bash</span>
<span class="nb">set</span> -euo pipefail
find . -type f -name <span class="s2">"*.pp"</span> <span class="p">|</span> xargs puppet parser validate --debug
</code></pre></div>
<h3 id="puppet-lint">puppet-lint</h3>
<p>While <code>puppet-lint</code> is by no means perfect, I like to make it a habit to enable linters for most languages I work with in order for others to have an easier time reading my code should the need arise. I’m not above asking for help in a difficult situation and having readable output available means getting help for your problems will be much easier.</p>
<div class="highlight"><pre><span></span><code><span class="ch">#!/bin/bash</span>
<span class="nb">set</span> -euo pipefail
<span class="c1"># allow lines longer then 80 characters</span>
<span class="c1"># code should be clean of warnings</span>
puppet-lint . <span class="se">\</span>
--no-80chars-check <span class="se">\</span>
--fail-on-warnings <span class="se">\</span>
</code></pre></div>
<p>As you can see I like to consider everything apart from the 80 characters per line check to be a deadly sin. Well, I’m exaggerating but as I said, I like to have things clean when working.</p>
<h3 id="erb-syntax">erb-syntax</h3>
<p><code>ERB</code> is a Ruby templating language which is used by puppet. I have only ventured into using templates two or three times, but that has been enough to make me wish for extra checking there too. I initially wanted to use <code>rails-erb-check</code> but after much cursing <code>rails-erb-lint</code> turned out to be easier to use. Helpfully it will just scan the whole directory recursively.</p>
<div class="highlight"><pre><span></span><code><span class="ch">#!/bin/bash</span>
<span class="nb">set</span> -euo pipefail
rails-erb-lint check
</code></pre></div>
<h3 id="puppet-missing-files">puppet-missing-files</h3>
<p>While I’ve used <code>puppet-lint</code> locally previously it caught fewer errors than I would’ve liked due to it not checking whether files I sourced for files or templates existed. I was negatively surprised upon realizing that <code>puppet validate</code> didn’t do that either, so I slapped together my own checker for that in Python.</p>
<p>Basically the script first builds a set of all <code>.pp</code> files and then uses <code>grep</code> to check for lines specifying either <code>puppet:</code> or <code>template(</code> which are telltale signs for files or templates respectively. Then each entry of said entry is verified by checking for its existence as either a path or a symlink.</p>
<div class="highlight"><pre><span></span><code><span class="ch">#!/usr/bin/env python2</span>
<span class="sd">"""Test puppet sourced files and templates for existence."""</span>
<span class="kn">import</span> <span class="nn">os.path</span>
<span class="kn">import</span> <span class="nn">subprocess</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="sd">"""The main flow."""</span>
<span class="n">manifests</span> <span class="o">=</span> <span class="n">get_manifests</span><span class="p">()</span>
<span class="n">paths</span> <span class="o">=</span> <span class="n">get_paths</span><span class="p">(</span><span class="n">manifests</span><span class="p">)</span>
<span class="n">check_paths</span><span class="p">(</span><span class="n">paths</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">check_paths</span><span class="p">(</span><span class="n">paths</span><span class="p">):</span>
<span class="sd">"""Check the set of paths for existence (or symlinked existence)."""</span>
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">islink</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s2">"</span><span class="si">{}</span><span class="s2"> does not exist."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">get_manifests</span><span class="p">():</span>
<span class="sd">"""Find all .pp files in the current working directory and subfolders."""</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">manifests</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s2">"find"</span><span class="p">,</span> <span class="s2">"."</span><span class="p">,</span> <span class="s2">"-type"</span><span class="p">,</span> <span class="s2">"f"</span><span class="p">,</span>
<span class="s2">"-name"</span><span class="p">,</span> <span class="s2">"*.pp"</span><span class="p">])</span>
<span class="n">manifests</span> <span class="o">=</span> <span class="n">manifests</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="k">return</span> <span class="n">manifests</span>
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">,</span> <span class="n">error</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_paths</span><span class="p">(</span><span class="n">manifests</span><span class="p">):</span>
<span class="sd">"""Extract and construct paths to check."""</span>
<span class="n">paths</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">manifests</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">results</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s2">"grep"</span><span class="p">,</span> <span class="s2">"puppet:"</span><span class="p">,</span> <span class="n">line</span><span class="p">])</span>
<span class="n">hits</span> <span class="o">=</span> <span class="n">results</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="k">for</span> <span class="n">hit</span> <span class="ow">in</span> <span class="n">hits</span><span class="p">:</span>
<span class="n">working_copy</span> <span class="o">=</span> <span class="n">hit</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">working_copy</span> <span class="o">=</span> <span class="n">working_copy</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"'"</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">working_copy</span> <span class="o">=</span> <span class="n">working_copy</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"puppet://"</span><span class="p">,</span> <span class="s2">"."</span><span class="p">)</span>
<span class="n">segments</span> <span class="o">=</span> <span class="n">working_copy</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">segments</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">"files"</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="s2">"/"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">segments</span><span class="p">)</span>
<span class="n">paths</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="c1"># we don't care if grep does not find any matches in a file</span>
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">results</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s2">"grep"</span><span class="p">,</span> <span class="s2">"template("</span><span class="p">,</span> <span class="n">line</span><span class="p">])</span>
<span class="n">hits</span> <span class="o">=</span> <span class="n">results</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="k">for</span> <span class="n">hit</span> <span class="ow">in</span> <span class="n">hits</span><span class="p">:</span>
<span class="n">working_copy</span> <span class="o">=</span> <span class="n">hit</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">working_copy</span> <span class="o">=</span> <span class="n">working_copy</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"'"</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">segments</span> <span class="o">=</span> <span class="n">working_copy</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">segments</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="s2">"."</span><span class="p">)</span>
<span class="n">segments</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s2">"modules"</span><span class="p">)</span>
<span class="n">segments</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">"templates"</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="s2">"/"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">segments</span><span class="p">)</span>
<span class="n">paths</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="c1"># we don't care if grep does not find any matches in a file</span>
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="n">paths</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
<span class="n">main</span><span class="p">()</span>
</code></pre></div>
<h3 id="puppet-apply-noop">puppet-apply-noop</h3>
<p>In order to perform tests on the most common tests in puppet world, I wanted to test every <code>.pp</code> file in a module’s <code>tests</code> directory with <code>puppet apply --noop</code>, which is a kind of dry run. This outputs information what would be done in case of a real run. <strong>Unfortunately this information is highly misleading.</strong></p>
<div class="highlight"><pre><span></span><code><span class="ch">#!/bin/bash</span>
<span class="nb">set</span> -euo pipefail
<span class="nv">content</span><span class="o">=(</span>core automation packages services users<span class="o">)</span>
<span class="k">for</span> item <span class="k">in</span> <span class="si">${</span><span class="nv">content</span><span class="p">[*]</span><span class="si">}</span>
<span class="k">do</span>
<span class="nb">printf</span> <span class="s2">"Info: Running tests for module </span><span class="nv">$item</span><span class="s2">.\n"</span>
find modules -type f -path <span class="s2">"modules/</span><span class="nv">$item</span><span class="s2">/tests/*.pp"</span> -execdir puppet apply --modulepath<span class="o">=</span>/etc/puppet/modules --noop <span class="o">{}</span> <span class="se">\;</span>
<span class="k">done</span>
</code></pre></div>
<p>When run in this mode, <code>puppet</code> does not seem to perform any sanity checks at all. For example, it can be instructed to install a package with an arbitrary name regardless of the package’s existence in the specified (or default) package manager.</p>
<p>Upon deciding this mode was not providing any value to my testing process I took a stab at implementing “real” tests instead by running <code>puppet apply</code> instead. The value added by this procedure is mediocre at best, given that <strong>puppet returns 0 even if it fails to apply all given instructions</strong>. Your CI will not realize that there have been <code>puppet</code> failures at all and happily report your build as passing.</p>
<p><code>puppet</code> provides the <code>--detailed-exitcodes</code> flag for checking failure to apply changes. Let me quote the manual for you:</p>
<blockquote>
<p>Provide transaction information via exit codes. If this is
enabled, an exit code of ´2´ means there were changes, an exit
code of ´4´ means there were failures during the transaction,
and an exit code of ´6´ means there were both changes and fail‐
ures.</p>
</blockquote>
<p>I’m sure I don’t need to point out that this mode is not suitable for testing either given that there will <em>always</em> be changes in a testing VM.</p>
<p>Now, one could solve this by writing a small wrapper around the <code>puppet apply --detailed-exitcodes</code> call which checks for <code>4</code> and <code>6</code> and fails accordingly. I was tempted to do that. I might still do that in the future. The reason I didn’t implement this already was that <strong>actually applying the changes slowed things down to a crawl</strong>. The installation and configuration of a <code>gitlab</code> instance added more than 90 seconds to each build.</p>
<p>A shortened sample of what is done in the <code>gitlab</code> build:</p>
<ul>
<li>add <code>gitlab</code> repository</li>
<li>make sure <code>apt-transport-https</code> is installed</li>
<li>install <code>gitlab</code></li>
<li>overwrite <code>gitlab.rb</code></li>
<li>provide TLS certificate</li>
<li>start <code>gitlab</code></li>
</ul>
<p><strong>Should I ever decide to implement tests which really apply their changes, the infrastructure needed to run those checks for everything we do with puppet in a timely manner would drastically increase.</strong></p>
<h3 id="documentation">documentation</h3>
<p>I am adamant when it comes to documenting software since I don’t want to imagine working without docs, ever.</p>
<p>In my <code>Readme.markdown</code> each H3 header is equivalent to one <code>puppet</code> class.</p>
<p>This test checks whether the amount of documentation in my preferred style matches the amount of puppet manifest files (<code>.pp</code>). If the <code>Readme.markdown</code> does not contain exactly the same amount of <code>###</code> headers as there are puppet manifest files then it counts as a build failure <em>since someone obviously missed to update the documentation</em>.</p>
<div class="highlight"><pre><span></span><code><span class="ch">#!/bin/bash</span>
<span class="nb">set</span> -euo pipefail
<span class="nv">count_headers</span><span class="o">=</span><span class="sb">`</span>grep -e <span class="s2">"^### "</span> Readme.markdown<span class="p">|</span>wc -l<span class="p">|</span>awk <span class="o">{</span><span class="s1">'print $1'</span><span class="o">}</span><span class="sb">`</span>
<span class="nv">count_manifests</span><span class="o">=</span><span class="sb">`</span>find . -type f -name <span class="s2">"*.pp"</span> <span class="p">|</span>grep -v <span class="s2">"tests"</span><span class="p">|</span>wc -l<span class="p">|</span>awk <span class="o">{</span><span class="s1">'print $1'</span><span class="o">}</span><span class="sb">`</span>
<span class="k">if</span> <span class="nb">test</span> <span class="nv">$count_manifests</span> -eq <span class="nv">$count_headers</span>
<span class="k">then</span> <span class="nb">printf</span> <span class="s2">"Documentation matches number of manifests.\n"</span>
<span class="nb">exit</span> <span class="m">0</span>
<span class="k">else</span>
<span class="nb">printf</span> <span class="s2">"Documentation does not match number of manifests.\n"</span>
<span class="nb">printf</span> <span class="s2">"There might be missing manifests or missing documentation entries.\n"</span>
<span class="nb">printf</span> <span class="s2">"Manifests: </span><span class="nv">$count_manifests</span><span class="s2">, h3 documentation sections: </span><span class="nv">$count_headers</span><span class="s2">\n"</span>
<span class="nb">exit</span> <span class="m">1</span>
<span class="k">fi</span>
</code></pre></div>
<h2 id="application-tests">Application tests</h2>
<p>As previously said I use the <code>test</code> stage for testing configurations for other applications. Currently I only test <code>postfix</code>‘s <code>/etc/aliases</code> file as well as our <code>/etc/postfix/forwards</code> which is an extension of the former.</p>
<div class="highlight"><pre><span></span><code><span class="nt">applications</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">test</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">apt-get -qq -o=Dpkg::Use-Pty=0 install postfix</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/postfix-aliases.py</span>
</code></pre></div>
<p><strong>Future:</strong> There are plans for handling both <code>shorewall</code> as well as <code>isc-dhcp-server</code> configurations with <code>puppet</code>. Both of those would profit from having automated tests available.</p>
<p><strong>Future:</strong> The different software setups will probably be done in different jobs to allow concurrent running as soon as the CI solution is ready for general use by our researchers.</p>
<h3 id="postfix-aliases">postfix-aliases</h3>
<p>In order to test the <code>aliases</code>, an extremely minimalistic configuration for <code>postfix</code> is installed and the postfix instance is started. If there is <em>any output whatsoever</em> I assume that the test failed.</p>
<p><strong>Future:</strong> I plan to automatically apply both a minimal configuration and a full configuration in order to test both the main server and relay configurations for <code>postfix</code>.</p>
<div class="highlight"><pre><span></span><code><span class="ch">#!/usr/bin/env python2</span>
<span class="sd">"""Test postfix aliases and forwards syntax."""</span>
<span class="kn">import</span> <span class="nn">subprocess</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="sd">"""The main flow."""</span>
<span class="n">write_configuration</span><span class="p">()</span>
<span class="n">copy_aliases</span><span class="p">()</span>
<span class="n">copy_forwards</span><span class="p">()</span>
<span class="n">run_newaliases</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">write_configuration</span><span class="p">():</span>
<span class="sd">"""Write /etc/postfix/main.cf file."""</span>
<span class="n">configuration_stub</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"alias_maps = hash:/etc/aliases, "</span>
<span class="s2">"hash:/etc/postfix/forwards</span><span class="se">\n</span><span class="s2">"</span>
<span class="s2">"alias_database = hash:/etc/aliases, "</span>
<span class="s2">"hash:/etc/postfix/forwards"</span><span class="p">)</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"/etc/postfix/main.cf"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">configuration</span><span class="p">:</span>
<span class="n">configuration</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">configuration_stub</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">copy_aliases</span><span class="p">():</span>
<span class="sd">"""Find and copy aliases file."""</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s2">"find"</span><span class="p">,</span> <span class="s2">"."</span><span class="p">,</span> <span class="s2">"-type"</span><span class="p">,</span> <span class="s2">"f"</span><span class="p">,</span> <span class="s2">"-name"</span><span class="p">,</span>
<span class="s2">"aliases"</span><span class="p">])</span>
<span class="n">subprocess</span><span class="o">.</span><span class="n">call</span><span class="p">([</span><span class="s2">"cp"</span><span class="p">,</span> <span class="n">aliases</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="s2">"/etc/"</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">copy_forwards</span><span class="p">():</span>
<span class="sd">"""Find and copy forwards file."""</span>
<span class="n">forwards</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s2">"find"</span><span class="p">,</span> <span class="s2">"."</span><span class="p">,</span> <span class="s2">"-type"</span><span class="p">,</span> <span class="s2">"f"</span><span class="p">,</span> <span class="s2">"-name"</span><span class="p">,</span>
<span class="s2">"forwards"</span><span class="p">])</span>
<span class="n">subprocess</span><span class="o">.</span><span class="n">call</span><span class="p">([</span><span class="s2">"cp"</span><span class="p">,</span> <span class="n">forwards</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="s2">"/etc/postfix/"</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">run_newaliases</span><span class="p">():</span>
<span class="sd">"""Run newaliases and report errors."""</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s2">"newaliases"</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span>
<span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="s2">""</span><span class="p">:</span>
<span class="nb">print</span> <span class="n">result</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
<span class="n">main</span><span class="p">()</span>
</code></pre></div>
<h2 id="conclusion">Conclusion</h2>
<p>While I’ve ran into plenty frustrating moments, building a CI for <code>puppet</code> was quite fun and I’m constantly thinking about how to improve this further. One way would be to create “real” test instances for configurations, like “spin up one gitlab server with all its required classes”.</p>
<p>The main drawback in our current setup was two-fold:</p>
<ol>
<li>I haven’t enabled more than one concurrent instances of our private runner.</li>
<li>I haven’t considered the performance impact of moving to whole instance testing in other stages and parallelizing those tests.</li>
</ol>
<p>I look forward to implementing deployment on passing tests instead of my current method of automatically deploying every change in <code>master</code>.</p>
<hr>
<h2 id="update-2016-08-28">Update (2016-08-28)</h2>
<h3 id="prebuilt-docker-image">Prebuilt Docker image</h3>
<p>In order to reduce the run time for each build I eventually decided to prebuild our Docker image. I’ve also enabled automatic builds for the repository by linking our Docker Hub account with our GitHub organisation. This was easy and quick to set up. <em>Mind you that similar setups using GitLab have become possible in the mean time. This is a solution with relatively little maintenance as long as you don’t forget to add the base image you use as a dependency in the Docker Hub settings.</em></p>
<div class="highlight"><pre><span></span><code><span class="k">FROM</span> <span class="s">buildpack-deps:trusty</span>
<span class="k">MAINTAINER</span><span class="s"> Alexander Skiba <alexander.skiba@icg.tugraz.at></span>
<span class="k">ENV</span> DEBIAN_FRONTEND noninteractive
<span class="k">RUN</span> apt-get update <span class="o">&&</span> apt-get install -y <span class="se">\</span>
isc-dhcp-server <span class="se">\</span>
postfix <span class="se">\</span>
puppet <span class="se">\</span>
ruby-dev <span class="se">\</span>
rsync <span class="se">\</span>
shorewall <span class="se">\</span>
<span class="o">&&</span> apt-get clean <span class="se">\</span>
<span class="o">&&</span> rm -rf /var/lib/apt/lists/*
<span class="k">RUN</span> gem install --no-rdoc --no-ri <span class="se">\</span>
puppet-lint <span class="se">\</span>
rails-erb-lint
</code></pre></div>
<h3 id="continuous-deployment">Continuous Deployment</h3>
<p>When using CD, you want to have <strong>two</strong> runners on your puppetmaster. The Docker runner in which you test your changes and a <code>shell</code> runner with which you deploy your changes.</p>
<p>That’s what our <code>.gitlab-ci.yml</code> looks like.</p>
<div class="highlight"><pre><span></span><code><span class="nt">puppet</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">build</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/puppet-validate.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/puppet-lint.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/erb-syntax.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/puppet-missing-files.py</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/documentation.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/postfix-aliases.py</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/dhcpd.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/dhcpd-todos.sh</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">tests/shorewall.sh</span>
<span class="nt">tags</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">puppet</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">ubuntu trusty</span>
<span class="nt">puppetmaster</span><span class="p">:</span>
<span class="nt">stage</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">deploy</span>
<span class="nt">only</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">master</span>
<span class="nt">script</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">make modules</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">sudo service apache2 stop</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">rsync --omit-dir-times --recursive --group --owner --links --perms --human-readable --sparse --force --delete --stats . /etc/puppet</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">sudo service apache2 start</span>
<span class="nt">tags</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">puppetmaster</span>
<span class="nt">environment</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">production</span>
</code></pre></div>
<p>As you can see, there are no installation steps in the <code>puppet</code> job anymore, those have moved into the <code>Dockerfile</code>. The deployment consists of installing all the modules and <code>rsync</code>ing the files into the Puppet directory for use as soon as the server is started again. I chose to stop and start the server as a precaution since I prefer a “Puppet is down” message to incomplete Puppet runs in case a client gets an inconsistent state.</p>
<p>We also use the <code>environment</code> instruction to easily display the currently deployed commit in the GitLab interface.</p>
<p>In order for this to work easily and transparently, I’ve updated the <code>Makefile</code>.</p>
<div class="highlight"><pre><span></span><code><span class="nv">INSTALL</span> <span class="o">:=</span> puppet module install
<span class="nv">TARGET_DIR</span> <span class="o">:=</span> <span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>/modules
<span class="nv">TARGET</span> <span class="o">:=</span> --target-dir <span class="k">$(</span>TARGET_DIR<span class="k">)</span>
<span class="nf">modules</span><span class="o">:</span>
@echo <span class="s2">"Info: Installing required puppet modules from forge.puppetlabs.com."</span>
mkdir -p <span class="k">$(</span>TARGET_DIR<span class="k">)</span>
<span class="c"> # Puppetlabs modules</span>
<span class="k">$(</span>INSTALL<span class="k">)</span> puppetlabs-stdlib <span class="k">$(</span>TARGET<span class="k">)</span>
<span class="k">$(</span>INSTALL<span class="k">)</span> puppetlabs-apt <span class="k">$(</span>TARGET<span class="k">)</span>
<span class="k">$(</span>INSTALL<span class="k">)</span> puppetlabs-ntp <span class="k">$(</span>TARGET<span class="k">)</span>
<span class="k">$(</span>INSTALL<span class="k">)</span> puppetlabs-rabbitmq <span class="k">$(</span>TARGET<span class="k">)</span>
<span class="k">$(</span>INSTALL<span class="k">)</span> puppetlabs-vcsrepo <span class="k">$(</span>TARGET<span class="k">)</span>
<span class="k">$(</span>INSTALL<span class="k">)</span> puppetlabs-postgresql <span class="k">$(</span>TARGET<span class="k">)</span>
<span class="k">$(</span>INSTALL<span class="k">)</span> puppetlabs-apache <span class="k">$(</span>TARGET<span class="k">)</span>
<span class="c"> # Community modules</span>
<span class="k">$(</span>INSTALL<span class="k">)</span> REDACTED <span class="k">$(</span>TARGET<span class="k">)</span>
<span class="nf">test</span><span class="o">:</span>
@echo <span class="s2">"Installing manually via puppet from site.pp."</span>
puppet apply --verbose /etc/puppet/manifests/site.pp
<span class="nf">.PHONY</span><span class="o">:</span> <span class="n">modules</span> <span class="n">test</span>
</code></pre></div>
<p>A major difference to before is the installation of puppet modules into the current path after testing instead of installing them directly into the Puppet directory. This also serves to prevent deploying an inconsistent state into production in case something couldn’t be fully downloaded. Furthermore this assures we are always using the most recent released version to get bugfixes.</p>
<hr>
<h2 id="notes">Notes</h2>
<ul>
<li>Build stages <em>do</em> run after each other, however, they <em>do not</em> use the same instance of the <code>docker</code> container and therefore are not suited for installing prerequisites and running tests in different stages. <em>Read: If you need an additional package in every stage, you need to install it during every stage.</em></li>
<li>If you are curious what the <code>set -euo pipefail</code> commands on top of all my shell scripts do, refer to Aaron Maxwell’s <a href="http://redsymbol.net/articles/unofficial-bash-strict-mode/">Use the Unofficial Bash Strict Mode</a>.</li>
<li><del>Our runners as of the time of this writing use <code>buildpack-deps:trusty</code> as their image.</del> We use a custom image now.</li>
</ul>Retaining your sanity while working on SWEB2015-08-14T04:26:32+02:002017-03-14T21:54:00+01:00Alexander Skibatag:ghostlyrics.net,2015-08-14:/retaining-your-sanity-while-working-on-sweb.html<ul>
<li>This post was updated 2 times.</li>
</ul>
<p>I’ll openly admit, I’m mostly complaining. This is part of who I am. Mostly I don’t see things for how great they are, I just see what could be improved. While that is a nice skill to have, it often gives …</p><ul>
<li>This post was updated 2 times.</li>
</ul>
<p>I’ll openly admit, I’m mostly complaining. This is part of who I am. Mostly I don’t see things for how great they are, I just see what could be improved. While that is a nice skill to have, it often gives people the impression that I’m not noticing all the good stuff and only ever talk about negative impressions. That’s wrong. I try to make things better by improving them for everyone.</p>
<p>Sometimes that involves a bit of ranting or advice which may sound useless or like minuscule improvements to others. This post will contain a lot of that.
I’ll mention small things that can make your work with your group easier.</p>
<h2 id="qemu">Qemu</h2>
<h3 id="avoid-the-matrix-combo">Avoid the “Matrix combo”</h3>
<p>You are working in a university setting, and probably don’t spend your time in a dark cellar at night staring into one tiny terminal window coding in the console. Don’t live like that - <em>unless you really enjoy it</em>.</p>
<p>Set your <code>qemu</code> console color scheme to some sensible default, like white on black or black on white instead of the Matrix-styled green on black.</p>
<p>In <code>common/source/kernel/main.cpp</code>:</p>
<div class="highlight"><pre><span></span><code><span class="gd">-term_0->initTerminalColors(Console::GREEN, Console::BLACK);</span>
<span class="gi">+term_0->initTerminalColors(Console::WHITE, Console::BLACK);</span>
</code></pre></div>
<h3 id="prevent-automatic-rebooting">Prevent automatic rebooting</h3>
<p><strong>Update:</strong> I’ve submitted a PR for this issue: <a href="https://github.com/IAIK/sweb/pull/55">#55</a> has been merged.</p>
<p>When you want to try and find a specific problem which causes your SWEB to crash, you don’t want <code>qemu</code> to automatically reboot and cause your terminal or log to become full with junk. Fortunately you can disable automatic rebooting.</p>
<p>In <code>arch/YOUR_ARCHITECTURE/CMakeLists.include</code> (e.g. <code>x86/32</code>): </p>
<div class="highlight"><pre><span></span><code><span class="gd">- COMMAND qemu-system-i386 -m 8M -cpu qemu32 -hda SWEB-flat.vmdk -debugcon stdio</span>
<span class="gi">+ COMMAND qemu-system-i386 -m 8M -cpu qemu32 -hda SWEB-flat.vmdk -debugcon stdio -no-reboot</span>
<span class="gd">- COMMAND qemu-system-i386 -no-kvm -s -S -m 8M -hda SWEB-flat.vmdk -debugcon stdio</span>
<span class="gi">+ COMMAND qemu-system-i386 -no-kvm -s -S -m 8M -hda SWEB-flat.vmdk -debugcon stdio -no-reboot</span>
</code></pre></div>
<h3 id="automatically-boot-the-first-grub-entry">Automatically boot the first grub entry</h3>
<p>If you are going for rapid iteration, you’ll grow impatient always hitting <kbd>Enter</kbd> to select the first entry in the boot menu. Lucky you! You can skip that and boot directly to the first option. Optionally delete all other entries.</p>
<p>In <code>utils/images/menu.lst</code>:</p>
<div class="highlight"><pre><span></span><code>default=0
timeout=0
title = Sweb
root (hd0,0)
kernel = /boot/kernel.x
</code></pre></div>
<h2 id="code">Code</h2>
<h3 id="use-debug-color-flags-different-from-black-and-white">Use Debug color flags different from black and white</h3>
<p>The most popular color schemes for Terminal use one of two background colors - black and white. Don’t ever use those for highlighting important information unless you want your information to be completely unreadable in one of the most common setups. You can change them to any other color you like.</p>
<p>In <code>common/include/console/debug.h</code>:</p>
<div class="highlight"><pre><span></span><code><span class="gd">-const size_t LOADER = Ansi_White;</span>
<span class="gi">+const size_t LOADER = Ansi_WHATEVER_YOU_LIKE;</span>
<span class="gd">-const size_t RAMFS = Ansi_White;</span>
<span class="gi">+const size_t RAMFS = Ansi_NOT_WHITE_OR_BLACK;</span>
</code></pre></div>
<h3 id="use-c11-style-foreach-loops">Use C++11 style foreach loops</h3>
<p>You may use C++11 standard code, which brings many features of which I found the easier syntax for writing <code>foreach</code> loops most beneficial. This way of writing <code>foreach</code> loops is shorter and improves the readability of your code a lot.</p>
<p>This is the old style for iterating over a container:</p>
<div class="highlight"><pre><span></span><code><span class="k">typedef</span> <span class="n">ustl</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">example</span><span class="p">,</span> <span class="n">example</span><span class="o">>::</span><span class="n">iterator</span> <span class="n">it_type</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span><span class="n">it_type</span> <span class="n">iterator</span> <span class="o">=</span> <span class="n">data_structure</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
<span class="n">iterator</span> <span class="o">!=</span> <span class="n">data_structure</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="n">iterator</span><span class="o">++</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">iterator</span><span class="o">-></span><span class="n">doSomething</span><span class="p">();</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"This isn't really intuitive unless you've more experience with C++.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>
<p>This is the newer method I strongly suggest:</p>
<div class="highlight"><pre><span></span><code><span class="k">for</span><span class="p">(</span><span class="k">auto</span> <span class="nl">example</span><span class="p">:</span> <span class="n">data_structure</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">example</span><span class="p">.</span><span class="n">doSomething</span><span class="p">();</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"This is much more readable.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="have-your-code-compile-without-warnings">Have your code compile without warnings</h3>
<p>Truth be told, this should go without saying. If your code compiles with warnings it is likely it does not do exactly what you want. We saw that a lot during the practicals. Parts that only looked like they did what you wanted but on a second glance turned out to be wrong were already hinted at by compiler warnings.</p>
<p>If you don’t know how to fix a compiler warning, look it up or throw another compiler at it. Since you are compiling with <code>gcc</code> and linting with <code>clang</code> you already have a good chance of being provided with at least one set of instructions on how to fix your code. <em>Or, you know, ask your team members. You’re in this together.</em></p>
<p>Besides, this is about sanity. Here, it’s also about code hygiene.</p>
<blockquote>
<p>Your code should be clean enough to eat off of. So take the time to leave your […] files better than how you found them. ~Mattt Thompson</p>
</blockquote>
<h2 id="git">Git</h2>
<p>I assume you know the git basics. I am a naturally curious person when it comes to tech (and a slew of other topics) and know a lot of things that don’t have any relation to my previous work but I’ve been told that a lot of people don’t know the workflow around github which has become popular with open source. I’ll try to be brief. The same workflow can be applied to the <a href="https://about.gitlab.com">gitlab</a> software (an open source solution similar to github).</p>
<p>Let’s assume you want to make a change to an open source project of mine, <code>homebrew-sweb</code>. You’d go through the following steps:</p>
<ol>
<li>Click “fork” on my <a href="https://github.com/GhostLyrics/homebrew-sweb/">repository site</a>.</li>
<li>Create a new branch in your clone of the project.</li>
<li>Make changes and commit them.</li>
<li>Push your new branch to your remote.</li>
<li>Click the “submit pull request” button.</li>
</ol>
<p>This means you don’t have write access to their repository but they can still accept and merge your changes quickly as part of their regular workflow. Now, some projects may have differing requirements, e.g. you need to send your PRs to the <code>develop</code> branch instead of <code>master</code>.</p>
<p>A simpler version of this workflow can <strong>and should</strong> be used when working as a group. Basically use the existing steps without forking the repository.</p>
<h3 id="have-feature-branches">Have feature branches</h3>
<p>You don’t want people to work in <code>master</code>, you want to have one known good branch and others which are in development. By working in branches, you can try and experiment without breaking your existing achievements.</p>
<p>Working with branches that contain single features instead of “all changes by Alex” works better because you can merge single features more easily depending on their stability and how well you tested them. This goes hand in hand with the next point.</p>
<p>When working with Pull Requests this has another upside: A Pull Request is <em>always</em> directly linked to a branch. If the branch gets updated server-side, the PR is automatically updated too, helping you to always merge the latest changes. When a PR is merged, the corresponding branch can be safely deleted since all code up to the merge is in <code>master</code>. This helps you avoid having many stale branches. <em>Please don’t push to branches with a PR again after merging.</em></p>
<h3 id="have-a-prefix-in-your-branch-names">Have a prefix in your branch names</h3>
<p>Having a prefix in your branch name before its features signals to others who is responsible for a feature or branch. I used <code>alx</code> (e.g. <code>alx-fork</code>) to identify the branches I started and was the main contributor of.</p>
<h3 id="always-commit-into-a-feature-branch">Always commit into a feature branch</h3>
<p>Committing directly into master is equal to not believing in code review. You don’t want to commit into master directly, ever. The only exception for this rule in the Operating Systems course is to pull from upstream.</p>
<p>Since you probably set up the IAIK repository as <code>upstream</code>, you would do the following to update your repository with fixed provided by the course staff:</p>
<div class="highlight"><pre><span></span><code>git checkout master
git pull upstream master
git push origin master
</code></pre></div>
<p><em>When it comes to team discipline I will be the one enforcing the rules. If we agreed on never committing into <code>master</code> I </em><em>will</em><em> revert your commits in <code>master</code> even if they look perfectly fine.</em></p>
<h3 id="have-your-reviewers-merge-pull-requests">Have your reviewers merge Pull Requests</h3>
<p>Now, you might wonder why you wouldn’t just merge a PR someone found to be fine into <code>master</code> yourself. That is very simple. By having the reviewer click the Merge button, you can track who reviewed the PR afterwards.</p>
<p>Also, it doesn’t leave the bitter taste of “I’m so great that I can merge without review” in your mouth. :)</p>
<h3 id="make-sure-your-pull-requests-can-be-automatically-merged">Make sure your pull requests can be automatically merged</h3>
<p>Nobody likes merge conflicts. You don’t and your group members certainly don’t. Make sure your branch can be merged automatically without conflicts into master. That means that before opening a Pull Request, you rebase your branch from master.</p>
<div class="highlight"><pre><span></span><code>git checkout master
git pull
git checkout your-feature-branch
git rebase master
</code></pre></div>
<p>Repeat this process if <code>master</code> was updated after you submitted your PR to make sure it still can be merged without conflicts.</p>
<p>I want to make one thing very clear: As the person sending the Pull Request, it is <em>your</em> responsibility to make sure it merges clean, not the maintainer’s nor the project leader’s.</p>
<p>The reasoning behind this is taken from open source projects: Whenever you submit a patch but do not intend to keep on working on the software, you are leaving the burden of maintaining <em>your</em> code on the main developer. The <em>least</em> you can do is make sure it fits into their existing code base without additional pain.</p>
<h2 id="conclusion">Conclusion</h2>
<p>There is quite a lot you and your partners can do to make the term with Operating Systems go a lot smoother. Some of it has to do with tech others with communication and team discipline. In case you’re about to enroll in the course or already have, I wish you the best of luck!</p>
<hr>
<p><em>I’ll talk to Daniel about some of those issues and which might be okay to change. He’s quite thoughtful about what to include and what not to accept for the project as it’s delivered to the students. I’ll see which suggestions can be sent upstream and update this post accordingly.</em></p>Tools and their experiences with SWEB2015-08-14T04:25:01+02:002017-03-14T21:54:00+01:00Alexander Skibatag:ghostlyrics.net,2015-08-14:/tools-and-their-experiences-with-sweb.html<p>In the first part of this three-part series on the Operating System practicals at TU Graz I’ll write about some tools that I used and how well (or not well) they worked for me and my team members.</p>
<p>You can read [part I][develop] about working directly without an …</p><p>In the first part of this three-part series on the Operating System practicals at TU Graz I’ll write about some tools that I used and how well (or not well) they worked for me and my team members.</p>
<p>You can read [part I][develop] about working directly without an intermediate VM on OS X [here][develop] and [part II][sanity] about retaining your sanity [here][sanity].</p>
<h2 id="sublime-text-3">Sublime Text 3</h2>
<p>I love to use <a href="http://www.sublimetext.com">Sublime Text</a>. If you ask me it’s the nicest text editor ever made. While my licence for version 2 is still valid, I’ll gladly pay the upgrade price for version 3 as soon as it is released. It is by far the tool I use most: I write my blog posts in it and I also use it for all my coding needs. (<em>Sublime Text is available for 70$.</em>)</p>
<p>In order to help me with development on SWEB I installed a few plugins using the superb <a href="https://packagecontrol.io">Package Control</a> package manager. If you want to work with Sublime when ever possible, you can set your <code>EDITOR</code> environment variable for that in <code>~/.bash_profile</code>:</p>
<div class="highlight"><pre><span></span><code>export EDITOR='subl -w'
</code></pre></div>
<h3 id="c-improved">C Improved</h3>
<p>C Improved provides better support for syntax highlighting of preprocessor macros as well as improved <code>Goto Symbol</code> (CMD + R) support for C. [<a href="https://github.com/abusalimov/SublimeCImproved">github</a>]</p>
<h3 id="clang-complete">Clang Complete</h3>
<p>Clang Complete provides completion hints based on LLVM’s source analysis instead of Sublime’s internal completion. Sublime’s completion is based on what strings are already in the current file. LLVM’s completion is more akin to an IDE, which properly suggests variables, function names and method names.</p>
<p>Clang Complete is <strong>not</strong> available in Package Control and needs to be installed manually via the instructions in its readme. [<a href="https://github.com/pfultz2/ClangComplete">github</a>]</p>
<p>I had to make some compromises though in order to get it to work properly.</p>
<ol>
<li>Add your include paths</li>
<li>Set the C++ standard</li>
<li>Remove the default include paths</li>
<li>Add an additional preprocessor constant (e.g. <code>SUBLIME</code>)</li>
<li>Specify the standard library included with SWEB as system library (<em>read: “errors or warnings in here are not our fault.”</em>)</li>
</ol>
<p>The additional constant is necessary in order to override the architectural difference between OS X (defaults to 64 bits) and SWEB (defaults to 32 bits) when analyzing the code. It is necessary to modify an additional file in your SWEB source. This is only ever used for analysis and never touched during compilation.</p>
<p>Here’s my <code>ClangComplete.sublime-settings</code> file:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">"default_options"</span><span class="p">:</span>
<span class="p">[</span>
<span class="s2">"-std=c++11"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/arch/include/"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/arch/common/include"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/arch/x86/32/common/include"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/arch/x86/32/include"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/arch/x86/common/include"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/common/include/"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/common/include/console"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/common/include/fs"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/common/include/fs/devicefs"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/common/include/fs/minixfs"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/common/include/fs/ramfs"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/common/include/kernel"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/common/include/mm"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/common/include/util"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/userspace/libc/include/sys"</span><span class="p">,</span>
<span class="s2">"-I/Users/ghostlyrics/Repositories/sweb/userspace/libc/include"</span><span class="p">,</span>
<span class="s2">"-isystem/Users/ghostlyrics/Repositories/sweb/common/include/ustl"</span><span class="p">,</span>
<span class="s2">"-D SUBLIME"</span>
<span class="p">],</span>
<span class="nt">"default_include_paths"</span><span class="p">:[],</span>
<span class="p">}</span>
</code></pre></div>
<p>And here is the modified part of <code>arch/x86/32/common/include/types.h</code>:</p>
<div class="highlight"><pre><span></span><code><span class="gi">+#ifdef SUBLIME</span>
<span class="gi">+typedef unsigned long size_t;</span>
<span class="gi">+</span>
<span class="gi">+#else</span>
typedef uint32 size_t;
<span class="gi">+</span>
<span class="gi">+#endif</span>
</code></pre></div>
<h3 id="git-gutter">Git Gutter</h3>
<p>Git Gutter displays helpful little icons in the gutter (the area which houses the line numbers). I had to modify some of the settings in order to make it work well together with Sublimelinter which also wants to draw into the gutter. You’ll have to decide for yourself which icons you find more important and have those drawn <em>later</em>. [<a href="https://github.com/jisaacks/GitGutter">github</a>]</p>
<p>My <code>GitGutter.sublime-settings</code> has only one entry:</p>
<div class="highlight"><pre><span></span><code>"live_mode": true,
</code></pre></div>
<h3 id="sublimelinter-sublimelinter-contrib-clang-sublimelinter-annotations">Sublimelinter + Sublimelinter-contrib-clang + Sublimelinter-annotations</h3>
<p>SublimeLinter [<a href="https://github.com/SublimeLinter/SublimeLinter3">github</a>] helps your style by flagging all kinds of errors and warnings. The base package does not come with linters, you have to install compatible linters with the framework yourself.</p>
<p>The <code>Sublimelinter-contrib-clang</code> plugin [<a href="https://github.com/nirm03/SublimeLinter-clang">github</a>] helps with <code>C</code> and <code>C++</code> files while the <code>Sublimelinter-annotations</code> plugin [<a href="https://github.com/SublimeLinter/SublimeLinter-annotations">github</a>] flags things like <code>TODO:</code>, <code>FIXME</code> and <code>XXX</code> which is helpful if you tend to annotate code in the files themselves - a habit I would like you to avoid if you have web tools available (e.g. github or a <a href="https://about.gitlab.com">gitlab</a>, but we’ll get to that later). - Code files should be reserved for actual code and documentation to that code, not philosophical or design debates.</p>
<p>Again, you’ll need to modify this in order to work well with GitGutter. You will also need to enter all the include paths again, since the settings are not shared between the plugins.</p>
<p>Here’s an abbreviated version of my <code>SublimeLinter.sublime-settings</code> file:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">"user"</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">"@python"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
<span class="nt">"delay"</span><span class="p">:</span> <span class="mf">0.15</span><span class="p">,</span>
<span class="nt">"lint_mode"</span><span class="p">:</span> <span class="s2">"background"</span><span class="p">,</span>
<span class="nt">"linters"</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">"annotations"</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">"@disable"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
<span class="nt">"args"</span><span class="p">:</span> <span class="p">[],</span>
<span class="nt">"errors"</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">"FIXME"</span>
<span class="p">],</span>
<span class="nt">"excludes"</span><span class="p">:</span> <span class="p">[],</span>
<span class="nt">"warnings"</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">"TODO"</span><span class="p">,</span>
<span class="s2">"README"</span>
<span class="p">]</span>
<span class="p">},</span>
<span class="nt">"clang"</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">"@disable"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
<span class="nt">"args"</span><span class="p">:</span> <span class="p">[],</span>
<span class="nt">"excludes"</span><span class="p">:</span> <span class="p">[],</span>
<span class="nt">"extra_flags"</span><span class="p">:</span> <span class="s2">"-D SUBLIME -std=c++11 -isystem \"/Users/ghostlyrics/Repositories/sweb/common/include/ustl\""</span><span class="p">,</span>
<span class="nt">"include_dirs"</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/arch/include"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/arch/common/include"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/arch/x86/32/common/include"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/arch/x86/32/include"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/arch/x86/common/include"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/common/include/"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/common/include/console"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/common/include/fs"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/common/include/fs/devicefs"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/common/include/fs/minixfs"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/common/include/fs/ramfs"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/common/include/kernel"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/common/include/mm"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/common/include/util"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/userspace/libc/include/sys"</span><span class="p">,</span>
<span class="s2">"/Users/ghostlyrics/Repositories/sweb/userspace/libc/include"</span>
<span class="p">]</span>
<span class="p">},</span>
<span class="p">},</span>
<span class="nt">"passive_warnings"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
<span class="nt">"rc_search_limit"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
<span class="nt">"shell_timeout"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
<span class="nt">"show_errors_on_save"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
<span class="nt">"show_marks_in_minimap"</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
<span class="nt">"wrap_find"</span><span class="p">:</span> <span class="kc">true</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<h2 id="slack">Slack</h2>
<p>Communication with your team is essential.</p>
<p>Now, different people prefer different means of communication. Personally, I tend to dislike the slowness of e-mail, the invasion of privacy and inherent urgency of SMS and the awful mangling of source code and general formatting in most messengers (<em>I’m looking at you, Skype. Go hide in a corner.</em>) I recommend <a href="http://slackhq.com">Slack</a>. Slack has been gaining popularity amongst US companies and startups in general for a while now and I enjoyed the flexibility it offered our team:</p>
<p>We were able to easily post arbitrary files (e.g. <code>.log</code> with our Terminal output or <code>.pdf</code> with the draft for the design document) as well as post code snippets which can even be assigned a language for syntax highlighting. I also enjoyed link previews for pasted links and being able to easily quote blocks of text.</p>
<p>On top of that, add the fantastic integration with <a href="https://github.com">Github</a> which allowed us to get notifications in a channel on different kinds of development activity, like Pushes, comments on code (for code review) and Pull Requests.</p>
<p><img alt="Screenshot of github bot in slack" src="/images/sweb/slack-github.png"></p>
<p>Since it is quite likely for you to work with team members on other operating systems, Slack is available for Windows and a open source client for Linux called <a href="http://www.webupd8.org/2015/05/scudcloud-unofficial-slack-client-for.html">Scudcloud</a> exists and works pretty well.</p>
<h2 id="github-github-client">Github + Github Client</h2>
<p>In order to have the bot automatically post into our Slack channel, it was necessary for us to either have a properly set up gitlab or a github repository. Since I didn’t want to abuse my connections at work for gitlab accounts and the IAIK, the institute which teaches Operating Systems, does not (yet?) host the repositories for the course on their gitlab, working on github was necessary. Of course we were required to use a private repository lest all visitors could see and potentially steal our code.</p>
<p>Github offers its micro plan free for students. This plan include 5 private repositories. My plan had expired, so I paid for a month until they could reinstate my discount due to me still being a student.</p>
<p>Github also offers a quite simplistic and easy to use <a href="https://desktop.github.com">graphical interface</a> for <code>git</code> which makes branching, merging and committing as well as sync delightfully fast and easy. <em>Of course plenty of diving into the command line was still necessary due to the need to push to the assignment repository from time to time, etc.</em></p>
<p>However, we were able to do a lot of time intensive things like Code Review or merges from the web interface - it has helpful features such as an indicator whether a Pull Request can be merged without conflicts; this is extremely helpful when merging features back into <code>master</code>.</p>
<p>I’ll explain a bit more about some strategies for this group project [in a separate post][sanity].</p>
<p>Due to the need for our code to be exactly the same in the assignment repository as in the github repository I mirrored the code manually before each deadline (and sometimes more often), using commands from a <a href="https://help.github.com/articles/duplicating-a-repository/">github help page</a>. I even wrote an <code>bash alias</code> for the command which needed to be called repeatedly (from <code>~/.bash_profile</code>):</p>
<div class="highlight"><pre><span></span><code>alias push='git fetch -p origin && git push --mirror'
</code></pre></div>
<h2 id="bash-git-prompt">bash git prompt</h2>
<p>My shell of choice is <code>bash</code> since it’s the default for most systems. In order to have similar features to the <code>zsh</code> configuration recommended by the SWEBwiki you may install an improved prompt for <code>bash</code> with <code>git</code> support. [<a href="https://github.com/magicmonty/bash-git-prompt">github</a>]</p>
<p>These lines in my <code>~/.bash_profile</code> show my prompt configuration for <code>bash-git-prompt</code>:</p>
<div class="highlight"><pre><span></span><code><span class="k">if</span> <span class="o">[</span> -f <span class="s2">"</span><span class="k">$(</span>brew --prefix bash-git-prompt<span class="k">)</span><span class="s2">/share/gitprompt.sh"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
<span class="nv">GIT_PROMPT_THEME</span><span class="o">=</span>Custom
<span class="nv">GIT_PROMPT_ONLY_IN_REPO</span><span class="o">=</span><span class="m">1</span>
<span class="nb">source</span> <span class="s2">"</span><span class="k">$(</span>brew --prefix bash-git-prompt<span class="k">)</span><span class="s2">/share/gitprompt.sh"</span>
<span class="k">fi</span>
<span class="nb">export</span> <span class="nv">PS1</span><span class="o">=</span><span class="s2">"________________________________________________________________________________\n| \[\e[0;31m\]\u\[\e[m\]@\h: \w \n| ="" \[\e[m\]"</span>
<span class="nb">export</span> <span class="nv">PS2</span><span class="o">=</span><span class="s2">"\[\e[38;5;246m\]| ="" \[\e[m\]"</span>
</code></pre></div>
<p>In order to keep it consistent with my standard prompt here are the settings I override for the <code>custom</code> theme in <code>~/.git-prompt-colors</code>:</p>
<div class="highlight"><pre><span></span><code><span class="nv">GIT_PROMPT_START_USER</span><span class="o">=</span><span class="s2">"________________________________________________________________________________\n| \[\e[0;31m\]\u\[\e[m\]@ \h: \w \n|"</span>
<span class="nv">GIT_PROMPT_END_USER</span><span class="o">=</span><span class="s2">" ="" "</span>
</code></pre></div>
<h2 id="iterm-terminal">iTerm & Terminal</h2>
<p>For my work as system administrator at the ICG I strongly prefer a terminal emulator which has native support for split panes without relying on <code>GNU screen</code>. I usually work with a Nightly Build of <a href="http://iterm2.com">iTerm 2</a>. However, there was an issue with color codes which are extremely important when working with SWEB that made me change to Apple’s build-in Terminal for the course.</p>
<p>Have a look for yourself, the first image is the output with iTerm 2, while the bottom image is the output with Apple’s Terminal.</p>
<p><img alt="SWEB running on iTerm 2" src="/images/sweb/sweb-iterm.png"></p>
<p><img alt="SWEB running on Apple's Terminal" src="/images/sweb/sweb-terminal.png"></p>
<h2 id="one-more-thing">One more thing</h2>
<p>There is one last recommendation I have which is not applicable on the Mac due to cross-compilation. Analyze your code with <code>scan-build</code>. <code>scan-build</code> is available in the <code>clang</code> Ubuntu package. Analyze it at least twice:</p>
<ol>
<li>The first step is to analyze the code immediately when you get it to know what are false positives. <em>Well, not strictly speaking false positives, but you likely won’t be fixing the issues that come with the assignment.</em></li>
<li>Then, run the analyzer again before handing in an assignment to detect and fix possible issues.</li>
</ol>
<p>Steps for analysis, assuming you would like to use a folder separate from your regular <code>build</code>:</p>
<div class="highlight"><pre><span></span><code>mkdir analysis
<span class="nb">cd</span> analysis
scan-build cmake . ../sweb
scan-build -analyze-headers -vvv -maxloop <span class="m">12</span> make
scan-view /path/to/result
</code></pre></div>
<p><code>scan-view</code> will open the scan results in your default browser.
Note that I’m setting <code>-maxloop</code> to three times the default - further increasing this number will be very time consuming. If you want to see the result immediately after completion, you can add <code>-V</code> to the arguments of <code>scan-build</code>.</p>
<h2 id="conclusion">Conclusion</h2>
<p>There are a lot of great tools out there to work on SWEB and code in general. Personally I abhor using <a href="https://eclipse.org">Eclipse</a> due to its slowness and horrible interface, not to mention the keyboard shortcuts which make little sense to a Mac user. To be perfectly honest, I’m mostly screaming and cursing within minutes of starting up Eclipse for <em>any</em> kind of task.</p>
<p>This is why I do seek out tools that are native to the Mac.</p>
<hr>
<p><em>Btw. if all of these code blocks happen to have nice syntax highligthing I’ve migrated away from Wordpress or they finally managed to make their Jetpack plugin transform fenced code blocks into properly highlighted, fancy coloured text.</em></p>How to SWEB on your Mac with OS X2015-08-14T04:20:21+02:002017-03-14T21:55:00+01:00Alexander Skibatag:ghostlyrics.net,2015-08-14:/how-to-sweb-on-your-mac-with-os-x.html<h2 id="motivation">Motivation</h2>
<p>I initially used a Macbook Air as my main machine for university work and therefore also for the Operating Systems course. Now, you will probably be aware of this, but the Air is not the fastest laptop in town. Given that it was necessary to run the SWEB, the …</p><h2 id="motivation">Motivation</h2>
<p>I initially used a Macbook Air as my main machine for university work and therefore also for the Operating Systems course. Now, you will probably be aware of this, but the Air is not the fastest laptop in town. Given that it was necessary to run the SWEB, the given operating system via <code>qemu</code> in a Linux virtual machine, things were already quite slow.</p>
<p>Furthermore, testing my group’s Swapping implementation was one of the slowest things I came across and I desperately wanted to work with a faster setup. I learned that at one point in the past SWEB had been compilable and runable on OS X. </p>
<p>I even stumbled across <a href="http://stefan.2904.cc">Stefan</a>‘s build scripts on the <a href="https://swebwiki.student.iaik.tugraz.at">SWEB wiki</a>. Those were written for a system that had been migrated from several older versions all the way to OS 10.6. My machine had 10.7 as of the time of my first trials and there was no more Apple provided build of <code>gcc</code> available since Apple had moved on to use <code>clang</code> as part of their switch to <code>LLVM</code>.</p>
<p>Back then I spent two evenings with Thomas trying to get a cross compiler up and running to compile on OS X. We failed on that. Soon after that I spent some time together with <a href="https://gruss.cc">Daniel</a> who is the main person responsible for the Operating System practicals and we managed to successfully and reproducably build a working cross compiler. With that, one could build and run SWEB on OS X. Some modifications to the build scripts as well as minor modifications to the code base were necessary, but after writing those patches, one could check out and build <a href="https://github.com/iaik/sweb">the system provided by the IAIK</a>.</p>
<p>And, well… I didn’t take the course that year, the course staff updated things in the code base and nobody bothered to check if the Mac build was indeed still building. Suffice to say another round of small fixes was required and I sat together with Daniel again. He’s the expert, I’m just the motivated Mac guy. I was asked whether I’d finally try the course again, given that I’m preparing the Mac build again. My answer was that I’d do so if we get it working before the term started and we did, so there’s that.</p>
<h2 id="requirements">Requirements</h2>
<ul>
<li>Xcode</li>
<li>Xcode command line tools</li>
<li>git (included in Xcode command line tools)</li>
<li>homebrew</li>
<li>homebrew: tap ghostlyrics/homebrew-sweb</li>
<li>homebrew: packages: cloog, qemu, cmake, sweb-gcc</li>
</ul>
<p>Feel free to skip ahead to the next section if you know how to install those things.</p>
<h3 id="xcode">Xcode</h3>
<p><a href="https://developer.apple.com/xcode/downloads/">Download</a> and install Xcode from Apple. If you don’t have differing requirements, the stable version is strongly suggested.</p>
<h3 id="xcode-command-line-tools">Xcode command line tools</h3>
<p>Apple stopped shipping its command line tools by default with Xcode. These are necessary to build things with our third party package manager of choice, homebrew. Install them via the wizard triggered by the following command in Terminal.app.</p>
<div class="highlight"><pre><span></span><code>xcode-select --install
</code></pre></div>
<h3 id="homebrew">homebrew</h3>
<p>Unfortunately OS X does not ship with a package manager. Such a program is quite helpful navigating the world of open source software – we use homebrew to install the dependencies of SWEB as well as the cross compiler I have prepared with extensive help from Daniel.</p>
<p>Install <a href="http://brew.sh">homebrew</a> via the instructions at their site - it’s easy. Again, you’re instructed to paste one line into Terminal.app.</p>
<h4 id="ghostlyricshomebrew-sweb">ghostlyrics/homebrew-sweb</h4>
<p>Since the main architecture your SWEB runs on is <code>i686-linux-gnu</code> you will need a toolchain that builds its executables for said architecture.</p>
<p>To activate the package source enter the following command:</p>
<div class="highlight"><pre><span></span><code>brew tap ghostlyrics/homebrew-sweb
</code></pre></div>
<p>Though an interesting experiment, we did not bother using a <code>clang</code> based toolchain since SWEB does not compile and run well on Linux with clang. Therefore it would’ve been a twofold effort to:</p>
<ol>
<li>make SWEB build with <code>clang</code> on Linux</li>
<li>build a <code>clang</code> based cross-compiler</li>
</ol>
<h4 id="packages-cloog-qemu-cmake-sweb-gcc">packages: cloog, qemu, cmake, sweb-gcc</h4>
<p>To install the necessary packages enter the following command:</p>
<div class="highlight"><pre><span></span><code>brew install sweb-gcc qemu cmake cloog
</code></pre></div>
<p>The cross-compiler we provide is based on <code>gcc</code> Version 4.9.1 and precompiled packages are (mostly) available for the current stable version of OS X. <em>Should it be necessary or should you wish to compile it yourself, expect compile times of more than 10 minutes (Model used for measurement: Macbook Pro, 15-inch, Late 2013, 2,3 GHz Intel Core i7, 16 GB 1600 MHz DDR3).</em></p>
<h2 id="compiling-your-first-build">Compiling your first build</h2>
<p>You are now ready to compile your first build. Due to problems with in-source builds in the past, SWEB does no longer support those. You will need to build in a different folder, e.g. <code>build</code>:</p>
<div class="highlight"><pre><span></span><code>git clone https://github.com/iaik/sweb
mkdir build
<span class="nb">cd</span> build
cmake ../sweb
make
make qemu
</code></pre></div>
<p>After running these commands you should see many lines with different colors in your main Terminal and a second window with the <code>qemu</code> emulator running your SWEB.</p>
<h2 id="speeding-things-up">Speeding things up</h2>
<p>While the way described in the previous section is certainly enough to get you started there a some things you can do to make your workflow speedier.</p>
<ul>
<li>Compiling with more threads enabled</li>
<li>Using one command to do several things in succession</li>
<li>Chaining your commands</li>
<li>Using a RAM disk</li>
</ul>
<h3 id="compile-with-more-threads">Compile with more threads</h3>
<p>Using a command line option for <code>make</code> allows you to either specify the amount of threads the program should use for the compilation process or instruct it to be “greedy” and use as many as it sees fit.</p>
<div class="highlight"><pre><span></span><code>make -j OPTIONAL_INTEGER_MAXIMUM_THREAD_NUMBER
</code></pre></div>
<p>The downside to this is that since the process is not threadsafe, your terminal output will be quite messy.</p>
<h3 id="use-one-command-to-do-several-things">Use one command to do several things</h3>
<p>SWEB ships with a very handy <code>make</code> target called <code>mrproper</code>. This script deletes your intermediate files and runs <code>cmake SOURCEFOLDER</code> again. Since you need to run the <code>cmake</code> command for every <strong>new</strong> file you want to add, this can save some time.</p>
<div class="highlight"><pre><span></span><code>make mrproper
... <span class="o">[</span>Y/n<span class="o">]</span>
</code></pre></div>
<p>When asked whether you want to really do this, some popular UNIX tools allow you to hit ENTER to accept the suggestion in capital letters; the same behaviour is enabled for this prompt.</p>
<h3 id="chaining-your-commands">Chaining your commands</h3>
<p>You probably already know this, but shell commands can be chained. Use <code>&&</code> to run the next command only if the previous command succeeded and use <code>;</code> to run the next command in any case.</p>
<div class="highlight"><pre><span></span><code>cmake . <span class="o">&&</span> make -j <span class="o">&&</span> make qemu
make -j <span class="o">&&</span> make qemu <span class="p">;</span> make clean
</code></pre></div>
<p>Using this technique you can simply build and run with two button presses: The arrow key up to jump through your shell history and the ENTER key to accept.</p>
<h3 id="using-a-ram-disk">Using a RAM disk</h3>
<p>Since you will be writing and reading a lot of small files again and again and again from your disk, it might be beneficial for both performance as well as disk health to have at least your build folder in a virtual disk residing completely in your RAM. Personally I have not done that, but since the course staff recommends that, instructions can be found here. </p>
<p>If you are not sure the performance differs a lot, <a href="http://www.tekrevue.com/tip/how-to-create-a-4gbs-ram-disk-in-mac-os-x/">tekrevue.com</a> has a nice chart buried in their article, graphing the difference between a SSD and a RAM disk. To quote their post:</p>
<blockquote>
<p>As you can see, RAM Disks can offer power users an amazing level of performance, but it cannot be stressed enough the dangers of using volatile memory for data storage.</p>
</blockquote>
<p>To enable a RAM volume enter the following command:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># NAME: the name you want to assign, SIZE: 2048 * required amount of MegaBytes</span>
diskutil erasevolume HFS+ <span class="s1">'NAME'</span> <span class="sb">`</span>hdiutil attach -nomount ram://SIZE<span class="sb">`</span>
</code></pre></div>
<p>If you prefer a GUI for this task, the original author of this tip <a href="https://bogner.sh/2012/12/os-x-create-a-ram-disk-the-easy-way/">offers one free of charge</a>.</p>
<p><strong>Please make sure you always, always commit AND push your work if you’re working in RAM.</strong> Changes will be lost on computer shutdown, crash, freeze, etc. </p>
<blockquote>
<p>Changes are preserved during sleep and hibernate. ~Daniel</p>
</blockquote>
<h2 id="conclusion">Conclusion</h2>
<p>Working on OS X natively when developing SWEB is indeed possible for the usual use case. Developing and testing architectures different from <code>i686</code> however, e.g. the 64-bit build or <code>ARM</code> builds will still require you to use Linux (or asking your group members to work on those parts).</p>Preparing the Virtual Reality course at ICG2015-05-11T14:47:42+02:002016-05-31T11:45:00+02:00Alexander Skibatag:ghostlyrics.net,2015-05-11:/preparing-the-virtual-reality-course-at-icg.html<p>For a while now a lot of my time working was spent on preparing the technical part of a Virtual Reality course at ICG. Since the setup was fairly complex I thought a review might be interesting. </p>
<ul>
<li>This write-up contains notes on <code>fabric</code>, <code>puppet</code>, <code>apt</code>, <code>dpkg</code>, <code>reprepro</code>, <code>unattended-upgrades</code>, <code>synergy</code> and …</li></ul><p>For a while now a lot of my time working was spent on preparing the technical part of a Virtual Reality course at ICG. Since the setup was fairly complex I thought a review might be interesting. </p>
<ul>
<li>This write-up contains notes on <code>fabric</code>, <code>puppet</code>, <code>apt</code>, <code>dpkg</code>, <code>reprepro</code>, <code>unattended-upgrades</code>, <code>synergy</code> and <code>equalizer</code>.</li>
<li>I worked with <strong>Daniel Brajko</strong>, <strong>Bernhard Kerbl</strong> and <strong>Thomas Geymayer</strong> on this project.</li>
<li>This post was updated 5 times.</li>
</ul>
<h2 id="the-setup">The setup</h2>
<p>The students will be controlling 8 desktop-style computers (“clients”) as well as one additional desktop computer (“master”) which will be used to control the clients. The master is the single computer the students will be working on - it will provide a “terminal” into our 24 (+1) display videowall-cluster.</p>
<p>Each of the 8 computers is equipped with a current, good NVIDIA GPU (NVIDIA GTX 970) which powers 3 large, 1080p, stereo-enabled screens positioned vertically along a metal construction. The construction serves as the mount for the displays, the computer at its back as well as all cables. Additionally, each mount has been constructed to be easily and individually movable by attaching wheels to the bottom plate. The design of said constructions, as well as the planning, organization and the acquisition of all components was done by Daniel Brajko. (You can find a non-compressed version of the <a href="/images/icg-vrvu/IMG_1714.jpg">image here</a>.)</p>
<p><img alt="the videowall, switched off" src="/images/icg-vrvu/IMG_1714_compressed.jpg"></p>
<h2 id="preparation">Preparation</h2>
<p>I could go into detail here, how my colleague has planned and organized the new <code>Deskotheque</code> (that the name of the lab) as well as overseen the mobile mount construction. However, since I am very thankful for not having to deal with both shipping as well as assembly, I will spare that part. Instead I <em>will</em> tell how one of our researchers and I scrambled to get a demo working within little to no time.</p>
<p>All computers were set up with Ubuntu 14.04. We intended to use <a href="https://puppetlabs.com">puppet</a>, which was initially suggested by Dieter Schmalstieg, the head of our institute, from the start. At that time our puppet infrastructure was not yet ready, so I had to set up the computers individually. After installing <code>openssh-server</code> and copying my public key over to the computer I used Python <a href="https://pypi.python.org/pypi/Fabric/1.10.1">fabric</a> scripts I’ve written to execute the following command:</p>
<div class="highlight"><pre><span></span><code>fabric allow_passwordless_sudo:desko-admin
set_password_login:False change_password:local -H deskoN
</code></pre></div>
<p>This command accessed the host whose alias I had previously set up in my <code>~/.ssh/config</code>. The code for those commands can be found <a href="https://github.com/GhostLyrics/scripted">on Github</a>. <em>The desko-admin account has since been deleted.</em></p>
<p>A while later our puppet solution was ready and we connected those computers to puppet. There is a variety of tasks that is now handled by puppet:</p>
<ul>
<li>the ICG <code>apt</code> repository is used as additional source (<em>this happens before the <code>main</code> stage</em>)</li>
<li>a PPA is used as additional <code>apt</code> source to enable the latest NVIDIA drivers (<em>this happens before the <code>main</code> stage</em>)</li>
<li>NVIDIA drivers, a set of developer tools, a set of admin tools, the templates, binaries and libraries for the VRVU lecture are installed.</li>
<li><code>unattended_upgrades</code>, <code>ntp</code>, <code>openssh-server</code> are enabled and configured.</li>
<li><code>apport</code> is disabled. (<em>Because honestly, I have no clue why Ubuntu is shipping this pain enabled.</em>)</li>
<li>deskotheque users are managed</li>
<li>SSH public keys for administrative access are distributed</li>
</ul>
<h2 id="demos">Demos</h2>
<h3 id="first-impression">First impression</h3>
<p><em>If you don’t care for ranting about Ubuntu, please skip ahead to <a href="#moving-parts">moving parts</a>, thank you.</em> Setting up a different wallpaper for two or more different screens in Ubuntu happens to be a rather complicated task. For the first impression I needed to:</p>
<ul>
<li>log in as <code>desko-admin</code></li>
<li>create the <code>demo</code> user account</li>
<li>have <code>demo</code> log in automatically</li>
<li>log in via SSH as <code>desko-admin</code></li>
<li>add PPA for <code>nitrogen</code></li>
<li>install <code>nitrogen</code> and <code>gnome-tweak-tool</code></li>
<li>copy 3 distinct pictures to a given location on the system</li>
<li>log in as <code>demo</code></li>
<li>disable desktop-icons via <code>gnome-tweak-tool</code></li>
<li>set monitor positions (<em>do this the second time after doing it for <code>desko-admin</code> because monitor positions are account-specific. This, btw, is incredibly stupid.</em>)</li>
<li>set images via <code>nitrogen</code> (<em>because who would ever want to see two different pictures on his two screens, right?</em>)</li>
<li>disable the screen saver (<em>don’t want people having to log in over and over during work</em>)</li>
<li>enable autostart of <code>nitrogen</code> (<em>that’s right, we are only faking a desktop background by starting an application that runs in the background</em>)</li>
</ul>
<p>Only after this had been done for every single computer, a big picture was visible: all the small images formed one big photograph and made an impressive multi-screen wallpaper - <em>at least if you stood back far enough not to notice the pixels.</em> Getting a picture that’s <code>3*1080 x 8*1920</code> is rather hard, so we upscaled an existing one.</p>
<p>The result of this pain is: One switches on all computers and they all start displaying parts of the same picture, logged in via the same account. You can immediately start a demo using all screens with this user. (This procedure was made even more simple by having puppet deploy <code>SSH</code> public and private keys for this user - so you instantly jump from one deskotheque computer to another if you’re <code>demo</code>.)</p>
<h3 id="moving-parts">Moving parts</h3>
<p>For the first big demo for a selected number of people during <a href="http://www.icg.tugraz.at/News/join-us-for-warm-2015">WARM 2015</a> I
worked together with Thomas Geymayer which is the main developer of our in-house fork of <a href="http://synergy-project.org/">synergy</a> on setting up said program. It took us some attempts to get everything working in the first place since he had used Ubuntu 14.10 for development. The cluster however used the current 14.04 LTS I had rolled out earlier. Since by then the puppet solution wasn’t ready, we spent two frantic days copying, trying, compiling, trying again and copying via <code>SFTP</code> between the individual nodes in order to get everything to work properly. Thomas had to rework some of the implementation since our fork was originally invented for presenting, not remote-control of several devices which he did in admirably little time. Though we had some issues during the presentation the attendees seemed interested and impressed by our setup.</p>
<p>Soon after that deadline I prioritized finishing our puppet solution since I got very, <em>very</em> annoyed manually syncing directories.</p>
<h2 id="equalizer">Equalizer</h2>
<p>Bernhard Kerbl wanted to work with <a href="http://www.equalizergraphics.com">the Equalizer framework</a> in order to enable complex rendering tasks. Each of the computers in the cluster is supposed to compute a single part of the whole image (or rather 3 parts given that 3 monitors are connected to each node). The parts of the whole image must be synchronized by the master, so that the whole image makes sense (e.g. no parts of the image may be further ahead in a timeline than the others). Usually I expect bigger projects to either offer Ubuntu packages, prebuilt Linux binaries or even a PPA. Their PPA doesn’t offer packages for the current Ubuntu LTS though, so we ended up compiling everything ourselves.</p>
<p>That took a while, even after figuring out that one can <code>make apt-get</code> and use Ubuntu packages instead of compiling libraries like <code>boost</code> from source. After some trial and error we arrived at a portable (by which I mean “portable between systems in the cluster”) solution. I packaged that version using <a href="https://github.com/jordansissel/fpm">fpm</a>. Since the students will be using the headers and libraries in the framework we could not simple ship that package and be done with it, we also had to ensure that everything could be compiled and run without issue. The result of that is a package with equalizer libraries and almost everything else that was built which has a sheer endless list of dependencies since we had to include both buildtime and runtime dependencies.</p>
<p>In order to package everything, we installed all the depencies, built out of source and packaged everything with <code>fpm</code>.</p>
<div class="highlight"><pre><span></span><code>fpm <span class="se">\</span>
-t deb <span class="se">\</span>
-s dir <span class="se">\</span>
--name <span class="s2">"vrvu-equalizer"</span> <span class="se">\</span>
--version <span class="s2">"1.0.1"</span> <span class="se">\</span>
--license <span class="s2">"LGPL"</span> <span class="se">\</span>
--vendor <span class="s2">"ICG TU Graz"</span> <span class="se">\</span>
--category <span class="s2">"devel"</span> <span class="se">\</span>
--architecture <span class="s2">"amd64"</span> <span class="se">\</span>
--maintainer <span class="s2">"Alexander Skiba <skiba@icg.tugraz.at>"</span> <span class="se">\</span>
--url <span class="s2">"https://gitlab.icg.tugraz.at/administrators/script-collection"</span> <span class="se">\</span>
--description <span class="s2">"Compiled Equalizer and dependency libraries for LV VRVU</span>
<span class="s2">"</span> <span class="se">\</span>
--exclude <span class="s2">"vrvu-equalizer.sh"</span> <span class="se">\</span>
--exclude <span class="s2">"opt.zip"</span> <span class="se">\</span>
--verbose <span class="se">\</span>
-d debhelper <span class="se">\</span>
-d dh-apparmor <span class="se">\</span>
-d gir1.2-gtk-2.0 <span class="se">\</span>
-d icu-devtools <span class="se">\</span>
-d libaacs0 <span class="se">\</span>
-d libarmadillo4 <span class="se">\</span>
-d libarpack2 <span class="se">\</span>
-d libatk1.0-dev <span class="se">\</span>
-d libavahi-client-dev <span class="se">\</span>
-d libavahi-common-dev <span class="se">\</span>
-d libavahi-compat-libdnssd1 <span class="se">\</span>
-d libavcodec-dev <span class="se">\</span>
-d libavcodec54 <span class="se">\</span>
-d libavdevice53 <span class="se">\</span>
-d libavformat-dev <span class="se">\</span>
-d libavformat54 <span class="se">\</span>
-d libavutil-dev <span class="se">\</span>
-d libavutil52 <span class="se">\</span>
-d libbison-dev <span class="se">\</span>
-d libblas3 <span class="se">\</span>
-d libbluray1 <span class="se">\</span>
-d libboost-date-time1.54-dev <span class="se">\</span>
-d libboost-program-options1.54-dev <span class="se">\</span>
-d libboost-program-options1.54.0 <span class="se">\</span>
-d libboost-regex1.54-dev <span class="se">\</span>
-d libboost-regex1.54.0 <span class="se">\</span>
-d libboost-serialization1.54-dev <span class="se">\</span>
-d libboost-serialization1.54.0 <span class="se">\</span>
-d libboost-system1.54-dev <span class="se">\</span>
-d libboost1.54-dev <span class="se">\</span>
-d libc6 <span class="se">\</span>
-d libcairo-script-interpreter2 <span class="se">\</span>
-d libcairo2-dev <span class="se">\</span>
-d libcoin80 <span class="se">\</span>
-d libcv-dev <span class="se">\</span>
-d libcvaux-dev <span class="se">\</span>
-d libdap11 <span class="se">\</span>
-d libdapclient3 <span class="se">\</span>
-d libdbus-1-dev <span class="se">\</span>
-d libdc1394-22 <span class="se">\</span>
-d libdc1394-22-dev <span class="se">\</span>
-d libdrm-dev <span class="se">\</span>
-d libepsilon1 <span class="se">\</span>
-d libexpat1-dev <span class="se">\</span>
-d libfaad2 <span class="se">\</span>
-d libfl-dev <span class="se">\</span>
-d libfontconfig1-dev <span class="se">\</span>
-d libfreetype6-dev <span class="se">\</span>
-d libfreexl1 <span class="se">\</span>
-d libgdal1h <span class="se">\</span>
-d libgdk-pixbuf2.0-dev <span class="se">\</span>
-d libgeos-3.4.2 <span class="se">\</span>
-d libgeos-c1 <span class="se">\</span>
-d libgfortran3 <span class="se">\</span>
-d libgif4 <span class="se">\</span>
-d libglew-dev <span class="se">\</span>
-d libglewmx-dev <span class="se">\</span>
-d libglib2.0-dev <span class="se">\</span>
-d libglu1-mesa-dev <span class="se">\</span>
-d libgraphicsmagick3 <span class="se">\</span>
-d libgsm1 <span class="se">\</span>
-d libgtk2.0-dev <span class="se">\</span>
-d libgtkglext1 <span class="se">\</span>
-d libharfbuzz-dev <span class="se">\</span>
-d libharfbuzz-gobject0 <span class="se">\</span>
-d libhdf4-0-alt <span class="se">\</span>
-d libhdf5-7 <span class="se">\</span>
-d libhighgui-dev <span class="se">\</span>
-d libhwloc-plugins <span class="se">\</span>
-d libhwloc5 <span class="se">\</span>
-d libibverbs1 <span class="se">\</span>
-d libice-dev <span class="se">\</span>
-d libicu-dev <span class="se">\</span>
-d libilmbase-dev <span class="se">\</span>
-d libilmbase6 <span class="se">\</span>
-d libiso9660-8 <span class="se">\</span>
-d libjasper-dev <span class="se">\</span>
-d libjbig-dev <span class="se">\</span>
-d libjpeg-dev <span class="se">\</span>
-d libjpeg-turbo8-dev <span class="se">\</span>
-d libjpeg8-dev <span class="se">\</span>
-d libkml0 <span class="se">\</span>
-d liblapack3 <span class="se">\</span>
-d liblzma-dev <span class="se">\</span>
-d libmad0 <span class="se">\</span>
-d libmail-sendmail-perl <span class="se">\</span>
-d libmng2 <span class="se">\</span>
-d libmodplug1 <span class="se">\</span>
-d libmp3lame0 <span class="se">\</span>
-d libmpcdec6 <span class="se">\</span>
-d libmysqlclient18 <span class="se">\</span>
-d libnetcdfc7 <span class="se">\</span>
-d libodbc1 <span class="se">\</span>
-d libogdi3.2 <span class="se">\</span>
-d libopencv-calib3d-dev <span class="se">\</span>
-d libopencv-calib3d2.4 <span class="se">\</span>
-d libopencv-contrib-dev <span class="se">\</span>
-d libopencv-contrib2.4 <span class="se">\</span>
-d libopencv-core-dev <span class="se">\</span>
-d libopencv-core2.4 <span class="se">\</span>
-d libopencv-features2d-dev <span class="se">\</span>
-d libopencv-features2d2.4 <span class="se">\</span>
-d libopencv-flann-dev <span class="se">\</span>
-d libopencv-flann2.4 <span class="se">\</span>
-d libopencv-gpu-dev <span class="se">\</span>
-d libopencv-gpu2.4 <span class="se">\</span>
-d libopencv-highgui-dev <span class="se">\</span>
-d libopencv-highgui2.4 <span class="se">\</span>
-d libopencv-imgproc-dev <span class="se">\</span>
-d libopencv-imgproc2.4 <span class="se">\</span>
-d libopencv-legacy-dev <span class="se">\</span>
-d libopencv-legacy2.4 <span class="se">\</span>
-d libopencv-ml-dev <span class="se">\</span>
-d libopencv-ml2.4 <span class="se">\</span>
-d libopencv-objdetect-dev <span class="se">\</span>
-d libopencv-objdetect2.4 <span class="se">\</span>
-d libopencv-ocl-dev <span class="se">\</span>
-d libopencv-ocl2.4 <span class="se">\</span>
-d libopencv-photo-dev <span class="se">\</span>
-d libopencv-photo2.4 <span class="se">\</span>
-d libopencv-stitching-dev <span class="se">\</span>
-d libopencv-stitching2.4 <span class="se">\</span>
-d libopencv-superres-dev <span class="se">\</span>
-d libopencv-superres2.4 <span class="se">\</span>
-d libopencv-ts-dev <span class="se">\</span>
-d libopencv-ts2.4 <span class="se">\</span>
-d libopencv-video-dev <span class="se">\</span>
-d libopencv-video2.4 <span class="se">\</span>
-d libopencv-videostab-dev <span class="se">\</span>
-d libopencv-videostab2.4 <span class="se">\</span>
-d libopencv2.4-java <span class="se">\</span>
-d libopencv2.4-jni <span class="se">\</span>
-d libopenexr-dev <span class="se">\</span>
-d libopenexr6 <span class="se">\</span>
-d libopenjpeg2 <span class="se">\</span>
-d libopenscenegraph99 <span class="se">\</span>
-d libopenthreads-dev <span class="se">\</span>
-d libopenthreads14 <span class="se">\</span>
-d libopus0 <span class="se">\</span>
-d libpango1.0-dev <span class="se">\</span>
-d libpci-dev <span class="se">\</span>
-d libpcre3-dev <span class="se">\</span>
-d libpcrecpp0 <span class="se">\</span>
-d libpixman-1-dev <span class="se">\</span>
-d libpng12-dev <span class="se">\</span>
-d libpostproc52 <span class="se">\</span>
-d libpq5 <span class="se">\</span>
-d libproj0 <span class="se">\</span>
-d libpthread-stubs0-dev <span class="se">\</span>
-d libqt4-dev-bin <span class="se">\</span>
-d libqt4-opengl-dev <span class="se">\</span>
-d libqt4-qt3support <span class="se">\</span>
-d libqtwebkit-dev <span class="se">\</span>
-d libraw1394-dev <span class="se">\</span>
-d libraw1394-tools <span class="se">\</span>
-d librdmacm1 <span class="se">\</span>
-d libschroedinger-1.0-0 <span class="se">\</span>
-d libsm-dev <span class="se">\</span>
-d libspatialite5 <span class="se">\</span>
-d libspnav0 <span class="se">\</span>
-d libswscale-dev <span class="se">\</span>
-d libswscale2 <span class="se">\</span>
-d libsys-hostname-long-perl <span class="se">\</span>
-d libtbb2 <span class="se">\</span>
-d libtiff5-dev <span class="se">\</span>
-d libtiffxx5 <span class="se">\</span>
-d libudt0 <span class="se">\</span>
-d liburiparser1 <span class="se">\</span>
-d libva1 <span class="se">\</span>
-d libvcdinfo0 <span class="se">\</span>
-d libx11-doc <span class="se">\</span>
-d libx11-xcb-dev <span class="se">\</span>
-d libx264-142 <span class="se">\</span>
-d libxau-dev <span class="se">\</span>
-d libxcb-dri2-0-dev <span class="se">\</span>
-d libxcb-dri3-dev <span class="se">\</span>
-d libxcb-glx0-dev <span class="se">\</span>
-d libxcb-present-dev <span class="se">\</span>
-d libxcb-randr0-dev <span class="se">\</span>
-d libxcb-render0-dev <span class="se">\</span>
-d libxcb-shape0-dev <span class="se">\</span>
-d libxcb-shm0-dev <span class="se">\</span>
-d libxcb-sync-dev <span class="se">\</span>
-d libxcb-xfixes0-dev <span class="se">\</span>
-d libxcb1-dev <span class="se">\</span>
-d libxcomposite-dev <span class="se">\</span>
-d libxcursor-dev <span class="se">\</span>
-d libxdamage-dev <span class="se">\</span>
-d libxdmcp-dev <span class="se">\</span>
-d libxerces-c3.1 <span class="se">\</span>
-d libxext-dev <span class="se">\</span>
-d libxfixes-dev <span class="se">\</span>
-d libxft-dev <span class="se">\</span>
-d libxi-dev <span class="se">\</span>
-d libxine2 <span class="se">\</span>
-d libxine2-bin <span class="se">\</span>
-d libxine2-doc <span class="se">\</span>
-d libxine2-ffmpeg <span class="se">\</span>
-d libxine2-misc-plugins <span class="se">\</span>
-d libxine2-plugins <span class="se">\</span>
-d libxinerama-dev <span class="se">\</span>
-d libxml2-dev <span class="se">\</span>
-d libxml2-utils <span class="se">\</span>
-d libxrandr-dev <span class="se">\</span>
-d libxrender-dev <span class="se">\</span>
-d libxshmfence-dev <span class="se">\</span>
-d libxvidcore4 <span class="se">\</span>
-d libxxf86vm-dev <span class="se">\</span>
-d mesa-common-dev <span class="se">\</span>
-d mysql-common <span class="se">\</span>
-d ocl-icd-libopencl1 <span class="se">\</span>
-d odbcinst <span class="se">\</span>
-d odbcinst1debian2 <span class="se">\</span>
-d opencv-data <span class="se">\</span>
-d po-debconf <span class="se">\</span>
-d proj-bin <span class="se">\</span>
-d proj-data <span class="se">\</span>
-d qt4-linguist-tools <span class="se">\</span>
-d qt4-qmake <span class="se">\</span>
-d x11proto-composite-dev <span class="se">\</span>
-d x11proto-core-dev <span class="se">\</span>
-d x11proto-damage-dev <span class="se">\</span>
-d x11proto-dri2-dev <span class="se">\</span>
-d x11proto-fixes-dev <span class="se">\</span>
-d x11proto-gl-dev <span class="se">\</span>
-d x11proto-input-dev <span class="se">\</span>
-d x11proto-kb-dev <span class="se">\</span>
-d x11proto-randr-dev <span class="se">\</span>
-d x11proto-render-dev <span class="se">\</span>
-d x11proto-xext-dev <span class="se">\</span>
-d x11proto-xf86vidmode-dev <span class="se">\</span>
-d x11proto-xinerama-dev <span class="se">\</span>
-d xorg-sgml-doctools <span class="se">\</span>
-d xtrans-dev <span class="se">\</span>
-d zlib1g-dev <span class="se">\</span>
.
</code></pre></div>
<p>In the last weeks before this article, I’ve seen a 3D rendering on almost all screens of the cluster which was great. I enjoy seeing people use systems I helped building.</p>
<h2 id="puppet-apt-or-dpkg">Puppet: apt or dpkg</h2>
<p>Having a prepared .DEB file didn’t solve all my trouble though. I had two options for installing the file via puppet: <code>apt</code> or <code>dpkg</code>. Well, this was troubling. <code>dpkg</code> does not understand dependencies if used in this way - a bad thing given that the dependencies of our <code>vrvu-equalizer</code> package were a pretty long list. <code>apt</code> however didn’t offer to use a <code>source</code> parameter - therefore we had to offer a way to install the package from a repository.</p>
<p>After a bit of research I decided to set up an in-house repository for the institute, hosting those packages which we cannot comfortably use from other sources. At the time of this writing it holds patched versions of <code>unattended-upgrades</code> for <em>Trusty</em>, <em>Precise</em>, <em>Wheezy</em> and <em>Jessie</em> as well as our <code>vrvu-equalizer</code> version for <em>Trusty</em>. (I recommend against using our repository for your computers since I haven’t found the time to repair the slightly broken <code>unattended-upgrades</code> for systems other than <em>Jessie</em>.)</p>
<div class="highlight"><pre><span></span><code>deb https://data.icg.tugraz.at/packages <codename> main
</code></pre></div>
<p>I created the repository using <a href="http://mirrorer.alioth.debian.org">reprepro</a> and we sign our packages with the following key: <a href="https://data.icg.tugraz.at/packages/ICG-packages.key">https://data.icg.tugraz.at/packages/ICG-packages.key</a>.</p>
<h2 id="unattended-upgrades">Unattended-upgrades</h2>
<p>I’ve automated installation of upgrades on most of our Linux based machines at the institute mostly due to the fact that I don’t want to babysit package upgrades when security critical updates are released. <em>*cough* openssl *cough*</em> However, I’ve run into one problematic issue. I’ve run out of space on the <code>/boot</code> partition due to frequent kernel updates which don’t remove the previous kernels.</p>
<p>I’ve since set the <code>Remove-unused-dependencies</code> parameter, but that didn’t do everything I wanted. This parameter only instructs the script to remove dependencies that happen to be no longer needed <strong>during this run</strong>. Dependencies which were “orphaned” before the current run will be ignored. This means that manual upgrades have the potential to lead to orphaned packages which remain on the system permanently.</p>
<p>Since the <code>unattended-upgrades</code> script is written in Python, I took a stab at implementing the functionality I wanted to have for use with our installations. After I had done that, I packaged everything for Ubuntu Precise Pangolin, Ubuntu Trusty Tahr and Debian Wheezy and put everything in our ICG <code>apt</code> repository to have it automatically installed.</p>
<h2 id="unattended-upgrades-again">Unattended-upgrades, again</h2>
<p>A review of my previous modification to <code>unattended-upgrades</code> was necessary since <code>root</code> kept getting mail from the cronjob associated with <code>unattended-upgrades</code> even though I had specifically instructed the package via puppet to only do so in case of errors. Still, every few days, we would get emails containing the output of the script. Here’s an example.</p>
<div class="highlight"><pre><span></span><code>/etc/cron.daily/apt:
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin:
(Reading database ... 117338 files and directories currently installed.)
Preparing to replace subversion 1.6.17dfsg-4+deb7u8 (using .../subversion_1.6.17dfsg-4+deb7u9_amd64.deb) ...
Unpacking replacement subversion ...
Preparing to replace libsvn1:amd64 1.6.17dfsg-4+deb7u8 (using .../libsvn1_1.6.17dfsg-4+deb7u9_amd64.deb) ...
Unpacking replacement libsvn1:amd64 ...
Processing triggers for man-db ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
Setting up libsvn1:amd64 (1.6.17dfsg-4+deb7u9) ...
Setting up subversion (1.6.17dfsg-4+deb7u9) ...
</code></pre></div>
<p>I am currently in the process of solving this by rewriting my modification in a cleaner, more structured way - a way which is a lot more influenced by the original script, keeping in mind that the necessary environment variable for <code>debconf</code> is set in the execution path. </p>
<p>My initial error with this was that <code>cache.commit()</code> in the script <em>immediately applied all changes</em> made to the cache. While I intended to only apply the deletion of marked packages at the point of my call to the method, this meant that all changes got applied - even those for installing/upgrading new packages. The script returned prematurely and <code>stdout</code> got written to. This in term meant that <code>root</code> would get mail, since <code>root</code> always receives mail of cronjobs produce output.</p>
<p><strong>Update 1:</strong> While my current progress does no longer call <code>commit</code> prematurely, it still sends me e-mails. I probably forgot to <code>return True</code> somewhere.</p>
<p><strong>Update 2:</strong> In the meantime I think I fixed that issue by returning the success status of the auto-removal process and assigning it to the <code>pkg_install_success</code> variable if it does not already contain an error.</p>
<p><strong>Update 3:</strong> Fixed every issue I found and submitted a <a href="https://github.com/mvo5/unattended-upgrades/pull/6">pull request</a> on Github. However, I don’t know if it will be accepted since I implemented my preferred behaviour instead of the old one. I am not sure whether I should’ve added an additional parameter instead.</p>
<p><strong>Update 4:</strong> Pull request was merged. Unfortunately I will be stuck patching my older systems, however.</p>
<p><strong>Update 5:</strong> The change in behaviour implemented by me has been cherry-picked for both Ubuntu Trusty and Ubuntu Precise, both currently active LTS versions during the time of this writing, so I’m quite proud of my contribution having such a great reach and have removed the patched versions from the ICG repositories.</p>Media Recap: Q1 20152015-05-03T16:06:27+02:002015-05-03T16:06:27+02:00Alexander Skibatag:ghostlyrics.net,2015-05-03:/media-recap-q1-2015.html<p>It’s all there. Great books, diverse games, some movies and a whole lot of educational presentations.</p>
<!--more-->
<h2 id="video-games">Video Games</h2>
<p>I’m trying something different this year: In order to avoid buying loads of games that I don’t play at all, I only buy one game per month. <em>I’m …</em></p><p>It’s all there. Great books, diverse games, some movies and a whole lot of educational presentations.</p>
<!--more-->
<h2 id="video-games">Video Games</h2>
<p>I’m trying something different this year: In order to avoid buying loads of games that I don’t play at all, I only buy one game per month. <em>I’m blaming all those Steam sales for that one.</em> Furthermore, that game is mostly something that’s at least partially randomly generated and without much story content. This is in order to have some shorter games while I play the longer, story-heavy titles (of which I possess quite a collection) together with my girlfriend. <em>In essence, I want to avoid replaying and therefor sucking the fun out of great stories.</em></p>
<ul>
<li><a href="http://store.steampowered.com/app/235800/">Audiosurf 2</a> (Steam, Early Access) - Enjoyable. Still needs work though. Game sometimes crashes, <em>autofind music</em> <a href="http://ghostlyrics.net/2015/01/15/a-letter-to-the-dev-thoughts-about-audiosurf-2s-autofind-music/">is problematic</a>. Updates unfortunately very infrequently.</li>
<li><a href="http://store.steampowered.com/app/204240/">The Bridge</a> (XBLA, link goes to Steam) - Puzzling Puzzles. Non of them obvious. Gimmick is rotating the screen to abuse gravity. Solved together without looking up solutions.</li>
<li><a href="http://store.steampowered.com/app/248390/">Craft the World</a> (Steam) - Tried campaign, got frustrated rather quickly, so maxed out tech tree in a sandbox game, lost interest after that.</li>
<li><a href="http://store.steampowered.com/app/262060/">Darkest Dungeon</a> (Steam, Early Access) - <strong>Strong Recommendation</strong>, dark, gritty, hard. Works well. Updates frequently.</li>
<li><a href="http://store.steampowered.com/app/249050/">Dungeon of the Endless</a> (Steam, free weekend)</li>
<li><a href="http://store.steampowered.com/app/306130/">The Elder Scrolls Online: Tamriel Unlimited</a> (“Welcome back” weekend) - For some reason TES:Online fails to entertain me every time I try it, be it the beta back then, or this recent free weekend.</li>
<li><a href="https://www.playstation.com/en-us/games/kingdom-hearts-hd-15-remix-ps3/">Kingdom Hearts 1 Final Mix HD</a> (PS3, part of Kingdom Hearts 1.5 HD ReMIX collection) - <em>Simple and Clean</em>.</li>
<li><a href="https://www.playstation.com/en-us/games/kingdom-hearts-hd-15-remix-ps3/">Kingdom Hearts Re:Chain of Memories HD</a> (PS3, part of Kingdom Hearts 1.5 HD ReMIX collection)</li>
<li><a href="https://www.playstation.com/en-us/games/ratchet-and-clank-collection-ps3/">Ratchet & Clank HD</a> (PS3, part of Ratchet & Clank collection) - Tried to get more achievements. Whoever drafted “Get 1.000.000 bolts” seemed not have had any idea just how long that was going to take.</li>
<li><a href="http://store.steampowered.com/app/216210/">Secret Files 3</a> (Steam) - Tried this one with my parents and the girlfriend as entertainment for an evening instead of agreeing on a movie. Mild success, but the parents said it was refreshingly different to watching a movie. We sat on the large couch together and collaboratively solved riddles. I liked that quite a lot.</li>
<li><a href="http://store.steampowered.com/app/305640/">Shattered Planet</a> (Steam) - Bought recently. Seems laden with puns and pop culture references, <em>which is a good thing</em>.</li>
<li><a href="http://store.steampowered.com/app/304650/">Sunless Sea</a> (Steam, was Early Access) - I need to figure out how to make this less blurry on my Retina screen.</li>
<li><a href="http://store.steampowered.com/app/303800/">The Witcher Adventure Game</a> (Steam) - Successfully got the girlfriend interested in the Witcher books with this digital board game.</li>
</ul>
<p>In addition to playing the Kingdom Hearts games, we also watched the Kingdom Hearts 358/2 Days videos that come with the 1.5 HD ReMIX, in order to get a grasp of what happened in that game. I was tempted to make sense of both timeline and canon of Kingdom Hearts here, but remembered better than to do that for a series that convoluted.</p>
<h2 id="books">Books</h2>
<ul>
<li><a href="http://web.law.duke.edu/cspd/comics/">Bound by Law</a> by <strong>James Boyle, Jennifer Jenkins and Keith Aoki</strong> - Great comic about copyright law in the US. </li>
<li><a href="https://www.goodreads.com/book/show/10256723-ghost-in-the-wires">Ghost in the Wires</a> by <strong>Kevin Mitnick</strong> - Enlightening insight into social engineering.</li>
<li><a href="https://www.goodreads.com/book/show/18386402-halloween-frost">Halloween Frost</a> by <strong>Jennifer Estep</strong> - Mythos Academy bonus material</li>
<li><a href="https://www.goodreads.com/book/show/17310548-saved-at-sunrise">Saved at Sunrise</a> by <strong>C.C. Hunter</strong> - Shadow Falls bonus material</li>
</ul>
<h3 id="daniel-faust">Daniel Faust</h3>
<p>I first came across Daniel Faust <strong>by Craig Schaefer</strong> in the newsletter of <a href="http://storybundle.com/">StoryBundle</a> a pay-what-you-want book sale similar to the popular Humble Bundle. For some reason I can’t quite put a finger on, I never use these opportunities but end up buying single titles of such bundles later. I put a few books onto my reading list.</p>
<p>Right after I finished the first book and even while I was still considering if this was inspired by Constantine or just stealing ideas I ordered the next and then the next in the series. I heartily recommend books in the Daniel Faust universe if you happen to like mature, demon-infested novels.</p>
<ul>
<li><a href="https://www.goodreads.com/book/show/22743827-the-long-way-down">The Long Way Down</a></li>
<li><a href="https://www.goodreads.com/book/show/22470217-redemption-song">Redemption Song</a></li>
<li><a href="https://www.goodreads.com/book/show/22979810-the-living-end">The Living End</a></li>
<li><a href="https://www.goodreads.com/book/show/24539372-a-plain-dealing-villain">A Plain-Dealing Villain</a></li>
</ul>
<h2 id="web-series">Web Series</h2>
<p>This time the Extra Credits team’s Extra History section was another mini-series spanning 5 episodes the South Sea Bubble in England. There doesn’t seem to be a link to only this section, so here’s the <a href="https://www.youtube.com/playlist?list=PLhyKYa0YJ_5Aq7g4bil7bnGi0A8gTsawu">full Extra History playlist</a>.</p>
<p>Until recently I haven’t been aware of Youtube gaming celebrity TotalBiscuit, the cynical brit. While opinions about his personality may differ, I find his “<a href="https://www.youtube.com/playlist?list=PLTFohR7GUZYcD8t4bbSKYpnsjMWf19Qgo">WTF is …?</a>” a good overview of recent games.</p>
<ul>
<li>Bloodsports TV</li>
<li>Convoy</li>
<li>Hand of Fate</li>
<li>Hero Generations</li>
<li>Ironcast</li>
<li>Kaiju-A-GoGo</li>
<li>Sid Meier’s Starships</li>
<li>There Came an Echo</li>
<li>Sunless Sea</li>
<li>War for the Overworld</li>
</ul>
<p>Due to a recommendation I watched <a href="https://www.youtube.com/watch?v=XEVlyP4_11M">Last Week Tonight with John Oliver: Government Surveillance (HBO)</a> on Youtube, which I am not sure to recommend. It gives a frightening picture of the American people but is painfully embarrasing to watch.</p>
<h2 id="netflix">Netflix</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt1217209/">Brave</a> (DE: Merida - Legende der Highlands)</li>
<li><a href="http://www.imdb.com/title/tt0327597/">Coraline</a></li>
<li><a href="http://www.imdb.com/title/tt0360486/">Constantine</a></li>
<li><a href="http://www.imdb.com/title/tt0892769/">How to Train Your Dragon</a> (DE: Drachenzähmen leicht gemacht)</li>
<li><a href="http://www.imdb.com/title/tt1475582/">Sherlock</a> (two episodes) - I prefer the American <em>Elementary</em>.</li>
<li><a href="http://www.imdb.com/title/tt0412142/">House M.D.</a> (season 1 complete, season 2 about halfway)</li>
<li><a href="http://www.imdb.com/title/tt0487831/">IT Crowd</a> (one episode) - Absolute dislike.</li>
</ul>
<h2 id="31c3-presentations">31C3 Presentations</h2>
<p>After talking about the copier presentation at work I remembered having saved <a href="http://blog.fefe.de/?ts=aa5f9fea">Fefe’s recommendations</a> of 31C3 topics and had a look through that as well as the complete <a href="http://media.ccc.de/browse/congress/2014/">list of 31C3 talks</a> available for streaming at <a href="http://media.ccc.de">media.ccc.de</a>. Initially I was overwhelmed due to the amount of interesting presentations, but I moved most of the ones that sparked my curiosity to my Instapaper list anyway.</p>
<ul>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6154_-_en_-_saal_1_-_201412272300_-_crypto_tales_from_the_trenches_-_nadia_heninger_-_julia_angwin_-_laura_poitras_-_jack_gillum.html">Crypto Tales from the Trenches</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6369_-_en_-_saal_1_-_201412272145_-_ecchacks_-_djb_-_tanja_lange.html">ECCHacks</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6109_-_de_-_saal_1_-_201412290015_-_fnord_news_show_-_frank_-_fefe.html">Fnord News Show</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6541_-_en_-_saal_2_-_201412281730_-_forging_the_usb_armory_-_andrea_barisani.html">Forging the USB Armory</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6071_-_en_-_saal_g_-_201412281730_-_hacking_ethics_in_education_-_jeroen_van_der_ham.html">Hacking Ethics in Education</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6205_-_en_-_saal_1_-_201412292330_-_infocalypse_now_p0wning_stuff_is_not_enough_-_walter_van_holst.html">Infocalypse now: P0wning stuff is not enough</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6530_-_en_-_saal_6_-_201412272145_-_in_security_of_mobile_banking_-_ericfiliol_-_paul_irolla.html">(In)Security of Mobile Banking</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6585_-_en_-_saal_2_-_201412282145_-_inside_field_station_berlin_teufelsberg_-_bill_scannell.html">Inside Field Station Berlin Teufelsberg</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6370_-_en_-_saal_g_-_201412281900_-_internet_of_toilets_-_tbsprs.html">Internet of toilets</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6597_-_en_-_saal_2_-_201412301600_-_now_i_sprinkle_thee_with_crypto_dust_-_ryan_lackey_-_andres_erbsen_-_jurre_van_bergen_-_ladar_levison_-_equinox.html">Now I sprinkle thee with crypto dust</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6430_-_de_-_saal_2_-_201412291130_-_nsa_points_of_presence_in_at_-_erich_moechel.html">NSA Points of Presence in AT</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6258_-_en_-_saal_1_-_201412282030_-_reconstructing_narratives_-_jacob_-_laura_poitras.html">Reconstructing narratives</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6344_-_en_-_saal_1_-_201412281400_-_security_analysis_of_estonia_s_internet_voting_system_-_j_alex_halderman.html">Security Analysis of Estonia’s Internet Voting System</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6010_-_en_-_saal_1_-_201412271400_-_scada_strangelove_too_smart_grid_in_da_cloud_-_sergey_gordeychik_-_aleksandr_timorin.html">SCADA StrangeLove: Too Smart Grid in da Cloud</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6572_-_de_-_saal_1_-_201412301715_-_security_nightmares_-_frank_-_ron.html">Security Nightmares</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6243_-_en_-_saal_1_-_201412292200_-_the_perl_jam_exploiting_a_20_year-old_vulnerability_-_netanel_rubin.html">The Perl Jam: Exploiting a 20 Year-old Vulnerability</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6128_-_en_-_saal_1_-_201412291830_-_thunderstrike_efi_bootkits_for_apple_macbooks_-_trammell_hudson.html">Thunderstrike: EFI bootkits for Apple Macbooks</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6558_-_de_-_saal_g_-_201412282300_-_traue_keinem_scan_den_du_nicht_selbst_gefalscht_hast_-_david_kriesel.html">Traue keinem Scan, den du nicht selbst gefälscht hast</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6294_-_de_-_saal_1_-_201412281815_-_vor_windows_8_wird_gewarnt_-_ruedi.html">Vor Windows 8 wird gewarnt</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6297_-_en_-_saal_6_-_201412301600_-_virtual_machine_introspection_-_tamas_k_lengyel_-_thomas_kittel.html">Virtual Machine Introspection</a></li>
<li><a href="http://media.ccc.de/browse/congress/2014/31c3_-_6021_-_en_-_saal_g_-_201412281130_-_why_is_gpg_damn_near_unusable_-_arne_padmos.html">Why is GPG “damn near unusable”?</a></li>
</ul>
<p>I watched too many talks to be able to pick a definitive best. If I had to pick one for entertainment value I’d suggest <a href="http://media.ccc.de/browse/congress/2014/31c3_-_6558_-_de_-_saal_g_-_201412282300_-_traue_keinem_scan_den_du_nicht_selbst_gefalscht_hast_-_david_kriesel.html">the one about copier errors</a>, since it was both hilarious and less technical, so can be recommended to people who are not tech nerds too.</p>
<h2 id="lets-play">Let’s Play</h2>
<ul>
<li>Final Fantasy VIII</li>
<li><a href="http://lparchive.org/Shin-Megami-Tensei-Devil-Survivor-2/">Shin Megami Tensei Devil Survivor 2</a> - Forced myself through most of this. Pretty boring as an LP. Sorry.</li>
</ul>
<h2 id="official-game-additions">Official Game Additions</h2>
<p>In order to obtain both the soundtrack as well as maps and other PDF material I acquired both Alan Wake and The Witcher 2. Have been reading comics, watching Making-Ofs and similar activities related to that fan material.</p>
<ul>
<li>Alan Wake</li>
<li>The Witcher 2</li>
</ul>
<!-- games -->
<!-- books -->
<!-- videos -->
<!-- 31C3 -->A Letter to the Dev: thoughts about Audiosurf 2's "Autofind Music"2015-01-15T11:02:42+01:002015-01-15T11:02:42+01:00Alexander Skibatag:ghostlyrics.net,2015-01-15:/a-letter-to-the-dev-thoughts-about-audiosurf-2s-autofind-music.html<blockquote>
<p>Dear Dylan,</p>
<p>First of all, I tremendously enjoy playing Audiosurf 2. I bought it as soon as it was available on OS X. I longed for that to happen since one of my favorite games I had to leave behind when switching operating systems was Audiosurf (1). While I personally …</p></blockquote><blockquote>
<p>Dear Dylan,</p>
<p>First of all, I tremendously enjoy playing Audiosurf 2. I bought it as soon as it was available on OS X. I longed for that to happen since one of my favorite games I had to leave behind when switching operating systems was Audiosurf (1). While I personally find Mono a little harder than in AS1 (or do I recall it having an “easy” mode?) I still love every minute I play.</p>
<p>However, I am of the confound impression that the “autofind music” feature is not well implemented. From <a href="http://steamcommunity.com/app/235800/discussions/0/622954302083755609/">this forum thread</a> I gather that before you were not scanning external disks. Right now, you are doing some things that are worse and will probably result in the scan never finishing its run. Here are some recommendations on how to make it better.</p>
<ul>
<li>Build either a blacklist or whitelist of folders, with the content of that varying by operating system (Windows, OS X, Linux)</li>
<li>Exclude system folders</li>
<li>Set a maximum amount of depth that you follow symlinks / NTFS junctions. The lower, the better.</li>
<li>Think about implementing a time-out. (This is not necessarily a good idea, just something to think about when you’re scanning for more than, say, 30 minutes.)</li>
</ul>
<p>Here are some suggestions for exclusions, prefixed by operating system for your convenience:</p>
<ul>
<li>OS X: ~/Library (contains preferences, caches, etc for your user account)</li>
<li>OS X: /Volumes/Time Machine (contains the external copy of time machine, the Apple provided backup system)</li>
<li>OS X: /Volumes/MobileBackups (contains the local version of time machine, enabled for all laptops on which Time Machine is active)</li>
<li>OS X: /Volumes/BOOTCAMP (NTFS volume which is there when someone enables dual-booting with Windows on their Mac)</li>
<li>OS X: Generally don’t read outside of a user’s home, unless it’s a portable device (/Volumes/…)</li>
<li>OS X: Don’t access hidden folders (starting with “.”)</li>
<li>Windows: C:\Windows (system components)</li>
<li>Windows: C:\Program Files (installation data)</li>
<li>Windows: C:\Program Files(x86) (installation data for 32bit applications on 64bit systems)</li>
<li>Windows: %appdata%, %localappdata% and %appdata%/…/locallow (<a href="http://windows.microsoft.com/en-us/windows-8/what-appdata-folder">Microsoft explains this better than I would</a>)</li>
<li>Linux: Generally don’t read outside of a user’s home, unless it’s a portable device (/mnt/…, /media/…, /mount/…)</li>
<li>Linux: Don’t access hidden folders (starting with “.”)</li>
</ul>
<p>I have built this list in order to try and help you make AS2 an even greater game which actually finishes automatically finding my music instead of digging through my local and external backups, accidentally indexing music that might be gone the next time and following potential symlink circles. I sincerely hope this helps you.</p>
<p>Regards
GhostLyrics</p>
</blockquote>
<p>I originally wrote this in the <a href="http://steamcommunity.com/app/235800/discussions/0/622954747288677117/">steam forums</a>, however it might be useful to keep around in case someone needs advice on the same topic.</p>Media Recap: Q4 20142015-01-02T21:47:35+01:002015-05-03T15:58:24+02:00Alexander Skibatag:ghostlyrics.net,2015-01-02:/media-recap-q4-2014.html<p>I have not stopped writing down my consumed media. Neither do I feel the need to stop sharing them with you. However, my current schedule happens to exhaust me a lot easier than previous ones. It is because of this change in workload and scheduling that I need to change …</p><p>I have not stopped writing down my consumed media. Neither do I feel the need to stop sharing them with you. However, my current schedule happens to exhaust me a lot easier than previous ones. It is because of this change in workload and scheduling that I need to change my <em>Media Recap</em> series to 4 times a year instead of every month. Here’s what I checked out in Q4 2014.</p>
<!--more-->
<h2 id="presentations">Presentations</h2>
<ul>
<li><a href="http://media.ccc.de/browse/congress/2013/30C3_-_5210_-_de_-_saal_g_-_201312282030_-_bullshit_made_in_germany_-_linus_neumann.html">Bullshit made in Germany</a> - Linus Neumann</li>
</ul>
<p>You need to have watched this presentation. I am fully aware than it seems long and sometimes long-winded but it is essential for your understanding why IT infrastructure is again and again undermined by politics. Germany’s De-Mail is just one of the examples why politics cannot be responsible for the security of data.</p>
<h2 id="movies">Movies</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt1464540/">I am Number 4</a> - okay.</li>
<li><a href="http://www.imdb.com/title/tt0325980/">Pirates of the Caribbean</a> - classic.</li>
<li><a href="http://www.imdb.com/title/tt0865556/">The Forbidden Kingdom</a> - mediocre.</li>
<li><a href="http://www.imdb.com/title/tt0903624/">The Hobbit: An Unexpected Journey</a> - fine.</li>
<li><a href="http://www.imdb.com/title/tt0424033/">Delphin Sommer</a> - uninteresting, boring.</li>
</ul>
<h2 id="tv-series">TV series</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt0455275/">Prison Break</a> S01, (S02)</li>
<li><a href="http://www.imdb.com/title/tt1830617/">Grimm</a> S01, S02</li>
<li><a href="http://www.imdb.com/title/tt2191671/">Elementary</a> S01</li>
</ul>
<p>We subscribe to Netflix and while the girlfriend mainly insists on watching movies together, I take the dive into a complete season of TV series from time to time. I’ve known Prison Break from TV back than but never got around. Elementary and Grimm play to my fondness of <em>Crime and Mystery</em>.</p>
<h2 id="games">Games</h2>
<ul>
<li>Guild Wars 2 - didn’t play a lot even though new story snippets were released, logged in at the end of the year to unlock the Wintersday tree for the home instance</li>
<li>Mass Effect 2 - finished one last playthrough, <em>please send help</em>. Girlfriend dragged me through this.</li>
<li>Fruit Ninja HD: Puss in Boots - Evergreen. Played one evening, broke own record.</li>
<li><a href="http://store.steampowered.com/app/248820/">Risk of Rain</a> - I suck at this. Devastatingly difficult. Still like it.</li>
<li><a href="http://store.steampowered.com/app/328730/">Letter Quest</a> - Scrabble-like combat system for a tiny RPG. Has obvious display of removed IAPs than were converted to in-game currency on the PC version. Adorable graphics, lots of fun but requires at least intermediate grasp of English language.</li>
<li>Ratchet & Clank - Nostalgia flash. Must’ve been more than 9 years ago that I played that one last. Bought on PSN during the holiday sale.</li>
<li>SSX - Needed to see whether this is a worthy successor to SSX 3. Mostly, it’s not. The dangers suck, the parks I’ve seen so far are not as over the top. I find it to be less fun than 3. It’s unnecessarily restrictive. A lot better than <a href="http://en.wikipedia.org/wiki/Stoked_(video_game)">Stoked</a> and <a href="http://en.wikipedia.org/wiki/Shaun_White_Snowboarding">Shaun White Snowboarding</a> however if you like non-realistic snowboarding. No buy if you dislike the Deadly Descents - <em>I certainly don’t.</em></li>
<li><a href="http://fallenlondon.storynexus.com">Fallen London</a> - I got into Fallen London. I soaked up its lore. I spent almost every minute of waiting during another activity playing the game. I even ended up converting a friend to the game and making item conversion tables to avoid more round-trips to the wiki.</li>
<li><a href="http://store.steampowered.com/app/304650/">Sunless Sea</a> - A gift from my girlfriend since I spend so much time and effort on Fallen London. I sure wish the game supported either a higher resolution or retina-level graphics given that has heavy emphasis on text <em>and</em> the text is awfully blurry on this glorious screen.</li>
</ul>
<h2 id="books">Books</h2>
<ul>
<li>John Siracusa: <a href="https://itunes.apple.com/at/book/os-x-10.10-yosemite-ars-technica/id928630628">OS X Yosemite: The Ars Technica review</a></li>
<li>C.C. Hunter: <a href="https://itunes.apple.com/at/book/turned-at-dark/id424009349">Turned at dark</a> is additional fodder for the ones curious about C.C. Hunter’s Shadow Falls universe.</li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<ul>
<li><a href="http://thegamedesignroundtable.com/2014/10/07/episode-100-failbetter-game-and-fallen-london/">The Game Design Round Table: 100 “Failbetter Games and Fallen London”</a> lured me into the rare podcast episode due to its connection with Fallen London.</li>
</ul>
<h2 id="web-series">Web series</h2>
<ul>
<li>Extra History - The Punic Wars</li>
<li>Extra History - The Seminal Tragedy</li>
<li>Extra History - Sengoku Jidai</li>
</ul>
<p><a href="http://youtu.be/EbBHk_zLTmY?list=PLhyKYa0YJ_5Aq7g4bil7bnGi0A8gTsawu">Extra History</a> uses the popular combination of humorous drawings with neatly narrated information for specific <strong>periods in history</strong> in the same entertaining way that Extra Credits already did for video game development insight.</p>
<h2 id="lets-plays">Let’s Plays</h2>
<ul>
<li><a href="http://lparchive.org/Dangan-Ronpa/">Dangan Ronpa</a> was a hilarious, insane and extremely weird read and reminded me strongly of the Persona series whose Lets Plays I enjoyed a lot in the past.</li>
</ul>State of e-mail 20142014-12-27T22:41:14+01:002014-12-27T22:41:14+01:00Alexander Skibatag:ghostlyrics.net,2014-12-27:/state-of-e-mail-2014.html<p>I’ve been chatting with <a href="https://twitter.com/stefan2904">@stefan2904</a> about mail clients recently and we came to the conclusion that we’re rather unsatisfied with the current status of desktop mailing software.</p>
<p>Only a few weeks back I’ve reorganized my complete e-mail workflow again. I’ve done this once before and it …</p><p>I’ve been chatting with <a href="https://twitter.com/stefan2904">@stefan2904</a> about mail clients recently and we came to the conclusion that we’re rather unsatisfied with the current status of desktop mailing software.</p>
<p>Only a few weeks back I’ve reorganized my complete e-mail workflow again. I’ve done this once before and it was unpleasant the first time, it was still annoying the second time. Moving your mails from one provider to another one is crappy, slow and error prone - the more advanced tools are complicated and not suited for an impatient mood. I’m not sure what the preferred tool for this task is but migrating your existing mails with Apple Mail or Thunderbird is every bit as shitty as it sounds. (CMD+A, drag to folder on other mail provider, wait for timeout to occur, repeat)</p>
<p>Anyway. My previous setup looked like this:</p>
<ul>
<li>IMAP (standard, or rather sub-standard) at my website host whose <a href="http://squirrelmail.org/screenshots.php">SquirrelMail</a> web interface is crappy and its filtering sucks in every single category you can think of, be that spam or rules for regular mail.</li>
<li>IMAP (standard, but somewhat better) <a href="http://www.horde.org/apps/webmail/screenshots">Horde</a> mail interface at my institute at university.</li>
<li>Exchange (the name is precisely the activity I wanted to do with it) mail for university, directly at university</li>
<li>iCloud IMAP (sub-standard) holy shit. I’ve wanted to switch to iCloud for its Push delivery of new mail to my iOS devices. <em>I’ve never before seen such a ridiculous spam-reporting technique.</em> You are supposed to forward mail that their filter has missed to a special address. iCloud really completely blocks spam instead of collecting it in a dedicated folder like Gmail does.</li>
</ul>
<p>In essence, I had all those accounts set up on all of my devices (3, about to become 4) and that led to the occasional confusion and a lot of micromanagement for identities and preferences when setting up a device or changing a tiny detail.</p>
<p>There were a few points I intensely disliked about former setup, the most annoying one getting spam onto my mobile phone. Since there is no automated spam filtering in the iOS world you have to rely on your server component. If your server part happens to be crap, you are syncing every tiny piece of unwanted mail to mobile devices regardless of its importance (read: spam is not important). That means more irrelevant notifications and less battery life. I arrived at this setup after realizing I wanted Push notifications for at least some of my mails. Newer versions of iOS do not provide Push for Gmail accounts, so I switched everything to iCloud.</p>
<p>However, working with multiple e-mail accounts, aliases and different push/fetch settings as well as redirects quickly proved painful and actively discouraged me from using my preferred address, the one associated with my domain.</p>
<h2 id="to-google-again">To Google again</h2>
<p>In order to remedy this, as well as get better push support I’ve moved back to Gmail. Since Gmail support for iOS is not exactly the best (although quite good) and the Gmail iOS app feels more like a wrapper arounds its website than a responsive app, I’ve also decided to make <a href="http://www.mailboxapp.com">Mailbox</a> my new mail client on both iOS and OS X (admittedly, the desktop version is only in beta stage at the moment but it works okay).</p>
<p>Another big reason for my renewed use of Gmail is its automated spam filtering: In contrast to other solutions which require you to follow a certain process for reporting spam Gmail allows you to simply move an unwanted mail to its Junk folder via IMAP. Learning will happen automatically on the server side. Let me repeat this again, so you can appreciate it better: <strong>There is no need to create rules or other procedures to combat spam other than marking unwanted mails as spam when they arrive.</strong></p>
<h3 id="what-works-great">What works great</h3>
<p>Swiping is a great interaction method for clearing messages quickly. Auto-swipes sync across your devices (as the should). While it would be preferable to have absolutely all filtering on the server-side, creating simple rules is extremely fast and very handy. Due to the Dropbox integration, both rules and preferences sync to your other devices if you choose so.</p>
<p>In contrast to Google’s Inbox which I’ve also tested for a few hours, I vastly prefer the simple white interface to Google’s Material Design. As you are probably aware, Google tries its best to keep you immersed in their ecosystem, which makes working harder on iOS if you prefer to use tools from multiple companies.</p>
<h3 id="whats-decidedly-bad">What’s decidedly bad</h3>
<h4 id="desktop">Desktop</h4>
<p>It seems like there is no (outgoing) attachment support in the desktop version yet. From having a look around the forums I arrived at the conclusion that the preferred method is to put a file into one’s Dropbox and send the link to that. I am curious if this will be automated via the GUI in the future.</p>
<p>While drafts are accessible on the desktop, it’s simply not possible to save a draft. I’ve tried hitting CMD+S, I’ve checked whether there is a prompt on closing an unsaved message, I’ve double-checked the menus for an option regarding saving of drafts. It seems like I will keep my habit of keeping e-mails as short as possible.</p>
<h4 id="mobile">Mobile</h4>
<p>Mailbox for iOS seems to choke on particularly long e-mails - even on the latest iPad (<em>iPad Air 2</em>), so I assume it is not a CPU problem. Since this only happens on the extremely long log file one of our server creates every day it is not a problem for me.</p>
<p>Another slight problem is iOS’s unwillingness to let users exchange the default mail program. While this could easily be remedied by Mailbox providing a new iOS 8 share extension, it is currently necessary for me to have my Gmail account configured in Apple’s Mail.app in order to share articles from <a href="https://www.instapaper.com/">Instapaper</a> and <a href="http://reederapp.com/ios/">Reeder</a> easily. I’ve set the refresh to ‘manually’ to avoid syncing everything twice.</p>Work as a part-time system admin2014-12-15T23:05:44+01:002016-05-31T11:45:00+02:00Alexander Skibatag:ghostlyrics.net,2014-12-15:/work-as-a-part-time-system-admin.html<p>I’ve wanted to write about my work at university for some time now but I’ve never really sat down and took the time to do that until now.</p>
<p>There are various things I do at the institute, some of which I don’t understand why they are my …</p><p>I’ve wanted to write about my work at university for some time now but I’ve never really sat down and took the time to do that until now.</p>
<p>There are various things I do at the institute, some of which I don’t understand why they are my responsibility. Some of them I enjoy. Others I don’t, which is something very typical for any job, I suppose.</p>
<p>I am a part-time system administrator at <a href="http://www.icg.tugraz.at">the Institute for Computer Graphics and Vision</a>.</p>
<h2 id="server-maintenance">Server Maintenance</h2>
<p>Whether it’s searching lost files, looking through logs to find specific, maybe even security critical events or just reconfiguring an existing piece of software, maintaining the servers of the institute has become my job - that is if you subtract the physical maintenance and the purchasing process. I am extremely thankful that those areas are covered by my friendly full-time colleagues.</p>
<p>I try my best to investigate errors in logs, particularly recurring ones when there is time to spare.</p>
<h2 id="configurations">Configurations</h2>
<blockquote>
<p>Obviously there’s a lot of command-line fu involved.</p>
</blockquote>
<p>In the last few months I changed some processes which were occurring regularly:</p>
<ol>
<li>Changed our servers to use <code>unattended-upgrades</code> where possible</li>
<li>Set up more reasonable e-mail notifications</li>
</ol>
<p>Moreover, I <a href="http://stackoverflow.com/q/12304954/592207">blocked the 360Spider bot</a> from constantly requesting files from our web server. I set up an OpenVPN server with guidance from Thomas. I configured a system in which an encrypted partition is automatically unlocked and mounted on login if you belong to the correct user group (I’m not sure whether I should be proud of that given the incredible hackyness of said system).</p>
<p>Currently I am looking into <a href="http://puppetlabs.com">puppet</a> for my next assignment. I’ve heard great things from friends about the software but my first experience was creating a VM for testing and realizing that the <code>apt</code> puppet module is currently broken (Dec 15th 2014).</p>
<h2 id="documentation">Documentation</h2>
<p>When I arrived I was pretty shocked to see that there was <strong>absolutely no internal documentation</strong> at all. I am working to remedy this situation whenever I have spare time between more immediate assignments. Since I consider the documentation my primary project I made all the important decisions myself. It’s written in <a href="http://daringfireball.net/projects/markdown">Markdown</a> and we are using our internal <a href="https://about.gitlab.com">gitlab</a> platform to host and distribute it. Gitlab provides a nice “edit” button too, for those unfamiliar with git.</p>
<p>As of the time of this writing, there is documentation about the most common workflows, some server configuration, deployment notes and command line hints.</p>
<p>Additionally I’ve written a Getting Started guide for new members of our institute in order to avoid explaining everything to every new person again (and again in case something was unclear).</p>
<h2 id="building-stuff">Building stuff</h2>
<p>Creating ways of interweaving technologies is easily my favorite task. I like to write scripts to automate laborious tasks that have to be done. On the other hand I am also looking for challenges in which proven ways have to be reassembled to fit a client’s needs (though they are not directly paying me, the members of the institute are “clients” in the sense that it’s my job to make their ideas or wishes in terms of infrastructure work).</p>
<p>In practice that means I’ve written several scripts and am in the process of rewriting most of the tools to use the awesome <a href="http://www.fabfile.org">Fabric</a> module for Python. This particular direction was inspired by my other friend Thomas, who suggested just the right kind of tool for my work - a tool which profits from my profound joy working with the Python language. <em>Except when it comes to the byte string/unicode string problem in Python 2.x.</em> My collection of administrative helpers is located at <a href="https://github.com/ghostlyrics/scripted">my github repository</a> since I’ve liberated it from our internal gitlab.</p>
<p>It would’ve been easier - and probably more comfortable - to just stick the configuration in the scripts themselves instead of reading everything from JSON files. That would’ve meant at least three things I was uncomfortable with:</p>
<ol>
<li>Sharing the code outside of our ICG admin team would have been impossible due to the risk of compromising confidential data. I preferred to share because I think that it’s hugely beneficial for any IT worker, be them programmers, sysadmins or similar to have a presentable portfolio of their work.</li>
<li>Asking peers for advice would have been impossible due to the same risk. I don’t consider myself a superior programmer and therefor like to get the opinion of my peers every so often to improve the quality of my code.</li>
<li>Hardcoding data where it is not strictly necessary feels <em>unclean</em> to me.</li>
<li>It would’ve been way harder for anyone who might like my work to use it themselves. I immensely dislike working against the Open Source idea where it’s so obviously unnecessary. </li>
</ol>
<p>In combination with the work done on a server configuration project involving a cryptographic setup for groups I’ve also scripted a rather convoluted process of setting up new users for said system.</p>
<h2 id="administrative-chores">Administrative Chores</h2>
<p>I’m not entirely sure why this belongs in my domain but I’m routinely tasked with entering content in our CMS of choice, <a href="https://plone.org">Plone</a>. That wouldn’t be as annoying of our instance of the system did not feel that broken and slow. <em>Hm, I almost forgot “confusing”. Never had imagined that simply putting up a job offer needed so much administrative overhead just in a CMS.</em></p>
<p>I don’t have a lot of love for any database driven CMS, now that I think of it. Still, due to laziness I have not taken the time to move my personal site from <a href="https://wordpress.org">WordPress</a> to something like <a href="http://jekyllrb.com">Jekyll</a> yet.</p>
<p>And of course, there’s the usual “enter user X into the system, please” because others don’t have the same permissions that the system admin has. <em>Cue “I am root” joke here. Actually, don’t do that. I did that once. Made a terrible mistake less than an hour later.</em></p>
<h2 id="tech-and-moral-support">Tech (and Moral) Support</h2>
<blockquote>
<p>So you fix our computers, right?</p>
</blockquote>
<p>Given you have acquired a certain knowledge of computers, operating systems and software over the years you will be tasked with fixing or configuring things that your co-workers simply cannot manage to do themselves. That’s okay. Sometimes you won’t be able to find the bugs, fix the errors or configure their thing to work. That’s okay too.</p>
<p>Your colleagues want you to try your best - if you manage to do the impossible on the way that’s great. If you’ve obviously done your best and invested multiple hours into research and experimentation concerning their problems, it’s very likely they will understand that it’s not possible for you to smooth out every little itching. And every once in a time, they’ll want your advice or input on a problem they’re trying to solve. You might know something. You might even guess something right - it’s not important. You’re there, supporting them with their issue. Maybe that will be enough; I’ve personally had more than a handful of these occasions during my half year at the institute.</p>
<blockquote>
<p>People in my life know I’m good with computers. And they come to me and ask for advice. I can see the pain. They’ve been hurt. They want a savior.<br>
And I’m tired. And I’m busy. And there’s so much to say. So much to teach. So much to do.<br>
And I don’t want to be their savior right now.<br>
And that hurts, too. ~<a href="http://swiftonsecurity.tumblr.com/post/105233953424/morality">SwiftOnSecurity</a></p>
</blockquote>
<p>This passage from SwiftOnSecurity manages to catch my opinion on this issue pretty well. I’ll try to help everyone given the time but I sometimes I need my colleagues to understand that it’s outright impossible for me to be working on their issue <em>right now</em>. There may be more pressing problems, <em>say I might have <code>rm</code>-ed a file we still needed</em> or I’m in the middle of a project already.</p>
<p>I realized I need to work on my communication skills and the timing of e-mails in order to minimize stress - both for me and others.</p>Media Recap: May, June, July and parts of August 20142014-08-11T22:57:29+02:002014-08-11T22:59:00+02:00Alexander Skibatag:ghostlyrics.net,2014-08-11:/media-recap-may-june-july-and-parts-of-august-2014.html<p>Since I skipped the last two month, this will be a longer post, summarizing both May, June and July 2014, probably even some entries from August, just so they’re written down somewhere.</p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li><a href="https://www.guildwars2.com/en/">Guild Wars 2</a> - Got back to GW2, had a lot of fun, found new guild members …</li></ul><p>Since I skipped the last two month, this will be a longer post, summarizing both May, June and July 2014, probably even some entries from August, just so they’re written down somewhere.</p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li><a href="https://www.guildwars2.com/en/">Guild Wars 2</a> - Got back to GW2, had a lot of fun, found new guild members, almost finished the story, joined the living story, did fractals, conquered dungeons, crafted. I’m playing it on a Windows partition since the Mac Beta client is still lacking in terms of performance. Honestly, I expect it to stay this way, being powered by <a href="http://en.wikipedia.org/wiki/Wine_(software)">Wine</a> under the hood.</li>
<li><a href="http://assassinscreed.ubi.com/en-US/games/assassins-creed-freedom-cry.aspx">Assassin’s Creed 4: Black Flag, Freedom Cry</a> - gameplay wise there are little changes; however, its music is exceptional even for an Assassin’s Creed game. I bought <a href="https://itunes.apple.com/at/album/assassins-creed-iv-black-flag/id874974736">the official soundtrack</a> on its (delayed) release day.</li>
<li><a href="http://assassinscreed.ubi.com/en-US/games/assassins-creed-revelations.aspx">Assassin’s Creed Revelations</a> - Played again, as part of our companion gaming. I thought about visiting Cappadocia.</li>
<li><a href="http://assassinscreed.ubi.com/en-US/games/assassins-creed-3.aspx">Assassin’s Creed 3</a> - Got it as a gift from a good friend. Have not yet finished it. Often I found myself tuning out when Connor was talking his native language. In contrast to an Italian or Turkish accent it was not that relatable, especially when more than half of a dialogue was not in English. The game itself is huge. I haven’t seen everything yet but I’m already impressed by the sheer scale of the game world and the variety of activities implemented. It does not suffer from <em>TES IV: Oblivion syndrome</em> though, where each and every thing is more interesting than the main quest itself.</li>
<li><a href="http://masseffect.bioware.com/me2">Mass Effect 2</a> - A quick game and a few missions to entertain the girlfriend who has yet to see the story of ME2 and was bored with the ME1 Let’s Play she watched.</li>
<li><a href="http://spryfox.com/our-games/road-not-taken/">Road Not Taken</a> - Impulse buy after having watched the <a href="https://www.youtube.com/watch?v=kAUL09Siqko">expert video playthrough</a> on <a href="http://store.steampowered.com/app/293740/">its Steam page</a>. The game is adorable, challenging, yet not frustrating. I find it a lot of fun to play. Randomly generated puzzles are a nice idea.</li>
</ul>
<h2 id="novels">Novels</h2>
<ul>
<li><a href="https://itunes.apple.com/at/book/kalteschlaf/id451454820">Kälteschlaf</a> by <a href="http://en.wikipedia.org/wiki/Arnaldur_Indriðason">Arnaldur indriðason</a> (German, iTunes Promotion) - <strong>MISS</strong></li>
<li><a href="http://www.cjdaugherty.com/night-school-series/night-school-book/">Night School. Du darfst keinem trauen</a> by <a href="http://www.cjdaugherty.com">C.J. Daugherty</a> (German, Amazon Promotion) - <strong>MISS</strong></li>
<li><a href="http://www.amazon.de/Du-mich-auch-Ein-Rache-Roman-ebook/dp/B005OJV0R4/">Du mich auch: Ein Rache-Roman</a> by <a href="https://www.facebook.com/pages/Ellen-Berg/300609129976944" title="no, really, she only has a Facebook page">Ellen Berg</a> (German, Amazon Promotion) - <strong>HIT</strong></li>
<li><a href="http://www.chrisbaty.com/books/">No Plot? No Problem!</a> by <a href="http://www.chrisbaty.com">Chris Baty</a> - Another recommendation from <a href="https://twitter.com/stefan2904" title="@stefan2904">Stefan</a>, due to me being a lazy writer, blogger and author. Great read even if you’re not planning to participate in a <a href="http://nanowrimo.org">NaNoWriMo</a>.</li>
<li><a href="https://itunes.apple.com/at/book/swift-programming-language/id881256329">The Swift Programming Language</a> by Apple - Had only a cursory look into this yet and toyed around with Playgrounds. I found the graphing of changing variables a great help for visualizing data while experimenting.</li>
</ul>
<h3 id="the-book-of-deacon-series">The Book of Deacon series</h3>
<p>I came across The Book of Deacon as promotion from <a href="http://storybundle.com">the Story Bundle</a> newsletter and was curious. It has a rich fantasy universe which is not too far off and caught me with its interesting characters - enough that I bought both the remaining books of the trilogy as well as the additional ones set in the same universe. The author of this series is <a href="http://www.bookofdeacon.com/about-the-author/">Joseph Lallo</a>.</p>
<ul>
<li><a href="http://www.bookofdeacon.com/books/fantasy/the-book-of-deacon/">The Book of Deacon</a> (Story Bundle Promotion, iTunes Promotion)</li>
<li><a href="http://www.bookofdeacon.com/books/fantasy/the-great-convergence/">The Great Convergence</a></li>
<li><a href="http://www.bookofdeacon.com/books/fantasy/the-battle-of-verril/">The Battle of Varril</a></li>
<li><a href="http://www.bookofdeacon.com/books/fantasy/the-rise-of-the-red-shadow/">The Rise of the Red Shadow</a></li>
<li><a href="http://www.bookofdeacon.com/books/fantasy/jade/">Jade</a></li>
</ul>
<h3 id="the-witcher-series">The Witcher series</h3>
<p>The Witcher is something I love to talk about even considering that I didn’t like the first video game. I have not yet tried the second and the third has not yet been released. Some years ago I was in Cologne at the <a href="http://www.rpc-germany.de">Role Playing Convention</a> when I noticed the author was also there due to a promotion. They sold games with a map which I wanted to have but I already owned the game and asked if it was possible for me to purchase a copy of the book with the map. It was possible and I still have both map and book - even with the author’s signature on it.</p>
<p>I bought the last book of the series some years ago as a paperback novel however I never really took the time to re-read the complete series. Recently I was abroad for a period of time and bought all the books again as ebooks. Being able to read them whenever I wanted without lugging the whole seven books with me on the plane helped me read them again. I enjoy the Witcher universe which was created by <a href="http://en.wikipedia.org/wiki/Andrzej_Sapkowski" title="official site not available in English">Andrzej Sapkowski</a>. It’s a pity the first game’s combat makes me cringe every time I need to rhythmically click enemies to death.</p>
<ul>
<li><a href="https://itunes.apple.com/at/book/das-schwert-der-vorsehung/id439650173">Das Schwert der Vorsehung</a></li>
<li><a href="https://itunes.apple.com/at/book/der-letzte-wunsch/id439649032">Der letzte Wunsch</a></li>
<li><a href="https://itunes.apple.com/at/book/das-erbe-der-elfen/id439647882">Das Erbe der Elfen</a></li>
<li><a href="https://itunes.apple.com/at/book/die-zeit-der-verachtung/id439640120">Die Zeit der Verachtung</a></li>
<li><a href="https://itunes.apple.com/at/book/feuertaufe/id435935169">Feuertaufe</a></li>
<li><a href="https://itunes.apple.com/at/book/der-schwalbenturm/id437778920">Der Schwalbenturm</a></li>
<li><a href="https://itunes.apple.com/at/book/die-dame-vom-see/id435935267">Die Dame vom See</a></li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<p>I started using <a href="https://overcast.fm">Overcast</a> without its IAP since I wanted to see whether I really need a third-party podcatcher to replace Apple’s one. <em>Also, I tend to like <a href="http://www.marco.org/about">Marco’s</a> apps, so I needed to try this one too.</em></p>
<ul>
<li>The Secret Archives of the Vatican Podcast 114 - <a href="http://secretarchivesofthevatican.wordpress.com/2013/09/21/songs-from-the-final-frontier/">Songs from the Final Frontier</a></li>
<li>Accidental Tech Podcast 29 - <a href="http://atp.fm/episodes/29-computerized-garden-gnome">Computerized Garden Gnome</a></li>
<li>Accidental Tech Podcast 30 - <a href="http://atp.fm/episodes/30-full-frontal-thumb">Full Frontal Thumb</a></li>
<li>Accidental Tech Podcast 31 - <a href="http://atp.fm/episodes/31-swimming-in-16-gb-gold">Swimming in 16 GB Gold</a></li>
</ul>
<h2 id="movies">Movies</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt1587310/">Maleficent</a> - We rarely go to the cinema, mainly due to me complaining about other people and not liking movies a lot. After this visit I could add another point to that list of negative impressions: Along with the movie we watched we were forced to watch about 14 ads. <em>14</em>. That’s almost the same amount we paid in Euro for the tickets for both of me and my girlfriend combined. <strong>You should watch this movie though.</strong> It’s interesting, fairly well done and not being overly kitschy. I’m not a fan of Angelina Jolie either but the overall impression was very positive.</li>
<li>Youtube: <a href="https://www.youtube.com/watch?v=uX_i5-uB_HY">a little history on harvest moon</a></li>
<li>Youtube: <a href="https://www.youtube.com/watch?v=HhGuXCuDb1U">Tim Minchin’s Storm the Animated Movie</a></li>
<li>Extra Credits: <a href="https://www.youtube.com/watch?v=REaUzHef9h4">Extra Credits - Why the Vita Failed - PlayStation’s Lost Gamble</a></li>
</ul>
<h3 id="overview-videos">Overview videos</h3>
<ul>
<li><a href="http://www.polygon.com/2014/5/1/5672552/the-amazing-spider-man-2-overview-video">The Amazing Spider Man 2</a></li>
<li><a href="http://www.polygon.com/2014/4/30/5668962/child-of-light-overview-video">Child of Light</a></li>
<li><a href="http://www.polygon.com/2014/5/7/5690978/hack-n-slash-overview-video">Hack’n’Slash</a></li>
<li><a href="http://www.polygon.com/2014/5/20/5735282/transistor-overview-video">Transistor</a></li>
<li><a href="http://www.polygon.com/2014/5/21/5739008/wolfenstein-the-new-order-overview-video">Wolfenstein - The New Order</a></li>
</ul>
<!-- text additions -->
<!-- reference links -->RE: Your People by Rands2014-05-06T00:45:16+02:002014-05-06T00:45:16+02:00Alexander Skibatag:ghostlyrics.net,2014-05-06:/re-your-people-by-rands.html<p><a href="http://randsinrepose.com/archives/your-people/">From Rands in Repose, titled “Your People”</a>:</p>
<blockquote>
<p>It’s attending a conference where you know no one. It’s driving to the city to sit in a coffee shop with ten strangers bonded by a programming language.</p>
</blockquote>
<p>You’d think that occasions like this are no longer needed in times …</p><p><a href="http://randsinrepose.com/archives/your-people/">From Rands in Repose, titled “Your People”</a>:</p>
<blockquote>
<p>It’s attending a conference where you know no one. It’s driving to the city to sit in a coffee shop with ten strangers bonded by a programming language.</p>
</blockquote>
<p>You’d think that occasions like this are no longer needed in times of the Internet, since you simply join a community of people with common interests and hang out there. Having spent a lot of leisure time on the Internet though I can say that having a great time at a conference or other type of event is something different altogether.</p>
<p>Amongst my favorite memories are the many times I joined the Linuxcouch at university where I met great people who I get along with extremely well. There is not only a basis of common interest but it’s the mutual respect that is given to people who have accumulated a certain expertise in their respective fields. Helpful friends who either try to help you when you need advice in technical (or other) matters, who may on occasion defer you to someone else but who also offer suggestions on whom to ask when they don’t know the answers themselves.</p>
<p>One of the big reasons why this tends to work out well is a willingness to learn from each other. While the finer aspects of interests can differ, there are topics which may cross over between your areas of expertise and theirs. I’m not saying your topics should be restricted on the things you work with. I’m trying to tell you that exploring one’s stance towards a particular issue or idea can be its own reward. If you are similar to me, you prefer to work in silence or behind your headphones with which you drown out distractions but can enjoy the detailed discussions going hand in hand with technical decisions.</p>
<blockquote>
<p>Your People rarely demand anything. But when either you or they make a request, neither the request nor the agreement to do it is ever in question.</p>
</blockquote>
<p>You don’t question the request because your trust in them is enormous. You assume - and rightfully so - that they know what they are doing. You don’t have to question them because of your unwavering certainty that their reasons are as legit as yours are when you are in the position of having to ask them.</p>
<blockquote>
<p>You get mail all day from everyone, but you always stop to read mail from Your People.</p>
</blockquote>
<p>You don’t stop to read their mail because you think it’s more urgent than your regular mail. It’s because you care. It’s because their issues are more interesting, because their fate is dear to you. Admittedly, you often assume that they act the same when you contact them. That’s okay, because that spiritual connection you feel is probably mutual.</p>
<blockquote>
<p>These are not people that let you sit in place, these are people who hold a mirror up to your fuck-ups, and who explain, in excruciating detail, exactly what you don’t want to hear.</p>
</blockquote>
<p>They know that constructive criticism is what you need to improve yourself. They also tell you what you need to hear in order to be better, not to feel better. You are better of leaving last part to a loved one anyway.</p>
<blockquote>
<p>Networking is the art of finding those who are willing to listen to and critique your stories, so go look at your Inbox. Better yet, go look at your Sent box.</p>
</blockquote>
<p>Instinctively you may already know who exactly Your People are. That’s because they are the ones you are relying on when you need honest feedback. They are the ones you like to spend your time with if they are in the vicinity. They are the ones you try to keep in contact with even if it’s been an unspeakably long time since your last communication.</p>
<p>You already know their value which you hold dear and are keen on keeping that bond intact. Rightfully so, as they can improve your whole attitude towards life in ways you will have a hard time wrapping your mind (and imagination) around.</p>
<p><a href="http://randsinrepose.com/links/2013/12/03/your-people-once-more/">From a recollection of above post on Rands in Repose</a>:</p>
<blockquote>
<p>Your people are your people because while you may not always agree, you are comfortably on the same frequency. Because of this frequency alignment, you invest in them instinctively because while people look at you like you’re crazy, they do not. You answer their emails quickly. You arrange drinks when they are in town – always. They are your people and in a world chock full of people, your people are uniquely yours.</p>
</blockquote>
<p>In closing, I’d like to say one last thing: If you do one thing - just one little thing - that should be keeping true to your people. Never feel uncomfortable because they might not be respectable company in the eyes of judging others. Never feel like you have to apologize for them, their customs. You belong among them.</p>Media Recap: April 20142014-04-30T00:43:33+02:002014-04-30T00:43:33+02:00Alexander Skibatag:ghostlyrics.net,2014-04-30:/media-recap-april-2014.html<p><strong>Summary: 5 games, 2 novels, 1 movie, 11 videos, 1 podcast.</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-brotherhood">Assassin’s Creed: Brotherhood</a> - Finished again; no point in trying 100% completion again after having it synced to AC Initiates before though. Saved me a lot of nerves.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-brotherhood---the-da-vinci-disappearance">Assassin’s Creed: Brotherhood: The Da Vinci Disappearance</a> - It was …</li></ul><p><strong>Summary: 5 games, 2 novels, 1 movie, 11 videos, 1 podcast.</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-brotherhood">Assassin’s Creed: Brotherhood</a> - Finished again; no point in trying 100% completion again after having it synced to AC Initiates before though. Saved me a lot of nerves.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-brotherhood---the-da-vinci-disappearance">Assassin’s Creed: Brotherhood: The Da Vinci Disappearance</a> - It was nice to play some content I’ve not seen before when replaying the series with my girlfriend to show her the full story of Assassin’s Creed. The Da Vinci Disappearance was refreshing and exciting. It even surpassed my expectations, having read the story before. The presentation is superb and includes elements which made for an enjoyable change of pace from the main game.</li>
<li><a href="http://www.polygon.com/2014/4/2/5574360/ftl-advanced-edition-overview-video">FTL: Faster Than Light</a> - Impulse buy after having watched <a href="http://www.polygon.com/2014/4/2/5574360/ftl-advanced-edition-overview-video">its overview video</a>. Fun, but very hard. I’m playing on <em>Easy</em> with <em>Advanced Content On</em> but wasn’t able to finish it once yet. Incidentally I made an acquaintance last week who also happened to play it on the iPad and has not yet managed to finish it either.</li>
<li><a href="http://www.metacritic.com/game/pc/secret-files-tunguska">Secret Files: Tunguska</a> - Love the series. Tunguska is our current Companion Gaming title.</li>
<li><a href="http://www.metacritic.com/game/3ds/pokemon-y">Pokémon Y</a> - Picked up Pokémon for a day to swap pokémon with a relative over the holidays.</li>
</ul>
<h2 id="novels">Novels</h2>
<ul>
<li><a href="http://www.jenniferestep.com/books/killer-frost/">Killer Frost</a> by <a href="http://www.jenniferestep.com">Jennifer Estep</a> - A fitting end to a wonderful series. Delighting, amusing and extremely satisfying. Will look into the author’s other series. I have also downloaded another in-between story that’s currently only available <a href="https://itunes.apple.com/at/book/halloween-frost/id695603259?l=en&mt=11">in German on iTunes for free</a>.</li>
<li><a href="http://www.shelfari.com/books/182458/No-Plot-No-Problem-">No Plot? No Problem!</a> by <a href="http://www.shelfari.com/authors/a2009450/Chris-Baty/">Chris Baty</a> - a book about hints and helpful procedures for aspiring novelists which intend to take on the challenge of <a href="http://nanowrimo.org">NaNoWriMo</a>. I’m not yet sold on the concept of writing extensively for only one month, but on the other hand I do indeed have the tendency to keep a lot of projects just lingering around when I should be dedicating them enough time and motivation to finish them. The book was recommended to me by <a href="https://twitter.com/stefan2904">Stefan</a>.<br>
I’m not yet finished with the book as of the time of this writing.</li>
</ul>
<h2 id="videos-and-movies">Videos and movies</h2>
<p>I watched <a href="http://www.imdb.com/title/tt0351283/">Madagascar</a> in German. Didn’t like it. I liked last holiday’s <a href="http://www.imdb.com/title/tt0448694/">Puss in Boots</a> a lot better.</p>
<ul>
<li><a href="http://www.polygon.com/2014/3/28/5557222/escape-goat-2-overview-video">Escape Goat 2</a></li>
<li><a href="http://www.polygon.com/2014/4/1/5570808/goat-simulator-overview-video">Goat Simulator</a></li>
<li><a href="http://www.polygon.com/2014/4/2/5574360/ftl-advanced-edition-overview-video">FTL Advanced Edition</a></li>
<li><a href="http://www.polygon.com/2014/4/24/5649976/tabletop-simulator-overview-video">Tabletop simulator</a></li>
<li><a href="http://www.polygon.com/2014/4/22/5640776/nes-remix-2-overview-video">NES Remix 2</a></li>
<li><a href="http://www.polygon.com/2014/4/18/5628396/final-fantasy-xiv-a-realm-reborn-on-ps4-overview-video">Final Fantasy XIV: A Realm Reborn on PS4</a></li>
<li><a href="http://www.polygon.com/2014/4/11/5604784/half-minute-hero-the-second-coming-overview-video">Half Minute Hero: The Second Coming</a></li>
<li><a href="http://www.polygon.com/2014/4/10/5601034/broforce-overview-video">Broforce</a></li>
<li><a href="http://www.polygon.com/2014/4/15/5617526/strike-suit-zero-directors-cut-overview-video">Strike Suite Zero: Director’s Cut</a></li>
<li><a href="http://www.polygon.com/2014/4/25/5653646/fract-osc-overview-video">Fract OSC</a></li>
<li><a href="http://www.polygon.com/2014/4/29/5665506/daylight-overview-video">Daylight</a></li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<ul>
<li>Directional 6 - <a href="http://5by5.tv/directional/6">Paper Manuals</a></li>
</ul>
<p>Listened to an episode of <a href="http://5by5.tv/directional">Directional</a> because I read a lot of the articles <a href="https://twitter.com/viticci">@viticci</a> writes, but wasn’t particularly entertained.</p>
<!-- Metacritic -->
<!-- Polygon -->
<!-- misc -->Media Recap: March 20142014-04-22T12:01:32+02:002014-04-22T12:12:18+02:00Alexander Skibatag:ghostlyrics.net,2014-04-22:/media-recap-march-2014.html<p><strong>Summary: 6 games, 20 videos</strong></p>
<p>Interestingly, it seems as if holidays actually slow down my writing process.</p>
<!--more-->
<h1 id="video-games">Video Games</h1>
<ul>
<li><a href="http://www.metacritic.com/game/xbox-360/fable-iii">Fable 3</a> - Almost done with the achievements in this one. Can’t say I enjoyed most parts of the game. Weak presentation of the story. Might be due to me comparing …</li></ul><p><strong>Summary: 6 games, 20 videos</strong></p>
<p>Interestingly, it seems as if holidays actually slow down my writing process.</p>
<!--more-->
<h1 id="video-games">Video Games</h1>
<ul>
<li><a href="http://www.metacritic.com/game/xbox-360/fable-iii">Fable 3</a> - Almost done with the achievements in this one. Can’t say I enjoyed most parts of the game. Weak presentation of the story. Might be due to me comparing it with <a href="http://masseffect.bioware.com/about/trilogy/">Mass Effect</a> or other series instead of a single title. However, one look at <a href="http://www.metacritic.com/game/playstation/grandia">Grandia</a> proves that even a single game can be an epic all by itself without having to rely onto sequels. <em>Side note: I absolutely adore Grandia to this very day.</em></li>
<li><a href="http://www.metacritic.com/game/ios/plague-inc">Plague Inc.</a> - I wanted to try the iOS version of Plague Inc. immediately after I watched <a href="http://www.polygon.com/2014/3/3/5466530/plague-inc-evolved-overview-video">Polygon’s Overview video on the game</a>. I found it to be - as mentioned in the video - quite hard. It took me several tries to finish one game on <em>Easy</em> difficulty and to this day was not able to complete a game in <em>Normal</em> mode.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/gyromancer">Gyromancer</a> - Gave in, bought the DLC, completed the accursed Challenger’s Door. Finished collecting achievements. <em>Dare I say that the summons in the DLC pack are seriously and severely overpowered?</em></li>
<li><a href="http://www.metacritic.com/game/pc/guild-wars-2">Guild Wars 2</a> - I dove back into GW2 for a bit after having purchased a new MacBook. I still tend to like it even though some systems have become quite complex and the April update changing so many of the existing systems. I am very fond of the new wardrobe system and spent a while looking through all the different outfits available for my Sylvari lady thief.</li>
<li><a href="http://www.metacritic.com/game/pc/dungeons-of-dredmor">Dungeons of Dredmor</a> - Had some time to kill - a reason that often sends me back to entertaining, shorter games like Dungeons of Dredmor. <em>Which I always, </em><em>always</em><em> want to write ‘Dredmore’</em>.</li>
<li><a href="http://www.metacritic.com/game/pc/the-elder-scrolls-online">The Elder Scrolls Online, Beta</a> - I am a fan of The Elder Scrolls and have been since I played <a href="http://www.metacritic.com/game/xbox/the-elder-scrolls-iii-morrowind-game-of-the-year-edition">Morrowind</a>. I was bored by <a href="http://www.metacritic.com/game/xbox-360/the-elder-scrolls-iv-oblivion">Oblivion</a> but <a href="http://www.metacritic.com/game/xbox-360/the-elder-scrolls-v-skyrim">Skyrim</a> saved the series for me. The Elder Scrolls Online however, did not. I missed the feeling of being the central part of the story. I felt unimportant and even lost at times which is a huge deal breaker for an MMO. <em>Some people say that it’s hard to tell the NPCs from the players - it’s not. Players are the ones jumping around stupidly and sprinting hectically from place to place.</em></li>
</ul>
<blockquote>
<p>You are the one who will save us. And this guy over there. And that guy. And that other one.<br>
~ Markus</p>
</blockquote>
<h1 id="videos">Videos</h1>
<ul>
<li><a href="http://www.polygon.com/2014/3/29/5561770/see-the-deus-ex-fan-film-that-was-two-years-in-the-making">Deus Ex Shortfilm</a> - Since I consider myself a fan of <a href="http://www.metacritic.com/game/xbox-360/deus-ex-human-revolution">Deus Ex: Human Revolution</a> I just <em>had</em> to check out a well-done fan-made movie about the title.</li>
<li><a href="http://www.ted.com/talks/richard_ledgett_the_nsa_responds_to_edward_snowden_s_ted_talk">TED: The NSA responds to Edward Snowden’s TED Talk</a> by Richard Ledgett</li>
<li><a href="http://en.wikipedia.org/wiki/Ghost_in_the_Shell:_Stand_Alone_Complex">Ghost in the Shell: 2nd Gig</a></li>
</ul>
<p><a href="http://www.polygon.com">Polygon</a> has a new series called ‘Overview videos’ in which they play a game for a certain while and try to explain as well as show what the game is about. Most parts of the series tend to clock in at about 20 to 30 minutes and are at least slightly amusing. I think they really help to demonstrate what the game is about and I vastly prefer those to video reviews. I still read the written reviews of more interesting games for that matter. I tend to watch nearly all of those to get a good impression of what’s new in gaming.</p>
<ul>
<li><a href="http://www.polygon.com/2014/3/5/5474008/the-yawhg-overview-video">Overview: The Yawhg</a></li>
<li><a href="http://www.polygon.com/2014/2/10/5398258/fable-anniversary-overview-video">Overview: Fable Anniversary</a></li>
<li><a href="http://www.polygon.com/2014/2/7/5389482/overview-the-elder-scrolls-online-beta">Overview: The Elder Scrolls Online</a></li>
<li><a href="http://www.polygon.com/2014/3/12/5497748/dark-souls-2-overview-video">Overview: Dark Souls 2</a></li>
<li><a href="http://www.polygon.com/2014/2/25/5447174/thief-overview-video">Overview: Thief</a></li>
<li><a href="http://www.polygon.com/2014/3/3/5466530/plague-inc-evolved-overview-video">Overview: Plague Inc Evolved</a></li>
<li><a href="http://www.polygon.com/2014/2/5/5381846/hearthstone-overview-video">Overview: Hearthstone</a></li>
<li><a href="http://www.polygon.com/2014/3/17/5518468/nom-nom-galaxy-overview-video">Overview: Nom Nom Galaxy</a></li>
<li><a href="http://www.polygon.com/2014/3/18/5522672/luftrausers-overview-video">Overview: Luftrausers</a></li>
<li><a href="http://www.polygon.com/2014/3/19/5526194/metal-gear-solid-5-ground-zeroes-overview-video">Overview: Metal Gear Solid 5: Ground Zeroes</a></li>
<li><a href="http://www.polygon.com/2014/3/21/5532946/infamous-second-son-overview-video">Overview: Infamous: Second Son</a></li>
<li><a href="http://www.polygon.com/2014/3/26/5550488/diablo-3-reaper-of-souls-overview-video">Overview: Diablo 3: Reaper of Souls</a></li>
<li><a href="http://www.polygon.com/2014/3/25/5546842/final-fantasy-10-10-2-hd-remaster-overview-video">Overview: Final Fantasy X/X-2 HD Remaster</a></li>
<li><a href="http://www.polygon.com/2014/3/27/5554754/mercenary-kings-overview-video">Overview: Mercenary Kings</a></li>
</ul>
<!-- reference section -->
<!-- Polygon -->
<!-- Metacritic -->
<!-- More -->Media Recap: February 20142014-03-09T14:18:11+01:002015-05-13T18:54:03+02:00Alexander Skibatag:ghostlyrics.net,2014-03-09:/media-recap-february-2014.html<p><strong>Summary: 7 games, 1 novel, 1 season of videos</strong>
<img alt="Screenshot of GhostLyrics’s AC Initiates synchronization showing full completion for AC2, AC:B, AC:R and AC4" src="/images/assassins-creed/ACI-screenshot.jpg"></p>
<!--more-->
<h1 id="games">games</h1>
<ul>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-iv-black-flag">Assassin’s Creed IV: Black Flag</a> - I really don’t remember what I was doing in February in ACIV, probably participating in a community challenge or working towards 100% synchronization.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-ii">Assassin’s Creed II</a> - The other Assassin’s Creed game …</li></ul><p><strong>Summary: 7 games, 1 novel, 1 season of videos</strong>
<img alt="Screenshot of GhostLyrics’s AC Initiates synchronization showing full completion for AC2, AC:B, AC:R and AC4" src="/images/assassins-creed/ACI-screenshot.jpg"></p>
<!--more-->
<h1 id="games">games</h1>
<ul>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-iv-black-flag">Assassin’s Creed IV: Black Flag</a> - I really don’t remember what I was doing in February in ACIV, probably participating in a community challenge or working towards 100% synchronization.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-ii">Assassin’s Creed II</a> - The other Assassin’s Creed game in which I had not had 100% sync before. </li>
<li><a href="http://www.metacritic.com/game/xbox-360/mass-effect-2">Mass Effect 2</a> - I am <em>not</em> playing this again. Not a single chance. I have been watching for a bit while my girlfriend has playing this on <em>Casual</em> and it hasn’t been a lot of fun. Predictably, I’d say, when one knows the dialogues by heart after playing the game five times.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/mass-effect-3">Mass Effect 3</a> - My girlfriend wanted to play the <a href="http://masseffect.wikia.com/wiki/Rannoch:_Geth_Fighter_Squadrons">Geth Server level</a> again and we didn’t have a savegame which was recent enough, so I rushed through the <a href="http://masseffect.wikia.com/wiki/Priority:_Geth_Dreadnought">Geth dreadnought</a>. I had almost forgotten how funny it is to one-shot everything on <em>Casual</em>.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/the-wolf-among-us-episode-1---faith">The Wolf Among Us: Episode 1 - Faith</a> - The Wolf Among Us was something that I wasn’t sure what to think about when I first read of it. Given that it was free for a day before Christmas I decided to download it and finally got around to give it a try. I liked that you are notified about the consequences of your actions and that you always have a number of different option for your next action. Adding a timer to many decisions certainly necessitates that you don’t overthink what you are going to to, because you have to decide the next course of action <strong>now</strong> or else… The game is a bit difficult to stomach in its over the top depiction of violence which makes it hard to recommend.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/gyromancer">Gyromancer</a> - Finally I was able to obtain the last few achievements of this puzzle game. While I tremendously enjoyed most of the gameplay, the special puzzles needed for the Challenger’s door are incredibly annoying and require a certain amount of skill, patience and a ridiculous amount of luck. That’s because very often you will be waiting for a certain combination to be nearly ready only to suffer from an enemy’s ability to destroy your carefully constructed match.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/fable-iii">Fable 3</a>, including <a href="http://www.metacritic.com/game/xbox-360/fable-iii-understone-quest-pack">Fable 3 Understone Quest Pack</a> - to be perfectly honest it’s not the best game. Far from it if I’m precise. I might turn some thoughts about F3 into a future post but I intend to finish playing the game first.</li>
</ul>
<h1 id="novels">novels</h1>
<ul>
<li><a href="http://www.amazon.de/Meines-Bruders-Mörderin-erste-Llimona-ebook/dp/B00AAHHWUY">Meines Bruders Mörderin</a> by <a href="http://www.irenerodrian.de">Irene Rodrian</a> (German, Amazon Promotion) - An Amazon promotion, again. I’m slowly working through this. After all, I got one more free book from iTunes too. <em>Can’t have enough books.</em> I am always somewhat annoyed by the fact that I only get free German books but they’re gifts, so let’s not be picky. <em>I’ll put them out with the junk if they’re bad anyway.</em> The short version: It’s a murder mystery, setting up the scene for a series of novels involving a new private investigation agency of five women who meet through solving a crime in Barcelona. I enjoyed reading it and this is probably one of the very few cases in which I’ve thought about obtaining the sequel to a promotional work.</li>
</ul>
<h1 id="videos">videos</h1>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Ghost_in_the_Shell:_Stand_Alone_Complex">Ghost in the Shell: Stand Alone Complex</a> - recently I had a feeling of nostalgia and watched Ghost in the Shell again. Back when it was airing on MTV I had only seen a couple of episodes, so it was nice to see the whole season. I like the concept of <em>Stand Alone Complex</em> and the way it portraits the hacker central to the events in the series, the <em>Laughing Man</em>. At the time of this writing I have already watched several episodes of the 2nd GIG.</li>
</ul>Media Recap: January 20142014-02-16T19:07:37+01:002014-03-09T12:58:22+01:00Alexander Skibatag:ghostlyrics.net,2014-02-16:/media-recap-january-2014.html<p><strong>Summary: 4 games, 1 cartoon</strong></p>
<!--more-->
<h1 id="games">Games</h1>
<ul>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-brotherhood">Assassin’s Creed Brotherhood</a> - I only played a little part of ACB this month since I got AC4 as a birthday gift.</li>
<li><a href="http://www.metacritic.com/game/ds/final-fantasy-tactics-a2-grimoire-of-the-rift">Final Fantasy Tactics A2: Grimoire of the Rift</a> - A little bit more. I looked into the Clan Privileges and found the system …</li></ul><p><strong>Summary: 4 games, 1 cartoon</strong></p>
<!--more-->
<h1 id="games">Games</h1>
<ul>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-brotherhood">Assassin’s Creed Brotherhood</a> - I only played a little part of ACB this month since I got AC4 as a birthday gift.</li>
<li><a href="http://www.metacritic.com/game/ds/final-fantasy-tactics-a2-grimoire-of-the-rift">Final Fantasy Tactics A2: Grimoire of the Rift</a> - A little bit more. I looked into the Clan Privileges and found the system to be <a href="http://finalfantasy.wikia.com/wiki/Walkthrough:Final_Fantasy_Tactics_A2/crntn">a lot more extensive than I initially thought</a>. I soon discovered that there were actually really useful privileges that allow one to speed up the process of learning skills, leveling up your party and providing significant bonuses in battle.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-iv-black-flag">Assassin’s Creed IV: Black Flag</a> - In one word: <em>awesome</em>. I have recently completed the game by which I was truly amazed in multiple ways. It is my second favorite game of the series so far, next only to Brotherhood. Pirating is fun for itself, but packaged into an Assassin’s Creed game, the whole fun is stepped up another level. Although I spent quite some time chasing boundless collectibles and sinking legendary ships as well as cursing and sometimes screaming about several ridiculous bonus objectives I can finally state to have completed almost everything the game has to offer - save for three <em>Abstergo Challenges</em> out of 100.
<em>Also I keep singing the see shanties from time to time, a fact that really makes me smile and shows how the game has made a lasting impression.</em></li>
<li><a href="https://acinitiates.com">AC Initiates</a> - Metagame, browser based. Unlock stuff and background material about the whole AC franchise. Mostly a chore, but sometimes unlocks items in the games.</li>
</ul>
<h1 id="cartoons">Cartoons</h1>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Bob_Morane">Bob Morane</a>, episode 3: In der Eishölle - Well, wiki isn’t particularly helpful here. I loved the animated series back in the days of watching SuperRTL.</li>
</ul>Posts from the past2014-02-14T00:34:14+01:002014-02-14T00:46:48+01:00Alexander Skibatag:ghostlyrics.net,2014-02-14:/posts-from-the-past.html<p>So, a friend of mine asked me to remove his real name from the writing he did over at our old, soon-to-be removed blog. When I inquired about his reasons for wanting to do so I was given the answer that he doesn’t want his name to have any …</p><p>So, a friend of mine asked me to remove his real name from the writing he did over at our old, soon-to-be removed blog. When I inquired about his reasons for wanting to do so I was given the answer that he doesn’t want his name to have any hits when entered into a search engine.</p>
<p>I respect my friend and I have the utmost respect for privacy. On the other hand I think that having your real name next to your writing on the web creates a sense of responsibility. It makes you think and carefully pick your words and phrases instead of puking all your thoughts onto the keyboard because no one will ever be able to connect them to your persona. Many people want their name to stand for something, be it quality, reliability or something else entirely.</p>
<p>Given this line of thinking I was curious and asked for the reason behind this intent. He stated that has almost completed his education and is about to start applying for different jobs. He doesn’t want his potential employers to find anything about him on easily accessible sources.</p>
<p>I have to admit that while I respect his decision and already took the content down after mailing him an archive with his posts, I don’t understand the motivation at all. Is there a reason to cover one’s tracks when one writes about his personal interests and they remain fairly mainstream things?</p>
<p>Personally, I tremendously enjoy writing this blog - it’s an outlet for my creativity, it’s my home on the web and it’s a place I can use to share stories, helpful articles and just my thoughts with whoever wants to read it. I have even found myself using it on my letters of application and potential employers have talked to me about having checked out my blog and having seen articles related to the work I was applying for - or even just stuff that happened to be among their own hobbies.</p>
<p>I don’t write for a particular audience when dumping my thoughts like this. Letting the thoughts flow and the words stream out of my fingers helps me clear my mind. There are quite some posts on this website that have started their lives as scribbles or singular sentences in <a href="http://dayoneapp.com">Day One</a>, the diary app that I adore. Such as this one.</p>Media Recap: December 20132014-01-01T14:08:18+01:002014-03-09T13:34:54+01:00Alexander Skibatag:ghostlyrics.net,2014-01-01:/media-recap-december-2013.html<p><strong>Summary: 5 games, 1 movie, 8 videos</strong></p>
<!--more-->
<p>I want to check out <a href="http://store.steampowered.com/app/248820/">Risk of Rain</a>, since it sounds interesting and got a <a href="http://www.polygon.com/2013/12/24/5241358/risk-of-rain-review">splendid review</a> from Polygon. However, I’m a little skeptical about playing it since I get angry very easily when playing video games against the computer. <em>Interestingly I …</em></p><p><strong>Summary: 5 games, 1 movie, 8 videos</strong></p>
<!--more-->
<p>I want to check out <a href="http://store.steampowered.com/app/248820/">Risk of Rain</a>, since it sounds interesting and got a <a href="http://www.polygon.com/2013/12/24/5241358/risk-of-rain-review">splendid review</a> from Polygon. However, I’m a little skeptical about playing it since I get angry very easily when playing video games against the computer. <em>Interestingly I don’t have a problem losing against other people.</em></p>
<p>Another interesting thought that recently entered my mind is the purchase of a Playstation 3 which should be heavily discounted by now. I’m considering <a href="http://www.metacritic.com/game/playstation-3/journey">Journey</a>, <a href="http://www.metacritic.com/game/playstation-3/kingdom-hearts-hd-15-remix">Kingdom Hearts HD 1.5 ReMIX</a> and <a href="http://www.metacritic.com/game/playstation-3/kingdom-hearts-hd-25-remix">Kingdom Hearts HD 2.5 ReMIX</a> as well as the <a href="http://en.wikipedia.org/wiki/Ratchet_and_clank">Ratchet and Clank</a> franchise. For non-exclusives I’d prefer to stick to the Xbox 360 version. <em>Fortunately, as is the way of wikipedia, there is a <a href="http://en.wikipedia.org/wiki/Category:PlayStation_3-only_games">list of PS3 exclusive titles</a>.</em> This is a long-term plan however.</p>
<p>I got some gifts: <a href="http://www.metacritic.com/game/xbox-360/assassins-creed-iv-black-flag">Assassin’s Creed IV: Black Flag</a>, <a href="http://www.metacritic.com/game/ds/lego-battles-ninjago">LEGO Battles Ninjago</a>, <a href="http://www.metacritic.com/game/pc/deponia">Deponia</a> and an NDS version of <a href="http://en.wikipedia.org/wiki/Europa_1400:_The_Guild">The Guild</a> - have a <a href="http://www.nineoverten.com/2009/04/21/reviewed-the-guild-ds-nintendo-ds/">short review</a> of that or a <a href="http://www.4players.de/4players.php/dispbericht/NDS/Test/11903/63023/0/Die_Gilde_DS.html">more positive one, in German</a>. Due to some games being just that interesting and work for university I haven’t been able to play/test these in 2013.</p>
<h2>Games</h2>
<ul>
<li><a href="http://www.metacritic.com/game/3ds/pokemon-y">Pokémon Y</a></li>
<li><a href="http://www.metacritic.com/game/ios/skulls-of-the-shogun">Skulls of the Shogun</a> - was free for one day before Christmas. Since I’ve heard only good things about it when it was released for XBLA I thought I’d try it out and was pleasantly surprised with its amusing atmosphere, its great humor and its gameplay. My favorite point about the game is the music, which is just so well done. It doesn’t lull you in but provides an easy background for your tactical thinking.</li>
<li><a href="http://www.metacritic.com/game/wii/the-legend-of-zelda-skyward-sword">Legend of Zelda: Skyward Sword</a> - had the chance to try it during the holidays. I will stick with my decision to rather <em>not</em> move while playing video games. Meaning: I don’t like the Wii.</li>
<li><a href="http://www.metacritic.com/game/ds/final-fantasy-tactics-a2-grimoire-of-the-rift">Final Fantasy Tactics A2: Grimoire of the Rift</a> - I played the hell out of my <a href="http://www.metacritic.com/game/game-boy-advance/final-fantasy-tactics-advance">Final Fantasy Tactics Advance</a> copy back then and intend to do the same with this one. <a href="http://en.wikipedia.org/wiki/Tactical_role-playing_game">Tactics series games</a> are amongst my favorites for mobile entertainment.</li>
<li><a href="http://www.metacritic.com/game/ios/tiny-thief">Tiny Thief</a> - was distributed as one of Apple’s <a href="http://www.theverge.com/2013/12/10/5195144/apple-12-days-of-gifts-free-apps-games-music-videos">12 Days of Christmas</a> gifts. Has adorable animations and a enjoyably whimsical feel.</li>
</ul>
<h2>Movies</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt0448694/">Puss in Boots</a> (German, “Der gestiefelte Kater”) - Turns out that sometimes there *is* good stuff on television. I am fond of the Fruit Ninja re-skin accompanying the movie and just had to see it.</li>
</ul>
<h2>Videos</h2>
<ul>
<li>Bananasaurus Rex’s <a href="http://www.youtube.com/watch?v=LGrPeu5NWk0">solo eggplant run</a> in <a href="http://www.metacritic.com/game/pc/spelunky">Spelunky</a> - <a href="http://www.polygon.com/2013/12/23/5227726/anatomy-of-a-spelunky-miracle-or-how-the-internet-finally-beat">Polygon wrote a fascinating article</a> why this is an indication for what to expect in gaming and streaming for the near future.</li>
<li><a href="http://llvm.org/devmtg/2013-11/#talk4">Julia: An LLVM-based approach to scientific computing</a> - Very interesting typing system, however I am pretty sure I missed a lot of mathematical basics as well as more CS theory. <em>I wish the presenter would’ve talked a lot slower.</em></li>
<li><a href="http://llvm.org/devmtg/2013-11/#talk8">Developer Toolchain for the PlayStation®4</a> - It was interesting to hear how the development of the PS4 and its toolchain influenced Sony to upstream changes. Due to the secrecy involved this presentations contains some horror stories like “the merge with upstream changes took about 3 months and was done by a single person”. Sony’s developers will spend a lot more time upstreaming patches if this talk is any indication.</li>
<li><a href="http://llvm.org/devmtg/2013-11/#talk11">Bringing clang and LLVM to Visual C++ users</a> - The efforts to bring clang and LLVM integration to Visual Studio are fascinating. I highly recommend this talk. </li>
<li><a href="http://llvm.org/devmtg/2013-11/#talk2">Emscripten: Compiling LLVM bitcode to JavaScript</a></li>
<li><a href="http://llvm.org/devmtg/2013-11/#talk12">Building a Modern Database with LLVM</a> - Improving performance of modern distributed databases. Builds on top of HDFS, not Hadoop.</li>
<li><a href="http://cocoaheads.tv/an-interesting-approach-to-reverse-engineering-apps-by-chris-stroud">An Interesting Approach to Reverse Engineering Apps</a></li>
<li><a href="https://www.usenix.org/conference/lisa13/managing-macs-google-scale">Managing Macs at Google Scale</a></li>
</ul>Media Recap: September, October, November & parts of December 20132013-12-22T01:35:33+01:002014-03-09T14:27:55+01:00Alexander Skibatag:ghostlyrics.net,2013-12-22:/media-recap-september-october-november-parts-of-december-2013.html<p><strong>Summary: Quite something, long time overdue.</strong></p>
<p><del>So, apparently I was in a little over my head during the last few months, doing stuff for university, working a bit, worrying, being sick and generally not in the mood for writing <em>which is a shame</em>. This will be a cleanup post in …</del></p><p><strong>Summary: Quite something, long time overdue.</strong></p>
<p><del>So, apparently I was in a little over my head during the last few months, doing stuff for university, working a bit, worrying, being sick and generally not in the mood for writing <em>which is a shame</em>. This will be a cleanup post in which I try to collect everything related to consumed media that I haven’t already put up or linked to in the <a href="http://read.ghostlyrics.net" title="Yes, this is a shameless plug. Deal with it.">Reading tips</a>.</del>
Since I was still busy during the pre-Christmas time I added parts of December’s media to the list.</p>
<!--more-->
<p><del>I’ll begin linking video games to <a href="http://mobygames.com">http://mobygames.com</a> from now on. The site seems to be large enough and respectable enough to hold quite a lot of information while not being wikipedia. Its gaming focus is something I prefer over the much more general information source that wikipedia is.</del> Scratch that. While revising this article and transforming it into the <del>three</del>four-month-monster it is now, I figured out Mobygames wasn’t adequate. <em>Read: they didn’t have an article on the newest Pokémon games.</em> Generally I’m not too fond of <a href="http://www.metacritic.com">Metacritic</a> since there are many ways in which this rating collection system is being abused, be it by hiring companies or game sellers. However, they are a good source of information, which is my main reason for linking there.</p>
<h2>Movies</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt0482571/">Prestige</a> (German)</li>
<li><a href="http://www.imdb.com/title/tt0165929/">Romeo Must Die</a> (German)<br />
Watched old DVD again. In German. Synchronization issues are gross. <em>Believe me, their lips are wrong.</em></li>
<li><a href="http://www.imdb.com/title/tt0478087/">21</a> (German)</li>
<li><a href="http://www.imdb.com/title/tt1587390/">Assassin's Creed: Lineage</a><br />
ACL is part of the ACB collector's edition and shows a part of Giovanni Auditori's life before the events of AC2. It provides additional background information.</li>
</ul>
<h2>Games</h2>
<ul>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-ii">Assassin's Creed 2</a><br />
Played AC2, finished AC2. Nothing exciting here, just redoing stuff to get up
to speed for part 3.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/ace-combat-6-fires-of-liberation">Ace Combat 6: Fires of Liberation</a><br />
I love the Ace Combat series and replayed part 6. Had a blast even though I
still remembered most missions. Part 6 doesn't suffer from any annoyingly difficult passages.</li>
<li><a href="http://www.metacritic.com/game/ios/terraria">Terraria</a><br />
More Terraria on iOS. Not as much as I thought though. Talked to Chris who told me that Hardmode is not yet implemented in the iOS version. Interesting when you take into account that this is about half of the game in the PC version.<br />
Haven't been able to check out the Christmas update yet.</li>
<li><a href="http://www.metacritic.com/game/3ds/pokemon-y">Pokémon Y</a><br />
I'm enjoying my pre-Christmas gift. I've always like the Pokémon games, having played the first, second and third as well as fourth generation. I skipped the fifth generation since I thought there was nothing new to see. My main gripes were (and still are) with the ways the player character is controlled. I preferred the touchscreen controls of Pokèmon Ranger to the control pad of the major games.<br />
Finished the main story line on the train. Will now try to get more Pokémon and eventually reach the pinnacle of what's realistically achievable without cheating or heading to faraway places only for the distribution of some legendary. Waiting for the <a href="http://bulbanews.bulbagarden.net/wiki/Nintendo_Direct_announces_Celebi_distribution">Celebi promotion</a> that will be introduced together with <a href="http://www.pokemonbank.com/en-us/bank/">the Pokémon bank</a>. Might be the first time I'll legitimately have one of those not encountered in the game on a standard playthrough.</li>
<li><a href="http://www.metacritic.com/game/ios/star-wars-tiny-death-star">Tiny Death Star</a><br />
Killed a lot of time. Realized time is valuable. Stopped playing after getting bored due to a lack of variety.<br />
Haven't checked out the Christmas update.</li>
<li><a href="http://www.metacritic.com/game/playstation-2/kingdom-hearts">Kingdom Hearts</a><br />
Rediscovered my love for Kingdom Hearts's mix between Disney and Final Fantasy. Finished the game in about 40 hrs, doing most of the things except for fighting <a href="http://www.khwiki.net/sephiroth">Sephiroth</a> and getting Sora's "Cheer" ability. <em>I <strong>hate</strong> the 100 Acre Wood with passion.</em> I used an old save of mine to replay the Sephiroth battle instead of maxing out the party's level again.<br />
Furthermore I spent many hours reading in the <a href="http://www.khwiki.net/Main_Page">Kingdom Hearts wiki</a>, looking up details on the universe and on the games I won't be able to play due to not owning the respective console. <em>Note: a lot of video game consoles got at least one release of Kingdom Hearts - however, while they are all canon, they are not all relevant for understanding the entirety of the plot.</em> I look forward to playing KH3 sometimes in the future. <em>Although that requires the purchase of a new console. I think my wallet may be silently crying in the next room.</em></li>
<li><a href="http://store.steampowered.com/app/233450/" title="Steam link, game is not yet published.">Prison Architect</a><br />
Manuel showed me the alpha build distributed through STEAM and it seemed like
a nice game. The animations when contruction workers build objects are adorable. The story elements and animated narrative sequences are likable as well. I was reminded of <a href="http://www.metacritic.com/game/pc/theme-hospital">Theme Hospital</a>, an old favorite of mine
back from when I loved playing a demo of the game for PS1 but never bought
an actual copy.</li>
<li><a href="http://www.metacritic.com/game/xbox-360/assassins-creed-brotherhood">Assassin's Creed: Brotherhood</a><br />
Started ACB, my favorite part of the AC series so far. Looking forward to playing <a href="http://www.metacritic.com/game/xbox-360/assassins-creed-brotherhood---the-da-vinci-disappearance">The Da Vinci Disappearance</a>.</li>
</ul>
<h2>Let's Plays</h2>
<ul>
<li><a href="http://www.metacritic.com/game/playstation/final-fantasy-viii">Final Fantasy VIII</a> (German)<br />
I'm quite fond of FF8 myself - as you might be able to recognize from my logo
being a symbol taken from the game - and talked my girlfriend into watching a German LP of the game with me. </li>
</ul>
<h2>Magazines</h2>
<ul>
<li><a href="http://www.progress-online.at">Progress</a> edition 08/2013 (<em>at least that's what I think, I lost my girlfriend's copy on the train</em>)<br />
The magazine had some interesting topics and parts of the writing were really good. However, the "gender gap" recently introduced into German writing makes enjoying longer texts a pain. The stylistic hell it presents to the reader strikes me as unbearable. I am fine with being called anti-feministic or conservative for this attitude I firmly believe that the "gender gap" transforms the joy of reading into something akin to a gargle with acid while trying to focus on a mentally exhausting task. It's made unnecessarily hard by something for which I personally fail to see the point.</li>
</ul>SWEB, qemu and a Macbook Air2013-10-13T00:31:55+02:002017-03-14T21:55:00+01:00Alexander Skibatag:ghostlyrics.net,2013-10-13:/sweb-qemu-and-a-macbook-air.html<p><strong>Updated: 2013-10-18, 12:00, added solution</strong></p>
<p>This term at university has just begun. I intend to finish some courses which require a little more to a lot more effort than previous ones. One of these would be <em>Operating Systems</em>.
In said course there are practical assignments which consist of extending …</p><p><strong>Updated: 2013-10-18, 12:00, added solution</strong></p>
<p>This term at university has just begun. I intend to finish some courses which require a little more to a lot more effort than previous ones. One of these would be <em>Operating Systems</em>.
In said course there are practical assignments which consist of extending a minimal operating system called <a href="http://sweb.sourceforge.net" title="German">SWEB</a> with lots of <a href="http://en.wikipedia.org/wiki/System_call">syscalls</a> and other important features, such as multithreading. There will be a lot of work, both for me and my two teammates.</p>
<p>The first part important part consists of setting up and configuring your working environment. One has to check out the sources from git, set up the provided git repository which we are to use as the primary remote for the assignments and install requirements not yet present on the target system.<br />
Well, that is normally. However, I wanted to reuse the virtual machine with <a href="https://www.archlinux.org">Archlinux</a> I already used for other courses. That turned out not to be easy.</p>
<h2>Stumbling</h2>
<p>SWEB needs to be built on Linux. That requires a VM. All good so far. SWEB requires a graphical environment to run, since <a href="http://wiki.qemu.org/Main_Page">qemu</a> wants to display the things that are happening in the VM that SWEB uses somewhere. Now, my Macbook Air is more of a hyperpowered typewriter - though one with an insanely great battery - and less of a development machine - most of that can be blamed on its <em>Intel Core 2 Duo</em> processor which wasn’t up to date when it was implanted in this laptop and has aged since. <strong>I usually compensate for that by using my VM headless</strong> (“headless” just means without graphical user interface). Obviously that couldn’t work since there would be nowhere for qemu to display the SWEB terminal.</p>
<h2>Trial (and many Errors)</h2>
<p>Thomas already knew that problem and had figured out that <a href="https://help.unc.edu/help/research-computing-what-is-x11-forwarding/">X11 Forwarding</a> was the key to working with SWEB in this particular way. He showed my the necessary entries in the config files responsible for forwarding an X11 session on the server and the client.</p>
<p>The server needed to have the following entries in its <code>/etc/ssh/sshd_config</code> (yes, <em>both</em>):</p>
<div class="highlight"><pre><span></span><code>ForwardX11 yes
X11UseLocalhost no
</code></pre></div>
<p>In order for X11 forwarding to automatically occur every time you connect to the machine without having to specify the command line parameters every time the client’s <code>./ssh/config</code> has to contain the following:</p>
<div class="highlight"><pre><span></span><code>ForwardX11 yes
</code></pre></div>
<p>With the other options I use to configure my box and use public key authentication with it my config now looks like this:</p>
<div class="highlight"><pre><span></span><code>Host vbox
HostName vbox.local
IdentityFile ~/.ssh/id_vbox
StrictHostKeyChecking no
ForwardX11 yes
UserKnownHostsFile /dev/null
</code></pre></div>
<p>The good thing is that after setting those options (<em>and installing some previously missed build dependencies</em>), I got my VM to compile and run SWEB. Sadly, that’s not the happy end, but where the trouble really began.</p>
<h2>No Escape</h2>
<p>SWEB started in it’s X11 window (<a href="http://xquartz.macosforge.org/landing/">XQuartz</a> since Mountain Lion), I clicked its window to confirm everything was alright and typed a few characters into the SWEB terminal. I realized that qemu captured the mouse and read in the window title “press ALT+CTRL to release mouse”. I did that. <em>Nothing happened.</em> *sigh*</p>
<p>So I tried some other combinations. None worked. Thomas and I thought about how to kill the process. Simply removing the battery won’t work, it’s a Macbook Air and therefor not user-serviceable. Waiting for the battery to run out won’t work, since it would just save everything to disk and continue when connected to a power supply. Following Thomas’s suggestion I hit the power button and the operating system’s dialogue popped up. I selected “shutdown”. OS X told me that it won’t shutdown because X11.app blocked the shutdown process. <em>Great.</em> So I had to hold the power button and force the laptop to shut down.</p>
<p>We quickly realized that there was a problem with the keys not being accepted by qemu. (<em>Yes, it is a non-default keymap, in order to be able to use a German keyboard layout. We previously modified SWEB’s</em> <code>qemu</code> <em>target to contain the additional parameter</em> <code>-k de</code>. <em>No, it doesn’t work with the default keymap either.</em>) So, what to do?</p>
<p>A possible answer is “it’s Linux, it’s open source, it’s probably configurable”. It is configurable, it’s just not <em>helpful</em> in this case. The configuration options include <code>–alt-grab</code> which uses ALT+CTRL+SHIFT and <code>–right-ctrl</code> which uses the right CTRL key. None of these is good for my case. Since I already have trouble getting ALT+CTRL to work, ALT+CTRL+SHIFT won’t help a lot. and well, a Macbook Air <em>doesn’t have</em> a right CTRL key… <em>This is getting worse, isn’t it?</em></p>
<h2>Hacking for hacking's sake</h2>
<p>Since Thomas told me that the keymap specified via command line is part of qemu and not of the underlying operating system I searched for that and found the <a href="http://packages.debian.org/sid/all/qemu-keymaps/filelist">Debian package</a> containing said files. They are quite easy to understand, but not so easy to modify since usually one doesn’t know the key commands sent to by one’s hardware. According to what I got the easiest way would be to pretend some other keys are ALT and CTRL, so I tried overwriting those with the key codes sent by F11 and F12, because who needs those when coding for SWEB anyway. That didn’t work either, <strong>but</strong> it opened the door to some workarounds that I use now.</p>
<h2>From X to OS X</h2>
<p>I accidentally triggered <a href="http://support.apple.com/kb/ht4689">Mission Control</a> (formerly <a href="http://support.apple.com/kb/HT2503">Expose</a>) and that forced X11.app to lose the mouse focus. This workaround is less than ideal but should work for now. The process of finding it also involved several hours of research.</p>
<p>However, today I discovered that it is (now?) possible to switch away from X11 with CMD+Tab. <em>I honestly can’t remember if I was smart enough to check that before…</em> Anyway, that should do it. And I’m still pretty hyped about the fact that my X11 forwarded instance of Eclipse in a virtual machine is much, much faster than one which is run with a full GUI installation of Ubuntu Linux in a virtual machine on a more powerful laptop. [<em>Insert snark about not having to install Eclipse on my main operating system here.</em>]</p>
<h2>Solution</h2>
<p>When telling Markus about my problem I realized I hadn’t checked all of the configuration options of the X11.app and asked him if there’s one that stands out to him as a possible solution. Turns out ticking “Options keys send Alt_L and Alt_R” makes everything work perfectly.
<a href="http://static.ghostlyrics.net/net.ghostlyrics.images/macosx-qemu-trouble-screens/x11.png"><img src="http://static.ghostlyrics.net/net.ghostlyrics.images/macosx-qemu-trouble-screens/x11.png" alt="X11.app screenshot with the correct option marked" /></a></p>Media Recap: August 2013 (Addendum)2013-10-09T20:51:23+02:002014-03-09T14:29:17+01:00Alexander Skibatag:ghostlyrics.net,2013-10-09:/media-recap-august-2013-addendum.html<p><strong>Update summary: 2 novels, 2 podcasts</strong></p>
<p>I was in the mood for trying a new system of taking notes for the monthly media recap but it didn’t work out so great, so here is the part I missed during my <a href="/media-recap-august-2013.html">initial post</a>.</p>
<!--more-->
<h2>Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/9432730/Die-Tote-am-Watt">Die Tote am Watt</a> by <a href="http://www.gisa-pauly.de/">Gisa …</a></li></ul><p><strong>Update summary: 2 novels, 2 podcasts</strong></p>
<p>I was in the mood for trying a new system of taking notes for the monthly media recap but it didn’t work out so great, so here is the part I missed during my <a href="/media-recap-august-2013.html">initial post</a>.</p>
<!--more-->
<h2>Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/9432730/Die-Tote-am-Watt">Die Tote am Watt</a> by <a href="http://www.gisa-pauly.de/">Gisa Pauly</a><br />
Finished the next Amazon promotional book, already <a href="http://ghostlyrics.net/2013/08/06/media-recap-july-2013/">discussed</a> before. - <strong>MISS</strong></li>
<li><a href="http://www.shelfari.com/books/32556584/Midnight-Frost">Midnight Frost</a> by <a href="http://www.shelfari.com/authors/a737585/Jennifer-Estep/">Jennifer Estep</a><br />
I don't have a lot to say about this. I like the series, so I bought it, read it, liked it.</li>
</ul>
<h2>Podcasts</h2>
<ul>
<li>Accidental Tech Podcast
<ul>
<li>21 - <a href="http://atp.fm/episodes/21-the-transitive-property-of-nerdiness">The Transitive Property of Nerdiness</a></li>
<li>22 - <a href="http://atp.fm/episodes/22-full-brichter">Full Brichter</a></li>
</ul></li>
</ul>Media Recap: August 20132013-09-26T22:34:06+02:002014-03-09T14:44:38+01:00Alexander Skibatag:ghostlyrics.net,2013-09-26:/media-recap-august-2013.html<p><strong>Summary: 4 games, 12 podcasts, 2 let’s plays</strong></p>
<p>There’s still not much going on since I’m developing a very nice command line tool for personal use which I intend to use to write a microblog-style website with daily reading tips.</p>
<!--more-->
<h2>Games</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Beyond_Good_%26_Evil_(video_game)#HD_edition">Beyond Good and Evil HD</a><br />
I …</li></ul><p><strong>Summary: 4 games, 12 podcasts, 2 let’s plays</strong></p>
<p>There’s still not much going on since I’m developing a very nice command line tool for personal use which I intend to use to write a microblog-style website with daily reading tips.</p>
<!--more-->
<h2>Games</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Beyond_Good_%26_Evil_(video_game)#HD_edition">Beyond Good and Evil HD</a><br />
I played Beyond Good and Evil many years ago on my Playstation 2 and found it interesting. However, I was struck by a nasty bug which took away items and didn't hand me my purchase when at a shop and quit. When I read that there was a new version in High Definition and - admittedly - with achievements I was already convinced to buy it and only needed the right time. This time I completed the game together with my girlfriend who took part in the photography and hovercraft part. </li>
<li><a href="http://en.wikipedia.org/wiki/Mass_effect_3">Mass Effect 3</a><br />
Finally completed ME3, once <a href="http://ghostlyrics.net/2013/08/23/companion-gaming-mass-effect-3-pt-ii/">with my girlfriend</a> and once for the <a href="http://www.trueachievements.com/a161843/unwavering-achievement.htm">Unwavering</a> achievement. I hope to take a long break from the series. </li>
<li><a href="http://en.wikipedia.org/wiki/Gyromancer">Gyromancer</a> - nearly done<br />
<a href="http://en.wikipedia.org/wiki/Gyromancer">Gyromancer</a> was my solution for a lot of sleepless nights in August as well as spending some time while alone. I am almost done with the game without DLC by the time of this writing. I've completed the story and got all achievements bar <a href="http://www.trueachievements.com/a39544/bearer-of-120-awards-achievement.htm">Bearer of 120 Awards</a>. Some of those were quite hard and I required a lot of help in the form of video tutorials. </li>
<li><a href="http://en.wikipedia.org/wiki/Assassin%27s_Creed_(video_game)">Assassin's Creed (1)</a><br />
Let me spell this out: Assassin's Creed 1 is <strong>boring</strong>. Very so. I replayed this game for my girlfriend so we would avoid her not having much context when playing other games from the series - very different to her being thrown into Mass Effect 3 with me explaining while playing.</li>
</ul>
<h2>Podcasts</h2>
<ul>
<li>Hypercritical 90 - <a href="http://5by5.tv/hypercritical/90">Salad Days</a><br />
I couldn't remember most of the context when listening to the last minutes left of episode 90 and wasn't willing to rewind the podcast enough to get a better understanding.</li>
<li>IRQ Conflict 48 - <a href="http://feedproxy.google.com/~r/irqconflict/~5/394Lep5seyI/IRQ%20Conflict%2048%20-%20Windows%20Phone%20Idol.mp3" title=".mp3 direct link">Windows Phone Idol</a></li>
<li>The Secret Archives of the Vatican Podcast 103 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_103.mp3" title=".mp3 direct link">Desert Storm</a></li>
<li>Alternativlos 24 - <a href="http://alternativlos.org/24/" title="German podcast">Gast: Dr. Mathias Döfpner</a><br />
Another podcast of which I merely listened to the remainder from last month. About 30 minutes gave enough context though. Knowledge fades frighteningly fast, though. I hardly remember details about the <em><a href="http://de.wikipedia.org/wiki/Leistungsschutzrecht" title="German Wikipedia">Leistungsschutzrecht</a></em>.</li>
<li>Accidental Tech Podcast
<ul>
<li>23 - <a href="http://atp.fm/episodes/23-the-x-or-the-x">The X Or The X</a></li>
<li>24 - <a href="http://atp.fm/episodes/24-double-meta">Double Meta</a></li>
<li>25 - <a href="http://atp.fm/episodes/25-thrustmaster-joystick">Thrustmaster Joystick</a></li>
<li>26 - <a href="http://atp.fm/episodes/26-three-phones-ago">Three Phones Ago</a></li>
<li>27 - <a href="http://atp.fm/episodes/27-overflow-gallery-in-the-bathroom">Overflow Gallery in the Bathroom</a></li>
</ul></li>
<li>Mac Power Users 67 - <a href="http://5by5.tv/mpu/67">Web Security and your Apple Devices</a></li>
<li>The Crossover 3 - <a href="http://5by5.tv/crossover/3">Generational Loss</a></li>
<li>5by5 special 2 - <a href="http://5by5.tv/specials/2">Thank You, Steve Jobs</a><br />
It's strange. I know that people view me as a fan of Apple. I admit I am fond of its technology. But the statements in this special tribute to Steve Jobs in fact made me feel a little sad. It was very emotional.</li>
</ul>
<h2>Let's Plays</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Darksiders">Darksiders</a> - <a href="http://lparchive.org/Darksiders-(by-Ambisagrus)/">played by Ambisagrus</a><br />
Some may remember that I watched a Zelda let's play by Ambisagrus. He mostly does Zelda LPs, but since <a href="http://en.wikipedia.org/wiki/Darksiders">Darksiders</a> is apparently very close to the Zelda formula he played that game as well. Had quite some fun here.</li>
<li><a href="http://us.battle.net/d3/en/">Diablo 3</a> - played by my friend Markus<br />
Markus invited me to watch him play Diablo 3 since he had already completed it on the hardest possible difficulty setting and had a blast. He's generally very fond of the game and it was a blast watching him tear through his enemies using a barbarian on the second hardest setting - only because it would take way less time for me to watch the story sequences. It still took us two sessions with each spanning about 3-4 hours. At least that's what I remember. <em>Might have been more. Or was it less? Time is such a mushy concept during the holidays.</em></li>
</ul>youtube2iTunes, a very simple shell script2013-09-02T00:29:24+02:002014-02-14T00:46:55+01:00Alexander Skibatag:ghostlyrics.net,2013-09-02:/youtube2itunes-a-very-simple-shell-script.html<p>A while back when updating my <a href="http://brew.sh">homebrew</a> packages I came across <a href="http://rg3.github.io/youtube-dl/"><code>youtube-dl</code></a> but never had enough motivation to check it out. I hardly ever need to download videos from Youtube, but I was in need of this again when spending more time using a metered internet connection (read: mobile broadband …</p><p>A while back when updating my <a href="http://brew.sh">homebrew</a> packages I came across <a href="http://rg3.github.io/youtube-dl/"><code>youtube-dl</code></a> but never had enough motivation to check it out. I hardly ever need to download videos from Youtube, but I was in need of this again when spending more time using a metered internet connection (read: mobile broadband). To be able to use as much of the traffic volume for useful things (like pictures of cats) I usually try to cache as much video content as deemed necessary on my laptop. That involves downloading from <a href="http://youtube.com">Youtube</a>, preferable in a format that my iOS devices understand so I can sync everything without having to convert between different video formats and video containers.</p>
<p>I formerly used JDownloader for uhm, various activities which I don’t do anymore. The software remained on my machine for the purpose of downloading from video sites, primarily Youtube. Now, for different reasons I am no fan of Java on OS X. Java regularly has security issues. The technology is largely outdated in browsers. Few applications are written in Java and properly uphold the patterns in terms of usage and interface design that are present in the Cocoa framework. <em>A notable exception is <a href="http://cyberduck.ch">Cyberduck</a>, a file-transfer solution for multiple protocols I’m very fond of.</em> JDownloader, as I <a href="http://ghostlyrics.net/2011/08/15/jdownloader-suggestions-for-os-x/">have complained</a> in the past is ugly and doesn’t care about platform conventions, regardless of the platform. I was willing to replace that with something better any day.</p>
<p>However, to use my iOS devices with <code>youtube-dl</code> some little trick had to be done, because I wanted to only download the specified formats. Also I didn’t like the thought that I would need to manually import the files into iTunes every time. That wasn’t necessary though since iTunes can <a href="http://support.apple.com/kb/HT3832">import from a special folder since version 9</a>. All that was left for me was to string those things up into one nice script and be done.</p>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span> <span class="s2">"Downloading </span><span class="nv">$1</span><span class="s2">"</span>
youtube-dl -f <span class="m">37</span>/22/18 -o <span class="s2">"</span><span class="nv">$HOME</span><span class="s2">/Downloads/%(title)s-%(id)s.%(ext)s"</span> <span class="nv">$1</span>
mv ~/Downloads/*.mp4 ~/Music/iTunes/iTunes<span class="se">\ </span>Media/Automatically<span class="se">\ </span>Add<span class="se">\ </span>to<span class="se">\ </span>iTunes/
</code></pre></div>
<p>This nice script does exactly that:</p>
<ul>
<li>outputs a little confirmation to the terminal with the URL you handed it</li>
<li>downloads the file as MP4, trying to download 1080p, 720p and 270p/360p resolution versions of the video. (should you need other versions check the <a href="http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs">wikipedia table</a>)</li>
<li>moves all .MP4 files in your <code>~/Downloads</code> folder to the special iTunes folder which automatically adds them to your library.</li>
</ul>
<p>Combine this script with the iTunes sync preference <strong>Movies / Sync Movies / Automatically include X most recent unwatched movies along with selected movies</strong> and everything you download gets synced to your devices whenever you sync to iTunes.</p>
<p>You use the script by saving it to a file, making that executable with <code>chmod +x <filename></code>, adding it to your <code>PATH</code> and calling it from Terminal via <code>youtube2itunes <URL></code>.</p>
<hr />
<p>Thanks to Thomas for helping me find the correct way to specify the home directory in the <code>youtube-dl</code> command.</p>But it said ARC enabled.2013-08-27T02:07:08+02:002014-02-14T00:46:55+01:00Alexander Skibatag:ghostlyrics.net,2013-08-27:/but-it-said-arc-enabled.html<p>Since I’m currently in the process of learning development in Objective-C I intended to use the newest tools provided whereever possible (except for the beta-quality ones) - that includes <strong>A</strong>utomatic <strong>R</strong>eference <strong>C</strong>ounting. ARC is intended to make life easier for developers by automatically inserting memory-management related instructions …</p><p>Since I’m currently in the process of learning development in Objective-C I intended to use the newest tools provided whereever possible (except for the beta-quality ones) - that includes <strong>A</strong>utomatic <strong>R</strong>eference <strong>C</strong>ounting. ARC is intended to make life easier for developers by automatically inserting memory-management related instructions during compile time.</p>
<p>From <a href="http://clang.llvm.org/docs/AutomaticReferenceCounting.html">the Clang documentation about ARC</a>:</p>
<blockquote>
Automatic Reference Counting implements automatic memory management for Objective-C objects and blocks, freeing the programmer from the need to explicitly insert retains and releases.
</blockquote>
<p>You enable the technology when creating a new project, a compiler flag gets set (<code>-fobjc-arc</code> if you’re curious), done. Afterwards you develop according to slightly changed criteria, but generally don’t have to worry about the previously Obj-C typical ‘retain’, ‘release’ and ‘autorelease’ instructions. This is work the Clang compiler does for you when building your project.<br />
There are even tools to help you migrate your previous projects to ARC. You can even use them to migrate external code to ARC. <em>This is precisely where my problems began.</em></p>
<p>I intended to write a simple cache file listing which files have already been processed and which are to be processed again due to changes and wanted to implement that using the filename and a hash value for that. Since I was initially too lazy to reach down into C using <a href="https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/Common%20Crypto.3cc.html">Common Crypto</a> I intended to use a <a href="http://www.cocoawithlove.com/2009/07/hashvalue-object-for-holding-md5-and.html">a class provided by Matt Gallagher</a> in order to save time and focus on my project instead of fighting with C.
The first thing I noticed was that the code was already a bit older and therefor written before the advent of ARC. Well, no problem, let’s just run the ‘Migrate to ARC’ tool. But little is ever as simple as just running a conversation tool on existing code. While the converter worked pretty well and it’s suggestions were perfect for the intended class, <em>not selecting my existing, already ARCified classes set their compiler-flag to</em> <code>-fno-objc-arc</code> <sup id="fnref-1526-arc"><a href="#fn-1526-arc" rel="footnote">1</a></sup>. I wondered why I had to manually type ‘strong’ when declaring properties after that and why Xcode suggested that it used ‘assign’ when not specifying ‘strong’ even though that’s a non-ARC convention.</p>
<p>Today I ran the ‘Analyze’ build setting and fixed some leaks. In the process I also got a warning about a potential leak that I just couldn’t find. I seemed to do everything right and still got a warning about the leak:</p>
<div class="highlight"><pre><span></span><code>main.m:92:3: Object leaked: object allocated and stored into 'cachedFiles'
is not referenced later in this execution path and has a retain count of +1
</code></pre></div>
<p>After a lot of swearing, frantically searching for answers and annoying others, my girlfriend suggested that I may have lost ARC somewhere. But I checked the Build Settings for the project and ARC was on. I did a quick test by creating a new Xcode project file, copied files over and ran ‘Analyze’ again. Sure enough, there were no warnings at all. More swearing ensured. Finally I stumbled across a <a href="http://stackoverflow.com/a/2889730/592207">helpful post on StackOverflow</a> and put both project files in FileMerge. The ARC flags were spotted.</p>
<p>To fix the problem I opened the project in Xcode, went to the build target, the tab <strong>Build Phases</strong>, <strong>Compiles Sources</strong> and removed offending compiler flags from the affected files.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn-1526-arc">
Why would I want to convert my <em>already ARCified classes</em> to ARC? What's the point of setting that flag when the original project setting already was 'enable ARC'? <a href="#fnref-1526-arc" rev="footnote">↩</a>
</li>
</ol>
</div>Companion Gaming - Mass Effect 3 pt. II2013-08-23T17:54:00+02:002014-02-14T00:46:56+01:00Alexander Skibatag:ghostlyrics.net,2013-08-23:/companion-gaming-mass-effect-3-pt-ii.html<p><em>I’ve been looking forward to this.</em> Companion Gaming, the second edition.<br />
After completion of <a href="http://masseffect.bioware.com" title="official site">Mass Effect 3</a> I was curious to get some more thoughts from my girlfriend as I myself have already written and talked extensively about Mass Effect ever since becoming fascinated by its first part.</p>
<p>I …</p><p><em>I’ve been looking forward to this.</em> Companion Gaming, the second edition.<br />
After completion of <a href="http://masseffect.bioware.com" title="official site">Mass Effect 3</a> I was curious to get some more thoughts from my girlfriend as I myself have already written and talked extensively about Mass Effect ever since becoming fascinated by its first part.</p>
<p>I’ve published my thoughts about ME3 with my girlfriend <a href="/companion-gaming-mass-effect-3.html">last time</a>. Consider this article an addendum to that post after having finished the game. So if you are interested I highly recommend reading <a href="/companion-gaming-mass-effect-3.html">part I</a> and coming back. I’ll wait for you.</p>
<p>You’re back? Good. Let’s start this.</p>
<h2>Impressions</h2>
<blockquote>
There are many, many different characters with vastly differing personalities.
</blockquote>
<p>Yes, this is certainly true. On the other hand this is what I expect when playing a game that has its roots deeply in Role Playing Game territory. While not strictly an RPG it has many of its elements; especially part 3 is a lot closer to being an RPG than part 2; which was more of an RPGish shooter. A variety of interesting characters is one of the basic building elements of an RPG. RPGs are about character progression; not only in the numerical “Do X to level up” way but crucially about depicting a change in character when looking at the protagonists. A foundation of good storytelling is the theme of growing up, filling a role and fulfilling a special purpose. It’s hard to find a genre in which this theme is more important than RPGs.</p>
<blockquote>
The 'Destroy'-Ending is unsatisfying.
</blockquote>
<p>Yes, but there’s a reason I specifically chose this ending, even though I personally think that ‘Synthesis’ is how the story should end, because it’s a far more fitting conclusion to the events up to the final point. ‘Destroy’ is bad in a number of different ways, but mainly because it annihilates the newly brokered peace between Geth and Quarians due to indiscriminately eliminating all synthetic forms of life. I wanted to see Shepard alive after all the events. I wasn’t really ready to let go of the Commander that I’ve played for all those hours in all those years. Shepard would’ve chosen ‘Synthesis’ but some dumb reason I didn’t.</p>
<blockquote>
There were no little blue children.
</blockquote>
<p>Everyone got their hopes up when Liara and Shepard are talking about the little blue children in part 2 and even during the last sequences of part 3. None of those romantic fantasies containing little blue children came true. Which is a pity, to be honest and you should have <a href="http://criz.deviantart.com/art/lots-of-little-blue-children-283937891">a nice picture</a> to improve your mood. Or another one of Shepard and Liara’s potential <a href="http://tilhe.deviantart.com/art/Shepard-s-Hope-311834237">teen daughter</a>. Overall a lot of people would’ve preferred a happy ending with a fitting conclusion to the overall story arc. That wasn’t what we got and it’s okay too. Game makers also enjoy artistic freedom and I wouldn’t have it any other way. The <a href="http://masseffect.bioware.com/about/extended_cut/">Extended Cut</a> contained more explanatory content but didn’t change the endings’ effects. That’s how it should be else we set a precedent with unfortunate consequences. While players might have a say via community voting and similar processes during the development stage of a game, changing something afterwards because a majority didn’t like it is ridiculous and inconsequential. By the way, <a href="http://gamedesignreviews.com/scrapbook/mass-effect-3-extended-cut/">Krystian thinks a little different about the Extended Cut</a>.</p>
<blockquote>
ME3 has lots of plot variety and choices. It is cool that most of the time you can achieve an optimum outcome.
</blockquote>
<p>Very true. For many squadmates your actions decide over their fate, whether they survive their individual ordeals and your choices decide how they deal with their individual struggles. You shape their lives as much as their companionship influences your Shepard’s quest. While I personally was very sad that it wasn’t possible to have everyone of my old and current team survive and achieve everything that I wanted to see from the narrative I also understand that there has to be drama and freedom to the story the writers create for a game like this. The central theme of <em>war</em> is by no means a friendly topic and to have everything (space-)magically work out without any casualties on your side even though the enemies are superior in strength as well as in numbers would make the game disconnected with what the story it aims to tell.</p>
<blockquote>
The Geth server level is amazing.
</blockquote>
<p>Hm, kind of. I mean, yes, all opinion is subjective and all that but given that the strengths of ME3 are its narrative and its combat system this non-combat sequence was surprisingly fun. Getting to know some of the Geths’ history in addition to a relaxing level which is fun to play without any of the stress of getting shot at certainly qualifies it as one of the highlights of the game when looking at original ideas.<br />
<em>Addendum: my girlfriend played this, as sort of a greater introduction to ME3’s controls and combat mechanics.</em> I’d like to mention that this would’ve made for a great tutorial given that the true prologue featuring cannibals and husks makes for an introduction that might be perceived as too hectic.</p>
<blockquote>
Why aren't there more easy levels like this?
</blockquote>
<p>Well, because by default Mass Effect is not intended to be played on the ‘Narrative’ difficulty. If you’re only in for the story however, that is precisely the recommended setting. The Mass Effect wiki has <a href="http://masseffect.wikia.com/wiki/Combat_(Mass_Effect_3)#Narrative">an explanation on the ‘Narrative’ setting</a>.</p>
<blockquote>
Citadel was hilarious.
</blockquote>
<p>Very true. The humorous aspects of Citadel cannot be overstated. There are so many puns, jokes and ridiculous situations crammed into this download of about 15€ as well as minigames and additional content and so much more that it’s hard not to recommend it. The writing is excellent - something that has to be expected when the Bioware writing team goes <a href="http://www.xbox360achievements.org/news/news-13587-New-Mass-Effect-3-DLC-in-the-Works---All-Hands-on-Deck--At-BioWare.html">all hands on deck</a>.</p>
<blockquote>
Your girlfriend is stupid. She keeps on saying the same things.
</blockquote>
<p>I had to chuckle when my girlfriend used these words to express her annoyance about the NPCs having limited lines which they repeat after having run out of special topics. Especially the romance options could’ve had more additional lines of dialogue. <em>One can only hear “Nice to see you, Shepard” for so often before it’s too often.</em> She also pointed out that it’s somewhat awkward to have the romance partners call your character ‘Shepard’ because you don’t call your significant other by their surname. Given that the player can choose the main character’s given name, introducing a - possibly gender-neutral - nickname per romance option would’ve improved dialogues and made them feel more intimate.</p>
<blockquote>
That's a crappy ending too!
</blockquote>
<p>Since the ‘Destroy’ ending wasn’t quite satisfying, we jumped on YouTube some days later and checked out the other two and a half endings; them being ‘Synthesis’, ‘Control’ and ‘Reject’. We both feel that, if given the presented four options are the only possible answers, ‘Synthesis’ is how the story should end. ‘Control’ isn’t too bad if your hero is on the paragon side while ‘Reject’ prompted above quote.</p>
<h2>Conclusion</h2>
<p>ME3 was fun (for the most parts) while it lasted. It has been suggested to me that a fourth part has been announced but I haven’t looked into it since I’m currently oversaturated with the ME universe. This should be the last Mass Effect related post for a while.<br />
I’m already preparing the next Companion Gaming article - about <a href="http://beyond-good-and-evil.ubi.com/beyond-good-and-evil-hd/en-GB/home/" title="official site">Beyond Good and Evil HD</a> which we’ve recently finished.</p>
<blockquote>
All those little blue children will be disappointed that I didn't have a speech. ~Liara
</blockquote>Reading Recommendation: Kids Can't Use Computers2013-08-15T14:19:01+02:002014-02-14T00:46:57+01:00Alexander Skibatag:ghostlyrics.net,2013-08-15:/reading-recommendation-kids-cant-use-computers.html<p><a href="http://coding2learn.org/blog/2013/07/29/kids-cant-use-computers/">→ Kids Can’t Use Computers… And This Is Why It Should Worry You</a></p>
<p>I keep on complaining about the computer illiteracy of my fellow humans - and
even fellow Computer Science students. Yesterday I read this great piece that
just makes exactly that point. Kids spend hours and hours in front …</p><p><a href="http://coding2learn.org/blog/2013/07/29/kids-cant-use-computers/">→ Kids Can’t Use Computers… And This Is Why It Should Worry You</a></p>
<p>I keep on complaining about the computer illiteracy of my fellow humans - and
even fellow Computer Science students. Yesterday I read this great piece that
just makes exactly that point. Kids spend hours and hours in front of computers
these days but that doesn’t make them experts.</p>
<p>The thought that this is a very bad sign for our society has more than just
showed up in my head. I keep thinking that there is a certain need for the
children of today to be aware of a lot of things concerning computers.</p>
<p>I don’t
expect everybody to be able to change the RAM or reinstall their operating
system of choice. I *do* however expect people to be able to install and
remove software on their computers, especially those on Windows and OS X
(given they have the corresponding permissions to do that). I also expect
people to hop on the Wi-Fi if given the credentials and set the proxy if given
the corresponding settings.</p>
<!-- data -->Media Recap: July 20132013-08-06T22:32:48+02:002014-03-09T14:42:15+01:00Alexander Skibatag:ghostlyrics.net,2013-08-06:/media-recap-july-2013.html<p><strong>Summary: 15 podcasts, 1 let’s play, 4 novels, 2 videos, 1 album, 5 games and many articles saved to <a href="http://getpocket.com" title="Formerly Read It Later">Pocket</a> while commuting.</strong></p>
<!--more-->
<h2>Podcasts</h2>
<p>Commuting gave me many opportunities to catch up with stuff I had long
postponed. I’ve listened to the non-music related podcasts on the train while …</p><p><strong>Summary: 15 podcasts, 1 let’s play, 4 novels, 2 videos, 1 album, 5 games and many articles saved to <a href="http://getpocket.com" title="Formerly Read It Later">Pocket</a> while commuting.</strong></p>
<!--more-->
<h2>Podcasts</h2>
<p>Commuting gave me many opportunities to catch up with stuff I had long
postponed. I’ve listened to the non-music related podcasts on the train while
I used my big headphones in the office combined with the Secret Archives of the
Vatican podcast to drown the construction site noises when working. Focussing
on one’s task is quite hard when there’s the sound of a drill coming into your
office from two different directions.<br />
I highly recommend listening to the
<a href="http://www.muleradio.net/thetalkshow/44/">44th episode of the Talk Show with John Gruber</a> which is incredibly
funny and worth every minute of listening time.</p>
<ul>
<li>Accidental Tech Podcast 16 - <a href="http://atp.fm/episodes/16-john-we-dont-play-games">John, We Don't Play Games</a></li>
<li>Accidental Tech Podcast 18 - <a href="http://atp.fm/episodes/18-aluminum-colored-aluminum">Can't Innovate Anymore</a></li>
<li>Accidental Tech Podcast 19 - <a href="http://atp.fm/episodes/19-designed-by-app-in-cal">Aluminum-Colored Aluminum</a></li>
<li>Accidental Tech Podcast 20 - <a href="http://atp.fm/episodes/20-a-box-and-a-strap">Designed by App in Cal</a></li>
<li>The Talk Show with John Gruber 44 - <a href="http://www.muleradio.net/thetalkshow/44/">Code 47: Live From WWDC 2013</a></li>
<li>5by5 Special 1 - <a href="http://5by5.tv/specials/1">Let's talk iPhone</a></li>
<li>Mac Power Users 61 - <a href="http://5by5.tv/mpu/61">Workflows with Michael Lopp</a></li>
<li>IRQ Conflict 47 - <a href="http://feedproxy.google.com/~r/irqconflict/~5/g6vmSmnkqSE/IRQ%20Conflict%2047%20-%20We%20Found%20Justin.mp3" title="MP3">We Found Justin!</a></li>
<li>Secret Archives of the Vatican 100 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_100.mp3" title="MP3">Why Do We Fight?</a></li>
<li>Secret Archives of the Vatican 104 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_104.mp3" title="MP3">Winter Journey</a></li>
<li>Secret Archives of the Vatican 105 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_105.mp3" title="MP3">Encyclopedia Orientika</a></li>
<li>Secret Archives of the Vatican 106 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_106.mp3" title="MP3">Strange New World</a></li>
<li>Secret Archives of the Vatican 107 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_107.mp3" title="MP3">Long Ago and Far Away</a></li>
<li>Secret Archives of the Vatican 109 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_109.mp3" title="MP3">Forbidden City</a></li>
<li>Secret Archives of the Vatican 110 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_110.mp3" title="MP3">The Elder Scrolls</a></li>
</ul>
<h2>Let's Plays</h2>
<ul>
<li><a href="http://lparchive.org/Legend-of-Zelda-Majoras-Mask-(by-Ambisagrus)/">Zelda: Majora's Mask</a><br />
Majora's Mask is a great game. In fact I believe it's one of only two video
games in which I've ever put the effort to obtain everything and achieve
100% completion. Watching the LP and reliving some memories felt good, even
though the LPs by Ambisagrus and A Wooden Palisade are certainly not for
suited for everyone's taste. They hardly talk about the game they're playing
but make a lot of funny references, compare the game to other video games
and are definitely NSFW.</li>
</ul>
<h2>Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/35905686/Spartan-Frost">Spartan Frost</a> by <a href="http://www.shelfari.com/authors/a737585/Jennifer-Estep/">Jennifer Estep</a><br />
Spartan Frost is an interesting short deviation from Estep's norm; written
from the perspective of the male lead instead of the female heroine. Short,
concise and perfectly fitting into Estep's little world.</li>
<li><a href="http://www.shelfari.com/books/15233362/Shaken">Mr. K</a> by <a href="http://www.shelfari.com/authors/a299783/J-A-Konrath/">J. A. Konrath</a> (German)<br />
<em>Amazon Promotion</em>. A slow, not terribly interesting thriller around mafiosi
and cruel killings of prostitutes. - <strong>MISS</strong></li>
<li><a href="http://www.goodreads.com/author/show/6926399.Alexander_Odin" title="I prefer linking to Shelfari, but there is no site for this title yet. So GoodReads it is.">Pandämonium</a> by <a href="http://www.alexander-odin.com/" title="Requires Flash">Alexander Odin</a> (German)<br />
<em>Amazon Promotion</em>. A raw, gruesome, terribly brutal book. Written by an
author whose usual target audience are teenagers, which makes me worry a
little bit. - <strong>MISS</strong></li>
<li><a href="http://www.shelfari.com/books/9432730/Die-Tote-am-Watt">Die Tote am Watt</a> by <a href="http://www.gisa-pauly.de" title="Official site instead of Shelfari profile">Gisa Pauly</a> (German, unfinished)<br />
<em>Amazon Promotion</em>. Detective story with the detective being the Italian
mother-in-law. Exhausting, not my kind of story. - <strong>MISS</strong></li>
</ul>
<h2>Videos</h2>
<p>I’ve found some really old episodes of
<a href="https://en.wikipedia.org/wiki/The_Untouchables_of_Elliot_Mouse">The Untouchables of Elliot Mouse</a> and watched those. I have fond
memories of watching that series when I was a lot younger and am now wondering
whether it is common to consider the TV series of one’s youth vastly superior
to the ones that are airing after one has grown up.</p>
<ul>
<li>Mouse 5 (German)</li>
<li>Mouse 6 (German)</li>
</ul>
<h2>Albums</h2>
<ul>
<li><a href="https://cloudpt.pt/link/50a14ca4-89d1-4221-88ed-be230b262a2a/Shiryu-MassEffectively.zip" title="free album download">Mass Effectively</a> by <a href="http://shiryumusic.no.sapo.pt">Shiryu</a><br />
There was a <a href="http://kotaku.com/the-many-musical-tributes-to-mass-effect-472686867">post on Kotaku talking about music tributes to Mass Effect</a>,
mainly created by its fans. I downloaded several pieces back then but
Shiryu's album really stuck with me. I especially like <a href="http://youtu.be/X8-q7qF_GlE" title="Youtube">N7 initiative</a>
because I think it really captures the atmosphere and sincerity of the third
game.</li>
</ul>
<h2>Games</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Mass_Effect_3">Mass Effect 3</a><br />
Companion Gaming with my girlfriend, we're almost done by the time of this
writing. We're back on Earth, heading towards the final conflict. <em>And I'm
really looking forward to playing another game now.</em></li>
<li><a href="https://en.wikipedia.org/wiki/Halo_3:_ODST">Halo 3: ODST</a><br />
Played ODST with Ron when he was in Austria.</li>
<li><a href="https://en.wikipedia.org/wiki/Soul_Calibur_IV">Soul Calibur IV</a><br />
Played Soul Calibur with Ron when he was in Austria. We talked a bit about
the differences between the newer versions and the Gamecube version he has
played.</li>
<li><a href="http://adarkroom.doublespeakgames.com">A Dark Room</a><br />
I had to try this little HTML5 and CSS supported browserbased game but lost
interest when things started to slow down and exploring got tedious.</li>
<li><a href="http://www.rabbittell.com/games/trapped_classic/part_1_white_rabbit.php">Trapped - The White Rabbit</a><br />
Incidentally I remembered the beautiful and intelligent Trapped Flash game
series and showed it to my girlfriend.</li>
</ul>Media Recap: June 20132013-07-05T13:19:38+02:002014-03-09T14:39:55+01:00Alexander Skibatag:ghostlyrics.net,2013-07-05:/media-recap-june-2013.html<p><strong>Summary: 2 games, 1 movie, 3 podcasts, 6 longer documents,
3 developer sources, 8+ videos</strong></p>
<!--more-->
<p>I often think about how to link games and movie titles. My internal debate is
on whether to link the media’s official website or to simply link to the
corresponding Wikipedia page. There’s …</p><p><strong>Summary: 2 games, 1 movie, 3 podcasts, 6 longer documents,
3 developer sources, 8+ videos</strong></p>
<!--more-->
<p>I often think about how to link games and movie titles. My internal debate is
on whether to link the media’s official website or to simply link to the
corresponding Wikipedia page. There’s merit in both of those solutions.</p>
<ol>
<li>Linking to <em>the official site</em> often offers the benefit of trailers, image
assets, official descriptions and more. The downside is that all that simply
disappears whenever the responsible companies lose interest in a IP or have
to cut down on budget.</li>
<li>Linking to <em>Wikipedia</em> has the benefit of persistence. The page describing
the linked content will not disappear easily but on the other hand lack more
visual details that could be enjoyed on an official site.</li>
</ol>
<h2>Games</h2>
<ul>
<li><a href="http://masseffect.bioware.com/about/">Mass Effect 3</a><br />
Well, by now I should've finished Mass Effect 3, you think, right? To be
honest I'm almost ready to move on myself. There's still the Citadel DLC and
about three main missions to complete before my girlfriend and <del> I can start
another game for our <a href="/tag/companion-gaming/">companion gaming</a> thing. (<em>that might become a new
category of posts</em>)</del></li>
<li><a href="http://www.dontstarvegame.com">Don't Starve</a><br />
I've had some extra time to burn and went back to check out the current
status of Don't Starve which has been officially released by now. It's nice.
I'm playing the OS X version on my Macbook Air from late 2010 which means
it's not entirely without lag, but playable. From what I've seen skimming
the <a href="http://store.steampowered.com/news/?feed=steam_updates&appids=219740">changelogs</a> on Steam there have been many content updates bringing
different biomes and even seasons to the game. I look forward to hopefully
sinking some more time into <a href="http://www.dontstarvegame.com">Don't Starve</a> in the near future.</li>
</ul>
<h2>Movies</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt0475723/">Shinobi - Heart under Blade</a> (German)<br />
I found it pretty hard to believe but even though the month was filled to the
brim with assignments and tests for university, there was time to watch a
longish movie. I still like Shinobi even though I've seen it multiple times,
owning the DVD. It's at parts very violent, but a refreshingly sad story.</li>
</ul>
<h2>Podcasts</h2>
<p>I don’t seem to have as much time and dedication as before for podcasts, mainly
listening to them when having a long walk or on cleaning duty.</p>
<ul>
<li>Accidental Tech Podcast 16 - <a href="http://atp.fm/episodes/16-john-we-dont-play-games">John, We Don't Play Games</a> (incomplete)</li>
<li>Accidental Tech Podcast 17 - <a href="http://atp.fm/episodes/17-cant-innovate-anymore">Can't Innovate Anymore</a></li>
<li>Build & Analyze 44 - <a href="http://5by5.tv/buildanalyze/44">Customers As Body Parts</a> (finished)</li>
</ul>
<h2>Documents</h2>
<ul>
<li><a href="https://developer.apple.com/library/etc/redirect/WWDR/WhatsNewiOS">What's New in iOS 7</a> (requires Apple Developer account)<br />
The developer document from Apple about upcoming APIs in iOS 7 offered a
particularly interesting read and outlook on what will be possible for Apps
making use of iOS 7 only features.</p></li>
<li><p><a href="http://www.marco.org/media/2013/06/my-2006-resume.pdf">Marco's resume</a><br />
Was interesting, if only to recognize how different resumes in Austria are
supposed to look like if you adhere to the guidance offered by coaching
programs.</p></li>
<li><a href="http://www.cs.cmu.edu/~aldrich/courses/654/tools/gbajabiamila-purify-05.pdf">Evaluation of Purify Plus</a><br />
I was curious to see if something similar to <a href="http://valgrind.org/info/about.html">Valgrind</a> existed in the
Windows world, seeing that as far as I'm understood it there's no way to run
the <a href="http://clang-analyzer.llvm.org">clang static analyzer</a> on Windows either. After some research I
discovered this evaluation of <a href="http://www.ibm.com/developerworks/rational/products/purifyplus/">Purify Plus</a>, an IBM product for companies
which aims to solve the same problems as Valgrind. To my delight I came
across <a href="http://www.cs.cmu.edu/~aldrich/courses/654/tools/gbajabiamila-purify-05.pdf">the linked document</a>, which is an evaluation of said tool,
done by students at the Carnegie Mellon University.</li>
<li>The Magazine - <a href="http://the-magazine.org/14/loose-stuffing">Loose Stuffing</a> ("How Couchsurfing lost its kumbaya.")<br />
I wanted to look into The Magazine for quite a long time now and finally
came across this article mentioning Couchsurfing, which caught my attention.
While the article was excellently written, I would've enjoyed a story about
actual Couchsurfing more than this business analysis.</li>
</ul>
<p>The Master programs for Computer Science as well as Software Development at our university have changed a little and I checked out those presentations since I’m not sure whether to try and achieve a Master’s degree after completing my Bachelor’s. <em>I haven’t found the slides online even though I’ve been told they were available.</em></p>
<ul>
<li>Master: Informatik (EN: Computer Science)</li>
<li>Master: Softwareentwicklung-Wirtschaft (EN: Software Development & Economy)</li>
</ul>
<h2>Dev Documents</h2>
<p>As I am currently very interested in developing for iOS and OS X I looked into
some documents for starters and found the following to be helpful.</p>
<ul>
<li>Cocoa Dev Central: <a href="http://cocoadevcentral.com/d/learn_objectivec/">Learn Objective C</a></li>
<li>Cocoa Dev Central: <a href="http://cocoadevcentral.com/articles/000082.php">Cocoa Style Guide for Objective-C Part I</a></li>
<li>Cocoa Dev Central: <a href="http://cocoadevcentral.com/articles/000083.php">Cocoa Style Guide for Objective-C Part II</a></li>
</ul>
<h2>Videos</h2>
<ul>
<li>Apple: WWDC 2013 Keynote Address (live)<br />
In short the improved Macbook Air's 12 hour battery life sounds great, but
I'm not tempted to buy one since I hope that Apple will bring those those
improvements to the Macbook Pro line as well.</li>
<li>Polygon review: <a href="http://www.polygon.com/2013/6/4/4395078/remember-me-video-review">Remember Me</a><br />
Remember Me looks like a game worth playing to me, but I will wait for a
discount instead of buying
at full price. Even though the reviews were mixed I trust Gamespot's <a href="https://twitter.com/fiddlecub">Kevin
VanOrd</a> opinion about it having an enjoyable story.</li>
<li>Extra Credits: <a href="http://penny-arcade.com/patv/episode/more-than-exposition">More than exposition</a></li>
<li>Extra Credits: <a href="http://penny-arcade.com/patv/episode/not-a-babysitter">Not a babysitter</a><br />
I highly recommend this episode of Extra Credits to, well, almost everyone
with an interest in video gaming, to parents whose offspring is into gaming
and to children who'd like their parents to understand their world a little
better. "Not a babysitter" is highly valuable and probably my favorite
part of Extra Credits so far.</li>
<li>Extra Credits: <a href="http://penny-arcade.com/patv/episode/when-difficult-is-fun">When difficult is fun</a></li>
<li>Extra Credits: <a href="http://penny-arcade.com/patv/episode/like-a-ninja">Like a ninja</a></li>
<li>Extra Credits: <a href="http://penny-arcade.com/patv/episode/global-games-mexico-argentina-chile">Global Games: Mexico, Argentina & Chile</a></li>
<li><a href="http://en.wikipedia.org/wiki/Gargoyles_(TV_series)">Gargoyles</a> 52 - "Hunter's Moon (Part 3)"</li>
<li>many Mass Effect 3 videos, including <a href="http://www.youtube.com/watch?v=eBTbXdj7c4w">an entire hour of death scenes</a></li>
</ul>Media Recap: May 20132013-06-15T02:35:28+02:002014-03-09T14:35:06+01:00Alexander Skibatag:ghostlyrics.net,2013-06-15:/media-recap-may-2013.html<p><strong>Summary: 2 Games, 1 Let’s Play, 3 Movies, 3 Videos, 7 podcasts, 2 novels,
4 papers</strong></p>
<!--more-->
<h2>Games</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Mass_effect_3">Mass Effect 3</a><br />
I've already written another article about <a href="/companion-gaming-mass-effect-3.html">playing Mass Effect 3 with my
girlfriend</a>. By the time of this writing we're about 45
hours into the game, having completed the …</li></ul><p><strong>Summary: 2 Games, 1 Let’s Play, 3 Movies, 3 Videos, 7 podcasts, 2 novels,
4 papers</strong></p>
<!--more-->
<h2>Games</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Mass_effect_3">Mass Effect 3</a><br />
I've already written another article about <a href="/companion-gaming-mass-effect-3.html">playing Mass Effect 3 with my
girlfriend</a>. By the time of this writing we're about 45
hours into the game, having completed the DLC except Citadel.</li>
<li><a href="http://en.wikipedia.org/wiki/Bastion_(video_game)">Bastion (iOS)</a><br />
I've already played Bastion <a href="/media-recap-june-2012.html">before</a> and liked it. Sadly I never
finished the game on the PC and intend to do so now that I bought the mobile
edition for only a buck.</li>
</ul>
<h1>Let's Plays</h1>
<ul>
<li><a href="http://lparchive.org/Jade-Cocoon/">Jade Cocoon</a><br />
Jade Cocoon had some pokémonish traits but was great game with its mutation
based merging of captured creatures and I really regret having sold it long
ago. Though I also played its successor I have fond memories of Jade Cocoon
(1) while the second part was rather disappointing with its fixed evolution
trees instead of computed features, stats and creature design.</li>
</ul>
<h2>Movies</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt1568346/">Verblendung</a> (a.k.a. The Girl with the Dragon Tattoo; German)<br />
I had already seen The Girl with the Dragon Tattoo before, but wanted to
view it again with my girlfriend since I really enjoyed that movie, almost
as much as the book it's based on.</li>
<li><a href="http://www.imdb.com/title/tt1193631/">Step up 3D</a> (German)<br />
The peak of the Step Up series may have been reached already. Step Up 3D
featured too much personal drama for my taste. The part of the movie during
which the two male leads both temporarily lose their girlfriend was just
over the top kitschy.</li>
<li><a href="http://www.imdb.com/title/tt1800741/">Step up Revolution</a> (a.k.a. Step Up 4, Step Up 4: Miami Heat; German)<br />
Step Up 4 wasn't that much better in my opinion. While there was less drama,
the characters were less fleshed out and there was less focus on the actual
dancing and more on the setting itself, featuring multi-media installations,
graffiti, costumes and the recurring theme of flashmobs.</li>
</ul>
<h2>Videos</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Gargoyles_(TV_series)">Gargoyles</a>, season 2, episodes 50, 51<br />
Almost through with an old favorite of mine.</li>
<li>Extra Credits - <a href="http://www.penny-arcade.com/patv/episode/dansky">Dansky</a></li>
<li>Extra Credits - <a href="http://www.penny-arcade.com/patv/episode/games-you-might-not-have-tried-5">Games You Might Not Have Tried #5</a></li>
</ul>
<h2>Podcasts</h2>
<p>I’m trying to reduce my backlog by listening to old Hypercritical as well as
Build & Analyze episodes.</p>
<ul>
<li>The Talk Show 39 - <a href="http://www.muleradio.net/thetalkshow/39/">iOS 7 Deforestation</a></li>
<li>Hypercritical 77 - <a href="http://5by5.tv/hypercritical/77">Nucleation Site</a></li>
<li>Hypercritical 88 - <a href="http://5by5.tv/hypercritical/88">Nobody Leaves Email</a></li>
<li>Build & Analyze 44 - <a href="http://5by5.tv/buildanalyze/44">Customers as Body Parts</a> (incomplete)</li>
<li>The Secret Archives of the Vatican Podcast 89 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_89.mp3" title="direct link">Journey's End</a></li>
<li>The Secret Archives of the Vatican Podcast 91 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_91.mp3" title="direct link">Where Next?</a></li>
<li>The Secret Archives of the Vatican Podcast 108 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_108.mp3" title="direct link">City of Culture</a></li>
</ul>
<h2>Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/30530900/Chosen-at-Nightfall">Chosen at Nightfall</a> - by <a href="http://www.cchunterbooks.com/news.html">C.C. Hunter</a><br />
Chosen at Nightfall is a fitting conclusion to an amazing series of urban
fantasy. It - again - didn't fail to amuse me in a non-sarcastic, charming
way. It's not comedy per se, but highly entertaining and made me laugh hard
time and time again.</li>
<li><a href="http://www.shelfari.com/books/29909341/Rogue-Descendant">Rogue Descendant</a> - by <a href="http://www.jennablack.com">Jenna Black</a><br />
Another entry in the Nikki Glas series. Not as funny as C.C. Hunter's titles.
More mature, with a more self-centered narrative, and a slightly less
fantasy-orientated setting as far as location of the story goes.</li>
</ul>
<h2>Misc</h2>
<ul>
<li>4 papers (GADI)</li>
</ul>
<p>I am currently taking the course ‘GADI’ at
university. ‘GADI’ stands for ‘Gesellschaftliche Aspekte der
Informationstechnologie’ which can be roughly translated as ‘the aspects of
information technology on society’. The course has a lecture part as well as
one consisting of exercises. The exercises can be done in four different ways.
There is <em>blogging</em>, <em>microblogging</em>, <em>scientific writing</em> as well as
<em>scientific
reviewing</em> (which means, you are trying to analyze what the writers have
written
and try to find what’s wrong with their work and include suggestions).</p>
<p>While I did my part as <em>microblogger</em> - thereby accepting my misfortune for not
being able to click the right button <strong>and</strong> being late - instead of <em>blogger</em>,
I also had the chance to look into four of the papers that had been written
by the <em>scientific writers</em>. Let me tell you that was shocked. Three of them
were
abysmal in terms of capitalization, punctuation and typos, many of which would
have been found by a simple spellchecker. The fourth was better but still
showed that the students at the TU do not consider good writing a skill of
at least mediocre importance (that might be due to it being a homework instead
of a hobby project, I admit).</p>
<p>I <em>strongly</em> advise the scientific writing teams to <strong>proofread</strong> their work,
if possible even have another person proofread the paper. Papers get
peer-reviewed for content too, code is being reviewed as a common industry
procedure. Skimming through a paper less than 20 pages in length is certainly
possible.</p>Companion Gaming - Mass Effect 32013-06-08T04:02:25+02:002014-02-14T00:46:59+01:00Alexander Skibatag:ghostlyrics.net,2013-06-08:/companion-gaming-mass-effect-3.html<p>A while back I started playing Mass Effect 3 with my girlfriend. To be more
precise that means I am playing the game while she watches, comments and
sometimes asks to have something explained or translated (since she’s missing
the context I have after playing Mass Effect 1 and …</p><p>A while back I started playing Mass Effect 3 with my girlfriend. To be more
precise that means I am playing the game while she watches, comments and
sometimes asks to have something explained or translated (since she’s missing
the context I have after playing Mass Effect 1 and Mass Effect 2).</p>
<p>Since we have now been playing about 20 - 25 hrs I wanted to draw some
conclusions.</p>
<h3>Shockers</h3>
<p>I begun playing video games more than a decade ago. I have played over 300
different games on an array of platforms by an even larger variety of
developers. I consider myself quite knowledgeable given this experience.</p>
<p>That doesn’t make <strong>me</strong> immune to shocking moments when faced with elements of
psycho terror or similar. It <em>does not</em>. However, I don’t find ME’s sections
during which you are walking in the dark, only equipped with a flashlight
that terrifying. They are also one of those pre-scripted sequences that are
no longer scary when you’re playing the scene multiple times. Add to that the
fact that I’m not as immersed in the scenario as I could be when gaming alone
I’m hardly scared at all.</p>
<p>It seems to be <strong>different for my girlfriend</strong> though, who is neither used to
that
specific kind of scenes in video games nor a fan of horror fiction on any
medium at all. She was a bit scared during those scenes. Also I noticed her
flinching during several moments that weren’t scary but more sudden surprise
effects, like soldiers being shot by enemy snipers.</p>
<p><em>I think that there is a certain feeling of being accustomed to gunfire and
explosions during video games that one accumulates over the course of a video
gaming career or even during intense playing of a game containing a lot of
those.</em></p>
<h3>About Game Mechanics</h3>
<p>There are certain parts during ME’s gameplay which are designed to initiate
a quick reaction. Those dramatic moments aim to drive the player forward a
little faster and heighten the player’s excitement. Many such scenes are
created by the voice prompts, telling the player to ‘go faster’ in order to build tension.</p>
<p><strong>My reaction</strong> to that is to completely ignore those prompts unless they are
combined with a meter displaying the remaining time as either an indeterminate
progress bar or with a counter. I am much more concerned about me forgetting to
collect a certain item or otherwise semi-important piece of (background)
information in my quest for completion and perfection. Having played both of
the game’s predecessors multiple times it is perfectly clear to me that the
game’s developers <em>do not use hidden timers</em> when mission objectives are
concerned.</p>
<p>Conversely <strong>her reaction</strong> is just the one the developers strive to achieve.
She wants to press forward immediately, always being slightly worried that
lingering around might trigger a bad conclusion of the presented situation.
I think she’s not into the whole weapon/modification collecting thing and
doesn’t care that much about leaving stuff behind that cannot be obtained
at a later point in the game.<br />
The worry about bad consequences of a decision is something I might have
triggered by talking about how most of the actions you take in ME <em>do indeed
have</em> consequences within this final part of the trilogy, be it story-wise
or in gameplay consequences (<em>as in not being able to achieve all the
‘Readiness’ points needed for the game’s final showdown</em>).</p>
<h3>Background Information</h3>
<p>As I already mentioned in the introduction of this article, there is a need for
me to pause so and so often or stop during non-critical moments in order to
explain some things that just occurred on screen or translate more exotic
words as I am more proficient speaking English than her.</p>
<p>I consider this an interesting factor since I have the opportunity to explain
things in an easy way that happened in the two previous games or add a detail
that I read in the wiki or one of the official novels. There are also events
which are only alluded to during the course of the game since they happened
in one of the comic books. Many times, events that transpired in the past and
have been content of the previous parts are not quickly explained, like
<a href="http://masseffect.wikia.com/wiki/Genophage">the genophage</a> and <a href="http://masseffect.wikia.com/wiki/Asari#Biology">the Asari bonding process</a>.</p>
<p>She also told me that she read up on some specific topics like <a href="http://masseffect.wikia.com/wiki/Biotics">biotics</a> and
several persons of interest which were introduced in previous parts. I was
quite surprised that her interest in the the game’s universe had become that
big - on the other hand I might just be that my explanation was bad and
incomplete or somewhat confusing. <em>I try, though, I really try.</em></p>
<h3>Speech Patterns</h3>
<p>Now given the fact that my girlfriend isn’t as fluent in English as I am, I was
curious to hear if there were differences in understanding the various speech
patterns and accents that the characters and races in Mass Effect 3 display.</p>
<p>There are the humans, which - except for some specimen, like the autist
<a href="http://www.youtube.com/watch?v=QuJNk50qM94">David Archer (video)</a> - have a very familiar speech pattern. The same can be
said about the Turians and Asari. Others, however, like the Volus, whose
speech is interrupted in regular intervals by their heavy breathing devices,
the heavy accent of the Quarians or the highly technical choice of words of
Legion, as well as the metallic distortion that accompanies those, are things
that make it harder for a non-native speaker to understand everything clearly.
The highlight of that has to be <a href="https://www.youtube.com/watch?v=EpPeA01Mw30">Mordin Solus (video)</a>. His hyperactive speech,
spit out in rapid, short bursts of brilliant, though incomplete sentences made
it extremely hard to almost impossible for my girlfriend to understand him.</p>
<h2>Conclusion</h2>
<p>I’m very curious how this little enjoyable experiment continues when we reach
more content that I haven’t encountered in my last ME 3 run (excluding DLC).</p>
<p>Moreover it was quite funny to listen to her explain the plot and a great part
of the setting to her sister when she inquired what was fascinating about ME3.
I may or may not transcribe & translate my voice recording of that.</p>Media Recap: April 20132013-05-05T00:40:50+02:002014-03-09T14:32:39+01:00Alexander Skibatag:ghostlyrics.net,2013-05-05:/media-recap-april-2013.html<p><strong>Summary: 4 novels, 1 podcast, 1 game, 1 video, 1 piece of research</strong></p>
<!--more-->
<h2>Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/12127593/Firespell">Firespell</a> by <a href="http://www.chloeneill.com">Chloe Neill</a></li>
<li><a href="http://www.shelfari.com/books/15248727/Hexbound">Hexbound</a> by <a href="http://www.chloeneill.com">Chloe Neill</a></li>
<li><a href="http://www.shelfari.com/books/18160456/Charmfall">Charmfall</a> by <a href="http://www.chloeneill.com">Chloe Neill</a><br />
I came across the novels by <a href="http://www.chloeneill.com">Chloe Neill</a> on my search for new urban
fantasy material on Amazon. You have to admire Amazon's recommender …</li></ul><p><strong>Summary: 4 novels, 1 podcast, 1 game, 1 video, 1 piece of research</strong></p>
<!--more-->
<h2>Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/12127593/Firespell">Firespell</a> by <a href="http://www.chloeneill.com">Chloe Neill</a></li>
<li><a href="http://www.shelfari.com/books/15248727/Hexbound">Hexbound</a> by <a href="http://www.chloeneill.com">Chloe Neill</a></li>
<li><a href="http://www.shelfari.com/books/18160456/Charmfall">Charmfall</a> by <a href="http://www.chloeneill.com">Chloe Neill</a><br />
I came across the novels by <a href="http://www.chloeneill.com">Chloe Neill</a> on my search for new urban
fantasy material on Amazon. You have to admire Amazon's recommender algorithm
for its accuracy. I have quite some trouble putting away a book again instead
of finishing it even if I happen to dislike it. For some time that hasn't
been
an issue though since the automated suggestions were quite nice and I felt
entertained, which is the point of most of my (novel) reading.</li>
<li><a href="http://www.shelfari.com/books/26705584/Throne-of-Glass">Throne of Glass</a> by <a href="http://sarahjmaas.com">Sarah J. Maas</a><br />
Throne of Glass is - for a little change - not urban fantasy, it's <em>just</em>
fantasy - and good one, if I dare say that. This novel was a real pageturner
for me and I look forward to checking out other stories set in this
particular setting. I've seen there are already other books available.</li>
</ul>
<h2>Podcasts</h2>
<ul>
<li>The Secret Archives of the Vatican Podcast 99 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_99.mp3" title="direct link">Garden of Delights</a></li>
</ul>
<h2>Games</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Mass_Effect_3" title="wiki page">Mass Effect 3</a><br />
Not much to say about ME3 anymore. Still playing with my girlfriend when
(or rather <em>if</em>) we find time between assigments for university and the
daily chaos. We're somewhat past <a href="http://masseffect.wikia.com/wiki/Priority:_Palaven">Priority: Palavan</a>.</li>
</ul>
<h2>Video</h2>
<ul>
<li><a href="http://youtu.be/Sh-cnaJoGCw">Why Linux Sucks</a><br />
Unfortunately I can't remember how I stumbled across this 40 minute long
presentation about the reasons Linux sucks, but it's worth watching as well
as re-sharing and thinking about its contents.<br />
Summary: There are many points which can easily be improved and some which
are not <em>that</em> easily solved.</li>
</ul>
<h2>Other</h2>
<p>I’ve recently looked into Asperger syndrome since that topic came up in
several articles I read and was sometimes referenced in a book. I haven’t quite
had the time to check the more interesting linked resources on wikipedia, but
there’s <a href="http://www.einzigartig-eigenartig.de/content/files/Dr.%20Preismann_Handout_Walsrode_2010.pdf" title="direct link">one .PDF</a> that I already read which proved interesting.</p>Grazer Linuxtage 20132013-04-23T18:03:32+02:002014-02-14T00:47:00+01:00Alexander Skibatag:ghostlyrics.net,2013-04-23:/grazer-linuxtage-2013.html<p>Let me make it perfectly clear that the following is entirely my own opinion
and by no way an objective view of the event as a whole.</p>
<p><strong>It wasn’t all that great.</strong></p>
<ul>
<li>Due to forgetting my notebook's power adapter I missed the keynote.</li>
<li>I used the time I had …</li></ul><p>Let me make it perfectly clear that the following is entirely my own opinion
and by no way an objective view of the event as a whole.</p>
<p><strong>It wasn’t all that great.</strong></p>
<ul>
<li>Due to forgetting my notebook's power adapter I missed the keynote.</li>
<li>I used the time I had scheduled for two interesting lectures in order to
help <a href="http://twitter.com/sosothatsucks">Manfred</a> with his entry-level workshop. Even though I had not planned
to do so this year.</li>
</ul>
<p>It was pretty frustrating. I hadn’t prepared anything since I spontaneously
decided to help out. *sigh*</p>
<p>The session was full of fail.</p>
<h2>The dreaded 'Canonical Partner' repository</h2>
<p>The virtual machine with <a href="http://ubuntu.com">Ubuntu</a> had the same problem that we already had
a year (or was it two years?) ago: The live CD has the Canonical Partner
repository disabled. Since one of the tasks the participants ought to
solve was installing <a href="http://skype.com">Skype</a> this caused a problem. <em>Did I say one? I meant
some.</em> What solutions for installing Skype could be observed?</p>
<ul>
<li>The preferred solution would've been to fire up Software Center, type 'skype'
into the search box, hit ENTER, find the result and hit the 'Install' button.
<em>Turns out, it wasn't as easy. As in the previous years, the 'Partner'
repository was disabled, and the data for the Software Center was absent,
too. Even manually enabling the repo didn't help and neither did the fact
that the VMs were painfully slow.</em></p></li>
<li><p>Another solution was to download the correct file from the official <a href="http://skype.com">Skype</a>
homepage. Unfortunately that made the assumption that the participants had
to know which file was the correct one for their architecture. Given that
I arrived late and wasn't part of the prep team for the workshop neither
did I. But even after that problem was resolved the Software Center refused
to install the 'multiarch' file provided by the website.</p></li>
</ul>
<h2>openSUSE troubles</h2>
<p>Now, another take was to use the VM running <a href="http://en.opensuse.org/Main_Page">openSUSE</a>.
<em>If only that had worked.</em>
The virtual hard disk created for the VM was of insufficient storage capacity.
One could not perform an update of the package index and therefor installation
of <a href="http://www.winehq.org">Wine</a> wasn't possible. Too bad that was one of the required tasks for the
workshop. Since the other one was installing Skype and the instructions on
their community wiki weren't as helpful for new users as one would wish for
the other task was hard as well.<br />
Oh yeah, also being able to refresh the package cache would've been helpful
when <em>installing the Skype dependencies by hand. I know I'm right in my
comfort zone when using Ubuntu but with the <a href="http://en.wikipedia.org/wiki/Personal_Package_Archive">PPA</a>s they make keeping one's
software up to date pretty easy if you're not keen on waiting for their
biyearly releases.</em><br />
Similarly the VMs froze for about 70% of the participants when trying to
install Skype, forcing us to either reset them and have the users repeat
their work or suggest using a different distribution.
<h2>Fedora to the rescue?</h2>
I have no idea, honestly. There wasn't enough time to try and help all the
participants with the trouble we already had as well as giving <a href="http://fedoraproject.org">Fedora</a> a
shot.
<h2>Conclusion</h2>
I'm a little sad that everything turned out so chaotic and almost everyone
of the users had trouble somewhere. I'd also suggest Canonical shipping
with the Partner repo enabled, but they probably enabled that when installing
with the switch for proprietary software enabled.Media Recap: March 20132013-03-31T18:49:38+02:002014-03-09T14:31:28+01:00Alexander Skibatag:ghostlyrics.net,2013-03-31:/media-recap-march-2013.html<p><strong>Summary: 1 game, 3 novels, 3 podcasts, 1 movie, 3 episodes of TV</strong></p>
<!--more-->
<h2>Games</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Mass_effect_3">Mass Effect 3</a><br />
After <a href="http://masseffect.wikia.com/wiki/Mass_Effect_3:_Citadel">Citadel</a> , the final piece of DLC, was released and I was sure
that this time it was <em>really</em> the last DLC for the game I decided to
finally play it all the …</li></ul><p><strong>Summary: 1 game, 3 novels, 3 podcasts, 1 movie, 3 episodes of TV</strong></p>
<!--more-->
<h2>Games</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Mass_effect_3">Mass Effect 3</a><br />
After <a href="http://masseffect.wikia.com/wiki/Mass_Effect_3:_Citadel">Citadel</a> , the final piece of DLC, was released and I was sure
that this time it was <em>really</em> the last DLC for the game I decided to
finally play it all the way and complete as much as possible. Interestingly
my girlfriend decided that Mass Effect 3 was a fine cinematic experience and
we're now trying to complete it together with her as spectator. That's
something I definitely didn't expect.</li>
</ul>
<h2>Novels</h2>
<ul>
<li><p><a href="http://www.shelfari.com/books/4358571/Daemon">Daemon</a> by <a href="http://www.shelfari.com/authors/a2411114/Daniel-Suarez/">Daniel Suarez</a><br />
Daemon was in fact a suggestion of <a href="https://twitter.com/zshrc">Leonhard</a> when I told him about <a href="http://www.shelfari.com/books/16728581/Deus-Ex-The-Icarus-Effect">the
novel accompanying Deus Ex: Human Revolution</a>. It has some similar
concepts and is a worthwhile read. Additionally, some ideas and concepts
of the novel were very handy when writing an article for university, so
I didn't only benefit in terms of entertainment.</p></li>
<li><p><a href="http://www.shelfari.com/books/12252693/Freedom">Freedom</a> by <a href="http://www.shelfari.com/authors/a2411114/Daniel-Suarez/">Daniel Suarez</a> (which I've misspelled "Freedom TM" until
recently)<br />
While I wasn't quite in my element when reading Daemon, Freedom was much
more my style, with its focus more leaning towards gamification of everyday
life and society as a whole in contrast to Daemon's focus on conspiracy and
pseudo-spy action.</p></li>
<li><p><a href="http://www.developedfantasy.fi/stories/callous-frigid-chill/">Callous Frigid Chill</a> by Jari Winberg<br />
What a strange book. I've stumbled across this CC published novel while
browsing art on <a href="http://www.deviantart.com">Deviantart</a> and found myself downloading the e-book
version. Way later I came around to reading and found myself continuously
wondering. The setting, the characters, it's all very strange - making me
scratch my head in confusion. However I can state that the novel - when
viewed as a whole - is indeed entertaining and worth a recommendation if
a slightly confused impression throughout doesn't turn you off.</p></li>
</ul>
<h2>Podcasts</h2>
<ul>
<li>The Crossover 1 - <a href="http://5by5.tv/crossover/1">You just got curated</a></li>
<li>The Crossover 2 - <a href="http://5by5.tv/crossover/2">The Fight for Attention</a></li>
<li>The Secret Archives of the Vatican Podcast - <a href="http://traffic.libsyn.com/vincemillett/Podcast_94.mp3" title="direct link">Lost Worlds</a></li>
</ul>
<h2>Movies</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt0494238/?ref_=fn_al_tt_1">Tintenherz</a> (EN: Inkheart)<br />
Watched with and after suggestion of the girlfriend. Had a nice story and
some enjoyable characters, was not kitschy. I think I would've preferred to
read the book though as I would've had the chance to dream the characters,
their outfits and behaviors up myself.</li>
</ul>
<h2>TV Series</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt1235547/?ref_=fn_al_tt_1">Better Off Ted</a>, episodes 1-3<br />
A friend of mine introduced me to this show and although I didn't enjoy all
the jokes, some of them were really hilarious. I'm not convinced I'd watch
it on a regular basis.</li>
</ul>From CeBIT 20132013-03-23T23:43:17+01:002014-02-14T00:47:01+01:00Alexander Skibatag:ghostlyrics.net,2013-03-23:/from-cebit-2013.html<p>Recently I was provided with the unique opportunity of attending the famous
CeBIT in Hanover. Indeed it was an interesting chance for me given that I was
provided with both a ticket for trade visitors and a part of my travel fees.
In order to qualify for a subvention I …</p><p>Recently I was provided with the unique opportunity of attending the famous
CeBIT in Hanover. Indeed it was an interesting chance for me given that I was
provided with both a ticket for trade visitors and a part of my travel fees.
In order to qualify for a subvention I had to write an article containing at
least 6000 characters. At first I was a bit intimidated, given that I had a
minimum amount of characters and an assigned topic instead of my usual free
writing style. Another thing that made me doubt for a few moments before
agreeing to the conditions was the requirement for the article to be German.
While German is my mother tongue I prefer to jot down notes, thoughts and
pretty much everything else in English. For some reason my thoughts seem to
flow easier when I stick to English.</p>
<p>Well, turns out that 6000 characters isn’t much when you have a lot to talk
about. I already wrote more than said limit when talking about the main topic
I had volunteered for - the <em>lab</em> area. By the time I had finished writing
a short part about the interesting presentations I attended the article was
well fleshed out and I was forced to sum up some smaller presentations into
a single subtopic in order to try to make the deadline. I am terribly sorry
that I missed the deadline for handing it in by about 10 minutes but was
quickly assured that it wouldn’t matter and everything was fine. The reason
for the short delay was my unwillingness to send an article I hadn’t
sufficiently proofread yet to a client.</p>
<p>You can read said article <a href="http://bis.htu.tugraz.at/aktuelles/bericht-von-der-cebit">at the homepage of the Basisgruppe
Informatik & Softwareentwicklung</a> (student council of Computer Science and
Software Development) or <a href="http://telematik.edu/130317_cebit_2013_lab">at the homepage of the Basisgruppe
Telematik</a> (student council of Telematics).</p>
<p>I had considered writing an English article for this blog, but I don’t
think I’ll get around to do that in the near future if ever.</p>
<p>What got my attention most were the lectures. I think I’d enjoy giving such a
presentation to an attentive, interested audience myself. The keynote for the
day I was at the convention center - Friday - was by <a href="https://www.box.com/about-us/leadership/">Aaron Levie</a>,
Co-Founder and CEO of <a href="https://www.box.com/home/">Box</a> and particularly interesting because he tried to
look at the future of work in this Post-PC era.
<em>I want to bring attention to Levie’s outfit sporting a suit and blazing
red sneakers. You don’t have to adhere to the strictest rules in order to
be respected and successful. Dress code isn’t everything.</em></p>
<p>Also I thought I was going to test iOS’s Passbook for the first time, but
given that I would’ve had to change lines and get in line after about 10 more
people although I had already waited but was in the wrong line for digital
tickets I gave up that particular endeavor. </p>
<p><img alt="iOS Passbook for CeBIT 2013" src="/images/cebit-2013/Screenshot-iOS.png"></p>Media Recap: February 20132013-03-07T01:23:49+01:002014-02-14T00:47:02+01:00Alexander Skibatag:ghostlyrics.net,2013-03-07:/media-recap-february-2013.html<p><strong>Summary: 4 games, 1 let’s play, 1/2 of a novel</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li>
<p><a href="http://en.wikipedia.org/wiki/Ghost_Trick">Ghost Trick</a> (NDS)<br>
I took another short dive into Ghost Trick and found some parts that were
indeed a bit harder than expected, but I’m still enjoying that particular
game a lot.</p>
</li>
<li>
<p><a href="http://en.wikipedia.org/wiki/Terraria">Terraria</a> (PC)<br>
For a …</p></li></ul><p><strong>Summary: 4 games, 1 let’s play, 1/2 of a novel</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li>
<p><a href="http://en.wikipedia.org/wiki/Ghost_Trick">Ghost Trick</a> (NDS)<br>
I took another short dive into Ghost Trick and found some parts that were
indeed a bit harder than expected, but I’m still enjoying that particular
game a lot.</p>
</li>
<li>
<p><a href="http://en.wikipedia.org/wiki/Terraria">Terraria</a> (PC)<br>
For a few minutes I attempted to get back to Terraria, but my addiction to
this particular game seems to be cured. Got bored, switched it off again.</p>
</li>
<li>
<p><a href="http://en.wikipedia.org/wiki/Fable_(video_game)">Fable 1</a> (PC)<br>
After being fed up with Terraria I decided that I wanted to finally play
Fable 1. I never quite managed to finish it despite two previous attempts
that came pretty close to its end. Let’s see if there will be any annoyances
like the need to reformat the computer this time.</p>
</li>
<li>
<p><a href="http://en.wikipedia.org/wiki/Castle_crashers">Castle Crashers</a> (XBLA)<br>
Had a little Castle Crashers Xbox party with three friends and completed CC
once again. Always fun, especially with three other people since the whole
screen tends to get extremely crowded and you keep hearing panicky screams
of your teammates. Fun times.</p>
</li>
</ul>
<h2 id="lets-plays">Let’s Plays</h2>
<ul>
<li><a href="http://lparchive.org/Avalon-Code/">Avalon Code</a><br>
This entire LP is gold, pure gold. The LPer rewrites a lot of the dialogue
in order to fit his style of narration but ultimately manages to deliver an
interesting piece full of character that might be better than the original
narration.</li>
</ul>
<h2 id="novels">Novels</h2>
<ul>
<li>
<p><a href="http://www.shelfari.com/books/33198796/Netzkinder-gegen-Offliner-Danke-Internet-(German-Edition)">Netzkinder gegen Offliner: Danke Internet</a> (German)
by Alexander Fuchs<br>
Got around to reading the second half of this book. Will probably post some
short thoughts about it anyway, so no long comment here.</p>
</li>
<li>
<p><a href="http://www.shelfari.com/books/4358571/Daemon">Daemon</a> by Daniel Suarez<br>
A tip I got from a friend during the winter holiday. I’m only a few pages in.</p>
</li>
</ul>Media Recap: January 20132013-01-31T22:31:25+01:002014-02-14T00:47:02+01:00Alexander Skibatag:ghostlyrics.net,2013-01-31:/media-recap-january-2013.html<p><strong>Summary: 5 games, 2 novels, 1 movie, 1 podcast</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li>
<p><a href="http://en.wikipedia.org/wiki/Puzzle_Agent_2">Puzzle Agent 2</a> (PC)<br>
Puzzle Agent 1 left me expecting a lot more from its successor. The humor
wasn’t the same and many, many puzzles were far easier than the ones in
part 1. Except for the three involving …</p></li></ul><p><strong>Summary: 5 games, 2 novels, 1 movie, 1 podcast</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li>
<p><a href="http://en.wikipedia.org/wiki/Puzzle_Agent_2">Puzzle Agent 2</a> (PC)<br>
Puzzle Agent 1 left me expecting a lot more from its successor. The humor
wasn’t the same and many, many puzzles were far easier than the ones in
part 1. Except for the three involving numbers, those were off the chart and
at least one of them had nothing to do with numbers at all.</p>
</li>
<li>
<p><a href="http://en.wikipedia.org/wiki/Final_Fantasy_Tactics:_The_War_of_the_Lions">Final Fantasy Tactics: The War Of The Lions</a> (iOS)<br>
This purchase was a personal failure. Don’t get me wrong here. I adore both
<a href="http://en.wikipedia.org/wiki/Final_Fantasy_Tactics_Advance">Final Fantasy Tactics: Advance</a> and
<a href="http://en.wikipedia.org/wiki/Final_Fantasy_Tactics_A2:_Grimoire_of_the_Rift">Final Fantasy Tactics: Advance 2 - Grimoire of the Rift</a> but those
were nice games. They featured explanations where applicable without
requiring you to read hours and hours of content in a separate ingame help.
Neither had they values such as Faith and Bravery which could get a unit to
leave your service if too low or too high.<br>
What ultimately made me give up on the game however was its controls. If I
tap anywhere but the button which currently has focus I don’t expect the
button to be pressed. I expect the game to register a “Cancel” action, not
a freaking “Confirm”. I mean, I <strong>am not even pressing the button!</strong> This
behavior is fundamentally wrong on a touchscreen device and drives me insane.</p>
</li>
<li>
<p><a href="http://wordament.com">Wordament</a> (Win8)<br>
I’m not sure how I heard about this game. It might be that it was
<a href="http://www.trueachievements.com/n11826/wordament-comes-to-ios-with-achievements.htm">the first game to get Xbox Live achievements on iOS</a>. I tested the
Windows 8 version and found it to be a nice casual game.
I’m astonished by the
fact that I’m way better playing the English version than the German one -
whereas German is my mother’s tongue.</p>
</li>
<li>
<p><a href="http://en.wikipedia.org/wiki/Terraria">Terraria</a> (PC)<br>
I’ve saved writing the part about Terraria for last. During the first two
weeks of January I played <strong>a lot</strong> of Terraria. More than 48 hours to be
precise. I was kind of sloppy and let a lot of work slip during that period.
I’m not sure what prompted my addiction to Terraria but I’m willing to bet
it has something to do with the ability to build all the structures you can
imagine easily (well, as long as they conform to the gameplay rules).
Initially I couldn’t grasp the depth of the game but as soon as I skimmed
some of the wikis that grew around it I was captured. There are so many
things to see, so many things to craft and the overall playtime and fun
I got during playing Terraria made me think that this is one of the games
I paid way too little during a Steam Sale. <em>I’m still proud of the huge
apartment complex of glass which I built above the ocean.</em></p>
</li>
<li>
<p><a href="http://en.wikipedia.org/wiki/Ghost_Trick">Ghost Trick</a> (NDS)<br>
Now, Ghost Trick was a lucky pick of mine. I loved <a href="http://en.wikipedia.org/wiki/Time_Hollow">Time Hollow</a> and felt
reminded of that game. A puzzler on the NDS is something I really adore,
especially if it comes with a fascinating story. I don’t care that much for
gameplay in those cases, but Ghost Trick easily beats Time Hollow in terms
of game mechanics and can be recommended to a lot more people due to less
restrictions in terms of creative situation solving. <em>Which doesn’t mean it’s
not linear, because it is.</em></p>
</li>
</ul>
<h2 id="novels">Novels</h2>
<ul>
<li>
<p><a href="http://www.shelfari.com/books/23866662/Touch-of-the-Demon">Touch Of The Demon</a> by Diana Rowland<br>
By now I expected nothing but excellence from this author and was not
disappointed. It’s a whole less urban-fantasy due to this part being set
almost entirely in “the demon realm”. However, Rowland uses this to conjure
even more amazing elements and side characters. It has some exciting plot
twists and I can recommend it to anyone who liked the previous books of the
<em>Kara Gillian</em> series.</p>
</li>
<li>
<p><a href="http://www.shelfari.com/books/33198796/Netzkinder-gegen-Offliner-Danke-Internet-(German-Edition)" title="not a lot of info there, sorry">Netzkinder gegen Offliner: Danke Internet.</a> (German) by
Alexander Fuchs<br>
By the time of this writing I haven’t completed this book yet. It sure seems
like a huge rant against those people who don’t “get” the Internet
(the offliners) but I have to agree with a lot of the points the author
introduces and am looking forward to reading the other half of it.</p>
</li>
</ul>
<h2 id="movies">Movies</h2>
<ul>
<li><a href="http://www.imdb.com/title/tt1023481">Step Up 2: The Streets</a><br>
So yeah. I like the Step Up movies. Mostly for their soundtracks and the
urban style they exude and not so much for the actual dancing, I have to
admit. In particular <a href="http://www.imdb.com/character/ch0064254">Moose</a> stood out pretty much from the cast of this
one, he was a very likable character.<br>
The movie was quite enjoyable even considering the <em>extremely</em> kitschy scene
after the party. I mean, it was a certainly a nice scene, I won’t argue that.
But nevertheless I thought I had to force myself not to skip it. <em>But since
I wasn’t the person in control of the remote, that wasn’t an option anyway.
That, by the way, also meant watching the movie with German audio.</em></li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<ul>
<li>Mac Power Users 121 - <a href="http://5by5.tv/mpu/121">The Website Show</a><br>
This episode of MPU focused largely on publishing and blogging platforms
as well as the tools to work with them or administrate said platforms. In
an attempt to check out alternatives to <a href="http://wordpress.org">WordPress</a>
I listened to the show
but quickly realized that one of the main topics was going to be WordPress.
Another point was <a href="http://www.squarespace.com/about/">Squarespace</a> which I haven’t checked out yet, but
being a database oriented model again, I’d probably have little love for
the service. I prefer having my own data on my own domain.</li>
</ul>Winter 2012 at TU Graz - The Setup2013-01-19T01:47:02+01:002014-02-14T00:47:03+01:00Alexander Skibatag:ghostlyrics.net,2013-01-19:/winter-2012-at-tu-graz-the-setup.html<p>Since this term at university is nearly over - <em>well, except for the exams</em> -
I wanted to elaborate a bit on the setup and the applications I used on my
Macbook in order to accomplish the tasks given.</p>
<p>Before delving deeper into this subjects I have to spell out something since …</p><p>Since this term at university is nearly over - <em>well, except for the exams</em> -
I wanted to elaborate a bit on the setup and the applications I used on my
Macbook in order to accomplish the tasks given.</p>
<p>Before delving deeper into this subjects I have to spell out something since
you might miss it otherwise: <strong>It is probably not possible to do everything
using only
OS X</strong> given the requirements of certain courses. I <strong>had</strong> to use a Linux VM
about which I’ll talk a bit later in this post.</p>
<h2 id="course-new-information-systems1">Course: New Information Systems<sup id="fnref:nis"><a class="footnote-ref" href="#fn:nis">1</a></sup></h2>
<p>Requirements:</p>
<ul>
<li>php enabled web-server</li>
<li>mySQL database</li>
</ul>
<p>OS X has an Apache server built-in which only needs to be enabled prior to use.
However since <em>Web Sharing</em> - which is the Apple term
for the Apache server - no
longer ships an entry in the <em>Sharing</em> Preferences in 10.8 Mountain Lion it is
necessary to either use some Terminal commands or install
<a href="http://clickontyler.com/blog/2012/02/web-sharing-mountain-lion/">this handy .prefpane</a> courtesy of Tyler Hall which brings back the
ability to en-/disable the server via a GUI. I also suggest checking out
<a href="http://coolestguyplanettech.com/downtown/install-and-configure-apache-mysql-php-and-phpmyadmin-osx-108-mountain-lion">this tutorial on how to prepare your Mac for web development</a> since it
also contains instructions to enable the builtin PHP of OS X.
The mySQL database installation can be obtained <a href="http://dev.mysql.com/downloads/mysql/">from their site</a> and
installation is straightforward. They also provide a <em>.prefpane</em> item which
can start and stop the server.<br>
<em>In theory. That prefpane didn’t work well on my
machine. It might also be worth looking into streamlining the mySQL update
process by installing via
<a href="http://mxcl.github.com/homebrew/">homebrew</a>, my package manager of choice for OS X.</em></p>
<p>Since I didn’t have any relevant experience using mySQL I wasn’t comfortable
just using only the mySQL command-line tools or PHP in order to do the
required
work. Initially I intended to use <a href="http://www.phpmyadmin.net/home_page/index.php">phpmyAdmin</a> due to its popularity and
cross platform compatibility but since I couldn’t figure out how to set
everything up properly after several attempts of using the installation wizard,
writing the configuration file manually and even one attempt of copying over
the required
file from my coworker’s XAMPP installation I was forced to look into other
options. Thankfully I found <a href="http://www.sequelpro.com">Sequel Pro</a> which worked beautifully and is
a native (Cocoa) application for OS X. It’s available for free but donations
are welcome.</p>
<p><a href="/images/winter-2012-tugraz/sequelpro.png"><img alt="Screenshot of Sequel Pro" src="/images/winter-2012-tugraz/sequelpro.png"></a></p>
<h2 id="course-introduction-to-structured-programming2">Course: Introduction to Structured Programming<sup id="fnref:esp"><a class="footnote-ref" href="#fn:esp">2</a></sup></h2>
<p>Requirements:</p>
<ul>
<li>C compiler (preferably GCC)</li>
<li>C debugger (preferably GDB)</li>
<li>cmake (can be obtained via <a href="http://mxcl.github.com/homebrew/">homebrew</a>)</li>
<li>Valgrind (or equivalent, <em>preferably working and therefore not Valgrind
on 10.8</em>)</li>
</ul>
<p>This course has pretty strict requirements on which tasks are to be completed,
which specifications are to adhere to and which C standard you may use as well
as some particular criteria for grading (like “no warnings when using
<code>gcc -Wall</code>”, “no hits in Valgrind”, etc). </p>
<p>It’s easiest to just use a virtual
machine for testing all those requirements. I’ve previously used a <a href="http://www.ubuntu.com">Ubuntu</a>
installation from which I’ve stripped all the packages I don’t need as well
as the GUI. I set up public key authentication and used <a href="http://en.wikipedia.org/wiki/Secure_Shell">SSH</a> to access the
files in there. For transferring files I used <a href="http://cyberduck.ch">Cyberduck</a> since Ubuntu
ships with <a href="https://wiki.archlinux.org/index.php/Avahi">Avahi</a> enabled. Moreover I used Cyberduck’s “edit” mode in which
the file can be edited locally and is written back to the server on each
change that is written to the file system.</p>
<p>My daily work flow consisted of:</p>
<ul>
<li>starting the VM, minimizing its window</li>
<li>firing up Terminal, SSH into the machine</li>
<li>updating the files from the SVN repository</li>
<li>opening Cyberduck; (select all source files, enter “edit” mode)</li>
<li>editing using Sublime Text 2 on the host</li>
<li>compiling and testing via SSH and Terminal</li>
</ul>
<p>While I couldn’t use clang for building the project I extensively used Clang’s
syntax checking features via <code>clang -Wall -fsyntax-only</code> in order to get
simpler as well as clearer error and warning messages than GCC would’ve
given me.
After fixing those I built the project using the provided cmake
configuration. I’ve included a comparison between GCC and Clang output as
image for illustration.</p>
<p><a href="/images/winter-2012-tugraz/comparison.png"><img alt="Comparison between GCC and Clang" src="/images/winter-2012-tugraz/comparison.png"></a></p>
<p>The course also required that the program has no memory leaks. Diagnosis of
those is a specialty of <a href="http://en.wikipedia.org/wiki/Valgrind">Valgrind</a>, however Valgrind on 10.8 is in an
unusable state. The following is quoted from its output:</p>
<blockquote>
<p>WARNING: Support on MacOS 10.8 is experimental and mostly broken.<br>
WARNING: Expect incorrect results, assertions and crashes.<br>
WARNING: In particular, Memcheck on 32-bit programs will fail to<br>
WARNING: detect any errors associated with heap-allocated data.</p>
</blockquote>
<p>This was the main reason for not working on the host OS X system. I’ve recently
been told that there is no direct equivalent for Valgrind as command-line tool
but I may start Xcode’s <a href="http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html">Instruments</a> from the command-line. I haven’t looked
into it with dedication, but I remember that the last time I tried this I
failed. It may however be possible to find quite some leaks using the
static code analyzer, which I’ll explain later.</p>
<p>For debugging purposes I used GDB since I didn’t compile the project with Clang
and as far as I understood LLDB wouldn’t have been any help in that case.</p>
<h3 id="special-recommendation-subversion-git">Special Recommendation: Subversion / Git</h3>
<p>All group projects should use a repository. Even a lot of single user projects
immensely profit from version control. The course team recommends
<a href="http://subversion.apache.org">Subversion</a> since it’s probably easier to wrap one’s mind around than
<a href="http://git-scm.com">git</a>, at least for beginners. I prefer using git whenever I have the choice
though. The TU hosts our private SVN repositories, but does not offer private
(nor public for that matter) git repositories. If you have a valid student
e-mail address, you may obtain 5 private repositories from <a href="http://github.com/edu">github/edu</a>.</p>
<p>At the TU we’ve reportedly seen horror scenarios like mailing source code to
each other as well as exchanging flash drives containing source code in order
to keep all participants’ copies up to date. <em>People not using version control
have a significantly lower chance to pass this course.</em></p>
<p>I used <a href="http://code.google.com/p/svnx/">SvnX</a> on the host and the command-line in the virtual machine. For
git I use <a href="http://gitboxapp.com">Gitbox</a>, which is paid software. There are several great
commercial SVN clients out there but I haven’t considered buying one for the
simple reason that I prefer git anyway.</p>
<h3 id="special-recommendation-clang">Special Recommendation: Clang</h3>
<p>The lecturer and the tutors tell you about GCC. I prefer Apple’s default
compiler Clang to GCC. As shown in the graphic above it’s output is more
helpful, it’s faster (though at the scale of the course projects the difference
might be infinitesimal) and I prefer to work with the built-in tools as long
as I don’t consider them completely crappy. Clang is an Open Source project
based on <a href="http://llvm.org">LLVM</a> and available for Linux too. <em>At the time of this writing
clang has a newer version in the Archlinux repositories than the one Apple
ships. I’d love to use that because</em>
<code>-Weverything</code> <em>also has</em> <code>-Wdocumentation</code>
<em>in said release which is really helpful since the course requires
<a href="http://www.stack.nl/~dimitri/doxygen/">doxygen</a>-style function headers.</em></p>
<h3 id="special-recommendation-scan-build">Special Recommendation: Scan-build</h3>
<p>To further go down the line with Clang, one might also want to use the
Clang-Analyzer, which is a <a href="http://en.wikipedia.org/wiki/Static_program_analysis">static code analyzer</a>. This tool will help
you find coding errors without actually executing your program by analyzing
the program flow. It can be incredibly helpful for beginners to see how
exactly a bad situation can be produced. The scan-build command produces a
website that can be opened in the browser and interacted with. The reports for
individual errors are quite detailed and I’ve included an example below.</p>
<p><a href="/images/winter-2012-tugraz/static.png"><img alt="Demonstraton of static code analyzer" src="/images/winter-2012-tugraz/static.png"></a></p>
<h3 id="changes-guest-operating-system">Changes: Guest Operating System</h3>
<p>I haven’t stuck with the Ubuntu machine however since I got annoyed with the
effort needed to slim it down every time I upgrade things. I’ve spent several
days crafting just the perfect installation of <a href="https://www.archlinux.org">Archlinux</a> for my needs and
now run that VM with <code>VBoxHeadless -s</code> and just SSH into that box for
development.</p>
<h2 id="course-computational-mathematics3">Course: Computational Mathematics<sup id="fnref:cm"><a class="footnote-ref" href="#fn:cm">3</a></sup></h2>
<p>Requirements:</p>
<ul>
<li>LaTeX distribution</li>
<li>Sage distribution</li>
</ul>
<p>This course has us typeset <a href="http://www.latex-project.org">LaTeX</a> documents and calculate quite some
mathematical problems using <a href="http://www.sagemath.org">Sage</a>.
Since Sage’s scripting language is Python and I happened to get a good
impression of that during my <a href="/2012/10/18/about-septembers-silence/">summer project</a> that wasn’t so hard as long as
I was able to understand what the task really consisted of. There’ve been
multiple complaints that the task descriptions haven’t been on a level that
a student in the first term can easily grasp and I strongly agree with that
sentiment.</p>
<p>Using LaTeX on the OS X is probably easiest using the <a href="http://tug.org/mactex/">MacTeX</a> package. The
full package contains several GUI applications.<br>
<strong>TeX Live Utility</strong> is a package manager for all your LaTeX needs. It’s
updated frequently via <a href="http://sparkle.andymatuschak.org">Sparkle</a> and recently got support for Notification
Center.
<strong>BibDesk</strong> is responsible for managing your bibliography. I can’t comment on
that since I had no need to use it. It’s a Cocoa application, however, so
that’s good. Also, Sparkle-enabled.
<strong>LaTeXiT</strong> allows you to quickly typeset snippets of LaTeX code and export it
for use in other applications, like a Keynote presentation. Cocoa, Sparkle.
Never used it, since we were to show our <em>.tex</em> files anyway.
For editing purposes the package contains both <strong>TeXShop</strong> and <strong>TeXWorks</strong>.
TeXWorks is cross-platform and might be worth figuring out if you prefer
sticking to one program for all three platforms, but it has its drawbacks.
For example it can’t use Cocoa’s native spell-check and therefor the package
gives you <strong>Excalibur</strong>, a dedicated spell-checker which I’ve had no need for
since I used Latexian. You may use TeXShop and stay in a Cocoa application
which is certainly okay if you prefer to stick with free applications. Check
<a href="http://tex.stackexchange.com/questions/34518/what-are-the-advantages-of-texshop-over-texworks">this thread</a> if you’re unsure what the pros and cons of the editors are.
As a side note the time of this writing the latest version of Excalibur is
almost four years old…</p>
<h3 id="special-recommendation-latexian">Special Recommendation: Latexian</h3>
<p>For beginners and lazy people I highly recommend using <a href="http://tacosw.com/latexian/">Latexian</a>,
since its Live
Preview feature is easily the most helpful thing I can imagine. You type and
the document gets converted to a preview instantly. Since you basically have
no idea what the command you’re typing does when starting as a beginner the
live preview saves a lot of time when experimenting. <em>Be aware that this is
paid software and still requires you to have a TeX distribution installed.</em></p>
<p><a href="/images/winter-2012-tugraz/latexian.png"><img alt="Screenshot of Latexian" src="/images/winter-2012-tugraz/latexian.png"></a></p>
<p>For the second part of course a local installation of <a href="http://www.sagemath.org">Sage</a> is recommended,
although one could either use a public server or the one provided by the
university (<a href="https://sage.tugraz.at">https://sage.tugraz.at</a>, using the standard TUG credentials). I’ve
used a local copy and tested the <em>.app</em> version. That one broke with the 5.5
update for me and I wasn’t able to shut the server down any more without
manually killing processes. After that I switched to the regular build and
symlinked the binary into my <code>PATH</code>.</p>
<h2 id="course-logic-programming4">Course: Logic Programming<sup id="fnref:lp"><a class="footnote-ref" href="#fn:lp">4</a></sup></h2>
<p>Requirements:</p>
<ul>
<li>swi-prolog</li>
</ul>
<p>For this course only the swi-prolog binary is needed which can be installed
easily using <a href="http://mxcl.github.com/homebrew/">homebrew</a>:</p>
<p><code>brew install swi-prolog</code></p>
<p>Additionally I recommend using an editor which has support for the <a href="http://en.wikipedia.org/wiki/Prolog">Prolog</a>
syntax. In my case that was <a href="https://github.com/alnkpa/sublimeprolog">a plugin for Sublime Text 2</a>, my editor
of choice for every style of editing I do, both coding and blogging.</p>
<h3 id="addendum-homebrew">Addendum: Homebrew</h3>
<p>If you have recently used either a Linux distribution or Valve’s <a href="http://en.wikipedia.org/wiki/Steam_(software)#Software_delivery_and_maintenance">Steam</a>,
you’re probably familiar with the concept of a package manager. There’ve been
several successful attempts to create one for OS X, amongst them <a href="http://www.finkproject.org/index.php">fink</a>,
<a href="http://www.macports.org">macports</a> and <a href="http://mxcl.github.com/homebrew/">homebrew</a> of which I like homebrew best due to its
simplicity and the fact that it doesn’t require your root password for its
tasks. <em>No sudo here.</em> <a href="http://tedwise.com/2010/08/28/homebrew-vs-macports/">This article</a> has a nice comparison of the three.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:nis">
<p>NIS <a class="footnote-backref" href="#fnref:nis" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:esp">
<p>German: Einführung in die Strukturierte Programmierung, ESP <a class="footnote-backref" href="#fnref:esp" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:cm">
<p>German: Computermathematik, CM <a class="footnote-backref" href="#fnref:cm" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:lp">
<p>German: Logik und Logische Programmierung, LP <a class="footnote-backref" href="#fnref:lp" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
</ol>
</div>Media Recap: December 20122012-12-30T22:01:04+01:002014-02-14T00:47:04+01:00Alexander Skibatag:ghostlyrics.net,2012-12-30:/media-recap-december-2012.html<p><strong>Summary: 2 games, 9 podcasts, 1 movie, 4 videos, 3 novels,
2 different manga</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li><a href="https://itunes.apple.com/at/app/fruit-ninja/id362949845?l=en&mt=8">Fruit Ninja</a> (and HD)</li>
<li><a href="https://itunes.apple.com/at/app/fruit-ninja-puss-in-boots/id469297662?l=en&mt=8">Fruit Ninja Puss In Boots</a> (and HD)</li>
</ul>
<p>Developer <a href="http://halfbrick.com">Halfbrick</a> was generous and offered their whole iOS catalog
for free for one day during Christmas 2012. I downloaded all of their games …</p><p><strong>Summary: 2 games, 9 podcasts, 1 movie, 4 videos, 3 novels,
2 different manga</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li><a href="https://itunes.apple.com/at/app/fruit-ninja/id362949845?l=en&mt=8">Fruit Ninja</a> (and HD)</li>
<li><a href="https://itunes.apple.com/at/app/fruit-ninja-puss-in-boots/id469297662?l=en&mt=8">Fruit Ninja Puss In Boots</a> (and HD)</li>
</ul>
<p>Developer <a href="http://halfbrick.com">Halfbrick</a> was generous and offered their whole iOS catalog
for free for one day during Christmas 2012. I downloaded all of their games
but since I neither like zombies nor shooting things for the sake of shooting
I found bliss in Fruit Ninja. Especially the Puss In Boots episode of Fruit
Ninja is adorable.</p>
<h2 id="podcasts">Podcasts</h2>
<ul>
<li>Irish and Celtic Music Podcast <a href="https://itunes.apple.com/at/podcast/irish-celtic-music-podcast/id77407482?i=117519660&l=en&mt=2" title="iTunes link">124</a> (1/2)</li>
<li>Irish and Celtic Music Podcast <a href="https://itunes.apple.com/at/podcast/irish-celtic-music-podcast/id77407482?i=124980820&l=en&mt=2" title="iTunes link">132</a><br>
I had the sudden urge to listen to something different during December and
Irish music just happened to be the first thing that came across my mind.
Most of the songs in the podcasts were pretty nice, but <a href="http://soundcloud.com/theduplets/a-mans-a-man-words-robert">A Man’s a Man</a>
performed by The Duplets stood out in particular. It’s calming and very
relaxing to listen to.</li>
<li>Build & Analyze 105 - <a href="http://5by5.tv/buildanalyze/105">Service Plans for Cables</a></li>
<li>Build & Analyze 106 - <a href="http://5by5.tv/buildanalyze/106">Outlasted The Daily</a></li>
<li>Build & Analyze 107 - <a href="http://5by5.tv/buildanalyze/107">The Eldest Programmer</a> (1/2)</li>
<li>IRQ Conflict 46 - <a href="http://feedproxy.google.com/~r/irqconflict/~5/U14nF9C00tk/IRQ%20Conflict%2046%20-%20NSEror.mp3" title="direct link">NSEror</a></li>
<li>Secret Archives of the Vatican Podcast 101 - <a href="http://traffic.libsyn.com/vincemillett/Podcast_101.mp3" title="direct link">Cultural Wisdom</a></li>
<li>Mac Power Users 112 - <a href="http://5by5.tv/mpu/112">Self Publishing and iBooks Author</a></li>
<li>Coffee With an Author - <a href="https://itunes.apple.com/at/podcast/jennifer-estep-on-coffee-author/id292162649?i=80548694&l=en&mt=2" title="iTunes link">Feb 1, 2012, Jennifer Estop</a> <br>
Well, about that interview… It was bad. Really, really bad. The interviewer
was not prepared at all, kept stating incorrect facts about the author and
moreover showed amazing disinterest in American geography. <em>One should at
least know if a state is in the north or the south of the country.</em>
Moreover the interviewer repeatedly used phrases like “tell me now” and
“let’s go back to” which made her sound even less prepared.<br>
Nevertheless it was interesting to hear about the habits and writing process
of a real, published author. <em>Even though Jennifer Estep is not that popular
(yet?)</em></li>
</ul>
<h2 id="movies">Movies</h2>
<ul>
<li>The Girl With The Dragon Tattoo - <a href="http://en.wikipedia.org/wiki/The_Girl_with_the_Dragon_Tattoo_(2011_film)">wiki</a> / <a href="http://www.imdb.com/title/tt1568346/">imdb</a><br>
After having read the novel a while ago I decided to watch the movie too.
Since I wanted to try out iTunes’ movie service anyway and had time after
having finished my university assignments in the 11th hour I did just that.
Surprisingly I was not disappointed of the movie even though that seems
to be the normal reaction if you’ve read the book and seen the movie on the
same content. There were deviations from the book but nothing controversial.
I’d say that it was done for the same reason Lord Of The Rings had its
alterations done: To fit the full movie into one piece instead of pulling
a Harry Potter. I can recommend watching this without doubt.<br>
<em>I watched the Hollywood edition, not the Swedish one.</em> </li>
</ul>
<h2 id="videos">Videos</h2>
<ul>
<li><a href="https://itunes.apple.com/at/podcast/wir-sind-alle-teil-der-netzgemeinde/id516551728?i=116647442&l=en&mt=2" title="iTunes link">Wir sind alle Teil der Netzgemeinde</a><br>
I was really late watching this video since it has been lingering in iTunes’
podcast section for quite some time. It’s a funeral for online privacy which
died when Austria introduced the “Vorratsdatenspeicherung”
(eng. Telecommunications data retention). The concept is quite interesting
and the short movie is well done.</li>
<li>RSA - <a href="http://www.youtube.com/watch?v=BG46IwVfSu8">The Power of Outrospection</a></li>
<li>Standard.at - <a href="http://derstandard.at/1355460494376/Warum-die-Wehrpflicht-abgeschafft-gehoert" title="German link">Warum die Wehrpflicht abgeschafft gehört</a></li>
<li><a href="http://www.youtube.com/watch?v=WTYet-qf1jo">Windows 8 - The Animated Evaluation</a><br>
This video is done in a style resembling <a href="http://www.escapistmagazine.com/videos/view/zero-punctuation">Zero Punctuation</a> and tries to
inform about Windows 8’s shortcomings in UI design and usability. I agree
with a lot of its points even though I didn’t think it was this bad. On the
other hand I really like experimenting with new technology and software and
therefor don’t mind searching for things. If, however, one has to jump in
and immediately be working productively I probably wouldn’t recommend
Windows 8 without <strong>at least</strong> one mandatory course for beginners before
first usage.</li>
</ul>
<h2 id="novels">Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/4039394/The-Girl-Who-Played-with-Fire">The Girl Who Played With Fire</a> by Stieg Larsson<br>
After having watched the first part of the Millenium trilogy I immediately
rediscovered my interest in the series and bought the Kindle version of the
second one to read on the train. Which I did. I like Larsson’s writing style.
The slow pacing, the tiny spikes of action between slower passages make the
style interesting and somewhat difficult to write in my opinion. I find it
rather amazing that he manages to keep the reader from losing interest.</li>
<li><a href="http://www.shelfari.com/books/5831441/The-Girl-Who-Kicked-the-Hornets-Nest">The Girl Who Kicked The Hornets’ Nest</a> by Stieg Larsson<br>
Some time after starting the third book I wondered why I was reading at a
pace this slow. I had read for an entire evening and only managed to get to
a third of the book. Then I realized that the third part of the trilogy was
considerably longer than the first two.<br>
It is a worthy, lengthy conclusion to a modern, serious and entertaining
trilogy.</li>
<li><a href="http://www.shelfari.com/books/28887026/Crimson-Frost">Crimson Frost</a> by Jennifer Estep<br>
Great improvement on the already good series, taking into account my
<a href="/2012/07/01/media-recap-june-2012/">previous criticism</a> about not showing other types of warriors. Neither
were there many repetitions or sequences that reminded me of the previous
books writing too much. Overall a great work of urban fiction.</li>
</ul>
<h2 id="mangas">Mangas</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Hunter_x_hunter">Hunter X Hunter</a> (1-8, 9-13, 14-20, 21-24, 25-26, 27, 28-32) (fin)<br>
This series is either canceled or on hiatus. I’ve read as far as possible.</li>
<li><a href="http://en.wikipedia.org/wiki/Naruto">Naruto</a> (611, 612, 613, 614)</li>
</ul>Media Recap: November 20122012-12-02T01:22:15+01:002014-02-14T00:47:04+01:00Alexander Skibatag:ghostlyrics.net,2012-12-02:/media-recap-november-2012.html<p><strong>Summary: 1 game, 12 podcasts, 2 presentations, 1 novel, 2 different mangas</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li><a href="http://www.dontstarvegame.com">Don’t Starve</a>, PC, Beta
It’s a survival game. You will die. A lot, probably. But the sound design,
the visual style and the strange sense of humor behind all the madness in
Don’t Starve …</li></ul><p><strong>Summary: 1 game, 12 podcasts, 2 presentations, 1 novel, 2 different mangas</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li><a href="http://www.dontstarvegame.com">Don’t Starve</a>, PC, Beta
It’s a survival game. You will die. A lot, probably. But the sound design,
the visual style and the strange sense of humor behind all the madness in
Don’t Starve’s wilderness immediately caught my eye when I played the demo
which is don’t via Chrome’s <a href="http://en.wikipedia.org/wiki/Google_Native_Client">Native Client</a> technology. I decided to
support further development of this game which is only in it’s beta stage
by buying two licences on STEAM.<br>
Though Ron and I had quite an argument whether excessive playing of a game
before it’s official release spoils all the fun and whether one might miss
out vital details that may have been hidden during the test phase I still
plan to invest quite some time into this little game. Also, I’m eagerly
awaiting the arrival of the OS X version on Steam, since the <a href="http://forums.kleientertainment.com/showthread.php?2224-Don-t-Starve-FAQ">FAQ</a> says
there will be one.</li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<ul>
<li>Build & Analyze 97 - <a href="http://5by5.tv/buildanalyze/97">Grapefruits Everywhere</a></li>
<li>Build & Analyze 101 - <a href="http://5by5.tv/buildanalyze/101">Looting Siracusa County</a></li>
<li>Build & Analyze 102 - <a href="http://5by5.tv/buildanalyze/102">My Quotes Are Curly And My Dashes Are Solid</a></li>
<li>Build & Analyze 103 - <a href="http://5by5.tv/buildanalyze/103">Denial Haircut</a></li>
<li>Build & Analyze 104 - <a href="http://5by5.tv/buildanalyze/104">Hammertime</a></li>
<li>Hypercritical 92 - <a href="http://5by5.tv/hypercritical/92">The Tim Cook Era</a></li>
<li>5by5 Specials 10 - <a href="http://5by5.tv/specials/10">State of the Union 2012</a></li>
<li>IRQ Conflict 44 - <a href="https://itunes.apple.com/at/podcast/irq-conflict-44-where-in-world/id373909480?i=122316645&l=en&mt=2" title="iTunes Link">Where In The World Is Justin?</a></li>
<li>IRQ Conflict 45 - <a href="https://itunes.apple.com/at/podcast/irq-conflict-45-finely-charred/id373909480?i=123017600&l=en&mt=2" title="iTunes Link">Finely Charred</a></li>
<li>Secret Archives of the Vatican Podcast 93 - <a href="https://itunes.apple.com/at/podcast/seventh-voyage-secret-archives/id292820706?i=118685563&l=en&mt=2" title="iTunes Link">Seventh Voyage</a></li>
<li>Just Talking 107 - <a href="https://itunes.apple.com/at/podcast/episode-107-opposable-thumbs/id335924865?i=103988088&l=en&mt=2" title="iTunes Link">Opposable Thumbs</a><br>
I tuned in to this podcast that I had postponed long ago due to my interest
in Ben Kuchera’s opinion. He was in charge of Ars Technica’s Gaming section
before joining <a href="http://penny-arcade.com">Penny Arcade</a> and starting their <a href="http://penny-arcade.com/report/">PA Report</a> Gaming
section there. I love his writing and I admit unsubscribing from Ars Technica
and following him to PA Report for that reason.</li>
<li>Paging Dr. Nerdlove 13 - <a href="http://www.doctornerdlove.com/2012/11/sex-for-beginners-2/">Sex for Beginners</a><br>
Not as funny as expected, was rather topical and less comedic than I hoped.
From the impression I got from the Doctor’s website I was expecting something
more well, funny. I wasn’t aware that this series and podcast really is
dedicated to bringing information about love, relationships and sex to nerds
instead of being a rather good parody. I guess I should’ve researched
properly.</li>
</ul>
<h2 id="presentations">Presentations</h2>
<ul>
<li>Apple Special Event, March 2012<br>
New iPad and stuff. Swallowed down a bit of buyer’s remorse for not waiting
for an iPad with Retina resolution before buying mine.</li>
<li>Extra Credits, Season 5, Episode 10 - <a href="http://penny-arcade.com/patv/episode/demo-daze">Demo Daze</a><br>
If you’re curious why there are less and less demos of video games nowadays
this episode of Extra Credits has you covered. </li>
</ul>
<h2 id="novels">Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/9088281/Three-Bags-Full">Glennkill</a> by Leonie Swann (German)<br>
I’ve read the German edition of this very strange book since one of my
friends lent it to me. It’s about a flock of sheep solving a murder.
It’s fun. Not terribly so but amusing. </li>
</ul>
<h2 id="mangas">Mangas</h2>
<p>Most of the reading time this month was spent on mangas instead of novels. I
tried to catch up on <a href="http://en.wikipedia.org/wiki/Naruto">Naruto</a> as much as possible and started reading
<a href="http://en.wikipedia.org/wiki/Rurouni_Kenshin">Kenshin</a> after I remembered that I liked that a few years ago.
<em>This list here is modelled after my reading schedule. Those are several
multi-hour sessions of Naruto.</em></p>
<ul>
<li>Naruto 23-33</li>
<li>Naruto 34-53</li>
<li>Naruto 54-61</li>
<li>Naruto chapters 588-610</li>
<li>Kenshin 1-6</li>
<li>Kenshin 7</li>
</ul>Project:Rosetta - Status & Behind The Scenes2012-11-18T09:11:46+01:002014-02-14T00:47:05+01:00Alexander Skibatag:ghostlyrics.net,2012-11-18:/projectrosetta-status-behind-the-scenes.html<p>For quite some time now friends have been asking me whether my novel (working title: “Project: Rosetta”) is dead. They haven’t used quite those exact words but that’s what their questions amounted to in my head.</p>
<h2 id="projectrosetta-is-not-dead">Project:Rosetta is not dead</h2>
<p>Now I could say that I was …</p><p>For quite some time now friends have been asking me whether my novel (working title: “Project: Rosetta”) is dead. They haven’t used quite those exact words but that’s what their questions amounted to in my head.</p>
<h2 id="projectrosetta-is-not-dead">Project:Rosetta is not dead</h2>
<p>Now I could say that I was incredibly busy working on the <a href="/about-septembers-silence.html">tagstore project</a> in summer, preparations for university in fall and working hard for university and the <a href="/tag/game-jam-graz.html">Game Jam project</a> and therefor had no time to work on my novel. However I am not a fan of lying, especially when talking about a project that is so dear to me as Rosetta is. The simple truth is that I’ve been preoccupied with reading RSS feeds, playing games and listening to podcasts. To cut a long story short I’ve been a lazy, unproductive bum and in hindsight that makes me sad. </p>
<p>That’s not to say that there hasn’t been any progress at Rosetta. I’ve constantly been evaluating new ideas, modifying existing concepts that I liked in other creative works and working on a rough draft for the main story arc. I’ve also put quite some thoughts into romance - <em>for the parts in the book, not my own</em>. </p>
<p>But there’s also another little project of mine whose fate is tightly interwoven with Rosetta’s. I am building a platform for my beta readers. It will not have its focus on community or anything similar however. Its sole aim will be to automate the process of generating exactly the kind of website and reading environment for my readers that I need without the need for a database.<br>
Maybe I should elaborate a bit on my reason for doing so.<br>
I am comfortable, but not entirely satisfied using <a href="http://wordpress.org/">WordPress</a> for my blog. At the time of this writing I’m also using a WordPress based site for the Beta reader area of Rosetta. That has a big issue: in order to update a post one has to use the web interface or access the database directly. The web interface is horrible and has me doing updates and corrections manually, which sucks. On the other hand I don’t feel comfortable enough working directly in the database. <strong>Updating any part of Rosetta this way is by far more tedious than it should be.</strong></p>
<h2 id="the-tech">The Tech</h2>
<p>The way I aim to do those task in the future is handling my markdown files locally in a git repository and having a hook do everything for me in the background automatically. That means, amongst other things, converting everything to HTML, creating the index, writing the changelog, updating the news section and uploading only changed and new files. <em>If I am overly motivated I might even write a caching feature so that the whole thing doesn’t go haywire if I commit something while being offline.</em></p>
<p>What I have so far is snippets that I am puzzling together because I am developing the features one by one. </p>
<ul>
<li>FTP upload works</li>
<li>Markdown to HTML conversion via <a href="http://johnmacfarlane.net/pandoc/">Pandoc</a> works, but does not yet have my own CSS file</li>
<li>Getting the server username and password from the OS X Keychain works</li>
<li>Reading the server name (and additional future configuration options) from an XML file works</li>
</ul>
<p>This is as far as I got during two long nights trying stuff and reading quite some Python documentation. </p>
<p>I hope that this post explains why updates to the prose part of Rosetta have been so slow and demonstrates that I have no intention of abandoning this project.</p>RE: Jörg Müller (Game Jam Graz) on the Game Jam results2012-11-08T15:31:34+01:002014-02-14T00:47:05+01:00Alexander Skibatag:ghostlyrics.net,2012-11-08:/re-jorg-muller-game-jam-graz-on-the-game-jam-results.html<p><a href="http://gamejamgraz.wordpress.com/2012/11/08/ergebnisse/">Game Jam Graz’s organizer, Jörg Müller, on the results of the first Game Jam
(German link)</a></p>
<p>I will be doing this Evade & Counter a bit differently than usual since I’m not
willing to translate the entirety of Jörg’s post for you. I’ll be summing up
a …</p><p><a href="http://gamejamgraz.wordpress.com/2012/11/08/ergebnisse/">Game Jam Graz’s organizer, Jörg Müller, on the results of the first Game Jam
(German link)</a></p>
<p>I will be doing this Evade & Counter a bit differently than usual since I’m not
willing to translate the entirety of Jörg’s post for you. I’ll be summing up
a few key sections and comment on those. You should look at the
<a href="http://gamejamgraz.wordpress.com/2012/11/08/ergebnisse/">linked article</a> nevertheless since it has some screenshots of our work.</p>
<blockquote>
<p>The teams from the idea finding phase more or less stayed the same
for the final teams, since you’re obviously more motivated to contribute to
a project for whose idea you’re at least partially responsible.</p>
</blockquote>
<p>Not so sure. Certainly you having contributed to a project’s initial vision
gives you some sense of motivation but I’m tempted to say many of the Game
Jam’s participants just chose the project they found to have the best possible
chance for them to contribute in their specific field of work. I’m willing to
bet that’s the reason our team (‘Escape’) attracted so many sound designers.</p>
<h3 id="escape">Escape</h3>
<p>I’ve already talked about most of <a href="/game-jam-graz-day-2.html">our struggles</a> at length. There’s a
lot we could’ve done better and some lessons were learned. I’ll probably post
my own piece with a little conclusion in some time.</p>
<h3 id="lecture-hall-games">Lecture Hall Games</h3>
<p>Lecture Hall Games felt like the most feature complete project to me during the
presentation. They had their work in a state which was stable enough to allow
a hands-on demo. Other Game Jam participants with Android phones were able to
join the multiplayer demo during the final event.<br>
Their code is already <a href="https://github.com/fruhwirth-marco/lecture-hall-games">on github</a> and they’ve shown they are fast coders
and made the right choice in technology for their project.</p>
<h3 id="pandemic-solars">Pandemic Solars</h3>
<p>I like the idea of having to prevent a solar system from the corruption that
overpopulation may bring and their space simulation feeling. The graphics for
their planets showed good level of detail and even though none of their devs
had worked with the Unity engine before they showed considerable progress in
those three days.</p>
<h3 id="pushback">Pushback</h3>
<p>On the
technical side I kind of envy them for their usage of Python. Using Python and
the Panda3D engine from the start may have made things go a lot easier for my team
too. Unfortunately I failed to ask whether any of them had already had
experience with said engine before.
<em>No offense here, but this kind of casual, competitive game bores me.</em></p>
<h2 id="organizational-efforts">Organizational efforts</h2>
<p>Have a short list of the entire staff:</p>
<ul>
<li>14 developers</li>
<li>8 sound designers & musicians</li>
<li>6 graphic artists</li>
<li>2 writers</li>
<li>2 people on the documentary team (filming, interviewing)</li>
</ul>
<blockquote>
<p>Next time we’d like to use the third floor of the building instead of the
second one, since no one used the computers provided by the university.</p>
</blockquote>
<p>Yes, I totally agree. First, there are sofas. <em>Nothing beats sofas.</em> In
addition to that there are no computers provided by the university at the
third floor, which further lowers the possibility of other students invading
our territory during the event. Furthermore everyone either brought their
laptops or desktop machines. I’d say this had to be expected since it’s hard
to get used to a different desktop environment, setup or even operating system
and still work under time pressure. Most people brought the setup they were
already familiar with and worked productively. Those that didn’t because they
had no chance of getting familiar beforehand suffered - like our devs.
Other devs were more flexible and showed talent in compensating the
unfamiliarity.</p>
<blockquote>
<p>The participants were eager to have the next Game Jam. It should already be
a ‘real’ Game Jam with both a given topic and the competitive aspect. There
should already be the option to sign up as teams.</p>
</blockquote>
<p>Amazingly, that’s not the impression I got from the feedback at the
presentation on Saturday. I think there are still people who are not sure what
they are going to do if the registration is team based because that implies
that you should already have found a team for the event beforehand. I’m also not sure
that turning everything into a competition yields more promising results than
our current model - but on the other hand I was also skeptic of that.<br>
<em>Nevertheless many people will be pushing themselves harder if there’s a
competitive aspect. This time everyone got at least nearly enough sleep. No
sleeping bags or hammocks at the event. I doubt that will stay the same if
there’s heavy competition between the teams.</em></p>
<blockquote>
<p>The next Game Jam will be October 2013 or later due to personal reasons.</p>
</blockquote>
<p>We’ll see. I would be massively disappointed if there was no such event during
the next term at university. Currently I’m asking around and looking for help,
maybe even some ideas for workshops and lectures we may offer as well as
trying to come up with possible dates for a Game Jam. I don’t like the thought
that the whole idea is on hiatus because our current organizer is not
available.</p>
<p>It will probably be a lot of work but I’m willing to look into that in order to
try and enable a biyearly schedule for our Game Jam.</p>Media Recap: October 20122012-11-07T22:03:49+01:002014-02-14T00:47:06+01:00Alexander Skibatag:ghostlyrics.net,2012-11-07:/media-recap-october-2012.html<p>These monthly summary posts will now be collapsed on the home page. You will
still get the full post in your feed reader. I think it’s better not to water
down the quality of the front page with lists of mediocre importance.</p>
<p><strong>Summary: 3 games, 12 podcasts, 1 presentation …</strong></p><p>These monthly summary posts will now be collapsed on the home page. You will
still get the full post in your feed reader. I think it’s better not to water
down the quality of the front page with lists of mediocre importance.</p>
<p><strong>Summary: 3 games, 12 podcasts, 1 presentation, 1 novel, 3 different mangas</strong></p>
<!--more-->
<h2 id="games">Games</h2>
<ul>
<li><a href="https://itunes.apple.com/at/app/world-ends-you-solo-remix/id545042359?mt=8">The World Ends With You Solo Remix</a>, iPad (iTunes Link)<br>
Is great and ridiculously expensive given that it’s not a universal binary.
I have played the original version on the Nintendo DS without shelling out
45 Euro however, so I didn’t feel bad buying this game. In my opinion it’s
one of those games that were able to highlight the NDS’s features and give
an interesting new twist to the mobile RPG genre. The stylus-based combat
was amazing on the NDS and still is on the iPad. I don’t intend to buy the
iPhone version too.</li>
<li><a href="http://www.atebits.com/letterpress/">Letterpress</a>, iOS universal<br>
Letterpress is the perfect time waster if you happen to like word-based
puzzle games against other people. It is entirely based on iOS’s Game Center
and doesn’t cost a thing. You should shell out the measly 0.80€ for the
in-app purchase to unlock the word list and more simultaneous matches.</li>
<li><a href="https://itunes.apple.com/at/app/wizardlings/id553591051?mt=8">Wizardlings</a>, iOS universal (iTunes Link)<br>
Is awful. Don’t make me go there. I don’t know what the devs thought when
‘making a casual rpg’. RPGs are not about tedious clicking on each and every
field of the map. RPGs are about character development (which there isn’t),
about a danger from which something has to be prevented (somewhat there, only
in the background though) and about the fun and interaction with NPCs and/or
the environment during the game (which I couldn’t find in the whole first
chapter). Also it’s ridiculously easy to mix up the two ingame currencies and
the cash shop. They should <strong>not</strong> be in the same visual style. I’m all for
consistency. But on a platform which let’s you go haywire for 15 minutes by
default after entering your password (even for a free app) you shouldn’t do
that. <em>It reeks of disrespect for your users.</em></li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<ul>
<li><a href="http://vincemillett.libsyn.com">The Secret Archives of The Vatican</a> 92 - Sacred City</li>
<li><a href="http://vincemillett.libsyn.com">The Secret Archives of The Vatican</a> 96 - Egyptic</li>
<li><a href="http://vincemillett.libsyn.com">The Secret Archives of The Vatican</a> 97 - Sacred Dragon</li>
<li><a href="https://itunes.apple.com/at/podcast/18-instawhatsit/id528458508?i=121699978">The Talk Show With John Gruber 18</a> - Instawhatsit (iTunes Link)<br>
I’m still not really into Gruber’s shows but I wasn’t able to let the show
starring Marco Arment go by.</li>
<li><a href="http://5by5.tv/hypercritical">Hypercritical</a> 89 - Lazy Sunday</li>
<li><a href="http://5by5.tv/hypercritical">Hypercritical</a> 91 - Adolescence</li>
<li><a href="http://5by5.tv/buildanalyze">Build & Analyze</a> 98 - It’s Part of Me Now</li>
<li><a href="http://5by5.tv/buildanalyze">Build & Analyze</a> 99 - The Podcast</li>
<li><a href="http://5by5.tv/buildanalyze">Build & Analyze</a> 100 - The Hostage Star</li>
<li><a href="http://www.alternativlos.org">Alternativlos</a> 26 - Investigativer Journalismus (German)</li>
<li><a href="http://www.alternativlos.org">Alternativlos</a> 27 - Kriegsroboter und Killerdrohnen (German)</li>
<li><a href="https://itunes.apple.com/at/podcast/coffee-author-blog-talk-radio/id292162649">Coffee with an Author</a> - Jennifer Estep. (iTunes Link)<br>
I’ve read several books by Jennifer Estep and was interested in her
personality. Unfortunately this episode was just a filler due to the author
not being able to make the date.</li>
</ul>
<h2 id="presentations">Presentations</h2>
<ul>
<li>Apple Special Event, October 2012<br>
Live-Stream. My interest in Apple <em>and admittedly, considerable boredom on
that particular evening</em> led me to watch the live stream of this
presentation. I’m curious to see how the 13 inch Macbook Pro Retina handles
itself when tackling compilation, games and video heavy applications. I am
thinking about switching my 13 inch Macbook Air against a 13 inch Pro if
it’s generally well liked by reviewers. However, I’m a bit sceptic about
both the low resolution (even though it’s retina density, you won’t make
up screenspace by doubling the pixels…) and the integrated GPU. It seems like
the 15 inch Pro would suit my needs a lot better but it’s also heavier than
my current machine - which is a major downside for me as I easily get
backpain.<br>
Also iTunes 11 has been <a href="http://www.macstories.net/news/itunes-11-delayed-to-november/">postponed</a> until the end of this month, but that’s
okay if the rewrite is good. Take all the time you need, Apple. Just release
a version which is as polished as possible.</li>
</ul>
<h2 id="novels">Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/26947983/Whispers-at-Moonrise">Whispers at Moonrise</a> - C.C. Hunter<br>
What’s there to say? The last but one part from the Shadow Falls series. It’s
amusing, it’s fascinating, it’s entertaining. Read it if you’re into Urban
Fantasy and are not scared off by not being the target audience if you’re
male.</li>
</ul>
<h2 id="mangas">Mangas</h2>
<p>This month was a heavy on mangas since I’ve decided to try and read some old
favorites of mine. <a href="http://en.wikipedia.org/wiki/Shaman_King">Shaman King</a> is finished, <a href="http://en.wikipedia.org/wiki/Naruto">Naruto</a> is unfortunately
ongoing and another favorite of mine, <a href="http://en.wikipedia.org/wiki/Hunter_x_Hunter">Hunter X Hunter</a> is on hiatus. I’ve
also looked into <a href="http://en.wikipedia.org/wiki/Air_Gear">Air Gear</a> which seemed quite nice.</p>
<ul>
<li>Shaman King 7-12</li>
<li>Shaman King 14-20</li>
<li>Shaman King 21-33 (fin)</li>
<li>Air Gear 1-2</li>
<li>Naruto 1-19</li>
<li>Naruto 20-22</li>
</ul>Game Jam Graz - Day 22012-11-02T23:37:02+01:002014-02-14T00:47:07+01:00Alexander Skibatag:ghostlyrics.net,2012-11-02:/game-jam-graz-day-2.html<p>Right now it’s evening of the second day of our 2012 Game Jam at the TU Graz.</p>
<h2 id="status">status</h2>
<p>I’m trying to wrap my head around what’s still possible for our team in the
remaining time and what’s entirely unrealistic.<br>
Early on during the competition our team …</p><p>Right now it’s evening of the second day of our 2012 Game Jam at the TU Graz.</p>
<h2 id="status">status</h2>
<p>I’m trying to wrap my head around what’s still possible for our team in the
remaining time and what’s entirely unrealistic.<br>
Early on during the competition our team chose <a href="https://twitter.com/gentlemenlike">Manuel</a> as team leader; a
decision that I fully support, though I wish we would’ve settled on the used
technology earlier in order to have everything running on each developer’s
machine on day 1 or in the morning of day 2 at last.</p>
<p>That issue could’ve been prevented by having the registration be team based,
but I’m not sure that the event as a whole had worked with that condition.
I’m not confident that we have a community large enough to support that kind
of team based competitions with pre-formed teams. Considering that there are
multiple people who came here from Vienna in order to participate I’m rather
inclined to assume that the reach of our event is large enough to draw multiple
teams which know that their teamwork is great.</p>
<h2 id="vision">vision</h2>
<p>The game that my team is trying to create is part puzzle focused exploring and
part survival horror based escape from a building. The protagonist is to find
an object of great emotional value in a decrepit hospital. The player explores
said hospital from a first person viewpoint and has to solve multiple riddles
before finding the object. Afterwards the dare turns into a dangerous escape
from the haunted hospital.</p>
<p>We plan to achieve this vision by using our skilled team members in the best
way possible. Due to the horror-based nature of our setting we immediately drew
the attention of three sound designers after the initial presentation as well
as one graphic artist, three programmers and a writer. As we decided on
project participation based on interest <em>Escape</em> - our working title - was
the project I settled on. I have
to admit that it was my second choice, but nevertheless participated with eager
interest.</p>
<h2 id="progress">progress</h2>
<p>During the first day the programmers decided on which
engine to use (<a href="http://www.ogre3d.org">OGRE</a>), me
and Lisa, my writer colleague developed the back story, setting, gameplay
mechanics and level design. The sound designers jumped at the list of required
effects which just kept expanding throughout the day. The same can be said for
the list of required graphics and models. <em>I have to admit it’s rather cool to
wish for something and have it done professionally.</em> Although it was never
officially stated or anything like that I felt like the lead designer while
<a href="https://twitter.com/gentlemenlike">Manuel</a> was our tech lead. Status updates and miniature meetings were held
to determine progress and technical possibilities.</p>
<h2 id="setbacks">setbacks</h2>
<p>The decision for OGRE lasted one and a half day during which our tech team
tried to get the engine to run on two different flavors of linux and one
Windows install. That… didn’t go so well.</p>
<ul>
<li>On our Arch install the main engine was installed okay.</li>
<li>On the Ubuntu install the system was outdated which required manual
installation and didn’t work afterwards. We assume that this was due to
graphics drivers, but obviously lacked motivation <strong>and</strong> time to properly
look into that.</li>
<li>While the Windows laptop after spending several hours in vain trying to fix
the source to make it compile at all, struggling with <a href="http://en.wikipedia.org/wiki/Cmake">CMake</a> and finally
OGRE crashing after milliseconds, the Windows part was scrapped after breaking the mindset of two developers.</li>
</ul>
<p>In an effort to have everything ready, Manuel spent the first evening fixing
everything at least for his system in order to also have a working physics
engine (namely Ogrebullet), which wasn’t easy either due to a package
build from the AUR which didn’t compile. (He may or may not submit a patch
for that after the Game Jam.)</p>
<p>And after many, many hours of trying to repair everything that was shipped
broken or couldn’t be configured easily the realization was inevitable. If
we were to continue using OGRE we wouldn’t have a playable prototype in time
for the deadline. A fallback option was quickly decided to be the <a href="http://www.blender.org/education-help/tutorials/game-engine/">Blender</a>
builtin game engine which would be relatively easy to handle while not being
all that performance optimized that a real engine might be.</p>
<h2 id="lookout">lookout</h2>
<p>At the moment we’re as far as having a pretty complete plan for day 3. We’re
going to have two teams working on our two levels (or rather, both sections of
our single level), meaning we assign a writer, a scripter and a environment
artist to each team in order to assemble our game world.</p>
<p>I’m of the impression that it’s quite possible to even have the full level
playable (<em>I’m not talking about bug free here</em>) tomorrow late afternoon for
the deadline. Given that both our scripters are already familiar with
<a href="http://en.wikipedia.org/wiki/Python_(programming_language)">Python</a> which is used for scripting in Blender progress is realistic.
Both my female colleague and me will be coordinating the efforts to make the
levels feel and behave right.</p>
<p>The disadvantage of using this method is lacking extensibility since the whole
level will be assembled by hand and the whole scripting is specific to the
current situation and not used from references.</p>
<h2 id="conclusion">conclusion</h2>
<ul>
<li>I am amazed by the awesome work that our sound team has delivered yet. The
quality of sounds as well as loops and melodies is amazing and almost nothing
required changes. Those were made only to keep everything perfectly in sync
with the atmosphere we are trying to create. </li>
<li>Huge thanks and a shoutout to Phil, our sole graphic artist as well as
modeler and environment artist, who put in an amazing amount of work in order
for us to have both architectural models of the levels ready for work
tomorrow. </li>
<li>I am proud of the story, the concept, the gameplay mechanics and the level
layout that Lisa and I came up with. </li>
<li>And I am totally looking forward what our scripters will come up with
tomorrow in order to make the prototype resemble our design and our ideas as
closely as possible in order to maximize the output within this short time
period.</li>
</ul>
<p>After working on this draft while trying to help our team out wherever
possible and helpful (<em>except actual scripting</em>) and suggesting solutions
it’s now soon midnight. I’m looking forward to tommorow’s final sprint in our
little event. I am aware that it’s not a competition but it will be amazing
to have something to demonstrate. The downside is that it’s going to be
extremely detrimental to the mood of the whole team if we end up having
nothing to show.</p>
<!-- data -->About September's silence2012-10-18T01:08:04+02:002014-02-14T00:47:08+01:00Alexander Skibatag:ghostlyrics.net,2012-10-18:/about-septembers-silence.html<p>You may have noticed a certain lack of posts during September.
I was kind of occupied, spreading my attention between a little preparation
for the next term at university, a lot of media consumption and
working on the statistics part of the <a href="http://tagstore.ist.tugraz.at">tagstore</a> project.</p>
<p>Being part of the tagstore team …</p><p>You may have noticed a certain lack of posts during September.
I was kind of occupied, spreading my attention between a little preparation
for the next term at university, a lot of media consumption and
working on the statistics part of the <a href="http://tagstore.ist.tugraz.at">tagstore</a> project.</p>
<p>Being part of the tagstore team for a short time was a completely new
experience for me. Not only was I to work with real software, someone placed
trust in me to finish something important on time. My contribution would make
a difference. Also it was my first ‘real’ coding job.</p>
<p><em>Disclaimer: I was paid in <a href="http://en.wikipedia.org/wiki/European_Credit_Transfer_and_Accumulation_System">ECTS</a>, not in cold cash.</em><br>
I was interested and although I started work quite late (since I basically had
most of the summer holidays as a timeframe) everything worked out fine from my
perspective. Yes, I admit that we’ve had some repercussions during the
preparation phase for the field test of our software, but we should be able to
make the most of the data we collected.</p>
<p>My contribution consisted of a rework and expansion of the Python script we use
to parse tags and items from the logfiles written by tagstore. I specifically
had to calculate some data and create boxplots for the results.<br>
Furthermore I helped testing the environments using three VMs containing
installations of Windows XP, Windows Vista and Windows 7. I had quite some
fun with those. <em>I’m joking, I had absolutely no fun handling the installs
since my installation DVDs/ISOs were extremely outdated</em>. Updating them took
a little more than a day due to various complications (read: me being sloppy
and not considering the <a href="http://winfuture.de/beliebteste-downloads-7tage.html">Winfuture Update Packages</a> (<em>German site</em>)).</p>
<p>I want to take a few moments to point out how much I hate the Windows Update
approach in which updates are almost never bundled (“combo update”) and depend
on each other. A lot. The result of this is that you will:</p>
<ol>
<li>Click ‘check for updates’</li>
<li>Wait for them to be downloaded</li>
<li>Install</li>
<li>Reboot</li>
<li>Repeat</li>
</ol>
<p>In my case - although I have myself to blame for only having outdated
install media - the XP machine took 9 of those cycles and only started them
after manually installing Service Pack 1-3, otherwise it wouldn’t even
automatically download them. The 7 machine took 8 cycles. Considering how angry
I was when setting up the Vista machine it’s probably for the best that I can’t
remember how many cycles of that dreaded process that took.<br>
<em>I have hopes that Microsoft will be able to work on that using the Windows
Store built into Windows 8.</em></p>
<p>In case you want to see the results of my work
<a href="https://github.com/GhostLyrics/tagstore-logparser">check out the github repository</a>.</p>
<!-- data -->Media Recap: September 20122012-09-30T14:30:38+02:002014-02-14T00:47:09+01:00Alexander Skibatag:ghostlyrics.net,2012-09-30:/media-recap-september-2012.html<h2 id="games">Games</h2>
<ul>
<li><a href="http://guildwars2.com">Guild Wars 2</a><br>
<em>I played a whole lot more Guild Wars 2 than before since I was
procrastinating a little harder.</em></li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<h3 id="hypercritical"><a href="http://5by5.tv/hypercritical">Hypercritical</a></h3>
<ul>
<li>Hypercritical 83 - Dishonorable</li>
<li>Hypercritical 84 - Spared No Expense</li>
<li>Hypercritical 85 - Just Check The Checkbox!</li>
<li>Hypercritical 86 - Naked Robotic Core</li>
<li>Hypercritical 87 - Smarter and Harder</li>
</ul>
<h3 id="build-analyze"><a href="http://5by5.tv/buildanalyze">Build & Analyze …</a></h3><h2 id="games">Games</h2>
<ul>
<li><a href="http://guildwars2.com">Guild Wars 2</a><br>
<em>I played a whole lot more Guild Wars 2 than before since I was
procrastinating a little harder.</em></li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<h3 id="hypercritical"><a href="http://5by5.tv/hypercritical">Hypercritical</a></h3>
<ul>
<li>Hypercritical 83 - Dishonorable</li>
<li>Hypercritical 84 - Spared No Expense</li>
<li>Hypercritical 85 - Just Check The Checkbox!</li>
<li>Hypercritical 86 - Naked Robotic Core</li>
<li>Hypercritical 87 - Smarter and Harder</li>
</ul>
<h3 id="build-analyze"><a href="http://5by5.tv/buildanalyze">Build & Analyze</a></h3>
<ul>
<li>Build & Analyze 76 - Trust Me, I Know C</li>
<li>Build & Analyze 84 - California Knife in Your Back</li>
<li>Build & Analyze 93 - One Donkey Walking In A Circle</li>
<li>Build & Analyze 94 - Everything Would Cut You</li>
<li>Build & Analyze 95 - This Unicorn Doesn’t Support NFC</li>
<li>Build & Analyze 96 - Sandwich With A Slot</li>
</ul>
<h3 id="the-incomparable"><a href="http://5by5.tv/incomparable">The Incomparable</a></h3>
<ul>
<li>The Incomparable 86 - Like “Catcher in the Rye,” Except Crappier<br>
They love the Night Circus. I love the Night Circus. Everyone loves the
Night Circus.</li>
<li>The Incomparable 108 - Journey: Then We Touched, Then We Sang<br>
Had to listen in on this one. I adore Journey. I mean, I bought the game even
though I don’t have a Playstation 3 myself only to be able to play the game
which I’ve tested during GamesCom 2011.</li>
</ul>
<h3 id="the-secret-archives-of-the-vatican-podcast"><a href="http://brokendrumrecords.com/index.php/podcast/">The Secret Archives of the Vatican Podcast</a></h3>
<ul>
<li>Secret Archives of the Vatican 91 - Where Next</li>
<li>Secret Archives of the Vatican 95 - Music for Travelers</li>
</ul>
<h3 id="roundup">Roundup</h3>
<ul>
<li><a href="http://itunes.apple.com/at/podcast/13-unusually-open/id528458508?i=119500682">The Talk Show With John Gruber 13</a> (iTunes Link) - Unusually Open<br>
I listened to this mainly due to Michael Lopp (<a href="https://twitter.com/rands">@rands</a>) being the guest.</li>
<li><a href="http://www.alternativlos.org/25/">Alternativlos 25</a> - Cyberwar (mit Gast: FX)<br>
This German show is done by the wildly known <a href="http://blog.fefe.de">Fefe</a> and during the Cyberwar
episode all three speakers had a lot of fun discussing this rather bleak
topic. I laughed hard several times and couldn’t have known that it was this
amusing. I will definitely check out other episodes of Alternativlos in the
future.</li>
<li><a href="http://irqconflict.net">IRQ Conflict 43</a> - I Walk Through Life With A Hashtag</li>
</ul>
<h2 id="lets-plays">Let’s Plays</h2>
<ul>
<li><a href="http://www.youtube.com/channel/SWMM4y2bbgmkE?feature=context-shows">Assassin’s Creed Revelations - The Lost Archives</a><br>
As <a href="http://ghostlyrics.net/2012/02/29/re-ubisoft-about-the-lost-archive/">expected</a> the DLC was mostly boring, consisting only of those
damned puzzle sections and a whole lot of disturbed, mind-bending
un-fantasies. Also as far as I know it has a 10€ price tag and lasts about
2-3 hours which is kind of ridiculous, given that the gameplay sucks.</li>
<li><a href="http://lparchive.org/Alan-Wake-(by-perochialjoe)/">Alan Wake’s American Nightmare</a><br>
I wasn’t sure what to expect from the more pulp action oriented not-sequel
to Alan Wake since it seemed to have little in common with the original in
terms of atmosphere. Watching the LP was fun, though not as much as a true
sequel would’ve been. This is more of a ‘what happens in between’ thing than
a continuation of Alan Wake’s story.<br>
That being said I think that time loops make for cheap recycling of assets -
a fact that the devs have worked around by making variations and giving the
option to skip certain things by being able to know what will be important.
Also, mind the radio shows. There’s one episode that’s quite scary which gave
me slight chills all the while making me grin in that certain silly way.
Too bad I can’t remember whether I found Barry to be as annoying in the
original game.</li>
<li><a href="http://lparchive.org/Radiant-Historia/">Radiant Historia</a><br>
I had played this game before, it has some great ideas but the amount of
required backtracking and replaying of things due to its time traveling
and time altering concepts gets bothersome quickly. I was grateful to see
a well done let’s play on this and enjoyed it a lot - since I quit playing
about a third into the story. <em>Besides that I used this as a test for
mobile Safari’s offline reading list feature in order
to read on the train. It worked
superbly well.</em></li>
</ul>
<h2 id="videos">Videos</h2>
<ul>
<li><a href="http://www.youtube.com/watch?v=SaOFuW011G8">How to Airbnb</a></li>
<li><a href="http://www.ted.com/talks/kirby_ferguson_embrace_the_remix.html">TED: Everything is a Remix</a></li>
<li><a href="http://www.youtube.com/watch?v=PhDCz0V9FcA">Quiet</a> - the power of introverts in a world that can’t stop talking</li>
<li><a href="http://itunes.apple.com/at/podcast/apple-special-event-september/id470664050?i=121358744">Apple Special Event, September 2012</a> (iTunes Link)<br>
<em>I’ll not be buying an iPhone 5.</em></li>
<li>Youtube<br>
Spent an evening watching those Mass Effect 3 story branches I’ll not see
ingame. <em>Like seeing Ashley surviving Mass Effect 1.</em></li>
</ul>
<h2 id="novels">Novels</h2>
<ul>
<li><a href="http://www.shelfari.com/books/14222501/The-Office-of-Shadow">The Office of Shadow</a> by Matthew Sturges</li>
</ul>
<h2 id="comics-manga">Comics & Manga</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Shaman_King">Shaman King 0</a>, chapters 1-5</li>
<li><a href="http://en.wikipedia.org/wiki/Shaman_King">Shaman King</a>, chapters 1-53</li>
</ul>
<p><strong>Summary: 1 game, 18 podcasts, 3 let’s plays, 1 keynote, 1 novel</strong></p>
<hr>
<h2 id="sidenotes">Sidenotes</h2>
<p>I came across an album by the London Philharmonic Orchestra performing pieces
from video game history. It’s incredibly good. I’ve bought several tracks from
it and I’m eagerly looking forward to the release of the second album on Nov
6th 2012.</p>
<!-- data -->Media Recap: August 20122012-09-02T21:27:12+02:002014-02-14T00:47:12+01:00Alexander Skibatag:ghostlyrics.net,2012-09-02:/media-recap-august-2012.html<!-- Media Recap: August 2012 -->
<h2 id="games">Games</h2>
<ul>
<li><a href="http://www.commandandconquer.com/en/games/bygameid/cnc3">Command & Conquer: Kane’s Wrath</a></li>
<li><a href="http://www.masseffect.com/about/">Mass Effect 3</a>: Multiplayer<br>
This month I took part in <a href="http://blog.bioware.com/2012/08/08/operation-olympus/">Operation OLYMPUS</a>. It might be the
last ME3 operation I participate in due to my Xbox Live subscription running
out and me losing interest in ME3’s Multiplayer which is the only thing
I …</li></ul><!-- Media Recap: August 2012 -->
<h2 id="games">Games</h2>
<ul>
<li><a href="http://www.commandandconquer.com/en/games/bygameid/cnc3">Command & Conquer: Kane’s Wrath</a></li>
<li><a href="http://www.masseffect.com/about/">Mass Effect 3</a>: Multiplayer<br>
This month I took part in <a href="http://blog.bioware.com/2012/08/08/operation-olympus/">Operation OLYMPUS</a>. It might be the
last ME3 operation I participate in due to my Xbox Live subscription running
out and me losing interest in ME3’s Multiplayer which is the only thing
I got the subscription for in the first place.</li>
<li><a href="http://www.masseffect.com/me2/">Mass Effect 2</a><br>
My run of ME2 is finally done and I’ll keep posting to the mailbox as long
as it takes to wrap up the game. I also plan to release this as a free
e-book after the project is finished.</li>
<li><a href="http://fallout.bethsoft.com/eng/games/f3-overview.php">Fallout 3</a><br>
I gave F3 another chance of entertaining me. While I did some exploring and
saved hostages-soon-to-be-dinner-for-mutants it failed to provide more than
an hour of fun again. Maybe I’ll come back another time but I’d say I
probably won’t.</li>
<li><a href="http://www.spellforce.com/?rid=848">Spellforce 1</a><br>
As Fallout failed to entertain me I turned to Spellforce 1 because I feel
that this is one of the games where one is able to sink a great amount of
time into without the feeling of wasting time but on the other hand it’s not
giving you a feeling of progress if you stay on one map. Sadly I somehow
did something bad in the preferences and now it won’t start.</li>
<li><a href="http://www.dungeonsofdredmor.com">Dungeons of Dredmor</a><br>
While visiting a friend I came across DoD another time. I still consider the
game a very good purchase given its low price and the time I’ve happily spent
playing it so far. Recently I upgraded my game with the
<a href="http://store.steampowered.com/app/98821/">You Have To Name The Expansion Pack</a>, the <a href="http://store.steampowered.com/app/98820/">Realms of the Diggle
Gods</a> and the <a href="http://store.steampowered.com/app/98822/">Conquest of the Wizardlands</a> add-ons.</li>
<li><a href="https://www.guildwars2.com/en/">Guild Wars 2</a><br>
After initially lending my GW2 account to a friend I played some time during
the headstart period that pre-purchase customers were able to enjoy. </li>
</ul>
<h2 id="podcasts">Podcasts</h2>
<p>Since IRQ Conflict does not have separate pages for their episodes I’ll point
you to <a href="http://irqconflict.net">their website</a> where you’re able to subscribe via RSS or iTunes.
Or Zune. <em>Not that anyone knows what that actually is.</em></p>
<ul>
<li>IRQ Conflict 39 - 7% Of An Ice Cream Sandwich</li>
<li>IRQ Conflict 40 - Moses Burger</li>
<li>IRQ Conflict 41 - Someone Hire Justin</li>
</ul>
<p>Once I was listening to Build & Analyze I was pointed towards Hypercritical,
another heavily Apple focused podcast on the 5by5 network. I’ve immensely
enjoyed reading John Siracusa’s review of OS X Mountain Lion <a href="/2012/08/01/media-recap-july-2012/">last month</a>
and listening to Hypercritical is equally inspiring and in a way enlightening.</p>
<ul>
<li><a href="http://5by5.tv/buildanalyze/89">Build & Analyze 89 - Giant Mushy Boat</a></li>
<li><a href="http://5by5.tv/buildanalyze/90">Build & Analyze 90 - This Person Isn’t Really Here</a></li>
<li><a href="http://5by5.tv/buildanalyze/91">Build & Analyze 91 - Quadrants</a></li>
<li><a href="http://5by5.tv/buildanalyze/92">Build & Analyze 92 - The Risk Of Broken Promises</a></li>
<li><a href="http://5by5.tv/hypercritical/78">Hypercritical 78 - Sins of the Father</a></li>
<li><a href="http://5by5.tv/hypercritical/79">Hypercritical 79 - Grandpa Uncle Joe (“Kindacritical #2”)</a></li>
<li><a href="http://5by5.tv/hypercritical/80">Hypercritical 80 - Memory Palace</a></li>
<li><a href="http://5by5.tv/hypercritical/81">Hypercritical 81 - Channels of Control</a></li>
<li><a href="http://5by5.tv/hypercritical/82">Hypercritical 82 - The Opposite of Comprehensive</a></li>
</ul>
<p>Other than that I sat down and listened to a special podcast: The Game Informer
Skyrim special which must have been lingering in <code>~/Downloads</code> forever.</p>
<ul>
<li><a href="http://www.gameinformer.com/b/podcasts/archive/2011/02/03/toddhowardse.aspx">Game Informer Special: Skyrim (Feb 2011)</a> </li>
<li><a href="http://itunes.apple.com/at/podcast/12-down-to-the-mac-nerd-guys/id528458508?i=119228813">The Talk Show with John Gruber 13 - Down to the Mac Nerd Guys</a>
(iTunes link)</li>
</ul>
<h2 id="novels">Novels</h2>
<p>I got the chance to work a bit on my backlog which includes several books that
Amazon gave away during their 2012 Easter promotion as well as some other
vampire-themed promotion. I wasn’t entirely happy with the free books all
being German, but read them nevertheless. With free books it’s basically a
hit-or-miss thing, I think. Given that the result was okay, but not great.</p>
<ul>
<li><a href="http://www.amazon.de/Grablichter-Krimi-Ein-Pia-Korittki-Fall-ebook/dp/B004R9QUPO">Eva Almstädt: Grablichter, ein Pia-Korittki Fall</a><br>
A murder story in which fascinatingly nothing was thrilling. I’m not sure
what the argument to read this is given that the most interesting part of
those stories are either the ‘detecting’ or the ‘being close on their tracks’
parts. Neither of those managed to drive away the boredom of the rural
location the novel took place in. - <strong>MISS</strong></li>
<li><a href="http://www.amazon.de/Zeitbombe-Lenz-achter-Fall-ebook/dp/B005EKHZWC">Matthias P. Gibert: Zeitbombe - Lenz’ Achter Fall</a><br>
The second murder story. This one was clearly better, although that might be
my bias towards urban settings for that kind of story. My favorite part is
the dialog which is often written in a very sarcastic way - I truly enjoyed
that even when the topics were serious. - <strong>HIT</strong></li>
<li><a href="http://www.amazon.de/Todeserklärung-Knobels-neuer-Fall-ebook/dp/B004UFH80Q">Klaus Erfmeyer: Todeserklärung</a><br>
This murder story was a bit different than expected since it was shown from
a lawyer’s point of view instead of an investigator. I was amazed that even
the personal touches in the story didn’t bore me. - <strong>HIT</strong></li>
<li><a href="http://www.amazon.de/Cedars-Hollow-ebook/dp/B0089XD6GU">Charlotte Schaefer: Cedars Hollow</a><br>
Ugh… I should’ve looked at the cover more closely. The heart might’ve
signaled what I didn’t realize when obtaining this book: It was a kitschy
girl-meets-vampire romance; I had to force myself to keep on reading through
the more boring sections and found myself rolling eyes on so many occasions
that my optometrist might’ve worried. - <strong>MISS</strong><br>
Also I’m not sure whether my mind was a little absent or if this book’s
formatting is really messed up and not all paragraphs have a font of equal
font size. <em>Which. was. distracting. as. fuck.</em></li>
</ul>
<p>When I was not particularly interested or engaged in the content of one of the
novels I tended to scribble in the Kindle notes section. Most of those notes
were predictions of how I thought the story might proceed according the the
things I’ve read so far. I tried to figure out what was misdirection and what
was indeed <a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/LampshadeHanging" title="WARNING: TV Tropes link, you might lose several hours of productivity">lampshading</a>.</p>
<h2 id="videos">Videos</h2>
<ul>
<li><a href="http://www.youtube.com/watch?v=Lk0hSeQ5s_k">Merlin Mann - Scared Shitless (Webstock 2011)</a><br>
A largely inspirational talk by Merlin Mann who also has a show on 5by5.
He explains how it’s important to overcome one’s fear in all the daily
situations.</li>
</ul>
<p>Summary: <strong>7 games, 4 novels, 1 presentation, 14 podcasts</strong></p>
<!-- data -->RE: Molleindustria about Mountain Lion's Gatekeeper2012-08-26T19:02:16+02:002014-02-14T00:47:14+01:00Alexander Skibatag:ghostlyrics.net,2012-08-26:/re-molleindustria-about-mountain-lions-gatekeeper.html<p><a href="http://www.molleindustria.org/blog/gatekeeper-and-the-rise-of-the-total-apple-consumer/">Molleindustria about Gatekeeper and the rise of the Total Apple
Consumer:</a></p>
<blockquote>
<p>The user contacts me asking for an explanation I can’t quite provide.
The same file (a downloadable version of Phone Story) works perfectly on my
machine, also a Mac. It turns out the “file damaged” message is produced …</p></blockquote><p><a href="http://www.molleindustria.org/blog/gatekeeper-and-the-rise-of-the-total-apple-consumer/">Molleindustria about Gatekeeper and the rise of the Total Apple
Consumer:</a></p>
<blockquote>
<p>The user contacts me asking for an explanation I can’t quite provide.
The same file (a downloadable version of Phone Story) works perfectly on my
machine, also a Mac. It turns out the “file damaged” message is produced by
Gatekeeper, an anti-malware feature of the new OSX Mountain Lion, which I
haven’t bothered to install yet. Gatekeeper, by default, blocks every
application that is not coming from the official Mac App store or from
certified Apple developers.</p>
</blockquote>
<p>Yes and no. I’ve had that message too but contrary to what the article makes
you believe this is <strong>not</strong> the standard dialog you get when Gatekeeper finds
something that doesn’t fit its current setting.<br>
<del>Also its overstating the ‘certified Apple developer’ thing as this is
really as easy as getting a free Apple developer account as far as
I know.</del> Not quite, actually, you’re required to have a possibly
<a href="http://www.digicert.com/code-signing/apple-certificates.htm">expensive software certificate</a>. I admit that’s quite a hurdle.</p>
<blockquote>
<p>The risks of relying on one all-encompassing system (such as having your
account hijacked) are negligible in comparison to a perfectly efficient,
streamlined digital life.</p>
</blockquote>
<p>This is a gross misrepresentation of what happened in Mat Honan’s case in
which issues in customer service on both Amazon’s and Apple’s sides as well as
e-mail accounts chained together led to this spectacular hacking story.
To get a complete view you should really read <a href="http://www.wired.com/gadgetlab/2012/08/apple-amazon-mat-honan-hacking/">Honan’s piece for Wired</a>
on that.</p>
<blockquote>
<p>In the process of reshaping our relation with computing machines, Apple also
had to exert control on computing language. For example: the concept of
“synching devices” replaced the more intuitive and technically precise
expression “copying files”. This brilliant semiotic move inscribes the notion
of artificial scarcity into our daily interactions.<br>
Synching obscures the very fact that you are copying files around. The idea
that digital information can be freely duplicated and shared is dangerous – a
gateway to piracy.</p>
</blockquote>
<p>That is <strong>not</strong> the case. Apple is trying to simplify usage of computation
devices so that things a great amount of people have trouble comprehending -
for example the file system hierarchy and where stuff is supposed to go - don’t
have to be shown to the user anymore in order for them to get their work done.
It’s not obscuring things, it’s simplifying unneeded complexity for the
consumer. It’s making sure your data is on each of your devices and you not
having to worry where your stuff is and how to make sure you don’t have
duplicates and which folder to put data in order for applications to
recognize them.</p>
<blockquote>
<p>Referring to applications as “apps” is not just a branding technique but a
necessary linguistic reduction to conceptualize a lesser type of application.
A little piece of software that sits in its little sandbox and doesn’t try to
compete with the overarching platform.</p>
</blockquote>
<p>I’d argue it’s more a part of the ‘one thing well’ mentality.</p>
<blockquote>
<p>We will reject Apps for any content or behavior that we believe is over the
line. What line, you ask? Well, as a Supreme Court Justice once said, “I’ll
know it when I see it”. And we think that you will also know it when you
cross it.</p>
</blockquote>
<p>This is <strong>of course</strong> bullshit and it’s perfectly fine to be pointed out.
Such overarchingly broad and unnecessarily subjective terms are ridiculous
and one of the worst things about Apple’s policies.</p>
<blockquote>
<p>Designating all the applications that are not Apple-approved as “damaged
files” to be trashed is an even bolder linguistic intervention.</p>
</blockquote>
<p>Again, this is simply not true. I’m not entirely sure when the pictured dialog
pops up but have included the standard dialog for reference.</p>
<p><img alt="The standard Gatekeeper message" src="/images/gatekeeper/dialog-box.png"></p>
<blockquote>
<p>If you sell through the Mac App store, paying a yearly fee and 30% of the
revenues for this privilege, you are on the list.</p>
</blockquote>
<p>Or you simply registered your free developer ID. <em>It’s that simple.</em> Also
you’re not completely blocked. Your application may still run as long as you
simply tell the customer to right-click and select ‘open’. Before you turn
on your <em>flame</em>-thrower be assured that this has to be done only once per app
<em>and</em> only for files that have not been on this computer previously <em>and</em> are
downloaded from the internet.</p>
<blockquote>
<p>A complementary approach could involve educating users to recognize
suspicious files – which unfortunately it’s at odds with Apple’s tendency to
strategically obfuscate the internal structure of their systems.</p>
</blockquote>
<p>I’d argue that even existing users often have trouble handling files and
dangers. I know for a fact that there is an insane amount of people out there
working with computers daily and having absolutely no clue about what dangers
there are. Is it better to try to educate them about details they neither need
for their jobs nor - in many cases - want to know or to try to implement
system-enforced policies that prevent abuse? I admit I’m conflicted about that.</p>
<blockquote>
<p>The message to developers is clear: if you make software for Mac you’d better
look into this whole Mac Store thing, or you may suddenly be cut off.</p>
</blockquote>
<p>I suggest you look into Marco Arment’s article about the <a href="http://www.marco.org/2012/07/26/mac-app-store-future">current state of the
App Store</a>. It’s rather pessimistic and this man is an Apple advocate as
much as a reasonable person can be.</p>
<blockquote>
<p>But many computer users can’t even tell the difference between a browser and
a search engine. They certainly aren’t going to mess with their System
Preferences to make their computers “less safe”.</p>
</blockquote>
<p>That’s correct. It’s <strong>your</strong> job as developer to code-sign your application.
Alternatively you can still provide them with the information about
right-clicking. But honestly, adapting to the platform you’re trying to be
competetive on is probably a good idea.</p>
<blockquote>
<p>The challenge was to make these machines available to everybody and promote a
new kind of literacy.</p>
</blockquote>
<p>I guess that’s not happening with the popularity of iPads, e-Readers and other
things that enable people to read whereever they are. Point taken.</p>
<!-- data -->Twitter's crusade against integration into other services2012-08-23T09:30:55+02:002014-02-14T00:47:16+01:00Alexander Skibatag:ghostlyrics.net,2012-08-23:/twitters-crusade-against-integration-into-other-services.html<p>Twitter is ramping up its crusade against integration of its services for
purposes not solely relying on displaying tweets, namely such ideas as
using your Twitter account to find friends on other platforms.</p>
<p>The <a href="http://thenextweb.com/insider/2012/07/26/unable-to-find-friends-on-instagram-twitter-just-revoked-the-apps-api-access/">first service to have its access revoked was Instagram</a>, although
one could have argued that this …</p><p>Twitter is ramping up its crusade against integration of its services for
purposes not solely relying on displaying tweets, namely such ideas as
using your Twitter account to find friends on other platforms.</p>
<p>The <a href="http://thenextweb.com/insider/2012/07/26/unable-to-find-friends-on-instagram-twitter-just-revoked-the-apps-api-access/">first service to have its access revoked was Instagram</a>, although
one could have argued that this decision was made to retaliate for Instagram’s
acquisition by Facebook. It’s not that easy to put <a href="http://thenextweb.com/twitter/2012/08/22/tumblr-becomes-next-property-instagram-twitter-friend-finding-privileges-revoked/">the revokation of
Tumblr</a>‘s API access for finding friends into perspective other than
Twitter not being interested in having other companies drawing value <em>from</em>
their service. Twitter is only interested in having users and services <em>adding</em>
content to their platform.</p>
<p>However, I think that in combination with the <a href="https://join.app.net">recent success of App.net</a>
there’ll be a significant backlash from developers. Screwing the guys who build
the tech to access and/or improve your content is not the best idea. They might
simply focus on another service and that’s probably what’s going to happen as
there’s already considerable traction amongst tech early adopters to the pay-for-social-network model that App.net wants to deliver.</p>
<p>The trend towards driving off developers is going on however, since especially
the case of Tumblr strikes one as particularly unthankful of Twitter given that
Tumblr <a href="http://www.marco.org/2012/08/22/twitter-cuts-off-tumblr-friend-finding">was amongst the major partners to implement Twitter cards</a>.
Instapaper creator Marco Arment <a href="https://twitter.com/marcoarment/status/238446880995041280">announced a probable removal of all Twitter
features from Instapaper</a> in case his API access is revoked (The usage of iOS’s systemwide Twitter integration <a href="https://twitter.com/gregeh/status/238448425987895296">is still in consideration</a>).</p>
<p>If this will lead towards an ecosystem where the first party Twitter app and
the website are the only way to get information <em>from</em> Twitter will be seen.
As much as this prediction sounds like a dystopian future, it only takes one
look <a href="https://dev.twitter.com/blog/changes-coming-to-twitter-api">at the 1.1 changes for the Twitter API</a> to understand Twitter wants
traditional third party clients to go away; the sooner the better. They even
said so themselves, <a href="http://techcrunch.com/2011/03/11/twitter-ecosystem-guidelines/">back in 2011</a>.</p>
<!-- data -->Lost Horizon2012-08-12T18:16:58+02:002014-02-14T00:47:20+01:00Alexander Skibatag:ghostlyrics.net,2012-08-12:/lost-horizon.html<!-- Lost Horizon -->
<p>Lost Horizon is an adventure game published by Deep Silver which I came
across when looking for new information on the upcoming <a href="http://secretfiles.deepsilver.com/en/index.php">Secret Files 3</a>.
Since I loved both <a href="http://en.wikipedia.org/wiki/Secret_Files:_Tunguska">Secret Files: Tunguska</a> and
<a href="http://en.wikipedia.org/wiki/Secret_Files_2:_Puritas_Cordis">Secret Files: Puritas Cordis</a> for their quirky humor which happened to
fit my taste perfectly I was …</p><!-- Lost Horizon -->
<p>Lost Horizon is an adventure game published by Deep Silver which I came
across when looking for new information on the upcoming <a href="http://secretfiles.deepsilver.com/en/index.php">Secret Files 3</a>.
Since I loved both <a href="http://en.wikipedia.org/wiki/Secret_Files:_Tunguska">Secret Files: Tunguska</a> and
<a href="http://en.wikipedia.org/wiki/Secret_Files_2:_Puritas_Cordis">Secret Files: Puritas Cordis</a> for their quirky humor which happened to
fit my taste perfectly I was interested the moment I saw that
<a href="http://en.wikipedia.org/wiki/Lost_Horizon_(video_hmgame)">Lost Horizon</a> was going to be released on STEAM. I added it to my wish
list and almost immediately forgot it. It wasn’t until I received the game as
a gift that I started thinking about it again. In an attempt to summarize my
extensive notes I present you: Lost Horizon.</p>
<h2 id="the-experiences-i-made">The experiences I made</h2>
<p>During the prologue the character I controlled teleported himself away to an
unknown destination. This is as essential to the game as it gets as well as a
first impression of what to expect from Lost Horizon. There will be mystery.
Sometimes it will be hard work to keep up your suspension of disbelief.
<em>Also, I was wondering how I ended up playing a game that has Nazis in it,
since I usually balk at each game containing WW II references.</em></p>
<p><img alt="Berlin during the Olympic games" src="images/lost-horizon/berlin.jpg"></p>
<p>In the beginning the game tries to guilt-trip you into saving lost soldiers.
You have no idea why you should care about them until it says that you are
also saving a friend of Fenton Paddock - the male lead. It seems like he is
dragging around a great amount of baggage from ‘earlier times’; too bad this
influences Fenton’s choices so little during the whole term of the game.</p>
<p>The manipulation of the Olympic Games later in the game is a great idea,
because many people know about the Olympic Games held during that era in
Berlin and due to a funny coincidence I happen to write this while the 2012
Olympic Games are in progress.</p>
<p>The scene in Berlin has great flow due to the lead first succeeding and
then telling another character what happened and having the player figure out
the details of what happened in the interim.</p>
<p>In the end it’s very obvious that the female lead is alive since:</p>
<ul>
<li>The fortune-teller in Marrakesh hints at this </li>
<li>the Nazis had no leverage against Fenton who is the only one who can open
the portal after having used the Eye of the Dragon. <sup id="fnref:rp"><a class="footnote-ref" href="#fn:rp">3</a></sup> </li>
</ul>
<p>Which is one of the reasons that the governor’s betrayal works. The other is
that it will be seen as very romantic by a lot of players while the rest will
either not care or receive condemning the world in favor of a single
individual - his son - pathetic. I’ll leave my opinion on this to your
speculation.</p>
<p>There’s one thing in particular that strikes me as completely horrible in terms
of respect towards the player: While the player had to endure a complete dump
of science earlier which was up to date in the time period the game played now
he is told to just ignore all logical and illogical explanation. As an
illusion of Richard, who is trapped in the past, appears in the present Fenton
- as well as the player - is asked not to think about how this is possible,
since ‘it’s a magical place’. Ah, okay, so you want to tell me that
<a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/AWizardDidIt" title="WARNING: TV Tropes link, you might lose several hours">a wizard did it</a>. <em>Fine.</em></p>
<p>Overall the game shows a certain disrespect towards the player since Richard
and Fenton have this lengthy conversation spanning several minutes in which
the player is supposed to not do anything besides listening. After that Fenton
feels the need for a monologue to sum up the things that we were just told in
case the player tuned out during the conversation. <em>Hint: He is not going to
like the monologue either if he already drifted off during the conversation.</em></p>
<p>I have no idea what made the writers decide that Fenton has to get the girl in
the end. They mostly quarrel and argue through most of the game and even
though, yes, they experience a lot together and managed to achieve a lot, they
are still not lovers. Not from any reasonable perspective. This feels like it’s
totally tacked on to the main story and feels like an afterthought. <strong>It’s
embarrassingly bad.</strong></p>
<h2 id="the-thoughts-i-had">The thoughts I had</h2>
<p>The first conversation puzzle was pure guesswork based on no reason
whatsoever. One could argue that being aggressive is rewarded, but I’m not
sure about that. To make up for that the player’s choice in the next dialog
doesn’t matter at all.</p>
<p>Sometimes, like on the airfield, it’s not properly established how big the
scene really is. What pieces of the set one may run around in and what one is
permitted to explore. The airfield stands out here because it’s not until I was
specifically told to go the Fenton’s office that I realized the airfield scene
being larger than what I had expected.</p>
<p>On some other occasions there are many clickable exits from scenes which are
permanently blocked by the plot. E.g.: You are <strong>never</strong> going to see the
train station in Marrakesh. This only serves to confuse the player. If it
doesn’t add to the game in some meaningful way it shouldn’t be there. <em>I’m
willing to make exceptions to that rule for Easter Eggs.</em></p>
<p><img alt="The bazaar in Marrakesh" src="images/lost-horizon/bazaar.jpg"></p>
<p>There are two puzzles for which you may opt-in to the higher difficulty. I did
that on both. One was a real challenge, the other one I solved in a few minutes
by guesswork. I don’t think that’s supposed to work out like it did for me.</p>
<h2 id="the-things-i-saw">The things I saw</h2>
<p>Judging by the mouse icon Lost Horizon and given that it’s from the same
developers as Secret Files, it uses the same engine (or an upgraded version of
that engine). The characters, however are not nice to look at, I’d even
go as far as saying they were ugly even in their time. Oh, wait the game
<a href="http://www.metacritic.com/game/pc/lost-horizon">was released in 2010</a>. In that case: the character models are horribly
outdated and a pain to look at.</p>
<p>The <a href="http://en.wikipedia.org/wiki/Full_motion_video">FMV</a>s are an especially bad case. Leaving
them out would’ve improved the game by lengths. The worst example of this is
the ‘dragon sequence’ at the end of the game: It’s not only sub-par compared
to modern standards, it’s repeated three times after the initial view (though
mirrored for two of them). It could have been more impressive if it was
used one time and mirrored one time or preferably extended a few scenes and
not reused at all. The cinematic experience would be greater and most
importantly the player would not be exposed to what might be budget
constraints or points of low priority in the development process.</p>
<p>On the positive side I adore the beautiful animations of the map when
traveling between the game’s many locations all over the world.</p>
<p><img alt="Castle Wewelsburg" src="images/lost-horizon/castle.jpg"></p>
<h2 id="the-sounds-i-heard">The sounds I heard</h2>
<p>I admit not paying much attention to the music. But I’m fairly
sure the ‘sad theme’ is reused from the Secret Files franchise and I’m not
okay with that considering Lost Horizon isn’t part of said franchise.</p>
<p>I think it’s a nice and very thoughtful touch that the engine sound is louder
or quieter depending on the viewpoint from which the conversation on the plane
is currently shown. I wish every game was as detail-oriented in its sound
design.</p>
<h2 id="the-places-i-visited">The places I visited</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Hong_Kong">Hong Kong</a></li>
<li>Khembalung valley, TIBET (a fictional place <sup id="fnref:Tibet"><a class="footnote-ref" href="#fn:Tibet">2</a></sup>)</li>
<li><a href="http://en.wikipedia.org/wiki/Marrakesh">Marrakesh</a>, MOROCCO</li>
<li><a href="http://en.wikipedia.org/wiki/Berlin">Berlin</a>, GERMANY</li>
<li><a href="http://en.wikipedia.org/wiki/Wewelsburg">Castle of Wewelsburg</a>, GERMANY</li>
<li>a little village, INDIA</li>
<li><a href="http://en.wikipedia.org/wiki/Shambhala">Shambhala</a> (a mythical kingdom in Buddhism)</li>
</ul>
<p><img alt="The map from India" src="images/lost-horizon/jungle-map.jpg"></p>
<h2 id="the-feelings-i-had">The feelings I had</h2>
<h3 id="fenton-paddock-is-an-incompetent-idiot">Fenton Paddock is an incompetent idiot.</h3>
<p>He demonstrates several suicidal tendencies and is generally not really
sensible. I have several examples of stupid behavior for your amusement:<br>
After nearly being murdered by Triads he <strong>goes directly to his home</strong> instead
of hiding. He <strong>needs a sheet of paper to remember</strong> his safe’s combination,
<strong>‘12345’</strong> according to the item’s thumbnail. In Marrakesh he <strong>sells a
valuable ring made with gold for an incredible small amount of money.</strong> While
entering the enemies’ fortress he <strong>takes item the enemy wants with thim</strong>
without any indication that it might be needed there. He claims to be a former
scout in the army but <strong>doesn’t realize that using binoculars in enemy
territory is dangerous</strong> due to the reflection of the lenses which might give
away their location.</p>
<p><em>Besides, he insults a cat and that makes me dislike him. A lot.</em></p>
<p>As if to counter Fenton’s inadequacy the female lead is somehow either a sage
or miraculously gifted when it comes to deciphering ancient texts. She is the
only one able to read the secret code language she and her father came up with
and instantly knows how to translate ancient stone tablets just using some
notes her father had thrown together.</p>
<p><img alt="Tibet" src="images/lost-horizon/tibet.jpg"></p>
<h3 id="this-game-is-about-peaceful-solutions-i-am-not">This game is about peaceful solutions. I am not.</h3>
<p>I wasn’t very happy during the sequence in which you’re helping a little
kid who is holding Fenton’s wallet hostage. In my head I threw the kid into
the water <sup id="fnref:port"><a class="footnote-ref" href="#fn:port">1</a></sup> and walked away with the wallet. Not one moment was I
inclined to help someone extorting my cooperation.</p>
<p>So the Nazi who has been torturing an allied soldier is unconscious after
being knocked down by the explosion. He’s still alive. Fortunately we have this
saw blade to change that. Unfortunately, that’s not how Lost Horizon wants to
handle this.</p>
<p>Two planks and white powder. What could that be? Drugs? <strong>Phosphorus?</strong></p>
<p>Frustratingly it’s not possible to feed the goat to the <a href="http://www.youtube.com/watch?v=PLolag3YSYU">man-eater</a>, whoops,
pardon the pun. Wrong man-eater, I meant the tiger in India. Neither is it
possible to feed the goat to the shark. Nor the tiger to the shark. After
being disappointed the first time I shouldn’t have gotten my hopes up.</p>
<p>I also quite liked the train of thought where we waited for the Nazis to tap
into the stream and kill each other due to its effects, but unfortunately
that’s not an option for the game.</p>
<h3 id="every-adventure-needs-macguyverism">Every adventure needs MacGuyverism.</h3>
<p>Lost Horizon features some of my favorite homemade weaponry, like DIY Rocket
Launchers and DIY AntiAir Pumpkin Bombs; which are awesome. Also, we get duct
tape, so you know from the start that everything is going to be alright.
It’s common knowledge you can fix everything with duct tape.</p>
<p><img alt="Rockets fired from the DIY launcher" src="images/lost-horizon/diy-rockets.jpg"></p>
<h3 id="theres-some-research-in-this">There’s some research in this.</h3>
<p>It’s fascinating how you come across certain historical persons again and
again while playing video games. Assassin’s Creed and Lost Horizon feature
Piri Reis. Assassin’s Creed and Secret Files 3 feature Leonardo da Vinci.</p>
<p>So it seems <a href="http://en.wikipedia.org/wiki/Morphogenetic_field" title="apparently not pseudo science">morphogenetic fields</a> are not just pseudo-science.
I’m afraid that didn’t stop me from tuning out during Fenton’s lengthy
monologues when finding the Thule society’s notes on that subject.</p>
<!-- data -->
<div class="footnote">
<hr>
<ol>
<li id="fn:port">
<p>The kid waits for your help at Hong Kong’s port. <a class="footnote-backref" href="#fnref:port" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:Tibet">
<p>No, Tibet is not fictional. Khembalung is. Stop trying to be
funny. <a class="footnote-backref" href="#fnref:Tibet" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:rp">
<p>In MMO terms, the Eye of the Dragon is bound on pickup. Speaking of
<a href="http://www.pickup.de" title="Website requires Flash plugin">pickup</a>, I’d like to have one right now. <a class="footnote-backref" href="#fnref:rp" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>Media Recap: July 20122012-08-01T08:22:38+02:002014-02-14T00:47:25+01:00Alexander Skibatag:ghostlyrics.net,2012-08-01:/media-recap-july-2012.html<!-- Media Recap: July 2012 -->
<ul>
<li>
<p>Let’s Play: <a href="http://lparchive.org/Tales-of-Symphonia/">Tales of Symphonia</a><br>
I don’t think I would play this. It’s too colorful and generally almost
distastefully cheerful. I have the impression that due to that it can’t
convey it’s darker sequences to you successfully since the lack of a certain
sombre attitude …</p></li></ul><!-- Media Recap: July 2012 -->
<ul>
<li>
<p>Let’s Play: <a href="http://lparchive.org/Tales-of-Symphonia/">Tales of Symphonia</a><br>
I don’t think I would play this. It’s too colorful and generally almost
distastefully cheerful. I have the impression that due to that it can’t
convey it’s darker sequences to you successfully since the lack of a certain
sombre attitude of the game as a whole fails to bring about a sense of danger
and sadness.</p>
</li>
<li>
<p>Let’s Play: <a href="http://lparchive.org/Final-Fantasy-VI-Advance-(by-vilkacis)/">Final Fantasy VI Advance</a><br>
I’ve put up checking out VI for too long and now that I’ve seen it, I’m just
not convinced. That might be nostalgia induced bias since I’m quite fond of
VIII and IX.</p>
</li>
<li>
<p>Podcast: <a href="http://5by5.tv/buildanalyze/43">Build & Analyze 43 Mythical Metro</a><br>
I don’t have anything to say about B&A. They’re great and I listen to them
while cleaning or doing other chores.</p>
</li>
<li>Podcast: <a href="http://5by5.tv/buildanalyze/85">Build & Analyze 85 Rules of the Road</a></li>
<li>Podcast: <a href="http://5by5.tv/buildanalyze/86">Build & Analyze 86 Folding A Piece of Cake</a></li>
<li>Podcast: <a href="http://5by5.tv/buildanalyze/87">Build & Analyze 87 Close the Windows and Hope for the Best</a></li>
<li>Podcast: <a href="http://5by5.tv/buildanalyze/88">Build & Analyze 88 Things are Pretty Here</a></li>
<li>Game: <a href="http://en.wikipedia.org/wiki/Command_%26_Conquer_3:_Tiberium_Wars">Command & Conquer 3: Tiberium Wars</a><br>
On the topic of nostalgia induced bias: After I had previously only had a
pirated version of C&C 3, which I absolutely loved due to both gameplay and
story, I bought this and it’s expansion during a STEAM sale.</li>
<li>Game: <a href="http://en.wikipedia.org/wiki/Command_%26_Conquer_3:_Kane%27s_Wrath">Command & Conquer 3: Kane’s Wrath</a><br>
Had fun checking out new units. The <a href="http://cnc.wikia.com/wiki/Eradicator_Hexapod">Eradicator Hexapod</a> is awesome.</li>
<li>Game: <a href="http://en.wikipedia.org/wiki/Fallout_3">Fallout 3</a><br>
Another spur of the moment purchase at a STEAM sale. I only played for a
brief period of time. I think the S.T.A.L.K.E.R. franchise does a lot better
in terms of atmosphere.</li>
<li>Game: <a href="http://en.wikipedia.org/wiki/Guild_Wars_2">Guild Wars 2</a> Beta<br>
I already <a href="http://ghostlyrics.net/2012/07/23/from-the-third-guild-wars-2-beta-weekend/">wrote about that</a>.</li>
<li>Game: <a href="http://en.wikipedia.org/wiki/Journey_(2012_video_game)">Journey</a><br>
Journey for PS3 is amazing and I plan to complete the journey a second time
before I write a post about the awesomeness of this great game.</li>
<li>Game: <a href="http://en.wikipedia.org/wiki/Lost_Horizon_(video_game)">Lost Horizon</a><br>
A point and click adventure set before the second world war, with the Nazis
already strong. I plan to release a separate article about this game.</li>
<li>
<p>Game: <a href="http://en.wikipedia.org/wiki/Mass_Effect_2">Mass Effect 2</a><br>
Played some more, took more notes, will post to mailbox again shortly.</p>
</li>
<li>
<p>Game: <a href="http://en.wikipedia.org/wiki/Mass_Effect_3">Mass Effect 3</a><br>
I participated in <a href="http://blog.bioware.com/2012/07/31/operation-overwatch-success/">Operation OVERWATCH</a>, otherwise not much to say
aside from the fact that I had my first successful extraction on the ‘Gold’
difficulty setting.</p>
</li>
<li>
<p>Text: <a href="http://forum.egosoft.com/viewtopic.php?t=270073">Freak Army</a><br>
A somewhat controversial, well written and deeply troubling though sometimes
genuinely funny text about the abyss in men that war is able to bring out.
Though I can’t say I fully enjoyed reading this, the sections with the
Eurofighter’s board computer made me laugh every time and reminded me of my
many, many failures when trying to use <a href="http://www.apple.com/iphone/features/siri.html">Siri</a>. (Text in GERMAN)</p>
</li>
<li>
<p>Text: John Siracusa’s <a href="http://arstechnica.com/apple/2012/07/os-x-10-8/">review of OS X Mountain Lion</a><br>
Siracusa’s review is extremely thorough and contains a lot of different
information, from subtle differences in the GUI to changes for developers.
It’s worth a read if you’re considering upgrading or just want to know
what has changed. It’s rather hefty at 25k+ words but in my opinion his
writing style is worth every minute of you reading the article.</p>
</li>
<li>
<p>several texts which were short versions to get a taste of the writing</p>
</li>
</ul>
<p>Summary: <strong>2 let’s plays, 5 podcasts, 8 games, 2 longform texts;</strong></p>
<!-- data -->From the third Guild Wars 2 Beta weekend2012-07-23T23:37:24+02:002014-02-16T21:13:44+01:00Alexander Skibatag:ghostlyrics.net,2012-07-23:/from-the-third-guild-wars-2-beta-weekend.html<p>Having pre-purchased Guild Wars 2 some time in the last months (and having playing during the second beta weekend) I was eager to dive headfirst into the new content that the third beta weekend provided, namely the asura <sup id="fnref:as"><a class="footnote-ref" href="#fn:as">1</a></sup> and the sylvari <sup id="fnref:sy"><a class="footnote-ref" href="#fn:sy">2</a></sup>.</p>
<p>As I have been waiting to play …</p><p>Having pre-purchased Guild Wars 2 some time in the last months (and having playing during the second beta weekend) I was eager to dive headfirst into the new content that the third beta weekend provided, namely the asura <sup id="fnref:as"><a class="footnote-ref" href="#fn:as">1</a></sup> and the sylvari <sup id="fnref:sy"><a class="footnote-ref" href="#fn:sy">2</a></sup>.</p>
<p>As I have been waiting to play the sylvari for a long time - read: since they’ve been announced - I spent more than two hours for character creation, all the while documenting everything for Anja, who wanted to see the new race but hadn’t purchased the game.</p>
<p>My biggest surprise was the fact that sylvari glow in the dark. You may choose a color in which parts of their body slowly pulse during night, which I found to be quite interesting, although I wasn’t entirely sure which color to pick, since I liked non of them enough. I mean, I made my female sylvari thief <sup id="fnref:th"><a class="footnote-ref" href="#fn:th">4</a></sup> gray this time. Maybe I’ll stick to a faint green another time, but I’m rambling.
<img alt="My sylvari thief" src="/images/guild-wars-2-beta/gw2-SylvariMine.jpg"></p>
<p>I played for some hours, doing various quests and had a lot of fun - which is important since playing a game should not feel like you’re doing work. I admired the beauty of the sylvari’s houses and although I forgot to check out their capital, the Grove, I found their relation to nature and the artful surroundings amazing. If you want to convince people how beautiful Guild Wars 2 can look, show them sylvari blossom houses. Or show them the stunning hive of busy asura that is Rata Sum, their capital.
<img alt="Sylvari-style houses" src="/images/guild-wars-2-beta/gw2-SylvariHouses.jpg"></p>
<p>Which leads me to the second part of my experience this weekend: I also tested the asura, this time a male asuran guardian <sup id="fnref:gu"><a class="footnote-ref" href="#fn:gu">3</a></sup> and during that time I played together with Ron to get an impression of the different personal stories, since we picked different answers to the personality questions asked during character creation. It was nice seeing that seemingly little questions decide which kind of personal story you get to experience when playing. It also gave me a chance to test something different than the thief class, although I’ve pretty much already decided that the character I’ll be playing with the most will be a female sylvari thief. My asuran guardian however was a whole different story in terms of gameplay.
<img alt="My asuran guardian" src="/images/guild-wars-2-beta/gw2-AsuraMine.jpg"></p>
<p>After some questing with Ron, we decided to see other things however and ended up in Rata Sum. During a lot of exploring there we also discovered that you can fall down rather far inside the city and had a little contest who can rack up the most damage from falling. My top damage was around 41.400 but unfortunately Ron bested me by achieving 43k. I blame that on my increased vitality as a guardian and him being a squishy mesmer <sup id="fnref:me"><a class="footnote-ref" href="#fn:me">5</a></sup>.
<img alt="The falling contest" src="/images/guild-wars-2-beta/gw2-FallingContest.jpg"></p>
<p>I also headed to Lion’s Arch for a while where I was amazed by the ship and pirate based architecture and the giant fountain which has a great history of collaboration amongst the different races of Tyria (speak to the lady in blue next to the fountain for its story).
<img alt="Lion's Arch's fountain" src="/images/guild-wars-2-beta/gw2-LionsArchFountain.jpg"></p>
<p>All in all I really enjoyed playing the last beta weekend before Guild Wars 2 is released in August and am looking forward to playing the full version for more than a day or two when it’s complete.</p>
<p>As a little addendum I’d like to thank the developers for the awesome feature that the “deposit all collectibles” button in the inventory is. It instantly sends all raw materials for crafting as well as obtained minipets to the bank in order to gain new space in your inventory after some looting while exploring the gorgeous world the dedicated people at Arenanet built.</p>
<p><em>Thank you.</em></p>
<p>I’ll end this post with a heartwarming group shot containing my and Ron’s character and two cute little asuran kids on the port of Rata Sum.
<img alt="The Group shot" src="/images/guild-wars-2-beta/gw2-AsuraGroup.jpg"></p>
<!-- data -->
<div class="footnote">
<hr>
<ol>
<li id="fn:as">
<p>Asura, a race of tiny, highly intelligent and skilled people who’s most famous trait is their <del>arrogance</del> brilliance. <a class="footnote-backref" href="#fnref:as" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:sy">
<p>Sylvari, a race of wooden creatures and plants, their leaves and branches resembling hair, faces and extremities. They are curious people and their race only entered the realm of Tyria - Guild Wars 2’s world - during the last 25 years. <a class="footnote-backref" href="#fnref:sy" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:gu">
<p>Guardian, a class based on auras and all kinds of holy attacks. Many of their skills have boni which benefit groups. <a class="footnote-backref" href="#fnref:gu" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:th">
<p>Thief, a class based on traps, deceit, poison and agility as well as stealth. <a class="footnote-backref" href="#fnref:th" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
<li id="fn:me">
<p>Mesmer, a class based on illusions aaaand… well I don’t know, I don’t like them and couldn’t get into the feeling when testing them, so feel free to <a href="http://wiki.guildwars2.com/wiki/Mesmer">look them up yourself</a>. <a class="footnote-backref" href="#fnref:me" title="Jump back to footnote 5 in the text">↩</a></p>
</li>
</ol>
</div>RE: NPD's response to EA about retail vs. digital2012-07-11T19:12:12+02:002014-03-12T12:23:06+01:00Alexander Skibatag:ghostlyrics.net,2012-07-11:/re-npds-response-to-ea-about-retail-vs-digital.html<h2 id="the-digital-business">the digital business</h2>
<p><a href="http://www.gamesindustry.biz/articles/2012-07-02-npd-reacts-to-eas-remarks-that-its-data-is-totally-irrelevant">James Brightman about the NPD’s response to EA:</a></p>
<blockquote>
<p>“While digital is a growing part of the industry and something that needs to be addressed for the future, the current games industry is still largely rooted in retail and any industry player involved with AAA content simply …</p></blockquote><h2 id="the-digital-business">the digital business</h2>
<p><a href="http://www.gamesindustry.biz/articles/2012-07-02-npd-reacts-to-eas-remarks-that-its-data-is-totally-irrelevant">James Brightman about the NPD’s response to EA:</a></p>
<blockquote>
<p>“While digital is a growing part of the industry and something that needs to be addressed for the future, the current games industry is still largely rooted in retail and any industry player involved with AAA content simply can’t take their eye away from the retail environment. Successful companies are looking at how their products are performing within all channels, particularly retail,” he said.</p>
</blockquote>
<p>Let’s take a moment to discuss <em>why</em> AAA content on consoles is still largely marketed as physical products. First: the pricing is ridiculous. If you’re making me pay more for an old product as a download than it would cost <strong>new</strong> at the next best online retailer, you already lost. If you publish a game online shortly before the next title in the franchise launches, you might have some fans who will do a stunt and dive into the older product to get the feel for the franchise again, but you’re not doing good on the other customers. Because those will just be wondering why they should now pay more for a non-physical outdated product <strong>and</strong> question why you weren’t able to put the game online before. Microsoft actively discourages people buying digital games on their Xbox Live platform that are not XBLA games.</p>
<p>Now, I am not sure how Sony handles this, because I don’t own a PS3 and read less news about their business, but from what I’ve heard they managed to do at least one simultaneous release of retail and online in their store.</p>
<p>And Nintendo? Let’s not talk about them. Their mobile platforms have the same flaw that Sony’s have: They’re not taking the Apple Appstore as a role model. You can’t simply buy things. You’re not allowed to download them to all your devices. It’s not even easy to find good items on the platforms from what I gather from fellow bloggers.</p>
<p>By now it should be crystal clear that an Apple iCloud like approach works well for digital items. They can be stored, redownloaded and don’t disappear when you remove them from you device. They are updated easily and when you download an item you only get the newest version. Now granted, they are copy-protected and bound to your ID. But in the case of games that isn’t a problem because the customers can only use the item with the respective company’s device anyway.</p>
<h2 id="the-retail-business">the retail business</h2>
<blockquote>
<p>McQuillan also stressed that gamers’ buying habits still very much include retail products, particularly during holiday periods when the industry Todaygenerally does a sizable chunk of its annual business.</p>
</blockquote>
<p>On one hand this is certainly caused by the fact that when you’re buying a video game (read: retail DVD boxes) for a loved one that is in fact a tangible thing and not just some esoteric gift certificate, voucher or whatever you want to call it. On the other hand I’m fairly sure that there are an incredible lot of people handing out those vouchers for a reason:</p>
<ul>
<li>
<p>There are many people who don’t know anything about video games and therefore are lost when deciding what to buy. They are either likely to ask a sales rep and are either helped into a great buy or conned into buying a game that will just go to the bin or resold.</p>
</li>
<li>
<p>You might not be sure about what the person who is going to get your game likes, which genre or franchise they are into. That’s a perfect reason for a gift certificate. Keep in mind that there is still a choice between a generic, say Amazon certificate and something more specific, like Microsoft points.</p>
</li>
</ul>
<p>So the main reason a gift certificate gets bought is: You want the receiver to decide. (Whether on purpose or because you don’t know their taste.) In contrast to that you give physical products like retail games if you want to gift a physical item. I’d even go as far as saying that those making piles of gifts under Christmas trees looking bigger is an incentive to buy them during holidays.</p>
<!-- data -->
<div class="footnote">
<hr>
<ol>
<li id="fn:der">
<p>And I’m not using that in a derogatory way. <a class="footnote-backref" href="#fnref:der" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Project:Rosetta - Finding a Job2012-07-03T00:25:09+02:002014-02-14T00:47:35+01:00Alexander Skibatag:ghostlyrics.net,2012-07-03:/projectrosetta-finding-a-job.html<p>Currently I’m not sure what to write for my novel.<br>
The whole thing is set at an educational institute with a strong military part to it. Students there are to some degree free to choose the profession they want to learn, apart from the mandatory military background.</p>
<p>It has …</p><p>Currently I’m not sure what to write for my novel.<br>
The whole thing is set at an educational institute with a strong military part to it. Students there are to some degree free to choose the profession they want to learn, apart from the mandatory military background.</p>
<p>It has however been difficult to come up with a path of education for the lead character. Since he is based on my perception of myself to a great extend I want to choose something I’m comfortable with. Ideally that profession should also be fun to write about since I want to enjoy writing this novel (and potential sequels). The path as commissioned officer is not perfectly suited since I’ve stated the lead’s distaste for the strict army system in his country multiple times and this is an essential part of his character. On the other hand I’m thinking hard to come up with something that fits the setting and atmosphere of the world I want to create.</p>
<p>That quest for a suitable profession is complicated by the fact that my view of my own career is not particularly clear. I have ideas en masse but I’m not so sure what I want to do to earn my living.</p>
<p>I might just have to make something up entirely in order to keep the story interesting for the reader as well as exciting to write. I’ve said on several occasions that I want the world I create to feel consistent and cohesive. A considerable amount of planning and discussion went into my drafts so far and I intend to keep it that way in order to ensure this world - my world - will be an amazing place to read about.</p>Media Recap: June 20122012-07-01T00:27:44+02:002014-03-12T12:48:18+01:00Alexander Skibatag:ghostlyrics.net,2012-07-01:/media-recap-june-2012.html<ul>
<li>
<p>Novel: <a href="http://reimon.net/2012/02/01/incommunicado/">Incommunicado by Michel Reimon</a> <br>
Actually a leftover from last month, a quite fascinating political book. Never thought I’d pick one of those up but I someone I respect quite a lot told me he was looking forward to reading that book and I got curious. There is a …</p></li></ul><ul>
<li>
<p>Novel: <a href="http://reimon.net/2012/02/01/incommunicado/">Incommunicado by Michel Reimon</a> <br>
Actually a leftover from last month, a quite fascinating political book. Never thought I’d pick one of those up but I someone I respect quite a lot told me he was looking forward to reading that book and I got curious. There is a lot about that book that I don’t like, like its in-your-face approach and its onomatopoeia. Also I am not particularly fond of Reimon’s style of writing in general, but I respect that he had something to tell with his book and he brought that message along clearly.</p>
</li>
<li>
<p>Novel: <a href="http://www.shelfari.com/books/22972033/Dark-Frost">Dark Frost by Jennifer Estep</a> <br>
Cured one of two issues I had from former books. One was the lazy and ridiculous repetition of its own content instead of using different espressions when reestablishing facts for readers who might not remeber the facts from the last book. I got annoyed quite a lot of times when I felt that Estep just copypasted whole paragraphs from the last book into the current one. The second issue that is still unresolved is the fact that it is mentioned on several occassions that there are a lot of other warrior styles on the academy yet we never get to see one. We never even get to <strong>walk past one</strong>, which strikes me as odd, considering they can’t all be ninjas. </p>
</li>
<li>
<p>Game: <a href="http://en.wikipedia.org/wiki/Mass_effect_2">Mass Effect 2</a> <br>
Played that again in order to change course of plot as mentioned in <a href="/2012/04/19/thoughts-on-mass-effect-3/">this article</a></p>
</li>
<li>
<p>Game: <a href="http://www.guildwars2.com/en/">Guild Wars 2</a> <br>
I bought the game and played through the second beta weekend. I didn’t play during the most recent stresstest since I had other things to do.</p>
</li>
<li>
<p>Let’s Play: <a href="http://lparchive.org/Kingdom-Hearts-Chain-of-Memories/">Kingdom Hearts Chain of Memories</a> <br>
Was also a leftover from last month. I initially intended to watch the one for 358/2 days but got sidetracked when I realized I don’t know the story of Chain of Memories.</p>
</li>
<li>
<p>Video: <a href="http://itunes.apple.com/at/podcast/apple-special-event-october/id470664050?i=109744694">Apple special event Oct 2011</a> <br>
I was late to the party but on the other hand the keynotes just aren’t that amazing anymore without Steve.</p>
</li>
<li>
<p>Video: <a href="http://itunes.apple.com/at/podcast/apple-wwdc-2012-keynote-address/id470664050?i=117079955">WWDC 2012 keynote address</a> <br>
Interesting, but I had already read about most of the announced things, so that was just recap.</p>
</li>
<li>
<p>Game: <a href="http://en.wikipedia.org/wiki/Mass_effect_3">Mass Effect 3</a> <br>
Enjoyed myself some multiplayer. Did not get the drops I wanted. Everything as usual.</p>
</li>
<li>
<p>Game: <a href="http://www.metacritic.com/game/pc/star-wolves-3-civil-war">Star Wolves 3</a> <br>
Did another playthrough of Star Wolves 3. Got a different ending this time. Realized that my computer is still too slow for both battles with 20+ ships and 8x speed.</p>
</li>
<li>
<p>Let’s Play: <a href="http://lparchive.org/Pokemon-Platinum/">Pokemon Platinum</a> <br>
Very cynical, amusing let’s play. Definitely recommendable, though some parts felt long and streched. This is due to Pokémon’s battle system, however, not due to the author’s writing style.</p>
</li>
<li>
<p>Game: <a href="http://store.steampowered.com/app/15960/">Little Farm</a> <br>
Grinded through some stages of Little Farm since I really want to know how the small story ends. While I initially really enjoyed this casual game, the final levels are getting more and more frustratring.</p>
</li>
<li>
<p>Game: <a href="http://supergiantgames.com/?page_id=242">Bastion</a> <br>
I bought Bastion a while back and have listened to the Soundtrack several times. This time I got around to playing it and was quite surprised that it has addiction potential. On the other hand it makes me furious just how mean some of the challenges are that you have to master in order to get all secret skills.</p>
</li>
</ul>
<p>Summary: <strong>2 novels, 2 let’s plays, 2 videos, 6 games;</strong></p>Contact Sync bolted onto Ubuntu2012-05-31T23:35:01+02:002014-02-14T00:47:36+01:00Alexander Skibatag:ghostlyrics.net,2012-05-31:/contact-sync-bolted-onto-ubuntu.html<h2 id="foreword">Foreword</h2>
<p>A short while ago I managed to screw up a little computer repair and in the process of migrating <code>/home</code> there was a little accident while led to me losing my acquaintance’s bookmarks and contacts <sup id="fnref:more"><a class="footnote-ref" href="#fn:more">1</a></sup>. That being the second time I destroyed her address book and her …</p><h2 id="foreword">Foreword</h2>
<p>A short while ago I managed to screw up a little computer repair and in the process of migrating <code>/home</code> there was a little accident while led to me losing my acquaintance’s bookmarks and contacts <sup id="fnref:more"><a class="footnote-ref" href="#fn:more">1</a></sup>. That being the second time I destroyed her address book and her losing all the e-mail addresses I knew I had to prevent that from happening again. That method had to be practically invisible to the user and preferably cost-free.</p>
<h3 id="google-aka-gmail">Google (a.k.a. Gmail)</h3>
<p>My first thought was using the <a href="https://addons.mozilla.org/en-US/thunderbird/addon/google-contacts/">Google Contacts addon</a> for Thunderbird, however the reports and reviews at the Addon page were not particularly encouraging. From perfectly working to creating duplicates to not working at all, the opinions were all over the place. I would’ve preferred to stay with Google since I’m using Chromium on this machine as default browser and sync pretty much everything with Google. In essence, that would’ve saved me the creation of another user account at another provider. The feedback over at Mozilla was a bit too bleak for me to recommend this way of backing up your contacts.<br>
I had to find another solution.</p>
<h3 id="ubuntu-one">Ubuntu One</h3>
<p>Of course, this being Ubuntu with its growing Canonical backed ecosystem, I remembered them offering Contacts Sync via Ubuntu one. After reading up over at <a href="http://www.omgubuntu.co.uk/">OMG! Ubuntu!</a> I set up the Ubuntu One account and wanted to enable sync. Only to end up failing, since…</p>
<p>…Canonical has managed to alienate its Ubuntu One customers in a quite spectacular fashion. While offering sync services and trying to compete with several different cloud service providers they have neglected to check if one of their advertised features still works in the current version of their operating system. In short: If you want to use the Contacts Sync for Thunderbird that was introduced with an earlier version of Ubuntu nowadays, you’re screwed.</p>
<p>Contacts Sync started as an option for Evolution <sup id="fnref:evo"><a class="footnote-ref" href="#fn:evo">2</a></sup> as early as Ubuntu 10.04 and stayed an option via a technology called CouchDB all the way to 11.04 - in other words until Thunderbird took over as the new default e-mail client. According to the <a href="https://one.ubuntu.com/help/tutorial/install-and-setup-contacts-sync/">tutorial</a> the sync option stayed in place for that release. With 12.04 however - which I’ve recently had the joy of installing - Contact Sync broke. Horribly. As in: It is not only gone but neither fixed as of the time of me writing this nor is there a proposed workaround.</p>
<p>Imagine this cruel scenario:<br>
You imported all your carefully maintained contacts which you are using for professional purposes into Ubuntu One back then with Evolution. The devout follower of Ubuntu you are, you made the jump from Evolution to Thunderbird - secretly knowing that Thunderbird is less confusing and could in theory help you become more productive. Everything went well since you just synced with Ubuntu One, using their server as your master database. Your data is in fine shape since you just upgraded from an earlier version to 12.04 but now there’s a big problem. Something went wrong, your contacts are gone. Of course your first thought - after calming from the initial moment of panic - is that you just sync with Ubuntu One and your contacts are restored, right?<br>
Well, <strong>wrong</strong>. There is no Ubuntu Contact Sync in the Thunderbird options, so it’s obviously no longer installed by default. Interestingly there’s also no word of Contact Sync in the Ubuntu One preference panel. A quick query via <code>apt-cache search</code> shows that there’s still packages associated with Thunderbird and Ubuntu One around, but after installing those nothing really happens.</p>
<p>Actually, that was a lie. Within Thunderbird a new address book called “Ubuntu One” will be created. However, you cannot save contacts in this book, neither can you move existing contacts into it nor can you assign it as the address book used to automatically remember addresses you sent mail to. If you’ve previously relied on Ubuntu One to get your contacts, you’re now pretty much lost.</p>
<h3 id="dropbox-aka-the-sledgehammer-method">Dropbox (a.k.a. the sledgehammer method)</h3>
<p>After running out of patience during the Ubuntu One sync ordeal and with my pool of ideas for free sync rapidly draining I turned to my all-time favorite: <a href="http://dropbox.com">Dropbox</a>. Although it struck me as overkill I simply moved <code>.thunderbird</code> as a whole into my colleague’s Dropbox and used a symlink to point Thunderbird to its new location in order to keep a relatively low maintenance solution.</p>
<div class="highlight"><pre><span></span><code>mv ~/.thunderbird ~/Dropbox/Apps/Thunderbird
ln -s ~/Dropbox/Apps/Thunderbird ~/.thunderbird
</code></pre></div>
<p>I’m perfectly aware that this is neither the most elegant solution nor the most fool-proof. I’m also aware that it’s fairly prone to fall victim to possible sync conflicts. This is not a problem however due to my acquaintance only using one PC. It’s a nice trick to keep everything working behind the curtain without paying for a dedicated address book server or similar.</p>
<h4 id="addendum">Addendum</h4>
<p>In hindsight I realize that I could’ve used Ubuntu One instead of Dropbox to sync the whole folder, thus saving the need to create one more account. However, after the first annoyance I wasn’t too inclined to stick with U1 anymore.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:more">
<p>And probably a lot of configuration, caches and whatever. <a class="footnote-backref" href="#fnref:more" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:evo">
<p>Which is fine, since that awfully bloated Outlook clone was the default e-mail client back then. <a class="footnote-backref" href="#fnref:evo" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>The Secret World at GDC 20122012-05-03T15:56:24+02:002014-02-14T00:47:39+01:00Alexander Skibatag:ghostlyrics.net,2012-05-03:/the-secret-world-at-gdc-2012.html<p>I just watched <a href="http://www.youtube.com/watch?v=TBSUgKbKaWs">the presentation of The Secret World at GDC 2012</a> in its full length and there are several topics I’d like to address before heading back to other matters. In this article I’ll be using the shortened TSW when referring to the game.</p>
<h2 id="user-interfaces">User interfaces</h2>
<p>If …</p><p>I just watched <a href="http://www.youtube.com/watch?v=TBSUgKbKaWs">the presentation of The Secret World at GDC 2012</a> in its full length and there are several topics I’d like to address before heading back to other matters. In this article I’ll be using the shortened TSW when referring to the game.</p>
<h2 id="user-interfaces">User interfaces</h2>
<p>If you know me then you’ll be aware how unwilling I am to put up with a bad UI. A great UI is an essential part of any modern game - or at least it should be. Making the UI fun to interact with lessens the impact of immersion breaking when players have to sift through menus in order to change settings, find items or read up quest information. While most of the things I’ve seen in the demo have been pleasant - like the skill wheel - some haven’t. <strong>I really wish we could get away from using sliders for things they’re just not suited for.</strong> Making the face selection or hairstyle selection a slider makes no sense at all, because in contrast to, say, jaw width, different hairstyles are not polar opposites on an index. Thumbnails would be a preferable option. Using sliders for this sort of option is also detrimental to online games because you can’t easily show which ones are new either due to a patch or an expansion. Using thumbnails you could easily slap some small “new” signage onto the newly available ones. <em>Try that using a slider.</em></p>
<h2 id="character-looks">Character looks</h2>
<p>I’m never quite sure what to think of the character models of TSW’s character models. While I may be spoiled by the extraordinarily prettiness that TERA Online left me with, I’m just not convinced that their facial features are up to the latest standards in video gaming technology. They look okay when compared with older games, but they’re most certainly not up to date with the latest tech. <em>On the other hand that might be just me expecting more of little details again.</em></p>
<h2 id="little-touches">Little touches</h2>
<p>TSW has a certain love for detail which can’t be ignored. The developers offered only some examples during the demo but I was impressed how well things are designed.</p>
<ul>
<li>Songs heard in karaoke bars may trigger new quests due to their lyrics.</li>
<li>You get a UNIX inspired hacking terminal when accessing foreign computers but after a successful hack your program may obtain a HTML-formatted copy of the data which makes accessing the information on your device significantly easier and enables pretty graphics all the while explaining why this was possible.</li>
<li>The three different factions may arrive at key locations of main quests in different way, all the way fitting in with each of their story arc and characteristics.</li>
<li>The crafting system is a kind of memory game which uses different ingredients as well as their position on a grid to determine the outcome of crafting. That process is aided by the option to dissect your equipment - called “transcribing” in the game world.</li>
<li>Time travel to a certain dungeon in the past is done via a trance.</li>
</ul>
<p>There’s other things that make me want to play the game too. Their achievements are linked to real bonuses, like money or items, not only nice pictures. Dangerous environments facilitate the need to be constantly aware of your surroundings in battle. There are obtainable “lore pieces” that tell the whole story behind TSW and form a narrative line on its own.</p>
<p>If there’s one game I’m incredibly curious to see how much of a success it will become, it’s TSW. <em>Yes, I keep Guild Wars 2 in mind, but that’s unnecessary, since GW2 will be successful anyway.</em></p>
<!-- attachment -->The Long Night of Science 20122012-05-03T01:03:24+02:002014-03-12T13:06:57+01:00Alexander Skibatag:ghostlyrics.net,2012-05-03:/the-long-night-of-science-2012.html<p>In between spending my time in lectures which are interesting but <a href="/2012/05/03/on-heinzs-lecture-for-gadi-2012/">not in my current curriculum</a> and attending and presenting at the Grazer Linuxtage<sup id="fnref:glt"><a class="footnote-ref" href="#fn:glt">2</a></sup>
I was checking out another event in this student metropolis: <strong>The Long Night of Science</strong>.</p>
<p>Admittedly, if it wasn’t for another student from university …</p><p>In between spending my time in lectures which are interesting but <a href="/2012/05/03/on-heinzs-lecture-for-gadi-2012/">not in my current curriculum</a> and attending and presenting at the Grazer Linuxtage<sup id="fnref:glt"><a class="footnote-ref" href="#fn:glt">2</a></sup>
I was checking out another event in this student metropolis: <strong>The Long Night of Science</strong>.</p>
<p>Admittedly, if it wasn’t for another student from university asking me if I want to go I wouldn’t have left the house that evening. Now, that being said, I enjoyed most of the evening. I initially agreed to go because Anja had struck lucky and the first thing she told me about the Long Night stirred my interest. </p>
<h2 id="at-the-medical-university">At the Medical University</h2>
<p>The Medical University of Graz (to be more precise: the Ludwig Boltzmann institute for clinical-forensic research) offered something slightly less common amongst its many lectures and presentations that evening: an interactive criminal investigation - you were to solve a murder case.</p>
<p>Using hints (read: answers that were tied to letters) you were supposed to solve the case and guess the <del>gleamingly obvious</del> codeword. For those of you that are reminded of <a href="http://de.wikipedia.org/wiki/Tom_Turbo">Tom Turbo</a> (link in German), you are quite right.The first step was talking to the three suspects (for a lack of time that consisted of checking three short written statements). Due to the shortness of those statements I personally couldn’t get to a conclusion, but my colleague decided on the right thing. After some discussions I still can’t understand her way of thought on that, but I’ll leave it on that. As the room was separated there were two more activities to do at the “crime scene”, as well as a bonus task. We were to check the smear tests from each suspect’s steering wheel for blood, compare tracks left by tires and make a semi-detailed scribble of the environment <del>because there are no cameras</del>. After leaving the crime scene we headed to the “lab section” to check the seeds gathered from each suspect’s shoes <sup id="fnref:shoes"><a class="footnote-ref" href="#fn:shoes">1</a></sup>, check a computer model in order to determine which murder weapon was used and compare some DNA tests to see if our most likely suspect left traces on the murder weapon.</p>
<p>After all it was a nice little excursion into the processes used by police and an amusing possibility to try some of the things one only knows from TV on your own.</p>
<h2 id="at-the-fh-joanneum-university-of-applied-sciences">At the FH Joanneum (University of Applied Sciences)</h2>
<p>In hindsight - or rather looking at the <a href="http://lnf2012.at">plan</a> - I realize that there indeed was a station done by the Journalism & PR team’s Web Literacy Lab. That’s what I intended to check out that evening. Where I actually ended up was the station for Information Management demonstrating how easy it is to do a man in the middle attack for unencrypted VoIP telephony. Though we had an inspiring conversation there I ended up thinking that there wasn’t a station done by the Web Literacy Lab and was slightly disappointed. A short visit to the “Computers of the Future” section didn’t really improve my mood as the things there were neither particularly new nor <em>that amazing</em>. I assume that comes with optimizing demos for all kinds of audiences (children included).</p>
<h3 id="the-takeaway">The takeaway</h3>
<p>I think next year I’ll try to start earlier into the evening that 19:00 in order to check out more of the various presentations. Nevertheless I’m delighted that Austria offers such an interesting event once a year. Check out <a href="http://lnf2012.at">the website</a> to see just how many institutes contributed on a nation wide scale.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:shoes">
<p>In order to see how working with microscopes is helpful for police work. <a class="footnote-backref" href="#fnref:shoes" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:glt">
<p>The article about the Grazer Linuxtage was in draft stage at the time of this writing. <a class="footnote-backref" href="#fnref:glt" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>On @Heinz's lecture for GADI 20122012-05-03T01:00:28+02:002014-02-14T00:47:40+01:00Alexander Skibatag:ghostlyrics.net,2012-05-03:/on-heinzs-lecture-for-gadi-2012.html<p>Last week I went to university in order to listen to Heinz’s<sup id="fnref:heinz"><a class="footnote-ref" href="#fn:heinz">1</a></sup> lecture about Realtime Journalism as part of GADI<sup id="fnref:gadi"><a class="footnote-ref" href="#fn:gadi">2</a></sup>. I happened to come across his <a href="http://heinz.typepad.com/lostandfound/">blog</a> a while back and after reading that he’ll be lecturing I couldn’t resist checking out that particular session …</p><p>Last week I went to university in order to listen to Heinz’s<sup id="fnref:heinz"><a class="footnote-ref" href="#fn:heinz">1</a></sup> lecture about Realtime Journalism as part of GADI<sup id="fnref:gadi"><a class="footnote-ref" href="#fn:gadi">2</a></sup>. I happened to come across his <a href="http://heinz.typepad.com/lostandfound/">blog</a> a while back and after reading that he’ll be lecturing I couldn’t resist checking out that particular session of GADI although I don’t take that course this year. <em>It might have been beneficial to attend more courses which I do take…</em></p>
<h2 id="about-realtime-journalism">About Realtime Journalism</h2>
<p>The term Realtime Journalism is used for two different combinations of synchronous actions.</p>
<ul>
<li>Sync of coverage with event<br>
This is the part that we are all very familiar with due to its roots in live coverage of events through more traditional
media like TV.</li>
<li>Sync of event with queries<br>
This part however is where the fun for students of Computer Science and nerds in general is. Due to the availability
of open data as well as an abundance of APIs with different proprietary data providers it’s now possible to show an
incredible amount of data corresponding with different newsworthy events easily. Reporting on an earthquake?
Show maps that are color-coded with the amount of damage that occurred. Reporting on a convention? Monitor the
twitter hashtag to see what visitors are thinking. The possibilities are manifold, considering the essential tool that
<a href="http://ushahidi.com/">ushahidi</a> - more on that later - might become.</li>
</ul>
<p>While we are used to the first part, a sync of queries with events in order to display related data in realtime is huge opportunity to improve reports and stories without the need to stretch the length of a story. I’m confident that while not every audience is ready for this kind of information bombardment the trend will be going towards displaying more relevant data without the need to look it up yourself. Critical analysis of gathered information may become harder due to the increasing amount of sources which may not yet have reached the credibility they should have while others may be mistaken from time to time.</p>
<h2 id="technology">Technology</h2>
<p>I admit that I wasn’t only there to listen to the lecture but to get to know a few new toys on the web which might not be in the center of attention <em>yet</em>. To say the least, I wasn’t disappointed.</p>
<ul>
<li>I had already forgotten about <a href="http://en.wikipedia.org/wiki/PubSubHubbub">PubSubHubbub</a>, which is a neat extension to the RSS protocol in order to
serve new posts even faster to subscriber via the usage of hubs between the publisher and the user. In essence it uses
Push instead of clients having to poll for new items. <em>I read up on that while checking out RSS publishing for my old
blog.</em></li>
<li><a href="http://storify.com/">Storify</a> is a service that may use different sources like Facebook feeds, Twitter feeds and much more to create interactive, realtime updating stories. Though it sounds interesting, a short demo during the presentation immediately showed me that it’s not my type of thing.</li>
<li><a href="https://facebook.com/">Facebook</a> has its own livestreaming service called “facebook live talks”. <em>No chance I’ll be using that, thank you very much.</em></li>
<li><a href="http://ushahidi.com/">Ushahidi</a> could be the reporting tool of the future. It’s open source, it’s a service and it’s data and visualizations thereof are incredible if the demonstration’s level of awesomeness can be recreated in real world usage.</li>
<li><a href="http://www.google.com/tools/dlpage/res/talkvideo/hangouts/">Google Hangouts</a> provide means of realtime video conversations with multiple partners via a browser plugin. <em>I’m not on plus, I don’t have any reason apart from curiosity to go there and plenty of other things to do. So I haven’t tested hangouts.</em> According to Heinz it’s based on the HTML5 capability “Websockets” which are intended for realtime communication on a software level, modernizing the static web. Admittedly, thanks to a large part to AJAX, it’s not <em>that</em> static anymore, but still…</li>
</ul>
<h2 id="final-thoughts">Final Thoughts</h2>
<p>From all I heard I came to following conclusions:<br>
There is a big emphasis on what I’d call DIY information. It’s all about enhancing and enriching your own findings and reports with related information and where applicable open data.<br>
You can’t ignore social media anymore, not after what happened in Egypt 2011. Let’s end this post with a quote from the lecture.</p>
<blockquote>
<p>Connectivity and interactivity have definite results: The observer becomes an actor. The image of the classic neutral journalist is no longer crystal clear.<sup id="fnref:quote"><a class="footnote-ref" href="#fn:quote">3</a></sup></p>
</blockquote>
<!-- attachment -->
<div class="footnote">
<hr>
<ol>
<li id="fn:heinz">
<p>Heinz Wittenbrink, who’s teaching social media and online journalism at the FH Joanneum, covering local events for the benefit of the Internet on <a href="https://twitter.com/#!/heinz">Twitter</a>, <a href="http://heinz.typepad.com/lostandfound/">blogging</a> and probably participating in an incredible amount of other projects that I don’t know of. <a class="footnote-backref" href="#fnref:heinz" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:gadi">
<p>English: Effects of information technology on society<br>
German: Gesellschaftliche Auswirkungen der Informationstechnologie <a class="footnote-backref" href="#fnref:gadi" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:quote">
<p>Original: “Verbundenheit und Interaktivität wirkt sich aus: Der Beobachter wird ebenfalls zum Akteur. Das klassische Bild vom objektiven Journalisten ist nicht mehr ganz so klar.” <a class="footnote-backref" href="#fnref:quote" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>Media Recap Precursor (May 2012)2012-05-01T11:57:45+02:002014-03-12T13:15:50+01:00Alexander Skibatag:ghostlyrics.net,2012-05-01:/media-recap-precursor-may-2012.html<p>I found some new things on the Internet!</p>
<ul>
<li>Bungie <a href="http://www.xbox360achievements.org/news/news-11328-Bungie-Ends-Halo-Stat-Support--Releases-Insane-Infographic.html">released an infographic</a> showing the collected stats of the Halo stat tracking program when they shut it down.</li>
<li>You <a href="http://failbook.failblog.org/2012/04/12/funny-facebook-fails-hulk-debate/">don’t want to face Hulk</a> in a debate.</li>
<li>In a <a href="http://blog.readability.com/2012/03/readability-android/#comment-1870">disgustingly hateful comment</a> a user of Readability shows his appreciation of …</li></ul><p>I found some new things on the Internet!</p>
<ul>
<li>Bungie <a href="http://www.xbox360achievements.org/news/news-11328-Bungie-Ends-Halo-Stat-Support--Releases-Insane-Infographic.html">released an infographic</a> showing the collected stats of the Halo stat tracking program when they shut it down.</li>
<li>You <a href="http://failbook.failblog.org/2012/04/12/funny-facebook-fails-hulk-debate/">don’t want to face Hulk</a> in a debate.</li>
<li>In a <a href="http://blog.readability.com/2012/03/readability-android/#comment-1870">disgustingly hateful comment</a> a user of Readability shows his appreciation of Readability developing an Android version of their application but not releasing it on Google Play initially. Mind you that the app is free and he is in no way entitled to demand anything. <em>Although I admit that releasing it on the Amazon Market with a headstart was definitely not the smartest idea.</em></li>
<li><em>Microsoft is definitely not my favorite company this week.</em> According to <a href="http://www.xbox360achievements.org/news/news-11525-Microsoft-to-Introduce-15-30-Second-Commercials-to-Xbox-Live.html">this article</a> they plan to introduce commercials for the Xbox Live service. Now, while I personally don’t watch video content on my 360, it is troubling to see that there’s another venue being invaded by commercials that can’t be disabled. <em>The tiles on the Dashboard containing ads are already annoying enough.</em></li>
<li>If you’re familiar with Team Fortress 2, you should check out <a href="http://matt.might.net/articles/nine-kinds-of-students/">this post about the 9 types of students</a>.</li>
</ul>
<p>In terms of reading I’ve finished Stieg Larsson’s <a href="http://www.shelfari.com/books/3542641/The-Girl-with-the-Dragon-Tattoo">The Girl with the Dragon Tattoo</a>, C.C. Hunter’s <a href="http://www.shelfari.com/books/23846839/Taken-at-Dusk">Taken at Dusk</a> and - I’m quite embarrassed to admit that I had to look up the title although it’s not even been a week - Jenna Black’s <a href="http://www.shelfari.com/books/24582915/Deadly-Descendant">Deadly Descendant</a>.</p>TERA Online (open beta)2012-04-21T09:37:47+02:002014-03-12T13:12:53+01:00Alexander Skibatag:ghostlyrics.net,2012-04-21:/tera-online-open-beta.html<p>You might have noticed that I’ve mentioned <a href="http://tera.enmasse.com/">TERA Online</a> in the past. To be more precise I wanted to playtest it for a longer time after immediately liking the visual style and some of the gameplay mechanics at Gamescom 2011. I received a key for the closed beta last …</p><p>You might have noticed that I’ve mentioned <a href="http://tera.enmasse.com/">TERA Online</a> in the past. To be more precise I wanted to playtest it for a longer time after immediately liking the visual style and some of the gameplay mechanics at Gamescom 2011. I received a key for the closed beta last week but was unable to play there because I busy was otherwise - not that I regret that. After Ron told me that the open beta is this weekend I wasn’t so sure anymore. Of course it didn’t keep me from playing. <em>Did anyone doubt that?</em></p>
<blockquote>
<p>The Tera launcher needs some major streanlining. ~<a href="https://twitter.com/fiddlecub/status/193205695594758145">Kevin VanOrd</a><br>
Also, streamlining. ~<a href="https://twitter.com/fiddlecub/status/193205816994697216">Kevin VanOrd</a></p>
</blockquote>
<p>I don’t mind that it takes up a lot of screen estate. I mean, realistically speaking I won’t be using it for other activities than clicking the “Play” button, right?</p>
<p>As I’m not interested in PVP I picked a PVE server and set out on my journey. At least that’s what I thought I would do. During extensive character modification the game crashed. I sighed and tried again, because all progress was - of course - lost. <em>Have you ever heard of auto-save, game devs? That might be a fine place to integrate it.</em> Of course, you could also fix the bug that sends the game crashing when you extensively modify a character and enter your chosen name. This might not apply for both genders or all races, however I had said problem for both castanic<sup id="fnref:castanic"><a class="footnote-ref" href="#fn:castanic">1</a></sup> and high elves<sup id="fnref:elves"><a class="footnote-ref" href="#fn:elves">2</a></sup>. I can’t tell if the problem is the same for humans<sup id="fnref:red"><a class="footnote-ref" href="#fn:red">3</a></sup>. After some time I figured out that I can enter the name first and start customizing after that to circumvent the crash.</p>
<h2 id="starting-out">Starting out</h2>
<p>Starting to dig into the whole customization thing I figured one thing out fast: You may customize your characters head (hairstyle, makeup, beard, facial features) to a great extent. All that you may change about your body is the skin tone. Now, call me focused on female secondary gender features, but in a game in which you walk around in annoyingly skimpy clothing for a considerable amount of time, I’d like to actually enjoy looking at my character. Read: Either I have to endure the silly castanic running animation or put up with the high elves oversized breasts. <em>No, playing a male character is not an option. Unless it’s a baraka .</em><sup id="fnref:baraka"><a class="footnote-ref" href="#fn:baraka">4</a></sup></p>
<p>Before the whole customizing, however, you chose your class. I don’t want to be a support character because I prefer doing things solo, even in MMOs. I’m also not much for ranged classes. That meant that <em>priest</em>, <em>mystic</em>, <em>archer</em> and <em>sorcerer</em> were out. I’ve never been a fan of axes or defensive classes, so <em>beserker</em> and <em>lancer</em> were out too. I decided on <em>slayer</em> which is an offensive class wielding a greatsword.</p>
<p>Interestingly, En Masse decided to display the recommended player skill level on the class selection screen. I’m pretty sure I chose the slayer because it had 3/5 stars in contrast to the <em>warrior</em> with 5/5 stars. I played nearly all of my time as warrior anyway, but I’ll get to that later. After you’ve finished customization you’ll be asked wether to play the prologue or start at the Island of Dawn. At least after you’ve been forced to check out the prologue on your first character. I’m all for hands-on tutorials, but don’t get me wrong here. I’ve been so confused to suddenly find myself as a level 20 character that I checked the Internet to see why I didn’t start at level 1. Well, the prologue not only teaches you the basics of combat but also means to give some background information.</p>
<p>So I created another character to check if only specific classes start at level 20. And that was my high elf, which I’ve now played for several hours. She’s a warrior, dual wielding swords. <em>I would’ve preferred daggers.</em> After several hours of play I even got an armor that is not just a corset and panties. <em>It’s still skimpy.</em> She also wears combat heels. You know, for the time when you have to kick an enemy really hard. <em>Gosh, they’re so incredibly ridiculous, it makes my head hurt everytime I see them in a video game.</em></p>
<p>I enjoy the combat. There’s not much to tell. Skills, combos, targeting via reticle, evasion, block. All in place.</p>
<h2 id="whats-bad">What’s bad</h2>
<p>The things I’ve mentioned above are not bad per se, however, those are things that don’t target my specific taste. That’s fine. Bad things follow in this section.</p>
<h3 id="ui-trouble">UI trouble</h3>
<p>There’s an option to scale the UI. It does fine, except that it scales <em>all</em> UI elements, including the font-size. It’d be preferable to scale font-size and the size of UI elements like buttons independently. Combined with the scrubber that does that is another idiocy:</p>
<p>Let’s assume you have a window open and use the clickable lower right corner <sup id="fnref:mac"><a class="footnote-ref" href="#fn:mac">5</a></sup> to scale it:<br>
<strong>Result</strong>: The window scales and everything within is blown up. Previously readable fonts are blown up to laughable sizes.<br>
<strong>Expected result:</strong> The window scales and its content reflows. Font size does not change. Ever worked with CSS in web development? Then you know what it should behave like.</p>
<ul>
<li>It might be a nice idea to allow individual preferences for the tabs in your chat UI. However the font-size for chat should be globally adjustable.</li>
</ul>
<h3 id="inconsistency">Inconsistency</h3>
<ul>
<li>There’s a sequence, right after the initiation into the army proper of uhm… the land starting with “V”. It’s Valkyon, I’ve <a href="http://www.gamespot.com/users/Bozanimal/show_blog_entry.php?topic_id=m-100-25980868">checked</a>. The audio and the subtitles don’t match up at all. This fact is made worse by the subs being on by default.</li>
<li>I realize having keyboard shortcuts in dialogue is equally helpful and awkward. It’s even more awkward if you don’t use variables to read the player’s set shortcuts and use the default bindings instead. Confused much?</li>
<li>On more shortcut trouble: Consistently colouring those would be preferred. Don’t colour it once and don’t another time.</li>
<li>Why the hell are keyboard configurations character-specific? If I want SPACE to be my <em>interact</em>, then let me. Don’t make me change everything for every new character again!</li>
</ul>
<h3 id="other-annoyances">Other annoyances</h3>
<ul>
<li>Quest monster camping. TERA spawns monsters quite frequently. The condition for the orcan having the black feather (his name started with “A”…) spawning was actually his dead body disappearing. Still, there was a group of three people on my server who blocked that boss by targeting him with a ranged attack every time he spawned. Several other players were standing around cursing because those were stealing the boss every time, so no one was able to complete their quest. Considering that that group probably got the quest immediately since kills are shared within a group they were trolling. Quite successfully, I might add.</li>
<li>Armor colours are only applied for a limited time. Why shouldn’t dyeing your amor be permanent? Unless you want players to pay via micro-transactions for permanent armor colours I guess.</li>
<li>We’ve had <em>several</em> hours to be amazed by the Isle of Dawn during the introductory hours. Please refrain from making the pegasus fly all over it again and make it head straight through your <em>Star Gate</em> imitation.</li>
<li>For heaven’s sake, make the armor preview discoverable ingame! Put it into the help section <sup id="fnref:help"><a class="footnote-ref" href="#fn:help">6</a></sup> or armor remodelers’ dialogue. I had to google for several minutes to find out that the key combination is CTRL + RIGHT CLICK.</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<blockquote>
<p>It is worrying that there was so much cynicism and “been there, done that” attitude before the game has even launched. ~<a href="http://www.gamespot.com/users/Bozanimal/show_blog_entry.php?topic_id=m-100-25980868">Bozanimal</a> </p>
</blockquote>
<p>I’ll probably not be paying for this game, though I might give it a second look during the open beta and might even write a little follow-up article. You should however checkout <a href="http://www.gamespot.com/users/Bozanimal/show_blog_entry.php?topic_id=m-100-25980868">this blog post</a> I came across which just happens to point out how disappointing in terms of lore and devoid of replay value TERA is.</p>
<!-- attachment -->
<div class="footnote">
<hr>
<ol>
<li id="fn:castanic">
<p>Former demons, I gather. Have horns, tattoos, the skimpiest clothing, dry humor. May have red hair. Run stupid. Huge range of skin tones. Don’t have ridiculously oversized breasts. Are smaller than humans and high elves. <a class="footnote-backref" href="#fnref:castanic" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:elves">
<p>May I call them breast wonders? Also: may not have red hair, look rather generic, stand rather silly and have some hairstyles wish are nearly indistinguishable from each other. Abundance of hair colors which look frighteningly similar. <a class="footnote-backref" href="#fnref:elves" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:red">
<p>That’s because I find humans rather boring and they interestingly may not have red hair. That’s a minus. <a class="footnote-backref" href="#fnref:red" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:baraka">
<p>But those are genderless colossi of stone (?) anyway. <a class="footnote-backref" href="#fnref:baraka" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
<li id="fn:mac">
<p>A concept which is lifted from pre-Lion OSX. <a class="footnote-backref" href="#fnref:mac" title="Jump back to footnote 5 in the text">↩</a></p>
</li>
<li id="fn:help">
<p>The help section is quite lacking in several departments. Also it suffers from the bad UI like few other windows do. It has to split lessons with very little text into several slides and even though the text is tiny, it is in a scrollable compartment of the window. As far as I remember it’s also lacking a “search topic” feature. <a class="footnote-backref" href="#fnref:help" title="Jump back to footnote 6 in the text">↩</a></p>
</li>
</ol>
</div>Thoughts on Mass Effect 32012-04-19T03:57:21+02:002014-03-12T13:11:50+01:00Alexander Skibatag:ghostlyrics.net,2012-04-19:/thoughts-on-mass-effect-3.html<p><strong>Warning:</strong> Contains plot details for <em>Mass Effect 2</em> and <em>Mass Effect 3</em>. Stop reading if you want to enjoy those games without prior knowledge.</p>
<h2 id="ending-the-fun">Ending the fun</h2>
<p>By now you might’ve seen that everybody and their mum complain about ME3’s ending. That it didn’t reveal enough details …</p><p><strong>Warning:</strong> Contains plot details for <em>Mass Effect 2</em> and <em>Mass Effect 3</em>. Stop reading if you want to enjoy those games without prior knowledge.</p>
<h2 id="ending-the-fun">Ending the fun</h2>
<p>By now you might’ve seen that everybody and their mum complain about ME3’s ending. That it didn’t reveal enough details. That it wasn’t sophisticated enough. That it wasn’t a perfect match as the conclusion of an epic trilogy. I’m looking at both my friends Leonhard and Thomas here.</p>
<p>The game basically offers three different endings with two distinct flavors. There are the options to <strong>destroy the reapers</strong>, <strong>merge organic and synthetic life</strong> and <strong>control the reapers</strong> (from best to worst) as well as a distinction if you <strong>saved</strong> or <strong>destroyed the Collector’s base</strong> in ME2.</p>
<p>Leonhard got the “mediocre” ending, also called “synthesis” in which organic and synthetic forms of life are merged. In his mind that was actually the best ending considering the outcome for EDI and Joker, who get to continue their relationship, and for life in general, since it seems like a great step in evolutionary terms. <em>Too bad that Bioware doesn’t agree with this point of view.</em> Therefore this ending isn’t considered the “best” and my friend was upset with the way Bioware handled his view of possible evolution in an imaginary scenario. </p>
<p>I don’t actually remember what Thomas told me about his choice for the ending but I clearly remember him being disappointed when talking to me about how meaningless your choices were. Although he used some rather ominous terms to describe his findings at that time in order not to ruin my surprise when playing.</p>
<p><del>Personally, I have not yet seen any of the endings, although my <em>Total Military Strength</em> is nearly enough to be able to choose the best ending when the issue arises.</del> Right now I’ve <a href="http://masseffect.wikia.com/wiki/Shepard#Fate">looked up</a> the possible outcomes and also don’t consider any option the best.</p>
<h2 id="dissolving-conflict">Dissolving conflict</h2>
<p>However, I found something else rather baffling. The entire Mass Effect series is a game that - in my opinion - is very much about choice. The decisions you make define more or less the state of the galaxy which is a concept I am rather fond of. Sometimes you’d like to reverse your decisions though. I always found myself being a friendly and peacemaking person when I’m in Commander Shepard’s (lady-)boots. The universe in which I live is mostly peaceful and <em>does not</em> try to slaughter each other at every opportunity. I also don’t shoot every guy <sup id="fnref:girl"><a class="footnote-ref" href="#fn:girl">1</a></sup> in the head just because I don’t agree with them. Unless there’s no other way, but many times there will be another way, for I am a charming person whose charisma has often managed to solve a situation without casualties. </p>
<p>So when I realized that the quarians had gone to war with the the geth and the geth were forced to accept the help of the reapers in order to survive I was displeased, but according to <a href="http://gaming.stackexchange.com/questions/55146/how-do-i-unite-the-geth-and-the-quarians">some research</a> it was possible to keep them from tearing each others’ hearts out <sup id="fnref:geth"><a class="footnote-ref" href="#fn:geth">2</a></sup>. There was just major problem. I knew I rewrote the geth in ME2 thinking they might be allies during the fight in ME3 <sup id="fnref:heretics"><a class="footnote-ref" href="#fn:heretics">3</a></sup>. I knew I successfully defended Tali at her trial. The only variable I had to consider was wether I solved the conflict between Tali and Legion in ME2 or sided with one of them. Unfortunately I seem to have done that and there’s no way my actions in ME3 can make up for that. So I won’t be able to prevent them from war. However I don’t want to take sides in this idiotic conflict since I have friends on both sides of the battlefield.</p>
<p>That means I will have to play the whole of ME2 again in order to change one tiny decision. I definitely won’t change my decision to rewrite instead of destroy the heretic geth since they are a great war asset. And judging from experience a complete run of ME2 with almost every DLC and full completion took me around 17 hrs on Insanity when trying the last time. This should be fun. Unless - and that’s the reason I have to do this crap again - I have too little paragon points again in order to stop Legion and Tali from arguing in ME2. Meh.</p>
<p>On the other hand I might save my the cerberus crew in ME2. <em>Or not, since I enjoy Legion’s company during all the side missions.</em></p>
<div class="footnote">
<hr>
<ol>
<li id="fn:girl">
<p>Or girl, for that matter <a class="footnote-backref" href="#fnref:girl" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:geth">
<p>Make that CPUs for the geth <a class="footnote-backref" href="#fnref:geth" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:heretics">
<p>They are, but it’s not a good starting point for peace <a class="footnote-backref" href="#fnref:heretics" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>Media Recap Precursor (April 2012)2012-04-06T23:03:38+02:002014-03-12T13:11:15+01:00Alexander Skibatag:ghostlyrics.net,2012-04-06:/media-recap-precursor-april-2012.html<p>This time I’ll just be throwing up some random thoughts.</p>
<ul>
<li>The plan for the Linux Days 2012 of Graz is final. I’ve discovered that our workshop (with small presentation) will be held before noon. <em>How do I put this…</em> I don’t think that’s going to improve …</li></ul><p>This time I’ll just be throwing up some random thoughts.</p>
<ul>
<li>The plan for the Linux Days 2012 of Graz is final. I’ve discovered that our workshop (with small presentation) will be held before noon. <em>How do I put this…</em> I don’t think that’s going to improve my performance.</li>
<li>I’ve recently <a href="http://www.trueachievements.com/newsitem.aspx?newsitemid=8001">won</a> a competition over at one of my two preferred Xbox 360 news sources and received two games. I’ve only looked into <em>JASF</em> yet, not into <em>Birds of Steel</em>. To be honest that might take a while since I’ve now received my copy of <em>Mass Effect 3</em> and ordered <em>Deus Ex: Human Revolution</em> really cheap.</li>
<li>I’ll be starting to catch up with my reading starting from Monday and <em>might</em> write a review of Susan Cain’s <em>Quiet</em>, a book which I think I learned a lot from.</li>
<li>You might find me online playing <em>Mass Effect 3</em> during the next month.</li>
</ul>
<p>But before I jump head first into ME3 I need to elaborate on my initial thoughts of JASF so I won’t forget to post them.</p>
<p>Before I even begin I want to clarify that I’m aware of the difference in budget to AAA dogfighter titles like the <em>Ace Combat</em> or <em>H.A.W.X.</em> franchises. So far I’ve enjoyed my trip to Genericstan as Razor, a pilot from Generic Western Coalition. I didn’t pay that much attention to the story since the presentation is occasionally kind of poor. Where triple A titles would’ve placed a nicely rendered cutscene, JASF - <em>which I continuously want to spell JANE</em> - strikes you with a <a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/WallOfText">wall-of-text</a>. It’s not as bad as it sounds though, as the WOT will be read to you by one of the voice actors which uses this accent where I’m never sure if it just sounds cheesy to me or if it really is. Also they are angry about the aggressive force but on the first opportunity to lash out all you hear is “glorious president” this and “glorious president” that even though he gave priority to snatching the enemy’s oil fields instead of disabling their WoMD.<br>
One thing that caught my eye was the jerky scrolling of the WOT, even though it scrolled smoothly when in auto-scroll (voice is reading) mode.
I’m not quite sure about the latest games from AC and HAWX but the last ones I’ve played (<em>Ace Combat: Fires of Liberation</em> and <em>H.A.W.X. 1</em>) didn’t have in-flight loading screens when updating mission objectives. That is an <strong>immersion breaking annoyance</strong>.<br>
There’s one more thing. I’m not sure if it’s my eyes or if it’s a bug in the game but sometimes it looks if my cockpit doesn’t have a glass dome. It seems as if my head is out in the open during flight <em>which would be bad</em>.</p>Image Dump: Mass Effect Datapad2012-03-21T12:05:54+01:002014-02-16T21:01:49+01:00Alexander Skibatag:ghostlyrics.net,2012-03-21:/image-dump-mass-effect-datapad.html<p><img alt="Mass Effect Datapad" src="/images/mass-effect-3/ImageDump-MassEffectDatapad.png"></p>
<p>Please, let me demonstrate a part of the wrongness of <em>Mass Effect Datapad</em> for iOS. <sup id="fnref:shot"><a class="footnote-ref" href="#fn:shot">1</a></sup> </p>
<ol>
<li>The iPad screen is huge and you are <em>still</em> unable to get 10 updates in there without having the user scroll? This is ridiculous. I’m reminded of Krystian’s commentary on <em>Mass Effect …</em></li></ol><p><img alt="Mass Effect Datapad" src="/images/mass-effect-3/ImageDump-MassEffectDatapad.png"></p>
<p>Please, let me demonstrate a part of the wrongness of <em>Mass Effect Datapad</em> for iOS. <sup id="fnref:shot"><a class="footnote-ref" href="#fn:shot">1</a></sup> </p>
<ol>
<li>The iPad screen is huge and you are <em>still</em> unable to get 10 updates in there without having the user scroll? This is ridiculous. I’m reminded of Krystian’s commentary on <em>Mass Effect 1</em>‘s interface fails.</li>
<li>The + Button links to facebook and twitter? What for? To see more? Why do we even pull @replies without context? Where does this whole screen make any sense?</li>
<li>I especially like the “Show more” button. I haven’t tried it on the iPhone, but on the iPad it isn’t clickable. It’s simply text saying “show more” without any interaction. Great. /sarc</li>
</ol>
<div class="footnote">
<hr>
<ol>
<li id="fn:shot">
<p>The Screenshot above is taken from the iPad version. <a class="footnote-backref" href="#fnref:shot" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Media Recap Precursor (March 2012)2012-03-19T22:23:00+01:002014-02-16T21:00:05+01:00Alexander Skibatag:ghostlyrics.net,2012-03-19:/media-recap-precursor-march-2012.html<p><em>Notebook dump incoming. Preparing data stream…<br>
streaming…</em></p>
<ul>
<li>Ron sent me <a href="http://www.youtube.com/watch?v=Hzgzim5m7oU">this great video</a> about how words can make a considerable difference depending on what exactly is said.</li>
<li>There’s an adorable letter from a cool, nerdy uncle to his niece <a href="http://blog.unitedheroes.net/archives/p/4396/">introducing her to the internet</a>.</li>
<li>A tipp on lifehacker <a href="http://lifehacker.com/5889485/folder-options-imdb-and-quick-shut-down">mentions …</a></li></ul><p><em>Notebook dump incoming. Preparing data stream…<br>
streaming…</em></p>
<ul>
<li>Ron sent me <a href="http://www.youtube.com/watch?v=Hzgzim5m7oU">this great video</a> about how words can make a considerable difference depending on what exactly is said.</li>
<li>There’s an adorable letter from a cool, nerdy uncle to his niece <a href="http://blog.unitedheroes.net/archives/p/4396/">introducing her to the internet</a>.</li>
<li>A tipp on lifehacker <a href="http://lifehacker.com/5889485/folder-options-imdb-and-quick-shut-down">mentions</a> that you can click and scroll to change the volume while over the volume tray icon in Windows. Well, that’s the same for OS X. <em>But I really miss the behaviors of GNOME in that line, because you just need to hover over the icon instead of clicking </em><em>and</em><em> scrolling.</em></li>
<li>While playing Assassin’s Creed: Revelations there were a few occasions where I wasn’t quite sure why the game didn’t do what I wanted it to do. For some hints about bomb crafting <a href="http://www.gamefaqs.com/ps3/628357-assassins-creed-revelations/answers?qid=302920">this thread</a> at GameFAQs was quite helpful.</li>
<li><em>Pre-Purchase now: Yesterday</em> must be one of the best headlines I’ve heard in a while. It’s <a href="http://store.steampowered.com/news/7529/">from Steam’s feed</a>.</li>
<li>In another cash grab Capcom <a href="http://www.xbox360achievements.org/news/news-11020-Street-Fighter-X-Tekken-DLC-Characters-Already-on-the-Disc--New-DLC-Outfits-Revealed.html">already shipped</a> “additional content” on the disk and only sold codes to unlock the content separately. <em>How nice of them</em>. /sarc</li>
<li>I might be visiting the <a href="http://www.mangolds.at/index.php?cmd=s1&id=197">Zero Waste Fest!2012</a> in May.</li>
</ul>
<p><em>processing…</em></p>
<p>Recently I’ve read James Swallow’s <a href="http://www.shelfari.com/books/16728581/Deus-Ex-The-Icarus-Effect"><em>Deus Ex: Icarus Effect</em></a> and Nate Kenyon’s <a href="http://www.shelfari.com/books/7495373/Spectres"><em>StarCraft Ghost: Spectres</em></a>. Both were excellent sci-fi themed books that fit nicely to the images the video games they belong to painted. Unfortunately I was lazy enough not to read the description of the Deus Ex book before buying which led to me wondering where Adam (the most recent game’s protagonist) was. Well, the book isn’t about Adam. It’s more or less set around the events of the game. Meaning, some of it takes place before the game and some during the game as far as I understood it from not having played the game yet.</p>
<p>In other news the situation at our university is in total disarray right now but I’ll probably rant about that in a separate post where I need to give vent to my anger.</p>
<hr>
<p><strong>Update:</strong> It seems I had a little problem with the links earlier. Sorry about that.</p>Tribeka: Graz's young coffee culture2012-03-17T21:36:54+01:002014-04-07T09:40:09+02:00Alexander Skibatag:ghostlyrics.net,2012-03-17:/tribeka-grazs-young-coffee-culture.html<p>If you’ve never been to <a href="http://www.tribeka.at/">Tribeka</a> while being in Graz, you’ve seriously missed something. Tribeka is the most famous brand of coffee and in-style café in Graz. It’s a meeting point for businessmen, students and hippsters alike. The cultural variety of people you’re going to meet …</p><p>If you’ve never been to <a href="http://www.tribeka.at/">Tribeka</a> while being in Graz, you’ve seriously missed something. Tribeka is the most famous brand of coffee and in-style café in Graz. It’s a meeting point for businessmen, students and hippsters alike. The cultural variety of people you’re going to meet when enjoying your hot beverage or cool juice at Tribeka alone is enough to be impressing alone, but during the day it also manages to leave an astonishing impression of open-mindedness amongst its visitors.</p>
<p>Graz houses three different locations of the Tribeka.</p>
<h3 id="at-the-griekai">at the Grießkai</h3>
<p>There’s one at the Grießkai, which is the bigger one of the two I’ve yet visited. It’s lower floor has quite some modern chairs and tables, as well as some high bar-like tables with the corresponding high seats. There’s a long waiting table and a glass case containing all sorts of delicious treats for a sweet tooth. Usually there’s already a line of at least two people in front of you even though the waiters and waitresses are always busy. Sometimes maybe a little busy with themselves but this is a case where I really don’t mind since I feel in this venue that behavior actually even improves the atmosphere.</p>
<p>The upper floor houses a lot more tables and chairs. This is - combined with the free WiFi (<em>I’m not using that. At least not without VPN.</em>) - one of the reasons that I’ve seen a lot of workers with laptops and tablets there. During the holidays it’s mainly a students’ meeting point since they’re not in school. Or pretty much all other days it’s a healthy variety of university students (more), business people (less) and walk-in customers. I’m rather sure I’ve also seen some designers and journalists there according to the stuff on their screens (<em>no, I’m not gonna pretend I’m not curious</em>).</p>
<p>You can get that weird feeling sitting there. This belonging and not belonging thing. When you’re among strangers and know you fit right in there. It’s definitely an in-café. So actually I’m still wondering <em>why</em> I get that feeling there. I’m usually far away from mainstream. Maybe it’s the fact that the personnel is around my age that makes me feel comfortable there.</p>
<h3 id="near-the-old-university-of-technology-mandellstrae">near the Old University of Technology / Mandellstraße</h3>
<p>That’s the place I visit more frequently than the first place. It’s not exactly close to my home (about 10 min with the tram) but the closest Tribeka. And since their Hot White Chocolate is mind-bogglingly delicious <sup id="fnref:white"><a class="footnote-ref" href="#fn:white">1</a></sup> I can definitely imagine being there every day. I mean, I could. I think this place just isn’t as cozy as the other. There’s no second floor and the first one is very crammed with tables and seats - especially during the colder seasons. You might as well sit outside when it’s warmer or take your beverage with you but I think you’re losing a part of the style that way. </p>
<p>Nevertheless you may want to consider it when looking for a nice place to sit down for an hour and have a long chat with some friends, like I recently did with Pete and Matthias.</p>
<p>Judging from the amount of laptop users I’ve seen there I will simply assume there’s also free WiFi at the place.</p>
<h3 id="the-last-refuge">the last refuge</h3>
<p>There’s also a third venue which I haven’t visited yet. I may do that sometime in the future and update this article with my thoughts on that.</p>
<h2 id="conclusion">conclusion</h2>
<p>Tribeka also has its coffee delivered to several restaurants all over Graz (e.g. the <a href="http://restaurant-rondo.at/">Rondo</a>). These restaurants often display this prominently and proudly.</p>
<p>I might not like coffee at all but I can enjoy a great café all the same. Tribeka is part of the student culture that’s very prominent in Graz and should therefor be checked out by visitors to get a feeling for Graz’s coffee culture. </p>
<hr>
<p><strong>Update:</strong> I seem to have some trouble remembering the Markdown syntax lately. This is the second post which had bad links before the update. Even worse, this article was published while it was still unfinished. I’m terribly sorry for that and pulled it. When you read this it will already be the finished version. Again, I’m terribly sorry.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:white">
<p>I haven’t been able to enjoy my white chocolate at another place after being mesmerized by Tribeka’s. It’s quite a shame. <a class="footnote-backref" href="#fnref:white" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Propeller2012-03-11T20:25:28+01:002014-02-16T20:59:46+01:00Alexander Skibatag:ghostlyrics.net,2012-03-11:/propeller.html<p>I’ll say the following upfront: I’ve been a fan of <a href="http://www.propeller.co.at/">the Propeller</a> ever since Leonhard introduced me to it on one of my visits to Graz before I even considered studying here.</p>
<p>The Propeller is a restaurant whose main target group are students - a fact that can easily …</p><p>I’ll say the following upfront: I’ve been a fan of <a href="http://www.propeller.co.at/">the Propeller</a> ever since Leonhard introduced me to it on one of my visits to Graz before I even considered studying here.</p>
<p>The Propeller is a restaurant whose main target group are students - a fact that can easily be guessed by its location <a href="http://maps.google.com/maps?q=Propeller+Kaffeerestaurant,+Zinzendorfgasse,+Graz,+%C3%96sterreich&hl=en&ie=UTF8&sll=37.0625,-95.677068&sspn=60.806372,135.263672&oq=graz,+propeller&hq=Propeller+Kaffeerestaurant,+Zinzendorfgasse,&hnear=Graz,+Styria,+Austria&t=m&z=16">near the Karl Franzens University</a>. It’s not your ordinary dive bar however. The Propeller has something that quite a lot of student’s bars miss: class. Make no mistake, you’re not amongst the high society there nor are you in some elitist club. You’re in a laid back restaurant that manages to combine class, good food and a relaxing atmosphere into an ambiance that I enjoy quite a lot. </p>
<p>Leonhard once called it “an uptown student’s restaurant” <sup id="fnref:uptown"><a class="footnote-ref" href="#fn:uptown">1</a></sup> which I think is a pretty accurate description. It’s perfectly fine to show up there with your friends, your family or your date. I can pretty much say that everyone I’ve dragged there has had a good, lasting impression.</p>
<p>For example when my father was in town for a weekend he had dinner with me on the first day there and was positively surprised - <em>I get the feeling that student’s restaurants are said not to be particularly great most of the time.</em> The second day of his visit was spent with his wife and some friends of hers eating at a hotel restaurant <em>if I remember that correctly</em>. According to him the food at the hotel was no match for the Propeller.</p>
<p>I’ve been there many, many times and there has only been one occasion when I wasn’t satisfied. While I can generally recommend their “Create your own wok” thing I’d advise you to stay off the shrimps. Not that they aren’t delicious. It’s just my humble opinion that 3 tiny shrimps for 3€ are not really a good deal.</p>
<p>Anyway. Most of my visits were for their excellent “Schuberpfandl”. This highly recommendable dish consists of pork fillet, <a href="http://en.wikipedia.org/wiki/Sp%C3%A4tzle">Spätzle</a>, mushrooms and cream sauce and is served in a pan. I am particularly fond of the Spätzle-cream sauce combination. <em>Also the amount of food in the pan is exactly right for my appetite.</em></p>
<p>Recently I’ve been there with Matthias for one of their <a href="http://www.propeller.co.at/index.php?id=71">specials</a>. The Indian weeks didn’t only sound great but also made for an astoundingly refreshing change from the dishes I usually order there. </p>
<p>While I had the Chicken a la Madrocas <sup id="fnref:mine"><a class="footnote-ref" href="#fn:mine">2</a></sup> - marinated with a Madrocas curry spice mix and aromatic rice - Matthias ordered the Tandoori Chicken with rice. We generally agree that the rice was superb and the meat very tasty. Another thing that’s important to mention is the quite short time it took for the food to arrive - <em>another positivum</em>. While I didn’t find the lack of additional side dishes like vegetables or a creamy sauce that bad, Matthias seems to think that the Tandoori Chicken is not usually served this way. On the other hand we both agree again that for a theme weeks offering the whole thing was fine.</p>
<p>You may want to check out <a href="http://www.propeller.co.at/">their website</a> for some pictures of the location - <em>If you’re on a device without Flash, you’re not missing anything short of an annoying animated text</em>. I was also quite sad that the link for a newsletter is not working. When clicking I’m only presented with a blank page.</p>
<p>I also want to add that since the last but one time I was there they seem to have set up separate smoker and non-smoker areas which is a huge plus.</p>
<p>One more thing: I’ve heard a lot about their lunch buffet which seems to offer a good variety of dishes and is reasonably priced. However I’ve only once made it there in time for the buffet in a about two and a half years of studying in Graz. Unfortunately I wasn’t in the mood for something big that time and went with a salad.</p>
<p><strong>Should you visit this place: Yes.</strong></p>
<div class="footnote">
<hr>
<ol>
<li id="fn:uptown">
<p>mind you, I’m not sure if I translated that correctly. <a class="footnote-backref" href="#fnref:uptown" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:mine">
<p>Hühnerfilet Madrocas Art: mit Duftreis mariniert mit Madrocas-Curry-Gewürzmischung <a class="footnote-backref" href="#fnref:mine" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Linux Days preparation: Kernel Panic!2012-03-10T14:09:56+01:002014-02-16T21:06:42+01:00Alexander Skibatag:ghostlyrics.net,2012-03-10:/linux-days-preparation-kernel-panic.html<p>I’m already looking forward to this year’s <a href="http://linuxtage.at/">Linux Days of Graz</a> since I’ve decided that I’m going to help with the amateur course. I’ve maded that decision last year after having attended half of the course which was given by Manfred as well as Bernhard …</p><p>I’m already looking forward to this year’s <a href="http://linuxtage.at/">Linux Days of Graz</a> since I’ve decided that I’m going to help with the amateur course. I’ve maded that decision last year after having attended half of the course which was given by Manfred as well as Bernhard and Thomas. Since they had been talking about wanting to give a course for intermediate users as well there was lots of room for an additional presenter <em>which would be me</em>.</p>
<p>Of course, after having some slight repercussions during last year’s course (read: the <a href="http://ubuntu.com/">Ubuntu</a> partner repository not being enabled on a live CD and therefor not being able to install <a href="http://www.skype.com/intl/en/get-skype/on-your-computer/linux/">Skype</a> for demonstration purpose) we want to make sure we have everything ready and tested twice <em>or even thrice</em>.</p>
<p>However, since my primary machine is a Macbook Air these days, I’ll have to prepare something that houses the required Ubuntu installation for the Linux Days. That basically gave me 3.5 options:</p>
<ul>
<li><a href="https://www.virtualbox.org/">Virtualbox</a> (open-source, except some proprietary extensions <sup id="fnref:ext"><a class="footnote-ref" href="#fn:ext">1</a></sup>,
free, preferred)</li>
<li><a href="http://www.parallels.com/products/desktop/">Parallels</a> (commercial, complex integration with OS X, 30 day trial)</li>
<li><a href="http://www.vmware.com/products/fusion/overview.html">VMware Fusion</a> (commercial, 30 day trial)</li>
<li>dual booting (not in consideration, rather: <em>use a different machine</em>)</li>
</ul>
<p>As you can easily see the obvious choice was Virtualbox. Usual procedure: Download, install, install extensions, mount iso, roll. Except for the “roll” part. For some reason the sane defaults didn’t do it. To enable network access I had to switch the network options from <code>NAT</code> to <code>bridged</code> to be able to get a connection.</p>
<p>After having solved that tiny problem I was going to test the installation. I rushed through the installer’s questions and went away from my laptop for a while only to come back seeing that I was logged out. Unfortunately that only offered one conclusion: Something bad had happened. I logged in, went to <code>Console</code> and found that the Macbook had restarted after a Kernel Panic. Damn.</p>
<p>So I had to consider the other options again. Checking the date gave me a little more time however, since the Linux Days would otherwise not be included in the 30 day trial. I’ll also try Virtualbox again without Oracle’s extensions to see if that works better.</p>
<p><em>Interestingly though Virtualbox seemed to require less resources than older versions, since the fan in my laptop wasn’t constantly running on full speed.</em></p>
<p>Have little doubt. I might not be able to guarantee that this year everything will work perfect. Nevertheless we will try to prepare everything as well as we can given that there’s work for university and us having social lives too.</p>
<hr>
<p><strong>Update:</strong> Fixed typo in title</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:ext">
<p>All platforms Support for USB 2.0 devices, VirtualBox RDP and PXE boot for Intel cards. <a class="footnote-backref" href="#fnref:ext" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Artificial prolonging of gameplay time2012-03-04T13:55:49+01:002014-02-16T21:04:46+01:00Alexander Skibatag:ghostlyrics.net,2012-03-04:/artificial-prolonging-of-gameplay-time.html<p>The estimated length of a game is something that can often tell you certain things about the genre of a game, at least that convention was true in the past. <em>In the good old times of the Playstation 1 the content length could also be estimated by the amount of …</em></p><p>The estimated length of a game is something that can often tell you certain things about the genre of a game, at least that convention was true in the past. <em>In the good old times of the Playstation 1 the content length could also be estimated by the amount of disks needed, but that’s another story.</em></p>
<p>Most of the time when there was a discussion about a game’s length it referred to the <strong>time needed for a full run</strong> without loitering and <strong>completion of a reasonable amount of sidequests</strong> if existing. This estimate of gameplay length was intended as a guide to guess how long they will need themselves. Of course, given the tendency that a lot of games incorporate minigames and other optional possibilities that guesstimate is rather inaccurate. There’s nothing wrong with that. </p>
<p>What <strong>is wrong</strong> is the tendency of artificially prolonging gameplay time via activities that the majority of players won’t find enjoyable. Often these activities feel a bit disconnected from the main gameplay and/or the plot. Some of you might argue that this is the way that subscription based games <sup id="fnref:sb"><a class="footnote-ref" href="#fn:sb">1</a></sup> make their money. Artificially prolonging gameplay time may not be a nice tactic, but for this kind of service it’s the standard business tactic.</p>
<p>So, what I’m trying to say is that the artificial prolonging of gameplay time is indeed detrimental to a single player game. The more story driven it is the more this rule applies. </p>
<p>If you need proof for yourself you can check out Mass Effect 2 (ME2) and Assassin’s Creed: Revelations (ACR). Both of those fall horribly into this trap.</p>
<p>ME2 has the minigame in which you are mining for minerals via launching probes onto various planets (read: pressing one button over and over again) and scanning planets for the minerals (read: moving an infuriatingly slow target reticle with the analog sticks or the mouse). Sure, the minigame isn’t necessary to advance the story, but you’ll need the upgrades for weapons, etc. in order not to die.</p>
<p>ACR has even two of those atrocious flaws.</p>
<p><strong>The first is called “Den Defense”</strong>. It’s basically a built in tower defense minigame that does nothing in terms of plot nor is it particularly good in terms of equipment or monetary revenue. Add to that the fact that the camera angle is a pain in the arse and you have something you will want to avoid at all costs - <em>since losing one of those minigames has annoying consequences.</em> Furtunately Ubisoft gives you an option to avoid those nearly entirely, making them pointless in the process, as <a href="http://www.escapistmagazine.com/videos/view/zero-punctuation/5114-Assassins-Creed-Revelations">Yathzee pointed out</a>. <sup id="fnref:fl"><a class="footnote-ref" href="#fn:fl">2</a></sup></p>
<p><strong>The second flaw is “Desmond’s Journey”.</strong> Aside from the fact that this must be Ubisoft’s try to breath some personality and background into one of the most generic, bland and plain boring characters in recent gaming history the first person puzzle game sequences suck. They are counterintuitive, frustrating and incredibly clunky when compared to the main gameplay. Given that they proved to be almost unanimously hated on the Internet I’m still amazed that Ubi thought it a good idea to release additional content which prominently features the game’s worst mechanic - which would be <a href="/re-ubisoft-about-the-lost-archive.html">the first person jumping/puzzling in Assassin’s Creed Revelations</a>.</p>
<p>Now, I don’t say that minigames shouldn’t be done. Rather, my point is that the developer should have a clear focus of what makes the game great and how the minigames relate to that as well as how to advertise the distracting content ingame. Be aware of your strengths and don’t let the unimportant things take more time away than necessary from the core gameplay experience.</p>
<hr>
<p><strong>Update:</strong> Typo correction in title</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:sb">
<p>mainly MMOs use that practise <a class="footnote-backref" href="#fnref:sb" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:fl">
<p>requires Flash plugin or site membership <a class="footnote-backref" href="#fnref:fl" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Multiplayer vs. Immersion2012-03-02T10:14:42+01:002014-02-16T21:03:43+01:00Alexander Skibatag:ghostlyrics.net,2012-03-02:/multiplayer-vs-immersion.html<p>When I am craving content and narration I’m a very impatient man. I don’t have time for battles in video games that don’t serve to strenghten the plot and I don’t want to wait for an event to start or for a slot on a server …</p><p>When I am craving content and narration I’m a very impatient man. I don’t have time for battles in video games that don’t serve to strenghten the plot and I don’t want to wait for an event to start or for a slot on a server to be available in an MMO. There’s something that’s bugging me when I’m in Multi Player sessions:<br>
I feel slowed down. More so than necessary.</p>
<p>That’s not to say that I won’t enjoy playing a game with friends every once in a while - I do. But the more heavy on story a game is the less I’m going to enjoy playing it with friends. I’ll give you an example.</p>
<p>I bought <a href="http://www.borderlandsthegame.com/">Borderlands</a> on STEAM when it was discounted from 35€ to 7,5€. I did so to play together with Ron and Manuel. Aside from the fact that that was maybe even half a year ago and I still have yet to play with the latter, I’ve completed the story once with Ron, as well as two of four DLC packs. Now did I enjoy the time? Yes and no.</p>
<p><strong>Yes</strong>, because it was nice having backup in tense situations, having someone to talk to while fighting through all those hordes of enemies and sharing some of the best moments of Borderlands is an experience that shouldn’t be missed.</p>
<p><strong>No</strong>, because I have a hard time waiting for my friend to finish shopping. Or re-equipping or changing his style of play - which he does far more often than I do. <em>I’m pretty much a constant gameplay wise. I’ll choose a style that fits what I want my character to be and stick with it for the game.</em> I particularly hate the discussions that come up when changing areas.</p>
<blockquote>
<p>Are you finished yet?<br>
No.<br>
Why not?<br>
Because I’m not sure which weapon to take.<br>
Again?</p>
</blockquote>
<p>Aside from me losing my patience from time to time, it was a good time. I’m also rather sure that I have my own weaknesses that I’m not aware of right now.</p>
<p>The bigger thing that is happening in my brain is an internal argument wether I do really enjoy this. I’m very much a Single Player person who’s sole argument for playing a game often is the story and not the gameplay. However, for such a story to have an emotional effect on you, you need to live, or at least feel the story. You have to be immersed in the fictional world presented to you. That immersion is lost when you’re on Teamspeak, Skype, Mumble (name your poison) due to the fact that the other person is generally not willing to roleplay. To cut a long story short: Someone yelling “LOL” into your ear during cutscenes may very well screw up the experience for you, depending on your own playstyle and your bullshit tollerance.</p>
<p>And finally: <strong>Stop messing with my targets while I’m aiming. I hate it when its weak points move due to you shooting with a rapid firing weapon.</strong></p>RE: Ubisoft about 'The Lost Archive'2012-02-29T09:05:55+01:002014-02-16T21:02:11+01:00Alexander Skibatag:ghostlyrics.net,2012-02-29:/re-ubisoft-about-the-lost-archive.html<p><a href="http://www.trueachievements.com/n7688/get-lost-in-the-archive-of-ac-revelations.htm">Ubisoft about the new single player DLC for Assassin’s Creed: Revelations:</a></p>
<blockquote>
<p>Explore the mysterious pasts of Subject 16 and Lucy Stillman in 2 hours of all-new single player content, using the innovative narration style and puzzle-platforming gameplay pioneered in Assassin’s Creed Revelations’ present-day Desmond sequences.</p>
</blockquote>
<p>Considering that the …</p><p><a href="http://www.trueachievements.com/n7688/get-lost-in-the-archive-of-ac-revelations.htm">Ubisoft about the new single player DLC for Assassin’s Creed: Revelations:</a></p>
<blockquote>
<p>Explore the mysterious pasts of Subject 16 and Lucy Stillman in 2 hours of all-new single player content, using the innovative narration style and puzzle-platforming gameplay pioneered in Assassin’s Creed Revelations’ present-day Desmond sequences.</p>
</blockquote>
<p>Considering that the modern day sequences with Desmond are widely regarded as the worst part of the game, it is hard to understand why Ubi would expand on that. Dare I say that those missions might be easier to create since they take less new video content? </p>
<p>Anyway, the part I quoted is easily the most cynical description of video game content that I’ve seen lately, especially by a game’s own developer.</p>
<p><em>In my opinion the modern day sequences were a frustrating, infuriating and way less interesting part of the game than the renaissance sections and I will not be giving Ubi my money for those. Even though I initially said that I would pay for more of Assassin’s Creed. I meant more of the </em><em>better</em><em> part, not more of the worse part.</em></p>
<p>I think one of the commenters (Ghoul Vs Barbra) on trueachievements.com had exactly the right answer to sum this mess up:</p>
<blockquote>
<p>Yep, that’s what all of us have been clamouring for. I just pray the next DLC pack is going to be nothing but the innovative Den Defense mode.</p>
</blockquote>TRAUMA2012-02-28T09:30:20+01:002014-02-16T20:41:26+01:00Alexander Skibatag:ghostlyrics.net,2012-02-28:/trauma.html<p><a href="http://store.steampowered.com/app/98100/">TRAUMA</a>. Right now my mind is racing to find an acceptable excuse why I’ve put off writing about this game for this long a time. <sup id="fnref:e"><a class="footnote-ref" href="#fn:e">1</a></sup></p>
<p>I first came across TRAUMA after having subscribed to the blog <a href="http://gamedesignreviews.com/">gamedesignreviews</a> because I thought that Krystian Majewski’s <a href="http://gamedesignreviews.com/reviews/mass-effect-interface-fail/">trilogy</a> about the shortcomings …</p><p><a href="http://store.steampowered.com/app/98100/">TRAUMA</a>. Right now my mind is racing to find an acceptable excuse why I’ve put off writing about this game for this long a time. <sup id="fnref:e"><a class="footnote-ref" href="#fn:e">1</a></sup></p>
<p>I first came across TRAUMA after having subscribed to the blog <a href="http://gamedesignreviews.com/">gamedesignreviews</a> because I thought that Krystian Majewski’s <a href="http://gamedesignreviews.com/reviews/mass-effect-interface-fail/">trilogy</a> about the shortcomings of Mass Effect’s interface design <sup id="fnref:sequel"><a class="footnote-ref" href="#fn:sequel">2</a></sup> was interesting. Somewhere between all the other posts Krystian wrote about the indie game that he was developing, posted <a href="http://gamedesignreviews.com/scrapbook/trauma-to-the-eleven11/">about its progress</a> - about the good and bad times.</p>
<p>I was curious, being my ever curious self for one and wanting to make games myself too. Also there are a whole lot of other quality articles on that site but that is not what this article is about. After having followed the process quite some time there came the <a href="http://gamedesignreviews.com/scrapbook/trauma-beta-is-out/">beta</a>. For a reason I can’t remember I wasn’t on the Internet at that time - when I saw he started a private beta for the game I immediately mailed him with a request. I was granted one. <em>I still have that mail.</em></p>
<p>At that time I was very excited about the fact of being in a private beta - probably more than about the game. Anyway. I have to admit something very evil right upfront: <em>My first thought while starting up TRAUMA was “meh. Flash.”</em> Enough with the prejudices though. </p>
<p>The essence of TRAUMA’s story is easy to grasp. There’s a girl who had a car accident and is now in hospital where she has four recurring, metaphor-laden dreams. You have to experience those dreams and help her through them, all the while getting to think about the questions that are asked by the almost ghostly voice-over as well as those that your own mind will invariably make up while playing. Really, it’s a sort of journey - not only through the girl’s dreams as also through thoughts and doubts that might open up in your own mind.</p>
<p>I found out about the movement by either clicking on different photos or drawing those beautiful light symbols. The game gives little hints how you are supposed to solve certain situations and I’d argue that from a gameplay point of view everything is obvious, if not always intuitive. I never struggled to grasp any of the concepts which can be boiled down to “which tool solves which situations” <sup id="fnref:l"><a class="footnote-ref" href="#fn:l">3</a></sup>. TRAUMA is not about the puzzling. TRAUMA also isn’t about ultrahigh textured graphics either - though Krystian did an impressive job editing all these photos he took himself. TRAUMA, with its surreal atmosphere, its subtle soundtrack, its countless hints that everything you see might just be another metaphor for some deeply troubling thought in the girl’s mind - it has some similarities to the recently released <a href="http://store.steampowered.com/app/203810/">Dear Esther</a> I’d say. It might work better for you if you don’t consider it just another game on your huge pile but as an experience. </p>
<p>It took me about two hours back then to finish the game and dig up every last hidden photo save one. I sent feedback that spoke quite highly about the game, I remember. There came a second beta which was less interesting for me since there were improvements but nothing particularly astonishing that might have blown my mind. Time passed. Fast forward to Gamescom 2011 where I met Krystian during a little break and congratulated him on the release. </p>
<p><em>He’s an interesting person to talk to. He’s nice, polite and interested in many other genres and games than you might think. He’s as prepared to talk about some mainstream titles, movies as well as elaborate on the latest indie hits or events in the dev scene.</em></p>
<p>Several months later I decided to pick my copy - <em>as in virtual copy on STEAM that is</em> - up again and have a second run, just to see what changed from beta to release. Sadly my memory is quite bad and the only thing that I remember - that is very rememberable though - is an improved hint system for collectibles as well as an option to check already found ones without leaving the current level. Still I found the game very enjoyable even during the second time.</p>
<p>So, if the beta has long passed and the release was also some time ago, why do write this article right now? Because Krystian just <a href="http://gamedesignreviews.com/scrapbook/trauma-version-3/">released a new improved version</a> of the game and that made me think you should try the game too.</p>
<p><strong>Should you play this game: Yes.</strong></p>
<div class="footnote">
<hr>
<ol>
<li id="fn:e">
<p>However, even after typing this long post I still don’t know why writing about this game took me so long, sorry Krystian. <a class="footnote-backref" href="#fnref:e" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:sequel">
<p>He has just released a <a href="http://gamedesignreviews.com/reviews/mass-effect-2-massive-interface-fail-revelations/">followup</a> about Mass Effect 2’s interface as well, but I haven’t looked into that yet. <a class="footnote-backref" href="#fnref:sequel" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:l">
<p>That this is not the case for a person rather new to games I could watch myself when demoing the game to a friend of mine. <a class="footnote-backref" href="#fnref:l" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>Media Recap Precursor (End Feb 2012)2012-02-26T21:10:01+01:002014-02-16T20:43:49+01:00Alexander Skibatag:ghostlyrics.net,2012-02-26:/media-recap-precursor-end-feb-2012.html<p>Next edition of Notebook Dump. Ready… aaaaand Action!</p>
<ul>
<li>Symbols that <a href="http://failbook.failblog.org/2012/02/22/funny-facebook-fails-cannot-unsee/">look like men dragging their butts around</a> - Failbook</li>
<li>The Oatmeal <a href="http://theoatmeal.com/comics/game_of_thrones">tried to watch Game of Thrones</a> - The Oatmeal</li>
<li>There’s obiviously demand for a Pokemon Game on iOS <a href="http://arstechnica.com/gaming/news/2012/02/fake-pokemon-yellow-rises-to-no-3-position-on-itunes-app-charts.ars">judging by the success of this fraudulent app</a> (<em>If Nintendo gets around …</em></li></ul><p>Next edition of Notebook Dump. Ready… aaaaand Action!</p>
<ul>
<li>Symbols that <a href="http://failbook.failblog.org/2012/02/22/funny-facebook-fails-cannot-unsee/">look like men dragging their butts around</a> - Failbook</li>
<li>The Oatmeal <a href="http://theoatmeal.com/comics/game_of_thrones">tried to watch Game of Thrones</a> - The Oatmeal</li>
<li>There’s obiviously demand for a Pokemon Game on iOS <a href="http://arstechnica.com/gaming/news/2012/02/fake-pokemon-yellow-rises-to-no-3-position-on-itunes-app-charts.ars">judging by the success of this fraudulent app</a> (<em>If Nintendo gets around to publish one then by all means, count me in on that</em>) - Ars Technica </li>
<li>Maybe games should offer more help to players? <a href="http://arstechnica.com/gaming/news/2012/02/should-games-offer-more-help-when-we-get-stuck.ars">This article</a> elaborates on that topic - Ars Technica</li>
<li>There’s <a href="http://www.macstories.net/stories/the-ios-permission-dialog-dilemma/">an interesting article</a> discussing the growing number of dialog boxes on iOS - Macstories</li>
<li>Students at the FH Salzburg developed a roboter that keeps you company while jogging: <a href="http://www.fh-salzburg.ac.at/no_cache/aktuelles/news/news-detail/news/Und_der_Roboter_joggt_mit/">article in German</a> - FH Salzburg</li>
<li>Enjoy a <a href="http://www.thesartorialist.com/photos/marc-jacobs-fallwinter-2012/">selection of ridiculous hats</a> - The Satorialist</li>
</ul>
<p>Personally I’ve completed the Single Player Achievements for Assassin’s Creed: Brotherhood and Assassin’s Creed: Revelations and finished my playthrough of Revelations. I also enjoyed a bit of Secret Files 2: Puritas Cordis and called back Sheogorath from his vacation in Skyrim. I also played quite a lot of Multi Player in the Mass Effect 3 demo. I even got around to watching a Let’s Play of Star Wars: The Force Unleashed.</p>
<p><del>I’ve come around converting my list of played games to markdown and [uploading it to the site</del>. Somehow I’ve also had time to read Brendan Keogh’s <a href="http://www.shelfari.com/books/25863231/-I-think-theyre-mad-Inside-a-48-hour-battle-to-build-the-best-vi">“I think they’re mad”: Inside a 48 hour battle to build the best video game</a>. I think the whole article was published before on <a href="http://arstechnica.com">Ars Technica</a>, but to be honest, Ars is a website that I’m proud to support, as all of the articles I’ve read so far were really good. <em>That means I’ve no regrets having paid for the ebook on Amazon.</em></p>RE: Webupd8 about Adobe discontinuing Flash on Linux2012-02-25T08:33:09+01:002014-02-16T20:46:35+01:00Alexander Skibatag:ghostlyrics.net,2012-02-25:/re-webupd8-about-adobe-discontinuing-flash-on-linux.html<p><a href="http://www.webupd8.org/2012/02/adobe-flash-for-linux-will-only-be.html">Flash for Linux only in Google Chrome:</a></p>
<blockquote>
<p>According to a blog post by Adobe, after the 11.2 release, Flash Player for Linux will only be available through a new “Pepper” API as a part of Google Chrome, and won’t be available as a separate download anymore. However, Adobe …</p></blockquote><p><a href="http://www.webupd8.org/2012/02/adobe-flash-for-linux-will-only-be.html">Flash for Linux only in Google Chrome:</a></p>
<blockquote>
<p>According to a blog post by Adobe, after the 11.2 release, Flash Player for Linux will only be available through a new “Pepper” API as a part of Google Chrome, and won’t be available as a separate download anymore. However, Adobe will continue to offer security updates for Flash Player 11.2 for Linux for five years.</p>
</blockquote>
<p>Theoretically speaking, the new API is good news. Practically speaking, this means that eventually every non-Google Chrome browser’s plugin official plugin will be outdated.</p>
<blockquote>
<p>Google will provide the “Pepper” Flash Player implementation for all supported Chrome platforms, including Linux (x86/64).</p>
</blockquote>
<p>I see what you did there. Other people would have said “we only support it in Google Chrome.” but obviously “all supported Chrome platforms” sounds much nicer, especially since sloppy reading makes that “all supported platforms”. Oh yeah, and in case anything is still not entirely clear: Nothing besides Google Chrome supports the Pepper API anyway.</p>
<blockquote>
<p>[…] use an alternative like Gnash or Lightspark (which hopefully will become more reliable) […]</p>
</blockquote>
<p>That has to be some kind of elaborate joke of <a href="http://www.webupd8.org/p/contact.html">Andrew</a>. Gnash hasn’t been a valid alternative for as long I can think. <a href="https://launchpad.net/lightspark">Lightspark</a> - though a great and promising project - was as far experimental as it could get, the last time I checked.</p>
<blockquote>
<p>[…] hope that in 5 years, Flash won’t matter and HTML5 will be used everywhere.</p>
</blockquote>
<p>Well, yes, let’s hope. That means the web won’t use proprietary Flash anymore. Will that make the web a more unified place? Yes. Will that make the web a more open place? Probably not.</p>
<p>Why do I assume that the disapperance of Flash will not necessarily lead to a more open web in general? I’m looking at <a href="http://daringfireball.net/2012/01/ima_set_it_straight_this_watergate">proprietary extensions of HTML5 here</a>.</p>Deadly Premonition pt.6 (Conclusion)2012-02-21T10:03:15+01:002014-02-16T20:50:48+01:00Alexander Skibatag:ghostlyrics.net,2012-02-21:/deadly-premonition-pt6-conclusion.html<p>I’ve thought about a little piece to sum up what can be learned from <em>Deadly Premonition</em>. So far I’ve arrived at the following conclusions:</p>
<h2 id="controls">Controls</h2>
<p>“Tank controls” are outdated. You don’t want to use them for controlling a person. You actually don’t want to use them …</p><p>I’ve thought about a little piece to sum up what can be learned from <em>Deadly Premonition</em>. So far I’ve arrived at the following conclusions:</p>
<h2 id="controls">Controls</h2>
<p>“Tank controls” are outdated. You don’t want to use them for controlling a person. You actually don’t want to use them at all. I also assure you that you don’t want to use them if there’s a possible change in the camera angle, like the camera suddenly changing to a position over your head. This change will make the player lose focus for a moment and the momentum is broken since he has to rethink what exactly the game character is facing right now since the point of view is no longer an over-the-shoulder one. If - for a reason I might not be able to imagine and really don’t want to guess - you use tank controls make sure the rest of the game fits this scheme or is that good that it doesn’t matter. Believe me though when I say it’s easier to avoid them altogether. <strong>Tank controls are especially bad from a bird’s-eye view.</strong></p>
<h2 id="loading-screens">Loading Screens</h2>
<p>The loading screens in <em>Deadly Premonition</em> are generally okay, except for the fact that they’re infuriatingly intrusive at times. It is most noticeable the moment when you get from cutscene to boss fight to cutscene to exploration (might not occur in that order, see end of game). The moment you’re eagerly beating a tough opponent into submission in order to progress with the story and have a loading screen block your path. Queue some of those in a short period and a certain level of frustration is almost guaranteed.</p>
<p>I really try to see the other side of the medal here. Sometimes the engine may already present before you start developing your game. Sometimes the engine may be built and somehow abused into doing something it wasn’t developed for. Still, the immersion breaking that the loading screens are doing are probably not for the best.</p>
<h2 id="telling-your-story">Telling Your Story</h2>
<p>There’s a significant difference between foreshadowing - which can improve a player’s emotional investment in a given story - and spoiling your own game - which can be particularly harmful to a game as storydriven as <em>Deadly Premonition</em>. I’ll try to give a good and a bad example directly taken from the game.</p>
<p><strong>Bad</strong>: Some trading cards have content and description that might spoil your joy because of the revelations they present at a point of the game where you will almost certainly not know the information presented. You gain insight in personal details of chacters which you might not yet know or gained the trust of.</p>
<p><strong>Good</strong>: There are some parts that are inaccessible for story reasons, but the game paints you an entirely different image why things are not not <sup id="fnref:v"><a class="footnote-ref" href="#fn:v">1</a></sup>.</p>
<h2 id="ui-confusion">UI Confusion</h2>
<p>The gamer playing the Let’s Play already pointed out a fatal flaw of the ingame UI - the map markers. I am quite aware that permanently marking some optional important locations apart from the main goal was probably an idea born from good intentions. The current implementation - using differently colored map markers for various targets - is lacking in thoughtful design. That is most evident when having bought all of the <em>Spirit Maps</em> and having cleared all of the related combat areas does not clear the markers from your map.</p>
<p>A solution to the problem might have been a map system which let’s the player choose what things he wants to display (or filter out). A fine example can be found in the <em>Assassin’s Creed</em> series<sup id="fnref:ass"><a class="footnote-ref" href="#fn:ass">2</a></sup>. There the player can choose to filter by categories or by map marker type. - Or simply the removal of the markers upon completion of the related objectives.</p>
<h2 id="consistency">Consistency</h2>
<p>Consistency is very important<sup id="fnref:con"><a class="footnote-ref" href="#fn:con">3</a></sup>. I’m quite sure that the mismatch of colors between the quest text and the item description in a certain scene is merely a development oversight. I’m however not so sure how that managed to get through quality control because fixing this is probably only as little effort as exchanging one string in the code (or localization files).</p>
<h2 id="non-optional-minigames">Non-optional minigames</h2>
<p>Many games which feature mini games deem it to be a great idea to shove them into the user’s face at least once per playthrough. While most of the time I’d argue that is not the best practice to force a user to do something that is not considered part of the core gameplay there is a high chance that users might miss such a optional element entirely. </p>
<h2 id="digital-actor-concept">Digital Actor Concept</h2>
<p>The concept of using “digital actors” seems quite interesting. On one hand one might argue that it’s essentially a recycling of previous material, but on the other hand there are real life actors who have played many, many different roles in their careers quite successfully. </p>
<p>I am not so sure how players of both or all games in which a characters stars feel about this reuse though. It might be interesting to check for emotional investment upon recognition of an existing character with a certain level of depth to his back story and traits who previously starred in other games<sup id="fnref:cam"><a class="footnote-ref" href="#fn:cam">4</a></sup>.</p>
<h2 id="leaderboards">Leaderboards</h2>
<p>Purely story driven games without any competitive aspects don’t need leaderboards. Maybe you’re having fun implementing them and tracking certain things like playtime and the number of times the player shot himself in the foot, but a statistic is enough to show you care and not enough to make people wonder why you’d build a leaderboard around those activities.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:v">
<p>I know this is quite vague but I don’t want to give everything away during the final analysis. If you want to know, you should either play the game or check out an LP. <em>I’m talking about certain houses or rooms.</em> <a class="footnote-backref" href="#fnref:v" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:ass">
<p>Sadly, I’m not quite sure whether all games of the series feature this option. I’m certain that <em>Assassin’s Creed: Brotherhood</em> and <em>Assassin’s Creed: Revelations</em> do. <a class="footnote-backref" href="#fnref:ass" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:con">
<p>Every time I say that it makes me chuckle because this is what caused me to first switch from Windows to GNOME (Ubuntu) and afterwards to OS X. <a class="footnote-backref" href="#fnref:con" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:cam">
<p>not as a <a href="http://en.wikipedia.org/wiki/Cameo_appearance">cameo</a>, that is. <a class="footnote-backref" href="#fnref:cam" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
</ol>
</div>Project:Rosetta - Graduation Ball Brainstorming2012-02-20T04:47:50+01:002014-02-16T20:52:07+01:00Alexander Skibatag:ghostlyrics.net,2012-02-20:/projectrosetta-graduation-ball-brainstorming.html<p>Some days ago I reached out to some of my beta readers for a kind of extended brainstorming session for a particular interesting scene of the novel I’m currently working on. The motif was “graduation ball”.</p>
<p>My findings after having summarized and consolidated all of the notes were quite …</p><p>Some days ago I reached out to some of my beta readers for a kind of extended brainstorming session for a particular interesting scene of the novel I’m currently working on. The motif was “graduation ball”.</p>
<p>My findings after having summarized and consolidated all of the notes were quite interesting. While there were some common themes like “dance” and “buffet” there were also associations that couldn’t have been further from each other. I think that gave me the opportunity to take a better look into the whole scenario from a few different angles besides my own pretty romantic concept.</p>
<p>While quite some unpleasent associations came up (like excessive alcohol consumation and violence as well as physical pain and emotional stress) some of the participants seemed to share an equally or similarly romantic view of the whole ball idea.</p>
<p>At least two participants mentioned the opportunity of relationships changing during the ball night or new chances revealing themselves, often combined with the aforementioned dancing. Another popular idea was the introduction or familiarization of new faces during that social event.</p>
<p>Something that struck me as particularly sad was people losing their enthusiasm or joy about balls after having been on their own, where mostly working is very important and the aspect of just being glamorous and pretty is overstated when compared to reality. <em>Mind you I’m not speaking from experience, since I had little to do on my own graduation ball.</em></p>
<p><em>Personally I’m looking forward to the ball as the scenario my characters are in requires them to wear uniforms most of the time.</em> While I’ll go back to writing in a short time I want to share a translated part of a conversation I had while explaining how I work.</p>
<blockquote>
<p>Alex: I want a nice opportunity to display the ladies in dresses instead of uniforms.<br>
Alex: a ball is the perfect chance for that<br>
Alex chuckles.<br>
Alex: I’ve a quite vivid imagination about that. My actors are puppets that have to be dressed, styled and coached in order to play their parts in the novel<br>
Alex: There’s a puppet house in my head in which they’re to play their roles<br>
Alex: actually a damn huge puppet house - more like a puppet town.</p>
</blockquote>Media Recap Precursor (Mid Feb 2012)2012-02-17T23:56:39+01:002014-02-16T20:35:49+01:00Alexander Skibatag:ghostlyrics.net,2012-02-17:/media-recap-precursor-mid-feb-2012.html<p>Attention, notebook dump incoming. Brace for impact.</p>
<ul>
<li>Federico Viticci of <a href="http://www.macstories.net">MacStories</a> has a great <a href="http://www.macstories.net/stories/icloud-file-sharing/">idea of how to implement file storage for iCloud</a></li>
<li>Nice <a href="http://litreactor.com/columns/20-common-grammar-mistakes-that-almost-everyone-gets-wrong">suggestions on how to improve your writing</a> by using the correct terms and grammar - <a href="http://lifehacker.com/5884048/improve-your-writing-by-avoiding-these-twenty-common-grammar-mistakes-almost-everyone-makes">via lifehacker.com</a></li>
<li>Ars Technica had a very amusing <a href="http://arstechnica.com/microsoft/news/2012/01/microsoft-pimps-it-old-school-with-a-pricey-text-adventure-game.ars">parody review of …</a></li></ul><p>Attention, notebook dump incoming. Brace for impact.</p>
<ul>
<li>Federico Viticci of <a href="http://www.macstories.net">MacStories</a> has a great <a href="http://www.macstories.net/stories/icloud-file-sharing/">idea of how to implement file storage for iCloud</a></li>
<li>Nice <a href="http://litreactor.com/columns/20-common-grammar-mistakes-that-almost-everyone-gets-wrong">suggestions on how to improve your writing</a> by using the correct terms and grammar - <a href="http://lifehacker.com/5884048/improve-your-writing-by-avoiding-these-twenty-common-grammar-mistakes-almost-everyone-makes">via lifehacker.com</a></li>
<li>Ars Technica had a very amusing <a href="http://arstechnica.com/microsoft/news/2012/01/microsoft-pimps-it-old-school-with-a-pricey-text-adventure-game.ars">parody review of Microsoft Visual Studio 2010</a></li>
<li>It’s been a little while since MacStories had an article about suggestions for a change in Nintendo’s policy, but it’s still <a href="http://www.macstories.net/stories/the-apple-of-gaming/">a good read</a></li>
<li>There has been some talk about pre-owned game revenue sharing and <a href="http://www.x360a.org">x360a.org</a> had a <a href="http://www.xbox360achievements.org/news/news-10533-Retail-Might-Share-Pre-Owned-Revenues-If-Publishers-Kick-the-Online-Passes.html">great article explaining the difficulties</a></li>
</ul>
<p>In more personal news: I’ve finished two more books that I bought during the winter holidays. Jenna Black’s <a href="http://www.shelfari.com/books/16507724/Dark-Descendant">Dark Descendant</a> was not that exciting and has a slightly similar background to the <a href="http://www.shelfari.com/series/Mythos-Academy">Mythos academy</a> series I’ve read already. Shortly after that I tackled Nicole Peter’s <a href="http://www.shelfari.com/books/5748261/Tempest-Rising">Tempest Rising</a> which I really enjoyed. The book made me laugh quite often - which is always a good sign. <em>At least if I’m not laughing out of pity or it is a cynic laughter caused by utter disbelief.</em> </p>
<p>I’m not quite sure that there had to be quite that much sex in it. Honestly I would probably have exchanged the most of it for more story. I see you rolling your eyes there. As much as some sexual thrill can improve a book it can also destroy the flow of the book if there’s - to put it bluntly - fucking where the protagonists ought to be doing something to help the story come along (sorry, I couldn’t resist that pun).</p>Demo Tuesday - Kingdoms of Amalur & Mass Effect 32012-02-15T18:27:46+01:002014-02-16T20:36:15+01:00Alexander Skibatag:ghostlyrics.net,2012-02-15:/demo-tuesday-kingdoms-of-amalur-mass-effect-3.html<p>I think my biggest issue of <a href="https://twitter.com/ghostlyrics/status/169504903138525185">yesterday’s experiment</a> was the fact that I don’t want to like <a href="http://reckoning.amalur.com/">Kingdoms of Amalur: Reckoning</a>. </p>
<h2 id="kingdoms-of-amalur-reckoning">Kingdoms of Amalur: Reckoning</h2>
<p>From the very first moment I saw a video preview on that particular title I disliked the visual style it uses because it …</p><p>I think my biggest issue of <a href="https://twitter.com/ghostlyrics/status/169504903138525185">yesterday’s experiment</a> was the fact that I don’t want to like <a href="http://reckoning.amalur.com/">Kingdoms of Amalur: Reckoning</a>. </p>
<h2 id="kingdoms-of-amalur-reckoning">Kingdoms of Amalur: Reckoning</h2>
<p>From the very first moment I saw a video preview on that particular title I disliked the visual style it uses because it reminds me in a very bad way of <a href="http://us.battle.net/wow/en/">World of Warcraft</a> which never succeeded in creating any kind of immersion for me. The very fact that the title also seems to be modelled in a potential MMORPG world just enhanced that feeling of oddness which repelled me. However, it was the story which I deemed to be completely and utterly uninteresting after hearing the first bits that seemed to be the biggest factor of despise for me. Let me say this very clearly: <strong>Usually I’m only drawn to games which deliver an interesting narrative element which is presented at least fairly well</strong></p>
<p>That being said I’ve to admit that I do like Amalur. Make no mistake, the world still fails to impress me with narrative if not with visual diversity. The side which makes Amalur great is its combat - and I’m by far <a href="http://penny-arcade.com/2012/01/27/amalur">not the first person to notice</a> this. It is pleasently fluid although it got a little grind-y after a while and I’m sure - although there are a lot of different weapons and styles - that more than one finishing animation per class might present it as less of a chore than it currently feels to me.</p>
<p>Now, for some thoughts on the demo itself. I have to wonder why the dev’s chose to show my three difficulty levels if there’s only one available <strong>and</strong> why it’s not the one available which is marked as <em>default</em>. Also one might argue that <em>normal</em> should be the default instead of <em>casual</em>.</p>
<ul>
<li>I like the fact that in the character editor there’s a slider for tattoo intensity. By now quite a few new games feature this, but it’s worth pointing out since it adds uniqueness to your character if you’re able to give him some backstory without him looking like he/she just strolled out of the tattoo shop.</li>
<li>I have no idea who came up with the popular guesture of characters pointing their fingers at me. What I do know is that it makes me feel slightly uncomfortable and it’s weird considering that people of different races (and therefor cultural believes) use it in the same way.</li>
<li>After extensively playing <a href="http://www.elderscrolls.com/skyrim/">Skyrim</a><sup id="fnref:skyrim"><a class="footnote-ref" href="#fn:skyrim">1</a></sup> I enjoy Amalur’s comparatively short loading times. <em>On the other hand that might be because I have the feeling that by now I’ve seen all of Skyrim’s loading hints.</em></li>
<li>Reckoning offers to skip cinematics, with no frills added, seemingly no delay and no second guessing (“Do you really wish to skip this great expensive cinematic although you’ve pressed at least three different buttons to skip it?”). I mean… <em>you just have to admire that.</em></li>
</ul>
<p>So alltogether I enjoyed the demo which consistent of the game’s first section until you are set free into the vast world plus an additional 45 minutes in which you are free to do whatever you wish. <em>In certain boundaries that is, considering the demo weights about 2 GB.</em></p>
<h2 id="mass-effect-3">Mass Effect 3</h2>
<p>There’s not a lot to say about the <a href="http://masseffect.bioware.com/">Mass Effect 3</a> demo yet since:</p>
<ol>
<li>The multiplayer section is available from 17th onwards.</li>
<li>The first section basically is the game’s opening which was already spoilered and described to death by both trailers and the story itself.</li>
<li>The second single player section I’ve by now seen the fourth time and played the second time. <em>I’ve seen the walkthrough with and without developer commentary, played it at GamesCom 2011 and now with the demo.</em></li>
</ol>
<p>I did notice that the uniforms looked more detailed than in ME3’s predecessors.</p>
<p>One thing I could not quite wrap my head around was the fact that in the second sequence I’m not given a sniper rifle despite me playing an infiltrator which is treated as sniper/assassin type by players. I’ll blame it on the missing rifle that I died during my playthrough.</p>
<p>I’m quite excited about ME3 and did - for a very short time - consider preordering. After looking at the preorder boni I stopped persuing that line of thought due to the lack of story-based preorder DLC. <em>Also I’m not shelling out about 30€ more for the Collector’s Edition or whatever you want to call it just to get the bonus character.</em><sup id="fnref:pay"><a class="footnote-ref" href="#fn:pay">2</a></sup></p>
<div class="footnote">
<hr>
<ol>
<li id="fn:skyrim">
<p>That <em>is</em> the correct URL. During the time of this writing the site showed a in memoriam for one of Bethesda’s artists though. <a class="footnote-backref" href="#fnref:skyrim" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:pay">
<p>I want to have it but not that desperately that I need to pay way more than the usual DLC rate. <a class="footnote-backref" href="#fnref:pay" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>iTunes U @ TU Graz2012-02-08T19:18:39+01:002014-02-16T20:36:36+01:00Alexander Skibatag:ghostlyrics.net,2012-02-08:/itunes-u-tu-graz.html<p>After downloading and browsing via the new iTunes U app for iPad I decided to check out one of the offerings my university (Graz University of Technology) - therefore the title<sup id="fnref:abbr"><a class="footnote-ref" href="#fn:abbr">1</a></sup> - contributes to the enormous iTunes U catalog, I was quite disappointed. I’m not entirely sure what to think …</p><p>After downloading and browsing via the new iTunes U app for iPad I decided to check out one of the offerings my university (Graz University of Technology) - therefore the title<sup id="fnref:abbr"><a class="footnote-ref" href="#fn:abbr">1</a></sup> - contributes to the enormous iTunes U catalog, I was quite disappointed. I’m not entirely sure what to think yet since I’ve only checked out <a href="http://itunes.apple.com/at/itunes-u/itunes-u-technische-universitat/id427539688?i=108555799&l=en">one episode about iTunes U’s usage</a> at the TU but I’m like the popular video game critic <a href="http://en.wikipedia.org/wiki/Zero_Punctuation">Yahtzee</a> there: If something starts out quite bad and only “gets better” (or “gets great”) after so and so many hours then it’s not only a bad start. More often it will be a start that leads to many hours of frustration with a product. Yahtzee mentions in <a href="http://www.escapistmagazine.com/articles/view/columns/extra-punctuation/9361-Death-Mechanics-and-Dark-Souls">his extra punctuation column about Dark Souls</a> that he has been broken by the game and now starts to enjoy it. It’s a rather sad idea of how a game is supposed to trigger your feelings. Wasn’t the original idea about making games that are fun? <em>But I’m rambling…</em></p>
<p><em>Back to topic.</em> It may be a bit unfair to judge the whole series of the course - <em>although I don’t understand the random information being a course at all instead of a podcast</em> - I was a bit shocked about the quality of the episode I viewed. In case someone wants to post a follow up I’ll go with a numbered list this time.</p>
<ol>
<li>There were problems with audio. Multiple, to be precise.</li>
<li>The volume levels were bad. During playback of the video things were too
loud while the speaker was too quiet.</li>
<li>The speaker didn’t always talk into the microphone (at least that’s the
impression you get).</li>
<li>Parts were absolutely inaudible.</li>
<li>The quality of the movie played back was very bad. And from a casual look I’d also guess that the framerate is off, but that might just be my impression.</li>
<li>Presentation technique:</li>
<li>During the intro the speaker is rambling. Being off topic and discussing stuff not important to the viewer.</li>
<li>There’s a direct plug for a textbook in there - though it’s not as offensive as it could be. Which is good.</li>
<li>There’s absolutely no reason to show the desktop in this case. The seconds switching applications should have been cut.</li>
<li>One thing that I’ve seen and despised a lot during presentations in class too is that switching back and forth between slides creates confusion. If you need the content a second time then show it a second time. Preferably on <strong>a new slide</strong>.</li>
<li>I’d suggest rounding the figures for downloads as that makes it easier to follow.</li>
<li>I’m not sure why they’re showing the iTunes description of your apps copy pasted into slides. That’s not necessary and a block of tiny text on the slide doesn’t really help anyone.</li>
</ol>
<p>And last: Please tell me they aren’t snickering during 27:30-28:00 and I just misheard that for something it wasn’t. Because if it’s not just me I strongly argue to <strong>cut it</strong>.</p>
<p>One more thing: I’m not sure what exactly the common thing between app development and iTunes U as an additional offering were but it might have been a good idea to release both things as separate videos.</p>
<hr>
<p><strong>Update:</strong> <a href="https://twitter.com/mebner">@mebner</a> has <a href="https://twitter.com/mebner/status/167317468707160064">pointed out</a> that this content was not edited after recording in any way. That obviously portraits the whole presentation in a different way but some of my critisism still applies.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:abbr">
<p>Hurray for abbreviations. <a class="footnote-backref" href="#fnref:abbr" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Rox (follow-up)2012-02-06T02:51:21+01:002014-02-16T20:55:56+01:00Alexander Skibatag:ghostlyrics.net,2012-02-06:/rox-follow-up.html<p>So, a while back I said I was going to visit <a href="http://www.rox-musicbar.com/barandgrill/">Rox</a> for a second impression with hopefully less chaos and more of great customer service. Would you be surprised if I told you that my next impression wasn’t that good either? At least this time I didn’t …</p><p>So, a while back I said I was going to visit <a href="http://www.rox-musicbar.com/barandgrill/">Rox</a> for a second impression with hopefully less chaos and more of great customer service. Would you be surprised if I told you that my next impression wasn’t that good either? At least this time I didn’t forget to have a non-alcoholic cocktail.</p>
<p>Well, I assume that it probably was at least partially my fault for going there on Thursday. But how am I to know that they offer a free beer for every customer that day? That is indeed a nice gesture. Unless someone doesn’t drink. <em>That would be me.</em> After having donated my free beer to Gregor we sat down at the bar in the innermost part of the non-smoking area. As you might have guessed, Rox was pretty full that day.</p>
<p>As I <a href="/rox-opening.html">said before</a> the menu has lots of variations of grilled meat, so I was not really sure what to eat since most dishes sounded pretty common. At last I went with the same as Gregor: Grilled pork chop with zingara sauce<sup id="fnref:dish"><a class="footnote-ref" href="#fn:dish">1</a></sup>. Additionally there were grilled sweet pepper, onions, garlic and baked potato with garlic sour creme dip. </p>
<p>The food was good. Better than I initially expected, to be precise. It was a medium portion, not terribly much but also not too little. It took some time to eat due to the meat being burried under vegetables. Also it took quite some time for my cocktail to be served. <em>If it takes
longer for my drink to appear than for my meal to disappear - that’s a bad sign.</em> Now that didn’t quite happen but it was fairly close.</p>
<p>About the atmosphere… I’m sure Rox has something to it for many people. It just happens that due to my preference for good food and a laid back scenery or some kind of lounge. So as I’m not really into the “bar” kind of entertainment I can only judge the place from a gourmet’s point of view. <em>Although I wouldn’t call myself that. I just lack a better term for the moment.</em> Obviously my opinion is just that: an opinion. You’re free to come to your own conclusion and I’d strongly suggest that you do. So…</p>
<p><strong>Should you visit this place: No</strong></p>
<div class="footnote">
<hr>
<ol>
<li id="fn:dish">
<p>Gegrilltes Zigeunerschweinskotelett, mit gegrilltem Paprika, Zwiebel, Knoblauch und Rox-Stampf-Ofenkartoffel mit Knoblauch Sour Creme Dip <a class="footnote-backref" href="#fnref:dish" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Torona2012-02-01T16:58:56+01:002014-02-16T20:55:39+01:00Alexander Skibatag:ghostlyrics.net,2012-02-01:/torona.html<p><em>So again, I’ll try to translate dishes as good as possible, now with the help of a <a href="http://www.gourmetpedia.com/">site</a> recommended to me by Elke. For the German names, see the footnotes.</em></p>
<p>After another round of pressing information out of my semi-cooperative friends and colleagues I had a new restaurant to …</p><p><em>So again, I’ll try to translate dishes as good as possible, now with the help of a <a href="http://www.gourmetpedia.com/">site</a> recommended to me by Elke. For the German names, see the footnotes.</em></p>
<p>After another round of pressing information out of my semi-cooperative friends and colleagues I had a new restaurant to try. Several actually, but this post is about <a href="http://www.torona.at/">Torona</a> which I was referred to by David. <em>You’ll want to visit their site. They have <a href="http://www.torona.at/galerie/">pictures</a>.</em></p>
<p>Torona’s menu is extremely small or should I say “focused”? There are indeed quite few options on the card aside from their main specialty: <a href="http://www.torona.at/pinchos/">“Pinchos”</a> are their primary means of attracting people. These are little pieces of meat or seafood on skewers priced between 4€ and 7€ each and a medium amount would be two or three of them. <em>And my, are they delicious…</em></p>
<p>I went there on a Monday evening at about 18:00 (<em>maybe a bit earlier</em>) together with Alex. When we initially entered the restaurant after having passed it before due to my uncanny inability to locate it even using Google Maps it was rather empty. I’m still not sure how we missed it. It’s on the <a href="http://maps.google.com/maps/place?q=Torona,+Prokopigasse,+Graz,+%C3%96sterreich&hl=de&ie=UTF8&cid=2182502193172891780">Färberplatz</a> in Graz. I’m sure there were at most three other tables in use and that’s few, considering that Torona has two floors. Not really two floors though, but a front area more suited to have a quick drink and grab a little aperitif and a bigger room further back. To enter this room you descend a flight of stairs and arrive in a room that accommodates about 8 tables (also bigger since this is seems to be the dedicated dinning area). The decoration is tasteful and in my opinion the restaurant was clean too. Also I realized as I sat down the bench and the provided pillow were extraordinarily comfortable. <em>Alex probably thought I was crazy when I stopped mid-speak to test the pillow again. Anyway, I’m rambling.</em> I was positively surprised when looking at the drinks on offer since they have non-alcoholic cocktails. I have to admit, I’m really easily drawn to a bar that offers good <a href="http://en.wikipedia.org/wiki/Mocktail">mocktails</a>. Of course I had to order a Virgin Mojito since I enjoy the sour taste combined with a little sweetness from sugar. Alex had some kind of white wine. Sorry, I can’t help you with alcoholic beverages. <del>However, Alex wants me to add they served it without water. He had to order that separately. </del></p>
<p>For a short moment I thought about having a soup but a glance in my wallet told me that I wouldn’t have soup this time. I ordered lamb steak with vegetables and potatoes with herbs as well as pork filet with plums mantled in Serano ham<sup id="fnref:my-order"><a class="footnote-ref" href="#fn:my-order">1</a></sup> while Alex had the Lomo de Pata Negra skewer<sup id="fnref:alex-order"><a class="footnote-ref" href="#fn:alex-order">2</a></sup>.2 of them to be precise. Also in case you’re wondering: That is a special kind of pig that, according to the menu is the most expensive pig on the planet.</p>
<p>When someone on a table orders pinchos the waiter serves a long wooden tablet with five glasses on it. They contain different kinds of dips that are a perfect fit to the pinchos. </p>
<ul>
<li><strong>Alioli</strong> is a kind of mayonnaise with garlic. (<em>my favorite</em>)</li>
<li>The <strong>Andalusian sauce</strong> is based on hot bell pepper and tomatoes. </li>
<li>The <strong>lingonberry sauce</strong><sup id="fnref:berry"><a class="footnote-ref" href="#fn:berry">3</a></sup> has an interesting and nice touch of cinnamon to it. (<em>interesting, but didn’t quite taste that great with my meat</em>)</li>
<li>The <strong>green pesto</strong> contains olives and parsley<sup id="fnref:par"><a class="footnote-ref" href="#fn:par">4</a></sup>. (<em>I can’t quite put my finger on it but this didn’t taste good at all though it was good to have a completely different kind of flavor as well.</em>)</li>
<li>The <strong>tomato salsa</strong> is especially interesting since it isn’t hot as hell just a bit spicy and not aggressive at all. I was surprised because I expected it to be unbelievably hot but the surprise was rather pleasant, I might add. (<em>if it wasn’t for the Alioli this would’ve been my favorite</em>)</li>
</ul>
<p>Unfortunately I forgot to check how long we waited for our food to appear but on the other hand I didn’t feel the necessity due to having company and the waiter being pleasantly friendly. When our dishes arrived I first tasted the vegetables and the lamb and both were extraordinary. Everything was seasoned rather strongly and that’s a plus in my opinion. Even the dressing of the little bit of salad was tasty - and I admit I wouldn’t even have realized if Alex hadn’t mentioned it. Interestingly the pinchos weren’t on the plate itself but on white bread that slowly sucked in the fat and spices - a great idea.</p>
<p>After all I wouldn’t choose the Torona if I was extremely hungry and looking for a big meal. But if you’re slightly hungry and want to enjoy some great skewers with drinks and chill at a great place, Torona is the place. I’d recommend bringing a friend or possibly a date since the place will certainly leave a great impression.</p>
<p><em>So… I heard people saying that they’d want some sort of rating system but quickly responded I’m not much for competition. I absolutely despise those numbering systems and star ratings and whatever. They may be helpful but they also force a writer’s opinion into a numerical system which is often just inappropriate. I’ll just do it with a binary system.</em></p>
<p><strong>Should you visit this place? Yes.</strong></p>
<hr>
<p><strong>Update:</strong> Martin added that you usually don’t get water to your white wine. I’m terribly sorry, but I didn’t know that. I don’t consume alcohol.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:my-order">
<p>Lammsteak-Spieß mit Gemüse und Kräuterkartoffel, Schweinefilet-Spieß mit Pflaumen und Serranomantel <a class="footnote-backref" href="#fnref:my-order" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:alex-order">
<p>Lomo de Pata Negra am Spieß <a class="footnote-backref" href="#fnref:alex-order" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:berry">
<p>Preiselbeere <a class="footnote-backref" href="#fnref:berry" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:par">
<p>Schnittlauch <a class="footnote-backref" href="#fnref:par" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
</ol>
</div>Rondo2012-01-30T14:38:04+01:002014-02-16T20:54:29+01:00Alexander Skibatag:ghostlyrics.net,2012-01-30:/rondo.html<p><em>First things first. When writing my Cuisine Notes I’m never entirely sure if I’ve translated the names of food properly. If you feel like you know better, don’t hesitate to contact me. Also the German version is included, see the footnotes.</em></p>
<p>Just last week I was again …</p><p><em>First things first. When writing my Cuisine Notes I’m never entirely sure if I’ve translated the names of food properly. If you feel like you know better, don’t hesitate to contact me. Also the German version is included, see the footnotes.</em></p>
<p>Just last week I was again at one of my favorite local restaurants in Graz: The <a href="http://restaurant-rondo.at/">Rondo</a> is mostly a restaurant and less of a bar or a café, though a little of both. While I admit never having been there in the evening it certainly is a nice location to have dinner or a drink while calming down from an exhausting day. Rondo is the spot you want to visit to taste things you don’t know yet, whether it’s something Austrian that you’ve never had the chance of eating or something very exotic that they just happen to offer on a day you have some spare time.</p>
<p>The atmosphere is great and laid-back, not too relaxing, since it’s not some kind of lounge, but comfortable. The restaurant is located on the ground floor, with its entrance easy to miss when visiting the first time since you have to turn sharp left when entering the building instead of heading towards the main area where several offices are. The side facing the street is completely transparent due to immense glass windows. Finding the restaurant is not a problem because of big decorative labels spelling out the restaurant’s name on the huge glass front. (Yes, Pete, I was also tempted to walk straight through the glass wall…)</p>
<p>I’ve been there about four times now. For a restaurant I enjoy that’s actually quite few but unfortunately I live in a completely different area of Graz. Rondo is <a href="http://restaurant-rondo.at/kontakt-reservierung.html">near the Central Station</a>. I usually get there by bus but it’s still kind of a long ride, so I don’t go there unless I’ve a lot of time available and there’s some kind of dish on the daily menu<sup id="fnref:price"><a class="footnote-ref" href="#fn:price">1</a></sup> that I really enjoy (<em>or have never tasted before for that matter</em>).</p>
<p>Last time I’ve been there was together with Pete and Thomas, two colleagues from university. We went there because of the daily menu (Grilled Salmon-Trout, according to wiki a trout, with horseradish potatoes and a bouquet of vegetables<sup id="fnref:menu"><a class="footnote-ref" href="#fn:menu">2</a></sup>) but Thomas and me ended up ordering the grilled salmon filet with sheep’s cheese risotto<sup id="fnref:order"><a class="footnote-ref" href="#fn:order">3</a></sup>. Now, acknowledging that it was about twice the price of the menu and didn’t have soup with it, it was absolutely delicious. Not a lot on the plate though. Pete stuck with the daily special and was equally delighted. It’s a pity he wasn’t quite able to identify his soup. I’m a little sad though that they didn’t up the price for the menu but decided to exclude the desert from the regular menu instead since 2012. Which makes me a sad sweet tooth.</p>
<p>The other times I was there I mostly went because I wanted to try something special they had for the dailies.</p>
<ul>
<li>I had Styrian Chili<sup id="fnref:chili"><a class="footnote-ref" href="#fn:chili">4</a></sup> with Polenta. (<em>not my taste</em>)</li>
<li>I had Vegetables in Tempura<sup id="fnref:tempura"><a class="footnote-ref" href="#fn:tempura">5</a></sup>, sweet chili dip and salad. (<em>great</em>)</li>
<li>I had pork steak with BBQ beans and baked potatoes. (<em>incredibly delicious</em>)</li>
</ul>
<p>I have yet to encounter a dish that doesn’t fit my taste there, but it’s rather easy to say that if you’re planning your meals there according to the daily specials. That, however, is rather easy since the Rondo is offering its menu for the current week as newsletter (also has the current week’s popular dishes aside from the specials). I’ll definitely keep visiting Rondo and obviously recommend it to those seeking food that’s a little more on the exquisite side.</p>
<p><strong>PS</strong>: They have pictures on <a href="http://restaurant-rondo.at/">their site</a>.</p>
<p><strong>Should you visit this place? Yes.</strong></p>
<hr>
<p><strong>Update:</strong> Updated to new rating system.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:price">
<p>The daily menu is either 7,60€ or 6.90€ + either 1€ for desert or 2€ for desert and coffee. <em>Have I mentioned I dislike coffee?</em> Anyway. Lunch hour is from 12:00 to 14:00, afterwards the menu is probably available but more expensive (or was that the coffee? Never mind.) <a class="footnote-backref" href="#fnref:price" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:menu">
<p>Gegrilltes Lachsforellenfilet auf cremigen Krenkartoffeln, Gemüsebouquet <a class="footnote-backref" href="#fnref:menu" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:order">
<p>Gegrilltes Lachsmittelstück auf cremigen [sic.] Schafkäserisotto <a class="footnote-backref" href="#fnref:order" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:chili">
<p>Steirisches Chili <a class="footnote-backref" href="#fnref:chili" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
<li id="fn:tempura">
<p>Gemüse in Tempurateig <a class="footnote-backref" href="#fnref:tempura" title="Jump back to footnote 5 in the text">↩</a></p>
</li>
</ol>
</div>Media Recap Precursor (End January 2012)2012-01-26T21:52:44+01:002014-02-16T19:55:14+01:00Alexander Skibatag:ghostlyrics.net,2012-01-26:/media-recap-precursor-end-january-2012.html<p>I’ve read four new fantasy books. All of them were written quite well and I’ve only found one obvious case of self-copypasta (as in: an author pasted parts of a previously published work straight into his next). There may be a more detailed analysis to follow, but I …</p><p>I’ve read four new fantasy books. All of them were written quite well and I’ve only found one obvious case of self-copypasta (as in: an author pasted parts of a previously published work straight into his next). There may be a more detailed analysis to follow, but I’m not sure about that yet.</p>
<ul>
<li><a href="http://www.shelfari.com/books/4769578/Mark-of-the-Demon" title="more information">Mark of the Demon</a></li>
<li><a href="http://www.shelfari.com/books/5997049/Blood-of-the-Demon" title="more information">Blood of the Demon</a></li>
<li><a href="http://www.shelfari.com/books/15081447/Secrets-of-the-Demon" title="more information">Secrets of the Demon</a></li>
<li><a href="http://www.shelfari.com/books/23059134/Sins-of-the-Demon" title="more information">Sins of the Demon</a></li>
</ul>
<p>Unfortunately it seems like I’ll have to wait a year for the next book from <a href="http://www.shelfari.com/authors/a2484625/Diana-Rowland/">Diana Rowland</a> to be published. At least if the information at shelfari is to be trusted as I’ve been to lazy to research further.</p>Deadly Premonition pt.52012-01-23T04:01:46+01:002014-02-16T19:56:19+01:00Alexander Skibatag:ghostlyrics.net,2012-01-23:/deadly-premonition-pt5.html<p>To be honest I was tempted to start this post with the same “Welcome back to Let’s play Deadly Premonition” that <em>supergreatfriend</em> always used in his videos. Though I figured that a) might be kind of mean and b) I already did that in the last post. Anyway I …</p><p>To be honest I was tempted to start this post with the same “Welcome back to Let’s play Deadly Premonition” that <em>supergreatfriend</em> always used in his videos. Though I figured that a) might be kind of mean and b) I already did that in the last post. Anyway I’ve returned with another bunch of typed out notes. Frankly I’m already quite fed up putting these into long form but on the other hand I’m not particularly inclined to let my notes go to waste.</p>
<h2 id="scenes">Scenes</h2>
<h3 id="forced-to-fishing">Forced to Fishing</h3>
<p>There’s this one scene where the game introduces one of its bonus mini games via a forced sequence in which you have no other possibility than use the fishing mini game. At least not if you want to advance the story since this is one of the game’s few linear passages.</p>
<p>True to his style however York does not simply fish for fish. And no, neither is he fishing for compliments. Agent York fishes for stolen files which <del>are more to his taste than Emily’s cooking</del> are needed to investigate further.</p>
<h3 id="yorks-car">York’s Car</h3>
<p>It would’ve been a cool idea to use a functional GPS system in York’s car considering that the game is using an ingame map as well as a minimap and there is a GPS already in the car. To use that as a nice replacement for the minimap while driving might have been a little weird in terms of usability but a nice touch nevertheless instead of putting a static image on the screen of the navigation system. </p>
<h3 id="subs">Subs</h3>
<p>The subs were mismatched at one point near the ending. That just shouldn’t happen. At least, it shouldn’t unless it’s done to be funny, but I still think that mismatching subs - even for the sake of humor - shouldn’t be in a game. They are distracting, not helpful for a person not fluent in the language and way worse for the hearing impaired playing game.</p>
<h3 id="hunting-statues">Hunting Statues</h3>
<p>You see, during the otherworldly visit of Mr. Steward’s mansion the whole rifle holding statues could’ve been used for something. I admit that it might have been quite hard to fit that into the game’s lore but I have an image in my mind of these statues shooting shadows or something the like. Deus ex Machina.</p>
<h3 id="evil-birds">Evil birds</h3>
<p>Of course no Twin Peaks based horror game seems to be complete without the Hitchcockian evil birds. Honestly I don’t know what to make of them. Do they scare you? No. Are they relevant to the plot? No. Are they annoying as hell? Yes. I mean, look at <em>Alan Wake</em>. They subverted this point during the DLC by transforming the birds into actual book pages. I’m still impressed by the idea whenever I think back.</p>
<h3 id="hold-your-breath">Hold your breath!</h3>
<p>It’s a real pity that you only get to understand why holding your breath is helpful against the dead so late in the game. It’s not a terribly good explanation but it’s an acceptable one. At least for a fictional game.</p>
<h3 id="cigarette-scent">Cigarette scent</h3>
<p>I’m no expert concerning dogs and their abilities. I do however doubt that an ordinary dog which is not trained to be looking for missing persons is able to pick up a scent from a burned down cigarette butt. No offense here but I just don’t believe so. Basically the own smell of the cigarette might be what the dog will be looking for (IF he will be looking for something) but not the personal scent of the person who’s been smoking the cigarette.</p>
<h3 id="hidden-specials-within-hidden-specials">Hidden Specials within Hidden Specials</h3>
<p>One thing that is way more common among console games than PC games is hidden unlockable content. Now I’m not talking about content which is already on the disk and only has to be unlocked via the one time use of a card packaged with the game. I’m talking about content which has to be unlocked the old school way: By achieving certain things in the game. The great thing about <em>Deadly Premonition</em> is though that there’s even unlockables with in the unlockables. Color me impressed.</p>
<h2 id="quotes">Quotes</h2>
<ul>
<li>“We’ve found a way to keep your pot really warm, Sigourney.” - <em>sgf</em> after obtaining the flame thrower</li>
<li>“Here we are and there’s a flashlight that doesn’t exist.” - <em>sgf</em></li>
<li>“Was that a chainsaw Keith had? Probably still mad we took his guitar” - <em>sgf</em></li>
</ul>
<p>Again, I’d like to say a big thank you to <em>supergreatfriend</em> who’s done a superb job on the LP playing, filming and posting the videos for about 6 months.
Also I’m pretty sure by now Agent York’s favorite video game is the Guitar Hero franchise.</p>
<p>Next time when I’m talking about <a href="/tag/deadly-premonition.html"><em>Deadly Premonition</em></a>: The lessions that <a href="/deadly-premonition-pt6-conclusion.html">can be learned</a>.</p>Don't you walk out on me, Nightingales!2012-01-18T17:35:59+01:002014-02-16T19:56:39+01:00Alexander Skibatag:ghostlyrics.net,2012-01-18:/dont-you-walk-out-on-me-nightingales.html<p>What was that talk about the Nightingales sticking together? What was all that “we need our combined strength to defeat Mercer”? Were you lying to me, <a href="http://www.uesp.net/wiki/Skyrim:Karliah">Karliah</a>? Why haven’t you been honest to me about your motivations, <a href="http://www.uesp.net/wiki/Skyrim:Brynjolf">Brynjolf</a>? I feel disappointed. After all we have accomplished together? Rebuilding the …</p><p>What was that talk about the Nightingales sticking together? What was all that “we need our combined strength to defeat Mercer”? Were you lying to me, <a href="http://www.uesp.net/wiki/Skyrim:Karliah">Karliah</a>? Why haven’t you been honest to me about your motivations, <a href="http://www.uesp.net/wiki/Skyrim:Brynjolf">Brynjolf</a>? I feel disappointed. After all we have accomplished together? Rebuilding the guild from its ruins. Proving Karliah’s innocence. Tracking down Mercer Frey. And still, you <strong>walk out on me</strong> in <a href="http://www.uesp.net/wiki/Skyrim:Irkngthand">Irkngthand</a>?</p>
<p>How dare you calling yourselves comrades? How can you even look into the eyes of your mirror images? Have you absolutely no spark of honor in you at all? Truly, my disappointment can’t be described in words.</p>
<p>To save yourselves a bit of honor, yes, you have returned to face Mercer with me. Only to get caught in his treacherous spells. Your <em>help</em> was much appreciated. But I’ll be honest with you guys. After your previous deeds I seriously considered not helping you during the cave in and letting you drown. I did not if only to prove that in contrast to both of you I’m a reliable person.</p>
<p>For those not knowing what I’m talking about: This is about the following <a href="http://www.uesp.net/wiki/Skyrim:Blindsighted#Bugs">bug in a particular quest</a> in Skyrim.</p>
<blockquote>
<p>(Xbox) Brynjolf may leave his post and walk to Riften as soon as you enter Irkngthand, rendering the quest non-completable</p>
</blockquote>
<hr>
<p><strong>Update:</strong> Quote removed, I was sloppy and linked the wrong bug. Apologies.</p>
<p><strong>Update 2:</strong> Got the right quote now.</p>Deadly Premonition pt.42012-01-18T14:52:00+01:002014-02-16T19:57:40+01:00Alexander Skibatag:ghostlyrics.net,2012-01-18:/deadly-premonition-pt4.html<p>Welcome back to the 4th part of this mini-series about <em>supergreatfriend</em>‘s <a href="http://lparchive.org/Deadly-Premonition/"><em>Deadly Premonition</em> LP</a>. Again, there will be notes and comments about the LP. This is <strong>not</strong> the final article about what can be learned from DP. That one will be released as soon as I’m through with …</p><p>Welcome back to the 4th part of this mini-series about <em>supergreatfriend</em>‘s <a href="http://lparchive.org/Deadly-Premonition/"><em>Deadly Premonition</em> LP</a>. Again, there will be notes and comments about the LP. This is <strong>not</strong> the final article about what can be learned from DP. That one will be released as soon as I’m through with all my notes and thought about what lessons there are to be learned.</p>
<h2 id="scenes">Scenes</h2>
<p>This topic covers pretty much what its title says: Scenes that I have taken notes of.</p>
<h3 id="colorblind-quest-item">Colorblind Quest Item</h3>
<p>There’s this one scene in which the description of the painting says that there’s a blue apple on it. The apple on the painting is green. The item that York may find is green. The descriptor of the item also says it’s a green apple. Now who found it to be funny to confuse the player this way?</p>
<h3 id="zombie-painting">Zombie Painting</h3>
<p>Zombies coming out of paintings of zombies. While not entirely new this was quite authentic and refreshing. It’s not your typical zombies-coming-out-of-black-spots kind of zombie appearance which is nice to get away from.</p>
<h3 id="more-recycling">More Recycling</h3>
<p>The recycling of pictures and photos during the profiling sections is a logical step, that much I must admit. Nevertheless it feels incredibly cheap seeing the same pictures about three times in different chapters.</p>
<h3 id="ui-confusion">UI Confusion</h3>
<p>Annoyingly the arrows pointing to certain secondary locations like the spiritual map quests don’t get removed after they have been finished. In the later stages of the game that looked like it was pretty confusing due to several quest markers being displayed onscreen with a clear indication what might be the next option to take. Granted, the main target is a darker red than the optional’s brighter orange. Still, this is far from great UI design and implementation.</p>
<h2 id="quotes">Quotes</h2>
<blockquote>
<p>“York, don’t lie to us!” - Emily</p>
</blockquote>
<p>Somehow the script looks like it’s off on this occasion. I can’t remember York having
lied to them before.</p>
<blockquote>
<p>“Do you want a sternum?” - <em>sgf</em></p>
</blockquote>
<p>I laughed so hard every time he used that running gag.</p>
<h2 id="additional-notes">Additional Notes</h2>
<ul>
<li>Judging from York’s use of the word “amazing” he might be a former Apple employee. Otherwise he might have good chances becoming one after leaving the FBI.</li>
<li>The crawling shadow fights seem to be incredibly frustrating if you don’t have the right tactic (compare “the hard way” 7 minutes with “the easy way” 13 seconds).</li>
<li>For some weird reason York doesn’t want to go into people’s bedrooms without search warrant. Searching the rest of the house including secret rooms, diaries and fridges is okay, though.</li>
<li>I don’t know how most players of the game feel but I think the idea of serving the red seeds in the sugar box during the scene in which York is offered tea instead of coffee was brilliant. </li>
</ul>Deadly Premonition pt.32012-01-17T23:23:00+01:002014-02-16T19:53:20+01:00Alexander Skibatag:ghostlyrics.net,2012-01-17:/deadly-premonition-pt3.html<p>Recently I’ve completed watching the <a href="http://lparchive.org/Deadly-Premonition/"><em>Deadly Premonition</em> LP</a>. Of course I haven’t sat through all remaining 26 parts at once but I came around it during several days. Since bullet points are inherently evil I will try to reduce their usage in this post. Of course, dear reader …</p><p>Recently I’ve completed watching the <a href="http://lparchive.org/Deadly-Premonition/"><em>Deadly Premonition</em> LP</a>. Of course I haven’t sat through all remaining 26 parts at once but I came around it during several days. Since bullet points are inherently evil I will try to reduce their usage in this post. Of course, dear reader, that doesn’t save you from the random thoughts I scribbled down in no particular order during watching said LP.</p>
<h2 id="scenes">Scenes</h2>
<p><em>Deadly Premonition</em> has lots of funny, terrible and otherwise rememberable scenes. <em>I took notes nevertheless.</em></p>
<h3 id="the-doctors-profiling">The doctor’s profiling</h3>
<p>I forgot to mention one scene I found to be quite cool in the last article: During the autopsy the doctor tries to his own little profiling bit in deducing the suspects motives. I was kind of startled why the doctor would be the one doing the profiling and not Agent York. This was subverted when York interrupted him and started to explain that he was all wrong. <em>Also I was reminded once again of Criminal Minds.</em></p>
<h3 id="dinner-discussion">Dinner discussion</h3>
<p>The discussion at dinner started in a really innocent way but ended up pretty awesome when York explained disgusting details of his work to the local policemen (and -women). The <a href="http://www.destructoid.com/review-deadly-premonition-165168.phtml">review over at destructoid.com</a> takes this as proof that York is insane. I’d argue that. He just obviously either doesn’t know or doesn’t care what might get people to feel bad. This is the kind of humor that the game displays over and over again. You might like it. If you do, this might be the game for you.</p>
<h3 id="lp-bot">LP-Bot</h3>
<p>When <em>supergreatfriend</em> (the LPer) first introduced his idea of LP-Bot when replaying a previously visited combat area in order to gain an item only achieved by doing this I found the idea quite funny. I don’t blame <em>sgf</em> for not wanting to talk through about 20-40 minutes of doing the same thing again. However I found the computer generated voice to be quite annoying during the second revisited combat area and found myself skipping it and the following ones. Still I wonder why <em>sgf</em> decided to insert timestamps that point out the ends of the combat areas during the first run of those sequences but not during the revisit. I definitely would’ve welcomed them. </p>
<h3 id="on-animations">On animations</h3>
<p><em>Deadly Premonition</em> features some truly bad animations. There’s Quint who’s waving around a tablet with drinks and food on it like it’s a sheet of paper. There’s Emily who obviously enjoys taking her drinks through her ears. The highlight is the general who’s sitting in front of his chair, in the thin air. He’s so cool, he doesn’t actually need the sun chair. On the other hand he’s so far removed from reality that he seemingly doesn’t need anything.</p>
<h3 id="recycling">Recycling</h3>
<p>There’s quite a bit of recycling going on. I’d argue that normally you wouldn’t be able to tell but since I’ve sat through the game only watching and not playing in quite a short time repeating patters became very obvious. For example Agent York always uses his same catchphrase to introduce himself. He also uses the same animation when doing so. Another animation that gets repeated often is the finger-pointing-upward-to-highlight-his-point thing. The same phrase about “vital piece” is always used when profiling the first time without hints.</p>
<h3 id="immersion-breakers">Immersion breakers</h3>
<p>It’s a common situation that the game’s atmosphere is hampered severely by its technology. If York rushes to another room to check on a possible victim it’s an incredibly immense immersion (<em>hurray for alliterations</em>) breaker when the game goes from cutscene to loading screen to cutscene. Loading screens happen far too often in situations such as this. Many scenes which are key to the story are introduced by loading screens. It’s just no good saying something needs immediate attention and then throw a loading screen at the player.</p>
<h3 id="ingame-spoilers">Ingame spoilers</h3>
<p>As <em>sgf</em> mentioned a few times the game is really bad when it comes to foreshadowing and spoilering plot events. Some of the trading cards have obvious spoilers and are obtainable at a point where they may ruin the experience and surprises of future events. The chapters’ names are terrible, telling you almost exactly what to expect. True, there are unexpected plot twists, some good, some bad but that doesn’t make up to the game trying to clue you in on things that you ought to find out trough investigating and not reading them on mysterious collectibles. </p>
<h3 id="impatient-passengers">Impatient Passengers</h3>
<p>York’s passengers being impatient when changing cars or generally just exiting the car seems to be an element where I expect there being a compromise during development. When exiting your current vehicle your passenger(s) will tell you that they’ll be waiting at the next location the plot considers important. You will never be able to change your vehicle without them rushing away. I’m not sure if this is in order for the NPCs to keep their schedules intact or to avoid writing situation based dialogue for your companions. </p>
<h3 id="additonal-notes">Additonal notes</h3>
<ul>
<li>Boxes have a hard life in <em>Deadly Premonition</em>. They either get pushed around or smashed.</li>
<li>I had some issues with playback of the downloaded files from blip.tv on my iPad. Neither streaming nor downloading delivered a satisfiable result, so I had to use either <a href="http://itunes.apple.com/at/app/goodplayer-movie-player-downloader/id416756729?mt=8">GoodPlayer</a> to sideload the files or <a href="http://itunes.apple.com/at/app/air-video-watch-your-videos/id306550020?mt=8">Air Video</a> to live-convert and stream them. While doing so was no problem, it was a problem that the devs of GoodPlayer <del>stopped providing changelogs</del> hid them quite well in the release notes.</li>
<li>Everyone loves <a href="http://lparchive.org/Deadly-Premonition/Fan%20Art/49-0TCgQ.jpg">the magic FBI poncho</a>, right? Like all magic rain ponchos it automagically appears when there’s rain and disappears on sunny days. Additional editions for other agencies are currently in discussion.</li>
<li>“I think Emily should know that Agent York takes as long as he needs. Or longer” - <em>sgf</em></li>
</ul>
<p>I’ve noticed that I still have notes left so I’ll be revisiting the topic of <em>Deadly Premonition</em> again in the near future.</p>The Future of Virtual Payment2012-01-15T16:11:23+01:002014-02-16T19:53:41+01:00Alexander Skibatag:ghostlyrics.net,2012-01-15:/the-future-of-virtual-payment.html<p>I’ve been doing a little summary about the future of virtual payment options that I wanted to share. This excerpt is part of a longer project for a cryptography and security related course at university to which I contributed this as well as some other sections and did the …</p><p>I’ve been doing a little summary about the future of virtual payment options that I wanted to share. This excerpt is part of a longer project for a cryptography and security related course at university to which I contributed this as well as some other sections and did the proofreading. While reading please keep in mind that I wrote this piece from memory and started adding source links afterwards.</p>
<blockquote>
<p>Considering we live in a very fast moving world in terms of technology and especially Internet related software it comes as no surprise that it’s difficult to do an accurate prognosis of what is likely to happen. That aside one can try to deduce trends from systems that are already well established as well as those who are gaining momentum fast due to either user popularity or heavily funded marketing that backs them.</p>
</blockquote>
<p>Of course this is mostly educated guesswork since I’m neither an expert nor have I been watching the trends for years so that I’m able to give a precise prognosis.</p>
<blockquote>
<p>First things first: There is no doubt that micropayments as well as macropayments are here to stay. One only needs to look at systems that are in use today to recognize their broad acceptance amongst their audience. Huge platforms like the iTunes Store, the Android Marketplace and STEAM to name just a few are doing extremely well offering micropayment systems to their customers. Although acceptance of services like Click and Buy is probably wide amongst distributors of digital goods, eBay’s purchase and deep integration of Paypal into its own platform as well as its worldwide customer base almost guarantee that Paypal itself has its future secured despite the criticism the company earned for <a href="http://www.wired.com/threatlevel/2010/12/paypal-wikileaks/">cutting WikiLeaks off its most valuable funding method</a>.</p>
<p>The same thing will probably hold true for credit cards due to their widespread use in shops, bars and other local venues as well as their ease of use when paying while traveling abroad. Their usage is already dangerous due to a great amount of credit card fraud occurring daily. It’s pretty safe to assume the companies behind the technology will try to improve its security while struggling to maintain the ease of use that makes the cards so popular. In the meantime criminals will try to crack the security mechanisms in place even faster making this an arms race that locks both sides in this fight.</p>
</blockquote>
<p>At least that’s my humble opinion never having used a credit card…</p>
<blockquote>
<p>Interestingly there is a growing tendency to be a victim of vendor lock-in not only in terms of for example application ecosystems but also in terms of a companies proprietary virtual currency or virtual wallet. Microsoft’s “Microsoft Points” are just one example for the attempt to transfer money to a vendor’s ecosystem instead of paying for a product upfront. The same principle applies for almost all online games which are based on a <a href="http://en.wikipedia.org/wiki/Freemium">Freemium</a> model.</p>
</blockquote>
<p>Or put differently: To buy MS’s DLC you still had to go buy your points at the store if you didn’t have a credit card. Well, not anymore. <a href="http://majornelson.com/2011/05/19/new-xbox-360-system-update-brings-expanded-paypal-functionality/">Paypal to the rescue.</a></p>
<blockquote>
<p>With the rising of new hardware possibilities like NFC combined with services like Google Wallet there is the chance for a major change in how we see cashless payment today. That is based on customer and vendor acceptance, though. Gaining this acceptance is not only a key to making those technologies profitable, but also to see this change coming to reality. A key factor to this might not be with the customers nor with the vendors but with the service providers that sell NFC equipped smartphones. Recent events involving one carrier in the United States have shown that <a href="http://9to5google.com/2011/12/05/verizon-is-blocking-google-wallet-likely-because-of-isis-partnership/">carriers might block Google Wallet in favor of their own services</a>, that being a reasonable step from a business point of view. However, actions like these might hamper the global acceptance of one such service severely. Even considering Google Checkout already being an established payment provider the chances of Google Wallet. becoming as ubiquitous as Paypal are slim and not helped by phone companies wishing to ship their own solutions.</p>
</blockquote>Fast Food Gaming2012-01-12T23:26:02+01:002014-02-16T19:53:59+01:00Alexander Skibatag:ghostlyrics.net,2012-01-12:/fast-food-gaming.html<p>The following paragraphs are quoted from <a href="http://www.gamesradar.com/rayman-origins-beyond-good-evil-and-state-games-industry-interview-michel-ancel/?page=3">an interview</a> that <a href="http://www.gamesradar.com">gamesradar</a> did with Michel Ancel and Gabrielle Shrager (<em>Rayman</em>):</p>
<blockquote>
<p><strong>GR: What, if anything, do you think is wrong with the games industry right now? Or right, for that matter?</strong></p>
<p><strong>MA:</strong> It’s very hard to emit an opinion on what’s …</p></blockquote><p>The following paragraphs are quoted from <a href="http://www.gamesradar.com/rayman-origins-beyond-good-evil-and-state-games-industry-interview-michel-ancel/?page=3">an interview</a> that <a href="http://www.gamesradar.com">gamesradar</a> did with Michel Ancel and Gabrielle Shrager (<em>Rayman</em>):</p>
<blockquote>
<p><strong>GR: What, if anything, do you think is wrong with the games industry right now? Or right, for that matter?</strong></p>
<p><strong>MA:</strong> It’s very hard to emit an opinion on what’s good and wrong, because everything is going so fast. Maybe too fast. Maybe that’s the main thing, is that people are jumping from one thing to another, and the bad thing that could happen to videogames would be to have games that you buy for one dollar, but you just play part of it and you move to another one, another one, another one, and you never really go deep in one game. And this could be a bad thing, the fast food of the games. And then, as old gamers, we could say, “Oh, in our time, we were waiting for a game! A game was something important, but now we have tons of games, and the price cut makes them like fast food.”
Maybe this could be a bad thing. At the same time, it’s a way to enter the videogame world easily, because you can play a game for free or one dollar. So maybe the entrance is easy, but then the game must be longer, or the wait as we make the game must be different. So we have to deal with this new way of making games.</p>
</blockquote>
<p>It is critical to establish the fact that the fast food consumption of video games is probably already happening. I can recall having several games on my STEAM account, which I’ve bought (not necessarily as part of a bundle) and have never ever played. Truth be told, I don’t even know if I ever get around to playing them. The problem is that there is only so much time one can spend with games and there are far more games being produced and published than one person himself can play in a immersed way. I find myself being drawn to books and movies and social activities too and that has to be subtracted from the leisure time there is for video games.</p>
<p>There is also the thing with time-management that becomes more and more mainstream oriented. <a href="http://www.instapaper.com/">Instapaper</a> and <a href="https://readitlaterlist.com/">Readitlater</a> have started the trend. The inclusion of a <a href="http://www.apple.com/macosx/apps/#safari">Reading list in Safari</a> and <a href="http://www.apple.com/ipad/built-in-apps/safari.html">Mobile Safari</a> has only accelerated the need for time managing solutions. I’ve seen Krystian from <a href="http://gamedesignreviews.com/">gamedesignreviews.com</a> creating a backlog for older games in his posession and <a href="http://gamedesignreviews.com/scrapbook/backlog-update-6/">updating it</a>. </p>
<p>Video games have to compete with many different leisure time activities. The more time consuming (<em>and I don’t use that in a negative way</em>) a game is the harder it will have to gain mainstream acceptance, that is what the “experts” want you to believe. I can only suggest looking at the epic adventure that <a href="http://www.elderscrolls.com/skyrim/"><em>Skyrim</em></a> is and its impact during the launch week. A slight hint: It didn’t struggle to amass extremely long playtime.</p>Deadly Premonition pt.22012-01-10T15:13:20+01:002014-02-16T19:54:33+01:00Alexander Skibatag:ghostlyrics.net,2012-01-10:/deadly-premonition-pt2.html<p>Back to a second and third session of <em>Deadly Premonition</em> it was. I have now progressed as far as having watched part 10 of the LP and got to enjoy a kind of special service of this LPer for his viewers: You see, the hero, Agent York, references quite a …</p><p>Back to a second and third session of <em>Deadly Premonition</em> it was. I have now progressed as far as having watched part 10 of the LP and got to enjoy a kind of special service of this LPer for his viewers: You see, the hero, Agent York, references quite a lot of old movies while talking, especially while driving, that is. The LPer went to the length of discussing these movies during long drives through the city so that the viewers wouldn’t be as bored as watching York drive all the length without talking. So far I’ve seen a review about a horror movies whose name I can’t recall right now and <a href="http://en.wikipedia.org/wiki/Xanadu_(film)"><em>Xanadu</em></a>.</p>
<h2 id="notes-section">Notes section</h2>
<ul>
<li>There was this one scene in which you are introduced to the rich man in the wheelchair with the gas mask. No offense, but aside from the man being eccentric to the top, the gas mask just screams “evil” to me. On the other hand, he makes his dialogue passages rhyme. Who wouldn’t like that?</li>
<li>I admit that I lack the inside view in federal (or to be precise: all) murder investigations, but I fail to understand why the details of this case are considered “Top Secret”.</li>
<li>Is there something in Japanese culture that dictates that women have to be able to cook? I’ve seen so many anime and video games that highlight a woman who isn’t able to cook in such an embarrassing way. It’s really a lack of respect if you ask me. I’m not a great chef myself but I get along. Also there are other options to satisfy your hunger than cooking yourself, you know?</li>
<li>How exactly does washing a car repair its damage? And don’t even mention something sexually charged with the lady at the gas station. That would’ve to be York’s health being restored, not the car’s.</li>
<li>The music is an interesting mix. I enjoy some parts of it, for example the mysterious part that plays when arriving at a new location as part of the investigation. But the funny, whistling part is so annoying that I feel like I need to mute the video for a moment.</li>
</ul>
<h2 id="quote-section">Quote section</h2>
<ul>
<li>“We are being a responsible FBI Agent by racing on the streets.” - <em>supergreatfriend (LPer)</em></li>
<li>“In Greenvale people play darts with guns” - <em>sgf</em></li>
<li>“Coffee equals sleep. You can go days without sleeping on coffee. Somehow I have a feeling that Agent York does that regularly.” - <em>sgf</em></li>
<li>“No, Emily, that’s not where the drink goes!” - <em>sgf</em> after Emily’s animation has her putting her glass to her ear…</li>
<li>“Agent York, where are you?” - <em>sgf</em> after a bug turns York invisible. <em>sgf</em> acknowledges that the lights and sirens of the police car are missing but doesn’t realize that it’s a <strong>stealth police car</strong>. Obviously.</li>
<li>“Maybe he needs friends who are not so dumb” - <em>A. York</em> while giving dumbbells to a NPC in a side quest.</li>
<li>“Nothing can go wrong doing this” - <em>sgf</em> while driving full speed on train rails</li>
<li>“reality is shifting” - <em>sgf’s</em> comment on a flickering texture</li>
<li>“it is resistant to car” - <em>sgf</em> about the monstrous dog</li>
<li>“we met a deadly dog and helped the deputy improve her cooking. Federal money well spent” - <em>sgf</em></li>
<li>“look at them standing so upright now” - <em>A. York</em> about kids who were <strong>sitting</strong></li>
</ul>
<h2 id="conclusio">Conclusio</h2>
<p>In my conclusion I want to point out that I really dislike the hero’s smoking habit. Maybe, just maybe someone thought that this added to his personality, which might even be occasionally true. I still don’t have to like it, do I?<br>
Also <em>sgf</em> said “I recognize that car” while simultaneously ramming it. He truly wreckognized it.<br>
There are some unresolved questions after this session though. Why is there a door leading outside in a police holding cell? Why can’t you enter the High School as part of the investigation? And where does the magical FBI poncho come from? We may never know.</p>Deadly Premonition pt.12012-01-08T14:30:55+01:002014-02-16T19:54:56+01:00Alexander Skibatag:ghostlyrics.net,2012-01-08:/deadly-premonition-pt1.html<p>I’ve just started watching the <a href="http://lparchive.org/Deadly-Premonition/"><em>Deadly Premonitions</em> Let’s Play</a> and was surprised that I was instantly reminded of <a href="http://lparchive.org/Alan-Wake/"><em>Alan Wake</em></a>, another Let’s Play I’ve watched quite some time ago. This impression was probably caused by the fact that they both base characters and other things on …</p><p>I’ve just started watching the <a href="http://lparchive.org/Deadly-Premonition/"><em>Deadly Premonitions</em> Let’s Play</a> and was surprised that I was instantly reminded of <a href="http://lparchive.org/Alan-Wake/"><em>Alan Wake</em></a>, another Let’s Play I’ve watched quite some time ago. This impression was probably caused by the fact that they both base characters and other things on <a href="http://en.wikipedia.org/wiki/Twin_peaks"><em>Twin Peaks</em></a>, which I’ve unfortunately not seen yet (<em>but I’ve made a mental note</em>).</p>
<p>One of those things that heavily remind me of <em>Alan Wake</em> is the countless and almost annoying references to coffee. They are everywhere. In <em>Alan Wake</em> they mostly took a backseat, which was more subtle and in my opinion preferable. Deadly Premonition, however the hero is quite picky about his coffee. It’s even explicitly mentioned in some of the intro dialogue. And it’s a dedicated game mechanic / gimmick mixture used to “tell your fortune”. Which, according to the LPer, has no practical use at all. Don’t you love it when that happens?</p>
<p>Based on what I’ve seen until now the rest of this post will be a mixture of notes (<em>mind you I’m just at the beginning of the LP, having only watched the first two of 36 parts</em>).</p>
<ul>
<li>The moment the LPer introduced the watcher to the hotel room, I was instantly intrigued by the mirror, since I know that there’s not a lot of games with this attention to detail which also go to a certain length to implement a proper mirror image. On the other hand though, I was disappointed later when it was shown that the mirror image is there for a reason: You are able to shave in this game, determining the looks of the hero. Don’t get me wrong here. I think the whole shaving idea is a bit strange, but well intended. I was just sad that the mirror wasn’t there just for its own sake.</li>
<li>What the hell is wrong with the typography? Who decided that those strange symbols I didn’t even recognize at first were exclamation marks? The exclamation marks are diagonal. That is distracting as I mistook them for slashes earlier, which led to some confusion on my part. A bit of a clearer font would have helped too. I think this is probably just sloppy, but how did this kind of typographical design flaw make it through QA?</li>
<li>A scene I find to be particularly funny is York (the hero) checking out the victim’s diary. “You can learn quite a lot from a diary”, he says. Still, the content of said diary is quite cryptic, which is probably the point. I guess.</li>
<li>
<p>The deciphering of micro-expressions and reading of signs as well as the whole “puzzling together the case” mentality reminds me of <a href="http://en.wikipedia.org/wiki/Criminal_minds"><em>Criminal Minds</em></a>. That is good, because I like <em>Criminal Minds</em>. A lot.</p>
</li>
<li>
<p>I chuckled a little at the crazy scene with the insanely huge dining room with the enormous table though there were only two people in the room. (I’m talking about the breakfast in the formerly great hotel.) The hero and his hostess almost had to shout in order to understand each other since they sat so far apart.</p>
</li>
<li>It’s a nice attention to detail to give every possible failure option (“Game Over”) its own little death animation. That is the level of detail that I find intriguing. I feel similar for games who try to implement unique icons for every single item they use instead of just class based ones. A bad example would be: “This is a potion. All potions look the same way although they have different effects. All potions come in suspiciously small bottles with green labels and are blue liquid.”</li>
</ul>
<p>The strangest thing for me was York’s manner of talking to Zach though. Who was Zach? Why was York always explaining things to him or asking him questions? And moreover: Why didn’t the LPer acknowledge that this was weird? It was not until a while later when York was asking Zach for a decision that I realized that Zach was basically the game’s way of communicating with the player. It’s not quite a way of breaking the fourth wall but nevertheless the game tries to integrate the player into the action. Fascinating.</p>
<p>Now on to the next session.</p>
<p><strong>PS: Thanks to the LPer for showing “What If” scenarios.</strong></p>Media Recap Precursor (Early January 2012)2012-01-05T19:31:40+01:002014-02-16T19:27:03+01:00Alexander Skibatag:ghostlyrics.net,2012-01-05:/media-recap-precursor-early-january-2012.html<p>I read quite some books over the days I was with my family during the holidays.</p>
<ul>
<li>Assassin’s Creed: Brotherhood (Oliver Bowden)</li>
<li>Assassin’s Creed: Revelations (Oliver Bowden)</li>
<li>First Frost (Jennifer Estep)</li>
<li>Touch of Frost (Jennifer Estep)</li>
<li>Kiss of Frost (Jennifer Estep)</li>
<li>Jumper (Steven Gould)</li>
<li>Born at Midnight (C.C …</li></ul><p>I read quite some books over the days I was with my family during the holidays.</p>
<ul>
<li>Assassin’s Creed: Brotherhood (Oliver Bowden)</li>
<li>Assassin’s Creed: Revelations (Oliver Bowden)</li>
<li>First Frost (Jennifer Estep)</li>
<li>Touch of Frost (Jennifer Estep)</li>
<li>Kiss of Frost (Jennifer Estep)</li>
<li>Jumper (Steven Gould)</li>
<li>Born at Midnight (C.C. Hunter)</li>
<li>Awake at Dawn (C.C. Hunter)</li>
<li>The UNIX-HATERS Handbook (<a href="/the-unix-haters-handbook.html">see previous post</a>)</li>
</ul>
<p>Of those there’s my usual assassins, daggers, cloaks and murder stuff as well as something more special (<em>Jumper</em>) and the geeky UHH. Still, the other two series are different. Way different, to be precise. I’m not their target audience. As far as I can tell that’d be girls from 15-19 (<em>judging from the way the descriptions of male figures are written</em>). But even considering this I found some parts to be genuinly funny, though I’m sure J. Estep could’ve made way more from the setting than she has. C.C. Hunter though is a genius. The characters in this book are so vivid. They don’t feel real because they are mythical creatures, but they are very lifelike. You are able to relate to them, to see them in your mind very clearly.<br>
Also they have wit and a tiny bit of that sarcastic and sometimes sassy attitude, that makes me smile while reading. I’m already considering preordering the next book.</p>
<p>I also finally got managed to watch Ben Kuchera’s talk on <a href="http://arstechnica.com/gaming/news/2011/12/how-to-market-your-indie-games-ben-kucheras-lecture-at-run-jump-dev.ars">how to market an indie game</a> which was interesting.</p>The UNIX-HATERS Handbook2011-12-30T08:39:28+01:002014-02-16T19:31:09+01:00Alexander Skibatag:ghostlyrics.net,2011-12-30:/the-unix-haters-handbook.html<p>Over the last few days I’ve been reading the excellent <a href="http://en.wikipedia.org/wiki/UNIX-HATERS_Handbook">UNIX-HATERS Handbook</a>. In case you haven’t had the pleasure to read it yet or worse, haven’t heard of it before, it is a collection of stories, rants, design flaw analysis and newsgroup posts about UNIX. It is …</p><p>Over the last few days I’ve been reading the excellent <a href="http://en.wikipedia.org/wiki/UNIX-HATERS_Handbook">UNIX-HATERS Handbook</a>. In case you haven’t had the pleasure to read it yet or worse, haven’t heard of it before, it is a collection of stories, rants, design flaw analysis and newsgroup posts about UNIX. It is also writing in a highly cynical and amusing way that will definitely bring you hours of amusement if this geeky type of humor is your thing. <em>It certainly did for me.</em> Don’t take it too lightly though as it has been one of the few books I’ve had to put down for some time in between my reading sessions and not rushed through. Of course that might be caused by the fact that beneath its cynical site it is nonetheless very technical reading material.</p>
<p>Now before you can run away screaming that you can’t be bothered to read or moreover buy such a nerdy book let me tell you that it is distributed for free as a <a href="http://www.simson.net/ref/ugh.pdf">.PDF file</a>. After we have established that you can obtain this work legally without payment I’ll transition over to it’s content. During this post I’ll quote several times from the book. This will be accompanied by footnotes. <sup id="fnref:pagenumbers"><a class="footnote-ref" href="#fn:pagenumbers">1</a></sup></p>
<p>At least after one last historical bit. You see, the book was released during the nineties, which makes it ancient in terms of relatedness concerning computer science. Now while I’ll be the first to admit that I probably didn’t understand everything <em>I can tell for certain</em> that I am able to relate to some of the mentioned issues having come across them myself during either my time spent with Ubuntu Linux or during some… let’s call them “<em>terminal experiments</em>” on my Mac.</p>
<h2 id="why-would-they-ever-want-to-do-that">Why would they ever want to do that?</h2>
<p>One of the favorite things to worry about of application developers, be it the designers or the coders, seems to be the users reason to create special use cases. Let’s start this section with a nice historic example which sounds pretty ridiculous in our modern days.</p>
<blockquote>
<p>Why would you ever need to point to something that you’ve drawn in 3D? <sup id="fnref:quote-3d"><a class="footnote-ref" href="#fn:quote-3d">2</a></sup></p>
</blockquote>
<p>In my opinion there is a lesson to be learned from that. You cannot try to anticipate every possible usage scenario that the users can <em>and will</em> come up with. To minimalize the damage however one can try to do extensive user testing during development and not fret to listen to the users, or community as they are mostly called nowadays after your product has been deployed. Look at yourself. How often have you had to bend a misbehaving piece of software to your will in order to get your desired output?<br>
<strong>The answer is probably quite often. </strong> However, you being a person with reasonable computer skills will be able to do that. Average users won’t be able to do that and moreover they are not willing to do that. Either your software can achieve the user’s goal or it cannot. If not it will be replaced. </p>
<h2 id="having-fun-with-sed">Having fun with sed</h2>
<blockquote>
<p>Some people, when confronted with a Unix problem, think ‘I know, I’ll use <code>sed</code>.’ Now they have two problems. <sup id="fnref:quote-sed"><a class="footnote-ref" href="#fn:quote-sed">4</a></sup></p>
</blockquote>
<p><code>sed</code> is a difficult topic, I’ll give you that. All the while being pretty helpful when trimming, changing, extending and otherwise transforming text it is a useful command. Of course it’s not the engineer’s fault it can also be overly complicated, especially if you need to perform multiple commands so that you better outsource them to a file or else… Or when you either have to change the symbol which is used to signal the separator between its command sequences. Or when when trying to hack around limitations which are system dependent like <code>sed</code> not understanding <code>/n</code> on OS X.</p>
<h2 id="y2k38">Y2K38</h2>
<blockquote>
<p>The ultimate example of careless Unix programming will probably occur at 10:14:07 p.m. on January 18, 2038, when Unix’s 32-bit <strong>timeeval</strong> field overflows… <sup id="fnref:quote-time"><a class="footnote-ref" href="#fn:quote-time">5</a></sup></p>
</blockquote>
<p>Wikipedia tells me that the problem of using a 32bit integer to store system time and date is nowadays mitigated by using 64bit integers. Maybe the person who first thought of the old implementation was convinced that mankind would never see the year 2038. Well, to be fair he was pretty darn right that he’d never see that year given our life expectancy. Wikipedia also tells me that the newer implementation limits the year to 2,147,485,547. I wonder if - theoretically speaking - there might be people around cursing that stuff no longer works at 2,147,485,548. I think I’d consider this design flaw repeating itself quite funny.</p>
<h2 id="security">Security</h2>
<blockquote>
<p>Beware of the sysadmin claiming to be improving security when editing these files; he is referring to his job, not your system. <sup id="fnref:quote-security"><a class="footnote-ref" href="#fn:quote-security">6</a></sup></p>
</blockquote>
<p>I can remember only four times when I had to modify these files without a GUI. Two times during installs of <a href="http://www.archlinux.org/">Archlinux</a> while heavily relying on their great <a href="https://wiki.archlinux.org/">wiki</a>. The other two times I wrecked my system.</p>
<h2 id="design-principles">Design principles</h2>
<p>One of my favorite quotes, being a Mac convert since December 2010 is the following one about what the target audience of various operating systems looks like:</p>
<blockquote>
<p>The fundamental difference between UNIX and the Macintosh operating system is that UNIX was designed to please <em>programmers</em>, whereas the Mac was designed to please <em>users</em>. (Windows, on the other hand, was designed to please accountants, but that’s another story.) <sup id="fnref:quote-windows"><a class="footnote-ref" href="#fn:quote-windows">3</a></sup></p>
</blockquote>
<p>For additional laughs do <strong>not</strong> skip the chapter <em>The rise of worse-is-better</em> which is in the epilogue and itself an excerpt from another article. </p>
<div class="footnote">
<hr>
<ol>
<li id="fn:pagenumbers">
<p>also, the page numbers might be off due to my not using the .PDFs page numbers but the script’s internal ones. <a class="footnote-backref" href="#fnref:pagenumbers" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:quote-3d">
<p>UNIX-HATERS Handbook, p. 138 <a class="footnote-backref" href="#fnref:quote-3d" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:quote-windows">
<p>UNIX-HATERS Handbook, p. 163 <a class="footnote-backref" href="#fnref:quote-windows" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:quote-sed">
<p>UNIX-HATERS Handbook, p. 168 <a class="footnote-backref" href="#fnref:quote-sed" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
<li id="fn:quote-time">
<p>UNIX-HATERS Handbook, p. 192 <a class="footnote-backref" href="#fnref:quote-time" title="Jump back to footnote 5 in the text">↩</a></p>
</li>
<li id="fn:quote-security">
<p>UNIX-HATERS Handbook, p. 235 <a class="footnote-backref" href="#fnref:quote-security" title="Jump back to footnote 6 in the text">↩</a></p>
</li>
</ol>
</div>On the Horror Games study2011-12-19T05:20:00+01:002014-02-16T19:43:00+01:00Alexander Skibatag:ghostlyrics.net,2011-12-19:/on-the-horror-games-study.html<p>A <a href="http://www.gamasutra.com/view/feature/6480/scary_game_findings_a_study_of_.php">study</a> done by <a href="http://www.verticalslice.co.uk/">Vertical Slice</a> and published on <a href="http://www.gamasutra.com">Gamasutra</a> about horror games and their effects on players lists the following amongst its findings:</p>
<blockquote>
<p><strong>The closer a game resembles film, the more casual players are scared. Conversely, the less scripted a game is, the more the core players are scared …</strong></p></blockquote><p>A <a href="http://www.gamasutra.com/view/feature/6480/scary_game_findings_a_study_of_.php">study</a> done by <a href="http://www.verticalslice.co.uk/">Vertical Slice</a> and published on <a href="http://www.gamasutra.com">Gamasutra</a> about horror games and their effects on players lists the following amongst its findings:</p>
<blockquote>
<p><strong>The closer a game resembles film, the more casual players are scared. Conversely, the less scripted a game is, the more the core players are scared.</strong> Third-person, tightly scripted events are scarier to casual players than to core gamers, while first-person, generative events are scarier to experienced players.</p>
</blockquote>
<p>I think what happens here is the following:</p>
<ul>
<li>
<p>Casual gamers are expecting the game to drive the story and therefor the scares with them. They expect to be delivered little pieces of fear and the game to focus its whole attention on them. In short: <em>I accuse them of wanting to be spoonfed with terror.</em></p>
</li>
<li>
<p>Core gamers are likely to explore more on their own without being given incentives. They explore for the sake of discovering the things the developers want them to see. As can be seen in the rising excitement of the core gamers amongst the study’s test subjects the tension doesn’t sink when exploring.</p>
</li>
</ul>
<p>My impression is that a gaming experience which relies heavily and nearly exclusively on scripted sequences (<em>you might call it a on-rails-experience</em>) don’t excite core gaming audiences as much as more freely explorable parts tend to do. This is caused by a motivation to see what might lurk in the shadows (pun intended) instead of heaving something jump at you from the vents.</p>
<p>That being said one might argue that all gamers found <em>Dead Space 2</em> the scariest game tested. <em>Considering that I personally wouldn’t count Alan Wake as horror game and there’ve been many voices exclaiming that Resident Evil 5 was way more of an action game than a scary horror game… no, wait, I’m rambling</em>. What I wanted to point out is that <em>Dead Space 2</em> used techniques that the some of the other games seemed to lack or not use effectively, like strange noises to suggest impeding danger. To conclude this little article I’ll just quote another short paragraph of their findings:</p>
<blockquote>
<p><strong>Actual combat is not as scary as the implied threat of combat.</strong> The biggest cares result from moments devoid of any physical combat; instances in which players anticipate or fear they are about to fight, but do not actually end up doing so. </p>
</blockquote>Markdown2011-12-13T01:03:00+01:002014-02-16T19:44:46+01:00Alexander Skibatag:ghostlyrics.net,2011-12-13:/markdown.html<p>Recently I’ve been writing a lot of markdown. Now <em>“What the hell is markdown”</em> you might ask. <a href="http://daringfireball.net/projects/markdown">Markdown</a> is a markup language that serves to simplify the task of writing HTML, which is both cumbersome and annoying at times, since It requires you to write all those HTML elements …</p><p>Recently I’ve been writing a lot of markdown. Now <em>“What the hell is markdown”</em> you might ask. <a href="http://daringfireball.net/projects/markdown">Markdown</a> is a markup language that serves to simplify the task of writing HTML, which is both cumbersome and annoying at times, since It requires you to write all those HTML elements you you need for your website or your fancy blog post. You know the ones you need but don’t actually want to have to type every time, like lists, paragraphs or even headers.</p>
<p>If you’re tired of writing everything down in clean HTML too you should definitely try writing in markup. Tumblr can easily accept input in markdown and there are plugins available door several other blogging platforms, even referenced on the <a href="http://daringfireball.net/projects/markdown/">project page</a> on daring fireball. I have not checked if there are plugins available for WordPress but I’d argue that there’s usually a plugin for everything on that platform.</p>
<p>That is if you intend to use such a platform’s editor. Gruber provides Markdown as a Python script on his website which can convert his Markdown text into valid HTML and/or XHTML. If you’re using Linux or OS X your OS probably came with Python installed. I don’t know how to use Python on Windows and there’s a chance I’ll never know unless someone tells me.</p>
<p>In order to use the script as an easy command in your terminal emulator of choice you have to copy it into a folder which you specify in your terminal’s <code>PATH</code> and remove the file ending should you wish to do that (as the script is prepared to work even without its file ending).</p>
<p>So I suggest giving markdown a spin and see if it speeds up your workflow or just find it to be convenient like I do.</p>Borderlands (Novel)2011-12-11T00:35:00+01:002014-02-16T19:46:03+01:00Alexander Skibatag:ghostlyrics.net,2011-12-11:/borderlands-novel.html<p>I recently discovered via <a href="https://www.facebook.com/borderlandsgame">Borderlands’ facebook feed</a> that there’s going to to be a novel which uses the same setting as the game. Of course I, having enjoyed the game quite much, was curious about that. Add to that the fact that I previously read a lot of books …</p><p>I recently discovered via <a href="https://www.facebook.com/borderlandsgame">Borderlands’ facebook feed</a> that there’s going to to be a novel which uses the same setting as the game. Of course I, having enjoyed the game quite much, was curious about that. Add to that the fact that I previously read a lot of books that were telling stories in the worlds of games I’ve played before I was looking forward to reading it.</p>
<p>That said the announcement contained an example how the book was going to be. I was genuinely surprised by that considering that the part of the book they were willing to share was not only a .pdf of 39 pages (make that 37 with text) but also finding that the book captured the flair of borderlands really well. The style, the atmosphere was right there when I flicked through the passage provided, I could nearly feel the dusty surrounding. I could say that I had to cough from imagining the sand and heat near me, but you’d probably suggest cleaning up my room, so I won’t do that.</p>
<p>The cover features (what was his name again? I’ll have to check…) Roland, who seems to be the main character judging from what I’ve read yet. <em>Though I would’ve preferred Mordekai or Lilith.</em> Most interestingly for fans perhaps is that I’ve seen mentions of enemies which until yet have only been seen in previews to Borderlands 2 and were not starring in Borderlands 1.</p>
<p>I don’t think I’ll be getting this anytime soon though, since the style the book is written in does not really fit what I favor when reading. It’s a bit like the game though: Fast-paced, a lot of action, shootin’ and not too little profanity. No offense here, but that’s somehow not what I want when I shell out my coin for a new book. <em>Virtual coin that is, that buys me virtual books. We live in a strange, but interesting world.</em></p>
<p>In case you’re interested, check out the <a href="http://www.amazon.com/Borderlands-Fallen-John-Shirley/dp/1439198470/">novel on amazon.com</a>.</p>Project:Rosetta - Illusionists' accidents2011-12-01T11:10:00+01:002014-02-16T19:24:55+01:00Alexander Skibatag:ghostlyrics.net,2011-12-01:/projectrosetta-illusionists-accidents.html<p>Today I want to talk about some musings and minor issues I’ve recently had while writing that novel project of mine: <a href="/tag/projectrosetta/">Project:Rosetta</a> (yes, I am sincere - no, I started before <a href="http://nanowrimo.org">NaNoWriMo</a>. Also I’m not American, in case you didn’t know.)</p>
<p>Since my novel contains a lot …</p><p>Today I want to talk about some musings and minor issues I’ve recently had while writing that novel project of mine: <a href="/tag/projectrosetta/">Project:Rosetta</a> (yes, I am sincere - no, I started before <a href="http://nanowrimo.org">NaNoWriMo</a>. Also I’m not American, in case you didn’t know.)</p>
<p>Since my novel contains a lot of fantasy themes and is heavily influenced by video games (and of course many other things) it will include magic and in extension of that (mostly young) people learning how to work this magic. Now, helped by the fact that a certain number of young people are quite careless and therefor accident-prone there will be semi-regular training accidents.
Some of those will leave quite obvious markings, like burn scars on fire magic trainees, right? But - and this is the interesting part - what about magic that is more subtle? I am talking about mental tricks, illusions and other schools of magic where you can’t just calculate the damage on a person by applying enough of its element with a huge amount of force to a human body.</p>
<p>Which damage is there to apply? Which consequences of reckless usage are there to be avoided?</p>
<p>I pondered a lot on these two questions and the answer I came up with was still not quite satisfying. My thoughts were about not being able to control those illusions any more. Around the mage they’d sometimes manifest themselves for no obvious reason and create turmoil on their own, without the mage’s awareness. I’ve thought about voices in the minds of people nearby, to give on particular example.</p>
<p>Still there was a problem to those effects: In contrast to what I wanted, these affected other people and not the trainee himself. Thankfully though a colleague of mine whom I respect a lot suggested them gradually not being able to tell the difference between illusions and reality anymore.</p>
<p>I like this idea a lot and will probably have a mix of all the described effects to give that sense of danger and unease to careless students of mind-focused schools of magic.</p>
<hr>
<p><strong>Update</strong>: Sorry, I wasn’t aware that NaNoWriMo isn’t US only.</p>Quicklook Plugins (OS X)2011-11-08T09:01:00+01:002014-02-16T19:25:55+01:00Alexander Skibatag:ghostlyrics.net,2011-11-08:/quicklook-plugins-os-x.html<p>I just wanted to point out the site <a href="http://www.quicklookplugins.com">QuickLook Plugins List</a> for anyone wanting to improve the already great QuickLook functionality in OS X. I already grabbed some plugins there and although not everything works on OS X Lion (I’ve commented wether I’ve checked or not).</p>
<p>Currently I …</p><p>I just wanted to point out the site <a href="http://www.quicklookplugins.com">QuickLook Plugins List</a> for anyone wanting to improve the already great QuickLook functionality in OS X. I already grabbed some plugins there and although not everything works on OS X Lion (I’ve commented wether I’ve checked or not).</p>
<p>Currently I’m using these:</p>
<ul>
<li><a href="http://code.google.com/p/quicklook-ipa/">IPA Quicklook</a> (iOS Applications)</li>
<li><a href="http://bluezbox.com/ndsquicklook/">NDSQuickLook</a> (.nds files)</li>
<li><a href="https://github.com/planbnet/QuickNFO">QuickNFO</a> (.nfo files)</li>
<li><a href="http://www.mothersruin.com/software/SuspiciousPackage/">Suspicious Package</a> (.pkg files)</li>
</ul>
<p>I also used to use <a href="https://github.com/whomwah/qlstephen">QLStephen</a> (READMEs, makefiles, etc.) until yesterday or so, since I’ve realized it’s starting an unneeded 32bit process that I didn’t want. In the mean time I’ve filed <a href="https://github.com/whomwah/qlstephen/issues/5">an issue on github</a> to which the dev has quickly responded that this is for Legacy compatibility (cite: “Leopard”).</p>
<p>Also he mentioned that patches are welcome… but I don’t think my coding experience is yet enough to participate…</p>
<hr>
<p><strong>Update:</strong> Added the missing link for QLStephen.</p>The Night Circus (Browser) pt.22011-11-01T19:14:00+01:002013-08-24T02:25:10+02:00Alexander Skibatag:ghostlyrics.net,2011-11-01:/the-night-circus-browser-pt2.html<p>I have finally managed to absorb all story-relevant content of the Night Circus browser game, which is incidentially quite well timed given that there has been talk on twitter about closing the game down around the time of Halloween. Now, I admit last time I checked <a href="http://www.nightcircus.co.uk">the circus</a> was still …</p><p>I have finally managed to absorb all story-relevant content of the Night Circus browser game, which is incidentially quite well timed given that there has been talk on twitter about closing the game down around the time of Halloween. Now, I admit last time I checked <a href="http://www.nightcircus.co.uk">the circus</a> was still up and running, but for a short period of time last week I panicked.</p>
<p>I really enjoyed the game up to the point that I knew that I’d buy the book even before it was released. I’d like to say before it was properly announced, but that is probably a bit too overstated, so I’ll just stick to my point: I knew I’d enjoy the book before buying it since I was able to visit its world, its setting through the browser game. The intense monochrome world which is filled with its generous display of magic disguised as tricks and feats of machinery drew me in. I wanted to see more of it, knowing that Morgenstern said that there’d definitely not be a sequel to the book. (<em>Also I see no reason to do a sequel aside from reusing the great location of the magical black and white circus</em>)</p>
<p>Interestingly though, The Night Circus was one of the few books which I put down from time to time instead of blazing through all pages in one half-a-day session. Parts of it made me smile. Parts of it made me sad. Some parts made me think. Knowing that there’d be just a little more content after I’ve finished the book I returned to the game. In the game, you’re given multiple goals. Some are definite goals, which you recognize as such. Others are more mysterious, like aspirations which draw you into the circus. Are you there looking for a forbidden love story? Are you there to experience its adventures through a treasure hunt? Would you rather take apart the clockwork which seems to power a lot of its more mechanical wonders like the carousel or are you looking forward to peek behind the scenes of the illusionist’s performance? It doesn’t really matter which. The circus has things to enjoy for everyone.</p>
<p>Personally I completed the introduction to the circus via finding all <strong>circus secrets</strong> and afterwards strived to persue my <strong>interest in magic</strong> for a short term until realizing that I’m more drawn in by my <strong>interest in love</strong> which saw me looking into a tender romance, hidden beneath secrets and disguises. As the circus reached its final performance, I was able to take part in a <strong>treasure hunt</strong> and politely declined at first when the lovely lady wanted me to hand over my carefully collected souvenirs. After pursuing my interest in love until its conclusion I felt the urge to return to the lady and claim my reward nevertheless. I was given a beautiful red gem which I hold very dearly next to my scarlet scarf, earned as a reward for helping two troubled lovers. After a little while I was again approached by a strange gentleman which seemed inclined to learn more about the wizardry going in the circus’s tents. I did some research for him but soon came to the same realization as Herr Thiessen, the first <em>rêveur</em> <a id="rev-orig" href="#reveur">[1]</a> and legendary maker of the circus’s famous black and white clock: Sometimes it is better and more enjoyable if you don’t know the magic behind the scenes and can open all your senses without a preoccupied mind. That is basically the same answer I gave the nice gentleman when he inquired about the status of the investigation. Afterwards I was approached by the fortuneteller which exchanged a photograph of the contortionist left by the gentleman for a deck of finely crafted tarot cards.</p>
<p>As everything was open to me now, I began seeing the beautiful things in mechanical things and therefore giving in to my newfound <strong>interest in clockwork</strong> and was soon invited to have a chat with Herr Thiessen. This was one of several occasions he told me lots of little details about the circus which I’ve previously been missing and found that I had a fair share of details to report myself. On a particular nice evening he showed me a great mechanical creature: a tiny bird entirely made of metal, chirping and flying like a real bird. I remember this night fondly as it was the same I gained the <strong>Friendship of the Circus</strong>, an honor only few <em>rêveurs</em> have ever achieved. Of course I do look forward to attending the circus more often, but I’m not sure how much more there is to report since I’ve chosen not to follow the opportunity for romance that has presented itself to me.</p>
<p>Yours truly,<br />
Alex, a <em>rêveur</em></p>
<p>Footnotes:
</p>
<ul><li><a id="reveur" href="#rev-orig">[1]</a> - We, people who try to visit the circus at every chance and are more familiar with it than its typical visitors, dress in black with a touch of red, like a scarf or a ribbon, to show we are part of the circus, yet not part of it. We are called the <em>rêveurs</em>.</li>
<li>I’d like to mention that I’m not perfectly sure if all things that are mentioned are correct or in correct order since I’ve played from mid September until the end of October 2011 and since I haven’t kept a log about my pleasurable circus activities I have to rely on my memory (<em>which, incidentially, is not a good idea</em>)</li>
</ul>Rox (opening)2011-10-14T00:39:00+02:002014-02-16T19:22:05+01:00Alexander Skibatag:ghostlyrics.net,2011-10-14:/rox-opening.html<p>I wanted to do some <a href="/tag/cuisine-notes">food related commentary</a> for a while now, but what better chance to introduce it than with the opening of <a href="http://rox-barandgrill.com/">Rox</a> in Graz to which I’ve been invited by a friend from university. I didn’t know what to expect other than it being a …</p><p>I wanted to do some <a href="/tag/cuisine-notes">food related commentary</a> for a while now, but what better chance to introduce it than with the opening of <a href="http://rox-barandgrill.com/">Rox</a> in Graz to which I’ve been invited by a friend from university. I didn’t know what to expect other than it being a restaurant/bar type thing with its menu having a focus on grilled meat (notice the URL having “grill” in it? I see what you did there.) If you read this and were at the opening you might have seen me. I was the guy dressed completely in black from head to toe with the exception of a little touch of red like a true <em>rêveur</em>.<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> </p>
<p>Initially I was somewhat reluctant since I’ve not been to many bar openings until now (read: none) but although several friends of mine didn’t show up it was a nice evening. But on to the important part:</p>
<p>Rox itself is near the Jakominiplatz in Graz, a fact that gives it a pretty convenient, central location. Due to its green sign it’s immediately visible from the street. You enter through a pair of glass doors and are greeted by a greenish Decoration which consists of a lot of “Heineken” signs (at least I think they are - sorry I’m not great with alcohol) and an amazing amount of guitars of all flavors. There are guitars everywhere: above the doors, on the hanging decoration which also contains the lights, in glass showcases along the walls. The guitar/rock theme is consistent. After entering you make your way to the bar past some single tables. And <strong>then you reach the bar.</strong> The reason I’m placing so much emphasis on the bar is its sheer size. It’s the longest bar I’ve ever seen. Not that I’ve seen that many, I admit but it is indeed impressive. There’s a more open room in the front of the building where many tables are placed and there’s also an area which looked a bit more separated from the dining area along the part of the bar located in the back of the building. Oh and while we’re talking about colors: The team is also dressed in green.</p>
<p>For the part that’s important to beer fans: As far as I got it they offer about 6 different flavors/brands. There’s also other liquor as well as non-alcoholic beverages and <strong>non-alcoholic cocktails</strong>. <em>Unfortunately I forgot to try one of those.</em> The menu offers a variety of food (I’ll refer you to <a href="http://rox-barandgrill.com/index.php?article_id=8">the menu</a> for that.).</p>
<p>Initially some of my colleagues there had the idea to order food but that somewhat changed after several drinks so that there were three grill plates (I do hope I’m translating that right) ordered and I had salad with turkey. We waited a long time for our food. Considering, me and Herr K. (<em>which I will use as long as necessary until this nickname is established properly</em>) were nagging for a while until we even convinced the rest of the guys to order something. And even before that we had to get a table, since the table we booked was given to some semi-famous sportsmen (<em>can you see me being pissed here? No? Look harder!</em>). So, I tried to have salad with turkey, but they somehow forgot the turkey. After even more waiting I finally got my perfect salad. On the other hand I acknowledge that there was a lot going on during the opening night and accidents happen. I plan to pay Rox a second visit for a culinary excursion at a quieter time anyway so there might be a second post a while from now. (<em>and yes, the food was good but nothing out of the ordinary</em>)</p>
<p>So, you may ask: “Alex, what about the vibe? What was it like?” Fret not, I’m getting there. There was a feeling of perpetual busyness during the whole evening though it got better (read: a little less crowded) at about 10 p.m.. The music was okay and the music volume too. I was able to communicate without screaming which is always a plus when talking about bars with their focus on evening entertainment. Now that I think about it there were people a little younger than me (<em>which would be younger than 22 in case you’re asking.</em>) to something I’d guess around 55? My point is: it’s not a location which has its target group set to a particular age. Drag your dad there, take your friends there. They probably won’t feel uncomfortable or out of place. Although it’s been described as some sort of rock-bar I didn’t feel like it was very focused on that. A friend even told me there was some famous trainer of some sport there. Of course I didn’t know that. Also I didn’t know who he was talking about even after he told me his name, so I was just enjoying the moment at that time.</p>
<p>In conclusion the opening was fun, the location is worth a recommendation and a definite verdict considering some more sophisticated food is going to follow the second visit.</p>
<hr>
<p><strong>Update:</strong> link corrected, footnote removed.<br>
<strong>Update:</strong> I’ve been there for a second time and been able to draw my <a href="/rox-follow-up.html">conclusion</a>.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>shameless plug for <a href="http://erinmorgenstern.com/the-night-circus/">Erin Morgenstern’s “The Night Circus”</a></a>, a book I highly recommend <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>The Night Circus (Browser)2011-10-02T09:26:00+02:002013-08-24T02:23:32+02:00Alexander Skibatag:ghostlyrics.net,2011-10-02:/the-night-circus-browser.html<p>I’ve been playing, reading and enjoying <a href="http://www.night-circus.co.uk">The Night Circus</a> for about two weeks now. It’s a free browser-based game which is used to promote a fantasy book also called “The Night Circus” written by new author Erin Morgenstern. I came across the game in something of a cross …</p><p>I’ve been playing, reading and enjoying <a href="http://www.night-circus.co.uk">The Night Circus</a> for about two weeks now. It’s a free browser-based game which is used to promote a fantasy book also called “The Night Circus” written by new author Erin Morgenstern. I came across the game in something of a cross referral from <a href="http://blog.failbettergames.com/post/The-Night-Circus.aspx">Betterblog</a>, the blog of <a href="http://www.failbettergames.com/">Failbetter Games</a>, the company which brought you <a href="http://echobazaar.failbettergames.com/">Echo Bazaar</a>.</p>
<p>And my verdict after playing through four performances of the mystical Night Circus is: <strong>Play the Night Circus</strong>. Let yourself be drawn into a world of black and white, with mysteries wherever one’s eye wanders. The browser-based game where your basic game mechanic is to read a short piece of content and decide how you want to react to the things you’ve been presented is mostly reused from Failbetter Games’ previous game Echo Bazaar. There are two things you have to keep in mind though. The Night Circus is neither ad-based nor is it a <a href="http://en.wikipedia.org/wiki/Freemium">freemium game</a>. Since it was created to act as a viral marketing campaign for Morgenstern’s book it doesn’t need to be. I am aware of the fact that the game itself is a giant self-contained ad. Curiously though I’m not opposed to that. I can even say it worked for me. I am definitely going to buy the book as the game has managed to stir my interest for this monochrome universe of magic tricks and artistry. I have reasons why I am not reading the novel <strong>right this moment</strong>, though I sometimes wish I would be.</p>
<p>I haven’t seen a viral marketing effort this catered to readers and gamers alike and I’d be very interested in figures or percentages of how many people bought the book because they’ve been immersed in the online game. I think it’s a great marketing strategy that doesn’t use the obnoxious in-your-face approach that I so despise about most advertisement. I am someone who tries to gather information before I buy something, I even gather information before I get interested in things. I don’t go out there and see stuff I have to buy immediately (snacks aside ;)) but a person who learns new stuff from watching, I’d even say observing. Not someone who will buy whatever you shove into his face. Or at least I’d like to believe that. How could I state that objectively in my self-bias?</p>Borderlands (PC)2011-09-30T05:01:00+02:002013-08-24T02:22:36+02:00Alexander Skibatag:ghostlyrics.net,2011-09-30:/borderlands-pc.html<p>I’ve just finished playing through Borderlands with a friend in the co-op mode which Borderlands is semi-famous for. Some might argue that Borderlands was mainly intended as a cooperative experience and the fact that it has a single player mode is simply a side effect of stripping out the …</p><p>I’ve just finished playing through Borderlands with a friend in the co-op mode which Borderlands is semi-famous for. Some might argue that Borderlands was mainly intended as a cooperative experience and the fact that it has a single player mode is simply a side effect of stripping out the other players from the “main mode”. I honestly think there is something to this based on my own experience with the single player mode and the multiple sessions I’ve played with said friend. While playing the single player mode (my first playthrough) I nearly always felt the game being too easy for my taste. That being said you could assume that I am a hardcore gamer whose only pride resides in winning over my opponents - might they be computers or fellow gamers - over and over again. The shocking truth is: I <strong>am not</strong>. Quite the contrary: I am a person playing games mainly because I expect interesting story arcs. I am that kind of person that game developers might fear because I’m not that interested in playing the game as I am in seeing the story unfold.</p>
<p>Now if I say that I felt Borderlands being easy in single player mode I didn’t mean “I own the game so hard it almost hurts” but as in “I effortlessly walk through most sections”.
I can’t say if I felt that way because the class I chose to play (a character called “Mordekai” which is a sniper) is not as balanced as he could be or simply because the scaling mechanism which works quite well in multi player sessions as evidenced by several repeated and cruel deaths experienced by us during those sessions. Still, even with two people it wasn’t terribly difficult. The game throws new great stuff (read: weapons, shields, etc.) at you like there’s no tomorrow. <em>Incidently there isn’t as the vault - which is your goal - can only be accessed every 200 years.</em> Anyway, you never feel underpowered which is a pleasent feeling to be honest, though the seemingly lacking difficulty could be attributed to the fact that enemy level’s are linked to the areas they are assigned to. You need to progress through the story to confront stronger foes.</p>
<p>Moreover you have to be aware that both me and my friend have a little completionist streak. We tried very hard and successfully to complete all side-quests fearing we might lose some of the backstory if we didn’t. <em>Though that was justified by the fact that the already thin plot desperately needs more backstory.</em> The outcome of all this completionism though was us being overleveled for every new area we ventured to and the quest system ranking every quest “trivial” due to that.</p>
<p>I recognize there being a tough edge of not forcing people to grind in order to progress easily and seriously overpowering completionist but I didn’t feel like Borderlands hit the sweet spot concerning that.</p>
<p>I will look into that issue further when we hit the DLCs which came with the Steam offer and as we might start a second playthrough. I’ve also read on the Borderlands wikia that there’s something avid players call “playthrough 2.5” which <strong>does in fact scale every enemy’s level</strong>. Now this sounds interesting.</p>Cut the Rope (iPad)2011-09-09T12:05:00+02:002013-08-24T02:35:45+02:00Alexander Skibatag:ghostlyrics.net,2011-09-09:/cut-the-rope-ipad.html<p>I recently had a stab at <a href="http://en.wikipedia.org/wiki/Cut_the_Rope">Cut the Rope</a> on the iPad (using the iPad of a co-worker). The game’s concept is strikingly simple: Feed candy to an adorable green monster. Of course it’s not <em>that</em> easy: There are some strings attached (see what I did there?). The …</p><p>I recently had a stab at <a href="http://en.wikipedia.org/wiki/Cut_the_Rope">Cut the Rope</a> on the iPad (using the iPad of a co-worker). The game’s concept is strikingly simple: Feed candy to an adorable green monster. Of course it’s not <em>that</em> easy: There are some strings attached (see what I did there?). The candy is bound to special points with ropes which are cut by you by swiping your finger across them. You also should collect all three stars which are scattered across the levels to increase your score and unlock more levels. The important thing here is that it can be difficult achieving this goal, since only the piece of candy is able to collect them, meaning you have to maneuver the candy to the stars first and then into the mouth of little om-nom (yes, that is really his name as far as I got it). I like the concept since it shows complexity in the later levels though it doesn’t seem hard at first. Definitely had a great time testing this mobile game.</p>RE: Increasing user ignorance towards warnings2011-09-01T09:44:52+02:002013-08-24T02:40:17+02:00Alexander Skibatag:ghostlyrics.net,2011-09-01:/re-increasing-user-ignorance-towards-warnings.html<p>Chester Wisniewski <a href="http://nakedsecurity.sophos.com/2011/08/31/google-blacklists-247-certificates-is-it-related-to-diginotar-hacking-incident/">posted on the Sophos blog</a>:
</p>
<blockquote>DigiNotar has <a href="http://diginotar.nl/Actueel/tabid/264/articleType/ArticleView/articleId/327/Default.aspx">published an article</a> in Dutch explaining that 99.99% of browser warnings concerning its certificates can be ignored.
This is terrible advice. While it will be difficult for DigiNotar customers to replace their certificates with new ones, this is the only …</blockquote><p>Chester Wisniewski <a href="http://nakedsecurity.sophos.com/2011/08/31/google-blacklists-247-certificates-is-it-related-to-diginotar-hacking-incident/">posted on the Sophos blog</a>:
</p>
<blockquote>DigiNotar has <a href="http://diginotar.nl/Actueel/tabid/264/articleType/ArticleView/articleId/327/Default.aspx">published an article</a> in Dutch explaining that 99.99% of browser warnings concerning its certificates can be ignored.
This is terrible advice. While it will be difficult for DigiNotar customers to replace their certificates with new ones, this is the only solution.</blockquote>
<p>The suggestion by DigiNotar is incredibly stupid for a company who should aim to improve security and user awareness on the Internet in contrast to what is happening right now. It is <strong>amazingly ignorant</strong> to encourage users to ignore browser warnings for certificates because this does in the long term account for some of the “click to go away” mentality of our modern computer world where an incredible amount of people simply clicks “ok” on modal dialogs simply for them to go away instead of even trying to read and understand their content. This is mostly because these warnings want attention and the users are in most cases not willing to fall out of their workflows in order to process information that might be vital to their security.
</p>JDownloader suggestions for OS X2011-08-15T01:58:00+02:002014-02-16T19:21:28+01:00Alexander Skibatag:ghostlyrics.net,2011-08-15:/jdownloader-suggestions-for-os-x.html<p>I’ve been asked to write down what can be done to improve the look of JDownloader on OS X in its forums, since I’ve criticized that its current integration is pretty bad.</p>
<p>In order to have the most up to date version in terms of OS X integration …</p><p>I’ve been asked to write down what can be done to improve the look of JDownloader on OS X in its forums, since I’ve criticized that its current integration is pretty bad.</p>
<p>In order to have the most up to date version in terms of OS X integration (read: pseudo-native skin) I’m using the Nightly build for this task.</p>
<h2 id="addon-improved-mac-os-x-dock">Addon: Improved Mac OS X Dock</h2>
<ul>
<li>This should be renamed “OS X Dock Integration”</li>
<li>There should be an option which of the addon’s two features (namely a progress bar for the current download and a badge for downloaded items) you want to use. Just put it under “Settings/Addons/OS X Integration”. Use checkboxes or switches to enable and disable.</li>
<li><strong>Fix</strong> the dock badge. I have no idea what it is supposed to count but it’s wrong.<br>
Example: I had 20 packages with 307 links pending, 1 link was downloading, none finished. Still, the badge read “2”.</li>
</ul>
<h2 id="addon-growl-notification">Addon: Growl Notification</h2>
<ul>
<li>The text for the notification “All downloads finished” is misleading and should read “Downloading stopped”, since this is what actually triggers the notification. Try it yourself with hitting the “Stop” button.</li>
<li>There needs to be a separate notification “All downloads finished” that really triggers when this condition is reached.<br>
Example: The last download was successful and there are no more pending items in the queue.</li>
</ul>
<h2 id="user-interface-menubar">User Interface: Menubar</h2>
<ul>
<li>“Settings” is to be renamed to “Preferences”.</li>
<li>“Settings” has to sit right below “About JDownloader” in the menubar, but has to be separated by on of those horizontal lines that are used to group items.</li>
<li>There ought to be a menu entry “Minimize JDownloader” in a menu with the header “Window”.</li>
<li>The “?” menu should be renamed “Help”.</li>
<li><strong>All menus (menubar and contextmenus that is!) have to lose their icons.
This is contrary to OS X standards.</strong> Though I’m no so sure about the list of hosts. Still, there’d be an option to keep the icons in the list of <del>Settings</del> Preferences instead of having them in the menubar.</li>
<li>In case you want to keep the items currently listed in “File” (without “Settings”, that is…) it would be beneficial renaming that into “System” or something similar since there are no real file-related tasks in there. One would assume that you’d load a DLC Container under “File” but this is instead done under “Links”, which is confusing.</li>
<li>The “?” menu contains an entry “About JDownloader”, which is unnecessary due to it already being in the column that reads “JDownloader” in the menubar.</li>
</ul>
<h2 id="user-interface-keyboard">User Interface: Keyboard</h2>
<ul>
<li>“Minimize JDownloader” has to have the hotkey “CMD” + “M”</li>
<li>“Addons” currently has “F4” set as its hotkey. OS X HIG (Human Interface Guidelines) state that the F-keys are not to be used for important or even popular tasks within apps. (This being a result of their double-usage for media/brightness/etc. control)</li>
<li>“Settings” should have the hotkey “CMD” + “,” assigned, this is a OS X standard and is used across pretty much every app you find.</li>
<li>“Support” is mapped to “F1”; see OS X HIG.</li>
<li>“About JDownloader” is mapped to “CMD” + “F1”; see OS X HIG. I also suggest its deletion as said above.</li>
</ul>
<h2 id="user-interface-tabs">User Interface: Tabs</h2>
<ul>
<li>Currently tabs are drawn to look like OS X tabs, but they are clearly not due to the fact of them having a “close” button drawn on the “Settings” and “Logs” tab. It’d be the cheapest option to remove the close buttons on those tabs to make them look native. Though this might not be the best idea, since I can
already hear people complaining about the “Logs” tab, since I assume this consumes at least some CPU resources which is a fact that is destined to annoy someone. (There’s more behaviour that makes those buttons stick out:
They don’t change their font-color on OS X Lion and the font is not aligned with the two left ones; it’s slightly above where it should be.)</li>
<li>The tabs also have icons on them which are not appropriate in OS X.</li>
</ul>
<p>I’m actually quite sure that further improvements can be made and those are not the only things that can be done to improve JDownloader’s look and feel on OS X. Feel free to contact me (English or German) on <a href="http://board.jdownloader.org/">the JDownloader forum</a> via PM (username: ghostlyrics), to contribute to <a href="http://board.jdownloader.org/showthread.php?t=22730">this thread</a>
or <a href="mailto:mail@ghostlyrics.net">mail me</a>.</p>
<!-- data -->Media Recap Precursor (August 2011)2011-08-13T02:09:00+02:002013-08-24T02:34:01+02:00Alexander Skibatag:ghostlyrics.net,2011-08-13:/media-recap-precursor-august-2011.html<p>Intended activity for today: writing gamescom preview for FFN.<br />
Actual activity today: watching Anime with a friend. <br />
So much fail.</p>
<p>But yes, <a href="http://en.wikipedia.org/wiki/Howl%27s_Moving_Castle_(film)">Howl’s Moving Castle</a> was fun. I’ll admit that much, but I’d rather not discuss what I saw as many, many errors in the movie’s …</p><p>Intended activity for today: writing gamescom preview for FFN.<br />
Actual activity today: watching Anime with a friend. <br />
So much fail.</p>
<p>But yes, <a href="http://en.wikipedia.org/wiki/Howl%27s_Moving_Castle_(film)">Howl’s Moving Castle</a> was fun. I’ll admit that much, but I’d rather not discuss what I saw as many, many errors in the movie’s internal logic.</p>
<p>…well. Not all hope is lost. I got around to do about 8 paragraphs (that equals 8 games) today, but I’m nowhere finished or even in viewing distance to finish.</p>Media Recap Precursor (July 2011)2011-07-18T00:00:00+02:002013-08-24T02:51:18+02:00Alexander Skibatag:ghostlyrics.net,2011-07-18:/media-recap-precursor-july-2011.html<p>So I’m still recovering from a little over a week without internet, catching up with Google Reader and doing some organizational stuff I’ve been postponing. (like the university related posts, but they’re coming. promise.)</p>
<p>Also I’ve just finished <a href="http://en.wikipedia.org/wiki/Secret_Files:_Tunguska">Secret Files: Tunguska</a> today. A while ago I …</p><p>So I’m still recovering from a little over a week without internet, catching up with Google Reader and doing some organizational stuff I’ve been postponing. (like the university related posts, but they’re coming. promise.)</p>
<p>Also I’ve just finished <a href="http://en.wikipedia.org/wiki/Secret_Files:_Tunguska">Secret Files: Tunguska</a> today. A while ago I played <a href="http://en.wikipedia.org/wiki/Secret_Files_2:_Puritas_Cordis">its sequel</a> on the NDS and absolutely loved the writing and its humor. So when I saw that both SF1 and SF2 were only about 5€ on Steam I just had to get them. <em>Weighting a little over 8hrs for 5€ I can safely put my doubts aside and assume I’ve made a good purchase.</em></p>Media Recap Precursor (June 2011)2011-06-22T00:00:00+02:002013-08-24T02:49:15+02:00Alexander Skibatag:ghostlyrics.net,2011-06-22:/media-recap-precursor-june-2011.html<p>Just a very short update here: Ubisoft is going to upgrade <a href="http://apps.facebook.com/projectlegacy">its Facebook game that belongs to the Assassin’s Creed</a> universe according to <a href="http://forums.ubi.com/eve/forums/a/tpc/f/5101061219/m/4511094919?r=4511094919#4511094919">this post in their forum.</a> On an unrelated note I’ve just finished reading the <a href="http://lparchive.org/Trauma-Center-New-Blood/">Trauma Center: New Blood LP</a>.</p>Dynasty Warriors 7 (PS3) pt.22011-05-22T00:00:00+02:002013-08-24T02:55:23+02:00Alexander Skibatag:ghostlyrics.net,2011-05-22:/dynasty-warriors-7-ps3-pt2.html<p>Yes, another post about this game. I felt like I did not give this game enough credit <a href="/dynasty-warriors-7-ps3.html">by just pointing out its flaws</a>. I acknowledge there being several things that I like. Though I can only describe a few points which I have seen during my limited time playing.</p>
<ul>
<li>
<p>From …</p></li></ul><p>Yes, another post about this game. I felt like I did not give this game enough credit <a href="/dynasty-warriors-7-ps3.html">by just pointing out its flaws</a>. I acknowledge there being several things that I like. Though I can only describe a few points which I have seen during my limited time playing.</p>
<ul>
<li>
<p>From I usability point of view I almost love the encyclopidia they stuffed into the game. It is very nicely done. Its buttons are mapped in a very nice and understandable way and they have a system which is very similar to the concept of hyperlinks on the Internet to look up things that are mentioned in a particular piece of information that you are reading. Though this system might be overlooked - as I admit, I did before shinji showed me - it is cleverly done and helps players interested in history to keep up with persons and terms they are reading but are not familiar yet. This whole point is a bit overshadowed by the fact that I found it very misleading that in one part of the encyclopedia the button mapping certainly changes in a few aspects as if that part was either legacy or tucked on later. The mapping there is not logical and <strong>not consistent with the rest of this part of the game</strong>.</p>
</li>
<li>
<p>A major point of complaint of mine concerning this game’s predecessor (Dynasty Warriors 6) was that you had a lot of characters to choose from but they all had fixed weapon classes which you did not know if you either just came along or didn’t pay attention to during the campaign. So DW7 changed that. You are still not able to recognise a character’s fighting style from the character menu, but all characters are able to wield all weapons (except for the whip as far as I remember - this one is gender-specific). Now you might argue that this robs the characters of their individual styles. It does not, since every character has a range of expertship with every weapon measured in stars. (worst: 0 stars, best: 3). So you might have a character that has a quick and agile style and prefers weapons that match that style. Or you might have your typical heavily armored club/greatsword guy. <em>Yay for stereotypes.</em> Nevermind that.</p>
</li>
</ul>
<p>However there is one point I do not understand: How is it that the character I played has to learn his main fighting style by spending points on it to get the the highest level (mind you, to reach the highest skill level - not to learn all moves) while she has other weapon classes already maxed out? And moreover: why would I prefer another style as my main fighting style than the one I’m already as good as it gets at?</p></p>Dynasty Warriors 7 (PS3)2011-05-19T00:00:00+02:002013-08-24T02:55:35+02:00Alexander Skibatag:ghostlyrics.net,2011-05-19:/dynasty-warriors-7-ps3.html<p>You see, this term I’m supposed to take a course on usability at university which I do. Thing is, ever since my first - and so far only - visit to the lectures and the group works I’ve started seing usability problems or general lack of good design everywhere.
The …</p><p>You see, this term I’m supposed to take a course on usability at university which I do. Thing is, ever since my first - and so far only - visit to the lectures and the group works I’ve started seing usability problems or general lack of good design everywhere.
The last occurrence a game insulted me multiple time was <a href="http://en.wikipedia.org/wiki/Dynasty_Warriors_7">Dynasty Warriors 7</a> (PS3) which I played over at shinji’s place. I’ll lay out some points which I found extremely annoying:</p>
<ul><li>DW7 is playable in local multiplayer with a split-screen option - which is good. However, the fact that after defeating an enemy general an enormous message window with some completely irrelevant, not context-specific death-dialogue of this general is displayed and makes it hard for both players (though worse for the 2nd player) to see what’s happening around them since it steals a lot of real-screen estate.</li>
<li>The control mechanic for mounting your horse/elephant (I love the war-elefant)/ whatever is flawed. Your mount will wait for you where you leave it but if you come back, you have to pause slightly in order to not run into your mount an make it evade you, which means you’re not able to mount it. It requires you approaching carefully in order to not trigger the evasive action. I experienced that as a cancellation of the game’s overall very fluent approach in character control.</li>
<li>There is the option to jump and double-jump, but you should better get accustomed to the fact you’ll only be using this for jumping down from something, since I’ve had multiple occurrences when my character was clearly able to jump much higher than that wooden barricade in front of her and the ground behind it was accessible (so you can’t blame me for wanting to jump out of the level) but there seems to be an invisible extension of about another meter in height pasted onto these blasted barricades. Must be evil magic or karma or something like that.</li>
<li>Also you have a kind of passive stat for your whole player account that just messures how much DW7 you’ve been playing in order to brag about that on the Internet or grab a trophy. (Seriously, that is <strong>the whole point of the “fame” stat</strong>.)</li>
<li>In Conquest Mode (I can’t quite remember but I think it was called that.) you are to choose a character which you’ll play and whose abilities you’ll master while playing through a huge amount of pre-set missions. There is a catch, however: While you are going to level up that character, the roster of people to choose from is immense and it is very painful if you suddenly want to use another character only to find out he/she is by far not skilled enough to withstand the challenges you find in higher levels. So back for some grinding if you want to choose another person.</li>
<li>To add insult to injury (alas my last argument) while playing cooperative the second character will not be scaled/leveled (not even temporarily) to fit the current character of the first player which makes the whole idea totally unbalanced. <strong>You basically have the choice of either sticking with your one great character or sacrifice yourself since you already know how to play the game and offer your trained character to your friend who just came over.</strong></li>
</ul>
<p>Of course the last point is moot if you choose to train a variety of fighters (or even just two) but the point is: What good brings a gigantic roster if I have to level each person individually and can’t scale him if a friend wants to join me?</p>Media Recap Precursor (April 2011)2011-04-24T00:00:00+02:002013-08-24T02:56:26+02:00Alexander Skibatag:ghostlyrics.net,2011-04-24:/media-recap-precursor-april-2011.html<p>Easter holidays are progressing quite quietly so far.
Things I did:
</p>
<ul><li>tried <a href="http://en.wikipedia.org/wiki/Borderlands_(video_game)">Borderlands</a> with a friend</li>
<li>got rather into <a href="http://en.wikipedia.org/wiki/Radiant_Historia">Radiant Historia</a> for the NDS</li>
<li>tested <a href="http://en.wikipedia.org/wiki/Stacking_(video_game)">Stacking</a> and bought the full game</li>
<li>read the <a href="http://en.wikipedia.org/wiki/Da_vinci_code">Da Vinci Code</a> (English version) after the book has been lying around almost half a year</li>
<li>watched …</li></ul><p>Easter holidays are progressing quite quietly so far.
Things I did:
</p>
<ul><li>tried <a href="http://en.wikipedia.org/wiki/Borderlands_(video_game)">Borderlands</a> with a friend</li>
<li>got rather into <a href="http://en.wikipedia.org/wiki/Radiant_Historia">Radiant Historia</a> for the NDS</li>
<li>tested <a href="http://en.wikipedia.org/wiki/Stacking_(video_game)">Stacking</a> and bought the full game</li>
<li>read the <a href="http://en.wikipedia.org/wiki/Da_vinci_code">Da Vinci Code</a> (English version) after the book has been lying around almost half a year</li>
<li>watched the already mentioned <a href="http://en.wikipedia.org/wiki/Alan_wake">Alan Wake</a> Let’s Play</li>
<li>tried to help out an acquaintance troubleshooting his <a href="http://en.wikipedia.org/wiki/World_of_warcraft">World of Warcraft</a> login problems</li>
</ul>
<p>I have to acknowledge that the WoW troubleshoot was by far the most interesting thing, since we had to do some <a href="http://en.wikipedia.org/wiki/Traceroute">trace-routing</a> which turned out fun, due to its great “hacker feeling” though it simply is an maintenance tool. </p>
<p>Things I should’ve done:</p>
<ul><li>assignment for class A</li>
<li>preparing for test in class B</li>
</ul>Alan Wake (X360) pt.32011-04-18T00:00:00+02:002013-08-24T02:56:42+02:00Alexander Skibatag:ghostlyrics.net,2011-04-18:/alan-wake-x360-pt3.html<h2>Part I - The Signal</h2>
<p>And I’m finally through the Alan Wake LP (which I picked up thanks to my friend Trayzard). This last entry does contain some minor spoilers that I couldn’t quite write around without overcomplicating things. To make this more interesting to you I’ll not …</p><h2>Part I - The Signal</h2>
<p>And I’m finally through the Alan Wake LP (which I picked up thanks to my friend Trayzard). This last entry does contain some minor spoilers that I couldn’t quite write around without overcomplicating things. To make this more interesting to you I’ll not be marking them.</p>
<p>It turns out I was not completely right. There is indeed one tiny new element of gameplay in the epilogue, that is (of course) reused in the DLC. Which interestingly turns out to be a good thing since there would’ve been need to explain a new type of supply caches otherwise.</p>
<p>On a sidenote I don’t think I’ve ever seen such an aggressive playground before. ;)</p>
<p>Oh and about the deerfest waggon: The LPer is right about that one. Should’ve been in the main game but I’ve already complained in the last post as far as I remember.</p>
<p>The ovens are great environmental objects on their own but for environmental kills they’re absolutely awesome.</p>
<p>Why did we have to wait for the funny and sarcastic Barry till the DLC? I don’t get it. He’s hilarious.</p>
<p>The impression that I got from the first DLC is great. Everyone should see what the birds look like deeper into the DLC. It’s a pity that you’d have to force yourself through the main game to get the context though. Too bad. If you have Alan Wake however and for some reason have not played The Signal, <strong>shame on you</strong>.</p>
<p>I wonder if the right side of the wordy minefield is a nod to “the right path”.</p>
<p>Conclusion:
Too bad the best thing of Alan Wake is in its DLC and not within the main game.</p>
<p>Seriously, though. I wished my world would’ve floating words in it that come true if you shine light on them if you know what I mean. Boom! (also mind the typewriter sounds.)</p>
<h2>Part II - The Writer</h2>
<p>“Crazy people don’t know they’re crazy. That’s why they’re crazy” ~Barry</p>
<p>Now I have to admit it. I love you, Remedy for going back to <em>that</em> place again in the DLC. And look at those pretty fireworks!</p>
<p>I have no clue why the main game didn’t contain as many great effects as the DLC did. Rotating the house didn’t feel out of place for a single moment and felt completely natural compared to those space shooters who go for the gravity-manipulation concept.</p>
<p>…I laughed so hard at “MAKE A CYLINDRICAL OBJECT ROTATE” a.k.a. the Starfox 64 reference.</p>
<p>Also the well’s puzzle ought to have been in the main game. Can’t believe how amazed I’m about the DLC compared to the game I was quite bored about.
Who would’ve thought they meant the “running in a wheel part” literally. Right next to: who would’ve thought that the water is that hard? Possibly the guy who decided to spare/get rid of the swimming animation. Duh.</p>
<p>The psychiatric talk is… weird. Really weird. I imagine it’s only there to stir the player up, to try to tell him that all he has achieved up until this point is useless. I’m not sure what the overarching point is since Alan is by far not as guilt-ridden as depicted by the part of him that’s clearly already insane.</p>
<p>In my opinion the lighthouse makes a nice real section, since it is clearly the symbol of hope. The secondary usage of this symbol as a indirect weapon is a wonderful gameplay mechanic the devs can be proud of.</p>
<p>And I conclude with my final thought:
Though the real ending is a cliffhanger, it was probably the best possible way to end this story in a non-cheesy way.</p>Alan Wake (X360) pt.22011-04-17T00:00:00+02:002013-08-24T02:56:53+02:00Alexander Skibatag:ghostlyrics.net,2011-04-17:/alan-wake-x360-pt2.html<p>By now I’ve finished watching the LP from the previous post until the end of the main game (read: excluding the two DLCs). I’ve also jotted down another batch of thoughts about the game itself.</p>
<p>First things first: The game <em>will</em> get extremely repetitive after a while. Well …</p><p>By now I’ve finished watching the LP from the previous post until the end of the main game (read: excluding the two DLCs). I’ve also jotted down another batch of thoughts about the game itself.</p>
<p>First things first: The game <em>will</em> get extremely repetitive after a while. Well, the thing is, once you are a few hours in and got used to the Taken and the possessed things trying to murder you (looking at you barrels and other heavy environment objects), the game stays that way. There is nothing new to see at this point. My basic conclusion is that with the acquisition of the flash-bangs you’ve basically seen every gameplay mechanic of the game. And it’s not like there were a lot of them to begin with.</p>
<p>I am ashamed by what the LPer called a puzzle there (in the mine). That’s not a puzzle it’s simply “press obvious button to continue” and then “press next obvious button” after that. It does not qualify as puzzle.</p>
<p>I acknowledge the effects at the stage being very well put into place. In case people are lost here: I don’t want to spoiler anything but I’m talking about the Anderson farm.</p>
<p>I am totally into how the music ties into the narrative at the farm, it’s so beautifully done and one of the few things I don’t consider forced creativity in the game. I love it though it certainly has some cliche-y appeal to it.</p>
<p>On a slightly related note I do now know why Youtube has so much traffic. As browser streaming and its quality is (thanks to Adobe Flash) either crappy or extremely mean to my poor CPU I’m downloading the files using <a href="http://en.wikipedia.org/wiki/JDownloader">Jdownloader</a> and watching them locally. Thanks to a totally messed up first try and a second that got me some more evil .FLV files in which sound and video were out of sync I am now downloading the videos a friggin’ third time. So much for that.</p>
<p>Uhm, concerning the resource caches… I’m sure it’s quite comfortable and intuitive to have those “emergency” boxes around, though I’m not sure how it fits into the big picture that they also contain ammunition. <del>Thought that might be a hint to one of the pages describing war preparations.</del> Nevermind that. The game does indeed explain that at the end. I was overhasty when I assumed that it would not.</p>
<p>Heads up to the devs for the Lord of the Rings reference. Wasn’t quite that spectacular but felt right there. (Twice even.)</p>
<p>Also the fact that the devs thought it might be cool to take away all your stuff from time to time is <strong>really</strong> annoying, especially if you don’t have a chance to pick up the lost equipment afterwards. I mean, it gets old after the third time, doesn’t it?</p>
<p>The second Alan exclaimed “more birds” I was instandly reminded of the birdphone, in case anyone else also went through the The Legend of Zelda: Link’s Awakening LP. It’s the <a href="http://lparchive.org/Legend-of-Zelda-Links-Awakening/Images/8-Linkbirdphone.jpg">birdphone’s</a> revenge!</p>
<p>And, uhm, seriously… the Night Springs episodes are just crappy. I might be me remembering and simultaneously glorifying the old times but the Twilight Zone was a way better show and the episodes were frighting. Night Springs in contrast just feels so cheap it’s disgusting. - The worse thing is that I’m not sure if is like this on purpose.</p>
<p>The idea of the plot-item being related to a childhood memory isn’t only quite original but also an adorable piece of creativity. Somehow I am aware that it’s terribly childish but that item just convinced me that Alan Wake was not that bad. I mean, there are still lots and lots of things I don’t like but there are definitely some highlights of creative work that I can’t ignore.</p>
<p>I found the ending to be extremely unsatisfying but was quickly reminded that my friend Trayzard told me that Remedy had planned to release Alan Wake in multiple Episodes so I assume most people were comfortable buying an seemingly incomplete game. Well done Remedy. So off to the DLC videos I am.</p>Alan Wake (X360)2011-04-16T00:00:00+02:002013-08-24T02:57:04+02:00Alexander Skibatag:ghostlyrics.net,2011-04-16:/alan-wake-x360.html<p>Okay, so by the time I am publishing this I’m about 4 hrs into an <a href="http://lparchive.org/Alan-Wake/">“Alan Wake” Let’s Play</a>.
This is a a little collection of thoughts that came to my mind while I was watching one video after another.</p>
<p>First things first: I think the faces look …</p><p>Okay, so by the time I am publishing this I’m about 4 hrs into an <a href="http://lparchive.org/Alan-Wake/">“Alan Wake” Let’s Play</a>.
This is a a little collection of thoughts that came to my mind while I was watching one video after another.</p>
<p>First things first: I think the faces look horrible and I have a hard time sympathizing with the depicted characters for that reason. Secondly I don’t get why exactly the collectibles are Coffee Thermoses but I think it’s pretty damn awesome. Also I would like to thank the LPer for the whole lot of comments he edited into the video (subtitles) since I wouldn’t catch any of the references without this imaginary cheat sheet.</p>
<p>But there is an awful lot of things that disturb me about Alan Wake.
The compass shows <strong>nothing</strong> and still takes away precious real screen estate (Though I admit not knowing if this is only so in nightmare mode since the LP only demonstrated this difficulty setting). A smaller indicator showing the next direction would’ve sufficed instead of making a giant radial dial of nothingness. Which is interestingly only partially covered by the health ring. Besides every time a Coffee Thermos is picked up it makes me want to check if the health meter has grown. (hint: it does not) Moreover I am continually confused by the way it displays the amount of ammunition you have at disposal; since the counter is <strong>not</strong> the amount of ammo left in your pocket/backpack/whatever but the overall amount. Nowadays I tend to think that the ammo in the little displayed chambers of a gun is already subtracted from that count. This is not the case in Alan Wake.</p>
<p>Also I think the game might be more immersive if it was to fade out the HUD when it’s not needed. It is so linear that during the time I’ve watched there never was any need for your next main goal to be displayed on screen all the time (or any secondary objective since there are none next to collectibles).
While I’m talking usability here I want to point out that the optional TV show-collectibles (called Night Springs) ought to have an “watch” Button that zooms the camera in to view the show better. The way they are now it’s not really fun to watch them. Also the Manuscript pages are somewhat cruel to the eyes. The whole game has that dark appeal and almost never shows it light sides, though every time you find a manuscript page you are offered to read it immediately. While I honestly love the fact here that they are read out loud to you, they are very, very bright and burned my eyes each time the LPer watched one of them during dark sequences (read: all the time).</p>
<p>And I still think it might be a good idea to have health added when you find coffee. I mean, c’mon he’s a writer. Basically he falls into the same cliche as computer science people, otaku, and uhm well, basically everyone who manages to have a lot of work done alone at the computer alas typewriter before the computer. He practically lives on coffee. Our entire industry does. So gimme my healthy coffee, Remedy!</p>Venetica (X360)2010-07-07T00:00:00+02:002013-08-24T03:02:05+02:00Alexander Skibatag:ghostlyrics.net,2010-07-07:/venetica-x360.html<p>A few days back I started playing <i><a href="http://en.wikipedia.org/wiki/Venetica">Venetica</a> </i>for Xbox 360 as I had a nice chance to receive the game (read: free). Anyway, I thought the game had to be very interesting and otherwise quite nice given the fact, that Venice is doubtless a perfect location for a video …</p><p>A few days back I started playing <i><a href="http://en.wikipedia.org/wiki/Venetica">Venetica</a> </i>for Xbox 360 as I had a nice chance to receive the game (read: free). Anyway, I thought the game had to be very interesting and otherwise quite nice given the fact, that Venice is doubtless a perfect location for a video game. But the game tries very, very hard to throw away its immense potential. There are bugs, achievement glitches, graphical errors and all sorts of UX (user experience) atrocities that just want me to take the disk and break it apart. I have already compiled a rather lengthy list of things that are bogging me most in order to review it properly at <a href="http://firefly-nexus.org/">Firefly-Nexus.org</a>.</p>
<p>Nevertheless I guarantee you that it’s been a long time ago that I’ve last been that disappointed by a game which - at least in my opinion - had an enormous potential. The product that has been released here is not only unfriendly to the player but also incomplete in terms of QA (quality assurance) to a ridiculous amount.</p>
<p><i>There used to be a nice time when console games would be tested better than PC ones since they couldn’t be patched. That time’s gone but also there is no willingness to patch games that are bugged. Dark days are already here, my friends.</i></p>Me, the presenter2010-06-19T00:00:00+02:002013-08-24T03:04:17+02:00Alexander Skibatag:ghostlyrics.net,2010-06-19:/me-the-presenter.html<p>OK. This time it was my term to be the presenter and the other students were to be the harsh people criticising me as I usually do them. At first I’ll admit that this was by far not the best presentation I’ve yet given or even could have …</p><p>OK. This time it was my term to be the presenter and the other students were to be the harsh people criticising me as I usually do them. At first I’ll admit that this was by far not the best presentation I’ve yet given or even could have given. Due to me being lazy and generally speaking having a little time scheduling problem, the given time for layout, content and preparation was about 3hrs. Now I was quite lucky that I could reuse a style I had previously used for my final exam in school before for the visuals and layout. Also rather a lot of work concerning the content had already been done by a student last year (kind of like my predecessor). I simply had to create some slides around some nice looking words, fling in a bunch of pictures and present them in an appealing way. I managed that though the time I had left for an oral preparation was about 20 minutes (exactly the time it took me to get to the university on foot). After all I don’t have problems at all giving presentations and I really like to speak English. In addition to that, the nice layout and the fact that I didn’t use cheat sheets or some kind of notes gave me quite some points.</p>
<p>After all of the presentations we were asked to fill in some “Feedback sheets”. I asked my teacher if I was allowed to have an early look at mine and after permission was granted I read through them all. Well… nearly. I dismissed the positive feedback as it didn’t have anything to learn from. The negative things I’ve “earned” most often were “speaking too quietly” and “confusing”. Well, I admit my presentation being uhm… a bit loose at all, since I had used way too little time preparing it. And regarding the quiet voice that is just something that has to be trained. Not everyone has to give a speech every day and so you can’t realize your flaws or have the practise you need to be a great talker.<br />
I also remember one sheet saying that it took me longer than usual to set everything up. That was based on the fact that I brought my own notebook, because I didn’t want to rely on the university’s old version of OpenOffice.org since I had already seen that OOo’s backwards compatibility was not that great when another student fired up an “.odp” Secondly I wanted to use my notebook’s remote control to move between the slides which proved to be rather comfortable and looked very professional. Nevertheless there’s been more criticism. I’ve stood in front of the presentation, between the projection and the audience. Well, that isn’t too hard considering that the room’s layout was not done with the concept in mind that someone would want to use a remote to show slides instead of sit at the head of the class and just share what’s on his/her screen.</p>
<p>Uff. Gotta go. Already falling asleep in front of the notebook.</p>Media Recap Precursor (June 2010)2010-06-15T00:00:00+02:002013-08-24T03:04:33+02:00Alexander Skibatag:ghostlyrics.net,2010-06-15:/media-recap-precursor-june-2010.html<p>For some time now I’ve been rewatching the old Stargate series and especially Stargate:Atlantis which I prefer over the original SG-1. Doesn’t seem to be a big deal, I admit that. But the fact is that instead of my mother tongue German, this time I watched everything …</p><p>For some time now I’ve been rewatching the old Stargate series and especially Stargate:Atlantis which I prefer over the original SG-1. Doesn’t seem to be a big deal, I admit that. But the fact is that instead of my mother tongue German, this time I watched everything in English which was quite nice. I don’t claim to have understood everything that has been said but I’m quite comfortable with what I was able to grasp. By now I have seen all five seasons of Stargate:Atlantis and eight seasons of Stargate:SG-1 (which leaves two more to go there… but I’m not really into the whole Ori thing). Also I’ve just watched some really old stuff: It’s a cartoon called Roswell Conspiracies. Originally I had seen that many years ago on the German station SuperRTL. Not that they’d have any program of quality nowadays, but they had some good series back in the days of my childhood. I liked Roswell Conspiracies quite a lot and just now rewatched the first season with a friend. Also I simply adored Bob Morane back then (the cartoon, I never knew there was a comic until I had read its wiki-entry).</p>
<p>So back from the old memories to something more productive: I’ve revisited and archived around a third of my unfinished work concerning abandoned projects. I will provide them for interested people in a .zip archive as soon as I’ve looked through some more documents. The reason behind me revisiting all those “corpses” was that I wanted to integrate some of the very best ideas into Project:Rosetta. Still, they are yet to be fully integrated as I’ve just created some scribbles and a vague table with the old content. Some of it will certainly prove useful… I guess…</p>Presentations2010-06-10T00:00:00+02:002013-08-24T03:05:16+02:00Alexander Skibatag:ghostlyrics.net,2010-06-10:/presentations.html<p>Lately I’ve had to sit through several presentations during my English classes at university. Fair enough I’ll have to prepare and hold my own next week. I’ll come to that. But I’m getting off topic, back to the presentations which I’ve already seen:
You know …</p><p>Lately I’ve had to sit through several presentations during my English classes at university. Fair enough I’ll have to prepare and hold my own next week. I’ll come to that. But I’m getting off topic, back to the presentations which I’ve already seen:
You know what? Bad things stant out more. They get easily recognized. Sometimes it’s kinda hard to avoid doing all those pesky mistakes when giving presentations. I’ll try to avoid some of them. But what is it that’s disturbing me that much? Well…
</p>
<ul><li>Don’t f***ing remind me <b>every second</b> that you’ve said something before. I swear the next time a presentation contains more than one “As I’ve already said before” I’m gonna hurt somebody.</li>
<li>This is <b>NOT</b> a reading exercise. This is supposedly a presentation. Act like you know this fact.</li>
<li>There’s absolutely <b>NO</b> need to fill in “yeah” or “and” when you don’t know what to say. If you HAVE to fill in something, try stretching a “well” while you’re looking for your path.</li>
<li>Test your equipment. Test your software. Make sure to use backwards-compatible files when presenting in dubious environments (this is especially true for 3rd party devices and/or operating systems) (OpenOffice.org 2.x @ university)</li>
<li>Your presentation “comes to an end”. <b>YOU</b> <b>do</b> <b>NOT</b>. (“I’ve come to my end”)
</li><li>If you can, bring your own system (not including the projector). Saves the hassle of unwanted popups, the need for removable media and file-compatibility issues. (Apple Quicktime Update Popup @ university DURING PowerPoint presentation)
</li><li>If you want media, fine then, HAVE media! Though the flow of your presentation WILL suffer when you have to jump out of the slides during the presentation to show a video. Try to embed media or show them at the start/end of your presentation.
</li><li>If you want to be nice, use a roadmap. That gives the interested listener an overview of what to expect and the bored people a plan how long they have to endure you.</li></ul>The process of writing2010-05-30T00:00:00+02:002013-08-24T03:06:16+02:00Alexander Skibatag:ghostlyrics.net,2010-05-30:/the-process-of-writing.html<p><em>I think the main process of writing is the writing itself.</em></p>
<p>It’s not the preparation.<br>
It’s not the note-taking before.<br>
It’s not the task of improving what you’ve written down by exchanging words and phrases over and over again.<br>
It’s the action of writing. The …</p><p><em>I think the main process of writing is the writing itself.</em></p>
<p>It’s not the preparation.<br>
It’s not the note-taking before.<br>
It’s not the task of improving what you’ve written down by exchanging words and phrases over and over again.<br>
It’s the action of writing. The movement of the pen. Your fingers pounding the keys on your PC/Mac/laptop. The fluency of thought you experience.<br>
Try it now: Take a pen. Take a sheet of paper. Write.</p>