1
Fork 0

Jekyll is dead, long live Cobalt!

This commit is contained in:
Jan-Erik Rediger 2017-07-09 14:18:22 +02:00
parent 35ad8a8b11
commit 5361cfb470
110 changed files with 711 additions and 1126 deletions

11
.cobalt.yml Normal file
View file

@ -0,0 +1,11 @@
name: fnordig
source: ./
dest: _site
posts: _posts
drafts: _drafts
link: https://fnordig.de
description: fnordig
rss: feed.xml
ignore:
- ext/
- README.md

View file

@ -1,6 +0,0 @@
source 'https://rubygems.org'
gem "rake"
gem "jekyll", "~>2.5.3"
gem "coderay", "~>1.0.0"
gem "kramdown" , "1.5.0"

View file

@ -1,78 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
blankslate (2.1.2.4)
celluloid (0.16.0)
timers (~> 4.0.0)
classifier-reborn (2.0.3)
fast-stemmer (~> 1.0)
coderay (1.0.8)
coffee-script (2.3.0)
coffee-script-source
execjs
coffee-script-source (1.8.0)
colorator (0.1)
execjs (2.2.2)
fast-stemmer (1.0.2)
ffi (1.9.6)
hitimes (1.2.2)
jekyll (2.5.3)
classifier-reborn (~> 2.0)
colorator (~> 0.1)
jekyll-coffeescript (~> 1.0)
jekyll-gist (~> 1.0)
jekyll-paginate (~> 1.0)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 1.1)
kramdown (~> 1.3)
liquid (~> 2.6.1)
mercenary (~> 0.3.3)
pygments.rb (~> 0.6.0)
redcarpet (~> 3.1)
safe_yaml (~> 1.0)
toml (~> 0.1.0)
jekyll-coffeescript (1.0.1)
coffee-script (~> 2.2)
jekyll-gist (1.1.0)
jekyll-paginate (1.1.0)
jekyll-sass-converter (1.3.0)
sass (~> 3.2)
jekyll-watch (1.2.0)
listen (~> 2.7)
kramdown (1.5.0)
liquid (2.6.1)
listen (2.8.4)
celluloid (>= 0.15.2)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9)
mercenary (0.3.5)
parslet (1.5.0)
blankslate (~> 2.0)
posix-spawn (0.3.9)
pygments.rb (0.6.0)
posix-spawn (~> 0.3.6)
yajl-ruby (~> 1.1.0)
rake (10.4.2)
rb-fsevent (0.9.4)
rb-inotify (0.9.5)
ffi (>= 0.5.0)
redcarpet (3.2.2)
safe_yaml (1.0.4)
sass (3.4.9)
timers (4.0.1)
hitimes
toml (0.1.2)
parslet (~> 1.5.0)
yajl-ruby (1.1.0)
PLATFORMS
ruby
DEPENDENCIES
coderay (~> 1.0.0)
jekyll (~> 2.5.3)
kramdown (= 1.5.0)
rake
BUNDLED WITH
1.11.2

11
Makefile Normal file
View file

@ -0,0 +1,11 @@
SOURCE = /home/badboy/git/fnordig.de/_site/
DEST = /var/www/sites/fnordig.de/
build:
cobalt build
serve:
cobalt watch
deploy: build
rsync -va $(SOURCE) $(DEST)

View file

@ -1,42 +0,0 @@
#!/usr/bin/env ruby
# encoding: utf-8
PRODUCTION = {
:url => "http://fnordig.de",
:log => "/home/badboy/git/fnordig.de/deploy.log",
:dest => "/var/www/sites/fnordig.de/",
:source => "/home/badboy/git/fnordig.de/_site/",
}
desc 'Generate page using jekyll'
task :generate do
sh "jekyll build"
end
desc 'Serve the page on http://localhost:4000'
task :serve do
sh "jekyll serve --watch --drafts"
end
task :default => :serve
namespace :deploy do
desc 'Deploy the page on the production machine (executed on production)'
task :production do
verbose(true) {
sh <<-EOF
(
echo -n "Production deployment: "; date;
echo "Resetting git & fetching from origin..."
git reset --hard HEAD &&
git pull origin master &&
echo "generating page..." &&
rake generate &&
echo "copy to webserver directory..." &&
rsync -va #{PRODUCTION[:source]} #{PRODUCTION[:dest]} &&
echo "deployment done"
) | tee #{PRODUCTION[:log]}
EOF
}
end
end

View file

@ -1,12 +0,0 @@
baseurl: /
paginate: 5
permalink: pretty
exclude:
- Rakefile
- README.md
- ext
- Gemfile
- Gemfile.lock
- deploy.log
highlighter: pygments
markdown: KramdownPygments

View file

@ -1,15 +0,0 @@
<div class="post">
<h2 class="heading">
<a href="{{site.baseurl}}{{post.url | replace_first: '/'}}">{{post.title}}</a>
</h2>
{% if post.date %}
<p class="date">
<time pubdate class=published datetime="{{post.date}}">
{{post.date | date: "%-d %B %Y %H:%M"}}
</time>
(by <span rel=author>Jan-Erik</span>)
</p>
{% endif %}
{{post.content}}
</div>

10
_layouts/_footer.liquid Normal file
View file

@ -0,0 +1,10 @@
<footer>
<hr>
<p>
&nbsp;&nbsp;jan-erik /
<a href="http://twitter.com/badboy_">@badboy_</a> /
<a href="/imprint/">imprint</a> /
<a href="/feed.xml">feed</a>
</p>
<br />
</footer>

7
_layouts/_head.liquid Normal file
View file

@ -0,0 +1,7 @@
<meta charset="utf-8" />
<title>{{title}}</title>
<link rel="stylesheet" href="/writ.min.css">
<link rel="stylesheet" href="/style.css" type="text/css" media="all" />
<link rel="alternate" href="/rss.xml" type="application/rss+xml" title="RSS" />
<meta name="author" content="Jan-Erik Rediger">
<meta name="description" content="Personal website of Jan-Erik Rediger"/>

10
_layouts/_menu.liquid Normal file
View file

@ -0,0 +1,10 @@
<nav class="menu">
<a class="menu-item {%if route == "blog"%}current{%endif%}" href="/">fnordig</a>
<a class="menu-item {%if route == "posts"%}current{%endif%}" href="/posts/">posts</a>
<a class="menu-item {%if route == "about"%}current{%endif%}" href="/about/">about</a>
<a class="menu-item {%if route == "talks"%}current{%endif%}" href="/talks/">talks</a>
<a class="menu-item" href="/feed.xml">feed</a>
<a class="menu-item" href="https://twitter.com/badboy_/">@badboy_</a>
<a class="menu-item" href="https://github.com/badboy/">github</a>
<hr>
</nav>

View file

@ -1,43 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>fnordig.de</title>
<link rel="stylesheet" href="{{site.baseurl}}fnord.css" type="text/css" />
<link rel="stylesheet" href="{{site.baseurl}}syntax.css" type="text/css" />
<!--[if !IE]>-->
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0" />
<script type="text/javascript">
window.scrollTo && window.scrollTo(0, 1);
</script>
<!--<![endif]-->
</head>
<body>
<div class="content">
<div class="nav">
<h1>
<a href="{{site.baseurl}}">fnordig</a>
</h1>
<ul>
<li>// <a href="{{site.baseurl}}posts/">posts</a> /</li>
<li><a href="{{site.baseurl}}about/">about</a> /</li>
<li><a href="{{site.baseurl}}talks/">talks</a> /</li>
<li><a href="{{site.baseurl}}feed.xml">feed</a> /</li>
<li><a href="https://twitter.com/badboy_">@badboy_</a> /</li>
<li><a href="https://github.com/badboy">github</a></li>
</ul>
</div>
{{content}}
<div class="footer">
<p>//
&nbsp;&nbsp;jan-erik /
<a href="http://twitter.com/badboy_">@badboy_</a> /
<a href="{{site.baseurl}}imprint/">imprint</a> /
<a href="{{site.baseurl}}feed.xml">feed</a>
</p>
</div>
</div>
</body>
</html>

16
_layouts/default.liquid Normal file
View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="en">
<head>
{{ include "_layouts/_head.liquid" }}
</head>
<body>
{{ include "_layouts/_menu.liquid" }}
<main>
{{content}}
</main>
{{ include "_layouts/_footer.liquid" }}
</body>
</html>

View file

@ -1,18 +0,0 @@
---
layout: default
---
<div class="post">
<h2 class="heading">
<a href="{{site.baseurl}}{{page.url | replace_first: '/'}}">{{page.title}}</a>
</h2>
{% if page.date %}
<p class="date">
<time pubdate class=published datetime="{{page.date}}">
{{page.date | date: "%-d %B %Y %H:%M"}}
</time>
(by <span rel=author>Jan-Erik</span>)
</p>
{% endif %}
{{content}}
</div>

33
_layouts/post.liquid Normal file
View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<head>
{{ include "_layouts/_head.liquid" }}
</head>
<body>
{{ include "_layouts/_menu.liquid" }}
<main>
<article>
<h1>{{ title }}</h1>
{% assign reading_wpm = 200 %}
{% assign word_count = content | split: " " | size %}
{% assign reading_time = word_count | divided_by: 200 %}
{% case reading_time %}
{% when 0 %}
{% assign phrase = "less than a minute." %}
{% when 1 %}
{% assign phrase = "about a minute." %}
{% else %}
{% assign phrase = " minutes." | prepend: reading_time %}
{% endcase %}
<time pubdate="pubdate">{{ date | date: "%b %d, %Y" }} - Reading time: {{ phrase }}</time><br />
{{ content }}
</article>
</main>
{{ include "_layouts/_footer.liquid" }}
</body>
</html>

21
_layouts/simple.liquid Normal file
View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
{{ include "_layouts/_head.liquid" }}
</head>
<body>
{{ include "_layouts/_menu.liquid" }}
<main>
<article>
<h1>{{ title }}</h1>
<time pubdate="pubdate">{{ date | date: "%b %d, %Y" }}</time><br />
{{ content }}
</article>
</main>
{{ include "_layouts/_footer.liquid" }}
</body>
</html>

2
_plugins/.gitignore vendored
View file

@ -1,2 +0,0 @@
./
kramdown-with-pygments

View file

@ -1,89 +0,0 @@
# We define the an additional option for the kramdown parser to look for
module Kramdown
module Options
define(:kramdown_default_lang, Symbol, nil, <<EOF)
Sets the default language for highlighting code blocks
If no language is set for a code block, the default language is used
instead. The value has to be one of the languages supported by pygments
or nil if no default language should be used.
Default: nil
Used by: PygmentsHtml converter
EOF
end
end
# This class is a plugin for kramdown, to make it use pygments instead of coderay
# It has nothing to do with Jekyll, it is simply used by the custom converter below
module Kramdown
module Converter
class PygmentsHtml < Html
begin
require 'pygments'
rescue LoadError
STDERR.puts 'You are missing a library required for syntax highlighting. Please run:'
STDERR.puts ' $ [sudo] gem install pygments'
raise FatalException.new("Missing dependency: Pygments")
end
def extract_code_language_with_fix!(attr)
lang = extract_code_language!(attr) || @options[:kramdown_default_lang]
lang = "bash" if lang == "shell"
lang
end
def convert_codeblock(el, indent)
attr = el.attr.dup
lang = extract_code_language_with_fix!(attr)
code = pygmentize(el.value, lang)
code_attr = {}
code_attr['class'] = "language-#{lang}" if lang
"#{' '*indent}<div class=\"highlight\"><pre#{html_attributes(attr)}><code#{html_attributes(code_attr)}>#{code}</code></pre></div>\n"
end
def convert_codespan(el, indent)
attr = el.attr.dup
lang = extract_code_language_with_fix!(attr)
code = pygmentize(el.value, lang)
if lang
attr['class'] = "highlight"
if attr.has_key?('class')
attr['class'] += " language-#{lang}"
else
attr['class'] = "language-#{lang}"
end
end
"<code#{html_attributes(attr)}>#{code}</code>"
end
def pygmentize(code, lang)
if lang
Pygments.highlight(code,
:lexer => lang,
:options => { :startinline => true, :encoding => 'utf-8', :nowrap => true })
else
escape_html(code)
end
end
end
end
end
# This class is the actual custom Jekyll converter.
class Jekyll::Converters::Markdown::KramdownPygments
def initialize(config)
require 'kramdown'
@config = config
rescue LoadError
STDERR.puts 'You are missing a library required for Markdown. Please run:'
STDERR.puts ' $ [sudo] gem install kramdown'
raise FatalException.new("Missing dependency: kramdown")
end
def convert(content)
Kramdown::Document.new(content, @config['kramdown']).to_pygments_html
end
end

View file

@ -1,7 +1,6 @@
---
layout: post
title: blog? static!
date: 15.01.2011 15:54
date: 15 Jan 2011 15:54:00 +0100
path: /:year/:month/:day/blog-static
---
static blog with just one file ;)

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: fnord?
date: 15.01.2011 01:34
date: 15 Jan 2011 01:34:00 +0100
path: /:year/:month/:day/fnord
---
fnordig? WTF ist fnord? [Fnord](http://de.wikipedia.org/wiki/Fnord)

View file

@ -1,7 +0,0 @@
---
layout: post
title: fnordig is up and running
date: 15.01.2011 00:04
---
fnordig is up and running!

View file

@ -0,0 +1,7 @@
extends: post.liquid
title: fnordig is up and running
date: 15 Jan 2011 00:04:00 +0100
path: /:year/:month/:day/fnordig-is-up-and-running
---
fnordig is up and running!

View file

@ -1,6 +1,7 @@
---
layout: post
extends: post.liquid
title: error pages
date: 20 Jan 2011 00:00:00 +0100
path: /:year/:month/:day/error-pages
---
I just added more "fnordig-like" error pages

View file

@ -1,6 +1,7 @@
---
layout: post
extends: post.liquid
title: sshuttle - poor man's vpn
date: 22 Jan 2011 00:00:00 +0100
path: /:year/:month/:day/poor-mans-vpn
---

View file

@ -1,6 +1,7 @@
---
layout: post
extends: post.liquid
title: static blog system runs!
date: 22 Jan 2011 00:00:00 +0100
path: /:year/:month/:day/static-blog-system-runs
---
my small and simple blog system works!

View file

@ -1,6 +1,7 @@
---
layout: post
extends: post.liquid
title: static blog system improved
date: 23 Jan 2011 00:00:00 +0100
path: /:year/:month/:day/static-blog-system-improved
---
My static blog system script now launches a small web server and auto-updates on a file change. This way you've got a live preview directly in your browser.

View file

@ -1,6 +1,7 @@
---
layout: post
title: ipv6 with nodejs
extends: post.liquid
title: IPv6 with NodeJS
date: 26 Jan 2011 00:00:00 +0100
path: /:year/:month/:day/ipv6-with-nodejs
---
As there are just a few new ipv4 address left in the pool and even those will be [exhausted in under a week](http://inetcore.com/project/ipv4ec/index_en.html) (6 days left, checked right now) the switch to [IPv6](http://en.wikipedia.org/wiki/Ipv6) will be necessary soon.

View file

@ -1,6 +1,7 @@
---
layout: post
extends: post.liquid
title: Blog running on jekyll again
date: 25 Aug 2011 00:00:00 +0100
path: /:year/:month/:day/blog-running-with-jekyll
---
I decided to setup a blog again. And again I'll use [jekyll][], a `blog-aware, static site generator in Ruby`.

View file

@ -1,6 +1,7 @@
---
layout: post
title: compile nginx
extends: post.liquid
title: Compile nginx
date: 02 Sep 2011 00:00:00 +0100
path: /:year/:month/:day/compile-nginx
---
I'm using [nginx][] as my main webserver and proxy for all my other projects (let it be node.js or ruby things).

View file

@ -1,6 +1,7 @@
---
layout: post
extends: post.liquid
title: now with code higlighting
date: 02 Sep 2011 00:00:00 +0100
path: /:year/:month/:day/kramdown-test
---
I am a programmer and I like to write code and I like to talk about code. That's why this blog really needs some syntax highlighting for my favorite languages.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: running on ssl
date: 08.09.2011 00:31
date: 08 Sep 2011 00:31:00 +0200
path: /:year/:month/:day/running-on-ssl
---
Even though the [SSL][] and [CA][] system is totally broken right now, I finally got my blog as well as my [etherpad][] served over SSL:

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: running etherpad-lite on nginx
date: 27.09.2011 21:24
date: 27 Sep 2011 21:24:00 +0200
path: /:year/:month/:day/running-etherpad-lite-on-nginx
---
As you should already know if you read this blog, I am using [nginx][] as my main http server as well as a reverse proxy for my apps running on node.js or simple ruby.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: fast and simple proxy server
date: 02.10.2011 01:27
date: 02 Oct 2011 01:27:00 +0200
path: /:year/:month/:day/fast-and-simple-proxy-server
---
So you have this friend sitting somewhere else in the world and want to give him a simple proxy to access a geoip-protected site or something similar. But what tool to use?

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: using ipv6 with inetd
date: 18.10.2011 10:58
date: 18 Oct 2011 10:58:00 +0200
path: /:year/:month/:day/using-ipvwith-inetd
---
I am the administrator of the [ctdo][] own jabber server over at `jabber.ctdo.de`.
It is currently running on the old but working [jabberd][] and also hosts a [bitlbee] server on several ports including ssl-protected ones.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: network config without ifconfig
date: 25.12.2011 14:52
date: 25 Dec 2011 14:52:00 +0100
path: /:year/:month/:day/network-config-without-ifconfig
---
[ifconfig](http://linux.die.net/man/8/ifconfig) is more or less deprecated and replaced by [ip](http://linux.die.net/man/8/ip), which has a different syntax.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: send your docs to your kindle
date: 25.12.2011 15:01
date: 25 Dec 2011 15:01:00 +0100
path: /:year/:month/:day/send-your-docs-to-your-kindle
---
I got a new [Kindle 4](http://www.amazon.de/Kindle-eReader-Wi-Fi-Display-deutsches/dp/B0051QVF7A/ref=amb_link_162551127_2?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=center-1&pf_rd_r=17K3DH24R9MPM5BFJJQ2&pf_rd_t=101&pf_rd_p=270263907&pf_rd_i=301128) for Christmas.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: swap in double-linked lists
date: 07.05.2012 22:22
date: 07 May 2012 22:22:00 +0200
path: /:year/:month/:day/swap-in-double-linked-lists
---
Yesterday I had to implement [Selection Sort](http://en.wikipedia.org/wiki/Selection_sort)

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: my instapaper stats
date: 08.05.2012 11:33
date: 08 May 2012 11:33:00 +0200
path: /:year/:month/:day/my-instapaper-stats
---
I am an actively user of the great [Instapaper](http://www.instapaper.com/)

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: instapaper-stats is online
date: 12.05.2012 17:13
date: 12 May 2012 17:13:00 +0200
path: /:year/:month/:day/instapaper-stats-is-online
---
I mentioned the script I'm using for my instapaper stats [here](http://fnordig.de/2012/05/08/my-instapaper-stats/).

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Raspberry Pi - A guick guide to a successful start
date: 05.07.2012 00:27
date: 05 Jul 2012 00:27:00 +0200
path: /:year/:month/:day/raspberry-pia-guick-guide-to-a-successfull-start
---
Today my [Raspberry Pi][pi] arrived and I quickly got it up and running.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Raspberry Pi - Day 2
date: 06.07.2012 13:20
date: 06 Jul 2012 13:20:00 +0200
path: /:year/:month/:day/raspberry-pi-day-two
---
[Yesterday night](http://fnordig.de/2012/07/05/raspberry-pia-guick-guide-to-a-successfull-start/)

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Getting IPv6 working with SmartOS and KVM
date: 16.09.2012 01:13
date: 16 Sep 2012 01:13:00 +0200
path: /:year/:month/:day/getting-ipvworking-with-smartos-and-kvm
---
Just about 2 weeks ago I started to play around with [SmartOS][].

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: BadBill - a Billomat API client
date: 21.09.2012 12:58
date: 21 Sep 2012 12:58:00 +0200
path: /:year/:month/:day/badbilla-billomat-api-client
---
I'm happy to announce the release of my Billomat API client:

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Getting try.redis-db.com back online!
date: 13.12.2012 22:43
date: 13 Dec 2012 22:43:00 +0100
path: /:year/:month/:day/getting-try-redis-db-com-back-online
---
Hi there,

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: fnord news show 2012
date: 30.12.2012 14:20
date: 30 Dec 2012 14:20:00 +0100
path: /:year/:month/:day/fnord-news-show
---
I'm at the [29c3][] right now and guess what happened here? Right, the [fnord news show][] happened.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: 2.9-C/3 - N.O-T/MY-D/E.PA/R.T-ME-N/T.
date: 04.01.2013 23:09
date: 04 Jan 2013 23:09:00 +0100
path: /:year/:month/:day/29c3-or-my-first-congress
---
I was at the [29c3][wiki] <del>this</del> last year and it was great.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: try.redis.io is online
date: 10.01.2013 21:02
date: 10 Jan 2013 21:02:00 +0100
path: /:year/:month/:day/try-redis-io-is-online
---
Finally:

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Problems after disconnecting LUKS device
date: 14.01.2013 23:28
date: 14 Jan 2013 23:28:00 +0100
path: /:year/:month/:day/problems-after-disconnecting-luks-device
---
Yesterday I got my 2TB backup disk. I formatted it and then used [LUKS][] to encrypt it and [LVM][] for the Volume Management.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: irregular backups with rsnapshot (and rsnapshot_ii)
date: 22.01.2013 19:08
date: 22 Jan 2013 19:08:00 +0100
path: /:year/:month/:day/irregular-backups-with-rsnapshotand-rsnapshot-ii
---
As stated in the last post I bought a big 2TB HDD for backups. My only

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: git merge 2013
date: 11.05.2013 18:20
date: 11 May 2013 18:20:00 +0200
path: /:year/:month/:day/git-merge
---
Friday and Saturday I attended [gitmerge][homepage], a free Git user conference

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Iterate the keyspace in redis: SCAN"
date: 01.11.2013 18:40
date: 01 Nov 2013 18:40:00 +0100
path: /:year/:month/:day/iterate-the-keyspace-in-redis-scan
---
A few days ago antirez finally [merged][pr] the SCAN algorithm written by

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Run server-side git hook when there are no updates
date: 02.11.2013 10:14
date: 02 Nov 2013 10:14:00 +0100
path: /:year/:month/:day/run-server-side-git-hook-when-there-are-no-updates
---
I make heavy use of of [hooks in git][git-hooks], especially post-receive, to

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Unicode codepoints in ruby
date: 06.11.2013 12:04
date: 06 Nov 2013 12:04:00 +0100
path: /:year/:month/:day/unicode-codepoints-in-ruby
---
Another post of the category "better write it down before you forget it".

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Redis FAQ or: what you learn when idling in #redis"
date: 10.11.2013 21:10
date: 10 Nov 2013 21:10:00 +0100
path: /:year/:month/:day/redis-faq-or-what-you-learn-when-idling-in-redis
---
Sometime ago I created the [redis-faq][], a small list of common or not so

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: 30C3
date: 01.01.2014 23:42
date: 01 Jan 2014 23:42:00 +0100
path: /:year/:month/:day/30c3
---
At the end of last year I was once again in Hamburg, this year for the [30th Chaos Communication Congress](https://events.ccc.de/congress/2013/wiki/Main_Page).

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Fixing a Vagrant "hostonlyif" error
date: 20.01.2014 13:24
date: 20 Jan 2014 13:24:00 +0100
path: /:year/:month/:day/fixing-a-vagrant-hostonlyif-error
---
------

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Multiple slides on one side in one pdf
date: 19.02.2014 18:33
date: 19 Feb 2014 18:33:00 +0100
path: /:year/:month/:day/multiple-slides-on-one-side-in-one-pdf
---
Ever had multiple slide sets, e.g. from a lecture, and you needed an overview to print out?

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Samsung Chromebook - a short review
date: 03.03.2014 15:18
date: 03 Mar 2014 15:18:00 +0100
path: /:year/:month/:day/samsung-chromebook-a-short-review
---
One week ago I purchased a Chromebook. To be exact I purchased the Samsung

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Don't set an empty root password on Chrome OS
date: 04.03.2014 16:41
date: 04 Mar 2014 16:41:00 +0100
path: /:year/:month/:day/don-t-set-an-empty-root-password-on-chrome-os
---
So I got this [Chromebook][chromebook-post] in Developer Mode and wanted to set

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Redis Cluster with pre-existing data
date: 11.03.2014 17:05
date: 11 Mar 2014 17:05:00 +0100
path: /:year/:month/:day/redis-cluster-with-pre-existing-data
---
With Beta 2 of Redis Cluster <del>arriving soon</del> [released just now][cluster-beta2], I finally found some time to play around with it.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Fixing zfs pool error in zones/dump
date: 17.03.2014 14:08
date: 17 Mar 2014 14:08:00 +0100
path: /:year/:month/:day/fixing-zfs-pool-error-in-zones-dump
---
At work we're using [SmartOS][], an Open Solaris clone featuring all kinds of cool stuff. One of the best things is the underlying file system: ZFS.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: OpenTechSchool - Learn new things
date: 01.04.2014 23:05
date: 01 Apr 2014 23:05:00 +0200
path: /:year/:month/:day/opentechschool-learn-new-things
---
Last weekend (29./30.03.) I coached beginners some HTML & CSS. This is about my experience.
@ -9,11 +9,9 @@ Last weekend (29./30.03.) I coached beginners some HTML & CSS. This is about my
A while back a [friend of mine][snnd] asked me if I wanted to help at [OpenTechSchool Dortmund][ots-do], coaching programming or to hold a talk.
At that time I was a little busy with University stuff like writing exams, but I said I would be very happy to help.
{::options parse_block_html="true" /}
<span style="float:right;margin-left:10px;">
[![Workshop schedule](//tmp.fnordig.de/ots/2014-03/th-html_css_workshop_schedule.jpg)](//tmp.fnordig.de/ots/2014-03/html_css_workshop_schedule.jpg)
</span>
{::options parse_block_html="false" /}
Then about a week ago he reached out to me. One of their coaches had canceled and they needed a new one. I immediately said yes.
Last friday then we had a short and fun coach meeting where I met the organizers. They worked hard to translate the complete material into German to make it easily understandable. [The full material can be found online][workshop]. It's not quite perfect but it is a good starting point.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Changing the root password in recent SmartOS
date: 12.05.2014 22:02
date: 12 May 2014 22:02:00 +0200
path: /:year/:month/:day/changing-the-root-password-in-recent-smartos
---
Back in 2012 Jonathan Perkin wrote a little bit about [SmartOS and the global zone][perkin],

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: key=value logs with nginx
date: 15.04.2014 18:24
date: 15 Apr 2014 18:24:00 +0200
path: /:year/:month/:day/key-value-logs-with-nginx
---
In [Six Ways to Make Your Production Logs More Useful][fun-with-logs] [@roidrage][] talked about how to make your logs much more useful.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: OpenTechSchool - Javascript for Beginners
date: 26.05.2014 15:15
date: 26 May 2014 15:15:00 +0200
path: /:year/:month/:day/opentechschooljavascript-for-beginners
---
2 month ago I coached at OpenTechSchool's [HTML & CSS for Absolute Beginners][htmlfab] workshop.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Extending Redis with Lua packages
date: 27.07.2014 13:57
date: 27 Jul 2014 13:57:00 +0200
path: /:year/:month/:day/extending-redis-with-lua-packages
---
**Warning**: If you patch your Redis as stated below, you won't get much support from the Community.

View file

@ -1,14 +1,12 @@
---
layout: post
extends: post.liquid
title: eurucamp 2014
date: 04.08.2014 14:15
date: 04 Aug 2014 14:15:00 +0200
path: /:year/:month/:day/eurucamp-2014
---
{::options parse_block_html="true" /}
<span style="float:right;margin-left:10px;width:250px;">
[![eurucamp chalk](//tmp.fnordig.de/eurucamp2014/th-2014-08-01_09.58.46.jpg)](//tmp.fnordig.de/eurucamp2014/2014-08-01_09.58.46.jpg)
</span>
{::options parse_block_html="false" /}
I'm just heading back to Aachen from [eurucamp 2014][eurucamp].
And all I can say is: What an awesome conference!
@ -51,11 +49,9 @@ If you already have a project it's not that easy to get it into a new market in
The audience for your product has completely different expectations, the country may have different laws. All these things need to be considered to be successfull.
{::options parse_block_html="true" /}
<span style="float:right;margin-left:10px;width:250px;">
[![rin live-coding a game](//tmp.fnordig.de/eurucamp2014/th-2014-08-02_10.21.40.jpg)](//tmp.fnordig.de/eurucamp2014/2014-08-02_10.21.40.jpg)
</span>
{::options parse_block_html="false" /}
### Let's build a game with Ruby
@ -77,24 +73,20 @@ purchased the necessary hardware and built a remote-controlled air purifier usin
### RubyMotion and Accessibility
<span style="float:left;margin-right:10px;width:250px">
[![taking a brake in the shadow](//tmp.fnordig.de/eurucamp2014/th-2014-08-01_16.56.27.jpg)](//tmp.fnordig.de/eurucamp2014/2014-08-01_16.56.27.jpg)
</span>
One of the best talks for me was the one about Accessibility held by [Austin](https://github.com/austinseraphin), a blind developer.
He's using both an iPhone and a Mac, because all of these Apple systems have built-in accessibility features, like Voice Over, the screen reader in iOS and OS X.
He also wrote software for [RubyMotion](http://www.rubymotion.com/) to make accessibility-testing even easier and
showed how easy it is to make iPhone apps more accessible. It's build in by default anyway,
adding information and labels is already a great improvement for every app. Test these things!
{::options parse_block_html="true" /}
<span style="float:left;margin-right:10px;width:250px">
[![taking a brake in the shadow](//tmp.fnordig.de/eurucamp2014/th-2014-08-01_16.56.27.jpg)](//tmp.fnordig.de/eurucamp2014/2014-08-01_16.56.27.jpg)
</span>
{::options parse_block_html="false" /}
{::options parse_block_html="true" /}
<span style="float:right;margin-left:10px;width:250px">
[![Griebnitzsee](//tmp.fnordig.de/eurucamp2014/th-2014-08-02_15.23.05.jpg)](//tmp.fnordig.de/eurucamp2014/2014-08-02_15.23.05.jpg)
</span>
{::options parse_block_html="false" /}
### Refactoring Ruby with Monads (or, Monads: The Good Parts)
@ -111,11 +103,7 @@ The code is available as a [gem and on GitHub](https://github.com/tomstuart/mona
_(That's all it needs as a comment)_
{::options parse_block_html="true" /}
<span style="float:left;margin-right:10px;width:250px;">
[![Beautfiul sunset over the venue's lawn](//tmp.fnordig.de/eurucamp2014/th-2014-08-02_20.28.48.jpg)](//tmp.fnordig.de/eurucamp2014/2014-08-02_20.28.48.jpg)
</span>
{::options parse_block_html="false" /}
[![Beautfiul sunset over the venue's lawn](//tmp.fnordig.de/eurucamp2014/2014-08-02_20.28.48.jpg)](//tmp.fnordig.de/eurucamp2014/2014-08-02_20.28.48.jpg)
### Utils is a Junk Drawer!

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: eurucamp 2014 - Video & Photos
date: 09.08.2014 13:06
date: 09 Aug 2014 13:06:00 +0200
path: /:year/:month/:day/eurucamp-2014-video-and-photos
---
Great short video documentation of eurucamp 2014 (by [@polarblau](https://twitter.com/polarblau)):

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: first experience with Rust
date: 12.08.2014 13:25
date: 12 Aug 2014 13:25:00 +0200
path: /:year/:month/:day/first-experience-with-rust
---
------

View file

@ -1,14 +1,12 @@
---
layout: post
extends: post.liquid
title: jsfest week 2014
date: 18.09.2014 01:39
date: 18 Sep 2014 01:39:00 +0200
path: /:year/:month/:day/jsfest-week-2014
---
{::options parse_block_html="true" /}
<span style="float:right;margin-left:10px;width:350px;">
[![rejectjs banner](//tmp.fnordig.de/jsfest2014/th-2014-09-11_08.52.55.jpg)](//tmp.fnordig.de/jsfest2014/2014-09-11_08.52.55.jpg)
</span>
{::options parse_block_html="false" /}
Last week I had the opportunity to spend a long weekend in the beautiful capital of Germany for [jsfest.berlin][jsfest].
What should I say? It was amazing.
@ -19,11 +17,9 @@ After [eurucamp](https://fnordig.de/2014/08/04/eurucamp-2014/) set quite a basis
The 3 conference days were packed with interesting talks, quite a few parties and great food. JavaScript seems to be quite a nice language (sometimes) and people do awesome stuff with it.
From sleep-hacking over making music and animations to making gifs even more awesome. Oh, and some stuff others would consider more useful in work life too.
{::options parse_block_html="true" /}
<span style="float:left;margin-right:10px;width:188px;">
[![rejectjs badge](//tmp.fnordig.de/jsfest2014/th-2014-09-11_09.00.53.jpg)](//tmp.fnordig.de/jsfest2014/2014-09-11_09.00.53.jpg)
</span>
{::options parse_block_html="false" /}
The only downside was that I in fact didn't really have time for a whole 4 days off, so I wasn't too focused on the reject.js talks and I might have missed good things from it :(
@ -44,11 +40,9 @@ After a nice intro (wait for the videos),
The talk was followed by **We Will All Be Game Programmers** from [Hunter Loftis](https://twitter.com/hunterloftis). Today's apps use a lot of the ideas that were used in games years ago, maybe we should have a look at game developing techniques and tooling a bit more to see what's relevant for modern web app programming.
{::options parse_block_html="true" /}
<span style="float:right;margin-left:10px;width:350px;">
[![beanbag.js](//tmp.fnordig.de/jsfest2014/th-2014-09-13_13.42.50.jpg)](//tmp.fnordig.de/jsfest2014/2014-09-13_13.42.50.jpg)
</span>
{::options parse_block_html="false" /}
**JavaScript Level 9000** by [Christoph Martens](https://twitter.com/martensms) explained a lot of low-level stuff in JavaScript. I'm not that into JavaScript yet, so I didn't take too much from it with me.
@ -64,12 +58,10 @@ After skipping two talks, [James Coglan](https://twitter.com/jcoglan) entered th
[Michael Donohoe](https://twitter.com/donohoe) talked about how to **Deep-link to Anything on the Web**. Working as a developer for journalistic sites he implemented multiple solutions to help linking to sections of an article, annotating it as needed and how to combine that with the backend.
{::options parse_block_html="true" /}
<span style="float:left;margin-right:10px;width:250px;">
[![party with nerds](//tmp.fnordig.de/jsfest2014/th-2014-09-13_22.36.28.jpg)](//tmp.fnordig.de/jsfest2014/2014-09-13_22.36.28.jpg)
</span>
{::options parse_block_html="false" /}
After another coffee break (there were a lot coffee breaks that weekend)
[Mathieu Henri](https://twitter.com/p01) showed **Monster Audio-Visual demos in a TCP packet**, a short introduction into the demo scene and the techniques he uses to build demos in as few bytes as possible. I wish I was more creative with visuals and audio.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: A Rust library for LibLZF
date: 15.10.2014 11:10
date: 15 Oct 2014 11:10:00 +0200
path: /:year/:month/:day/a-rust-library-for-liblzf
---
In the last four months I did not produce much open-source code. I was busy writing my Bachelor Thesis.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Review: Redis Applied Design Patterns"
date: 11.11.2014 00:41
date: 11 Nov 2014 00:41:00 +0100
path: /:year/:month/:day/review-redis-applied-design-patterns
---
In the mid of October I was approached by Packt Publishing asking if

View file

@ -1,14 +1,12 @@
---
layout: post
extends: post.liquid
title: How to not write a Bachelor Thesis
date: 15.11.2014 03:18
date: 15 Nov 2014 03:18:00 +0100
path: /:year/:month/:day/how-to-not-write-a-bachelor-thesis
---
{::options parse_block_html="true" /}
<span style="float:right;margin-left:10px;width:350px;">
[![Iteration 1](//tmp.fnordig.de/ba/th-2014-10-11_15.58.09.jpg)](//tmp.fnordig.de/ba/2014-10-11_15.58.09.jpg)
</span>
{::options parse_block_html="false" /}
… and how I got it finished anyway.
@ -25,11 +23,9 @@ Writing technical texts is different from a novel or a short blog post. Work on
The next thing: buy a paper notebook dedicated for your notes on the thesis topic. I kept mine with me and actually used it. Keeping meeting minutes, tasks to do for the week, simulation results or general ideas (though most of the stuff was added in the last 4 weeks).
{::options parse_block_html="true" /}
<span style="float:left;margin-right:10px;width:350px;">
[![Everything done](//tmp.fnordig.de/ba/th-2014-10-12_20.05.28.jpg)](//tmp.fnordig.de/ba/2014-10-12_20.05.28.jpg)
</span>
{::options parse_block_html="false" /}
Once you know your topic, start the research. That includes finding documentation, papers and whatever seems necessary for your topic.
Make sure to note down your sources immediately. Read papers and summarize them for yourself and discuss them with your supervisor or other students.
@ -51,11 +47,9 @@ My advice: keep track of your time. Note down how long you worked each day and w
I guess no matter what you do, the last weeks will still be busy. What got me most focussed on the task at hand is the Pomodoro technique. 25 minutes of concentrated work, no distractions, no drinking, no eating, no running around. 5 minutes break. Check Twitter, Facebook, Mails, whatever. Then repeat.
I use this technique for 3 years of studying now, and it also works for coding and writing.
{::options parse_block_html="true" /}
<span style="float:right;margin-left:10px;width:220px;">
[![The printed thesis](//tmp.fnordig.de/ba/th-2014-10-13_09.59.16.jpg)](//tmp.fnordig.de/ba/2014-10-13_09.59.16.jpg)
</span>
{::options parse_block_html="false" /}
I had to write my thesis in English, but I'm far from a perfect English speaker or writer.
I now know that I should practice much more often (and I try to do that by getting more blog posts out).

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "The story of my childhood or: Rust on the PSP"
date: 03.12.2014 20:03
date: 03 Dec 2014 20:03:00 +0100
path: /:year/:month/:day/a-story-of-hacking-or-rust-on-the-psp
---
------
@ -102,11 +102,9 @@ As soon as I was back home, I grabbed my PSP, booted up a new virtual machine an
First step: Re-compile and run p-twit. Yip, it works (ok, it starts. Of course the Twitter API is so closed these days, it wouldn't be able to do anything).
{::options parse_block_html="true" /}
<div style="text-align:center">
<center>
[![p-twit runs again](//tmp.fnordig.de/rust-on-psp/th-2014-11-24_11.54.27.jpg)](//tmp.fnordig.de/rust-on-psp/2014-11-24_11.54.27.jpg)
</div>
{::options parse_block_html="false" /}
</center>
Second step: Follow the instructions from the [Gist][helloworld-instructions].
@ -129,20 +127,16 @@ He simply used the pre-compiled [minpspw][] package
(*Update 04.12.2014*: Luqman informed me he does in fact built it himself from the minpspw svn, which in turn uses the psptoolchain I tried with first, so absolutely no idea why directly using it failed).
Once I grabbed that, the "Hello World" application compiled and ran! Success!
{::options parse_block_html="true" /}
<div style="text-align:center">
<center>
[![From Rust with love](//tmp.fnordig.de/rust-on-psp/th-2014-11-27_01.13.59.jpg)](//tmp.fnordig.de/rust-on-psp/2014-11-27_01.13.59.jpg)
</div>
{::options parse_block_html="false" /}
</center>
The journey doesn't end here.
Only partly satisfied with what I had, I took some free time on a train ride to write a wrapper for the input handling.
{::options parse_block_html="true" /}
<div style="text-align:center">
<center>
[![Press X, press O](//tmp.fnordig.de/rust-on-psp/th-2014-11-28_12.25.50.jpg)](//tmp.fnordig.de/rust-on-psp/2014-11-28_12.25.50.jpg)
</div>
{::options parse_block_html="false" /}
</center>
Now it's possible to react to user input with this simple piece of code:

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: 2014 in many words
date: 29.12.2014 15:00
date: 29 Dec 2014 15:00:00 +0100
path: /:year/:month/:day/2014-in-many-words
---
### My year in numbers
@ -69,52 +69,9 @@ And thanks to all the people I forgot to mention explicitely, thanks to my frien
There are already a lot of things planned for 2015, so it will be just as busy as this year.
{::options parse_block_html="false" /}
<div style="text-align:center">
<strong>&lt;3</strong>
</div>
{::options parse_block_html="true" /}
<!--dank an hoodie (lena, gregor, jan, ola)-->
<!--dank an dominik-->
<!--dank an lotte-->
<!--dank an ots (ola, carsten, leif, hendrik)-->
<!--dank an ruby leute-->
<!--dannke an salzburg barcamp (hannes, stephan)-->
<!--2 ots workshops,-->
<!--fosdem, eurucamp, froscon/redfrog, reject.js, jsconf, railscamp, barcamp salzburg, 31c3-->
<!--usa-urlaub / ietf meeting-->
<!--bachelor arbeit-->
<!--2 Spontan-Vorträge (salzburg, froscon/redfrog)-->
<!--1 Redis Vortrag-->
<!--~12-18 neue T-Shirts-->
<!--X redis releases-->
<!--879 github contributions-->
<!--380 github opensource contributions-->
<!--
3 Sportturniere mit der Uni-Handball-Mannschaft, eins aus versehen gewonnen
20 blog posts
36 Instagram Fotos
ca 3000 fotos
tweets
[~]% grep '^ "id"' ~/projects/twitter-backup/data/js/tweets/2014_* | wc -l
8243
non-reply tweet
% grep '^ "in_reply_to_status_id"' 2014_* | grep null | wc -l
2464
-->
[hoodie]: http://hood.ie/
[ola]: https://twitter.com/misprintedtype

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: rdb-rs - fast and efficient RDB parsing utility
date: 15.01.2015 23:50
date: 15 Jan 2015 23:50:00 +0100
path: /:year/:month/:day/rdb-rs-fast-and-efficient-rdb-parsing-utility
---
Ever since I started looking into [Rust][] I knew I needed a bigger project for which I could use it.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: hiredis is up to date
date: 09.02.2015 20:20
date: 09 Feb 2015 20:20:00 +0100
path: /:year/:month/:day/hiredis-is-up-to-date
---
Back in December 2014 antirez reached out to the community, to [find a new maintainer of hiredis](https://github.com/redis/hiredis/issues/283).

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "The difference of Rust's thread::spawn and thread::scoped"
date: 05.03.2015 14:41
date: 05 Mar 2015 14:41:00 +0100
path: /:year/:month/:day/the-difference-of-rust-s-spawn-and-scoped
---
So yesterday I gave a Rust introduction talk at the local hackerspace, [CCCAC](http://ccc.ac).

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: U2F demo application
date: 06.03.2015 16:07
date: 06 Mar 2015 16:07:00 +0100
path: /:year/:month/:day/u2f-demo-application
---
Two weeks ago I got my first Universal Second Factor Device.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "New releases of hiredis-py and hiredis-node"
date: 03.04.2015 23:05
date: 03 Apr 2015 23:05:00 +0200
path: /:year/:month/:day/new-releases-of-hiredis-py-and-node
---
I just published [hiredis-py][] v0.2.0 to [PyPi][] and [hiredis-node][] v0.3.0 to [npm][].

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Using a Kindle for status information
date: 14.05.2015 20:50
date: 14 May 2015 20:50:00 +0200
path: /:year/:month/:day/using-a-kindle-for-status-information
---
Back in 2011 I got a Kindle 4 (the non-touch version) and for some time it was
@ -16,11 +16,9 @@ For some time now I have this link saved: [Kindle Weather Display][weather-displ
Well, what better to do with a lazy holiday then doing some hacking with the Kindle? And so I did and this is the current result: It displays the weather forecast.
{::options parse_block_html="true" /}
<div style="text-align:center">
[![For now it shows the weather forecast](//tmp.fnordig.de/kindle/th-Photo-2015-05-14-19-27.jpg)](http://tmp.fnordig.de/kindle/Photo-2015-05-14-19-27.jpg)
<a href="http://tmp.fnordig.de/kindle/Photo-2015-05-14-19-27.jpg"><img src="//tmp.fnordig.de/kindle/th-Photo-2015-05-14-19-27.jpg" alt="For now it shows the weather forecast"></a>
</div>
{::options parse_block_html="false" /}
As the original article is quite short on the precise steps to get this finished, I wanted to write them up here.
@ -129,11 +127,11 @@ As this post is already getting quite long, I leave the server-side up to you.
All files (for both the Kindle and the server part) are in the GitHub repository: [kindle-weather-display][repo].
This is the final result: My Kindle hanging on the wall right under the calendar. :)
{::options parse_block_html="true" /}
<div style="text-align:center">
[![It's hanging at the wall](//tmp.fnordig.de/kindle/th-Photo-2015-05-14-16-44.jpg)](http://tmp.fnordig.de/kindle/Photo-2015-05-14-16-44.jpg)
<a href="//tmp.fnordig.de/kindle/th-Photo-2015-05-14-16-44.jpg">
<img src="//tmp.fnordig.de/kindle/Photo-2015-05-14-16-44.jpg" alt="It's hanging at the wall">
</a>
</div>
{::options parse_block_html="false" /}
[weather-display]: http://mpetroff.net/2012/09/kindle-weather-display/
[kite]: http://www.mobileread.com/forums/showthread.php?t=168270

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Redis Sentinel & Redis Cluster - what?"
date: 01.06.2015 23:20
date: 01 Jun 2015 23:20:00 +0200
path: /:year/:month/:day/redis-sentinel-and-redis-cluster
---
In the last week there were several questions regarding Redis Sentinel and Redis Cluster, if one or the other will go away or if they need to be used in combination.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "omnomnom - Parsing ISO8601 dates using nom"
date: 16.07.2015 11:00
date: 16 Jul 2015 11:00:00 +0200
path: /:year/:month/:day/omnomnom-parsing-iso8601-dates-using-nom
---
There are thousands of ways to note down a date and time.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Redis Dev Day London 2015"
date: 22.10.2015 15:05
date: 22 Oct 2015 15:05:00 +0200
path: /:year/:month/:day/redis-dev-day-london-2015
---
Last Monday the Redis Dev Day took place in London, followed by a small Unconference on Tuesday.
@ -30,12 +30,10 @@ None of this is final yet, there are a lot of things to get right before this ca
For example it's not done with providing the commands for selection based on indexes, but needing to add, update and remove the index is necessary as well.
More in-depth discussions happened the next day, prior to the Unconf.
{::options parse_block_html="false" /}
<center>
<blockquote class="twitter-tweet" lang="en"><p lang="en" dir="ltr">Pre-Unconf Dev Meetup in progress! <a href="https://twitter.com/hashtag/RedisLondon?src=hash">#RedisLondon</a> <a href="https://t.co/7HhFocK9J0">pic.twitter.com/7HhFocK9J0</a></p>&mdash; c-&amp;gt;flags (@badboy_) <a href="https://twitter.com/badboy_/status/656499542750269441">October 20, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
</center>
{::options parse_block_html="true" /}
Even though this kinda goes against the current idea of Redis
-- provide the basic tools with a simple API and not much more --

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: 2015 in many words and some photos
date: 31.12.2015 20:50
date: 31 Dec 2015 20:50:00 +0100
path: /:year/:month/:day/2015-in-many-words
---
Last year I summarized my year in a [long blog post](https://fnordig.de/2014/12/29/2014-in-many-words/),
@ -43,54 +43,42 @@ but 12 blog posts still come down to about one per month.
After the busy ending of 2014, 2015 started just as busy.
Away from university, I spend more time working, but I found enough time for conferences and a quick one-week visit in San Francisco in April.
{::options parse_block_html="true" /}
<p style="text-align:center">
![Golden Gate Bridge](//tmp.fnordig.de/end-of-2015/2015-04-22_10.45.13_1500_cropped.jpg){:width="450px"}
![Bay Bridge](//tmp.fnordig.de/end-of-2015/2015-04-22_15.32.13_1500.jpg){:width="450px"}
</p>
{::options parse_block_html="false" /}
<center>
![Golden Gate Bridge](//tmp.fnordig.de/end-of-2015/2015-04-22_10.45.13_1500_cropped.jpg)
![Bay Bridge](//tmp.fnordig.de/end-of-2015/2015-04-22_15.32.13_1500.jpg)
</center>
University and work kept me busy the whole summer, but I still catched a bit of the Sun.
After finishing up the Summer semester, I left for Norway in August.
{::options parse_block_html="true" /}
<p style="text-align:center">
![Norway Flag](//tmp.fnordig.de/end-of-2015/2015-09-12_13.27.01_1500.jpg){:width="900px"}
</p>
{::options parse_block_html="false" /}
<center>
![Norway Flag](//tmp.fnordig.de/end-of-2015/2015-09-12_13.27.01_1500.jpg)
</center>
I came back for a weekend to run otsconf. It was a success, but see for yourself:
<p style="text-align:center">
<iframe width="900" height="506" src="https://www.youtube.com/embed/3Uktz9J0uPs" frameborder="0" allowfullscreen></iframe>
</p>
Back in Norway I had the absolute best time.
For example hiking up a hill, sitting on the Kjeragbolten thousand meter over the Fjord.
{::options parse_block_html="true" /}
<p style="text-align:center">
![Kjerag](//tmp.fnordig.de/end-of-2015/2015-09-29_13.32.51_1500.jpg){:width="900px"}
</p>
{::options parse_block_html="false" /}
<center>
![Kjerag](//tmp.fnordig.de/end-of-2015/2015-09-29_13.32.51_1500.jpg)
</center>
My semester ended early on the first of December, so I had another chance to travel around Norway.
Even without a lot of light, the Lofoten are a beautiful place to stay.
{::options parse_block_html="true" /}
<p style="text-align:center">
![Lofoten](//tmp.fnordig.de/end-of-2015/_DSC0859_1500.jpg){:width="900px"}
</p>
{::options parse_block_html="false" /}
<center>
![Lofoten](//tmp.fnordig.de/end-of-2015/_DSC0859_1500.jpg)
</center>
With 2015 coming to an end, so are other things. I had to replace my old Laptop, which stayed with me for the last four years.
{::options parse_block_html="true" /}
<p style="text-align:center">
![Laptop](//tmp.fnordig.de/end-of-2015/old-laptop_1500.jpg){:width="600px"}
</p>
{::options parse_block_html="false" /}
<center>
![Laptop](//tmp.fnordig.de/end-of-2015/old-laptop_1500.jpg)
</center>
I really enjoyed living & traveling in Norway and I already put it on my todo list to come back in the summer.
I was lucky to be part of so many different but welcoming communities. It's a joy every time I meet these people again.
@ -108,11 +96,9 @@ And thanks to all those I didn't name explicitely, but who made this year so muc
2016 won't start any less busy.
With my next university semester only starting in April, I will make the best of that time. The next trip starts in less than five days.
{::options parse_block_html="false" /}
<div style="text-align:center">
<strong>&lt;3</strong>
</div>
{::options parse_block_html="true" /}
[ola]: https://twitter.com/misprintedtype
[carsten]: https://twitter.com/dergraf86

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Create GitHub releases with Rust using Hubcaps
date: 23.02.2016 20:32
date: 23 Feb 2016 20:32:00 +0100
path: /:year/:month/:day/create-releases-using-hubcaps-a-rust-library
---
For one of my projects I need to access the GitHub API to create releases.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: Load your config into your environment
date: 04.03.2016 12:30
date: 04 Mar 2016 12:30:00 +0100
path: /:year/:month/:day/load-your-config-into-your-environment
---
It became quite popular to store certain configuration variables in your environment, to be later loaded by your aplication.

View file

@ -1,7 +1,6 @@
---
layout: post
title: Releasing Rust projects, the automatic way
date: 29.03.2016 20:47
date: 29 Mar 2016 20:47:00 +0200
path: /:year/:month/:day/releasing-rust-projects-the-automatic-way
---
One of the strength of the Rust ecosystem is its package manager [Cargo][] and the package system [crates.io][].

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Quick check: does your code work?"
date: 12.05.2016 23:00
date: 12 May 2016 23:00:00 +0200
path: /:year/:month/:day/quickcheck-does-your-code-work
---
… because mine didn't. At least not correctly in all cases.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Longboarding: Vennbahn"
date: 09.06.2016 16:20
date: 09 Jun 2016 16:20:00 +0200
path: /:year/:month/:day/longboarding-vennbahn
---
Today, right after finishing my only lecture of the day, I rented a longboard at a local skate shop
@ -9,37 +9,21 @@ and then took the bus out of the city.
I went out to Kornelimünster, a small district of Aachen, about 10 km outside of the city.
{::options parse_block_html="true" /}
<p style="text-align:center">
![](//tmp.fnordig.de/longboarding/0609/th-2016-06-09_12.44.21.jpg)
</p>
{::options parse_block_html="false" /}
In the last days it rained half of the day, but today it's sunny and really warm.
The route goes mostly downhill from Kornelimünster, so I did not need much pushing and could just let it roll.
{::options parse_block_html="true" /}
<p style="text-align:center">
![](//tmp.fnordig.de/longboarding/0609/th-2016-06-09_12.53.25-1.jpg)
</p>
{::options parse_block_html="false" /}
I collected the route with an app.
The results: 10,9 km in 53 minutes. Top speed: 31,5 km/h. 12,4 km/h on average.
{::options parse_block_html="true" /}
<p style="text-align:center">
![](//tmp.fnordig.de/longboarding/0609/th-2016-06-09_13.18.03.jpg)
</p>
{::options parse_block_html="false" /}
I was much quicker than I thought, so I got some ice cream in the city of Aachen before heading home.
{::options parse_block_html="true" /}
<p style="text-align:center">
![](//tmp.fnordig.de/longboarding/0609/th-2016-06-09_14.34.02.jpg)
</p>
{::options parse_block_html="false" /}
The route on a map ([available in a Gist](https://gist.github.com/badboy/9c27ca438570a800507f2a76fdd19544)):

View file

@ -1,23 +1,19 @@
---
layout: post
extends: post.liquid
title: "Rust from the Back to the Front (Rust Sthlm)"
date: 31.08.2016 16:30
date: 31 Aug 2016 16:30:00 +0200
path: /:year/:month/:day/rust-from-the-back-to-the-front
---
{::options parse_block_html="true" /}
<div style="text-align:center">
<center>
[![Rust on the Web](//tmp.fnordig.de/rust-sthlm/th-2016-08-29_18.23.59.jpg)](//tmp.fnordig.de/rust-sthlm/2016-08-29_18.23.59.jpg)
</div>
{::options parse_block_html="false" /}
</center>
Last monday I attended the [Rust Sthlm][meetup] Meetup and gave a talk about using Rust for web development.
About 60 people attended, had pizza and listened to the two talks of the evening.
{::options parse_block_html="true" /}
<div style="text-align:center">
<center>
[![Meetup](//tmp.fnordig.de/rust-sthlm/th-2016-08-29_18.59.00.jpg)](//tmp.fnordig.de/rust-sthlm/th-2016-08-29_18.59.00.jpg)
</div>
{::options parse_block_html="false" /}
</center>
I started off with my talk *Rust from the Back to the Front*, giving an overview of the ecosystem around all things related to web programming in Rust.
This was an updated talk of the one I gave in Budapest last year ([video online](https://www.youtube.com/watch?v=L9sTIi7wFPo)).
@ -28,11 +24,9 @@ I definitely need to look deeper into this topic, as I think it can bring huge i
This has to wait a bit though, as I will first dive deeper into Emscripten (and present that [next week in Cologne](http://rustaceans.cologne/2016/09/05/compile-to-js.html) and in [Pittsburgh in October](http://www.rust-belt-rust.com/)).
My slides are [online][slides] and I will try to collect more [resources in a Gist][resources].
{::options parse_block_html="true" /}
<div style="text-align:center">
<center>
[![Rust and openSUSE](//tmp.fnordig.de/rust-sthlm/th-2016-08-29_20.03.47.jpg)](//tmp.fnordig.de/rust-sthlm/2016-08-29_20.03.47.jpg)
</div>
{::options parse_block_html="false" /}
</center>
The second talk that evening was by [Kristoffer Grönlund][krig], giving us a quick introduction to some of Rust's features,
followed by an overview of his work trying to get Rust into the openSUSE package repositories.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Signify - Ed25519 signatures for your files (in Rust)"
date: 28.09.2016 13:16
date: 28 Sep 2016 13:16:00 +0200
path: /:year/:month/:day/signify-ed25519-signatures-for-your-files
---
From time to time I try to write a piece of code or port some existing library or application just for fun.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "novemb.rs Code Sprint Weekend 2016 - Retrospective"
date: 29.11.2016 11:55
date: 29 Nov 2016 11:55:00 +0100
path: /:year/:month/:day/novemb-rs-code-sprint-weekend-2016-retrospective
---
*This post is a tiny bit late, but better late than never.*
@ -10,12 +10,10 @@ So on 19th and 20th of November, just over a week ago, we had the very first [no
In 10 locations in Europe and the US as well as online, people gathered to hack on projects, start new ones or just to learn Rust.
Bringing people together is one goal of the Rust community and coding, learning and having fun together is a lot of fun as well.
{::options parse_block_html="true" /}
<div class="image" style="text-align:center">
<center>
![novemb.rs @ C4](//tmp.fnordig.de/novemb.rs/th-novembrs-sign.jpg)
<p>We opened doors at Chaos Computer Club Cologne</p>
</div>
{::options parse_block_html="false" /}
</center>
I was part of the [novemb.rs Event in Cologne](http://rust.cologne/2016/11/19/novemb-rs.html).
On both days about a dozen people showed up, from noon to late in the evening.
@ -49,12 +47,10 @@ And another big thanks to Mozilla for sponsoring the pizza and the C4 for offeri
We should try harder to get people from everywhere involved.
* Online Communication between locations wasn't used that much. The whole idea was to have a distributed code sprint, so working together on projects across locations would have been nice. Maybe we should offer to have ad-hoc video calls as well?
{::options parse_block_html="true" /}
<div class="image" style="text-align:center">
<center>
[![Rust @ Whiteboard](//tmp.fnordig.de/novemb.rs/th-2016-11-20_14.36.28.jpg)](//tmp.fnordig.de/novemb.rs/2016-11-20_14.36.28.jpg)
<p>Coding on the whiteboard (only half of the attendees in the picture)</p>
</div>
{::options parse_block_html="false" /}
</center>
### Try again?
@ -67,9 +63,7 @@ Feel free to join us on the Weihnachtsmarkt or in January at another more regula
If you are not from the Rhein area, take a look if there's a [Rust User Group](https://www.rust-lang.org/en-US/user-groups.html) near you.
{::options parse_block_html="true" /}
<div class="image" style="text-align:center">
<center>
[![Rust](//tmp.fnordig.de/novemb.rs/th-2016-11-20_12.11.20.jpg)](//tmp.fnordig.de/novemb.rs/2016-11-20_12.11.20.jpg)
<p>Signs showed the way</p>
</div>
{::options parse_block_html="false" /}
</center>

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Xen - a backend/frontend driver example"
date: 02.12.2016 10:10
date: 02 Dec 2016 10:10:00 +0100
path: /:year/:month/:day/xen-a-backend-frontend-driver-example
---
Recently I began working on my master thesis. For this I have to get familiar with the [Xen hypervisor][xen] and its implementation of drivers.

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Xen - split driver, initial communication"
date: 20.12.2016 16:00
date: 20 Dec 2016 16:00:00 +0100
path: /:year/:month/:day/xen-split-driver-initial-communication
---
In the [previous post](/2016/12/02/xen-a-backend-frontend-driver-example/) I explained how to initially setup a split driver

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: 2016 in many words and some photos
date: 31.12.2016 11:30
date: 31 Dec 2016 11:30:00 +0100
path: /:year/:month/:day/2016-in-many-words
---
Last year I summarized my year in a [long blog post](/2015/12/31/2015-in-many-words/),
@ -47,59 +47,29 @@ The year started off with a trip to Canada.
With temperatures as low as -25°C, lots of snow, pancakes and beer I had a wonderful time.
I definitely need to go back once more in the summer.
{::options parse_block_html="true" /}
<div class="image" style="text-align:center">
![Canada Forest](//tmp.fnordig.de/end-of-2016/2016-01-08_12.27.25.jpg){:width="900px"}
<p>Canada Forest</p>
</div>
{::options parse_block_html="false" /}
![Canada Forest](//tmp.fnordig.de/end-of-2016/2016-01-08_12.27.25.jpg)
{::options parse_block_html="true" /}
<div class="image" style="text-align:center">
![Freezing cold](//tmp.fnordig.de/end-of-2016/2016-01-13_16.49.41.jpg){:width="900px"}
<p>Freezing cold</p>
</div>
{::options parse_block_html="false" /}
![Freezing cold](//tmp.fnordig.de/end-of-2016/2016-01-13_16.49.41.jpg)
{::options parse_block_html="true" /}
<div class="image" style="text-align:center">
![Sun over frozen Canada](//tmp.fnordig.de/end-of-2016/2016-01-24_12.59.35.jpg){:width="900px"}
<p>Sun over frozen Canada</p>
</div>
{::options parse_block_html="false" /}
![Sun over frozen Canada](//tmp.fnordig.de/end-of-2016/2016-01-24_12.59.35.jpg)
In May I made a short trip to Stockholm.
Equipped with the absolute best weather I enjoyed a few more days away from university and work and could relax.
In addition a canceled flight gave me another night in this city.
{::options parse_block_html="true" /}
<div class="image" style="text-align:center">
![Beautiful Stockholm](//tmp.fnordig.de/end-of-2016/2016-05-17_10.44.11-2.jpg){:width="900px"}
<p>Beautiful Stockholm</p>
</div>
{::options parse_block_html="false" /}
![Beautiful Stockholm](//tmp.fnordig.de/end-of-2016/2016-05-17_10.44.11-2.jpg)
After I got back to Aachen I bought my first Longboard.
I enjoyed multiple long trips over the Vennbahn. See more impression in [Longboarding: Vennbahn](//fnordig.de/2016/06/09/longboarding-vennbahn/).
{::options parse_block_html="true" /}
<div class="image" style="text-align:center">
![Longboarding on Vennbahn](//tmp.fnordig.de/end-of-2016/2016-06-09_12.53.25-1.jpg){:width="900px"}
<p>Longboarding on Vennbahn</p>
</div>
{::options parse_block_html="false" /}
![Longboarding on Vennbahn](//tmp.fnordig.de/end-of-2016/2016-06-09_12.53.25-1.jpg)
In August I got back to Stockholm a second time.
This time with friends for a 4 day long kajaking trip through the Stockholm Archipelago.
And again we had the best weather for such a trip.
I could even visit the Stockholm Rust meetup and give a talk a few days later before heading back home.
{::options parse_block_html="true" /}
<div class="image" style="text-align:center">
![Sunset in the archipelago of Stockholm](//tmp.fnordig.de/end-of-2016/2016-08-24_19.08.49-1.jpg){:width="900px"}
<p>Sunset in the archipelago of Stockholm</p>
</div>
{::options parse_block_html="false" /}
![Sunset in the archipelago of Stockholm](//tmp.fnordig.de/end-of-2016/2016-08-24_19.08.49-1.jpg)
In August I took part in the [Mozilla Tech Speakers program](https://wiki.mozilla.org/TechSpeakers)
and thus became an official Tech Speaker.
@ -133,8 +103,7 @@ I already have some plans for the time after that, including bigger travel plans
but I don't know where I will end up after that.
2017 will probably be the year I leave Aachen after more than 5 years living there.
{::options parse_block_html="false" /}
<br>
<div style="text-align:center">
<strong>&lt;3</strong>
</div>
{::options parse_block_html="true" /}

View file

@ -1,7 +1,7 @@
---
layout: post
extends: post.liquid
title: "Send ICMP Echo Replies using eBPF"
date: 04.03.2017 17:25
date: 04 Mar 2017 17:25:00 +0100
path: /:year/:month/:day/send-icmp-echo-replies-using-ebpf
---
For my master thesis I am working with eBPF, the [Extended Berkeley Packet Filter](https://www.kernel.org/doc/Documentation/networking/filter.txt).

View file

@ -1,6 +1,7 @@
---
layout: post
title: about
extends: simple.liquid
title: About
route: about
path: /about
---
25 years old,
@ -15,13 +16,13 @@ contributor to [Redis](http://redis.io) and maintainer of [hiredis](https://gith
## // links
## Links
* Twitter: [@badboy\_](https://twitter.com/badboy_)
* GitHub: [@badboy](https://github.com/badboy)
* Pinboard: [badboy](http://pinboard.in/u:badboy)
## // projects
## Projects
* [Compiling Rust to your Browser](http://www.hellorust.com/emscripten/) - Resources, demos & more for compiling Rust to asm.js & WebAssembly
* [semantic-rs](https://github.com/semantic-rs/semantic-rs) - Automatic crate publishing
@ -31,12 +32,12 @@ contributor to [Redis](http://redis.io) and maintainer of [hiredis](https://gith
* [badbill](https://github.com/badboy/badbill) - A client for the [Billomat](http://www.billomat.com/en/api/) API
* [Redis FAQ](/redis-faq/) - an unofficial Redis FAQ with user questions
## // services
## Services
* [etherpad](https://pad.fnordig.de/) - real-time collaborative document editing
* [rezepte](http://rezepte.fnordig.de/) - a small database of recipes (german)
## // other
## Other
* [Events I've been at](http://badboy.hasbeen.at/)
* [Places I've been in](http://badboy.hasbeen.in/)

View file

@ -1,122 +0,0 @@
.CodeRay {
background-color: hsl(0,0%,95%);
border: 1px solid silver;
color: black;
margin: 5px;
}
.CodeRay pre {
margin: 0px;
}
span.CodeRay { white-space: pre; border: 0px; padding: 2px; }
table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; }
table.CodeRay td { padding: 2px 4px; vertical-align: top; }
.CodeRay .line-numbers {
background-color: hsl(180,65%,90%);
color: gray;
text-align: right;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.CodeRay .line-numbers a {
background-color: hsl(180,65%,90%) !important;
color: gray !important;
text-decoration: none !important;
}
.CodeRay .line-numbers a:target { color: blue !important; }
.CodeRay .line-numbers .highlighted { color: red !important; }
.CodeRay .line-numbers .highlighted a { color: red !important; }
.CodeRay span.line-numbers { padding: 0px 4px; }
.CodeRay .line { display: block; float: left; width: 100%; }
.CodeRay .code { width: 100%; }
.CodeRay .code pre { overflow: auto; }
.CodeRay .debug { color: white !important; background: blue !important; }
.CodeRay .annotation { color:#007 }
.CodeRay .attribute-name { color:#f08 }
.CodeRay .attribute-value { color:#700 }
.CodeRay .binary { color:#509 }
.CodeRay .char .content { color:#D20 }
.CodeRay .char .delimiter { color:#710 }
.CodeRay .char { color:#D20 }
.CodeRay .class { color:#B06; font-weight:bold }
.CodeRay .class-variable { color:#369 }
.CodeRay .color { color:#0A0 }
.CodeRay .comment { color:#888 }
.CodeRay .comment .char { color:#444 }
.CodeRay .comment .delimiter { color:#444 }
.CodeRay .complex { color:#A08 }
.CodeRay .constant { color:#036; font-weight:bold }
.CodeRay .decorator { color:#B0B }
.CodeRay .definition { color:#099; font-weight:bold }
.CodeRay .delimiter { color:black }
.CodeRay .directive { color:#088; font-weight:bold }
.CodeRay .doc { color:#970 }
.CodeRay .doc-string { color:#D42; font-weight:bold }
.CodeRay .doctype { color:#34b }
.CodeRay .entity { color:#800; font-weight:bold }
.CodeRay .error { color:#F00; background-color:#FAA }
.CodeRay .escape { color:#666 }
.CodeRay .exception { color:#C00; font-weight:bold }
.CodeRay .float { color:#60E }
.CodeRay .function { color:#06B; font-weight:bold }
.CodeRay .global-variable { color:#d70 }
.CodeRay .hex { color:#02b }
.CodeRay .imaginary { color:#f00 }
.CodeRay .include { color:#B44; font-weight:bold }
.CodeRay .inline { background-color: hsla(0,0%,0%,0.1); color: black }
.CodeRay .inline-delimiter { font-weight: bold; color: #666 }
.CodeRay .instance-variable { color:#33B }
.CodeRay .integer { color:#00D }
.CodeRay .key .char { color: #60f }
.CodeRay .key .delimiter { color: #404 }
.CodeRay .key { color: #606 }
.CodeRay .keyword { color:#080; font-weight:bold }
.CodeRay .label { color:#970; font-weight:bold }
.CodeRay .local-variable { color:#963 }
.CodeRay .namespace { color:#707; font-weight:bold }
.CodeRay .octal { color:#40E }
.CodeRay .operator { }
.CodeRay .predefined { color:#369; font-weight:bold }
.CodeRay .predefined-class { color:#069 }
.CodeRay .predefined-type { color:#0a5; font-weight:bold }
.CodeRay .preprocessor { color:#579 }
.CodeRay .pseudo-class { color:#00C; font-weight:bold }
.CodeRay .regexp .content { color:#808 }
.CodeRay .regexp .delimiter { color:#404 }
.CodeRay .regexp .modifier { color:#C2C }
.CodeRay .regexp { background-color:hsla(300,100%,50%,0.09); }
.CodeRay .reserved { color:#080; font-weight:bold }
.CodeRay .shell .content { color:#2B2 }
.CodeRay .shell .delimiter { color:#161 }
.CodeRay .shell { background-color:hsla(120,100%,50%,0.09); }
.CodeRay .string .char { color: #b0b }
.CodeRay .string .content { color: #D20 }
.CodeRay .string .delimiter { color: #710 }
.CodeRay .string .modifier { color: #E40 }
.CodeRay .string { background-color:hsla(0,100%,50%,0.08); }
.CodeRay .symbol .content { color:#A60 }
.CodeRay .symbol .delimiter { color:#630 }
.CodeRay .symbol { color:#A60 }
.CodeRay .tag { color:#070 }
.CodeRay .type { color:#339; font-weight:bold }
.CodeRay .value { color: #088; }
.CodeRay .variable { color:#037 }
.CodeRay .insert { background: hsla(120,100%,50%,0.1) }
.CodeRay .delete { background: hsla(0,100%,50%,0.1) }
.CodeRay .change { color: #bbf; background: #007; }
.CodeRay .head { color: #f8f; background: #505 }
.CodeRay .head .filename { color: white; }
.CodeRay .delete .eyecatcher { background-color: hsla(0,100%,50%,0.2); border: 1px solid hsla(0,100%,45%,0.5); margin: -1px; border-bottom: none; border-top-left-radius: 5px; border-top-right-radius: 5px; }
.CodeRay .insert .eyecatcher { background-color: hsla(120,100%,50%,0.2); border: 1px solid hsla(120,100%,25%,0.5); margin: -1px; border-top: none; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; }
.CodeRay .insert .insert { color: #0c0; background:transparent; font-weight:bold }
.CodeRay .delete .delete { color: #c00; background:transparent; font-weight:bold }
.CodeRay .change .change { color: #88f }
.CodeRay .head .head { color: #f4f }

View file

@ -5,10 +5,10 @@ OUTPUT_DIR = File.expand_path("~/projects/fnordig.de/_posts")
EDITOR = ENV['EDITOR'] || 'vim'
EXTENSION=".md"
HEADER = <<EOF
---
layout: post
extends: post.liquid
title: "%s"
date: %s
path: /:year/:month/:day/%s
---
EOF
@ -18,14 +18,20 @@ if ARGV.size == 0
exit 1
end
filename = Time.now.strftime("%Y-%m-%d-") + ARGV.map { |arg|
def slugify(args)
args.map { |arg|
arg.downcase.gsub(/[^a-z0-9]/, '-')
}.join('-').gsub(/--+/, '-').gsub(/-$/, '')
end
now = Time.now
slug = slugify(ARGV)
filename = now.strftime("%Y-%m-%d-") + slug
title = ARGV.join(' ')
file = File.join(OUTPUT_DIR, "#{filename}#{EXTENSION}")
date = Time.now.strftime("%d.%m.%Y %H:%M")
date = now.strftime("%d %b %Y %H:%M:%S %z")
puts "new post: #{title}"
puts "file: #{filename}"
File.open(file, "w"){|f| f.write(HEADER % [title, date]) }
File.open(file, "w"){|f| f.write(HEADER % [title, date, slug]) }
exec EDITOR, '+', file

View file

@ -1,26 +0,0 @@
---
layout: null
---
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>fnordig.de</title>
<link href="http://fnordig.de/feed.xml" rel="self"/>
<link href="http://fnordig.de/"/>
<updated>{{ site.time | date_to_xmlschema }}</updated>
<id>http://fnordig.de/</id>
<author>
<name>Jan-Erik Rediger</name>
<email>janerik@fnordig.de</email>
</author>
{% for post in site.posts %}
<entry>
<title>{{ post.title | xml_escape }}</title>
<link href="http://fnordig.de{{ post.url }}"/>
<updated>{{ post.date | date_to_xmlschema }}</updated>
<id>http://fnordig.de{{site.baseurl}}{{ post.url | replace_first: '/'}}</id>
<content type="html">{{ post.content | xml_escape }}</content>
</entry>
{% endfor %}
</feed>

Some files were not shown because too many files have changed in this diff Show more