giovedì 6 ottobre 2011

iSad

Non sono mai stato un grande fan di Apple, devo ammetterlo. Forse perché non ho avuto l'occasione di conoscere la Apple "giusta", quella che faceva i computer semplici e belli. Ero troppo piccolo allora, ed erano anche altri tempi. L'informatica era tutta un'altra cosa e, forse, non era nemmeno un cosa. Era un'idea, anzi, l'inizio di un'idea. E le idee, come sempre, nascono da qualcuno.
Oggi, verso le due di notte (ora italiana), se n'è andato forse il più importante di quei "qualcuno". Un uomo che è stato capace di fare ciò che alla maggior parte di noi riesce talvolta persino impossibile: avere idee. Giuste.
Non ho mai avuto il privilegio di conoscere Steve Jobs, ma stamattina, quando ho appreso la notizia della sua scomparsa, ho provato grande tristezza, come se un supremo giudice mi avesse condannato a vivere il resto della vita nel passato anziché nel futuro, come se qualcuno avesse deciso che il mondo doveva rallentare un po', scalare una marcia.
Sì, perché Jobs la sapeva lunga. Vedeva avanti, lui. Non a caso è stato da molti definito un visionario e io sottoscrivo in pieno questa definizione.
La sua storia ha dell'incredibile e leggerla è di per sé un grande insegnamento. Fonda la Apple nel '77 ed è subito è boom. Dopo 8 anni è la stessa Apple, all'apice delle sue manie di grandezza, a farlo fuori. Lui se ne frega e fonda la Pixar (sounds familiar?). Dopo altri 11 anni Apple è in profonda crisi e lo richiama. Lui (ri)prende le redini, trasforma la Apple così come la conosciamo oggi e finisce su tutti i giornali (link).
Oggi questo visionario non c'è più e io sono triste. L'ultima delle sue visioni l'ha avuta qualche tempo fa quando ha lasciato definitivamente le redini di Apple in favore di Tim Cook. Aveva visto anche la sua morte, lui, e si è fatto da parte prima.
Che uomo.

PS: Non so cosa sarà di Apple dopo oggi, ma le premesse non sono delle migliori. Mi spiace solo che in punto di morte Steve Jobs abbia dovuto veder uscire l'iPhone 4s. O forse è stato proprio quello il colpo di grazia.

venerdì 3 giugno 2011

Selezionare un elemento a caso da un enum

L'utilizzo degli enum in Java è molto comodo, specie se confrontato con lo stesso costrutto in altri linguaggi di programmazione (ad esempio il C, dove l'enum è un semplice int un po' abbellito).
Tuttavia, alcune operazioni possono non essere così immediate. Una di queste è la scelta di un valore a caso da un enum. Ad esempio:
 public enum Semi {
cuori, quadri, fiori, picche
}
Supponiamo di voler selezionare un valore a caso dai semi delle carte. Dato che non esiste un costrutto che permetta di farlo semplicemente, ho scritto una piccola classe di utilità per implementare la funzione sopra detta.
public class RandomEnum<E extends Enum<?>> {

private static final Random RANDOM = new Random();
private final E[] values;

public RandomEnum(Class<E> e) {
values = e.getEnumConstants();
}

public E random() {
return values[RANDOM.nextInt(values.length)];
}
}
L'implementazione è abbastanza banale. L'utilizzo altrettanto:
RandomEnum<Semi> r = new RandomEnum<Semi>(Semi.class);
System.out.println(r.random());

martedì 19 aprile 2011

Il tramonto degli smanettoni

Questo post che ho letto recentemente l'ho trovato talmente bello che mi sono preso la libertà di proporre una mia libera traduzione. Eccola:

Quando DVD Jon fu arrestato dopo aver scardinato l'algoritmo di cifratura CSS, fu incriminato per "violazione di computer non autorizzata", il che portò i suoi legali a porre l'ovvia domanda: "quale computer avrebbe violato senza autorizzazione?". Risposta del procuratore: "il suo".

Se quanto sopra non vi ha fatto fermare il cuore per un attimo, potete smettere di leggere adesso.

Quando stavo diventando grande, "violare" era qualcosa che potevi fare solo ai computer degli altri. Ma mettiamolo un attimo da parte per tornarci dopo.

Mio padre è stato un professore universitario per gran parte della sua vita adulta. Una volta decise di prendersi un anno sabbatico per scrivere un libro. Aveva da parte abbastanza soldi per prendersi un computer e una cosa moderna chiamata word processor. Scrisse, modificò e scrisse di nuovo. Era talmente ovvio che fosse meglio di una macchina da scrivere che il fatto che fossero soldi ben spesi era fuori questione.

Si dà il caso che questo computer veniva venduto con pre-installato il linguaggio di programmazione BASIC. Non c'era neanche bisogno di avviare un dischetto col sistema operativo. Bastava accendere il computer e premere Ctrl-Reset per avere un prompt. A questo prompt, si poteva scrivere un intero programma e poi scrivere RUN, e quello, cazzo, sarebbe andato.

Avevo 10 anni. Era 27 anni fa ma mi ricordo ancora come mi sono sentito quando ho realizzato che tu - cioè io - avresti potuto far fare a quel computer tutto quello che volevi scrivendo le parole giuste nell'ordine giusto e dando il comando RUN e quello, cazzo, sarebbe andato.

Quel computer era un Apple ][e.

All'età di 12 anni, scrivevo programmi BASIC così complessi che il computer andava in out of memory per contenerli. A 13 anni scrivevo programmi in Pascal. A 14, programmavo in assembler. A 17 competevo (e vincevo) nelle gare di Programmazione alle olimpiadi nazionali della scienza. A 22, ho iniziato a lavorare come programmatore.

Oggi sono un programmatore, uno scrittore tecnico, un hacker nel senso Hackers and Painters del termine. Ma non si diventa hacker programmando; si diventa hacker smanettando. E' lo smanettare che fornisce quel senso di magnificenza. Bisogna uscire dal sistema, tirar giù le grate di sicurezza, strappare i livelli di astrazione che il computer fornisce per la stragrande maggiornaza delle persone che non vogliono sapere come tutto ciò funzioni. E' ad esempio usare l'editor di settori Copy ][+ per capire come il sistema operativo fa il boot, poi modificarloin modo che il computer faccia un suono ogni volta che legge un settore dal disco. O visualizzare uno splash screen all'avvio prima di listare il catalogo del disco e visualizzare il prompt del BASIC. O copiare una miriade di comadi figosi dal "Beagle Bros. Peeks & Pokes Chart" e provare a capire che cazzo abbiamo appena fatto. Solo per farlo. Perché era figo. Perché spaventava i miei genitori. Perché dovevo assolutamente sapere come funzionava tutto.


Più tardi, ci fu l'apple IIgs. A ancora dopo, il Mac IIci. MacsBug. ResEdit. Norton Disk Editor. Fermatemi se qualcuno di questi vi suona familiare.

Apple ha fatto le macchine che hanno fatto di me quello che sono. Sono diventato chi sono smanettando.

Il titolo del post è rubato da "On the iPad" di Alex Payne, che quoto per un bel pezzo:

L'iPad è una cosa attraente, progettata con cura e profondamente cinica. E' una macchina di consumo digitale. Come sottolineano Tim Bray e Peter Kirn, è un dispositivo che fa poco per attivare la creatività...

La tragedia dell'iPad è che sembra davvero fornire un modello di computer migliore per molte persone - probabilmente la maggioranza delle persone. Al bando i concetti e le confuse metafore degli ultimi trent'anni di informatica. Al bando l'abilità di modificare e smanettare all'infinito senza un particolare guadagno. L'iPad è semplice, diretto, privo di manutenzione...

Ciò che mi disturba maggiormente dell'iPad è questo: se avessi avuto un iPad anziché un computer vero quando ero piccolo, non sarei mai diventato un programmatore oggi. Non avrei mai avuto l'abilità di eseguire qualsiasi stupido, potenzialmente pericoloso, enormemente educativo programma potessi scaricare o scrivere. Non avrei mai avuto la possibilità di usare ResEdit e modificare il suono di avvio del MAc in modo da poterci smanettare a tutte le ore senza disturbare i miei genitori.
Ora, so bene che saremo in grado di sviluppare i nostri programmi per iPad allo stesso modo in cui lo siamo oggi per l'iPhone. Tutti possono sviluppare! Tutto quello che serve è un Mac, XCode, un "simulatore" iPhone e 99$ per un certificato di sviluppatore a scadenza. Il "certificato di sviluppatore" è in realtà una chiave crittografica che permette (temporaneamente) di ottenere un livello di accesso (leggermente) più alto a... al tuo stesso computer. E questo va bene - o almeno è accettabile - per gli sviluppatori di oggi, perché loro sanno già di essere sviluppatori. Ma gli sviluppatori di domani non lo sanno ancora. E senza la libertà di smanettare, alcuni di loro non lo sapranno mai.

(Come nota a margine, io mi sbagliavo e Fredrik aveva ragione, Chrome OS avrà uno switch perché gli sviluppatori eseguano il loro proprio codice. Non conosco le specifiche di come funzionerà, se sarà un bottone o uno switch o che altro. Ma ci sarà una modalità ufficialmente supportata per gli sviluppatori di oggi e, cosa molto più importante, per quelli di domani.)

E lo so, lo so, lo so, si può scardinare l'iPhone (ri)guadagnare l'accesso di root, ed eseguire tutto quello che cazzo si vuole. E non dubito che qualcuno troverà anche il modo di scardinare l'iPad. Ma non voglio vivere in un mondo dove uno deve violare il suo proprio computer prima di iniziare a smanettare. E certamente non voglio vivere in un mondo in cui smanettare è illegale (DVD Jon è stato assolto, a proposito. Il procuratore è ricorso in appello, e lui è stato assolto di nuovo. Ma chi ha bisogno di leggi quando hai la crittografia a chiave pubblica dalla tua parte?).

Una volta, Apple faceva macchine che hanno fatto di me quello che sono. Sono diventato chi sono smanettando. Adesso sembra che stiano facendo tutto quanto in loro potere per impedire ai miei figli di scoprire quel senso di meraviglia. Apple ha dichiarato guerra a tutti gli smanettoni del mondo. A ogni aggiornamento del software, la generazione precedente dei "jailbreak" smette di funzionare e la gente deve trovare nuove strade per entrare dento i propri computer. Non ci sarà mai un MacsBug per iPad. Non ci sarà un ResEdit, o un Copy ][+ sector editor, o un iPad Peeks & Pokes Chart. E questa è una vera perdita. Magari non per te, ma per qualcuno che ancora non lo sa.

giovedì 7 aprile 2011

SQL Server: query cross-server

A volte capita di dover eseguire una query tra un server e l'altro, ad esempio per copiare delle tabelle da una macchina di integrazione e una di sviluppo o viceversa. Ecco spiegato, in pochi semplici passi, come fare:
  1. Innanzi tutto, bisogna abilitare questa funzione su SQL Server, perché di default è disattivata (motivi di sicurezza). Per fare ciò si utilizza la SP sp_configure.
    exec sp_configure 'show advanced options', 1
    reconfigure

    exec sp_configure 'Ad Hoc Distributed Queries', 1
    reconfigure
  2. Collegarsi alla macchina di destinazione (quella dove andrà fatta la INSERT, per intenderci)
  3. Eseguire la seguente query:
    INSERT INTO
    [target_db].[target_schema].[target_table]
    ([column_1],...,[column_N])
    SELECT
    [column_1],...,[column_N]
    FROM OPENDATASOURCE(
    'SQLOLEDB',
    'Data Source=server[,port];User ID=user_id;Password=password'
    ).[source_db].[source_schema].[source_table]
Il gioco è fatto. A questo punto, salvo imprevisti (nell'informatica non si sa mai ;) ) l'istruzione dovrebbe aver copiato una tabella da un server all'altro. Una volta fatto ciò ricordarsi sempre di ripristinare le impostazioni di sicurezza al valore precedente.

martedì 11 gennaio 2011

Di tecnici e manager

Un uomo in mongolfiera capì di essersi perso. Così ridusse l'altitudine e vide una donna in lontananza. Si accostò e chiese: "Scusi, mi potrebbe aiutare? Ho promesso a un amico che lo avrei incontrato un'ora fa, ma non so dove sono."

La donna rispose: "Lei è su una mongolfiera, a circa 10 metri dal suolo. Si trova tra i 40 e i 41 gradi di latitudine nord e tra i 59 e i 60 gradi di longitudine ovest."

"Lei è un tecnico, vero?" disse l'uomo.

"Lo sono" rispose la donna, "come lo sa?"

"Tutto quello che mi ha detto, probabilmente, è tecnicamente corretto, ma non ho idea di cosa farmene delle sue informazioni e, di fatto, sono ancora perso. Francamente, lei non è stata di molto aiuto. Non solo, ha anche ritardato il mio viaggio."

"Lei è un manager, vero?" rispose la donna

"Lo sono" rispose l'uomo, "come lo sa?"

"Beh," disse la donna, "lei non sa dove si trova o dove sta andando. E' arrivato in alto grazie a un pallone gonfiato. Ha fatto una promessa ma non sa come mantenerla e si aspetta che le persone al di sotto di lei risolvano i suoi problemi. Di fatto, lei è nella stessa posizione in cui era prima che ci incontrassimo, ma ora, per qualche motivo, è colpa mia."
BlogItalia.it - La directory italiana dei blog