Quattro mesi report

Sono quattro mesi che ormai lavoro in un ecosistema che non è Microsoft-centrico e volevo raccontare un primo bilancio: il codice si scrive in Java (parte in 1.7, grossa parte addirittura in 1.6), usiamo tool Apache per la build, i database sono MySQL, ecc. Il tutto gira su MacOS, almeno per tre su quattro di noi del team remoto.

In passato ho giochicchiato un po’ con MacOS ma non ho mai fatto niente di produttivo e soprattutto remunerato. Le mie opinioni sono queste:

  1. parlando di lavoro, Windows è a man bassa molto più stabile di MacOS. Sarà colpa del fatto che faccio girare Windows su una virtual machine, ma io osservo un Kernel Panic per settimana. La stragrande maggioranza di questi avviene (credo) durante le power transition. A livello di usabilità però MacOS latest è un pelino meglio di Windows 8.1.1.1.1 ma drasticamente meglio di Windows 8.0, l’OS che usavo per lavoro nell’azienda precedente
  2. se chiedessi a mia nonna di scrivere un Database Engine da zero sono sicuro che farebbe molto meglio di MySQL. Quando c’è un KP lo stato del DB si corrompe nonostante il DB venga usato molto sporadicamente: i DB dovrebbero garantire coerenza anche nei casi in cui si stacca la spina dal muro in maniera violenta. MySQL, almeno nella versione che stiamo usando su Mac, va in palla nonostante sia praticamente fermo. Per non parlare del fatto che neanche mia nonna si sognerebbe di far coincidere i due valori di stringa vuota e null, cosa vera fino alla versione 5.5 (precedente)
  3. la differenza tra Java e C# è abissale, l’effetto è che alla fine mi sento come se mi avessero amputato entrambe le mani. Un’immagine può rendere meglio l’idea:

C#Java

A sinistra C#/.Net; a destra Java/JVM. L’argomento richiede sicuramente un successivo approfondimento, ma… sarà pure che ci sono migliaia e migliaia di librerie, ma nel 2014 codice così mi fa letteralmente vomitare:

private static void seek64(FILE fp, long upos) {
    LIBC.fseek(fp,0,0); // start at the beginning
    while(upos<0) {
        long chunk = Long.MAX_VALUE;
        upos -= chunk;
        LIBC.fseek(fp,chunk,1);
    }
    LIBC.fseek(fp,upos,1);
}

(eh sì, quei genii che hanno disegnato il linguaggio hanno pensato che i tipi senza segno fossero “pericolosi”).

Però almeno finalmente sono arrivate la lambda.

-quack

Pubblicato mercoledì 21 maggio 2014 alle 6:36 PM - 33 commenti so far
Archiviato in: Codice

Intentional leave

Venerdì scorso ho lasciato la mia azienda precedente: sono stati due anni (poco meno) veloci e intensi in cui ho imparato tanto e lavorato fianco a fianco ad una leggenda.

Il caso ha voluto che una nuova offerta di lavoro venisse a me nella forma di numeri che davvero non si potevano rifiutare: il mio nuovo datore di lavoro è lui stesso un’altra leggenda (Magnet) e porta in sé una caterva di cambiamenti incredibili. Per la prima volta dico addio all’ecosistema Microsoft per lavoro; scriviamo codice in Java e per Android/iOS e per questo mi hanno fornito di MacBook Pro super carrozzato che userò con MacOS (qualcuno preferisce Windows ma per me l’idea di imparare a scrivere codice iOS e allo stesso tempo dare un taglio più deciso è più appealing). Resta il fatto che non ho cambiato idea su alcune questioni fondamentali.

La cosa più bella? Sono l’employee numero due nello stato di Washington.

Auguratemi in bocca al lupo.

-quack

Pubblicato domenica 19 gennaio 2014 alle 8:08 PM - 53 commenti so far
Archiviato in: Codice

L’inevitabile decadenza del software

Mi piace Google Chrome perché semplice, pulito, pochi fronzoli e ha un Sync decente. Vero fino all’altro giorno, quando i bookmark del PC dell’ufficio non si sincronizzavano più. Non ci ho fatto caso più di tanto poi oggi, incuriosito, guardo i settings:

“Sync has been stopped via the Google Dashboard.”

Probabilmente da quel momento nel passato, quando la batteria del telefono era molto scarica e mi serviva tenerlo in vita, in cui ho disabilitato temporaneamente la sincronizzazione.

Clicco il pulsante advanced settings e mi porta su una pagina in cui devo fare il login con le credenziali Google. Fatto il login la pagina si chiude nel nulla.

Riclicclo il pulsante advanced settings e non accade nulla.

Da buon software engineer, “esco ed entro” dal programma. Niente tranne una voce che dice “manage sync via the Google Dashboard” che non porta a nulla. Noto un’altra voce “riavvia il browser in modalità Windows 8”. Fatidica curiosità: clicco e Chrome si chiude. Non riappare niente. Clicco l’icona sulla taskbar (che nell’ultima versione si è aggiunta da sola violando le policy di Windows) e niente. Riclicco e rieccolo.

La sincronizzazione riparte, ma al contrario. Ovvero i nuovi bookmark spariscono.

Domanda: a che serve rilasciare la versione 26 con tutti i fronzoli quando la versione 5 funzionava benissimo? Persino Chrome, che ha il vantaggio di avere una legacy praticamente nulla, decade molto in fretta.

C’est la vie.

-quack

Pubblicato mercoledì 8 maggio 2013 alle 7:22 PM - 5 commenti so far
Archiviato in: Google, Codice

Tribal Knowledge

Qui in Intentional il modello di sviluppo è abbastanza flessibile. Però ogni mattina c’è un meeting in cui ognuno racconta quello che ha fatto il giorno precedente e quello che farà nelle successive ore lavorative. Nei miei primi meeting mi sembrava di essere sbarcato su un altro pianeta: oltre allo slang tipico aziendale, c’era da assorbire uno strato abbastanza spesso di notazione ungherese.

Durante uno di questi meeting ho ascoltato per la prima volta le parole tribal knowledge per descrivere un insieme di conoscenze tramandato per via di esperienza lavorativa di gruppo, magari tramite striminzita documentazione scritta.

Era un concetto che nel tempo ho inconsciamente assimilato e già conoscevo e a cui veniva per la prima volta associata una definizione pseudo-formale. La tribal knowledge esiste ovunque ma è estremamente preponderante nei progetti software, secondo una visione estremamente personale della cosa.

Personalmente è il motivo per cui, il rilascio di software tramite codice sorgente, è irrilevante rispetto alle metriche di qualità. Chi ha a disposizione codice sorgente può chiaramente modificarlo, ma molto difficilmente migliorarlo senza assorbire la tribal knowledge necessaria laddove le modifiche da apportare non siano estremamente semplici. TK fatta di “se cambi questo parametro vai ad incidere su questo fattore che non è assolutamente ovvio, in quanto abbiamo fatto delle prove e scoperto che”.

Bottomline: avere il codice sorgente è senz’altro un valore in più, ma non si dovrebbe barattare per nessun’altra qualità del software che si va ad usare.

-quack

Pubblicato lunedì 22 aprile 2013 alle 10:20 PM - 0 commenti so far
Archiviato in: Codice

Cercare numeri reali

einstein[1]Soluzione pratica ad un problema comune. È la seconda volta che si manifesta in meno di due anni e avrei pensato che la soluzione a mio dire più pratica di tutte fosse anche la più intuibile. A guardare le facce ogni volta che la propongo direi di no.

Il problema: cercare e visualizzare tutte le righe (di una tabella, lista, contenitore, ecc.) contenenti valori in virgola mobile. Ovvero: se l’utente cerca “2.5” il valore 2.4998 dovrebbe essere “accettato”?

Soluzione: usare i principi della notazione scientifica. Ovvero convertire:
(X == 2.5) in (2.45 < X <= 2.55); similmente (X == 2.50) in (2.4995 < X <= 2.505) e
(X <= 2.5) in ( X <= 2.55). Lasciare ( X < 2.5) così come è e agire simmetricamente per il verso opposto.

Ora spero nel premio Nobel per il parsing.

-quack

Pubblicato martedì 6 novembre 2012 alle 1:09 AM - 2 commenti so far
Archiviato in: Codice