A Ovest Di Paperino

Welcome to the dark side.

  • Congruenze

    Piccole grandi formule interessanti. Da giovane ero in grado di calcolare la prima grazie ad un aiuto mnemonico per la parte più difficile relativa al mese e semplificando il calcolo limitandolo al secolo allora in corso e già passato. Raccolte qui per un piacere puramente estetico.

    La congruenza di Zeller:

    h = \left(q + \left\lfloor\frac{13(m+1)}{5}\right\rfloor + K + \left\lfloor\frac{K}{4}\right\rfloor + \left\lfloor\frac{J}{4}\right\rfloor - 2J\right) \mod 7,

    (Analisi)

    La luna nuova:

    d = 5.597661 + 29.5305888610 \times N + (102.026 \times 10^{-12})\times N^2

    (Spiegazione)

    Formula di Oudin:

    image

    (spiegazione)

    -quack

  • I will not upgrade

    Per la prima volta, per motivi puramente tecnici, non farò l’upgrade alla prossima versione di Windows.

    Nonostante sotto il cofano ci siano diverse feature interessanti e come diceva il mio sommo maestro, è la somma che fa il totale.

    Non ho un touch screen ed – escluso l’acquisto di un tablet ARM/x86 in futuro – non ne vedo di nuovi all’orizzonte.

    I tre miei PC resteranno per un bel po’ fermi a Windows 7: la mia workstation, per motivi ovvi; il media center – per motivi più che ovvi, che chissà come sarà l’esperienza tra codec pack e feature aggiuntive – ed il laptop della formichina.

    Diciamocelo: windows 8 di buono porterebbe solo le nuove applicazioni metro; che tra l’altro almeno per quanto riguarda la suite live, non sono altro che versioni fortemente decurtate di quelle disponibili oggi. Pare che il mantra sia consistency prima di tutto, ovvero un’esperienza quanto più simile tra dispositivi ARM e Corei11SuperPompati. Che siccome non ci si può far girare bene la roba per Corei11 sugli ARM, il tutto si traduce in portare l’esperienza ARM su PC.

    No grazie; salvo miracoli dell’ultim’ora.

    -quack

  • Review Process

    Non è un segreto l’esistenza del cosiddetto review process in quasi tutte le grandi aziende e non solo quelle “tecnologiche”. Anzi: tale processo di valutazione è nato molto lontano. Si basa sull’idea di poter differenziare la work force in tre classi e di valutare e remunerare i dipendenti in base ad una “distribuzione” a priori 20%/70%/10%. Ovvero in base ad una legge universale che stabilisce che in una popolazione abbastanza grande gli elementi di prim’ordine ne costituiscono il 20%, quelli di secondo ordine ne costituiscono il 70% e quelli di terz’ordine, possibilmente da scartare, il dieci percento.

    In base a tali principi si racconta che tale Jack Welch sia riuscito a moltiplicare i pani ed i pesci come CEO della General Eletrics.

    In MS il modello, già alla base estremamente discutibile, è stato implementato quasi pari-pari. È discutibile in quanto, seppur la statistica fosse corretta, la scienza statistica ci dice che un modello può essere applicato solo a posteriori e per descrivere un fenomeno, non certamente per plasmarlo.

    Poi c’è un altro problema: probabilmente in GE ci saranno centinaia di operai che producono viti e bulloni, per cui alla fine della fiera è chiaro che quelli che ne producono 100, stabiliti parametri di qualità uniformi, lavorano e vanno premiati meglio di quelli che ne producono 90 e questi meglio di quelli che ne producono 50. Ma in una azienda dove si producono idee e righe di codice? 50 righe di MS Office sono uguali a 50 righe di Windows? E l’idea che è finita nell’implementazione di Bing vale quanto un’idea buona solo per un brevetto?

    Questo è solo il punto di partenza se vogliamo piuttosto distorto; la parte più esilarante è il processo in cui meriti e demeriti vengono assegnati ad essere persino più fragile della bacatissima teoria pseudostatistica che c’è dietro; e che sia bacatissima, se mi fosse mai servita una dimostrazione più lampante, lo dimostra il completo dietro-front di un mio amico ed ora ex-collega assunto come manager: all’inizio difendeva il “sistema” a spada tratta come processo “giusto ed equo”; dopo qualche anno ha espresso – ovviamente  in maniera privatissima – forti dubbi e scetticismi. Il tutto avviene tramite “calibrazione”, un meeting dove i manager si incontrano e discutono una forma preventiva di distribuzione; tale proposta si propaga verso l’alto ove i manager superiori controllano che la distribuzione di più team sia conforme, correggono e propagano a loro volta; le correzioni scendono verso il basso in meeting di calibrazione successive che prendono atto di tali correzioni, ovviamente sempre al ribasso, e vengono implementate in maniera estremamente brutale. In alcuni casi ci sono veri e propri scambi tra team e la moneta di scambio può essere una promozione o una scalata positiva/negativa di ranking. Per dare una forma “umana” a questa distribuzione, viene chiesto al singolo individuo di “misurarsi” e produrre esempi in cui sono chiari gli obiettivi assegnati nel periodo che si sta valutando con esempi di quali e quanti obiettivi sono stati completati, super-completati o mancati. Il manager poi commenterà, con frasi che sono puramente di circostanza, basando i suoi commenti sul numerillo (venti, settanta o dieci) che il processo ha stabilito come valore finale. Il tutto viene discusso, due volte l’anno, in un meeting a quattrocchi con il proprio manager.

    Un paio di punti che l’astuto lettore avrà già osservato: al meeting di calibrazione partecipano solo i manager; gli individual contributors hanno un’unica arma a disposizione, fare cose che abbiano una visibilità accecante altrimenti finiranno per essere alla mercé dei propri manager; i manager non sono incoraggiati nell’essere giusti in quanto ciò comporta diverse grane durante la calibrazione, ma nel saper dispensare brutte notizie nel miglior modo possibile; se si applica la teoria dei giochi una strategia vincente è quella di “coltivare” i 10%, ovvero fare in modo che ci siano persone che non possano sfuggire qualunque cosa facciano; e che per la proprietà della visibilità accecante capita molto spesso di vedere developer scrivere lunghe noiosissime ed inutili email con in “to:” il mondo intero.

    Fin qui ce ne sarebbe da far rivoltare lo stomaco, ma Ballmer ha “modificato” questo porcellum peggiorandolo in due modi:

    • cambiando le percentuali da 20-70-10 in 20-60-20 raddoppiando di fatto gli scontenti (da l’anno scorso)
    • rendendo praticamente impossibile il cambiare team a chi finisce in classe “C”; volendo si può fare ma il team di destinazione ha bisogno di chiedere il permesso di un VP per cui è più conveniente “assumere” qualcuno meno adatto di classe “A/B” che qualcuno che sia perfetto ma di classe “C”

    In base a quest’ultimo punto può succedere qualcosa di interessante: si finisce in un team sfigato (nel senso che non corrisponde in maniera ottimale ai propri interessi o ai propri skill); il nuovo manager ti classifica come “C” e non c’è possibilità di sfuggire. La casistica peggiore, di cui ho osservato già diverse istanze, è la schiavizzazione: si promette all’individuo un’uscita dal purgatorio in cambio di ore ed ore di straordinario (che non è retribuito) e nel caso peggiore si inventa una scusa per non onorare la promessa.

    Un ulteriore arma a disposizione del bad manager, che purtroppo è il tipo di manager più comune in quanto favorito dalla strategia migliore del giochino, è la promozione o meglio la non promozione; ci si aspetterebbe che una permanenza di almeno tre anni in classe A sia un’indicazione che l’individuo è pronto a nuove sfide, ma viene più che spesso usata come arma per trattenere i migliori employee soprattutto i delusi ed i delusi classe A sono una tipologia particolare; in quanto sono i primi a cambiare team non appena ottenuto l’agognato salto. Ma il bad manager sa che l’A-deluso non vorrà cambiare team in quanto tale operazione comporta un reset del timer legato alla promozione stessa, per cui la strategia migliore è l’attesa.

    Probabile che il goal di Ballmer sia di ridurre drasticamente il numero di employee (cresciuto poi a dismisura proprio durante il suo regno); sta di fatto che il giochino non garantisce la segatura dei mediocri che per una serie di possibilità incrociate tendono ad essere favoriti mentre quelli che hanno la possibilità di ricevere offerte migliori altrove vanno via. In Windows poi, dove i Senior IC sono considerati dei piantagrane visto che la vision è strettamente imposta dall’alto in stile Apple, la situazione è ancora peggiore.

    La notizia pessima? Le cose stanno “rapidamente” deteriorandosi.

    -quack

    P.S. il post è scritto in maniera più oggettiva possibile, usando i numeri e la matematica laddove disponibili; è per tanto probabile che seguirà qualche ulteriore approfondimento; last but not least: la mia scelta di lasciare l’azienda è stata solo in minima parte influenzata da quanto sopra e se mi capitasse, conoscendo benissimo le regole del gioco, non avrei nessuna difficoltà nell’accettare un’offerta globalmente migliore di quella che ho accetta chiudendo la porta.

  • Virus e teoria dei giochi

    Tempo fa pubblicai un link di Adam J. O’Donnell che applicava la Teoria dei Giochi all’analisi del Malware su piattaforma. Il ricercatore aveva prodotto una formula:

    (1-p)fv = (1-f)v

    p e’ la probabilita’ che un attacco su Windows riesca e chiamiamola efficacia del sistema che comprende difese builtin (ASLR, firewall, valori di default) e aggiuntive (antivirus).

    Gli attacchi su Mac sarebbero cominciati quando f (il market share di OSX) avrebbe risolto l’equazione. Il ricercatore all’epoca aveva considerato un valore di efficacia pari all’80% sentenziando che i Mac sarebbero diventati bersagli interessanti qualora la percentuale di market share avesse superato il 16%.

    Qualcuno ha provato a giocare con questo valore usando i risultati di un test comparativo di antivirus e pigliando il risultato peggiore (Microsoft Security Essentials, ovvero 93.1%). Viene fuori una percentuale diversa, in grado di giustificare quanto sta accadendo ultimamente. Ovviamente il modello e’ estremamente semplificato (si da lo stesso valore al PC della nonna e a quello delle centrifughe iraniane; non si tiene conto dei costi di acquisizione di conoscenza per bersagliare una piattaforma diversa; ecc.). Ma se la correlazione continuasse ad essere rinforzata, sarebbe la fine per l’ingrediente segreto alla base della sicurezza dei Mac: la polvere magica.

    -quack

  • Storia di ordinaria arronganza

    Un ragazzo compra un laptop Apple con l’infame NVidia 8600GT. Scoperto l’inghippo il ragazzo cerca di farsi rimborsare l’acquisto ma in cambio riceve una garanzia di 4 anni sulla GPU.

    La GPU dopo tre anni frigge, ma Apple, mentendo spudoratamente, si rifiuta di effettuare l’intervento in garanzia promesso.

    Il ragazzo dopo diversi tentativi fa causa.

    Apple manda due avvocati a Seattle. I due avvocati vengono subito colti in frangrante menzogna quando cercano di spiegare che, a causa di una differenza di clock pagata con 300$ sonanti, il PC non sarebbe in garanzia; cosa non vera perche’ l’HW e’ lo stesso di quello comperto dalla garazia.

    Durante il processo, con grande sorpresa del giudice e di tutti i presenti, gli avvocati spiegano che il costo di riparazione per Apple e’ zero in quanto sarebbe assorbito da NVidia.

    Quello che segue merita il migliore grassetto: Apple paga la trasferta di due avvocati col permesso aziendale di mentire pur di non cedere – a costo zero visto che il tutto sarebbe rimborsato da NVidia – sulla riparazione di un PC promesso in garanzia. L’azienda che macina in assoluto i piu’ grandi profitti in America spende migliaia e migliaia di dollari solo per pura arroganza.

    Il ragazzo intanto vince la causa anche se non e’ detta l’ultima parola perche’ deve passare all’incasso.

    Al ragazzo auguro buona fortuna, a tutti gli altri un invito a spend different.

    -quack

  • Il dettaglio

    Ho notato che quando si parla della faccenda di Apple e del prezzo degli e-book gonfiati in generale viene sempre ignorato un dettaglio; purtroppo il dettaglio è fondamentale per capire la faccenda perché è il motivo centrale per il quale il DoJ ha intentato causa.

    La difesa di Apple verte intorno al fatto che, secondo loro, hanno lasciato la libertà agli editori di fissare qualsiasi prezzo. Questo però non è vero perché, in una clausola, su tale prezzo è stabilito un limite superiore. Ovvero il prezzo al dettaglio non deve superare il prezzo a dettaglio presso un altro store.

    Per cui se l’editore X vende un libro sia su Amazon che su iTunes, il prezzo fatto da Amazon non può essere più basso di quello su iTunes. In barba alla “libertà per gli editori di fissare qualsiasi prezzo”. Un altro dettaglio è il fatto che i modelli di vendita su iTunes (a percentuale) sono diversi da quelli tradizionali (su prezzo all’ingrosso). Terzo dettaglio, la percentuale che va in tasca ad Apple è fissa e più alta rispetto a quanto va in generale in tasca ad Amazon.

    Quindi se io editore volessi ricavare 7$ per la vendita di ogni copia potrei venderlo ad Amazon al prezzo di 7$/copia oppure su iTunes al prezzo finale di 10$. Ma se Amazon decidesse di vendere il libro a soli 8$? La clausola di Apple spinge di fatto gli editori a chiedere da Amazon un prezzo più alto. Ed il libro magicamente passerà da costare 8$ a costarne 10$.

    Fin qui la matematica.

    Le obiezioni alla mossa del DoJ, provenienti ovviamente dai fan più sfegatati e cioé quelli che sono addirittura contenti di pagare di più per lo stesso contenuto, sono sintetizzabili in:

    1. Apple non ha costretto nessuno. Ovviamente per costringere si intende chiaramente “puntare la pistola”. La contro-obiezione è che per clausole vessatorie non si intendono solo quelle che prevedono punizioni corporali. L’esempio tipico è che il DoJ è intervenuto nel caso Windows/IE nonostante MS non abbia mai venduto una copia di Windows puntando le pistole (la contro-contro-obiezione è che MS si è fatta pagare “licenze a priori”.
    2. Apple ci sta difendendo dal monopolio di Amazon. Se anche quello di Amazon fosse un monopolio, sarebbe un monopolio di fatto, qualcosa che capita quando una azienda vende più degli altri per manifesta superiorità tecnica. Ed il monopolio in sé, come più volte spiegato, non è punibile a colpi di legge. Quello che è illegale è farne uso per farsi strada in un altro mercato: che guarda caso è quello che Apple sembra stia facendo.

    La questione poi diventa completamente irritante quando viene considerato irrilevante il parallelo Windows/IE dimenticando che:

    1. la distinzione tra mercato del software di base e quello applicativo è estremamente più artificiale di quella tra iPad e eBook; infatti al giorno d’oggi un browser è considerato parte del sistema operativo sotto quasi tutti i punti di vista
    2. MS regalava IE; questo ha portato a ridurre il prezzo che si pagava per questo prodotto portandolo quasi a zero; invece grazie all’intervento di Apple, anche se io non sono cliente iCoso, vedo aumentare il prezzo dei libri che mi interessano

    Ovviamente con questo post non mi faccio assolutamente l’illusione di far cambiare idea chi è convinto che la colpa di 600mila e passa infezioni di Trojan sia di Oracle (ma una bella sandbox nel browser toccherà aspettare il 2032?). Spero tuttavia che la loro magnanimità nei confronti delle casse di Apple li spinga a contribuire alle perdite di noi altri; suggerisco magari con un bel gesto di auto-paypal-tassazione, sono disposto a devolvere tali proventi in beneficienza.

    -quack

    P.S. Despite Denial, Apple Dictated E-Book Pricing at iBookstore

  • Carrierz

    AT&T dixit:

    I got some news about the Windows Phone 8107 update and wanted to share it with you all.

    We are not currently planning to offer the Windows 8107 update.

    Io aggiungo: e perché mai dovrebbero farlo? AT&T non si è degnata neanche di aggiungere il supporto ad una segreteria telefonica da XXI secolo. Gli operatori telefonici in USA non lavorano per i loro clienti, soprattutto grazie al fatto che il GSM come standard è implementato a livello quasi caricaturale (mi dicono dalla regia che questo è uno dei pochissimi paesi al mondo – terzo mondo incluso – in cui non è possibile acquistare un piano prepagato).

    Quindi quando si tratta di scegliere se favorire gli utenti di una piattaforma (iOS, Android, WPx) e i propri interessi, gli operatori non hanno mai sostenuto i primi. Apple ci è riuscita in quanto ha obbligato AT&T in maniera contrattuale. Google non obbliga per cui gli update via operatore non arrivano quasi mai.

    Joe Belfiore di WP7 aveva però detto che per Windows Phone gli operatori si erano accordati su una via di mezzo e a me le vie di mezzo di solito piacciono abbastanza perché acconentando tutti si crea abbastanza motivazione: gli operatori avrebbero potuto bloccare solo un’update, ma il secondo sarebbe arrivato giù con la forza.

    Tutto ciò però si scontra con la realtà di oggi; allora Belfiore ha detto una balla? Oppure visto lo scarso successo commerciale gli accordi sono cambiati? E cosa succederà con WP8 visto che voci di corridoio parlano di piattaforma completamente diversa?

    Apple è estremamente irritante quando tratta (alcuni) suoi clienti come deficienti, ma una cosa riesce a fare molto bene: quando media fa propendere sempre la bilancia sempre verso i loro clienti.

    Ho detto in passato che questo potrebbe essere l’anno dell’iPhone o del ritorno ad Android: da Venerdì avere accesso al server Exchange sul telefono, feature numero uno di WP7, non sarà più una necessità neppur secondaria; era primaria diversi mesi prima che scoprissi gli effetti deleteri del wiping aziendale. Oggi il richiamo del lato oscuro della forza diventa sempre più irresistibile….

    -quack

  • Movin’ on

    badgeVenerdì 30 Marzo sarà il mio ultimo giorno di lavoro in un bunker nel darkside.

    Sono stati tredici anni di montagne russe, tra momenti bellissimi e orribili. Tra decisioni sofferte e gioiose. Mi consola che neanche Trapattoni ha cavalcato un ciclo così lungo. Mi demoralizza un po’ l’andare via prima di lui. A quasi quarant’anni (this is the last of enta) cambiare è un obbligo ed assomiglia al sapore di acchiappare una delle ultime possibilità per i capelli.

    Quello che vado a fare è molto eccitante e – per ora – segreto quanto basta per stimolare la curiosità del lettore.

    -quack

  • A capocchia

    9 Marzo 2012, Gian Antonio Stella, parlando di disparità di stipendio tra commessi parlamentari e direttori di musei, dice:

    Che senso ha che lo Stato tratti con tanta disparità, a capocchia, figli e figliastri?

    1994, comune di Gravina in Puglia, elezioni Comunali. 220px-Macro_of_a_matchSi lavorava con Luca alla prima versione di “Elezioni Comunali per Windows”, una applicazione che predatava quanto oggi si può fare in quattro righe con Adobe Flash. Ci si imbarcamenava con la calcolatrice nell’individuare le “sezioni campione” e Berlusconi (in persona?) inviava da Milano una “signora esperta in sondaggi” che aveva determinato, tramite pochissime interviste telefoniche, una netta vittoria del candidato del centro destra. Ci chiesero se potessero generare “la grafica” per quei dati e Luca stizzito disse che non voleva metterci la faccia e il nome su dati ottenuti con il “metodo a capocchia”. Ora c’è da precisare che la parola capocchia, in gravinese, ha un significato occulto designante una parte ben precisa del membro maschile. E “metodo a capocchia” aveva una accezione molto diversa da quello che aveva “captato” la signora milanese, a cui la locuzione “a capocchia” suonava talmente bene da ripeterla almeno quattro o cinque volte in diretta tivvì (e la TV era locale!).

    Mi piace credere che se l’espressione atterrata sulle pagine del corriere di oggi sia in un certo senso nata in quella precisa occasione; ed io c’ero.

    -quack

  • Xen recipes #4: Xen Cloud Platform 1.5 beta

    XCP è una versione standalone di Xen basata su CentOS. Ovvero da usare out-of-the-box invece di installare l’OS, poi Xen, poi configurare, bestemmiare, inveire, ecc.

    È basata su XenServer allo stesso modo in cui CentOS è basato su Red Hat: ovvero siccome il sorgente è pressoché pubblico, non è altro che una ricompilazione accurata di quanto disponibile al punto che è possibile installare il “client” di XenServer per farlo parlare con XCP. XenServer 6.0 a sua volta è una ridistribuzione minima di CentOS + Xen4.1 + altri tool interessanti per la virtualizzazione + client abbastanza carino + preconfigurazione no-nonsense (infatti SELinux non mi pare sia neanche installato).

    L’unica noia è che non so per quale motivo, ufficialmente si parla di stabilità ma io non ci credo, alcune feature di Xen non sono disponibili direttamente ma sono attivabili con workaround non ufficialmente supportati.

    Quando ho cominciato l’esperimentòn la versione di XCP disponibile era la 1.1 basata su XenServer 5.6 basato a sua volta su Xen 3.0. Poche settimane fa invece è stata rilasciata la beta della versione 1.5 che ho installato su un disco di sistema separato, onde evitare rimpianti. Applicando tutti i workaround del caso XCP 1.5 offre tutto quello che mi ha finora offerto Fedora+Xen e anche qualcosina in più.

    I workadound servono a:

    1. supportare il passaggio di dischi fisici direttamente al guest. È incredibile XS6 permetta di farlo solo con dischi rimuovibili: la “scusa” è che i dischi fisici non permettono la migrazione, ma questo cozza con il fatto che c’è il supporto del passthrough della scheda grafica che impedisce migrazioni.
      Il trucco è di aggiungere due regole al file /etc/udev/rules.d/50-udev.rules come spiegato in questo post. Le mie ad esempio:
      ACTION=="add", 
      ID=="1:0:0:0|3:0:0:0|6:0:0:0|7:0:0:0|8:0:0:0|9:0:0:0",
      SYMLINK+="xapi/block/%k", RUN+="/bin/sh -c
      '/opt/xensource/libexec/local-device-change
      %k 2>&1 >/dev/null&'"
      ACTION=="remove",
      ID=="1:0:0:0|3:0:0:0|6:0:0:0|7:0:0:0|8:0:0:0|9:0:0:0",
      RUN+="/bin/sh -c '/opt/xensource/libexec/local-device-change
      %k 2>&1 >/dev/null&'"
    2. supportare il PCI passthrough, per la stessa stupida scusa accampata al punto 1.
      Per farlo bisogna editare il file /boot/extlinux.conf e “nascondere” i dispositivi da passare ai guest:
      append /boot/xen.gz dom0_mem=752M lowmem_emergency_pool=1M
      crashkernel=64M@32M console= vga=mode-0x0311 ---
      /boot/vmlinuz-2.6-xen root=LABEL=root-ogqzyliv ro
      xencons=hvc console=hvc0 console=tty0 quiet vga=785 splash
      pciback.hide=(00:1a.0)(00:1b.0)(00:1d.0)
      --- /boot/initrd-2.6-xen.img

      Una volta riavviato e verificato che i dispositivi sono disponibili al pass-through (xl pci-list-assignable-devices), bisogna assegnarli alle macchine virtuali con il comando:
      xe vm-param-set 
      other-config:pci=0/0000:00:1a.0,0/0000:00:1b.0 uuid=...
      dove lo uuid della macchina virtuale che interessa si ottiene con:
      xe vm-list
    3. Manipolare il numero di versione in modo tale che il client riconosca il server come XenServer 6.0.99. P
    4. UPDATE: se ci si vuole connettere alle VM senza usare XenCenter (ad esempio su un Mac) è necessario creare dei tunnel SSH in quanto VNC non è esposto ad ip esterni. Per farlo ci sono un paio di tutorial:
      Using VNC to Connect to a XenServer VM’s Console
      How to Set Up VNC Channels Using PuTTY

    In aggiunta ho trovato anche molto utile questo post in cui viene presentato uno script che faccia partire una serie di macchine virtuali in automatico.  UPDATE: un’alternativa è quella di creare una vApp chiamata “autostart” e lanciare la vApp tramite rc.local con:

    sleep 10 && UUID=`/opt/xensource/bin/xe appliance-list 
    name-label="autostart" | /bin/grep uuid | /bin/awk '{ print $5 }'`
    && /opt/xensource/bin/xe appliance-start uuid=$UUID

    (su unica riga)

    Questa seconda alternativa presenta il vantaggio che tramite la configurazione della vApp è possibile determinare l’ordine di lancio e il delay di ogni VM.

    Last but not least da linea di comando è possibile settare la priorità delle singole VM con i comandi:

    xe vm-param-set uuid=<Template UUID> VCPUs-params:weight=100
    xe vm-param-set uuid=<Template UUID> VCPUs-params:cap=100

    Per ora, a differenza di Fedora, non mi sembra che si sia presentata la necessità di modificare le priorità di default di ogni singola VM se non tramite l’aggiustamento di numero di VCPU assegnatele.

    Fatto un calcolo finale il “costo” dei workaround è simile al “costo” di tutta una serie di configurazioni aggiuntive da fare in Xen puro. In cambio XenServer/XCP offre la possibilità di creare snapshot delle macchine virtuali, cosa non disponibile in Xen se non tramite artifici non proprio perfetti.

    Il mio giudizio finale è che XCP competa molto bene con VmWare ESXi: quest’ultimo è ricchissimo di feature non tutte decisamente utili a patto di un costo abbastanza elevato e il mancato supporto al VGA passthrough, indispensabile per il Cray1. E che sia una beta non lo si sente affatto.

    UPDATE: un paio di altre informazioni utili su XCP/XenServer.

    PARAVIRTUALIZZAZIONE: questi sono i comandi utili per configurare le macchine para-virtuali ed in particolare Solaris

    xe vm-param-set uuid=... PV-kernel=<host path to 'unix'>
    xe vm-param-set uuid=... PV-ramdisk=<host path to 'boot_archive'>
    xe vm-param-set uuid=...
    PV-args='/platform/i86xpv/kernel/amd64/unix -B console=ttya'
    xe vm-param-set uuid=... HVM-boot-policy=
    xe vm-param-set uuid=... PV-bootloader=

    PCI/VGA-PASSTHROUGH: se si sceglie di configurare la scheda grafica virtuale tramite l’interfaccia grafica del client, i setting relativi al PCI-Passthrough verranno sovrascritti. Per supportare il passthrough di dispositivi PCI in combinazione con la scheda grafica è importante usare la riga di comando come specificato sopra.

    UPDATE 2:

    Una delle ultime cose che ho fatto è stata la personalizzazione degli splash screen (ce ne sono due). Il primo è embedded nel ramdisk. Per modificarlo basta editare il file /usr/share/citrix-splash/background.png, fare un backup di /boot/initrd-2.6.-xen.img e ricrearlo con il comandone:

    mkinitrd --theme=/usr/share/citrix-splash --builtin=dm-mirror 
    --builtin=dm-snapshot --builtin=dm-zero
    --builtin=scsi_trasnport_fc –f /boot/initrd-2.6-xen.img `uname -r`

    Il secondo splash screen, animato, è più abbordabile ed è contenuto nel folder /usr/share/splashy/themes/default. Una volta editato lo si setta come splash screen attivo tramite:

    splashy_config -s default

    L’immagine che mi son scelto l’è carina:

    background

    E questa dovrebbe essere l’ultima noiosissima ricetta della serie, serie che somiglia tantissimo al Cray 1 deployment document.

    -quack

  • Xen recipes #3: guest OpenIndiana 151 para-virtualizzato

    Questo post è obsoleto. 

    Per installare Solaris (o qualsiasi derivato come Nexenta/OpenIndiana/ecc.) c’è bisogno di fare ricorso alla para-virtualizzazione. In questo caso il sistema operativo guest viene fornito di un kernel appropriato e il tutto si trasforma in un piccolo esercizio di ricorsione.XenFu

    Sotto questa modalità l’hypervisore lancia ed esegue direttamente il kernel para-virtualizzato ed il problema è quello di estrarlo e copiarlo sul sistema operativo host insieme a qualche altro pezzo di sistema (nel caso di Solaris c’è bisogno anche del boot_archive). Ergo occorre:

    1. estrarre e copiare i file platform/i86xpv/kernel/amd64/unix e /platform/i86pc/amd64/boot_archive dall’iso in una directory sul sistema operativo host (ad es.: /xen/openindiana)
    2. creare un file di configurazione usando il seguente template:
      name='openindiana'
      memory = "2048"
      vif = [ "mac=FF:FF:FF:FF:FF:FF, bridge=br0” ]
      disk =  [
              "file:/xen/openindiana/oi.img,xvda,w",
              ]
      vcpus=2
      kernel = "/xen/openindiana/unix"
      ramdisk = "/xen/openindiana/boot_archive"
      extra = "/platform/i86xpv/kernel/amd64/unix -B console=ttya"
    3. lanciare la macchina virtuale ed eseguire l’installazione.

    Terminata l’installazione, prima di spengere la macchina virtuale, vanno annotati il root dataset (comando “zfs list”; valore di ‘default’ rpool/ROOT/openindiana) e il nome del disco di avvio così come identificato dal sistema (comando “echo format”, dovrebbe restituire qualcosa come xdf@51712).

    Successivamente, prima del primo riavvio, va modificata la linea evidenziata in modo da indirizzare il kernel appena installato verso il file system appena creato con la seguente:

    extra = "/platform/i86xpv/kernel/amd64/unix -B zfs- 
    bootfs=rpool/ROOT/openindiana,bootpath=/xpvd/xdf@51712:a"

    (unica riga)

    A questo punto il sistema guest si avvierà e comincerà a funzionare come da aspettative. Se si vuole usare openindiana come server SMB, bisogna avere l’accortenza di aggiungere questa riga al file di configurazione /etc/pam.conf altrimenti l’autenticazione SMB non funzionerà come ci si aspetta:

    other [TAB] password required [TAB] pam_smb_passwd.so.1 [TAB] nowarn

    ([TAB] rappresenta il carattere di tabulazione).

    Un’ultima importante osservazione è che alcune operazioni, come l’import di pool esistenti, tendono a modificare il file di ramdisk. Per cui, prima di riavviare per l’ultima volta potrebbe essere necessario forzare l’aggiornamento del ramdisk (che solitamente avviene durante l’operazione di shutdown) con:

    bootadm update-archive -f

    e sovrascrivere il ramdisk presente sul sistema operativo host con:

    scp /platform/i86pc/amd64/boot_archive 
    root@ip_host:/xen/openindiana

    (unica riga)

    Teoricamente si può bypassare questa necessità di tenere copie aggiornate di kernel e ramdisk sul sistema operativo host usando dei bootloader di guest alternativi come pygrub, però purtroppo l’ultima versione di pygrub non supporta l’ultima versione di ZFS per cui, fino a patch definitiva, quella di sincronizzare i file sull’host è una pratica necessaria.

    Le performance di una macchina para-virtualizzata su XEN tendono ad essere significativamente superiori a quelle di una macchina fully virtualized; c’è infine da aggiungere che purtroppo le ultime versioni di Solaris non girano correttamente in maniera fully virtualized e pertanto la para-virtualizzazione rappresenta l’unica via di uscita.

    -quack

    Linkografia utile:

    http://www.gossamer-threads.com/lists/xen/users/200909
    http://docs.oracle.com/cd/E19082-01/820-2429/smbservertasks/index.html
    http://tinyurl.com/89m4j8s
    http://360is.blogspot.com/2010/03/paravirtualized-opensolaris-solaris-on.html

    Prossima puntata le variazioni sul tema XCP 1.5, versione opensource di XenServer 6

  • LunedìQuìz–serie 2012 #2

    Implementare la seguente funzione:

    bool SumExists(int[] data, int sum)

    che restituisce true se esistono due elementi nell’array data la cui somma è sum e definirne la complessita in notazione O.

    -quack

    P.S. titolo leggermente alterato per arginare l’eventuale ondata spam

  • Inactive memory

    Una delle feature più chiacchierate e meno comprese di Windows, addirittura sin dai tempi di Vista, è quella di SuperFetch, una cache predittiva abbastanza evoluta. Usata anche a sproposito per spalare cacca su Windows.

    In Apple hanno pensato di fare una cosa simile inventando la inactive memory:

    Inactive memory

    This information in memory is not actively being used, but was recently used.

    For example, if you've been using Mail and then quit it, the RAM that Mail was using is marked as Inactive memory. This Inactive memory is available for use by another application, just like Free memory.  However, if you open Mail before its Inactive memory is used by a different application, Mail will open quicker because its Inactive memory is converted to Active memory, instead of loading Mail from the slower hard disk.

    Bella pentola, ma come al solito si sono scordati il coperchio:

    that this memory may be freed at any moment. However in practice, it just keeps on accumulating until you run out of free memory. In this case a sane option for the OS would be freeing the inactive memory. Instead the OS X decides toswap the inactive memory on the disk. So when running out of free memory and having a 1,5 gigabytes of inactive memory left, your OS starts paging the unused inactive memory to disk instead of freeing it for applications to use. Not only this causes your computer to slow down, it also is counter-intuitive in the terms of the original idea of inactive memory: when it's on disk, it definitely is not made active quickly.

    Interessante.

    -quack

  • Beware of the doghouse

    Visto che siamo ufficialmente a S. Valentino, un consiglio per i lettori che stanno ancora pensando al regalo per la morosa/fidanzata/moglie:

    -quack

  • Lunedì quiz - serie 2012 #1

    Dato un albero binario (vedasi esempio figura)

    image

    si implementi la funzione:

    TrovaAntenatoComune(node root, node first, node second)

    che restituisce l’antenato comune più “vicino” ai due nodi o sollevi un’eccezione se uno dei due nodi non è raggiungibile dalla radice.

    Esempio:

    TrovaAntenatoComune(A, D, I) = B
    TrovaAntenatoComune(A, P, F) = E

    -quack

  • Creare un disco di installazione di Win7 UEFI

    Teoricamente su un sistema UEFI il disco di installazione di Windows 7 dovrebbe installarsi automaticamente in modalità UEFI; praticamente è anche molto probabile che qualche baco nel BIOS pregiudichi questa possibilità.

    A che serve lanciare l’installazione di Win7 in modalità UEFI? A poter installare il sistema su un disco partizionato GPT anziché MBR (necessario ad esempio per dischi >2 TiB).

    Ho provato ad utilizzare una delle tantissime guide che spiegano come installare TianoCore (un emulatore UEFI) ma non sono arrivato da nessuna parte.

    La soluzione che funziona è questa:

    1. scaricare oscdimg.exe (sarà parte di qualche DDK, WWF, ecc.)
    2. inserire il disco di installazione nel lettore DVD-ROM (supponiamo D:)
    3. lanciare da riga di comando:
      oscdimg -w4 -os -lWin_7_x64_UEFI_ISO9660 -m -o -n -pEF –e 
      -bd:\efi\microsoft\boot\efisys.bin d:\ win7uefi.iso

    Il risultato è un file ISO masterizzabile che, in presenza di una scheda madre che supporti UEFI, avvierà l’installazione in tale modalità senza passare dal BIOS.

    -quack

  • Xen recipes #2: creazione di macchine virtuali

    Una delle migliori feature di Xen, secondo mio modesto parere, è il supporto di due tipi di virtualizzazione. Quella più tradizionale, vera e propria emulazione di una macchina fisica, e quella che viene definita para-virtualizzazione.

    La para-virtualizzazione è una variante della virtualizzazione in cui il sistema operativo host espone delle periferiche virtuali e non emulate al sistema operativo guest, il cui kernel deve essere scritto in modo appropriato per gestire queste periferiche (in parole povere il kernel para-virtualizzato sa di avere a che fare ad esempio con una VCPU anziché un processore vero). Questo kernel modificato è disponibile in quasi tutte le distro Linux ed in generale con sistemi operativi Unix based (Solaris, BSD, etc.). La para-virtualizzazione pertanto non può essere usata per far girare dei guest Windows.

    Una macchina virtuale in XEN non è altro che un file di configurazione che elenca le proprietà e le periferiche emulate/passate nella macchina virtuale. Il template da usare, per

    device_model = '/usr/lib/xen/bin/qemu-dm'
    kernel = '/usr/lib/xen/boot/hvmloader'
    builder = 'hvm'
    memory = 4096
    name = 'vm_name'
    vif = [
            'type=ioemu, bridge=br0, mac=00:0b:27:1f:ed:75, model=e1000'
          ]
    disk = [
            'phy:/dev/disk/by-id/scsi-SATA_SAMSUNG_HM640,ioemu:hda,w',
            'file:/xen/whs/install.iso,ioemu:hdc:cdrom,r'
    ]
    pci = [
            '00:1d.0',  #front usb panel
    ]
    boot = 'd'
    vnc = 1
    vncdisplay = 1
    usb = 1
    usbdevice = 'tablet'
    vcpus = 4
    localtime = 1
    

    Le righe evidenziate sono quelle da modificare e che contengono il succo della configurazione della macchina virtuale.

    Memory: quantità di RAM assegnata in MB
    Name: nome della VM
    Vif: contiene l’elenco delle schede di rete virtuali; è fondamentale settare correttamente il nome del bridge e creare un mac address ad hoc; se non si specifica il mac address ne verrà assegnato uno a caso diverso ad ogni avvio della macchina virtuale (Windows usa il mac address per l’attivazione)
    Disk: l’elenco dei dischi fisici/virtuali da assegnare.
    Pci: elenco delle schede PCI visibili al guest (richiede che il sistema supporti VT-d/IOMMU e che la scheda PCI sia sganciata dal sistema operativo host)
    Vncdisplay: è la porta vnc da usare. 1 significa porta 5901, 2 significa 5902, ecc.
    Vcpu: numero di CPU virtuali da assegnare

    Prima di far partire la macchina virtuale bisogna però sganciare dal sistema host le periferiche PCI associate al guest. Per far ciò bisogna conoscere sia il PNP-id della periferica, sia l’indirizzo PCI associato.

    Il secondo si ottiene usando il comando lspci che sul mio sistema sputa qualcosa del genere:

    […]
    00:1d.0 USB Controller: Intel Series Chipset Family USB Enhanced
    Host Controller #1
    01:00.0 VGA compatible controller: [FirePro V5700]
    01:00.1 Audio device: ATI Technologies Inc RV710/730
    […]

    Per ottenere il PNP-id va usato la variante:

    lspci -n

    che restituisce nel caso in esempio:

    00:1d.0 0c03: 8086:1c26 (rev 04)
    01:00.0 0300: 1002:949e
    01:00.1 0403: 1002:aa38

    A questo punto si ha a disposizione sia il PCI-id sia il PNP-Id e si può chiedere all’host di sganciare la periferica con questa serie di comandi prontamente trascritta in un file .sh:

    echo "8086 1c26" >/sys/bus/pci/drivers/pci-stub/new_id
    echo "0000:00:1d.0" >/sys/bus/pci/devices/0000:00:1d.0/driver/unbind
    echo "0000:00:1d.0" >/sys/bus/pci/drivers/pci-stub/bind

    La macchina virtuale poi può essere fatta partire via terminale sudato con:

    xm create nome-file-configurazione

    Una volta partita ci si può collegare usando un qualsiasi client VNC usando l’indirizzo IP della macchina host e la porta specificata nel file di configurazione. Nel caso in esempio poi tutte le periferiche USB collegate al controller PCI verranno viste nativamente dal sistema operativo guest (nel mio caso una stampante e una scheda audio USB).

    Il passthru della scheda grafica richiede qualche piccola operazione dal lato client: vanno dapprima installati i driver della scheda grafica “fisica” assegnata, che verrà prontamente rilevata e riconosciuta dal sistema operativo guest, e in seguito va disabilitata la scheda grafica emulata tramite device manager. A causa di qualche problema di instabilità, il file di configurazione di Windows 7 contiene queste ulteriori due righe:

    timer_mode = 2
    viridian = 1

    Last but not least l’uso di driver para-virtualizzati (firmati) disponibili a questa pagina può portare a qualche interessante miglioramento in termini di prestazioni delle periferiche ‘emulate’ (scheda di rete e hard drive).

    Sulla necessità della seconda non sono però molto sicuro. E questo è quanto è necessario per ottenere ‘o miracol di una workstation completamente virtualizzata

    Il prossimo appuntamento sarà dedicato alla para-virtualizzazione di Solaris.

    -quack

  • Economia applicata uan-o-uan

    Cosa si può fare per trasformare il traffico su un ponte galleggiante di 640 metri da così:

    bridgetraffic

    a così:

    520vc00241?

    Basta introdurre un pedaggio dal costo che va di un minimo di 1.60$ ad un massimo di 5.00$ per singola traversata (0.78 centesimi al metro, probabilmente tra i più cari del mondo). Il tutto per finanziare il nuovo progetto di allargamento dello stesso ponte. Il sistema di pedaggio automatico, tra i più avanzati al mondo, ha richiesto diverse iterazioni e rinvii ma è stato finalmente “battezzato” lo scorso 29 dicembre e compiva ieri il suo primo mese di vita.

    La leggenda narra di colleghi in preda alla sindrome di astinenza da traffico che dichiarano di attraversare il ponte ad oltre 100mph (per intenderci altra leggenda narra che colti in fragrante oltre i 90mph ci sia l’arresto).

    -quack

    P.S. sono totalmente favorevole al sistema di tassazione “a consumo”, solo che per ovvie ragioni le tariffe parrebbero elevate. O si lascia intervenire la legge della domanda e dell’offerta oppure (molto più probabile) si introduce un pedaggio sul ponte cugino e parallelo.

  • Al lupo

    Altre due parole sulla questione secure boot.

    Riflettevo alla periodicità di certi allarmismi:

    C’è stato allarmismo quando è stato imposto l’utilizzo di driver firmati per Windows x64.

    C’è stato tantissimo allarmismo quando Windows Vista ha aggiunto il supporto al TPM.

    Oggi c’è tantissimo allarmismo per l’introduzione del supporto, in alcuni casi obbligatorio, del secure boot.lupooooo

    In realtà da sempre l’introduzione di una nuova piattaforma (x64 allora, ARM oggi) è sempre occasione per ripensare a cosa si poteva fare meglio. I driver firmati sono un passo avanti a tanta robaccia che prima installava pezzi di codice in kernel mode. Ma il salto è stato possibile solo con il cambio di piattaforma in virtù delle qualità di backward compatibility dell’ecosistema Windows, qualità più uniche che rare.

    Anche allora si gridava all’anatema: ma oggi, la mancanza di driver non firmati per WinX64 la sente davvero qualcuno?

    -quack

  • Xen recipes #1: HW e software di base

    Ingredienti fondamentali per riprodurre ‘o miracolo.

    1. Scheda madre Intel che supporti VT-d. Ci sono altri produttori che supportano VT-d nei loro modelli ma il tutto è abbastanza fumoso. La mia scelta è andata per una DQ67OW
    2. Processore compatibile VT-d. Ho scelto lo XEON E3-1260L per via della scheda grafica integrata, delle prestazioni (4 core, 8 thread) e dei consumi (45W TDP).
    3. Una sheda grafica supportata, la mia scelta è andata per una FirePro V5700 tra l’altro poco costosa a causa del crash da bitcoin mining (vedasi).

    Il bios della scheda madre è alquanto antipatico ed oltre a quello non sono riuscito a configurare l’opzione di default di GRUB: cioé sono riuscito a impostarla, ma il bootloader semplicemente la ignora, per cui ho scelto la via più semplice. Installare GRUB su una chiavetta USB e fare il boot da quella.

    Dei tre componenti HW quello più delicato sembra essere la scheda grafica: la percentuale di successo con schede grafiche NVidia o non FirePro è decisamente bassa mentre la V5700 è indicata tra le schede testate (e spero supportate).

    UPDATE: ho testato e verificato il funzionamento della ATI 5670 e ATI 5450. Quest’ultima è diventata la scheda grafica che sto usando in quanto silenziosissima per via del raffreddamento passivo e estremamente conveniente (prezzo/prestazioni)

    Dopo di che ho installato Fedora 16 in versione x64.
    Xen si installa via terminale sudato con

    yum install xen

    Fin qui la parte facile, descritta anche in questa pagina Wiki.

    Più complicato è stato creare il network bridge necessario per la connettività dei vari sistemi virtualizzati. Le istruzioni della pagina Wiki di cui sopra a tal riguardo sono incomplete. Nella directory /etc/sysconfig/network-scripts vanno creati due file.

    File ifcfg-br0:

    DEVICE=br0
    TYPE=Bridge
    BOOTPROTO=dhcp
    ONBOOT=yes
    DELAY=0
    NM_CONTROLLED=NO

    File ifcfg-em1:

    DEVICE=em1
    TYPE=Ethernet
    ONBOOT=yes
    BOOTPROTO=dhcp
    NM_CONTROLLED=NO
    BRIDGE=br0

    Per chi vuole spolparsi il manuale, la documentazione riguardo questi interface configuration files è linkata qui. Il nome del bridge (nel caso di cui sopra è br0) è importante per la configurazione delle macchine (para)virtuali. Dopo di che va disabilitato il servizio NetworkManager (che non supporta i bridge) e abilitato il servizio network al suo posto:

    systemctl disable NetworkManager.service
    systemctl stop NetworkManager.service
    systemctl enable network.service
    systemctl start network.service

    Come ultima fase del setup iniziale ho creato un folder /xen e ho abilitato la condivisione dei file via SMB usando le istruzioni che ho trovato qui.

    Ho creato una nuova installazione di grub su chiavetta USB usando:

    grub2-install --force --no-floppy --root-directory=/mnt/USB /dev/sdx

    laddove /mnt/USB è la directory su cui è montata la chiavetta USB e /dev/sdx è il file associato al dispositivo che si ottiene usando il comando lsscsi. Ho poi copiato e alleggerito il file di configurazione grub da /boot/grub2/grub.cfg a /mnt/USB/boot/grub2/grub.cfg.

    UPDATE:

    Ho reinstallato Fedora, non per fun ma in quanto ho notato qualche freeze di troppo possibilmente imputabile all’HD di sistema, e ho messo alla prova quanto scritto. Effettivamente mancano un po’ di passi di cui non avevo preso nota in precedenza.

    1. FONDAMENTALE: disabilitare SeLinux editando il file /etc/sysconfig/selinux Nella configurazione da me creata non serve ad un pazzo (oserei dire che molto più in generale SeLinux, alla pari dell’Hardening di Windows Server, non serve ad un emerito pazzo).

    2. Se ci si vuole connettere ai vari server VNC da altri client è necessario editare il file /etc/xen/xend-config.sxp modificando la linea che contiene vnc-listen in

    (vnc-listen '0.0.0.0')

    3. È buona norma spegnere il firewall durante la configurazione iniziale.

    4. Disabilitare la shell grafica modificando il run level (vedasi):

    rm /etc/systemd/system/default.target 
    ln -sf /lib/systemd/system/multi-user.target
    /etc/systemd/system/default.target

    Last but not least non sono riuscito a trovare un buon sistema per fare un boot affidabile se non cancellando le linee indesiderate da /boot/grub2/grub.conf

    Il passo successivo è la creazione di macchine virtuali.