giovedì 24 settembre 2015

Java - rimozione degli spazi e altri caratteri

Come rimuovere gli spazi da una stringa

ma anche altri caratteri

17 Ottobre 2015: l'articolo e' stato aggiornato a seguito di una segnalazione
Primo Modo (non ottimizzato):
diciamo questo serve piu' per esercizio che di reale utilita'
sostanzialmente si crea un array di char (usando il metodo toCharArray) e si "scorre" tutto l'array... se il carattere non e' uno spazio si aggiunge alla stringa che verra' restituita, se lo e' ovviamente no.
Va da se che questo metodo e' altamente dispendioso in termini di risorse in quanto bisogna percorrere tutta la stringa (pensate ad un testo molto lungo invece che ad una singola parola). Quindi vale come esercizio accademico ma non ne consiglio l'utilizzo.

Secondo Modo (ottimizzato):
si usa il metodo split, passandogli lo spazio come parametro (Unicode: \u0020) poi si prendono i vari tronconi (chunks) e si "ri-appiccicano" insieme nella stringa da restituire. Va da se' che non dovendo scansionare tutta la stringa questo metodo e' molto piu' efficiente - addendum: del primo.

Per rimuovere qualsiasi altro carattere (o stringa) 

1) farselo passare come parametro 

2) sostituirlo dove nei metodi sopra c'e' lo spazio

In alternativa:
Usare il metodo replace passando come primo parametro la stringa (o il carattere) da levare e come secondo una stringa vuota ("")


In realta' prendendo una tabella comparativa da questo post di stackoverflow si vede che lo split e' uno dei metodi peggiori per cui su grandi volumi di file e' molto piu' efficace la classe Scanner

Tokenizer String.split() while+SubString Scanner ScannerWithCompiledPattern
4.0 ms 5.1 ms 1.2 ms 0.5 ms 0.1 ms
4.4 ms 4.8 ms 1.1 ms 0.1 ms 0.1 ms
3.5 ms 4.7 ms 1.2 ms 0.1 ms 0.1 ms
3.5 ms 4.7 ms 1.1 ms 0.1 ms 0.1 ms
3.5 ms 4.7 ms 1.1 ms 0.1 ms 0.1 ms

martedì 17 marzo 2015

Isis in Italia - studenti terza media ci convertiamo subito


- Questo l'inquietante titolo de ilsussidiario.net (link all'articolo) -
Lasciamo perdere l'autorevolezza della testata, in quanto testate ben piu' blasonate non sono nuove ad errori e concentriamoci sulsucco del discorso.

Una statistica se non ha un campione significativo lascia un po' il tempo che trova, inoltre può essere interpretata in molto modi differenti (un esempio del buon Salvo di Grazia, che spiega molto bene come si fa una cosa del genere).

Allora sono andato a leggere l'articolo. Spicca subito la mancanza di fonti (vedere le sottolineature nello screenshot): una terza media, una scuola statale, una citta' di provincia.

Ottimo modo di fare bufale, nessuno puo' verificare nessuno puo' smentire. Gia' questo basta e avanza a chiudere la questione, nessun dato oggettivo. Inoltre se fosse vero (e nessuno puo' dimostrare che lo sia) si tratterebbe di UNA classe (per altro non documentata come affermazione). Per cui il campione non e' assolutamente significativo. Ma la chicca arriva adesso: non serve nominare perche' simile a mille altre
eccalla'... lo volevi? Visto che UNA classe avrebbe manifestato l'intenzione di convertirsi allora TUTTE le terze medie d'Italia (e del mondo gia' che ci siamo) si vogliono sicuramente convertire...

Un po' come dire, siccome esistono dei gatti rosa (non importa che dica dove e quando tanto ce ne sono migliaia tutti uguali) allora tutti i gatti sono rosa...

domenica 15 marzo 2015

Antibufala fast

Il post e' stato aggiornato dopo la pubblicazione iniziale

il succo* della bufala: iniettano sangue infetto da hiv nelle arance (e poi tu le mangi e prendi l'aids)

perche' e' una bufala:

  1. il virus dell'hiv non sopravvive all'esterno dell'organismo che lo ospita: fonte (sopravvive massimo 30 minuti ma perde la capacità di infettare dopo 30 secondi
  2. non si contrae mangiandolo (link: come NON si trasmette l'aids)
  3. esistono le arance rosse (che sono quelle mostrate nella foto dell'appello)

Un'arancia con striature rosse...


* e' proprio il caso di dirlo

martedì 3 marzo 2015

Attivita' ispirate alla tv/cinema?


Signore degli Anelli

  • Optometrista da Saruman: non riducetevi cosi
  • Videosorveglianza da Saruman (in alternativa)
  • Omeopata Gandalf il grigio: tanto quello o la stregoneria...
  • Agenzia viaggi da Aragorn: dobbiamo proprio passare per Moria?
  • Barbalbero serre e dintorni: portiamo le piante ovunque tu voglia (o dovunque vogliano loro)
  • Farmacia da Aragorn: ho trovato questa pianta strana e ci curo un po' tutto...

Star Wars

  • Pizzeria da obi-wan kenobi: queste sono le pizze che stavate cercando
  • La locanda di Yoda: in palude posto per tutti c'e'
  • Doggy Sitter Han Solo: se riesco a tenere a bada Chewbacca...
  • Banca del seme Darth Vader: I am your father (or at least one of them)

Altro

  • Rosticceria da Braccio di Ferro: non solo olivie all'ascolana
  • Baby Parking da Erode
  • Terme Labano: loc. Labano Terme
  • FGC - Flash Gordon Courier: la velocita' la garantiamo, le merci intere no

martedì 24 febbraio 2015

Regole del blog


Rispetto

  • Rispetto: questa è la parola chiave. Rispettare gli altri e le loro idee.
  • opinione e dato di fatto: un'opinione e' qualcosa di indimostrabile (es. il rosso è meglio del verde). Un dato di fatto e' qualcosa di incontrovertibile e dimostrato/dimostrabile (es l'acqua è composta da due molecole di idrogeno e una di ossigeno). Nel primo caso si rispetto per tutti, nel secondo rispetto per solo cio' che e' vero e dimostrato/dimostrabile tale.
  • Le affermazioni richiedono prove e/o fonti: A meno che non sia un qualcosa di comunemente accettato (v. l'esempio dell'acqua precedente).
  • L'onere della prova spetta sempre a chi fa l'affermazione: se non è possibile dimostrarne la falsità (tipo dimostrare la falsita' delle scie comiche) allora la teoria non è verificabile. Per essere verificabile una teoria deve essere falsificabile (ovvero devo poter dimostrare che e' falsa). Quindi se affermo che la sostanza X ha un certo effetto, al momento del test questa sostanza o ha quell'effetto o non lo ha. Quindi o è vera o è falsa...
  • Offese gratuite: non verranno tollerate da nessuno
  • Minacce: idem con segnalazione alla Postale
  • Se non vi piace un argomento: non siete obbligati a leggere, se discutete civilmente e quello che dite e' vero non verrete mai bannati, ma se proprio non vi piace quello che penso (es. windows e' una m...a e i capi progetto andrebbero crocifissi come pubblico monito) andate pure da un'altra parte, internet e' tanto grande...
  • Niente spam: la pubblicita' non interessa a nessuno, tantomeno a me. Se volete pubblicizzare il vostro sito o il vostro $MERDAVIGLIOSO prodotto esistono tanti altri modi e tanti altri posti. Sicuramente non qui.
  • Divertitevi: e non prendetevi(/mi) troppo sul serio...

lunedì 16 febbraio 2015

Code re-abuse

Il titolo è preso di qui

Il riutilizzo del codice non è una cosa sbagliata di per sé, purché venga fatto sotto certe condizioni. La prima della quale è che si usano i metodi degli oggetti e non si fa copia_e_incolla. In questo modo si centralizzano le funzioni delle quali si ha più bisogno, si facilità la manutenzione (la correzione di un bug si propaga immediatamente) nonché la riusabilità e la manutenibilità (se uso nomi significativi ho alte probabilità di trovare il punto di codice che fa quello che sto cercando). Il secondo caso invece propaga bug e rende dificile/impossibile manutenere il codice perché ci sono n punti da correggere (dove n è il numero di volte che questa funzione viene usata, e quindi più è usata più casino diventa).

ovviamente se devo creare un progetto ex-novo non posso usare gli oggetti dell'altro progetto a meno di non linkarlo come dipendenza (oppure di usarlo come libreria). Cosa che sconsiglio caldamente in quanto di solito l'altro progetto fa tutt'altro. Quindi o si crea una libreria (.jar) con le funzionalità che servono, e si mantiene aggiornata quella, oppure si prendono le classi che ci servono e si reimportano nel progetto nuovo.

La prima soluzione è applicabile se le classi fanno tutto quello che ci serve e solo quello. Ma se devono fare anche altro o cose diverse, quesa soluzione non è immediatamente applicabile.

Sorvoliamo sul fatto che il progetto sl quale sto lavorando è scritto abbondantemente alla ca%%@ in quanto il sedicente programmatore deve aver letto questo, inoltre si è pure impegnato per fare peggio, ma se inizio ad elencare tutto quello che è stato fatto di sbagliato non ne usciamo piu'.

Comunque sia cos'ha fatto il nostro? Ha preso tutte le classi del progetto vecchio (si TUTTE!!!) e le ha infilate nel progetto nuovo (anche quelle che non servivano a niente). Poi ha riutilizzato gli oggetti senza cambiarne il nome quindi ti ritrovi ad avere classi e metodi con nomi assolutamente non significativi...Riuso del codice o riabuso del codice?

venerdì 13 febbraio 2015

Java calcolo di fattoriale

Definizione di fattoriale

Allora innanzitutto cosa vuol dire n! (n fattoriale)?
vuol dire n * n -1 * n -2 ... * 1

Ci sono due modi di calcolarlo:

  • Ricorsivamente
  • Iterativamente

Iterativamente

In soldoni si decrementa il parametro finché non vale 1. Ovviamente la condizone del ciclo è su quel parametro (è buona norma di programmazione che non esistano cicli infiniti e di conseguenza che sia la condizione del ciclo a determinare la sua terminazione, e non attraverso un if/break* che tra l'altro è indice di pessima programmazione, così come l'abuso di continue, ma ne parlerò un'altra volta).
*Il break su cicli infiniti, non il break in se', che in determinate circostanze e' giusto utilizzare

Ricorsivamente

La cosa più interessante è un metodo ricorsivo, ovvero un metodo che invoca se stesso fino a quando non raggiunge uno schema predefinito che ne determina il ritorno. In questo caso la condizione è che il parametro valga 1. Se il parametro non vale uno si invoca il metodo passandogli come parametro quello ricevuto decrementato di uno.