Tacun

An old saying of computer science — so old that it refers to the term ABEND, with which the mainframe IBM signaled the ABnormal END of a program —, states:

PDFs never ABEND.

This call to be wary of overly enthusiastic descriptions of hardware or software products also applies to websites. Even this. Therefore, we will not try to convince you that we are great and that our software always works. As far as possible, we will avoid adverbs and adjectives and we will limit ourselves to the objective data of our work: what we know how to do and how we could be useful to you.

What we can do

The thing we do best is write software that solves problems. We started working with computers in 1988; we built our first dynamic website in 1995 and our first e-commerce site in 2001. Since 2008 we have also been dealing with cybersecurity, holding training courses and carrying out vulnerability assessment and penetration test for clients such as INPS, INAIL and Consip. We have (verifiable) skills related to the following products, languages ​​and paradigms:

Security Office365, FortiGuard, FireEye, MISP, OWASP
RDBMS PostgreSQL, MySQL, DB2
Languages ​​ C ++, C, PHP, SQL, Perl, HTML
Other SEO, Akamai and Cloudflare caching, Git, Jekyll

How we could help you

If you need a Wordpress site or a PowerApp that reads data from an Excel sheet, we are not the right choice for you, but if you need a high-performance CMS or a C ++ library for plutonium and uranium spectrum analysis, we can probably help you out.

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;
}

There are computer scientists, even good ones, who specialize and do the same things all their lives; instead, we like to learn something new in each project and create something that wasn’t there before, like the proof-of-concept of italian PEC (certified e-mail), in 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;
}

We also like to teach. In particular, lately, teaching non-technicians how to defend themselves from threats increasingly frequent and sophisticated, because we think (and write) that staff training is the best way to fight cybercrime.