il linguaggio Lua: settima parte

segue dalla sesta parte Iteratori e lua funzionale Cos’è un iteratore? Informaticamente parlando, è un costrutto che ci permette di scorrere strutture dati come liste, array, elenchi. In pratica, dato un elemento della struttura il compito dell’iteratore è farci avere il prossimo su cui operare. Non ci stupirà apprendere che in Lua gli iteratori sono funzioni. Vediamo un semplice esempio: function reverse_iter(t) local i=#t+1 return function() i=i-1 if i>=0 then return t[i] end end end reverse_iter è una fabbrica (factory) di funzioni: ogni volta che la chiamiamo, ci crea una nuova closure, ossia l’iteratore specifico per l’array che gli passiamo. La funzione che otteniamo mantiene il suo stato grazie alle variabili i e t ; quando non ci sono più elementi, restituisce nil. L’iteratore si potrebbe usare così: ...

March 3, 2018 · Andrea Manzini

il linguaggio Lua: sesta parte

segue dalla quinta parte Quando il saggio indica la luna, lo sciocco guarda il dito Nello scorse puntate abbiamo appreso le basi di un linguaggio minimalista, il cui motto è “doing more with less”, che occupa meno byte della vostra foto su Facebook e che i benchmark dichiarano il più veloce tra i linguaggi di scripting. Nato da menti brasiliane, l’hanno chiamato Lua, che vuol dire Luna in portoghese. Lua viene usato come linguaggio di scripting in Angry Birds, World of Warcraft e decine di altri videogame e software: nello scorso post abbiamo visto come creare un semplice plugin per VLC. In questo invece approfondiremo le peculiarità del linguaggio e cominceremo a guardare oltre, presentando l’ecosistema di librerie; infine nel prossimo sperimenteremo l’integrazione tra Lua e C. ...

December 22, 2017 · Andrea Manzini

linux: how to access DHCP options from client

As you may know, you can configure any DHCP server to send many options to the clients; for example to setup dns domains, http proxy (WPAD) and so on. If you need to access these options from a linux client, you must configure the client to ASK the server for the new options, by editing /etc/dhcp/dhclient.conf, and add an entry like: option WPAD code 252 = string; also request WPAD; done that, when you’ll ask for a dhcp, the dhclient process will invoke your hook scripts with two new environment variables, old_WPAD and new_WPAD, with the values before and after the renewal. ...

November 6, 2017 · Andrea Manzini

il linguaggio Lua: quinta parte

segue dalla quarta parte “Sonata al chiaro di luna” : un plugin per vlc Come dicevamo all’inizio, Lua è usato da numerose applicazioni come linguaggio di estensione; per scopi didattici ho scelto di scrivere un semplice plugin per un programma diffuso, il media player universale VLC. Con questo plugin risolveremo per sempre l’annoso problema di decidere cosa sarebbe meglio sgranocchiare durante la visione! L’integrazione con lo scripting Lua è documentata in una serie di file README.TXT sparsi nella directory $SRC/share/lua/ (dove $SRC è la directory dove abbiamo decompresso l’archivio del sorgente di vlc). Grazie ad essi apprendiamo che VLC supporta diversi tipi di “agganci” (hooks) con Lua: per la generazione di playlist (ad esempio trasformare una playlist Youtube in una VLC), per le interfacce di controllo (a titolo di esempio, si può comandare VLC via telnet), per il recupero di meta-informazioni sullo stream (tipicamente scaricare e visualizzare la copertina dell’album o la locandina del film in riproduzione) e, finalmente, quella che useremo noi, cioè una generica funzionalità aggiuntiva attivabile e disattivabile da menù. Il file README specifica che questo tipo di estensione deve contenere due funzioni Lua di nome activate() e deactivate() che verranno chiamte in concomitanza con questi due eventi. Lo script deve avere anche una funzione descriptor() che VLC chiamerà allo startup ed avrà il compito di esporre una tabella con delle informazioni sul plugin come titolo, autore, versione. Ultimo vincolo, lo script deve risiedere in uno specifico path, ovvero $LIB/vlc/lua, dove $LIB è il percorso di libvlc (il “motore” del programma) a livello di sistema oppure $HOME/.local/share/vlc/lua, soluzione che permette ad ogni utente di usare i propri plugin; io ho pertanto copiato lo script seguente [vlc_cibo.lua] in ~/.local/share/vlc/lua/extensions/cibo.lua ...

October 16, 2017 · Andrea Manzini