il linguaggio Lua: parte 2

segue dalla prima parte Moonwalking: Tipi di dato Nello scorsa puntata abbiamo utilizzato due degli otto tipi disponibili: i numeri e le stringhe. Per semplicita’, Lua non distingue tra interi e floating point: tutti i valori numerici sono conservati come double, cioe’ in virgola mobile a doppia precisione. Nel caso la CPU non disponesse di unita’ FPU, è possibile cambiare una riga nel sorgente (per l’esattezza, #define LUA_NUMBER in lua.h) e ricompilare; questo si fa tipicamente nei sistemi embedded con processori a basse prestazioni. Le stringhe posso essere delimitate da apici singoli o doppi, nel qual caso vengono espanse le usuali sequenze di escape come \b e \n; usando invece i delimitatori [[ ]], possiamo scrivere stringhe su piu’ righe e disattivare l’interpolazione. Vediamo un paio di esempi, sfruttando l’opzione -e per eseguire codice da riga di comando: ...

May 24, 2016 · Andrea Manzini

how to automatically expire mysql records after a fixed amount of time

the issue we have a database table containing usernames and passwords, but we want to make them temporary like expiring after a fixed number of days from the creation. This is typical usage for a wi-fi captive portal with RADIUS authentication backed on mysql. the idea we store a new field in the table with the timestamp, and run a periodic “cleaner” job that deletes record older than X days. ...

May 5, 2016 · Andrea Manzini

il linguaggio Lua: prima parte

introduzione Ho sempre avuto un debole per il software leggero e snello: sara’ un retaggio di quando la memoria si misurava in Kb e lo storage era basato su… audiocassette! Lua e’ un linguaggio che incarna questa filosofia: occupa circa un centinaio di kbyte (meno di molte pagine web), ha una stupefacente rapidita’ di esecuzione, una sintassi chiara e, come bonus, gira su qualsiasi CPU per cui sia disponibile un compilatore C. ...

April 13, 2016 · Andrea Manzini

monit helper for quota monitoring in go

I want to keep under control a system where each user has an amount of filesystem quota reserved; in particular I would like to get notified if and when a user exceeds some treshold. Since I already have Monit in place in the server, I took the chance to write a small Go utility in order to retrieve the quota percentage. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 // quotachecker.go package main import ( "os" "os/exec" "regexp" "strconv" "strings" ) func main() { //a fake implementation, just for testing purpose //cmd := exec.Command("/bin/sh", "-c", "cat fakequota.txt") cmd := exec.Command("/usr/bin/repquota", "-a") stdout, err := cmd.Output() if err != nil { panic(err.Error()) } re, err := regexp.Compile("^[[:alnum:]]+\\s+--\\s+\\d+\\s+\\d+") if err != nil { panic(err.Error()) } percent_max := 0 result := strings.Split(string(stdout), "\n") for _, line := range result { match := re.MatchString(line) if !match { continue } fields := strings.Fields(line) spaceused, err := strconv.ParseInt(fields[2], 10, 64) if err != nil { panic(err.Error()) } spacetotal, err := strconv.ParseInt(fields[4], 10, 64) if err != nil { panic(err.Error()) } if spacetotal == 0 { continue } //calculate max percent used percent := int(100 * spaceused / spacetotal) if percent > percent_max { percent_max = int(percent) } } os.Exit(percent_max) } This is also an example on how to run external programs in Go and filter the output using regular expressions. ...

March 30, 2016 · Andrea Manzini