Posts elencati sotto la Categoria Informatica

Rss feeds di questa categoria



La furbizia dell’hacker

Possiamo assimilare la rete informatica mondiale ad una società nella quale ogni individuo è costituito da un “corpo” fisico – l’hardware – e da un software. C’è chi spende tempo, energie e creatività nel creare applicativi, siti come questo o altri ben più complessi, ogni tipo di manifestazione della creatività di uno o più programmatori. C’è anche chi assembla computers ed esprime il proprio ingegno nella realizzazione di sistemi stabili e performanti. Un software ben scritto installato su una macchina ben assemblata è forse paragonabile, quanto ad ingegno e creatività, ad un’opera d’arte “tecnica” ed esprime perciò una sua bellezza che può essere apprezzata. Le cose apprezzate, poi, si diffondono fra gli utenti.

L’hacker – o meglio – quella categoria di hacker che ha intenzioni cattive è un individuo della stessa “pasta” del programmatore. Anch’egli si ingegna e conosce i segreti della programmazione e delle reti ma il suo obiettivo è quello di estendere il suo potere su più macchine possibile. Nessun hacker che si ritenga abbastanza furbo ha come obiettivo la formattazione o la distruzione di un pc. Al personaggio in questione, un computer “serve più da vivo che da morto”: può essere utilizzato come copertura per altri atti punibili dalla legge. I pc della rete sono cose da “usare”, da infettare con un programma occulto che consenta al malintenzionato di accedere come e quando vuole per poi attaccare altri pc ed estendere le proprie potenzialità. Un computer conquistato diventa a sua volta conquistatore e veicolo di infezione.

Potrebbe essere interessante seguire il percorso inverso. Come nella grande rete, Qualcuno ci plasma, produce bellezza, assembla pezzetto per pezzetto, prevede per ciascuno delle attività proficue. Ci sono però gli hacker, che non sono d’accordo: inquinano le coscienze con ideologie, ipotesi non ragionevoli, idee e pensieri falsi che bucano le difese della coscienza facendo leva sui piaceri, sulla comodità di certo pensiero. Accade così che persone capaci di cose meravigliose si riducono all’attacco e distruzione delle altre persone che ancora si sforzano di costruire qualcosa in linea con la natura umana.
Che peccato…
Quando un server è conquistato ed usato per un attacco, non resta che disconnetterlo dalla linea e, nei casi più disperati, formattarlo per ripristinare la programmazione originaria. Come realizzare questo nel mondo non virtuale? Si può? Si deve? Quali speranze ci sono?

Hacker

Share

Commenti avanzati in WordPress

Molte piattaforme di blogging permettono agli utenti di inserire immagini nei propri commenti. WordPress sembra invece non permetterlo – immagino per evitare messaggi pubblicitari. E se volessimo dare ai nostri lettori la possibilità di inserire delle immagini o semplicemente qualche opzione di formattazione un po’ più avanzata?

Questo “trucco” è per chi ha installato su un proprio sito una versione di WordPress. La procedura non è difficile: bisogna aprire l’editor del tema e modificare il file delle funzioni “functions.php”. Alla fine del file ci dovrebbe essere il simbolo “?>” che indica la fine del codice php. Distanziamo con qualche ritorno a capo ed incolliamo il codice:

add_action(‘init’, ‘my_html_tags_code’, 10);
function my_html_tags_code() {
  define(‘CUSTOM_TAGS’, true);
  global $allowedtags, $allowedposttags, $allowedentitynames;

        $allowedposttags = array(
            ’address’ => array(),
            ’a’ => array(
                  ’class’ => array (),
                  ’href’ => array (),
                  ’id’ => array (),
                  ’title’ => array (),
                  ’rel’ => array (),
                  ’rev’ => array (),
                  ’name’ => array (),
                  ’target’ => array()),
            ’abbr’ => array(
                  ’class’ => array (),
                  ’title’ => array ()),
            ’acronym’ => array(
                  ’title’ => array ()),
            ’article’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’aside’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’b’ => array(),
            ’big’ => array(),
            ’blockquote’ => array(
                  ’id’ => array (),
                  ’cite’ => array (),
                  ’class’ => array(),
                  ’lang’ => array(),
                  ’xml:lang’ => array()),
            ’br’ => array (
                  ’class’ => array ()),
            ’button’ => array(
                  ’disabled’ => array (),
                  ’name’ => array (),
                  ’type’ => array (),
                  ’value’ => array ()),
            ’caption’ => array(
                  ’align’ => array (),
                  ’class’ => array ()),
            ’cite’ => array (
                  ’class’ => array(),
                  ’dir’ => array(),
                  ’lang’ => array(),
                  ’title’ => array ()),
            ’code’ => array (
                  ’style’ => array()),
            ’col’ => array(
                  ’align’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’span’ => array (),
                  ’dir’ => array(),
                  ’style’ => array (),
                  ’valign’ => array (),
                  ’width’ => array ()),
            ’del’ => array(
                  ’datetime’ => array ()),
            ’dd’ => array(),
            ’details’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’open’ => array (),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’div’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array()),
            ’dl’ => array(),
            ’dt’ => array(),
            ’em’ => array(),
            ’fieldset’ => array(),
            ’figure’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’figcaption’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’font’ => array(
                  ’color’ => array (),
                  ’face’ => array (),
                  ’size’ => array ()),
            ’footer’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’form’ => array(
                  ’action’ => array (),
                  ’accept’ => array (),
                  ’accept-charset’ => array (),
                  ’enctype’ => array (),
                  ’method’ => array (),
                  ’name’ => array (),
                  ’target’ => array ()),
            ’h1′ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h2′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h3′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h4′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h5′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’h6′ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’id’    => array (),
                  ’style’ => array ()),
            ’header’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’hgroup’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’hr’ => array (
                  ’align’ => array (),
                  ’class’ => array (),
                  ’noshade’ => array (),
                  ’size’ => array (),
                  ’width’ => array ()),
            ’i’ => array(),
            ’img’ => array(
                  ’alt’ => array (),
                  ’align’ => array (),
                  ’border’ => array (),
                  ’class’ => array (),
                  ’height’ => array (),
                  ’hspace’ => array (),
                  ’longdesc’ => array (),
                  ’vspace’ => array (),
                  ’src’ => array (),
                  ’style’ => array (),
                  ’width’ => array ()),
            ’ins’ => array(
                  ’datetime’ => array (),
                  ’cite’ => array ()),
            ’kbd’ => array(),
            ’label’ => array(
                  ’for’ => array ()),
            ’legend’ => array(
                  ’align’ => array ()),
            ’li’ => array (
                  ’align’ => array (),
                  ’class’ => array ()),
            ’menu’ => array (
                  ’class’ => array (),
                  ’style’ => array (),
                  ’type’ => array ()),
            ’nav’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’p’ => array(
                  ’class’ => array (),
                  ’align’ => array (),
                  ’dir’ => array(),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array()),
            ’pre’ => array(
                  ’style’ => array(),
                  ’width’ => array ()),
            ’q’ => array(
                  ’cite’ => array ()),
            ’s’ => array(),
            ’span’ => array (
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’align’ => array (),
                  ’lang’ => array (),
                  ’style’ => array (),
                  ’title’ => array (),
                  ’xml:lang’ => array()),
            ’section’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’strike’ => array(),
            ’strong’ => array(),
            ’sub’ => array(),
            ’summary’ => array(
                  ’align’ => array (),
                  ’class’ => array (),
                  ’dir’ => array (),
                  ’lang’ => array(),
                  ’style’ => array (),
                  ’xml:lang’ => array(),
            ),
            ’sup’ => array(),
            ’table’ => array(
                  ’align’ => array (),
                  ’bgcolor’ => array (),
                  ’border’ => array (),
                  ’cellpadding’ => array (),
                  ’cellspacing’ => array (),
                  ’class’ => array (),
                  ’dir’ => array(),
                  ’id’ => array(),
                  ’rules’ => array (),
                  ’style’ => array (),
                  ’summary’ => array (),
                  ’width’ => array ()),
            ’tbody’ => array(
                  ’align’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’valign’ => array ()),
            ’td’ => array(
                  ’abbr’ => array (),
                  ’align’ => array (),
                  ’axis’ => array (),
                  ’bgcolor’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’class’ => array (),
                  ’colspan’ => array (),
                  ’dir’ => array(),
                  ’headers’ => array (),
                  ’height’ => array (),
                  ’nowrap’ => array (),
                  ’rowspan’ => array (),
                  ’scope’ => array (),
                  ’style’ => array (),
                  ’valign’ => array (),
                  ’width’ => array ()),
            ’textarea’ => array(
                  ’cols’ => array (),
                  ’rows’ => array (),
                  ’disabled’ => array (),
                  ’name’ => array (),
                  ’readonly’ => array ()),
            ’tfoot’ => array(
                  ’align’ => array (),
                  ’char’ => array (),
                  ’class’ => array (),
                  ’charoff’ => array (),
                  ’valign’ => array ()),
            ’th’ => array(
                  ’abbr’ => array (),
                  ’align’ => array (),
                  ’axis’ => array (),
                  ’bgcolor’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’class’ => array (),
                  ’colspan’ => array (),
                  ’headers’ => array (),
                  ’height’ => array (),
                  ’nowrap’ => array (),
                  ’rowspan’ => array (),
                  ’scope’ => array (),
                  ’valign’ => array (),
                  ’width’ => array ()),
            ’thead’ => array(
                  ’align’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’class’ => array (),
                  ’valign’ => array ()),
            ’title’ => array(),
            ’tr’ => array(
                  ’align’ => array (),
                  ’bgcolor’ => array (),
                  ’char’ => array (),
                  ’charoff’ => array (),
                  ’class’ => array (),
                  ’style’ => array (),
                  ’valign’ => array ()),
            ’tt’ => array(),
            ’u’ => array(),
            ’ul’ => array (
                  ’class’ => array (),
                  ’style’ => array (),
                  ’type’ => array ()),
            ’ol’ => array (
                  ’class’ => array (),
                  ’start’ => array (),
                  ’style’ => array (),
                  ’type’ => array ()),
            ’var’ => array ());

      /**
       * Kses allowed HTML elements.
       *
       * @global array $allowedtags
       * @since 1.0.0
       */
      $allowedtags = array(
            ’a’ => array(
                  ’href’ => array (),
                  ’title’ => array ()),
            ’abbr’ => array(
                  ’title’ => array ()),
            ’acronym’ => array(
                  ’title’ => array ()),
            ’b’ => array(),
            ’blockquote’ => array(
                  ’cite’ => array ()),
            //      ’br’ => array(),
            ’cite’ => array (),
            ’code’ => array(),
            ’del’ => array(
                  ’datetime’ => array ()),
            //      ’dd’ => array(),
            //      ’dl’ => array(),
            //      ’dt’ => array(),
            ’em’ => array (), ‘i’ => array (),
            //      ’ins’ => array(‘datetime’ => array(), ‘cite’ => array()),
            //      ’li’ => array(),
            //      ’ol’ => array(),
            //      ’p’ => array(),
            ’q’ => array(
                  ’cite’ => array ()),
            ’strike’ => array(),
            ’strong’ => array(),
            ’sub’ => array(),
            ’sup’ => array(),
            ’img’ => array(
                  ’alt’ => array (),
                  ’align’ => array (),
                  ’border’ => array (),
                  ’class’ => array (),
                  ’height’ => array (),
                  ’hspace’ => array (),
                  ’longdesc’ => array (),
                  ’vspace’ => array (),
                  ’src’ => array (),
                  ’style’ => array (),
                  ’width’ => array ()),
            ’span’ => array(
                  ’style’ => array ()),
            //      ’u’ => array(),
            //      ’ul’ => array(),
      );

      $allowedentitynames = array(
            ’nbsp’,    ’iexcl’,  ’cent’,    ’pound’,  ’curren’, ‘yen’,
            ’brvbar’,  ’sect’,   ‘uml’,     ‘copy’,   ‘ordf’,   ‘laquo’,
            ’not’,     ‘shy’,    ’reg’,     ‘macr’,   ‘deg’,    ’plusmn’,
            ’acute’,   ‘micro’,  ’para’,    ’middot’, ‘cedil’,  ’ordm’,
            ’raquo’,   ‘iquest’, ‘Agrave’,  ’Aacute’, ‘Acirc’,  ’Atilde’,
            ’Auml’,    ’Aring’,  ’AElig’,   ‘Ccedil’, ‘Egrave’, ‘Eacute’,
            ’Ecirc’,   ‘Euml’,   ‘Igrave’,  ’Iacute’, ‘Icirc’,  ’Iuml’,
            ’ETH’,     ‘Ntilde’, ‘Ograve’,  ’Oacute’, ‘Ocirc’,  ’Otilde’,
            ’Ouml’,    ’times’,  ’Oslash’,  ’Ugrave’, ‘Uacute’, ‘Ucirc’,
            ’Uuml’,    ’Yacute’, ‘THORN’,   ‘szlig’,  ’agrave’, ‘aacute’,
            ’acirc’,   ‘atilde’, ‘auml’,    ’aring’,  ’aelig’,  ’ccedil’,
            ’egrave’,  ’eacute’, ‘ecirc’,   ‘euml’,   ‘igrave’, ‘iacute’,
            ’icirc’,   ‘iuml’,   ‘eth’,     ‘ntilde’, ‘ograve’, ‘oacute’,
            ’ocirc’,   ‘otilde’, ‘ouml’,    ’divide’, ‘oslash’, ‘ugrave’,
            ’uacute’,  ’ucirc’,  ’uuml’,    ’yacute’, ‘thorn’,  ’yuml’,
            ’quot’,    ’amp’,    ’lt’,      ’gt’,     ‘apos’,   ‘OElig’,
            ’oelig’,   ‘Scaron’, ‘scaron’,  ’Yuml’,   ‘circ’,   ’tilde’,
            ’ensp’,    ’emsp’,   ‘thinsp’,  ’zwnj’,   ‘zwj’,    ’lrm’,
            ’rlm’,     ‘ndash’,  ’mdash’,   ‘lsquo’,  ’rsquo’,  ’sbquo’,
            ’ldquo’,   ‘rdquo’,  ’bdquo’,   ‘dagger’, ‘Dagger’, ‘permil’,
            ’lsaquo’,  ’rsaquo’, ‘euro’,    ’fnof’,   ‘Alpha’,  ’Beta’,
            ’Gamma’,   ‘Delta’,  ’Epsilon’, ‘Zeta’,   ‘Eta’,    ’Theta’,
            ’Iota’,    ’Kappa’,  ’Lambda’,  ’Mu’,     ‘Nu’,     ‘Xi’,
            ’Omicron’, ‘Pi’,     ‘Rho’,     ‘Sigma’,  ’Tau’,    ’Upsilon’,
            ’Phi’,     ‘Chi’,    ’Psi’,     ‘Omega’,  ’alpha’,  ’beta’,
            ’gamma’,   ‘delta’,  ’epsilon’, ‘zeta’,   ‘eta’,    ’theta’,
            ’iota’,    ’kappa’,  ’lambda’,  ’mu’,     ‘nu’,     ‘xi’,
            ’omicron’, ‘pi’,     ‘rho’,     ‘sigmaf’, ‘sigma’,  ’tau’,
            ’upsilon’, ‘phi’,    ’chi’,     ‘psi’,    ’omega’,  ’thetasym’,
            ’upsih’,   ‘piv’,    ’bull’,    ’hellip’, ‘prime’,  ’Prime’,
            ’oline’,   ‘frasl’,  ’weierp’,  ’image’,  ’real’,   ‘trade’,
            ’alefsym’, ‘larr’,   ‘uarr’,    ’rarr’,   ‘darr’,   ‘harr’,
            ’crarr’,   ‘lArr’,   ‘uArr’,    ’rArr’,   ‘dArr’,   ‘hArr’,
            ’forall’,  ’part’,   ‘exist’,   ‘empty’,  ’nabla’,  ’isin’,
            ’notin’,   ‘ni’,     ‘prod’,    ’sum’,    ’minus’,  ’lowast’,
            ’radic’,   ‘prop’,   ‘infin’,   ‘ang’,    ’and’,    ’or’,
            ’cap’,     ‘cup’,    ’int’,     ‘sim’,    ’cong’,   ‘asymp’,
            ’ne’,      ’equiv’,  ’le’,      ’ge’,     ‘sub’,    ’sup’,
            ’nsub’,    ’sube’,   ‘supe’,    ’oplus’,  ’otimes’, ‘perp’,
            ’sdot’,    ’lceil’,  ’rceil’,   ‘lfloor’, ‘rfloor’, ‘lang’,
            ’rang’,    ’loz’,    ’spades’,  ’clubs’,  ’hearts’, ‘diams’,
      );
}

Una volta salvata la modifica non facciamo altro che bypassare il controllo che wordpress fa automaticamente sul contenuto dei commenti e dei post aggiungendo, oltre ai tag già permessi, qualche altro tag in più. Ad esempio, io ho aggiunto le immagini ( <img> ), il testo in apice ( <sup> ) ed il testo in pedice ( <inf> ). Provare per credere.

Per aggiungere altri tag basta modificare la stringa chiamata “$allowedtags” sulla falsa riga dei tag già esistenti. Se, ad esempio, voglio aggiungere la possibilità di inserire dei ( <div> ) mi basterà aggiungere:

            ’div’ => array(
                  ’style’ => array ()),

Attenzione però a non esagerare perché un utente malintenzionato potrebbe approfittare della vostra generosità verso i vostri lettori ed inserire codice malevolo.
Buon divertimento.

Share

Formati personalizzati in Scientific Linux

Sotto Windows è possibile personalizzare i formati numerici, monetari e temporali a proprio piacimento, scegliendo il simbolo utilizzato per separare le cifre decimali e le centinaia dalle migliaia. Su sistemi Unix-like si può, di solito, scegliere soltanto la “localizzazione” cioè impostare in blocco i formati standardizzati di una determinata nazione (la propria).

Un modo per modificare o aggiungere la localizzazione è quello di editare un file che, una volta compilato, funzioni esattamente come le altre localizzazioni. In particolare, in Scientific Linux – che è il sistema operativo che uso per lavorare – le localizzazioni in “formato sorgente” si trovano nella directory “/usr/share/i18n/locales/” e per modificarli bisogna avere i privilegi di amministratore.

Apriamo il terminale e digitiamo “su“, viene richiesta la password di amministratore. Una volta immessa, si dispone dei privilegi adeguati per editare il file. A questo punto diamo i seguenti comandi:

cd /usr/share/i18n/locales/
gedit it_IT &

La “e commerciale” (&) serve ad aprire l’editor di testo continuando a disporre della finestra del terminale con i privilegi di amministrazione. A questo punto possiamo scegliere se salvare un nuovo file o se modificare la localizzazione italiana “it_IT“. Le chiavi che ci interessano sono “LC_NUMERIC”, “LC_MONETARY” e “LC_TIME”. Una guida dettagliata (in inglese) su come modificare queste impostazioni la fornisce la IBM a questo link.
Notiamo che i vari simboli sono inseriti con il codice “unicode” (UTF-16). A questo proposito ho trovato utile questo convertitore che consente di convertire qualsiasi testo in “UTF16″

Per quanto riguarda la separazione dei decimali, se si vuole passare dalla virgola al punto bisogna sostituire

decimal_point             "<U002C>"

con

decimal_point             "<U002E>"

A questo punto resta solo da salvare il file e compilare il codice che abbiamo scritto. Supponendo di voler aggiornare la localizzazione italiana, basterà digitare

localedef -c -f UTF-8 -i it_IT it_IT.utf8

oppure sostiture il nome it_IT con quello che si desidera.
Dopo il riavvio del sistema le applicazioni come la calcolatrice mostreranno il formato desiderato.

Unicode

Share

Antivirus

C’era una volta un mondo digitale, un sistema operativo perfetto dove i programmi andavano in run allegramente ed in perfetta sintonia. Un giorno, uno dei programmatori di questo sistema operativo, poiché si sentiva sottopagato (ma non lo era affatto) contaminò tutti i programmi del tipo “super controller” con un virus. Da quel momento i programmi “super controller” – che erano liberi di decidere in qualsiasi momento quali funzioni mandare in esecuzione tra le svariate delle quali erano stati dotati – cominciarono ad essere portati ad eseguire operazioni dannose per loro stessi e per gli altri programmi divenendo, in alcuni casi, incapaci di discriminare il valore dei loro dati. Divennero così contrari allo scopo stesso per i quali erano stati sviluppati.

Il programmatore capo, accortosi del problema pensò ad una soluzione. Poteva eliminare tutti i programmi infetti ma non se la sentiva: aveva dedicato tanto tempo alla loro programmazione, ci aveva speso su tutte le sue energie e il suo amore per crearli così bene. Nonostante il virus era orgoglioso della sua creazione e non voleva distruggerla. Ci voleva un antivirus particolare, qualcosa che annullasse l’effetto dell’infezione trasformando pian piano tutti i programmi senza sprecarne nemmeno uno.

Dopo un po’ di meditazione, il programmatore capo decise di intervenire personalmente. Creò un simulatore di programmi “super controller” per essere riconosciuto dagli altri dello stesso tipo. Per diverso tempo il programma “super controller” simulato – che altri non era che il programmatore capo in persona ai comandi della simulazione – interveniva traducendo pacchetti di istruzioni per i programmi del sistema e, dopo qualche tempo, riuscì a ripristinarne un piccolo gruppo. Era un evento unico ed irripetibile nella storia di quel sistema operativo.

Alla fine del suo lavoro il programmatore capo era molto contento. Quel piccolo gruppo di programmi ripristinati era capace di diffondere la correzione agli altri anche se ci sarebbe voluto molto molto tempo: tra le istruzioni che i “super controller” potevano eseguire c’erano anche quelle di negazione e di rigetto, capaci di impedire la diffusione della correzione. C’era anche qualche programma che si infettava da capo. L’importante però era che il miglior antivirus era stato messo all’opera e si diffondeva nonostante le tempeste informatiche e le scariche virulente che il sistema infetto gli muoveva contro.

Matrix

Share

Merge di cartelle in Mac OS X

Per una misteriosa politica di programmazione la Apple gestisce il meccanismo della sovrascrittura dei file e della loro copia in modo molto diverso da Windows. Quando si copia una cartella che contiene file e sottocartella su un’altra directory c0n lo stesso nome, Windows passa ad interrogare l’utente su quale operazione vuole eseguire: sovrascrivire o ignorare.

In Mac OS X questo non accade. Se si copia una cartella vuota in una directory dove è presente una cartella con lo stesso nome, il contenuto della cartella di destinazione viene cancellato con conseguente perdita dei file. Quando abbiamo due archivi da sincronizzare, ad esempio per fare un backup e aggiornare il vecchio archivio aggiungendo il materiale più recente, il problema della sovrascrittura diventa cruciale. Non è possibile spulciare diversi giga, cartella per cartella, controllando cosa è opportuno copiare e cosa no.

Per realizzare il “merge”, l’unione di cartelle preservando il contenuto, si può però usare il terminale di Mac OS X. Il comando da usare è cp e si può visualizzare la guida ad esso relativa digitando sul terminale

man cp

Si viene così a scoprire che: per copiare le cartelle e le sottocartelle rispettando l’albero gerarchico occorre specificare l’opzione -R; per impedire la sovrascrittura bisogna usare l’opzione -n; per fare apparire sul terminale i nomi dei file, copiati e non, occorre specificare l’opzione -v; per dirgli di copiare tutti i file bisogna inserire il carattere speciale * nel nome del file. Leggendo il manuale di cp emergono altre opzioni che consentono anche di preservare i file che hanno lo stesso nome rinominandoli automaticamente. Supponendo quindi di voler copiare la cartella “miacartella” su un disco esterno “miodisco” con tutte le sue sottodirectory dovremo andare sul terminale e digitare:

cp -Rnv miacartella /Volumes/miodisco/

Se si vuole salvare il risultato su un file di log chiamato “logfile.txt” basta scrivere:

cp  -Rnv miacartella /Volumes/miodisco/ | tee logfile.txt

copia

Aggiornamento: consultando il forum di Italiamac c’è un’applicazione che può risultare utile per questo lavoro (se non si vuole usare il terminale): SyncTwoFolders

Share

Prodotti Autodesk e bootcamp

Come ho già scritto in un precedente post, i computer di marca Apple mostrano di essere assemblati con sufficiente perizia da rappresentare una risorsa hardware non da poco. Molti sviluppatori di grafica hanno perciò pensato di utilizzare delle macchine Apple per i loro progetti professionali e sempre affamati di risorse informatiche. Ai vertici del settore grafico professionale ci sono i prodotti della Autodesk come Autocad e 3D Studio Max i quali però girano soltanto in ambiente Windows. Nell’attesa di un software per Mac Os da parte della Autodesk, agli sviluppatori non resta che creare una partizione sui loro Mac e installarci Windows. In questo caso i prodotti Autodesk funzionano ma, sovente, generano alcuni errori di licenza che costringono a riattivare il prodotto con frequenza. Dopo diverse ricerche in rete ho trovato un post molto esauriente sulla situazione, con le soluzioni alle diverse fonti di questi errori. Riporto qui un riassunto in italiano.

3DS Max

Ci sono in realtà due motivi per la sospensione delle licenze:
1) Presenza di un controller RAID SATA per il quale Autodesk ha prodotto una correzione per l’attivazione di errore 0.1.0010:
In tal caso occorre installare la BindHotfix_2007.reg HotFix (http://usa.autodesk.com/adsk/servlet/ps/dl/item?siteID=123112&id=5620053&linkID=9240658 )

Per installare la patch:
a. Chiudere tutti i programmi e accedere come amministratore.
b. scaricare il file BindHotfix_2007.reg.
c. cancellare i files “.dat” contenuti nella cartella “Software Licenses” ( in Xp si trova in C:/Documents and settings/Alluser/dati applicazioni/Autodesk )
d. Fare doppio clic sul file BindHotfix_2007.reg scaricato.
e. Fare clic su Sì quando viene richiesto, “Sei sicuro di voler aggiungere queste informazioni …” Un messaggio indicherà se il prodotto è stato aggiornato.

Una nota per il download: è necessario utilizzare il tasto destro del mouse e ‘Salva file allegati …’

Nota: BootCamp, a partire da uno o più hard disk esterni SATA collegati provoca l’interruzione delle licenze Autodesk. La correzione Autodesk non sembra essere operativa sul disco esterno. Comunque, niente panico, spegnete il (i) disco (dischi) e riavviate – è una costante – una volta effettuato l’accesso, è possibile attivare il (i) disco (dischi) senza problemi.

2) la gestione del clock: differenza tra Windows e Mac.
Autodesk ha creato una protezione basata sul confronto dei tempi tra il file di origine e il sistema operativo al momento della attivazione. Il Mac si riferisce allo UTC (Coordinated Universal Time) mentre Windows allo RTC (Real Time Clock), che comporta inevitabilmente delle differenze a seconda del fuso orario e la gestione del periodo estivo. Durante il passaggio da Mac OS (Mac orologio) a BootCamp (Windows clock)  e viceversa, Autodesk rileva la differenza nel tempo sulla piattaforma e interrompe la licenza.
Una soluzione suggerita da Autodesk è quella di istituire una licenza di rete – che lavorerà per certo, ma la sua attuazione è pesante e si fa pagare!
Ci sono diversi modi per rendere i due sistemi orologio compatibili.

A-Rendere l’orologio di sistema di Windows compatibile con Mac.
(http://wiki.osx86project.org/wiki/index.php/Tips_And_Tricks # Use_Localtime_instead_of_Universal_for_RTC ):

Nota: è inoltre possibile creare e sviluppare i propri file, ma perché complicarsi la vita!

B- Modificare entrambi i sistemi affinché le ore siano identiche:

  • Preferenze di sistema Mac \ data e ora

\ Data e ora – Selezionare ‘Set automaticamente’ su ‘Apple Europe (time.euro.apple.com)’
\ Fuso orario – Selezionare ‘Roma – Italia’

  • BootCamp: Panel \ data e ora

\ Fuso orario – Selezionare ‘(GMT +01:00) Amsterdam, Berlino, Roma…’
\ Time Zone – Selezionare ‘Passa automaticamente all’ora legale’
\ Internet Time – Deseleziona “Sincronizzazione automatica con server di riferimento orario Internet ‘

C – Forzare la sincronizzazione dell’orologio all’avvio di Windows su BootCamp:
Per gli impazienti, utilizzare il metodo descritto qui: http://pcwizcomputer.com/index.php?option=com_content&task=view&id=65&Itemid=45
In caso contrario, attenersi alla seguente procedura:

  • Digitare ‘regedit’ a Start \ Esegui e quindi fare clic su OK
  • Espandere la struttura di sistema: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run \
  • Assicurati di essere ammessi come amministratori
  • Poi nella finestra di destra, fate clic destro \ Nuovo \ Valore stringa
  • Inserire un nome, ad esempio TimeSync
  • Quindi fare doppio clic comando ‘TimeSync’ ed inserire il percorso desiderato: C: \ WINDOWS \ system32 \ W32tm.exe / resync / nowait

Definizione di informazioni di 2 di 8 opzioni di comando disponibili per w32tm:
/ Register
Può registrare come un servizio e aggiungendo la configurazione predefinita nel Registro di sistema.
/ Resync (: ComputerName [/ nowait] | [/ riscoprire)]
Risincronizzare l’orologio il più presto possibil. Se non viene specificato il nome del computer, vale per il computer locale. L’ordine è in attesa, a meno che il / nowait venga utilizzato.

  • Chiudere l’Editor del Registro di sistema.
  • Riavviare BootCamp

3) Link a siti e forum le più interessanti sul tema:
http://forum.insanelymac.com/index.php?showtopic=111303&hl=d% E9calage
http://pcwizcomputer.com/index.php?option=com_content&task=view&id=65&Itemid=45
http://forum.insanelymac.com/index.php?showtopic=11193&mode=linear
http://www.cl.cam.ac.uk/ ~ mgk25/mswish/ut-rtc.html

4) Altri metodi
a – RealTimeIsUniversal (1 ° link nel paragrafo 3): Il principio di questo comando è quello di forzare Windows a passare al sistema di pianificazione CTS UTC (GMT) che produce il contrario della soluzione Localtime_Toggle Mac = Subito> significa che impostare entrambi questi due servizi renderebbe tutto nullo! È un vecchio ordine che risale a Windows NT. Non si può dire che questa soluzione sia affidabile al 100%

b – TimeFix (Appletime.exe – Servicemanager.exe): questa soluzione è a favore di Vista, specialmente quando RealTimeIsUniversal non funziona. Attenzione ai potenziali conflitti con Localtime_Toggle Mac.
Links: http://swmirror.org/drupal/node/32 e per il download: EDIT_II footer post 1 =>http://forum.insanelymac.com/index.php?showtopic=111303&hl=d% E9calage
Si prega di notare che il Servicemanager.exe è molto utile per aggiungere eventuali servizi aggiuntivi al sistema operativo.

c – NetTime Mac : Forza una sincronizzazione più frequentemente con il server di tempo Apple. Link:http://www.mazadigital.com/

d – REFIT Mac , questa applicazione è stata sviluppata per l’emulazione Mac su un PC. Link: http://refit.sourceforge.net/

Share

La compilazione

I computer e gli esseri umani non parlano la stessa lingua. Costantemente ci sono degli algoritmi che si occupano soltanto di tradurre il linguaggio del computer in qualcosa che l’operatore possa capire osservandolo su uno schermo o sentendolo dagli altoparlanti.
Anche insegnare ad un computer un determinato algoritmo non è cosa facile. Ci sono – è vero – persone che hanno imparato il linguaggio macchina e ci capiscono qualcosa ma la maggior parte dei programmatori usa una lingua intermedia, un linguaggio di programmazione che sia facile da capire sia per il computer, sia per il programmatore. Quando la scrittura del programma in linguaggio di programmazione è terminata, questo viene tradotto in linguaggio macchina attraverso la “compilazione”.

Ora, immaginiamo di essere una delle tante istruzioni compilate qualche decina di cicli macchina fa e che questo processo non sia ancora terminato. Attorno alla nostra istruzione vengono dichiarate variabili che saranno usate da istruzioni che  il compilatore tradurrà soltanto fra cinquanta cicli macchina. Altre istruzioni circondano la nostra protagonista senza che si capisca bene il loro scopo e il motivo della loro esistenza.
Cosa concluderebbe la nostra istruzione, dopo soltanto due cicli di pensiero? Concluderebbe che il mondo che la circonda sia formato da cose prive di senso, buttate lì perché c’era spazio libero.

Potrebbe mai immaginarsi, la nostra istruzione, che fra qualche migliaio di cicli il programma sarà terminato e potrà svolgere il compito per il quale è stato scritto? Potrà mai figurarsi che tutte quelle istruzioni siano state scritte con un preciso scopo e una specifica funzione?
Quando il programma sarà interamente compilato ed eseguito, quando l’istruzione passerà dal disco rigido alla memoria volatile del computer, ogni byte avrà un significato e una funzione.

Matrix

Share

Collo di bottiglia

Io possiedo due computer: un Macbook nero del 2007 e un pc fisso comprato circa un anno dopo. Il Macbook ha:

  • processore Intel Core 2 Duo 2.2 GHz (ridotto dalla Apple a 2.16 GHz)
  • 1 Gb di RAM 667 MHz DDR2
  • un hard disk da 160 Gb
  • scheda madre che ha un FSB a 667 MHz

Il pc fisso ha:

  • processore Intel Pentium D 2.8 Ghz
  • 4 Gb di RAM di cui 2Gb da 333MHz e 2Gb da 266MHz
  • tre hard disk rispettivamente di 80, 160 e 320 Gb
  • scheda madre Asus P5LD2 con FSB a 800MHz

Premetto innanzitutto che i due computer li ho comprati così: già assemblati.
Come si può ben vedere, le caratteristiche dei componenti del pc fisso sono superiori a quelle del Macbook, ciononostante accadde un giorno che, facendo girare windows su entrambi i computer e avendo installato lo stesso software su entrambe le macchine, il medesimo calcolo veniva “risolto” dal Macbook nella metà del tempo impiegato dal pc fisso.

Perché il computer più potente va più lento? Possiamo rispondere a questa domanda guardando le velocità delle singole parti. Innanzitutto mai mettere memorie di velocità diverse nella stessa macchina perché altrimenti la memoria veloce dovrà rallentare per stare dietro a quella lenta. La velocità dei 4 Gb RAM del fisso è quindi per tutti 266MHz e non 333MHz. Ora vediamo qualche rapporto tra le velocità dei vari componenti.

FSB/RAM = 800/266 = 3.00751879699

Significa che il bus – il canale di comunicazione che lega fra loro tutti gli elementi del pc – deve aspettare almeno tre dei suoi cicli per avere una risposta dalla memoria. Il fatto che il rapporto non venga un numero intero è poi uno svantaggio perché ogni tanto i cicli da aspettare saranno quattro, cioè non è nemmeno costante il tempo da aspettare.

CPU/FSB = 2800/800 = 3.5

Significa che il processore passa, una volta tre cicli e una volta quattro cicli, ad aspettare il bus della scheda madre. Ciò che accade nei tre protagonisti di queste lunghe attese si chiama, in gergo tecnico, “collo di bottiglia” ed è più o meno la stessa cosa che succede quando, a causa di lavori sul manto stradale, una strada a 4 corsie diventa un vicolo ad una sola.

La lezione che si impara da questa storia è che spesso ci perdiamo la visione d’insieme nelle nostre scelte. Preferiamo uno stile di vita ad un altro in virtù dei singoli fastidi o delle singole imposizioni senza riflettere che queste, insieme a tutto il resto, definiscono qualcosa di realmente migliore, un “di più”. Ci facciamo un po’ prendere in giro dai numeri vertiginosi delle periferiche e delle loro caratteristiche fino a non realizzare che il fascino più grande sta nel non tralasciare nulla, nello sfruttare le nostre qualità e la nostra natura al meglio senza sbilanciamenti né esagerazioni. Con buona pace di chi non crede che un Macbook dalle scarse caratteristiche non possa battere un pc di qualità “superiore”.

Bottiglie

Quanto al mio pc fisso… un giorno ne assemblerò uno per conto mio.

Share

Ora sballata tra Windows e Linux o Mac OS X

Chiunque abbia avuto il desiderio e l’avventura di installare Windows Xp su un Apple computer (iMac o Macbook o Mac di altro tipo) usando Bootcamp o su un Pc che ha un dual boot con un sistema Linux si è, prima o poi, scontrato con il problema dell’orologio nei due sistemi operativi.
Mentre i sistemi Unix e Unix like scrivono sul Bios del sistema l’ora di Greenwich (correggendo poi il fuso orario e l’ora legale via software), Windows scrive sul Bios del sistema l’ora già corretta in base al fuso orario e all’ora legale. Inevitabilmente ciascuno dei due sistemi tenderà a correggere l’ora con il suo criterio provocando orologi indietro o avanti di diverse ore.

In genere questo problema produce solo il fastidio di avere un orologio malfunzionante, ma vi sono dei casi in cui il problema può aggravarsi. Ad esempio, programmi come 3D Studio Max  controllano la data e l’ora di sistema per evitare un uso fraudolento del software attraverso l’alterazione della stessa, che consiste nell’impostare il sistema ad una data precedente alla scadenza della licenza. L’alterazione automatica ed involontaria dell’orologio produce, in questo caso, l’impossibilità di utilizzare il software (anche se legalmente e pienamente sotto licenza).

Ci sono diverse soluzioni al problema: la Apple ha prodotto un driver che funziona solo in alcuni casi; alcuni inseriscono una chiave nel registro di sistema per dire a Windows di leggere l’ora come se fosse di Greenwich.
Spesso il risultato di tutti questi tentativi è di aggiustare momentaneamente l’ora osservando che, esattamente un’ora dopo l’avvio della macchina, l’orologio viene misteriosamente sballato di nuovo.

La soluzione che propongo io è quella di disattivare completamente gli aggiustamenti e la visualizzazione dell’orologio di Windows sostituendolo con un altro (funzionante).

Modifica data/ora

fai click per ingrandire

Fate click con il pulsante destro sull’orologio di Windows e selezionate “Modifica data/ora”. Fate click con il pulsante sinistro sul tab “Ora Internet” e disabilitate la sincronizzazione automatica. Fate click con il pulsante sinistro su “OK” e poi andate sul menu start>>Impostazioni>>Barra delle applicazioni e menu di avvio.

Modifica data/ora
Fai click per ingrandire

Nella finestra che apparirà deselezionate “Mostra orologio” e date “OK”.

Barra delle applicazioni e menu di avvio
Fai click per ingrandire

A questo punto potete usare un’applicazione che ho creato io stesso per sostituire l’orologio.

Mostra orologio
Fai click per ingrandire

Scaricate il file eseguibile da questo link e copiatelo nella cartella che più vi aggrada. Per avviare l’orologio all’avvio vi basta aggiungere un collegamento al programmino dell’orologio sul menu start>>programmi>>esecuzione automatica.

Esecuzione automatica
Fai click per ingrandire

Avviando il programma apparirà una mini barra dell’orologio che potrete posizionare dove vi pare ed un’icona nella barra dei programmi. Facendo click su questa icona potrete accedere alle opzioni del programma e potrete nascondere e mostrare l’orologio a vostro piacimento.
Buon divertimento.

Orologio

Share

Snow leopard: separatore decimale

Almeno dalla versione 10.4 di mac OS X la personalizzazione del formato dei numeri e della valuta è stata sempre un po’ ostile. Mi è capitato, con l’ultima versione del sistema operativo Apple, che impostando lo spazio come separatore delle migliaia e il punto come separatore decimale, questi venissero imposti nella calcolatrice di sistema ma non su Excel per Mac. Le impostazioni predefinite per la località “Italia” o “Svizzera” sono il punto come separatore delle migliaia e la virgola come separatore decimale e non c’è verso di cambiare la situazione se non mentendo sul proprio paese. Questo problema risiede nel fatto che le impostazioni personalizzate risiedono in locazioni diverse da quelle dove Excel, per esempio, legge i suoi formati di sistema.

Per cambiare queste impostazioni ho trovato su questa pagina il seguente codice:

defaults write .GlobalPreferences AppleICUNumberSymbols -dict 0 ‘.’ 1 ‘ ‘ 10 ‘.’ 8 ‘€’
defaults write .GlobalPreferences AppleICUNumberFormatStrings -dict-add 2 ‘¤# ##0.00;¤-# ##0.00′
defaults write com.apple.HIToolbox AppleDecimalSeparator -dict smRoman ‘.’
defaults write com.apple.HIToolbox AppleThousandSeparator -dict smRoman ‘ ‘
defaults write com.apple.systempreferences AppleIntlCustomFormat -dict-add AppleDecimalSeparator ‘.’
defaults write com.apple.systempreferences AppleIntlCustomFormat -dict-add AppleThousandSeparator ‘ ‘

A questo punto basta incollare questo codice sul terminale e premere “invio”. I numeri in Excel diventeranno tutti nel formato predefinito # ##0.0

Decimal golf

Share