Skyz Updates (Nieuwe UI en Bliksemradar)

Ik heb de Skyz App geüpdatet, de grootste verandering zijn is de nieuwe interface. De interface is een pak moderner en prettiger. De neerslagradar is geïntrigeerd op de homepagina en bevat nu ook een nowcast voor het komende anderhalf uur.

Een nieuwe feature is de bliksemradar, op deze kaart kan je live alle blikseminslagen volgen.

Je kan nu ook een account aanmaken om triggers te beheren. Triggers zijn gepersonaliseerde meldingen die je kan ontvangen als bepaalde grenswaarden worden overschreden.

Er komen nog een tal van updates, zoals optie voor anderen met een PWS om hun data te delen en zelf eenvoudig een site te maken voor hun weerstation

Bekijk de nieuwe versie van Skyz

Skyz android App

Update 2025-05: De android app is helaas niet meer beschikbaar. Het was te veel werk om deze te blijven onderhouden. Skyz is wel nog altijd een PWA.

Ik heb een app gemaakt van skyz:

Download op google play

 

Caching met apache’s mod_cache

Caching is bij drukbezochte sites een must. Het verminderd de load op de webserver door de gegenereerde pagina’s op te slaan. Hierdoor word de database minder belast bij dynamische websites waardoor de webserver meer tijd heeft voor andere bezoekers.

Apache heeft een module, `mod_cache` die door middel van een paar opslagmechanismen (disk, shared memory, redis, memcached of zelf een DBM file) een snelle cache voorziet voor Apache. mod_cache is standaard als 1e laag in de processing stack, maar dit kan aangepast worden.

Eenvoudige configuratie

In de documentatie staat een voorbeeld van een eenvoudige configuratie. Als we deze
lichtjes aanpassen voor onze omgeving (in dit geval gaan we `/var/cache/httpd` gebruiken om de cache op te slaan, je moet deze map standaard zelf nog aanmaken).

<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheRoot "/var/cache/httpd"
CacheEnable disk "/"
CacheDirLevels 2
CacheDirLength 2
CacheLock on
CacheLockMaxAge 5
CacheIgnoreHeaders Vary DNT User-Agent Accept Accept-Encoding Accept-Language
</IfModule>
</IfModule>

Hierna moeten we zorgen dat mod_cache en mod_cach_disk zijn ingeladen met `a2enmod mod_cache mod_cache_disk`.

Vervolgens moet onze applicatie `Cache-control:` headers meegeven. Deze worden gebruikt om te vertellen hoe lang een pagina mag gecached worden. Afhankelijk van het soort pagina, en de updatefrequentie stel je deze in. Een blog waar vaak updates worden gepost is `300` seconden bijvoorbeeld een goed begin. Vaste pagina’s op die blog die zelden veranderen (zoals de ‘about’ pagina) kunnen dan weer een langere tijd krijgen, zoals `3600` seconden of zelfs `86400` seconden (1 dag).

Met apache komt standaard ook htcacheclean, een tool om de disk cache op te schonen. Deze tool kan je als daemon of als cronjob pereodiek uitvoeren om de groote van de cache map te beperken. Het onderstaande commando zal zorgen dat er maximaal 1GB aan data cachen, of 50000 inodes in gebruik nemen.

htcacheclean -p /var/cache/httpd -l1G -L50000 -n -t

 

Linux processen beperken in CPU gebruik

Nice

Met nice kan een process een prioriteit toegekend worden. Prioriteiten zijn een manier om de scheduler te vertellen welke processen voorang krijgen op minder belangerijke processen. Dit kan met renice ook op een process dat al draait. Nice waarden gaan van -20 (hoogste) tot 19 (laagste). Standaard is deze waarde 0.

Het gebruik van nice is zeer eenvoudig, je plaatst nice -n <prioriteit> voor het commando dat je wenst uit te voeren, bijvoorbeeld nice -n 19 tar -zcf /var/backups/home.tgz /home/.

De scheduler zal processen met een hoge nice waarde (dus lage prioriteit) minder cpu tijd geven dan processen met een hogere prioriteit. Heel handig voor bijvoorbeeld zware backup processen.

Default nice voor een linux gebruiker

De standaard nice waarde voor een linux gebruiker is 0. Dit kan echter aangepast worden in /etc/security/limits.conf door de priority parameter in te stellen voor een bepaalde gebruiker/groep. Bijvoorbeeld:

gebruiker   hard    priority    10

Cpulimit

cpulimit is een programma dat met behulp van SIGSTOP en SIGCONT signalen het gemiddelde cpu-percentage van een process beperkt tot een gegeven percentage. Dit commando werkt net zoals nice door het te plaatsen vlak voor het commando dat je wilt uitvoeren:

cpulimit -l 50 tar -zcf /var/backups/home.tgz /home/

Het voorbeeld hierboven zou de backup van de /home/ directory beperken tot 50% cpu snelheid.

Indien een process subprocessen spawned, is het belangerijk om aan cpulimit ook de -m parameter mee te geven.

Spamassassin regels maken

Waar voeg je spamassassin regels toe

Je kan spamassassin op verschillende plaatsen toevoegen, je kan het toevoegen aan de globale configuratie (`/etc/mail/spamassassin/local.cf`) of aan de user-configuratie, indien ingeschakeld. (`~/.spamassassin/user_prefs`).

Standaard staat het toevoegen van regels in de user-configuratie standaard uit als spamassassin draait als spamd. Dit is uit veiligheids en performance overwegingen. Spamassassin moet in dat geval namelijk de regels telkens compileren bij elke mail, wat niet het geval is bij de globale configuratie.

De keuze waar je je regels toevoegd licht uiteraard bij jou.

Regels schrijven

Om te voorkomen dat regels overlappen met bestaande regels, word aangeraden om ze een prefix te geven. bijvoorbeeld `LOCAL_` of je initialen `VL_`.

Body regels

Om in de tekst van een mail op een bepaald woord te filteren kan je een regel zoals hieronder aanmaken. Deze regel filters op “test”, maar ook op “testpersoon”.

Spamassassin maakt gebruikt van reguliere expressies, met name die van perl.

`BODY_BEVAT_TEST` is hier de naam van de test.

body BODY_BEVAT_TEST /test/
score BODY_BEVAT_TEST 0.1
describe BODY_BEVAT_TEST dit is een test regel

De `score` regel, bepaald welke score word toegevoegd als een mail met deze regel matched. Dit kan altijd in user_prefs per-user worden aangepast.
de `describe`regel bevat wat extra info over de regel.

Wil je enkel op “test” filteren maar niet op “testpersoon”, dan kan je een het woord omringen met `\b`

body BODY_BEVAT_TEST /\btest\b/
score BODY_BEVAT_TEST 0.1
describe BODY_BEVAT_TEST dit is een test regel

we kunnen dit ook nog case-insensitive maken door `i` achter de reguliere expressie te hangen. (`body BODY_BEVAT_TEST /\btest\b/i`)

Header regels

Om te filteren op het onderwerp, de verzender of andere headers kunnen header regels gebruikt worden. Deze werken net zoals body regels met reguliere expressies. Om bijvoorbeeld een test te maken die het onderwerp controleerd op “test” kunnen we een regel als volgt aanmaken

header SUBJECT_BEVAT_TEST Subject =~ /\btest\b/i
score SUBJECT_BEVAT_TEST 0.1
describe SUBJECT_BEVAT_TEST deze mail bevat test in het onderwerp

De gespecifieerde header (in dit voorbeeld `Subject`) is altijd case-insentitive.

Meta regels

Meta regels zijn heel handig om complexere regels te maken. Deze laten toe om meerdere tests te combineren en de score aan te passen aan bijvoorbeeld het aantal keer dat de regel matched tegen een mail.

body __BEVAT_TEST1 /\btest1\b/i
body __BEVAT_TEST2 /\btest2\b/i
body __BEVAT_TEST3 /\btest3\b/i
meta BEVAT_TEST1_TEST2_TEST3 ((__BEVAT_TEST1 + __BEVAT_TEST2 + __BEVAT_TEST3)>1)
score BEVAT_TEST1_TEST2_TEST3 0.3

Dit voorbeeld voegt 0.3 score toe als de mail zowel de strings “test1”, “test2” en “test3” tegelijk bevat.

Regels testen

Na het schrijven van regels laat je spamassassin beter de configuratie eens linten. dit kan je doen met `spamassassin –lint`.

Site automatisch deployen met git hooks

Om een repository automatisch te deployen kan je de volgende git hook toevoegen aan de git repository.
Deze hook voeg je toe aan een bare repo. Deze maak je aan met `git init –bare ~/git-repo.git`. Hierna plaats je de volgende code in het bestand `~/git-repo.git/hooks/post-receive`.

#!/bin/bash
TARGET="/home/user/target-dir"
GIT_DIR="/home/user/git-repo.git"
BRANCH="master"

while read oldrev newrev ref
do
	# only checking out the master (or whatever branch you would like to deploy)
	if [ "$ref" = "refs/heads/$BRANCH" ];
	then
		echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
		git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
	else
		echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
	fi
done

Daarna moet je het bestand gewoon nog uitvoerbaar maken (`chmod -x ~/git-repo.git/hooks/post-recieve`) en naar de repository pushen (bijvoorbeeld over ssh als deze op een remote host staat)

Locatie en Airport API

Ik heb 2 api’s gemaakt omdat ik zelf snel de data nodig had: een API voor een stadsnaam om te zetten in coordinaten, en een API om luchthavens op te zoeken:

Airport API

op https://airport-api.lamdev.be kan je de documentatie raadplegen

Locatie API

het gebruik van de locatie API is heel eenvoudig:

```
$ curl https://location-api.lamdev.be/brussel
{"status":200,"error":"","naam":"Brussel","lat":50.83,"lon":4.33}
```

deze geeft de lat en lon terug.

MySQL Ram gebruik verminderen

Ik merk vaak dat de MySQL server wel eens veel ram gebruikt op mijn webserver (die maar 1GB ram heeft). Een oplossing hiervoor is om `performance_schema = off` toe te voegen aan de mysql configuratie (/etc/mysql/my.cnf) onder het blokje `[mysqld]`

# ...
[mysqld]
# ... 
performance_schema = off # <-- Toevoegen aan configuratie onder [mysqld]
# ...