1
0
mirror of https://github.com/meineerde/holgerjust.de.git synced 2026-02-21 19:12:05 +00:00

Import some articles from my previous website

This commit is contained in:
Holger Just 2015-12-10 19:33:21 +01:00
parent 5bee24aab5
commit ec83cb4ad9
20 changed files with 299 additions and 0 deletions

View File

@ -0,0 +1,25 @@
---
title: Warum man ein Boot braucht
date: 2006-08-08 19:45:24 UTC
lang: :de
tags: Life
cover: 2006/warum-man-ein-boot-braucht/cover.jpg
cover_license: 'Cover Image ["Schwielowsee"](https://flic.kr/p/ytYsxH) by [NWY69](https://www.flickr.com/photos/95657922@N03/), [CC BY-ND 2.0](https://creativecommons.org/licenses/by-nd/2.0/)'
layout: post
---
Ich hab ja jetzt <del>Ferien</del> vorlesungsfreie Zeit. Da kann man auch mal mitten in der Woche auf Wasser. Und was soll ich sagen. Es war sehr entspannend.
READMORE
[![Einfach mal nix tun](2006/warum-man-ein-boot-braucht/feet.jpg)](http://www.flickr.com/photos/meine-erde/210300298/)
Die ganze Zeit (also 4 Stunden lang) ist dabei eine Ente immer im Kreis um das Boot rum geschwommen und hat sich dabei sehr für mich interessiert. Fand ich schon merkwürdig, vor allem, weil sie (oder vielmehr er) keinen Ring hatte.
[![Eine Ente im Wasser](2006/warum-man-ein-boot-braucht/duck_1.jpg)](http://www.flickr.com/photos/meine-erde/210300296/)
[![Das Vieh hat die die ganze Zeit auf mein Telefon gestarrt](2006/warum-man-ein-boot-braucht/duck_2.jpg)](http://www.flickr.com/photos/meine-erde/210300297/)
Also dann langsam die Sonne hinter den Bäumen verschwand wurde es dann doch ein wenig kalt. Die heißen Tage hab ich ja [verpasst](/2006/07/sommer-sonne-sonnenschein). Also ab nach Hause. Mit einem wunderschönen Sonnenuntergang im Rücken.
[![Sonnenuntergang am Schwielowsee](2006/warum-man-ein-boot-braucht/sunset.jpg)](http://www.flickr.com/photos/meine-erde/210300299/)

View File

@ -0,0 +1,58 @@
---
title: Chili con Carne
date: 2009-10-01 16:16 UTC
lang: :de
tags: Life
cover: 2009/chili-con-carne/cover.jpg
cover_license: '[Cover Image](https://unsplash.com/photos/VJnEbeFE--U) by [Heijo Reinl](https://unsplash.com/heijoreinl), [CC Zero 1.0](https://unsplash.com/license)'
layout: post
---
Angesichts des sehr pünktlich angebrochenen Oktobers und der damit verbundenen Kälte wird es wieder Zeit für Wärme von innen. Und was ist dafür besser geeignet als ein ordentliches Chili?
Richtig: nix. Und genau deswegen habe ich mir grade eins gekocht. Puristen mögen die Länge der Zutatenliste oder die Existenz von Bohnen bemängeln. Die Vielzahl sich ergänzender Geschmacksrichtigungen und das unglaubliche Umami-Aroma von Fleisch, Tomaten und Chilies sind es aber absolut wert sind, als Banause bezeichnet zu werden.
READMORE
## Zutaten
Für 4 Personen mit großem Hunger oder 2 Personen mit nochwas übrig für Morgen:
* 1 kg Rinderhack, am besten frisch vom Fleischer
* 500 ml Rinderbrühe
* 2 EL Tomatenmark
* 2-3 rote Zwiebeln
* 2 Knoblauchzehen
* 2 Dosen Tomaten (je 400g), stückig gehackt
* 2 Dosen rote Kidneybohnen (je 420g)
* 2-5 frische Chilischoten (z.B. Jalapeño oder Habanero je nach Zielschärfe)
* 1 mittlelgroße Karotte
* 1-2 Spitzpaprika
* etwas Cayennepfeffer
* etwas geräuchertes Paprikapulver
* 1/2 TL gemahlener Kreuzkümmel (Cumin)
* 1 Bund Oregano
* ein kleines dunkles Bier
* 1-2 EL Honig
### Zum Anrichten
* Crème fraîche oder Schmand
* etwas Gartenkresse
* ein frisches kräftiges Brot, ich mag [das Wilde](http://www.das-biobackhaus.de/sortiment_wildes.html) vom BioBackHaus.
## Zubereitung
Das Hackfleisch in einer Pfanne mit etwas Pflanzenöl gut durch braten. Währenddessen in einem großen Topf die Rinderbrühe und die Dosentomaten aufkochen, dabei etwa 2 Esslöffel Brühe zurückbehalten. Sobald das Fleisch durchgebraten ist und braun wird, alles in den Topf mit den Tomaten geben. Die Pfanne nicht abspülen.
Die Karotte, Spitzpaprika, und Zwiebeln in mittelgroße Würfel, den Knoblauch in kleine Stücke hacken. Der Knoblauch schmeckt besser und riecht nicht so stark, wenn er gehackt und nicht gepresst wird und wenn ggf. der innere grüne Keim entfernt wird, das riecht am meisten. Die Chilis in grobe Stücken hacken. Wer es nicht so scharf mag, kann die Kerne und die weißen Scheidewände entfernen, dort ist das meiste [Capsaicin](https://de.wikipedia.org/wiki/Capsaicin) enthalten.
Das Gemüse in die Pfanne geben, in der gerade das Fleisch war und mit etwas Öl anbraten bis es glasig wird. Zuerst mit der Karotte beginnen, dann Parika, Zwiebeln, Knoblauch und schließlich die Chilis zugeben, sodass alles gleichmäßig knackig angebraten wird. Schließlich das Tomatenmark sowie den Rest Brüe dazu geben. Kurz weiterbraten und dann zu den anderen Zutaten in den Topf geben.
Jetzt mit Kreuzkümmel, Cayennepfeffer, ein wenig geräuchertem Parikapulver sowie großzügig Pfeffer und Salz würzen. Jetzt auch das dunkle Bier ins Chili geben. Das Malz gibt einen wunderbar kräftigen, runden Geschmack. Anschließend das Chili mindestens 1 Stunde bei schwacher Hitze zugedeckt köcheln lassen, dabei ab und zu umrühren. Hier noch nicht *zu* stark würzen, da sich der Geschmack durch das Kochen noch verändert und wesentlich runder wird.
Währenddessen die Kidneybohnen abtropfen und ggf. den Saft abspülen. Nach einer Stunde kochen zu lange gibt es nicht die Bohnen dazugeben und nocheinmal ca. 15 Minuten kochen lassen. So fallen sie nicht auseinander. Jetzt den Oregano hacken und mit etwas Hinig zum Chili geben und kräftig umrühren. Am Ende noch mit Salz und Pfeffer abschmecken und nachziehen lassen, aber nicht mehr groß kochen lassen.
## Servieren
Angerichtet wird das Chili in einfachen Schüsseln mit etwas kräftigem Gouda, Crème fraîche und ein wenig Gartenkresse. Dazu ein paar Tortial-Chips, etwas kräftiges Brot und ein kühles Bier, am besten das gleiche, was bereits im Chili ist.

View File

@ -0,0 +1,82 @@
---
title: Cross-browser CSS gradient
date: 2010-07-26 9:22 UTC
lang: :en
tags: Technology
cover: 2010/cross-browser-css-gradient/cover.jpg
cover_license: '[Cover Image](https://unsplash.com/photos/DSwBHyWKiVw) by [Manuela Schwendener](https://unsplash.com/manuschwendener), [CC Zero 1.0](https://unsplash.com/license)'
layout: post
---
Recently, I released a new version of the Redmine [Checkout plugin](https://github.com/meineerde/redmine_checkout). This release sports a nifty protocol selector with buttons styled entirely in CSS (as good as it gets). To be able to support as many browsers as possibly while not having to fall back to pixel graphics I had to apply some tricks which I want to describe here.
READMORE
<span class="left"><%= markdown "![Button with gradient](2010/cross-browser-css-gradient/button_gradient.png)" %></span>
The buttons take most of their appearance from a background gradient with a light color at the top and a darker color at the bottom. This gives them some kind of three-dimensional effect compared to the plain-colored background. We are going to style the unselected button on the right. The left selected button is styled equivalent with just some different colors.
An unselected standard button is styled as follows:
```css
ul#checkout_protocols li a {
background-color: #eee;
background: url(button.svg) 0 0 no-repeat; /* Opera needs an "image" :( - using svg for this so it will scale properly without looking too ugly */
background: -khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#ddd)); /* Konqueror */
background: -webkit-gradient(linear, left top, left bottom, from(#f8f8f8), to(#ddd)); /* Webkit (Chrome, Safari, ...) */
background: -moz-linear-gradient(top, #f8f8f8, #ddd); /* Gecko (Firefox, ...) */
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#dddddd'); /* IE 5.5 - 7 */
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#dddddd'); /* IE 8 */
position: relative;
}
```
As you can see, there are a multitude of rules which each target a specific browser. This is required as there is no standard defined on gradients yet. However every major browser supports a technique for this just in its own syntax.
The first rule on line 2 (and also line 3 as seen later) works as a default here. It is used in browsers which do not support one of the following rules. It forces a background color which does not look too bad and at least keeps the GUI element usable. Lines 38 each target a specific browser family to use a gradient instead of the simple background.
## KHTML (Konqueror) and Webkit (Chrome, Safari, ...)
Let's start with line 4 and 5. These rules target KHTML browsers (like Konqueror) and the similar Webkit browsers (Chrome, Safari, ...) respectively. The rules are structured as follows (more information can be found in the [Safari documentation](http://developer.apple.com/safari/library/documentation/internetweb/conceptual/safarivisualeffectsprogguide/Gradients/Gradients.html)).
* `linear` — The gradient type. Can be one of _linear_ or _radial_
* `left top` — The starting point of the gradient. This is a X-Y coordinate.
* `left bottom` — The end point of the gradient. This is a X-Y coordinate.
* `from(#f8f8f8)` — The start color.
* `to(#ddd)` — The end color.
## Gecko (Firefox, Mozilla, ...)
Line 6 targets Gecko-based browsers like Firefox, Thunderbird or Mozilla. These define the gradient type inside the actual rule name. So `-moz-linear-gradient` defines, well, a linear gradient while `-moz-radiant-gradient` defines a radiant gradient. We obviously use `-moz-linear-gradient` here.
* `top` — Starting point of the gradient.
* `#f8f8f8` — Start color.
* `#ddd` — End color.
## Internet Explorer
Line 79 focus on Internet Explorer. Here we use filters which are very old IE-only features, originally invented to allow DHTML animations. They are rather slow and show strange behavior sometimes, but it the only way to get gradients to IE. On the other hand, these even work on IE 5.5. The HTML element must have [layout](http://www.satzansatz.de/cssd/onhavinglayout.html). So we use `position: relative` in line 9. If you omit this, it is showing some really strange renderings. The parameters of the filters should be rather self-explaining. As the filter syntax has slightly changed from IE7 to IE8 we include both variants here. Additional documentation is available from [Microsoft](http://msdn.microsoft.com/en-us/library/ms532997%28VS.85%29.aspx).
## Opera
And finally there is Opera. This browser is targeted in line 3. Unfortunately Opera does not support the concept of a gradient out of the box, so we have to develop a fallback here. Fortunately though, it supports [SVG](http://en.wikipedia.org/wiki/Scalable_Vector_Graphics) which allows us to define the gradient in an XML format to still benefit from the vector definition and not having to fallback to a pixel representation. As this is a fallback, it must be defined atop of the other rules which then overwrite this rule if one them is supported. If the SVG rule was put at the bottom, it would have a higher priority and all browsers would attempt to use it.
This technique, however, allows us to even target browsers which do not match one of the explicitly supported browsers but do support SVG.
The referenced SVG is rather simple:
```xml
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradient" x1="100%" y1="100%">
<stop offset="0%" style="stop-color:#ddd; stop-opacity:1" />
<stop offset="100%" style="stop-color:#f8f8f8; stop-opacity:1" />
</linearGradient>
</defs>
<rect width="100%" height="100%" style="fill:url(#gradient)"/>
</svg>
```
Note that the start color is defined on `offset="100%"` and the end color on `offset="0%"`.

View File

@ -0,0 +1,94 @@
---
title: How to compile Postfix + SASL + LDAP on Opensolaris
date: 2010-06-14 18:44 UTC
lang: :en
tags: Technology
cover: 2010/howto-compile-postfix-sasl-ldap-opensolaris/cover.jpg
cover_license: 'Cover Image ["Mailbox"](https://flic.kr/p/vgjt7U) by [Bob M ~](https://www.flickr.com/photos/12463666@N03/), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/)'
layout: post
---
Currently, Opensolaris does [not provide](http://defect.opensolaris.org/bz/show_bug.cgi?id=6067) a Postfix package. Although there exist packages on [blastwave](http://www.blastwave.org/jir/pkgcontents.ftd?software=postfix&style=brief&state=5&arch=i386) and on [OpenCSW](http://www.opencsw.org/packages/CSWpostfix/) they are either outdated or do not play well together.
Fortunately, [Ihsan Dogan](http://ihsan.dogan.ch) did create a [script](http://ihsan.dogan.ch/postfix/) to create Postfix packages from scratch as well as some precompiled packages. Unfortunately, these packages miss SASL support. So I was in need to compile these myself.
READMORE
You will obviously need the Postfix sources and the package script:
```bash
wget http://de.postfix.org/ftpmirror/official/postfix-2.7.1.tar.gz
gunzip -c postfix-2.7.1.tar.gz | tar -xf -
wget http://ihsan.dogan.ch/postfix/downloads/makePostfixPkg.sh
chmod +x makePostfixPkg.sh
cd postfix-2.7.1
```
Since Opensolaris b130, NIS+ was removed from the system. As Postfix does not know that, it will not compile as it defines a dependency to it. However, this can be disabled by simply applying the following patch:
```diff
--- src/util/sys_defs.h 2010-06-02 01:56:57.000000000 +0200
+++ src/util/sys_defs.h 2010-06-14 22:08:35.596113543 +0200
@@ -400,7 +400,6 @@
#define DEF_DB_TYPE "dbm"
#define ALIAS_DB_MAP "dbm:/etc/mail/aliases"
#define HAS_NIS
-#define HAS_NISPLUS
#define USE_SYS_SOCKIO_H /* Solaris 2.5, changed sys/ioctl.h */
#define GETTIMEOFDAY(t) gettimeofday(t)
#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb"
```
Just put that patch into a file called `nisplus.patch` and patch the code:
```bash
patch -p0 < nisplus.patch
```
*(found on [estibi's Solaris blog](http://estseg.blogspot.com/2010/03/postfix-w-opensolaris-nis.html))*
Before actually compiling Postfix, we need some packages:
```bash
# First install the sunstudio compilers and some additional
# development tools
pkg install sunstudio12u1 object-file
# ...and some additional libraries and tools
pkg install libsasl pcre
```
Now we can generate the script compile and generate the SRV4 package. We will tell the compilers to include the default Cyrus SASL library for client authentication as well as the Dovecot library which I will use later to connect both servers and authenticate SMTP users.
```bash
# Clean up first and after failed attempts
make tidy
# Generate the makefile
make makefiles CCARGS='-DUSE_TLS -DHAS_LDAP \
-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" \
-DUSE_CYRUS_SASL -I/usr/include/sasl'
AUXLIBS="-L/usr/lib -lsasl -lssl -lcrypto -lldap"
CC=/opt/sunstudio12.1/bin/cc
# Build
make
# Create the package if the build succeeded
../makePostfixPkg.sh
```
The `makePostfixPkg.sh` script will create a Solaris package named something like `CNDpostfix-2.7.1,REV=100614-SunOS5.11-i386.pkg` inside the Postfix directory. This package can then be installed like this:
```bash
# make sure you removed the default Sendmail package first if it installed
pkg uninstall sendmail
# install the package
pkgadd -d CNDpostfix-2.7.1,REV=100614-SunOS5.11-i386.pkg CNDpostfix
# Configure the package to your needs. Then enable the service
svcadm enable svc:/network/postfix:default
```

View File

@ -0,0 +1,40 @@
---
title: 30 Minute Timeout
date: 2011-02-01
lang: :en
tags: Life
cover: 2011/30-minute-timeout/cover.jpg
cover_license: 'Cover Image ["Griebnitzsee"](https://flic.kr/p/4gdP8C) by [Caspar Hübinger](https://www.flickr.com/photos/casparhuebinger/), [CC BY-NC-SA 2.0](https://creativecommons.org/licenses/by-nc-sa/2.0/)'
layout: post
---
After sitting days after days behind my laptop without much change of environment at all and starting to get really tired I thought I might go out, face the cold, and grab a nose-full of fresh air, taking the camera for a walk.
READMORE
![A pair of mandarin ducks](2011/30-minute-timeout/mandarin-ducks.jpg)
Aiming for the Griebnitzsee just around the corner I immediately spotted a lovely pair of mandarin ducks slowly swimming along the river bank. I guess I annoyed them a bit, tying to snap a good photo, but at least they didn't escape in a hurry.
<% figure "Griebnitzsee in winter", class: 'left' do %>
![Griebnitzsee in winter](2011/30-minute-timeout/winterlake.jpg)
<% end %>
I mean, nobody is to be expected to be in hurry during this kind of weather. Afternoon is in full swing, the sun starting to drown in its own misery. All together it creates that special melancholic mood you only get during those painfully slow winter days.
How awesome would it be just to sit down in front of a huge fireplace, wrapping oneself into a nice and cozy blanket, having a nice cup of coffee, and watching the world sleeping outside through a window? Without having to worry about anything but when nature might wake up again, starting a new year full of fun, sunshine, and happy people.
<div class="clearfix"></div>
<% figure "The Giant Red Frog Of Awesomeness", class: 'right' do %>
![The Giant Red Frog Of Awesomeness](2011/30-minute-timeout/red-frog.jpg)
<% end %>
And then, all of a sudden, a huge frog appears. Not just any frog but The Giant Red Frog Of Awesomeness having its well-deserved hibernation. But be aware once he awakes. Then he's going out to find <del>Mozilla</del> Godzilla to have a last epic fight about who's going to conquer the world. Then, after he won, he's going to swim to the next beach to entertain the kids. As he is truly an awesome frog.
<div class="clearfix"></div>
But first we have to wait for the sun to come up again. To haunt the ice and the cold and the strange thoughts. Then I might even start to enjoy the sunsets at our local mooring again.
![A rail with very shallow depth-of-field at Griebnitzsee](2011/30-minute-timeout/rail.jpg)

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB