Ho trovato questa magnifica guida su come abilitare il supporto UTF-8 sulla propria box, visualizzare i caratteri giusti da terminale, e configurarlo anche un po’. :)
Io l’ho trovata magnifica.

Si scarica l’archivio ucs-font, si legge il readme dove ci sono le istruzioni (semplicissime) e si compilano i font.

Altra cosa per cui mi è stata utile la guida: la configurazione dell’Xterm sull’e3pc in modo da non perderci gli occhi.
Modifiche a ~/.Xdefaults:
[code lang="bash"]! Colorazione di Xterm
*VT100*foreground: gray90
*VT100*background: black

XTerm*faceName: Droid Sans Mono
XTerm*faceSize: 10
XTerm*cursorBlink: true
XTerm*locale: true
XTerm*saveLines: 32768[code]

Già che ci si è, se vogliamo qui c'è il pacchetto per le font Terminus: http://slackbuilds.org/repository/13.1/system/terminus-font/, definito come "The Terminus font (http://www.is-vn.bg/hamster/terminus-font-4.14.tar.gz), created by Dimitar Zhekov, is the best monospaced bitmap font ever. I never switched to other fonts since I discovered it. It works extremely well in text terminals and code editors." (Io lo piglio solo perchè mi ricorda Asimov, per ora) :-P

Causa smanettamenti allegri sulla mia slack13, mi sono messo a guardare xdm da vicino… ma io lo credevo più scemo, e invece è una figata di programma.

Xdm (X Display Manager) è un programma che gestisce il login in ambiente grafico su una box linux (locale o remota). Essenzialmente aspetta per un login, controlla se l’utente è valido e, in caso affermativo, lancia una sessione.

Per vedere un po’ di configurazioni si deve andare in /usr/lib/X11/xdm/ e li seguire l’ordine degli script/comandi che vengono lanciati e delle configurazioni che vengono richiamate:

  1. xdm-config
  2. Xservers / Xaccess
  3. Xresources (ci sono i parametri per personalizzare la propria schermata di login)
  4. Xsetup (il setting e lancio del widget per fare il login – io qui ho settato il layout della tastiera)
  5. Xstartup (dopo il login, xdm come root lancia questo script per aprire una sessione)
  6. Xsession (questo è lo script-file che inizializza la sessione e lancia l’eventuale window manager)
  7. … e poi altro, se la sessione si conclude.

Xsession è sostanzialmente lo script-configurazione che conta – quello che carica i settaggi (ie: /etc/profile).
Se Xsession non trova le opzioni di lancio del Window Manger, va a prenderle da /etc/X11/xinit/xinitrc che di solito è un link simbolico ad eventuali altre configurazioni del wm nella stessa dir.

Riferimenti:
- man xdm
- Taming The X Display Manager

Link alla versione online: lwp.interglacial.com/
Link allo zip scaricabile: interglacial.com/temp/lwpbook.zip

LWP (short for “Library for World Wide Web in Perl”) is a set of Perl modules and object-oriented classes for getting data from the Web and for extracting information from HTML.

La shell bash e find continuano ad emanare il loro esagerato fascino su di me, nonostante le insidie che presentano.

Su irc.freenode, c’è un canale #bash che trovo interessante solo da seguire come osservatore esterno.

Da man:

SYNOPSIS
       find [-H] [-L] [-P] [path...] [expression]

Lasciamo perdere le opzioni, e path è il path da cui cominciare la ricerca.
Le espressioni si suddividono in 3 categorie: options, tests, actions; il tutto è separato da operators – ed in mancanza di essi si suppone siano degli -and.

Test

Una delle cose più ganze sono i test; descrivo quelli che mi sono utili in condizioni comuni.

  • -empty : ritorna i file vuoti.
  • -name pattern : dove pattern e’ il nome del file da cercare, ed è meglio quotare il pattern per evitare che la shell espanda i caratteri speciali (ie: insomma, usare ‘*jpg’ invece del semplice *jpg). -iname è la versione case insensitive.
  • -type c : ritorna vero dove c è il tipo di file indicato (d per le directory, f per i file, l per i link simbolici, p per le pipe, s per i socket…).
  • -size nn : fa un test legato alla grandezza del file. Può gestire un prefisso +/- per indicare se il test deve essere su numeri maggiori o minori di quello indicato, e un suffisso c,k,M,G che indica rispettivamente byte, kilobyte, megabyte e gigabyte.
  • -perm mode : cerca i file con i permessi esatti indicati (ie: -perm 0644 cerca tutti i file con esattamente i permessi di -rw-r–r– )
  • -path pattern : fa un matching come -name, ma si basa sull’intera directory invece che solo sul (base)name del file e non tratta in maniera speciale i metacaratteri . e /.
  • -amin/-atime n : Ritorna vero se l’ultimo accesso (file utilizzato) è stato effettuato n minuti o giorni fa.
  • -mmin/-mtime n : Ritorna vero se l’ultima modifica al file è stata effettuata n minuti o giorni fa.

I valori numerici possono avere come prefisso nulla, un + (più) per indicare una cifra maggiore di quella indicata, e un – (meno) per indicare una cifra minore di quella indicata.

sim@idrogeno:~$ find . -maxdepth 1 -type f -size +1M

Trova tutti i file (-type f) al primo livello (-maxdepth 1, quindi non va nelle subdir) dato il path di partenza (.), con size maggiore di 1 Mega.

Opzioni

Le opzioni non mi sembrano particolarmente interessanti, quindi andate di man. :-P

  • -maxdepth nn : indica per quanti livelli discendere nella ricerca. 0 è la linea di comando, 1 è la dir attuali, 2 indica le subdir subito seguenti, ecc…
  • -mindepth nn : come sopra, ma non applica i test nelle dir indicate…
  • -mount/-xdev : non discende in directory che sono in altri filesystem – molto utile per evitare di girovagare fra mount di samba o altro…

Actions

Qui si comincia a ridere…
Le azioni fanno. Per l’esattezza di solito fanno qualcosa coi file che hanno passati i test. Alcune possono in definitiva essere pericolose – in quanto ottengono risultati.

  • -print : la più banale, innocua e semplice (e di default): stampa il risultato dei test. -print0 stampa con un \0 finale (no newline).
  • -ls : stampa info sui file che hanno superato i test come se si fosse digitato ls -dils per ognuno di essi. (d: visualizza il nome delle dir ma non il loro contenuto, i: visualizza l’inode del file, l: formato esteso, s: stampa la size in blocchi).
  • -exec comando \; : esegue l’argomento di -exec fino al ; (che ha un escape davanti per evitare di essere “mangiato” dalla shell). La stringa {} è rimpiazzata dal filename attuale – e deve essere escape’ata anch’essa. Il comando viene eseguito una volta per file match’ante.
  • -ok comando \; : funziona come -exec, ma chiede conferma.
  • -printf formato : visualizza seguendo il foramto tipico della printf del C.
  • -prune : se il file è una dir, non discende attraverso di essa.

Operatori

Gli operatori spesso non vengono capiti nelle espressioni di find, ma sono pochi e semplici da capire. Ricordo che se fra due espressioni non c’è alcun operatore, si assume ci sia -and.
Le parentesi ( )forniscono la precedenza da seguire, in casi ambigui.

  • ! / -not : negazione
  • -a / -and : and
  • -o / -or : or

Esempi:
* Ricerchiamo file vuoti nella nostra home:

sim@idrogeno:~$ find . -empty -and -print

Spiegazione: trova nel path . i file che passano il test -empty e stampa. notare che -print è assunto di default e gli -and sono messi in automatico fra le condizioni quando mancano; in pratica find -empty dice già a find di cercare tutti i file nella directory locale che superano il test di size zero, e li stampa a terminale.

* Ricerchiamo file dove l’utente non siamo noi nella nostra home.

sim@idrogeno:~$ find . -not -user sim -print

* Ricerchiamo file esagerati… (e le risposte non vi piaceranno)

sim@idrogeno:~$ find . -size +1G -ls

(Brutta cosa, mi ha fatto vedere questo:

7373607 1998756 -rw-------   1 sim      sim      2044723200 Aug 18 07:14
  ./.kde/share/apps/nepomuk/repository/main/data/virtuosobackend/soprano-virtuoso.db

e io non ho kde come DE… F@nku)

Manipolazioni interessanti di nomi di file:

sim@idrogeno:~$ find . -path ‘./.spamassassin’ -prune -or -name ‘*xml’ -size +1M -print -exec bash -c ‘echo ${0%.xml}-obeso.xml’ \{} \;

Dunque, questa è uno scherzo con echo, ma si possono fare cose ganze ovviamente con gli accorgimenti di questa riga.
In pratica find cerca in locale, se trova un path che si chiama ‘./.spamassassin’ lo evita (-prune), poi cerca i file con il nome che si conclude con xml, di grandezza superiore ad 1MB e li stampa con l’azione print, inoltre per ogni file esegue anche una shell bash che prende il comando da stringa (con -c); echo ${0%.xml}-obeso.xml semplicemente prende il nome del file sotto analisi con {}, lo passa a $0 (in quanto primo argomento dopo la stringa), ne fa un espansione tagliata con %.xml e ci aggiunge il resto.

Grazie a stringhe come l’ultima, si possono eseguire compiti anche molto complessi con find, -exec e bash insieme. :-)

Orco boia, bisognerebbe conoscerlo bene sto benedetto bash… :-(

Il carattere $ introduce l’espansione di un parametro:

sim@idrogeno:~$ saluti=‘Saluti da H’
sim@idrogeno:~$ echo $saluti
Saluti da H

Fin qua easy.

Il parametro da espandere può essere racchiuso fra parentesi graffe { } per evitare ambiguità: $saluti è identico a ${saluti}. E anche qua, easy.

Cose più ficche sono queste:

Default values: ${parameter:-word}
Assign: ${parameter:=word}
${parameter:?word}
${parameter:+word}
${parameter:offset}
Substring: ${parameter:offset:length}
...

Il primo costrutto funziona come un operatore ternario: parameter ? parameter : word.
Il secondo fa anche l’assegnamento.
Ecc…

sim@idrogeno:~$ echo ${saluti:-‘Saluti da Mario’}
Saluti da H
sim@idrogeno:~$ echo ${greetings:-‘Saluti da Mario’}
Saluti da Mario

$saluti era già assegnato, quindi non è stato cambiato il suo contenuto. $greetings invece era vuoto, quindi è stato stampata a schermo l’alternativa (“Saluti da Mario”).
Comunque, se stampiamo $greetings

sim@idrogeno:~$ echo $greetings

sim@idrogeno:~$ echo ${saluti:=‘Saluti da Mario’} ${greetings:=‘Saluti da Pippo’}
Saluti da H Saluti da Pippo
sim@idrogeno:~$ echo $greetings
Saluti da Pippo

$greetings era vuoto, perchè :- non assegna. Con := abbiamo l’assegnamento se la variabile non è null o undef.
:+ funziona alla rovescia: non rimpiazza se la variabile ($caio) è vuota, ma se ne prendiamo una con già un contenuto ($greetings) ritorna il valore alternativo.

sim@idrogeno:~$ echo ${caio:+pippo}

sim@idrogeno:~$ echo ${greetings:+pippo}
pippo
sim@idrogeno:~$ echo $greetings
Saluti da Pippo

Come si nota dall’ultima riga, :+ non assegna il nuovo valore (che quindi rimane quello precedente), ma ritorna solo un’alternativa al check se il parametro è vuoto.

L’espansione con :? serve a produrre messaggi di errore con il testo di word nel caso il parametro sia null/undef.

sim@idrogeno:~$ echo -e ${caio:?Questo \$caio è proprio vuoto}
bash: caio: Questo $caio è proprio vuoto

Riferimenti: Bash Reference Manual

Peccato che gli e3pc prima generazione con Linux e dischi fissi a stato solido non siano andati. A me parevano una gran cosa, ma a quanto pare il mercato si è orientato su altro.

La nuova generazione di cpu ATOM al posto dei Celeron, hdd iper-capienti e schermi da 10″; io trovo che per girovagare sia comodo avere schermi anche più piccoli e che dischi solidi da 20 giga siano fantastici (si, i 4 del primo modello erano pochi – ma avevo ovviato con schede SD e qualche chiavetta usb sempre con me).
Altra cosa su cui sto riflettendo sono le batterie: ovvio che un portatile debba avere autonomia, ma ho visto le nuove batterie a 6 celle e sono sicuramente ingombranti e pesanti; non sono sicuramente “il problema”, ma la comodità di stare sotto il Kg di peso richiede batterie da 3-4 celle.

Comunque, dicevo, giustamente anche ASUS si è adattata al mercato, ma così io non trovo più quello che riterrei “comodo” per me… dunque meglio ravanare fra le cose vecchie dei magazzini e raccattare qualche vecchio netbook a cifre ribassate (e3pc 900 a meno di 200 euro).

Onestamente il 700 era più carino, disegnato meglio dal lato estetico – inoltre il 900 mantiene la stessa tastiera che è una croce per chiunque (ma io mi sono allegramente adattato le volte che sono stato in giro – posso scrivere con una mano sola. :-) peccato per i tasti del minore e maggiore che invece sono scomodissimi).
Le fichezze in più sono: più schermo (9 pollici), più RAM (1 giga), un lettore SSD che mi pare migliore, e più spazio in /, che un po’ mi serviva – nel vecchio avevo installato java e fatto compilare kernel in memorie esterne… non proprio comodissimo e rapidissimo.
Il vecchio 700 potrebbe diventare un ottimo server casalingo silenziossissimo… L’idea mi piace molto – vedremo.

Ammesso che lo Xandros sul 900 verrà brasato presto, ho intenzione di muovermi un po’ diversamente che in precedenza; così lascio qualche traccia.

Permessi di root

Diventare root su Xandros è molto semplice: tab “Lavoro” -> File Manager -> Strumenti > Apri finestra Console (Ctrl+T). Digitare sudo bash, e quel pirla di OS permette di diventare root: passwd da root su root e il gioco è fatto.

Il BIOS

Ho flashato il BIOS prendendo da qui il 1006; una pena esagerata, ma alla fine ce l’ho fatta. Prendete una chiavetta usb da 1 giga (dove non avete niente su) e formattate il fs.

# mkfs.msdos -F 16 -I /dev/sdf

Scaricate il BIOS nuovo dal sito, copiate lo zip sulla chiavetta, aprite l’archivio, estraete la ROM, e… cambiate nome al file: l’EZ-Flash dell’asus non è ancora così furbo come quelli nuovi, e cerca un file specifico che si chiami 900.ROM. Se cambiate il nome del file ora, fate prima.
Prendete l’e3pc, lo avviate (se partono le schermate grafiche dovete andare nel bios all’avvio [F2] e disattivare le opzioni di avvio rapido e silenzioso – in modo da avere più tempo e vedere a che punto è l’avvio della macchina), aspettate le prime scritte, poi pigiate Alt+F2: a quel punto dovreste leggere qualcosa sul flashing del bios, e la ricerca di drive USB. Inserite la chiavetta con la ROM. Se va tutto bene, la trova, la legge, se la scrive, cancella il vecchio e installa il nuovo. Compaiono delle scritte sullo schermo MENTRE fa. Se si blocca scrivendo ‘Reading file “900.ROM”‘ e sta fermo per diversi secondi, non sta trovando il file, quindi meglio riavviare (si tenga conto che riavviare il pc mentre il BIOS sta caricando la ROM, è invece pericolosissimo e probabilmente renderà il pc inutilizzabile).
Nota: la cosa di per sè è semplice, ma spesso c’è da smadonnare perchè sono procedure molto “grezze”: ho dovuto cambiare 3 chiavette, formattarle in diversi modi (con e senza partizioni), prima di vedere andare liscia la flash’ata.

La struttura del filesystem

L’e3pc ha due dischi a stato solido, uno da 4 Giga e l’altro da 16. Non c’è swap.

$ cat /proc/partitions
major minor  #blocks  name

   8        0    3940272 sda
   8        1    2409718 sda1
   8        2    1510110 sda2
   8        3       8032 sda3
   8        4       8032 sda4
   8       16   15761088 sdb
   8       17   15759733 sdb1

La home dell’utente è puntata su sdb1, e la root di sistema (/) su sda1. E il resto?
/dev/sda2 contiene dei file di configurazioni di sistema – se ho capito bene da qui (la spiegazione mi pare ragionevole, non ho indagato), la logica è semplice: gli aggiornamenti e altre modifiche vanno a scrivere “cose” in sda2, sovrapponendosi in lettura a ciò che è scritto in sda1; se per qualche ragione qualcosa si rompe, lo strumento di ripristino cancella le configurazioni sbagliate su sda2, e si torna alle originali su sda1.
La sostanza, è che a me interessa portarmi a casa sda1 per vedere com’è fatto (lo copierò su idrogeno), e poi brasare tutto e avere tanto spazio libero come feci sull’e3pc 700. Il comando magico (occhio, dd è un po’ pericoloso) dall’e3pc è:

# dd if=/dev/sda1 | ssh sim@idrogeno "dd of=/home/sim/storage/e3pc-900.img"

L’immagine di sda1 verrà trasmessa via ssh nell’output file indicato.

Risolto anche questo, sono potuto passare all’installazione del nuovo OS. :-)

Ma gli indirizzi di posta sono case sensitive o meno?
Se spedisco a Mario.Rossi@gmail.com la mail arriva a mario.rossi@gmail.com?

Sì, arriva, ma “per sbaglio”.

In teoria l’RFC2821 recita:

The local-part of a mailbox
MUST BE treated as case sensitive. Therefore, SMTP implementations
MUST take care to preserve the case of mailbox local-parts. Mailbox
domains are not case sensitive. In particular, for some hosts the
user “smith” is different from the user “Smith”. However, exploiting
the case sensitivity of mailbox local-parts impedes interoperability
and is discouraged.

I domini (ie: gmail.com) sono case insensitive.
La parte locale (ie: Mario.Rossi) è case sensitive, ma nella pratica si fa sì che funzioni per evitare casini.

That’s all, folks.

« Previous Articles    
SIMOTRONE WEB PAGE is based on WordPress platform, RSS tech , RSS comments design by Gx3.