Un vecchio detto dell’informatica — talmente vecchio che fa riferimento al termine ABEND, con cui i mainframe IBM segnalavano l’ABnormal END di un programma —, recita:
I PDF non ABENDano mai.
Questo invito a diffidare delle descrizioni eccessivamente entusiastiche di prodotti hardware o software si applica anche ai siti Web.
Anche a questo.
Perciò, non cercheremo di convincervi che siamo bravissimi e che il nostro software funziona sempre.
Per quanto possibile, eviteremo avverbi e aggettivi e ci limiteremo ai dati oggettivi del nostro lavoro: cosa sappiamo fare e come potremmo esservi utili.
Cosa sappiamo fare
La cosa che sappiamo fare meglio è scrivere software che risolve problemi.
Abbiamo cominciato a lavorare con i computer nel 1988; abbiamo realizzato il nostro primo sito Web dinamico nel 1995 e il nostro primo sito di commercio elettronico nel 2001.
Dal 2008 ci occupiamo anche di cybersecurity, tenendo corsi di formazione ed effettuando vulnerability assessment e penetration test per clienti come INPS, INAIL e Consip.
Abbiamo competenze (comprovabili) relative ai seguenti prodotti, linguaggi e paradigmi:
Sicurezza | Office365, FortiGuard, FireEye, MISP, OWASP |
RDBMS | PostgreSQL, MySQL, DB2 |
Linguaggi | C++, C, PHP, SQL, Perl, HTML |
Altro | SEO, caching Akamai e Cloudflare, Git, Jekyll |
Come potremmo esservi utili
Se vi serve un sito in Wordpress o una PowerApp che legga i dati da un foglio Excel, non siamo la scelta giusta per voi, ma se vi serve un CMS ad alte prestazioni o una libreria in C++ per l’analisi dello spettro di Plutonio e Uranio, probabilmente vi possiamo dare una mano.
bool uranium_spectrum::solid_samples_analysis()
{
le_relative_efficiency();
he_relative_efficiency();
peak peak1;
peak peak2;
peak peak3;
int i = 0;
while (i < _rois.size())
{
int j = 0;
while (j < _rois[i]._peaks.size())
{
if (_rois[i]._peaks[j]._RefData._Energy == 93.35)// KA1 Th
peak1 = _rois[i]._peaks[j];
if (_rois[i]._peaks[j]._RefData._Energy == 92.38)// TH 234
peak2 = _rois[i]._peaks[j];
if (_rois[i]._peaks[j]._RefData._Energy == 92.80)// TH 234
peak3 = _rois[i]._peaks[j];
j++;
}
i++;
}
double eff1 = 1.;
if (peak1._RefData._Energy < 115)
eff1 = exp(_LERelEff[0]*log(peak1._RefData._Energy) +
_LERelEff[1]*pow(log(peak1._RefData._Energy),2.));
else
eff1 = exp(_HERelEff[0]*log(peak1._RefData._Energy) +
_HERelEff[1]*pow(log(peak1._RefData._Energy),2.) +
_HERelEff[2]*pow(log(peak1._RefData._Energy),3.));
double eff2 = 1.;
if (peak2._RefData._Energy < 115)
eff2 = exp(_LERelEff[0]*log(peak2._RefData._Energy) +
_LERelEff[1]*pow(log(peak2._RefData._Energy),2.));
else
eff2 = exp(_HERelEff[0]*log(peak2._RefData._Energy) +
_HERelEff[1]*pow(log(peak2._RefData._Energy),2.) +
_HERelEff[2]*pow(log(peak2._RefData._Energy),3.));
double eff3 = 1.;
if (peak3._RefData._Energy < 115)
eff3 = exp(_LERelEff[0]*log(peak3._RefData._Energy) +
_LERelEff[1]*pow(log(peak3._RefData._Energy),2.));
else
eff3 = exp(_HERelEff[0]*log(peak3._RefData._Energy) +
_HERelEff[1]*pow(log(peak3._RefData._Energy),2.) +
_HERelEff[2]*pow(log(peak3._RefData._Energy),3.));
double *err = new(double);
double ratio1 = isotopic_ratio(peak2,eff2,peak1,eff1,err);
double ratio1err = *err;
double ratio2 = isotopic_ratio(peak3,eff3,peak1,eff1,err);
double ratio2err = *err;
double ratio = 0.5 * (ratio1 + ratio2);
double ratioerr = sqrt(pow(0.5*ratio1err,2.) + pow(0.5*ratio2err,2.));
_Ab235 = 1 / (1 + ratio);
_Ab235err = pow(1 / pow((1 + ratio),2.) * ratioerr,2.);
_Ab234 = 0.;
_Ab238 = 1 - _Ab235 - _Ab234 - _Ab236;
return true;
}
Ci sono informatici, anche bravi, che si specializzano e fanno le stesse cose per tutta la vita; a noi, invece, piace imparare qualcosa di nuovo a ogni progetto e creare qualcosa che prima non c’era — come il primo prototipo della Posta Elettronica Certificata, nel 2002.
int Sessione::firma_messaggio(const char* file_in, const char* file_out)
{
DEBUG( "firma_messaggio", DBG_FUNZIONI )
int esito = ESITO_OK; // default OK
DATI_FIRMA df;
df.file_in = file_in;
df.file_out = file_out;
df.cert = _configurazione.valore("PATH_CERTIFICATO");
df.chiave = _configurazione.valore("PATH_CHIAVE");
df.pass = _configurazione.valore("PASSWORD");;
if( ( esito = pec::firma_messaggio( &df ) ) != ESITO_OK )
{
// le funzioni di crittografia non scrivono sul file
// di debug, quindi, per sapere cosa sia andato storto,
// si deve leggere il valore tornato.
char str_errore[80];
sprintf( str_errore, "errore %d in firma_messaggio", esito );
_str_errore = "errore-firma";
_str_errore_esteso = str_errore;
}
return esito;
}
Ci piace anche insegnare. In particolare, ultimamente, insegnare ai non tecnici come difendersi dalle minacce — sempre più frequenti e sofisticate — dei pirati informatici, perché pensiamo (e scriviamo) che la formazione del personale sia il metodo migliore per combattere il crimine informatico.