sabato 14 gennaio 2017

Cose da scrivere sulla mia tomba

No non questa.

  • Ciao bel canino!
  • La data di scadenza e' solo indicativa
  • Certo che questo fungo e' commestibile!
  • Chi ha spento la luce?
  • L'hai staccata la corrente?
  • Vai tranquillo e' ancora giallo!
  • Quale camion?
  • E' solo un gattino...
  • Ripetilo se hai coraggio!
  • Non e' niente, e' solo un graffio...

martedì 15 novembre 2016

PETS vita da animali - la recensione


Allora la prima cosa da dire, guardando il trailer e la locandina e' che uno si aspetta un certo genere di film, ovvero che il film sia incentrato su cosa fanno gli animali quando i loro padroni non ci sono. Ed effettivamente i primi 3 minuti di film parlano di quello, e sono le stesse scene del trailer, finite le quali finisce anche il divertimento.

La storia (oltre a non essere per niente pertinente con il titolo del film), e' pure scarsina, nel senso un cane con una padrona che d'improvviso si trova con un inquilino tre volte piu' grosso di lui, litigano e per scappare si alleano con un rivoluzionario delle fogne.

Ci sono alcuni spunti carini, tipo il coniglietto mezzo matto, ma appunto sono solo spunti, non bastano certo per fare un film.

Pets da' la stessa idea di quando hai da fare un tema e devi scrivere minimo 4 colonne e non sai come riempirle, e allora temporeggi, allunghi il brodo in tutti i modi possibile, scrivi largo... Ecco a me ha fatto quest'effetto. Ci sono un sacco di scene che non dicono niente.

Ho riso 3 volte in tutto il film (e su 2h e' un po' pochino). Coinvolgimento pari a 0, la storia oltre ad essere deboluccia e' pure raccontata male. Quindi sinceramente no secondo me pets non vale la pena andarlo a vedere...

mercoledì 2 novembre 2016

Trenitalia e il biglietto regionale


Trenitalia ha annunciato il nuovo biglietto regionale. In soldoni non puoi piu' comprare un biglietto ed usarlo quando ti fa comodo, ma devi sapere esattamente quando viaggerai e che treno prenderai. Esattamente come succede con treni piu' importanti tipo Italo o le Frecce.

Secondo trenitalia questo dovrebbe combattere l'evasione, in realta' chi non faceva il biglietto prima non lo fa neanche adesso e chi lo faceva prima continuera' a farlo, con una rottura di scatole in piu'.

Uno che usa il treno tutti i giorni probabilmente avra' l'abbonamento e il problema non lo tange, il problema nasce per chi usa il treno salutariamente (es. vai a lavorare in moto ma se piove prendi il treno). Non puoi sapere a priori quando avrai bisogno del treno, con il vecchio biglietto regionale, bastava prenderne uno (o due) dal cassetto, andare in stazione (quando arrivavi arrivavi), obliterare e salivi sul treno (o quello dopo).

Adesso non piu', o lo fai in stazione (o nelle biglietterie abilitate) prima di partire, ma questo vuol dire alzarsi prima e pregare di non trovare traffico, oppure usi l'app. Ma questo vuol dire dover collegare una carta di credito, e non tutti ce l'hanno, e non tutti potrebbero voler fare acquisti su internet. Senza contare che il biglietto elettronico vale solo per quel treno. Cosa succede se quel treno non passa e devo prendere quello dopo?

Inoltre l'app e' una mezza chiavica, tipo stamani sono riuscito a comprare l'andata ma non il ritorno (eppure la c.c. funziona!) non permette l'acquisto del biglietto se l'orario di acquisto e' troppo a ridosso del treno che si vuole prendere (5 minuti! che per un pendolare medio sono un'eternita'), inoltre ti manda un'email con un pdf da mostrare al controllore, quando basterebbe un codice alfanumerico.

Se non si aumentano i controlli, come si spera di combattere l'evasione? Trenitalia si sta comportando come le case discografiche con il DRM, si tartassano gli utenti onesti ma non si fa niente per combattere davvero i disonesti.

Ci vuole davvero tanto a mettere dei gate che ti fanno entrare solo se hai il biglietto (e magari anche dei gate all'uscita per controllare che tu sia uscito davvero dove dovevi uscire e non dopo)? Ma nemmeno, basterebbe il controllore che controlli tutti i biglietti, e il primo che alza le mani (perche' ci sono persone che non comprano il biglietto e s'incazzano se glielo chiedi) taser.

Sinceramente, Trenitalia dovrebbe seriamente rivalutare le sue politiche verso gli utenti onesti, li sta vessando in ogni modo possibile e non sta facendo niente di reale per combattere i disonesti. Non stanno offrendo un servizio, ma un disservizio, francamente sono un po' stufo, il treno sarebbe un bel mezzo, comodo, ecologico, non crea code, e chi lo gestisce fa di tutto per non fartelo usare... #pendolareribellati !!!

giovedì 18 agosto 2016

JBoss failed to start (address already in use)

Capita che JBoss si "incatasti" ovvero che rimanga in esecuzione anche se dice di non esserlo e senza che ci siano processi relativi in esecuzione (tipo la sua istanza di javaw).

La soluzione e' abbastanza semplice, basta tramite netstat vedere chi c'e' in ascolto sulla porta che jboss ci segnala quando dice che non e' riuscito a partire.

Aprite una shell e vi fate un bel
netstat - ano | find "$NUMERO_PORTA"
dove $NUMERO_PORTA e' quel valore di cui parlavo sopra.

A voi interessa il pid (l'ultimo valore, quello che nell'immagine qua sotto ho evidenziato con un quadrato rosso)

Una volta che vi siete segnati il pid basta "ucciderlo". Come? con
taskkill -pid $PID
dove $PID e' il process id restituito da netstat.

Adesso potete riavviare jboss.

Alla prossima!

mercoledì 17 agosto 2016

Perl connessione ad oracle (con e senza tsanames)

Premessa

e' necessario usare il modulo DBI, e potrebbe essere necessario installare il driver per oracle (vedi cpan install per approfondimenti)

Primo modo (usando il tsanames)

semplicemente si passa soltanto il sid e dbi si va a leggere sul tsanames ip porta etc
my $sid = "";
my $dbh = DBI->connect("dbi:Oracle:$sid", "username", "password");

Secondo modo (senza tsanames)

E' necessario specificare nel connect che gli si sta passando l'host il sid etc nel nome host ci dev'essere solo il nome host e verra' usata la porta di default di oracolo, se per qualche ragione la porta dovesse essere diversa analogamente a come si specifica host e sid, si dovra' passare nell'indirizzi anche il parametro "port=" seguito dal valore e separato da ;
my $host = "";
my $sid = "";
my $username = "";
my $password = "";
my $dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid", $username, $password);

Ora io non ho valorizzato le variabili, ma perche' mi sembrava chiaro cosa ci va dentro.

giovedì 12 maggio 2016

Repubblica e i riempitivi

Questo uno screenshot di stamani dal sito di repubblica



Mentre questo e' l'articolo originale (link)



Che dire tutto fa...

giovedì 28 aprile 2016

Java - leggere tutti i file di una directory e scriverne il contenuto su file

Stessa identica cosa dello script in perl solo in java. Ho usato delle librerie esterne (per il log) e qualche classe in piu' (di utilita' etc).

Se non avete voglia di rileggervi i requisiti erano questi: La richiesta e' questa: leggere un x numero di files (non specificato) la cui estensione non e' nota e buttare tutto su un unico file. Inoltre e' richiesto di non metterci troppo tempo negli sviluppi e non c'e' richiesta di raffinatezze grafiche o robe cosi' (aka seghe mentali).

Di conseguenza ho eliminato del tutto l'interazione con l'utente (salvo un file di log)



Tre packages. Forse possono sembrare un eccesso per un progetto cosi' piccolo, ma fidatevi non e' cosi'. Avere una buona organizzazione mentale, e' fondamentale per tenere in ordine nei progetti, e questo e' indifferente che il progetto abbia 3 classi o 3000. Deve essere un processo automatico. Cosi' come i commenti. I packages:

  • file: contiene le classi che si occupano dei file, in questo caso chi legge/scrive
  • main: contiene la classe che esegue materialmente il codice (il main)
  • util: contiene le classi di utilita'

La Classe FileManager

Si occupa di leggere e scrivere i file, ha 4 metodi:

  • getListFile(file): che restituisce tutto quello che contiene la directory passata come parametro
  • readFile(File): legge il contenuto di un file e lo restituisce sotto forma di lista di stringhe
  • writeFile (String, List): legge il contenuto di una lista di file (passata come parametro e li scrive in un nuovo file (il cui nome e' passato come parametro)
  • write(BufferedWriter, List): usa un buffered writer passato come parametro per scrivere la lista passata (questo consente di scrivere piu' file in un unico stream e chiudere suddetto stream solo alla fine

La Classe EntryPoint

C'e' poco da dire, prende il path locale e lo passa al file manager, inoltre logga (come info) i vari file scritti e gli eventuali errori (come error) usando gli appositi metodi della classe LoggingUtil

La Classe LoggingUtil

ha 3 metodi statici.

  • getLogger(): per avere un'istanza del logger - se il log e' null lo istanzia perima di restituirlo
  • info(String): scrive la stringa come info
  • error(String, Throwable): scrive un error con il messaggio e lo stacktrace
A proposito di getLogger(): usa un basic configurator per prendere caricare il file log4j.properties, e' necessario usare un file appender da dare in pasto al log, altrimenti non avrete alcun file.

La Classe Utility

Non c'e' molto perche' non mi serviva molto, ho due metodi

  • formatDate(Date, String): formatta la data in stringa usando il pattern specificato
  • getActualTime(): prende la data attuale e formatta prendendo solo ora minuti e secondi separati da :

Il progetto Java e' piu' complesso, a parita' di risultato, e anche piu' pesante in termini di dimensioni (400KB rispetto ai 2 del perl) e anche di prestazioni. Ma ha il vantaggio che quasi tutti hanno una JRE installata e ha la possibilita' di crescere se viene creata un'interfaccina in swing per chiedere quali file mergiare e dove salvare il file mergiato (e come chiamarlo). Ma questo viene meno ai principi di semplicita' e velocita' di svilluppo che erano stati richiesti.