lunedì 31 gennaio 2011
Virtualizzazione
Il primo articolo scritto in italiano il cui tema sia la virtualizzazione che merita di essere citato: Emulazione e Virtualizzazione.
domenica 30 gennaio 2011
Italiani vs Tedeschi (... nei comportamenti sociali)
Un post che mi e' piaciuto molto, post che propone principalmente un'analisi emozionale/comportamentale/... differenziale tra italiani e tedeschi.
Qui il link.
Qui il link.
sabato 29 gennaio 2011
Uccidere... premia
Chi uccide un uomo e' un assassino.
Chi ne uccide migliaia, un conquistatore.
Chi li uccide tutti, un Dio.
Edmond Rostand
Nota: Dexter e' un mito :-)
venerdì 28 gennaio 2011
Bufala sugli interpreti (2)
Questa e' la seconda puntata sugli interpreti. Qui la prima.
Ci siamo lasciati con un po' di teoria, quindi ora passiamo ad un piccolo test.
Ho scelto di scrivere uno stesso script con diversi linguaggi di programmazione. Ho scelto C, C++, Perl, PHP, Python.
script C (hello.c)
script C++ (hello.cpp)
script Perl (hello.pl)
script PHP (hello.php)
script Python (hello.py - no bytecode)
Tempi di esecuzione
Di seguito sono riassunti i tempi di esecuzione:
Ovviamente questo e' soltanto un benchmark grossolano. Consiglio di non ritenerlo esaustivo, solo indicativo.
Ci siamo lasciati con un po' di teoria, quindi ora passiamo ad un piccolo test.
Ho scelto di scrivere uno stesso script con diversi linguaggi di programmazione. Ho scelto C, C++, Perl, PHP, Python.
script C (hello.c)
#include <stdio.h>compilato tramite gcc hello.c -o hello_c.o
main() {
int j,i;
j=10000000;
while (j>0) {
printf ("Hello world! $j\n");
j = j-1;
}
}
script C++ (hello.cpp)
#include <iostream>compilato tramite g++ hello.cpp -o hello_cpp.o
int main() {
int j,i;
j=10000000;
while (j>0) {
std::cout << "Hello world! " << j << std::endl;
j = j-1;
}
return 0;
}
script Perl (hello.pl)
$j=10_000_000;
while ($j>0) {
print "Hello world! $j\n";
$j -= 1;
}
script PHP (hello.php)
<?php
$j=10000000;
while ($j>0) {
print "Hello world! $j\n";
$j -= 1;
}
?>
script Python (hello.py - no bytecode)
j=10000000script Python (hello.pyc - bytecode)
while j>0:
print 'Hello world! ', j;
j = j-1;
import py_compile
py_compile.compile("hello.py")
Produce il byte code dello script precedente.
Tempi di esecuzione
Di seguito sono riassunti i tempi di esecuzione:
C -> time ./hello_c.o > /dev/nullNote:
real 0m0.818s
C++ -> time ./hello_cpp.o > /dev/null
real 0m5.885s
Perl -> time perl hello.pl > /dev/null
real 0m4.311s
PHP -> time php hello.php > /dev/null
real 0m10.390s
Python (no bc) -> time python hello.py > /dev/null
real 0m13.282s
Python (bc) -> time python hello.pyc > /dev/null
real 0m13.533s
Ovviamente questo e' soltanto un benchmark grossolano. Consiglio di non ritenerlo esaustivo, solo indicativo.
giovedì 27 gennaio 2011
Voto Fiat a Mirafiori
Post che fornisce una lettura interessante sul voto e la vittoria dei si' a Mirafiori. Qui il link.
mercoledì 26 gennaio 2011
Bufala sugli interpreti (1)
Se chiediamo al 99% degli operatori IT la differenza tra compilatori ed interpreti, l'accento sara' sicuramente sulla differenza prestazionale.
Ancora oggi sento (e leggo) che c'e' un fattore 10 nei tempi di esecuzione a favore dei compilati.
Purtroppo (anzi, fortunatamente) e' una bufala.
L'interpretazione preistorica funzionava in questo modo:
In quell'era informatica, la differenza prestazionale nell'esecuzione tra i compilati e gli interpretati era notevole.
Ma poi i tempi sono cambiati!!
Successivamente, si sono fatti passi avanti dal punto di vista prestazionale nei meccanismi degli interpreti. Sintetizzando al massimo, una delle tecniche prevede la produzione di bytecode, il quale puo' essere direttamente eseguito. Dal punto di vista schematico, il processo e' simile ai linguaggi compilati, quindi in questo caso lo script e' tradotto con produzione di bytecode (una volta), ed esecuzione del bytecode (quante volte si vuole).
Lo stato dell'arte e' la just-in-time compilation, anche conosciuta come dynamic translation, che consiste in un approccio ibrido, idealmente suddivisa in 3 step:
Esistono altre varianti, in particolare cito il pre-compiling. Tale tecnica dell'interprete prevede a run-time:
Ancora oggi sento (e leggo) che c'e' un fattore 10 nei tempi di esecuzione a favore dei compilati.
Purtroppo (anzi, fortunatamente) e' una bufala.
L'interpretazione preistorica funzionava in questo modo:
Nei compilati, invece, l'esecuzione puo' procedere senza interruzioni da parte di traduzioni:traduzione linea di codiceesecuzione lineatraduzione linea di codiceesecuzione linea...
esecuzione lineapoiche' la fase di traduzione e' effettuata (manualmente) prima dell'esecuzione.
esecuzione linea
...
In quell'era informatica, la differenza prestazionale nell'esecuzione tra i compilati e gli interpretati era notevole.
Ma poi i tempi sono cambiati!!
Successivamente, si sono fatti passi avanti dal punto di vista prestazionale nei meccanismi degli interpreti. Sintetizzando al massimo, una delle tecniche prevede la produzione di bytecode, il quale puo' essere direttamente eseguito. Dal punto di vista schematico, il processo e' simile ai linguaggi compilati, quindi in questo caso lo script e' tradotto con produzione di bytecode (una volta), ed esecuzione del bytecode (quante volte si vuole).
Lo stato dell'arte e' la just-in-time compilation, anche conosciuta come dynamic translation, che consiste in un approccio ibrido, idealmente suddivisa in 3 step:
- traduzione continua;
- riempimento di una cache con il tradotto;
- esecuzione del tradotto.
Esistono altre varianti, in particolare cito il pre-compiling. Tale tecnica dell'interprete prevede a run-time:
- il processo di compilazione del sorgente (in memoria);
- al termine dello step precedente, l'esecuzione del compilato.
martedì 25 gennaio 2011
Grafici con RRD
Questi giorni sto lavorando massicciamente con il tool RRD. Per chi non lo conoscesse, qui la pagina di presentazione, e qui una galleria.
lunedì 24 gennaio 2011
venerdì 21 gennaio 2011
Syslog Messages to MySQL
Nello staff in cui lavoro attualmente gestiamo i messaggi di log di diversi server centralizzandoli su un logserver. Quest'ultino scrive tramite rsyslogd diverse decine di file al giorno, ma un domani si potrebbe sperimentare la scrittura su database via MySQL[1].
Link: Writing Syslog Messages to MySQL with rsyslogd, Why does world need another syslogd?
Note:
[1] -> in realta' era gia' stata sperimentata, ma democraticamente lo staff ha preferito vie piu' tradizionali. Chissa' se domani la scelta non cambiera'...
Link: Writing Syslog Messages to MySQL with rsyslogd, Why does world need another syslogd?
Note:
[1] -> in realta' era gia' stata sperimentata, ma democraticamente lo staff ha preferito vie piu' tradizionali. Chissa' se domani la scelta non cambiera'...
mercoledì 19 gennaio 2011
L’interferenza di elettroni singoli
Una simpatica spiegazione del fenomeno dell'interferenza di elettroni singoli.
Per curiosita', il fenomento fu teorizzato nel 1925, realizzato nel 1976 da 3 fisici bolognesi, e nel 2002 e' stato votato tramite sondaggio come l'esperimento piu' bello della fisica dalla rivista internazionale Physics World.
Per curiosita', il fenomento fu teorizzato nel 1925, realizzato nel 1976 da 3 fisici bolognesi, e nel 2002 e' stato votato tramite sondaggio come l'esperimento piu' bello della fisica dalla rivista internazionale Physics World.
martedì 18 gennaio 2011
lunedì 17 gennaio 2011
Raid 1 vs LVM mirror
Solitamente (cioe' sempre, escludendo un momentaneo memory leak) configuro i server di backup con uno strato di raid software[1] e uno strato lvm.
Il primo mi mette al sicuro da eventuali corruzioni hardware, il secondo mi e' utilissimo per gli snapshot.
La domanda e': posso condensare sia il mirroring sia gli snapshot tramite un unico strato?
La risposta e' ni (o so, fate voi).
Si' perche' tramite LVM e' possibile creare volumi logici con mirroring.
No perche' non si e' piu' salvaguardati da eventuali crash hardware.
In prima approssimazione, se condensiamo tutto nello strato LVM demandiamo all'LVM la replicazione dei dati, che avverranno nei modi scelti dalla tecnolgia stessa. Cio' implichera' un vantaggio prestazionale, ma la replicazione non sincrona (quindi eventualmente posticipata) implichera' la non affidabilita' del mirroring.
Da questo link, trovo interessante il seguente commento:
Ancora dall'url precedente:
Note:
[1] -> se fosse disponibile il raid hardware... non avrebbe senso questo post
Il primo mi mette al sicuro da eventuali corruzioni hardware, il secondo mi e' utilissimo per gli snapshot.
La domanda e': posso condensare sia il mirroring sia gli snapshot tramite un unico strato?
La risposta e' ni (o so, fate voi).
Si' perche' tramite LVM e' possibile creare volumi logici con mirroring.
No perche' non si e' piu' salvaguardati da eventuali crash hardware.
In prima approssimazione, se condensiamo tutto nello strato LVM demandiamo all'LVM la replicazione dei dati, che avverranno nei modi scelti dalla tecnolgia stessa. Cio' implichera' un vantaggio prestazionale, ma la replicazione non sincrona (quindi eventualmente posticipata) implichera' la non affidabilita' del mirroring.
Da questo link, trovo interessante il seguente commento:
LVM mirrors are for replication of a logical volume to a different physical volume. It's essentially meant to "move the data to a different disk". The mirror is then broken and the old location of the data freed for use; the existing data is utilized at the new location instead.Per essere piu' precisi, si dovrebbe introdurre il concetto di barriers, ben presentato a questo link.
RAID mirrors are for providing a safeguard against single-drive hardware failures. It's essentially meant to "keep your data from being lost if a disk dies".
Ancora dall'url precedente:
Barriers are a kernel techniue to try and improve the chances of data getting to disk. Up until 2.6.29 LVMs ignored them. Now LVM honours barriers (if and only if you have a linear target and a new enough kernel) so if you want the flexibility of LVM and barrier support your best bet is barrier-on-md RAIDQuindi anche LVM onorera' il mirroring (dai kernel successivi al 2.6.29), se il barrier e' impostato (si veda qui).
Note:
[1] -> se fosse disponibile il raid hardware... non avrebbe senso questo post
giovedì 13 gennaio 2011
Tagliare la spesa pubblica
Un altro post pro riduzione della spesa pubblica: Perche' tagliare la spesa pubblica.
mercoledì 12 gennaio 2011
Can Open Source Be Trusted?
Riporto un link ad un post simpatico: Can Open Source Be Trusted?
martedì 11 gennaio 2011
Il gatto di Schrodinger
Molti sanno che fine abbia fatto il gatto di Schrodinger. Per chi non lo sapesse, questa immagine e' molto esplicativa.
lunedì 10 gennaio 2011
Url shortener
Per coloro che non li conoscessero, questi semplici strumenti permettono di inserire una url e restituirne una seconda che e' un redirect alla prima.
L'utilita' e' maggiore quanto piu' lunga e' la url inserita, essendo quella restituita molto breve. Ad oggi, conosco tre servizi[1] di questo tipo:
Personalmente li utilizzo principalmente per inserire url brevi nelle email.
Note:
[1] -> in realta' il servizio offerto da google e' una new entry
L'utilita' e' maggiore quanto piu' lunga e' la url inserita, essendo quella restituita molto breve. Ad oggi, conosco tre servizi[1] di questo tipo:
Personalmente li utilizzo principalmente per inserire url brevi nelle email.
Note:
[1] -> in realta' il servizio offerto da google e' una new entry
domenica 9 gennaio 2011
Borderline man
Un post che mi piace parecchio, particolarmente per due frasi che condivido pienamente. Di seguito le cito:
Solitamente non riporto frasi cosi' lunghe inserendo solo link ai post... ma queste le ho riportate perche' meritano veramente
Che cosa insegna questa cosa? Insegna che quando un sistema diventa irriformabile, ovvero quando il riformismo diventa cosi' conservativo verso le parti da non far cambiare mai nulla, l'unica mossa davvero vincente e' quella distruttiva. Inoltre, insegna che tali mosse arrivano dalle figure "borderline" del sistema, quelle cioe' che non dipendono (come Marchionne per l'industria o Cossiga per il consenso partitico) piu' dal sistema di relazioni politiche esistenti, ma sono ancora abbastanza addentro al sistema da poterlo colpire con le proprie azioni.e
Un tempo si diceva "addaveni' er baffone" per indicare questo genere di eventi, cioe' qualcuno che da fuori del sistema ne distrugga delle parti. Mano a mano che il mondo si globalizza, cresceranno sempre di piu' le figure capaci di fare quello che ha fatto Marchionne, potendo colpire senza venire colpite, essendo dentro al sistema abbastanza da distruggerlo ma non abbastanza da temere rappresaglie. In una guerra di posizione, i cecchini si divertono un sacco.
Solitamente non riporto frasi cosi' lunghe inserendo solo link ai post... ma queste le ho riportate perche' meritano veramente
sabato 8 gennaio 2011
Non perdere l'occasione...
Non c'e' mai una seconda occasione
per fare una buona impressione
la prima volta.
Anonimo
venerdì 7 gennaio 2011
5 modi per utilizzare la webcam...
Dal ludico al monitoraggio, ecco Five fun ways to use a Linux webcam.
giovedì 6 gennaio 2011
Messaggio augurale
Messaggio augurale , in controtendenza. Qui il link
mercoledì 5 gennaio 2011
Come contattarmi
Se a qualcuno viene in mente di contattarmi, spero ne abbia fondata volonta'.
Comunque vi segnalo i link come da oggetto: Obfuscated Code e Codici a barre.
Comunque vi segnalo i link come da oggetto: Obfuscated Code e Codici a barre.
Politica
La politica e' l'abilita' di prevedere in anticipo
cosa accadra' domani, la settimana prossima,
il prossimo mese e il prossimo anno [...]
e comprende anche la capacita' di spiegare,
a posteriori, perche' tutto cio' che era stato
previsto non e' accaduto.
Winston Churchill
martedì 4 gennaio 2011
Diritto alla difesa digitale
Interessante articolo e testimonianza sul mancato diritto alla difesa in presenza di materiale digitale: Hard disk, cosi' ti cancello i diritti degli utenti.
lunedì 3 gennaio 2011
Codici a barre
Tutti conosciamo i codici a barre. Ad esempio, l'immagine seguente
riporta la scritta Wikipedia sia in maniera alfabetica, sia tramite codice a barre[1].
Di recente e' stata rilasciata l'evoluzione del codice a barre, il codice QR, il quale aggiunge una dimensione all'ordinario codice a barre, passando quindi da una a due dimensioni. Un esempio e':
il quale riporta il mio indirizzo email.
Per approfondimenti, ecco il link della wikipedia sul Codice QR e un esempio di applicazione su un cartello stradale.
Inoltre i link di alcuni generatori, uno per il classico monodimensionale e due per quelli bidimensionali: QR_1 e QR_2.
Note:
[1] -> per generare tale codice a barre e' stata utilizzata la codifica Code-128
Di recente e' stata rilasciata l'evoluzione del codice a barre, il codice QR, il quale aggiunge una dimensione all'ordinario codice a barre, passando quindi da una a due dimensioni. Un esempio e':
il quale riporta il mio indirizzo email.
Per approfondimenti, ecco il link della wikipedia sul Codice QR e un esempio di applicazione su un cartello stradale.
Inoltre i link di alcuni generatori, uno per il classico monodimensionale e due per quelli bidimensionali: QR_1 e QR_2.
Note:
[1] -> per generare tale codice a barre e' stata utilizzata la codifica Code-128
Iscriviti a:
Post (Atom)