Making Apache return the same page for all URLs

I am currently developing and maintaining a web application running on Apache. In this context I have sometimes needed to take the site down in order to roll out new versions of the underlying software. Instead of taking down the web server entirely and having the users get error messages from their browsers, I naturally want to present a “Down for maintenance” page.

Doing this for the root URL of the application was a simple matter of making a new configuration file, with the same ServerName parameter, in the sites-available directory. This new configuration file points at a DocumentRoot containing a single index.html containing the wanted message.

However, trouble struck when trying to access anything but the root URL. I tried redirecting all requests to the root URL with AliasMatch and RedirectMatch but kept making redirect loops. My attempts at googling for a solution kept pointing me at these two directives and mod_rewrite, from which I expected the same trouble.

After browsing the Apache documentation I stumbled upon the ErrorDocument directive, which allows specifying what should be returned in case of errors. Adding this line to my “site down” configuration made everything work:

ErrorDocument 404 /

Because the site only contains the single index.html accessing anything else will result in 404 error, which the ErrorDocument directive specifies should result in the root of the site being returned.

This is probably well known stuff for most Apache administrators, but given the trouble I had finding it, I thought it might help other newcomers to post about it.

Emacs, inserting text from the line above

Some time ago colleague using VIM showed me a nice feature in his editor. With a keystroke he could copy the character right above the cursor and move the cursor forward, thus copying the line above character by character. Not a feature one would use all the time, but nice when having to write something like this:

structWithLongName.subStruct.a = 7;
structWithLongName.subStruct.b = 9;
structWithLongName.subStruct.c = 13;

Naturally I wanted a similar feature in emacs, so I made the following:

(defun pal-get-char-above-or-below (delta)
  (save-excursion
    (let ( (orig-column (current-column)) )
      (forward-line delta)
      (forward-char orig-column)
      (if (eq orig-column (current-column))
          (buffer-substring (point) (+ 1 (point)))
        nil))))

(defun pal-insert-char-above-or-below (delta)
  (let ( (insertee (pal-get-char-above-or-below delta)) )
    (when (and insertee (not (equal insertee "\n")))
      (insert insertee))))

(defun pal-insert-char-above ()
  (interactive)
  (pal-insert-char-above-or-below -1))

(defun pal-insert-char-below ()
  (interactive)
  (pal-insert-char-above-or-below 1))

Now calling “pal-insert-char-above” will copy a character from the line above, and move the point forward. The “pal-insert-char-below” will do the same with a character from the line below.

Pirateri er jo risikabelt

Nu er det så kommet frem at de israelske mordere, der overfaldt et nødhjælpsskib på vej mod Gaza, selv blev angrebet af folkene ombord på skibet. Det skulle de efter sigende ikke have været forberedt på. Nogle af soldaterne er ligefrem kommet til skade.

Helt ærligt, hvad forventer man når man border et fremmed skib i internationalt farvand? Hvis Somaliske pirater møder modstand, er det vel heller ikke ok at de dræber folk fordi de er forbløffede over den uventede modstand.

Verdenssamfundet tage sig sammen og få forklaret Israel på en måde, som selv denne stat kan forstå, at de ikke kan opføre sig som de vil.

Søforklaringer fra politiet

Så er det danske politikorps endnu engang i færd med vanvittige bortforklaringer.

Stillet over for en massiv kritik af deres voldsomme magtanvendelse ved rydningen af Brorsons kirke reagerer de ved at offentliggøre en videofilm, der angiveligt skulle vise at det hele foregik ganske fredeligt.

Optagelsen har tydeligvis vakt glæde i visse kredse. For eksempel har Birthe Rønn Hornbech, Brian Mikkelsen og Pia Kjærsgaard offentligt kaldt præsten fra kirken for en løgner på baggrund af optagelsen. Ligesom Rune Kristensen, der er formand for Konservativ Ungdom, i dag havde et læserbrev i Politiken hvor han opfordrede “præsten, Kirkeasyl og de politikere der kom med en lidt for hurtig kritik [af politiet]” til at mande sig op og sige undskyld til politiet.

Desværre viste filmen ikke hvad der foregik uden for kirken og i bussen, som asylsøgerne blev fragtet væk i. En hel del af kritikken mod politiet har ellers drejet sig om de situationer. Forklaringen på dette er i følge chefpolitiinspektør Per Larsen, at en betjent kom til at ødelægge kameraet med et knippelslag, og man derfor ikke kunne fortsætte optagelserne.

Man skal ikke være udstyret med særlig meget kritisk sans, for hurtigt at få den tanke at det var enormt belejligt for politiet. Der gik heller ikke mange timer, før man kunne læse, at der findes amatøroptagelser af en betjent i gang med at filme situationen uden for kirken. Så politiet på stedet havde altså stadig adgang til et kamera.

Det bliver spændende at høre hvilken forklaring man finder på hos politiet denne gang. Det lyder som om de lige skal sunde sig lidt, for som Per Larsen formulerer det: “der kører for mange historier nu”.

Det er nok desværre uundgåeligt at betjente fra tid til anden overtræder deres beføjelser, og for eksempel anvender unødig vold. I disse situationer er det tvingende nødvendigt at man erkender hvad der er sket, og man tager konsekvensen af det. I stedet dækker man over sine kolleger, og kommer med mere eller mindre fantasifulde historier om hvad der er foregået. Konsekvensen er at hele politikorpset, kommer til at ligne en bande voldelige ballademagere, fordi en (forhåbentlig lille) gruppe ikke kan styre sig.

Kafferistning, 4. forsøg

Dagen efter 3. forsøg, altså den 19. august, besluttede mig for at sænke temperaturen og lade mængden af bønner være. Temperaturen kom ned på 225˚C og de 70 gram bønner blev lagt i tærtefadet igen. Der skete følgende:

  • 6 minutter 30 sekunder: Bønnerne begyndte så småt at blive lysebrune eller gule.
  • 9 minutter: Ingen gule nuancer længere, men pæne lysebrune bønner. Ingen knæk endnu.
  • 10 minutter 40 sekunder: Knækkene begyndte
  • 11minutter 40 sekunder: Her begyndte nogle af knækkene at lyde ganske voldsomme. De gav også nogle ordentlige hop.
  • 12 minutter: Bønnerne havde nu fået en mørkere farve end sidst jeg ristede ved 225˚C, det var dog stadig en lys farve.
  • 13 minutter 30 sekunder: Knækkene stoppede omkring dette tidspunkt
  • 14 minutter sekunder: Her begyndte der at komme nogle få knæk igen.
  • 14 minutter 40 sekunder:  Nu var der mange knæk.
  • 15 minutter 30 sekunder: Her stoppede jeg ristningen, da begyndte at se pænt mørke ud. Der var stadig mange knæk i gang.

Jeg bemærkede det ikke under selv ristningen, men da jeg kiggede på mine noter bagefter bemærkede jeg at der faktisk havde været to faser af knæk. Det kunne se ud som om det lykkedes mig at stoppe ristningen undervejs i 2. knæk.

Resultat blev en jævn ristning med en pæn mørk farve, næsten magen til sidst, måske en lille smule lysere. Bønnerne duftede langt mere end ved  sidste forsøg. Slutvægten var 60 gram så vægtabet var på 14%, altså det sædvanlige niveau.

Den færdige kaffe smagte rigtig godt. Den var mindre bitter end sidst og havde en masse spændende smagsnuancer. Jeg prøvede at brygge en kop på Risteriets ristning og smage den side om side med min egen. Konklusionen var at de lå utroligt tæt på hinanden.

En lære man må kunne drage af at sammenligne dette forsøg med mit 2. forsøg, er at man skal passe på med at lægge bønnerne for tæt i ovnen. Den eneste forskel på dette forsøg og det mislykkede 2. forsøg var at jeg holdt mig til 70 gram bønner i tærtefadet, mod de 110 gram i det fejlslagne forsøg.

Jeg besluttede at mine næste to mål var at:

  • Kunne gentage denne vellykkede ristning uden at skulle sidde og stirre på ovnen imens
  • Kunne riste større mængdere bønner og få samme gode resultat

Men det måtte blive senere, nu skulle denne ristning nydes!

Kafferistning, 3. forsøg

Resultatet af 2. forsøg var stærkt nedslående. Derfor skyndte jeg mig at gøre endnu et forsøg dagen efter, altså den 18. august.

Jeg var selvsagt meget opsat på ikke at gentage resultatet fra dagen før. Dette fik mig til at forbryde mig mod et af de grundlæggende principper for fejlfinding, som ellers er en af mine kæpheste, når det kommer til at finde fejl i software og elektronik, nemlig

Man skal altid kun ændre een ting af gangen

Når man ændrer flere ting samtidig, bliver det let meget uoverskueligt, hvilken ændring der havde hvilke konsekvenser. Alligevel valgte jeg altså at ændre på følgende to ting

  • Jeg satte temperaturen op til 235°C (hvor meget det så har betydet for den reelle temperatur i ovnen skal jeg ikke kunne sige)
  • Jeg nøjedes med at hælde 70 gram bønner op, og fik derved væsentligt længere mellem bønnerne

Igen tog jeg noter undervejs:

  • 5 minutter og 30 sekunder: De var blevet lidt gyldne og nogle få agner var røget af.
  • 6 minutter og 30 sekunder: På dette tidspunkt syntes jeg at jeg kunne høre nogen knæk, men var ikke helt sikker på om det bare var ovnen der gav sig.
  • 7 minutter og 10 sekunder: Her begyndte jeg at se bønner der hoppede.
  • 9 minutter og 10 sekunder: Ikke så mange hop mere
  • 10 minutter og 15 sekunder: Mange hoppende bønner igen
  • 11 minutter 20 sekunder: Her stoppede hoppene igen
  • 12 minutter 40 sekunder: Her begyndte de nok en gang at hoppe. De var efterhånden blevet temmelig mørke
  • 13 minutter 30 sekunder: Stadig nogen hoppende bønner
  • 14 minutter : Her tog jeg dem ud fordi jeg mente de var blevet rigeligt mørke.

Det var unægteligt et meget rodet billede af hvornår knækkene kom. Jeg oplevede på ingen måde at der kom to adskilte knæk, det var mere bare nogen perioder med knæk og nogen perioder uden.

Ristingen blev langt mere jævn end sidst. Bønnerne havde en pæn farve, der lå meget tæt på Risteriets ristning. Vægten efter ristning var 60g, så de havde smidt 14% af vægten, altså reelt samme vægttab som sidst.

De hele bønner duftede ikke af så meget, men de malede bønner havde en god kraftig duft.

Den færdige kaffe var meget bedre end sidst, men ikke helt god. Mange af de smagsnuancer, der findes i Risteriets ristning, kunne ikke genfindes her. Ydermere var smagen noget mere bitter end jeg kunne ønske.

Billederne her viser fadet før og efter ristningen.

Resultatet af forsøget var at jeg havde fået en væstenligt jævnere ristning, med meget mere smag end sidst. Til gengæld fik jeg også en for voldsom bitterhed. Det var temmelig overbevist om at den jævnere ristning skyldtes, at der var længere mellem bønnerne. Men jeg anede ikke om den bedre smag og mere korrekte farve skyldtes den mindre mængde, eller den øgede temperatur. Så jeg besluttede mig til at næste forsøg skulle være at sætte en af disse variable tilbage, så jeg kunne blive klogere på hvad der foregik.

Kafferistning, 2. forsøg

Efter mit første, ikke 100% vellykkede, forsøg på at riste kaffe i ovnen, besluttede jeg at gå systematisk frem og løbende notere hvad jeg foretog mig. Det følgende er en beskrivelse af mit 2. forsøg, som jeg gjorde 17. august.

Jeg hældte 110 gram bønner på det samme tærtefad, som jeg brugte første gang. Bønnerne kom til at ligge temmelig tæt. For at forsøge at undgå lugten af kul fra første forsøg, satte jeg temperaturen ned til 225°C. Jeg holdt øje med bønnerne og noterede hvad der skete med dem på hvilket tidspunkt:

  • 5 minutter: Ingen synlig udvikling.
  • 6 minutter og 30 sekunder: Det begyndte at dufte kaffeagtigt, men ingen tydelig farve.
  • 8 minutter og 30 sekunder: De begyndte at få en lille smule farve, og jeg begyndte at overveje om ikke temperaturen var blevet for lav denne gang.
  • 10 minutter: De havde efterhånden fået en pæn lysebrun farve, men jeg havde ikke set eller hørt nogen knæk endnu
  • 11 minutter og 30 sekunder Nogle af bønnerne havde hoppet, men der var ingen særlig lyd på knækket.
  • 13 minutter: Der var en helt del hoppende bønner også med nogen lyd på.
  • 14,5 minutter: Nu var der langt imellem knækkene
  • 15,5 minutter: Ingen knæk. Tog dem ud.

Slutvægten var 96 gram, så de havde smidt 13% af vægten. Ristningen var meget ujævn. Den ujævne ristning fik mig til at overveje om bønnerne havde ligget for tæt, sådan at nogen af dem var blevet dækket af de andre. De fleste af bønnerne var meget lyse i forhold til ristningen fra Risteriet, og i forhold til hvordan kaffebønner i det hele taget plejer at se ud. Til gengæld var der ingen lugt af kul. Her er et foto af det endelige resultat.

Resultat af 2. forsøg

Den færdige kaffe smagte, ved min normale dosering, af alt for lidt efter min smag. Den lille smule smag, der trods alt var tilstede, var dog ok.

Afgjort et ringere resultat end første forsøg.

Første forsøg på hjemmeristning af kaffe

Jeg har i nogen tid leget med tanken om at begynde at riste kaffe selv. For to uger siden gjorde jeg så noget ved det, og bestilte et kilo grønne bønner af typen “Pacamara Fancy SHG” fra El Salvador hos Risteriet. For at have noget at sammenligne med købte jeg samtidig et kilo ristede bønner af samme type.

Jeg ved ikke meget om at beskrive smage, men kan fortælle at kaffen af de ristede bønner, jeg købte, er rigtig god. Det er en meget kraftig smag med en meget lang og behagelig eftersmag.

Jeg tog desværre ikke noter fra mit første forsøg på at riste bønner selv, men nedenfor kommer det jeg kan huske. Ved mine efterfølgende forsøg med ristning tog jeg noter og lidt billeder undervejs, så når jeg skriver om dem kommer der flere detaljer på.

Jeg satte efter inspiration fra en artikel på Risteriets hjemmeside ovnen på 250°C. For ikke at kvaje mig med alt for mange bønner, hældte jeg bønnerne op på et tærtefad i stedet for at fylde en hel ovnplade med dem.

Min plan var at tage bønnerne ud i starten af 2. knæk (det med knækkene er beskrevet i førnævnte artikel). Som jeg husker det oplevede jeg ikke to adskilte knæk, men bemærkede da at der kom nogen knæk lyde og hoppende bønner. Jeg tog bønnerne ud efter et kvarters tid, da jeg mente at de havde fået nok.

Resultatet af denne behandling var bønner der var noget mørkere end i Risteriets ristning og nogen af dem så decideret forkullede ud. Helheden lugtede også en lille smule af kul. Det var med andre ord ikke for lovende.

Til trods for lugten af kul prøvede jeg at kværne bønnerne og brygge kaffe på dem. Det var en positiv overraskelse. Der var ingen smag af kul og kaffen smagte faktisk bedre end så meget andet kaffe. Den havde dog en noget voldsommere og mere bitter smag end jeg foretrækker. Der var lang vej til at ramme den gode smag fra de proffesionelt ristede bønner. Men det var mit første, så modet var bestemt intakt.

DhcpMessageTypei

Introduction

So – I have started a blog. I did so for a couple of reasons:

  • I have started roasting coffee myself. While experimenting with this, I have been taking notes, in order to be able to learn from my mistakes. I thought these notes might be interesting to others as well, and will place them in this blog.
  • From time to time I have wanted to write about some of the software development I am doing. A blog seems like an ideal place for stuff like this.
  • I want a place to vent frustrations about the doings of people from certain political parties.

Most of this blog will be in danish, except for this introduction and the entries about software development.