Informatica e COVID-19

Comprensibilmente, il tema di questi giorni su /r/ItalyInformatica è stato soprattutto il SARS-CoV-2, che sta costringendo tutti noi a casa. Fortunatamente, il virus non impatta direttamente sulle nostre professioni, che si possono spessissimo svolgere da casa senza troppo rischio di ammalarci di COVID, e quindi moltissimi di noi si sono dati da fare nel grande sforzo che si sta facendo per mitigare, e risolvere il prima possibile, questa crisi.

Il subreddit ha dato voce a tante di queste iniziative e volevo, nel primo di questi articoli digest, riassumerle un po’.

Intanto, l’analisi dei dati. La Protezione Civile, tra un bug e l’altro, rilascia quotidianamente i dati, e ne abbiamo parlato un po’, condividendo anche qualche sito di analisi, un paio sono anche qui, qui, qui e di qua. C’è chi semplicemente mostra i dati ufficiali, e chi tenta diversi tipi di modellazione, analisi e previsione. Qualche progetto è open source o lo è parzialmente, e diverse cose meritano un’occhiata.

Ci sono stati bandi, sia privati (un hackaton), che europei, che statali, per scrivere applicazioni utili a supportare la lotta al virus. Ormai è grossomodo tutto scaduto, ma si è parlato anche di quello. Di cose invece ancora fattibili, soprattutto il progetto Folding@Home (con le criticità che qualcuno ha sollevato) si è invece parlato qui e qui.

Diversi di noi si son trovati a dover fare videoconferenze o videolezioni di diverso tipo. Abbiamo parlato dei modi migliori per fare dirette in streaming, dei software che in videoconferenza permettono di condividere una lavagna e delle applicazioni per poter comunicare con i pazienti COVID isolati. Purtroppo non c’è nulla di ideale, e chissà che questa situazione non porti a concentrarsi piú sulle caratteristiche veramente utili che sulla marea di roba accessoria che le applicazioni di questo tipo offrono.

Qualcuno di noi è studente, e anche chi lavora sta spesso avendo avendo più tempo libero in questo periodo. E il tempo libero è sempre utile investirlo bene. Abbiamo quindi parlato di corsi online e di libri da leggere. Qualcun altro, invece, ha proposto di utilizzare il tempo per ripristinare hardware da destinare a chi ha bisogno di seguire videolezioni.

Anche governi e entità sovranazionali hanno preso, o stanno prendendo, diverse decisioni a forte contenuto informatico. Principalmente si è parlato di sorveglianza sui movimenti. Si è parlato dell’analisi che alcune regioni hanno fatto sui tabulati telefonici, ma anche di proposte e ipotesi un po’ più spinte, e dei tentativi regionali di mettere online qualcosa di utile. L’UE, invece, ha chiesto a un po’ di siti di streaming video di ridurre il traffico, e lo hanno fatto abbassando il bitrate, dicono.

Infine, la bufala: il 5G provoca il coronavirus, un po’ come, notoriamente, abbonarsi a Topolino provoca l’abbonamento a PornHub. Di 5G abbiamo anche parlato altrove.

Buona lettura, e tenete duro! Abbiamo aiutato parecchio a mitigare questa crisi che se fosse successa anche solo vent’anni fa sarebbe stata ben peggiore anche solo per motivi tecnologici, ma abbiamo ancora un sacco da fare. Buon lavoro a tutti!

La grafica in copertina è di Martin Sanchez, su Unsplash

Libmodule: libreria C per creare progetti modulari

Ciao a tutti! Sono u/nierro. Forse vi ricorderete di quando vi raccontai di un mio progetto proprio qui: https://tldr.italyinformatica.org/2017/05/clight-demone-utente-per-linux/.

Bene, libmodule nasce come “spin-off” di quel progetto: il codice di clight è molto modulare, e ha al suo interno tutta una serie di accorgimenti per gestire questi “moduli”.

Circa un mesetto fa mi resi conto che da un lato per clight questa gestione dei moduli era over-engineered, e dall’altro mi tornava utile in tanti progetti, personali e lavorativi.

Decisi quindi di mettermi al lavoro per creare una libreria come si deve, con lo scopo ultimo che dovesse essere semplice ed elegante.

Nasce così libmodule.

Cos’è libmodule?

È una libreria C, che ad oggi supporta linux, osx e BSD (tornerò su questo punto più in là), per scrivere progetti modulari e standardizzati.

L’approccio è piuttosto simile all’OOP; in particolare mi sono fortemente ispirato ad akka (https://akka.io/) e più in generale all’Actor Model per l’API.

Cos’è un modulo?

Un modulo è, manco a dirlo, l’entità chiave di libmodule; ogni modulo espone determinate callback che verranno usate per gestire il suo ciclo di vita.

Un modulo può inoltre reagire agli eventi, mettendosi in ascolto su dei File Descriptor.

Libmodule offre poi un loop interno che automaticamente ascolta su tutti gli eventi di tutti i moduli chiamando le callback corrette per ciascuno.

Supporta il mio OS?

Libmodule usa, per il suo loop interno, una struttura a compile-time-plugins; dipendentemente dalla piattaforma su cui viene compilato, seleziona il plugin corretto per implementare l’interfaccia di poll.
Ad oggi supporta epoll() su linux, e kqueue() su osx e bsd.

Lo svantaggio è che questi “plugins” dovranno avere una interfaccia simile a epoll.

Questa è una scelta specifica: l’ovvia soluzione portabile sarebbe stata usare poll(); trovo però l’API di kqueue/epoll molto più elegante e flessibile.

Esiste della documentazione?
Ovviamente: una libreria è completamente inutile se non esiste della documentazione.

La si può trovare qui: http://libmodule.readthedocs.io/en/latest/?badge=latest.

Tutto bello..ora però tira fuori il codice!

Mi sembra corretto ricompensare quei pochi coraggiosi giunti fin qui mostrando loro un breve esempio.


#include <module/modules.h>
#include <module/module.h>
#include 

MODULE("Test");

static void module_pre_start(void) {

}

static void init(void) {
     m_add_fd(STDIN_FILENO);
}

static int check(void) {
     return 1;
}

static int evaluate(void) {
     return 1;
}

static void receive (const msg_t *msg; const void *userdata) {
     if (!msg->msg) {
          char c;
          read(msg->fd,&c,sizeof(char));
               if (c=='q'){
               modules_quit();
          }
     }
}

int main () {
     modules_loop();
     return 0;
}

Per compilare, è sufficiente linkare libmodule tramite il linker flag “-lmodule” o usando lo script pkg-config installato.

Questo semplice programma crea un modulo, che si chiamerà “Test”, che ascolta su stdin.

Alla pressione di ‘q’, il programma uscirà.

Ben più utile, al fine di capire come funziona la libreria, è l’output generato (libreria compilata in debug, che la rende verbosa):

./sample.out Libmodule: Initializing libmodule 1.0.0. Libmodule: Creating context ‘default’. Libmodule: Registering module ‘Test’. a b c q Libmodule: Deregistering module ‘Test’. Libmodule: Destroying context ‘default’. Libmodule: Destroying libmodule.

 

Da qui appare ben chiaro lo scopo della macro MODULE(): registra un modulo in libmodule automaticamente all’avvio del programma, proprio come un ctor.

Il modulo viene poi de-registrato automaticamente da un dtor implicito.

Non mi dilungo su cosa sia un context, nella documentazione è ben spiegato.

Dall’esempio si possono evincere le caratteristiche principali di libmodule:

* Modularità (ovviamente)

* Semplicità

* Compattezza

Idealmente, ogni modulo costituisce un sorgente separato annotato dalla macro MODULE (anche se questa regola può essere aggirata utilizzando la “complex API”, che poi non è altro che l’API usata internamente dalla macro); forzando di fatto una standardizzazione del proprio progetto.

Hai citato gli actor, non vedo nulla però…

I moduli possono anche dialogare tra loro con un sistema PubSub: possono quindi inviare un messaggio a un altro modulo, o pubblicarlo su un “topic” che verrà ricevuto da tutti i moduli sottoscritti al suddetto topic.

Last, but not least (aka “la roba pallosa”)

Al momento mi sto concentrando sulla scrittura di unit test prima di rilasciare la prima versione stabile. Si noti che i test sono eseguiti automaticamente tramite travis sia su linux che su osx; inoltre su linux sono anche testati per la ricerca di memleak con valgrind.

L’API è in freeze in attesa della release; non ho comunque in mente alcun api break nel breve periodo.

Qualora per sbaglio dovessi aver stimolato il vostro interesse o la vostra curiosità, vi invito a farvi un giro al repo github: https://github.com/FedeDP/libmodule 🙂

La Forza Kinectica

Il sensore Kinect è ben famoso nella community videoludica, infatti era principalmente indirizzato ai giocatori quando Microsoft lo ha creato. La prima versione del dispositivo era per la console Xbox 360 e col suo sensore 3D ha introdotto un nuovo modo di giocare, cioè usare l’intero corpo o almeno le braccia dell’utente. Può facilmente tracciare l’intero corpo umano e dare in output una collezione completa di informazioni sulle posizioni e sui movimenti di ogni articolazione. Nella figura seguente si può vedere a cosa mi riferisco con articolazione, sono i ”Joints” che formano lo ”Skeleton” di un utente.

(altro…)

Alla scoperta di D: un completo linguaggio di programmazione

Negli ultimi anni abbiamo assistito all’ascesa di un gran numero di linguaggi di programmazione, in particolare [Go](2009), [Rust](2010), [Kotlin] (2011), [Elixir](2011), [Crystal] (2014), [Pony](2014).
Questa esplosione di nuovi linguaggi è dovuta, fra le molte motivazioni, alla necessità di adottare paradigmi di programmazione non immediatamente recenti come cittadini di primo tipo.
(altro…)

Mantieni la tua rete sotto controllo con Nidan

Buongiorno a tutti, sono o-zone1978, un sistemista informatico che lavora nel CED di un Ente pubblico toscano. Sono quasi 20 anni che lavoro nel settore informatico ed ho iniziato a programmare in C a 14 anni su un Amiga 600. Mi sono poi indirizzato verso lo sviluppo di applicativi web, in PHP, ed ultimamente ho ripreso a sviluppare in Python per la sua ampia disponibiltià anche su sistemi embedded. Grazie alla disponibilità dei ragazzi di /r/ItalyInformatica, oggi vi presento Nidan, un progetto a cui sto lavorando attivamente ormai da qualche mese. Ma andiamo con ordine… (altro…)

I testi generati ovvero le catene di Markov

Per chi non mi conoscesse, sono /u/timendum , il creatore di /u/italy_SS , cioè il /r/SubredditSimulator per i contenuti in Italiano.

In questo articolo cercherò di spiegarvi il meccanismo dietro la generazione di testi casuali usati in questi due subreddit.

(altro…)

Crackare password? Facciamolo!

Questo articolo sarà un po’ diverso dagli altri: oltre a parlarvi dell’argomento (Crackare password n.d.r.), voglio proporvi una piccola sfida.

Sappiamo che le password devono essere lunghe, devono essere complesse e solo una di queste due proprietà non basta: avere la stessa password per ogni sito web, sappiamo, non è cosa giusta. Tutte queste accortezze per cosa? Per non farsi rubare le password ovviamente: ma se volessi provarci? Vi è mai capitato di crackare password?

(altro…)

Entrare nella community di Envato? Difficile ma si può!

Envato, con oltre 1 milione di utenti, è sicuramente uno dei più grandi market mondiali per quanto riguarda la vendita di contenuti multimediali quali temi per ogni cms, plugins, addons, audio, video, app totalmente modificabili dall’utente finale se acquistati. In envato troviamo themeforest, videohive, graphicriver, audiojungle, 3docean, photodune, codecanyon. Se vuoi guadagnare qualcosa dal tuo codice, Envato è quello che fa per te (o quasi). In questo articolo vorrei raccontare la mia breve esperienza su cosa e come ho fatto per farmi accettare un plugin WooCommerce in Envato.

(altro…)

Progetti FOSS, anche tu puoi contribuire

Parlo di una realtà, che si può toccare con mano, una realtà che tutti usiamo ma che a nessuno (o quasi) interessa. Una realtà che riguarda tutti noi, non solo gli addetti ai lavori. La toccate quando usate sul vostro smartphone, la percepite quando inviate una mail, la notate quando acquistate online. Sono tutti (o quasi) strumenti, metodi e servizi basati su tecnologie FOSS (Free (and) Open Source Software ndr).

(altro…)

Diritto alla riparazione: informazioni e consigli utili

Ci troviamo in un’epoca in cui il concetto di proprietà di un oggetto sta cambiando, in alcuni aspetti in maniera subdola e che non ci aspetteremmo: il “diritto alla riparazione” dei nostri dispositivi.
Siamo oggi circondati da telefoni, tablet, indossabili, portatili che ogni giorno diventano più sofisticati, compatti, costosi e delicati.
Quando acquistiamo uno di questi, la facilità o, al contrario, l’impossibilità di poter intervenire sugli elementi che li compongono per ripararli o migliorarli sono fattori che difficilmente consideriamo, ma a cui da consumatori dovremmo fare più attenzione, per diversi motivi.

(altro…)