Pagine

mercoledì 11 marzo 2009

Ottimizzare Windows XP

Premessa

Ieri sera, mi è capitato di riprendere il mio vecchio portatile sul quale ho installato Windows XP. Abituato alle prestazioni della nuova macchina, i 3 minuti di boot e i 4 minuti passati dal login al poter operare sulla macchina.... mi sono sembrati una eternità. Ho quindi iniziato a cercare qualcosa che mi potesse aiutare a velocizzare la macchina e mi sono imbattuto in questi programmini.

Free Registry Cleaner

Questo programma permette di ripulire il registro di sistema di windows che, notoriamente, è uno dei colli di bottiglia peggiori a livello prestazionale nell'utilizzo di una macchina con questo sistema operativo. Il software è davvero semplice da usare, analizza tutte le parti del registro identificando gli errori che sono causa di rallentamenti, crash e riavvio del computer e li ripristina o li cancella nel caso in cui appartengano ad applicazioni non più esistenti. Permette, inoltre il salvataggio preventivo del registro (da effettuare preferibilmente prima di fare pulizia) e l'eventuale ripristino se qualcosa non dovesse andare a buon fine. Trattandosi di un programma Freeware è scaricabile ed utilizzabile senza particolari vincoli.
Lo si può trovare qui anche se una veloce ricerca su un motore di ricerca può dare molte altre alternative.
Utilizzando questo programma sono riuscito ad eliminare ben 1300 voci...

CCleaner

Questo programma permette di scansionare l'hard disk della macchina alla ricerca di file temporanei obsoleti, cache di browser, file corrotti, files di log e file nel cestino. A differenza dell'utility di windows è riuscita a farmi risparmiare ben 250Mb che su un hard disk di 30Gb... sono molto utili. Anche questa applicazione, come la precedente è freeware e quindi utilizzabile senza alcun problema.
La si può scaricare a questo indirizzo.

Autoruns

Questo programma è una utility firmata Microsoft.
E' un software gratuito e permette di analizzare ogni programma, utility, DLL che vengano caricati all'avvio del computer. Sebbene sia estremamente semplice da utilizzare è da maneggiare con estrema cautela per via del fatto che togliendo il flag ad una o più opzioni si rischia di non avviare servizi indispensabili per l'utilizzo del computer. Tuttavia è un ottimo spunto per gli utenti meno esperti che hanno uno strumento che funge da base di partenza per effettuare domande mirate su forum o canali a tema. L'utente smaliziato, poi, potrà trarre enorme vantaggio da questo software permettendo di scoprire eventuali spyware o trojan.
Il software è scaricabile qui.

Conclusioni

Questi tre programmi mi hanno aiutato in una sera a velocizzare il mio vecchio portatile. Certo, non ha sicuramente le prestazioni di una macchina recente ma i suoi 512Mb di Ram e i suoi 30Gb di hard disk mi sono sufficienti per lavorare con disinvoltura a patto di non appesantirlo con programmi onerosi in termini computazionali.

giovedì 5 marzo 2009

Arduino

Cosa è...

Arduino è una scheda elettronica sulla quale è stato montato un microcontrollore AVR. La scheda può comunicare con il computer tramite un cavo USB che emula la connessione di tipo seriale (da una velocità di 9600 a 11560).
Tale connessione, oltre allo scambio di dati con il PC permette la programmazione del microcontrollore. Sulla scheda, inoltre, sono montati diversi "piedini" che possono essere utilizzati come OUTPUT o come INPUT a seconda di cosa preferisce l'utente e di cosa si vuole interfacciare alla scheda. A questi piedini possono essere collegati, tramite fili elettrici, molteplici sensori (se configurati come INPUT) o display, lampade, LED (se configurati come OUTPUT).

Il linguaggio che permette di controllare l'AVR è decisamente semplice e molto simile, come sintassi al C. Lavorando ad una frequenza di 16Mhz, assorbe da 6V-12V (quindi può essere alimentata anche con la presa dell'accendino in auto) e 300mA di corrente.

Shields

Come se tutto questo non bastasse, la scheda Arduino può essere "espansa" tramite moduli aggiuntivi che si "montano" sui piedini e che vengono chiamati "shield".
Esistono decine di shield diversi; alcuni sono opera di smanettoni, altri semplici prototipi senza finalità, altri ancora sono ufficiali e rilasciati dalla medesima azienda che produce la scheda, Tinker! altri ancora forniti da aziende in giro per il mondo come LiquidWare .
Molti riguardano metodi alternativi per la comunicazione con il computer. Ad esempio si può montare uno shield che permette ad Arduino di comunicare con il mondo esterno via bluethoot o tramite ZigBee e addirittura via Ethernet. Altri permettono di memorizzare informazioni su EEPROM esterne oppure di controllare Motori o gruppi di lampade. Altri ancora sono più "esotici" ed hanno funzioni "strane" come quello in figura, il tank shield della LiquidWare che permette di portare in giro Arduino ...









Linguaggio di programmazione

Come scritto prima, il linguaggio di programmazione è estremamente semplice e molto simile al C. Il listato si divide in tre parti fondamentali.
  1. La definizione delle variabili o delle costanti che serviranno durante tutto il programma
  2. La definizione della funzione setup che inizializza la comunicazione con il PC, definisce quali piedini sono in ingresso e quali in uscita ed altre particolarità all'uopo
  3. La definizione della funzione loop in cui si definiscono le azioni che Arduino deve effettuare ciclicamente 16 milioni di volte al secondo.
Queste tre fasi possono essere più o meno lunghe a seconda del programma. Segue un semplice esempio, una sorta di HelloWorld che permette di fare lampeggiare un LED ciclicamente direttamte compiato dal sito Arduino/Tutorial.

int ledPin = 13; // LED connected to digital pin 13
void setup(){
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}

void loop()
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}

Conclusioni

Arduino permette di espandere le funzionalità di un computer a ciò che lo circonda; permette di fargli prendere coscienza del mondo esterno e di interagire con esso. Le possibilità di utilizzo ed i campi di applicazioni sono veramente enormi.
Personalmente sto costruendo due prototipi, uno per verificare la temperatura e la umidità in casa e di registrare le informazioni ogni ora su un file di testo e un altro che mi permette di simulare un telecomando.
In giro però ho visto progetti per aiutare i disabili nell'utilizzo dei computer, applicazioni per ospedali, musei e scuole.
La cosa più bella di questo strumento è che non è necessario essere esperti informatici o ingegneri elettronici. Certo la cosa aiuterebbe senza dubbio ma non è indispensabile. Chiunque abbia acceso un PC in vita propria e sia spinto da grande curiosità può cimentarsi con questa scheda estremamente semplice.
Di seguito riporterò altre informazioni su questa piattaforma.

sabato 21 febbraio 2009

Fncychap: titoli fantasiosi di capitoli in classe book LaTeX

Premessa

Utilizzando la classe book di LaTeX può sorgere l'esigenza di avere i titoli dei capitoli impaginati in maniera differente e magari più accattivante...

Soluzione

Una soluzione semplice è utilizzare il pacchetto fncychap.

\usepackage[style]{fncychap}


dove al posto di style si mette lo stile desiderato:
  • normale


  • Sonny,


  • Lenny,


  • Glenn,


  • Conny,


  • Rejne


  • Bjarne



Ovviamente le impostazioni per eventuali personalizzazioni sono svariate e permettono di modificare la posizione delle scritte a sinistra o destra, modificare i caratteri e molto altro ancora...

mercoledì 11 febbraio 2009

Figure affiancate in LaTeX

Premessa

Può capitare di voler affiancare due o più figure in modo che vengano viste come un unico oggetto da LaTex.
In tal caso o si genera una figura unica con un editor di immagini perdendo però la possibilità di creare delle caption per ciascuna figura o si utilizza il pacchetto subfigure.
I metodi sono diversi a seconda che si desiderino figure con lo stesso numero o con numeri diversi.

Nel primo caso va utilizzato lo stile subfigure. Ad esempio:

\begin{figure}
\centering
\subfigure[Prima figura]
{\includegraphics[width=8cm]{fig1.eps}}
\hspace{5mm}
\subfigure[Seconda figura]
{\includegraphics[width=8cm]{fig2.eps}}
\caption{Titolo delle figure}
\end{figure}

Nel secondo caso invece:

\begin{figure}
\begin{minipage}[b]{8.5cm}
\centering
\includegraphics[width=8cm]{fig1.eps}
\caption{Prima figura}
\end{minipage}
\ \hspace{2mm} \hspace{3mm} \
\begin{minipage}[b]{8.5cm}
\centering
\includegraphics[width=8cm]{fig2.eps}
\caption{Seconda figura}
\end{minipage}
\end{figure}

Gestione tabelle in LaTeX

Premessa

Le tabelle in LaTeX, come in altri sistemi di composizione testi, sono oggetti complessi da gestire. Può capitare di vederle "sparire" dal luogo in cui ci si aspetta di trovarle oppure "cambiare posizione" in modo semi arbitrario nel momento in cui si aggiunge altro testo o altre tabelle. Inoltre ci sono alcune regole di composizione che è bene tenere ben in considerazione per evitare di generare tabelle brutte a vedersi oltre che difficili da gestire.

Per creare tabelle si può usare l'ambiente tabular. Se si desidera che la tabella sia flottante è bene inserire questo ambiente tra i tag denominati \begin{table} e \end{table}.
La figura mostra un chiaro esempio di cosa non si deve fare quando si creano tabelle.

Regole di creazione tabella

Per creare una tabella è necessario tenere in considerazione alcuni punti chiave:
  • non utilizzare mai righe verticali, meno che mai doppie;
  • allineare i numeri a destra e il testo al centro o sinistra;
  • specificare eventuali unità di misura nella intestazione, mai nel corpo;
  • utilizzare, nei numeri, sempre lo stesso numero di decimali;
  • non usare mai le virgolette per ripetere il valore soprastante: ripeterlo o lasciare in bianco.

L'origine: le tabulazioni

L'ambiente tabular è nato, originariamente per creare tabulazioni:

\begin{tabular}{clr}

Pippo & bianco & 102,5 \\
Paperino & nero & 15,4 \\

\end{tabular}

Questo codice definisce un testo tabulato con tre colonne "clr" di cui:
  • c: la prima allineata al centro,
  • l: la seconda allineata a sinistra,
  • r: la terza allineata a destra
E' fondamentale ricordarsi il simbolo // al termine di ogni riga per evitare errori difficilmente diagnosticabili.
Eventualmente si può voler specificare quanto spazio deve intercorrere tra una colonna e l'altra. Per fare ciò ci viene in aiuto il comando p{distanza}. Sempre meglio esprimere tale distanza in valore relativo:

\begin{tabular}{p{.3\textwidth}r}

bianco & 102,5 \\

nero & 15,4 \\

\end{tabular}


Per inserire righe verticali si utilizzi il comando \hline.
Al posto di \hline, per migliorare la visibilità si può usare il pacchetto booktabs che ci permette di inspessire le linee o creare righe a metà:

\begin{tabular}{llr}\toprule

Pippo & bianco & 102,5 \\\cline{2-3}
Pluto & nero & 15,4 \\\midrule
Paperino & giallo & 12,4 \\\bottomrule
\end{tabular}

Particolarmente utili sono i comandi che permettono ad un testo di occupare più righe (nel caso di titoli) o più colonne (tramite il pacchetto multirow):


\begin{tabular}{lr} \toprule
\multicolumn{2}{c}{intestazione}\\ \toprule
\multirow{2}*{colore} & 102,5 \\
& 15,4 \\ \bottomrule
\end{tabular}

domenica 8 febbraio 2009

Lettere di inizio paragrafo su due linee in LaTeX

Premessa

In un documento, un effetto particolarmente accattivante è rappresentato dalla prima lettera di un paragrafo che occupa due linee come in figura:

Per ottenere questo effetto è possibile utilizzare il pacchetto lettrine.
A questo scopo, si inserisca nel preambolo il consueto:

\usepackage{lettrine}

mentre nel documento, per creare una lettera che occupi più linee (come si nota dall'esempio sottostante si possono specificare nelle opzioni) si può procedere come segue:

\lettrine[lines=2]{S}{}copo di questa appendice è...

Un piccolo problema può insorgere nel momento in cui si voglia inserire un apostrofo subito dopo la lettera come nel caso "L' ".
In questi casi si può semplicemente inserire uno spazio "negativo" tra la lettera e l'apostrofo come segue:

\lettrine[lines=2]{L\negthinspace'}{ }obiettivo

oppure:

\lettrine{L\neghtinspace'}{obiettivo della presente} dissertazione è...

sabato 7 febbraio 2009

Codice di programmazione dentro un file Latex/LyX

Premessa

Può essere necessario, lavorando con LaTeX o LyX inserire all'interno del testo del documento alcune parti nelle quali si vuole mantenere la formattazione originale senza alcun intervento del motore LaTeX.
Un classico esempio è l'inserimento di codice di programmazione dentro un documento LaTeX.
Questo può presentare spazi o tabulazioni che verrebbero ignorati oppure simboli come le parentesi graffe, per fare un esempio, che sarebbero male interpretate dal motore generando errori.

Prima soluzione

Per risolvere questo problema, in prima istanza, si può utilizzare l'ambiente verbatim.
Questo ambiente consente di inserire del codice o qualsiasi testo mantenendo la formattazione originale.
Un esempio banale può essere:

\begin{verbatim}

int i=0;
int c=0;
for(i=0;i<=33;i++){
print "Prova di valore su I": $i;
}
\end{verbatim}

In questo modo tutto ciò che sta dentro l'ambiente verbatim non viene analizzato dal motore che lo riproporrà così come lo abbiamo scritto.
Questo ambiente va benissimo in svariate occasioni ma di seguito vedremo una soluzione più accattivante.

Soluzione più elegante

Recentemente, su forum del Gruppo italiano utilizzatori LaTeX, ho scoperto l'esistenza del ambiente lstlisting che ha proprio lo scopo di permettere l'inserimento di codice dentro un documento.
Premetto che consiglio la lettura del documento per altro molto scorrevole.
Potete trovarlo cliccando qui
Il pacchetto va scaricato opportunamente ma non si ritiene questa la sede per spiegare il metodo dato che cambia a seconda della distribuzione LaTeX e dal sistema operativo.
La prima cosa da fare è aggiungere il pacchetto nel preambolo:

\usepackage{listings} %Per inserire codice
\usepackage[usenames]{color} %Per permettere la colorazione dei caratteri

A questo punto possiamo procedere come segue nel testo:

\begin{lstlisting}[caption={Programma Blink, "Hello World!"}]
CODICE PROGRAMMA...
\end{lstlisting}

Il pacchetto, però, se utilizzato semplicemente in questo modo non darebbe molto valore aggiunto se confrontato con verbatim.
Al contrario da a mio avviso tre grossi vantaggi:
  • Permette di evidenziare le parole chiave all'interno del listato
  • Permette la creazione di nuovi ambienti ad hoc
  • Permette la creazione di codice all'interno di oggetti mobili
Nel esempio che segue, creiamo grazie al pacchetto, un nuovo ambiente e nel testo si andrà ad utilizzare tutte le volte necessarie.

\lstnewenvironment{codice_arduino}[1][]
{\lstset{basicstyle=\small\ttfamily, columns=fullflexible,
keywordstyle=\color{red}\bfseries, commentstyle=\color{blue},
language=C++, basicstyle=\small,
numbers=left, numberstyle=\tiny,
stepnumber=2, numbersep=5pt, frame=shadowbox, float=*, #1}}{}

Questo codice può essere inserito nel preambolo e permette di creare un ambiente nel quale:
  • il carattere è più piccolo del resto del corpo e con carattere appartenente alla famiglia ttf \lstset{basicstyle=\small\ttfamily;
  • con le colonne allineate a sinistra e non giustificate in modo da mantenere l'allineamento del codice rispetto tabulazioni o spazi columns=fullflexible;
  • le parole chiave siano di colore rosso e grassetto keywordstyle=\color{red}\bfseries;
  • i commenti siano colore blue commentstyle=\color{blue};
  • il linguaggio sia il C++ language=C++,
  • che ci siano i numeri sulla sinistra del listato più piccoli rispetto al listato numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt,
  • che ci sia una cornice tutto intorno al listato frame=shadowbox,
  • che il listato sia flottante rispetto al testo float=*,
  • dove l'utente possa eventualmente specificare altre opzioni come, ad esempio, la didascalia #1
Il codice che seguirà nel testo permette di utilizzare questo nuovo ambiente che ho chiamato codice_arduino in maniera trasparente ed eventualmente posso aggiungere valori opzionali.
Segue codice esplicativo:

\begin{codice_arduino}[caption={Programma Blink, "Hello World!"}]
/* Blinking LED
* ------------
*/

int ledPin = 13; // LED connected to digital pin 13

void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}

void loop()
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}
\end{codice_arduino}

Il risultato è il seguente: