Vai al contenuto

Collaborazione per ri-scrittura programmino


bulvio

Messaggi raccomandati

Ciao a tutti...

anni e anni fa, quando ne avevo ancora il tempo e ancora non conoscevo il mac :love:, scrissi un programmino in Visual Basic che a tutt'oggi viene scaricato e utilizzato.

Il programma è un semplice calcolatore e stampatore di cartelle per giocare a tombola. Gli metti semplicemente il numero di cartelle che vuoi, e lui ti crea un'anteprima pagina su A4 da 3 cartelle per foglio. Puoi scegliere il font, la grandezza dei numeri, l'intestazione delle cartelle.

Il programma è naturalmente aggratisse, perchè l'ho creato soprattutto per venire incontro alle necessità degli enti no profit (parrocchie ed altro) che sotto Natale sono soliti organizzare questo genere di cose per raccogliere un po' di fondi.

Ma, ahimè, essendo stato fatto con VB, è ora limitato a Windows.

Mi piacerebbe poterlo riscrivere, in modo da permetterne l'utilizzo anche a chi ha un Mac o Linux, implementando la licenza Gpl e facendolo quindi diventare un open-source. Ma non conosco altro che VisualBasic, e quindi, da solo, mi è impossibile.

Chi mi da una mano? Posso fornire i codici VisualBasic, anche se non c'è niente di particolare, in effetti...

Poi, naturalmente, tutti quanti noi saremo tra gli "autori" del programma...

Lo potete scaricare qui: http://www.qumran2.net/indice.pax?parole=tombola&testi.x=0&testi.y=0

è il primo dell'elenco Programmi (+ di 9000 downloads...)

Grazie...

:ghghgh:

Link al commento
Condividi su altri siti

Beh se vuoi farlo multipiattaforma puoi usare RealBASIC.

Anzi, c'è anche un convertitore da Visual Basic a RealBASIC che fa tutto in automatico.

Solo che non è un programma gratuito, l'unica versione gratis è quella per linux, mentre per Win e Mac costano. Comunque ogni versione puoi compilare per tutte e 3 le piattaforme.

Ciao Ciao =)

Edit:

Cmq se vuoi manda il sorgente. Io RealBASIC ce l'ho, posso provare a ricompilarlo e poi ti mando i binari compilati.

Link al commento
Condividi su altri siti

Penso non sia un problema in sè il codice, per quello, ok, possiamo provare, c'è però un controllo ocx "SwiftPrint", che si occupa del disegno dell'anteprima e della stampa, che andrebbe sostituito con altro...

Provo a mandarti il progetto... dove? mandami un pm...

Link al commento
Condividi su altri siti

Pensando all'Open Source valuterei lingaggi come Python o Java che si portano "in giro" abbastanza facilemente, oppure perchè non una versione PHP? In PHP (=Web) esiste pur sempre la possibilità di produrre file PDF che poi possono essere stampati in qualunque ambiente.

:)

Link al commento
Condividi su altri siti

Pensando all'Open Source valuterei lingaggi come Python o Java che si portano "in giro" abbastanza facilemente, oppure perchè non una versione PHP? In PHP (=Web) esiste pur sempre la possibilità di produrre file PDF che poi possono essere stampati in qualunque ambiente.

:ciao:

Questa del php mi piace! Creare quindi una versione web del programma in modo che chi non ha windows possa comunque utilizzarlo. Ottimo!

Allora, mi dai una mano? Se mi mandi in privato la mail, ti invio i sorgenti VB, giusto per farti un'idea...

Link al commento
Condividi su altri siti

Ottimo! riesci anche a creare la griglia per la stampa?

;)

Mi sono solo limitato a creare 'n' matrici in memoria a richiesta dove ogniuna rappresenta una cartella. Volevo verificare d'aver compreso l'obiettivo e l'algoritmo.

L'ho sul PC (:ciao:), ora sono sul Mac - se ti fa piacere domani posto il codice dell'algoritmo qui sul forum così magari chi usa Carbon/Cocoa può facilmente farci l'interfaccia sopra mentre tra qualche giorno lo converto in PHP per il web.

Conosco poco il PHP quindi aprofitto per studiare questa cosa. Questo linguaggio (col Javascript) mi stanno appassionando molto ultimamente, quindi cosa c'è di meglio che provare?

;)

Link al commento
Condividi su altri siti

Ok, allora in C++ (senza classi in modo che sia praticamente C) in versione console (bulvio, ho eliminato i goto ed il mega switch :D , senza dovrebbe essere molto più facile passare da un linguaggio all'altro)

// TombASCII.cpp : Defines the entry point for the console application.
//

#include <stdlib.h>
#include <stdio.h>

bool Generate( int nCards );
void Print();

typedef int Card[9][3];

Card*   g_cards   = NULL;
int     g_nCards  = 0;

void main()
{
   Generate( 100 );
   Print();
}

bool Generate( int nCards )
{
   if( nCards <= 0  ||  nCards > 1000 )
{
       return false;
   }

   if( g_cards != NULL )
   {
       // remove preallocate memory
       delete [] g_cards;
       g_cards		= NULL;
       g_nCards	= 0;
   }

   g_cards = new Card[ nCards ];   // allocate matrix card space

   if( g_cards == NULL )
   {
       return false;               // no memory space?!?
   }

   g_nCards = nCards;

   // ok, now go and generate!
   int i = 0;
   while( i < nCards )
   {
       // reset
       for( int r=0; r<3; r++ )
       {
           for( int c=0; c<9; c++ )
           {
               g_cards[i][c][r] = -1; // -1 = conventional empty
           }
       }

       // generate
       for( int r=0; r<3; r++ )
       {
           int c = 0;
           while( c < 5 )
           {
               int nNum = 1 + rand() % 90; // random number
               int nCol = nNum / 10;       // column position of the random number

               bool bGood = false;
               if( g_cards[i][nCol][r] == -1 )
               {
                   bGood = true;           // column must be empty
               }

               if( bGood  &&  r > 0 )
               {
                   if( (r > 0  &&  g_cards[i][nCol][r-1] == nNum )  ||
                       (r > 1  &&  g_cards[i][nCol][r-2] == nNum ) )
                   {
                       bGood = false;      // previews rows must contain different values
                   }
               }

               if( bGood )
               {
                   g_cards[i][nCol][r] = nNum;
                   c ++;
               }
           }
       }

       // verify unique
       bool bGood = false;
       for( int v=0; v<i; v++ )
       {
           for( int r=0; r<3; r++ )
           {
               for( int c=0; c<9; c++ )
               {
                   if( g_cards[i][c][r] != g_cards[v][c][r] )
                   {
                       bGood = true;
                   }
               }
           }
       }

       if( i == 0  ||  bGood )
       {
           i++;
       }
   }

   return true;
}

void Print()
{
   for( int i=0; i<g_nCards; i++ )
   {
       printf( "+----+----+----+----+----+----+----+----+----+\n" );

       for( int r=0; r<3; r++ )
       {
           printf( "|" );

           for( int c=0; c<9; c++ )
           {
               if( g_cards[i][c][r] != -1 )
               {
                   printf( " %2d |", g_cards[i][c][r] );
               }
               else
               {
                   printf( "    |" );
               }
           }

           printf( "\n+----+----+----+----+----+----+----+----+----+\n" );
       }

       printf( "\n" );
   }
}

Link al commento
Condividi su altri siti

  • 2 settimane dopo...
Ospite AndyJ

Ok, torno a bomba... vedo di lavorarci e di far qualcosa a breve.

Il programmino C++ che ho pubblicato funziona se compitato con VC 2005 (=windows), ma non con gcc, dovrei controllare ed adattarlo, ma non so se ne vale la pena.

Lo scopo era quello di verificare se avevo capito il tuo algoritmo.

:confused:

Link al commento
Condividi su altri siti

Ospite AndyJ

Java non mi dispiace, ma se la si vede come applicazione web, l'hosting JPS ha un costo maggiore rispetto al classico PHP.

Comunque, intanto piccoli passi di bimbo: algoritmo convertito in PHP e provato. Non mi dispiacerebbe avere un feedback se i risultati sono quelli previsti per un'applicazione di questo tipo:

TEST: tombolabase.php

codice:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
   <title>Tombola</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>

<body>

<?php

// tombolabase.php

// code execution
Generate( 15 );
PrintCards();

$g_cards    = NULL;        // card list
$g_nCards    = 0;        // number of requested cards

function Generate( $nCards )    // returns bool
{
   if( $nCards < 1  ||  $nCards > 1000 )
   {
       return false;
   }

   global $g_cards;
   global $g_nCards;

   $g_cards    = array( array( array() ) );
   $g_nCards    = $nCards;

   // ok, now go and generate!
   $i = 0;
   while( $i < $nCards )
   {
       // reset
       for( $r=0; $r<3; $r++ )
       {
           for( $c=0; $c<9; $c++ )
           {
               $g_cards[$i][$c][$r] = -1;    // -1 = conventional empty
           }
       }

       // generate
       for( $r=0; $r<3; $r++ )
       {
           $c = 0;
           while( $c < 5 )
           {
               $nNum = 1 + rand() % 90;    // random number
               $nCol = $nNum / 10;            // column position of the random number

               $bGood = false;
               if( $g_cards[$i][$nCol][$r] == -1 )
               {
                   $bGood = true;    // column must be empty
               }

               if( $bGood  &&  $r > 0 )
               {
                   if( ($r > 0  &&  $g_cards[$i][$nCol][$r-1] == $nNum )  ||
                       ($r > 1  &&  $g_cards[$i][$nCol][$r-2] == $nNum ) )
                   {
                       $bGood = false;    // previews rows must contain different values
                   }
               }

               if( $bGood )
               {
                   $g_cards[$i][$nCol][$r] = $nNum;
                   $c ++;
               }
           }
       }

       // verify unique
       $bGood = false;
       for( $v=0; $v<$i; $v++ )
       {
           for( $r=0; $r<3; $r++ )
           {
               for( $c=0; $c<9; $c++ )
               {
                   if( $g_cards[$i][$c][$r] != $g_cards[$v][$c][$r] )
                   {
                       $bGood = true;
                   }
               }
           }
       }

       if( $i == 0  ||  $bGood )
       {
           $i++;
       }
   }

   return true;
}

function PrintCards()    // returns void
{
   global $g_cards;
   global $g_nCards;

   for( $i=0; $i<$g_nCards; $i++ )
   {
       echo $i + 1;
       echo '<br><table border=1>';

       for( $r=0; $r<3; $r++ )
       {
           echo '<tr>';

           for( $c=0; $c<9; $c++ )
           {
               echo '<td width=20>';

               if( $g_cards[$i][$c][$r] != -1 )
               {
                   echo $g_cards[$i][$c][$r];
               }

               echo '</td>';
           }

           echo '</tr>';
       }

       echo '</table><br><br>';
   }
}

?>

</body>
</html>

Link al commento
Condividi su altri siti

Ospite AndyJ

La parte PHP a PDF è stata un incubo.

Le librerie per la generazione dei PDF in PHP non sono native; vengono fornite da terze parti e danno qualche problema; la cosa peggiore è che le chiamate sono state riviste e non c'è garanzia che cambiando l'hosting l'applicazione continui a funzionare, ne c'è garanzia che il provider le abbia installate.

Alla fine ho adottato una soluzione più ovvia per superare il problema: non impiegare le chiamate di un modulo PHP, ma usare una classe completamente in codice sorgente PHP disponibile; ricercando la mia attenzione è caduta su FPDF (http://www.fpdf.org) ce ne sono altre anche migliori, ma ormai avevo iniziato con questa.

La differenza tra "modulo" e "classe in codice sorgente PHP" è molto importante. Un "modulo" è in formato binario e viene dichiarato nel file "php.ini"; solo i provider possono avere accesso a questo file - una classe in codice sorgente ha il vantaggio che queste sono semplicemente incluse nel proprio progetto, non fanno parte della configurazione di sistema della macchina. Hanno però lo svantaggio di essere più lente in quanto interpretate.

Ora per arrivare al dunque:

ho messo tutti i file realizzati finora in questo file zip: tombola.zip

quì c'è l'algoritmo funzionante con la generazione del file PDF: tombolapdf.php

il prototipo della form NON FUNZIONANTE (si vede il layout): tombolaform.php

Per realizzare rapidamente la form, dal momento che sto usando un semplice editor di testo (non ho altri tool al momento), ho impiegato il JOTFORM (http://www.jotform.com/) - bellino perchè le form di disegnano "on line", dopodichè si recuperano i sorgenti.

la funzione che genera il PDF ha diversi parametri di passaggio che si descrivono un po' da sole:

function PrintCards(            // returns bool
   $szTitle    = 'Tombola',
   $nRows        = 3,
   $nCols        = 1,
   $szFont        = 'Arial',
   $bSummary    = true,
   $bFoldLines    = true )

$bSummary serve per stampare o meno la pagina riepilogativa.

$bFoldLines serve per stampare o meno le linee di piega/taglio: non l'ho ancora fatta.

ecco il codice di "tombolapdf.php"

<?php

// tombolaphp.php
require( 'fpdf/fpdf.php' );

// code execution
if( Generate( 25 ) )
{
   PrintCards( 'Tombola - italiamac.it', 6, 2, 'Helvetica' );
}

$g_cards    = NULL;        // card list
$g_nCards    = 0;        // number of requested cards

function Generate( $nCards = 15 )    // returns bool
{
   if( $nCards < 1  ||  $nCards > 1000 )
   {
       return false;
   }

   global $g_cards;
   global $g_nCards;

   $g_nCards    = $nCards;

   // ok, now go and generate!
   $i = 0;
   while( $i < $nCards )
   {
       // reset
       for( $r=0; $r<3; $r++ )
       {
           for( $c=0; $c<9; $c++ )
           {
               $g_cards[$i][$c][$r] = -1;    // -1 = conventional empty
           }
       }

       // generate
       for( $r=0; $r<3; $r++ )
       {
           $c = 0;
           while( $c < 5 )
           {
               $nNum = 1 + rand() % (87 + $r);    // random number
               $nCol = $nNum / 10;                // column position of the random number

               $bGood = false;
               if( $g_cards[$i][$nCol][$r] == -1 )
               {
                   $bGood = true;    // column must be empty
               }

               if( $bGood  &&  $r > 0 )
               {
                   if( ($r > 0  &&  $g_cards[$i][$nCol][$r-1] >= $nNum )  ||
                       ($r > 1  &&  $g_cards[$i][$nCol][$r-2] >= $nNum ) )
                   {
                       $bGood = false;    // previews rows must contain different values
                   }
               }

               if( $bGood )
               {
                   $g_cards[$i][$nCol][$r] = $nNum;
                   $c ++;
               }
           }
       }

       // verify unique
       $bGood = false;
       for( $v=0; $v<$i; $v++ )
       {
           for( $r=0; $r<3; $r++ )
           {
               for( $c=0; $c<9; $c++ )
               {
                   if( $g_cards[$i][$c][$r] != $g_cards[$v][$c][$r] )
                   {
                       $bGood = true;
                   }
               }
           }
       }

       if( $i == 0  ||  $bGood )
       {
           $i++;
       }
   }

   return true;
}

function PrintCards(            // returns bool
   $szTitle    = 'Tombola',
   $nRows        = 3,
   $nCols        = 1,
   $szFont        = 'Arial',
   $bSummary    = true,
   $bFoldLines    = true )
{
   global $g_cards;
   global $g_nCards;

   if( $g_nCards <= 0  ||  $nRows <= 0  ||  $nCols <= 0 )
   {
       return false;
   }

   // calculate needing sizes (for an A4 size)
   $nPagDx = 190;        $nCrdDx = ( $nPagDx / $nCols ) - 2;        $nCelDx = $nCrdDx / 9;
   $nPagDy = 270;        $nCrdDy = ( $nPagDy / $nRows ) - 2;        $nCelDy = $nCrdDy / 4;

   // initialize PDF file
   $pdf = new FPDF();
   $pdf->SetAuthor  ( 'Fulvio Varone, John A Johnson' );
   $pdf->SetCreator ( 'tombola.pdf' );
   $pdf->SetKeywords( 'Tombola' );
   $pdf->SetTitle   ( $szTitle );    
   $pdf->SetAutoPageBreak( false );

   // summary page
   if( $bSummary )
   {
       // add summary page
       $pdf->AddPage();

       // calculate needing sizes (for an A4 size)
       $nSumCelDx = ( $nPagDx /  9 );
       $nSumCelDy = ( $nPagDy / 11 );

       // set the summary font
       $pdf->SetFont( $szFont, 'IB', 4 * $nSumCelDy / 3 );

       // outline rect
       $pdf->Rect( 10, 10, $nPagDx, $nPagDy );

       // title
       $pdf->SetXY( 10, 10 );
       $pdf->Cell( $nPagDx, $nSumCelDy, $szTitle, 0, 0 );

       // set the summary cels font
       $pdf->SetFont( $szFont, '', 4 * $nSumCelDy / 3 );

       // render summary cels
       $i = 1;
       for( $rc=0; $rc<10; $rc++ )
       {
           $nSumCelPy = 10 + $nSumCelDy * ($rc + 1);

           for( $cc=0; $cc<9; $cc++ )
           {
               $nSumCelPx = 10 + $nSumCelDx * $cc;

               $szNum = (string)$i;
               $pdf->SetXY( $nSumCelPx, $nSumCelPy );
               $pdf->Cell ( $nSumCelDx, $nSumCelDy, $szNum, 0, 0, 'C' );

               $i++;
           }

           // hor lines
           $pdf->Line( 10, $nSumCelPy, $nPagDx + 10, $nSumCelPy );
       }

       // vert lines
       for( $cc=1; $cc<9; $cc++ )
       {
           $nSumCelPx = 10 + $nSumCelDx * $cc;

           $pdf->Line( $nSumCelPx, 10 + $nSumCelDy, $nSumCelPx, 10 + $nPagDy );
       }
   }

   // calculate the pages
   $nCardsOnPage    = $nRows * $nCols;
   $nPages            = $g_nCards / $nCardsOnPage;

   // render all the card pages
   for( $p=0; $p<$nPages; $p++ )
   {
       $pdf->AddPage();

       $i = $p * $nCardsOnPage;
       for( $rp=0; $rp<$nRows; $rp++ )
       {
           $nCrdPy = ( $nCrdDy + 2 ) * $rp + 10;
           for( $cp=0; $cp<$nCols; $cp++ )
           {
               $nCrdPx = ( $nCrdDx + 2 ) * $cp + 10;

               // render the single card
               if( $i < $g_nCards )
               {
                   $pdf->Rect( $nCrdPx+1, $nCrdPy+1, $nCrdDx, $nCrdDy );

                   // set the card title font
                   $pdf->SetFont( $szFont, 'IB', 3 * $nCelDy / 2 );

                   // title
                   $pdf->SetXY( $nCrdPx+1, $nCrdPy+1 );
                   $pdf->Cell( $nCrdDx-2, $nCelDy, $szTitle, 0, 0 );

                   // set the card font
                   $pdf->SetFont( $szFont, '', 3 * $nCelDy / 2 );

                   // card number on title
                   $szNum = (string)($i + 1);
                   $pdf->SetXY( $nCrdPx+1, $nCrdPy+1 );
                   $pdf->Cell( $nCrdDx-2, $nCelDy, $szNum, 0, 0, 'R' );

                   // cels
                   for( $rc=0; $rc<3; $rc++ )
                   {
                       $nCelPy = 1 + $nCrdPy + $nCelDy * ($rc + 1);

                       // values
                       for( $cc=0; $cc<9; $cc++ )
                       {
                           $nCelPx = 1 + $nCrdPx + $nCelDx *  $cc;

                           $szNum = '';
                           if( $g_cards[$i][$cc][$rc] != -1 )
                           {
                               $szNum = (string)$g_cards[$i][$cc][$rc];
                           }

                           $pdf->SetXY( $nCelPx, $nCelPy );
                           $pdf->Cell( $nCelDx, $nCelDy, $szNum, 0, 0, 'C' );
                       }

                       // hor lines
                       $pdf->Line( $nCrdPx+1, $nCelPy, $nCrdPx+$nCrdDx+1, $nCelPy );
                   }

                   // vert lines
                   for( $cc=1; $cc<9; $cc++ )
                   {
                       $nCelPx = 1 + $nCrdPx + $nCelDx *  $cc;

                       $pdf->Line( $nCelPx, 1 + $nCrdPy + $nCelDy, $nCelPx, 1 + $nCrdPy + $nCelDy * 4 );
                   }
               }

               $i ++;

               // fold lines
               if( $bFoldLines )
               {
               }
           }
       }
   }

   $pdf->Output( 'Tombola.pdf', 'D' );

   return true;
}

?>

Link al commento
Condividi su altri siti

:sbav:

Buon Anno amici!

vedo che le vacanze (o le non vacanze...) hanno portato molto frutto!

La versione PHP è veramente ottima! Complimentoni AndiJ!

Non ho capito però se qualsiasi provider dotato solo di php può ospitarlo, oppure se ha bisogno dell'installazione di pacchetti aggiuntivi...

Evidentemente ormai si potrebbe tenere come alternativa valida al programma windows laddove ci siano altre piattaforme... senza sbattersi più di tanto a ricompilare...

Se non ci sono necessità particolari sul server, penso di poter ospitare io la pagina col form, magari facendo un bel layout con rapidweaver...

Altra faccenda: la licenza software... a me personalmente piacerebbe fosse gpl, ma dal momento che il codice è stato completamente riscritto, non mi pronuncio, la scelta è del programmatore... :ghghgh:

Link al commento
Condividi su altri siti

Ospite AndyJ

bulvio, non ti preoccupare della licenza, va benissimo GPL. L'algoritmo parte dal tuo lavoro anche se ti sembra riscritto.

L'applicazione dovrebbe funzionare presso qualunque provider in quanto volutamente non usa moduli.

Lo puoi provare sul Mac usando il MAMP, su windozz c'è il WAMP (li ho provati entrambi).

Mancherebbe solo il collegare la form al generatore. Non sono pratico di PHP e applicazioni WEB quindi ho bisogno di un po' di tempo, ma se vuoi provare tu, ben venga.

:D

Link al commento
Condividi su altri siti

Ok... come non detto...

ti rimando alcune considerazioni:

- ho provato a sostituire i valori fissati nel codice per quel che riguarda il numero delle schede totale e per pagina, e non ci sono problemi; ho poi provato a passarli come valori GET nella pagina (per comodità ho usato il get perchè permette di dare i valori nell'url), e tutto ok.

- secondo me invece qualche problemino c'è nel form, soprattutto per la definizione del numero di schede per pagina: viene passata (ovviamente) una stringa che deve essere interpretata da php in modo da ottenere i fattori (1x1;3x1;6x2) oppure bisogna fare in modo che il form passi direttamente i fattori in due variabili distinte...

- per il resto mi sembra ok... anche se (una volta finita la parte form-pdf) metterei un po' a posto la formattazione... i titoli sono enormi (ho visto che per comodità hai usato la stessa altezza righe sia per le celle che per il titolo) e aumenterei lo spazio tra le cartelle (recuperando spazio dal restringimento della riga titolo)

ps: Penso che tu lo sappia, comunque, visto che hai detto di non essere pratico di applicazioni web... io ho semplicemente sostituito GET a POST nel codice del form, e ho usato le variabili $_GET['nomevariabile'] nel codice che crea il pdf, per recuperare le variabili... niente di più semplice...

Link al commento
Condividi su altri siti

Ospite AndyJ

:popcorn:

ti confesso che ho usato la tua applicazione per riprendere la programmazione per il web che avevo lasciato. Mi ricordo che dalla form i dati si prendevano col $_REQUEST[...] e che addirittura, con una piccola dichiarazione si possono avere come nomi di variabili, i medesimi impiegati nella form.

Sì concordo, la formattazione del PDF è proprio basilare e merita d'essere perfezionata ed arricchita; inoltre 1x1 non funziona correttamente, a meno di non riuscire a cambiare il formato pagina da Portrait a Landscape.

Una cosa che vorrei approffondire, è come aggiungere font; c'è un tutorial quì: http://www.fpdf.org/it/tutorial/tuto7.htm

Per la decodifica della stringa per convertire "3x1" in 3 e 1 separate in due variabili, devo vedere, ma penso che in PHP ci siano i vari MID, RIGHT e LEFT.

Comunque procedi pure nelle modifiche e pubblicale così posso restare aggiornato.

:cold:

Link al commento
Condividi su altri siti

  • 6 mesi dopo...

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...