24 dicembre 2008

Auguri di Buone Feste a Tutti!

Augurissimi di Buon Natale.

Perle della Bash[23-12]

Il comando alias non è altro che una abbreviazione di un dato comando, i comandi alias ci vengono in nostro aiuto in quanto la natura dei sistemi di tipo Unix, ci porta frequentemente a battere sulla tastiera lunghi comandi.

ad esempio un alias è un comando come questo.
# con il comando off ci permette di fare lo spegnimento di sistema invece di shutdown -h now
:~$ alias off='shutdown -h now'

ecco altri esempi di comandi assegnati ad un alias.
questi i semplici comandi.
:~$ cat /proc/cpuinfo
:~$ cat /proc/meminfo

e questi sono gli alias settati.
:~$ alias me='grep memfree /proc/meminfo'
:~$ alias p='grep cpuinfo  /proc/cpuinfo'

se non ricordiamo più tutti i nostri alias settati in nostro aiuto ce il semplice comando alias senza argomenti.
# visualizza tutti gli alias settati
:~$ alias

Se decidessimo di non volere più alias settati sul nostro sistema basta semplicemente il comando (unalias comando='settato -argomento').

ecco l'esempio concreto per rimuovere gli alias creati in precedenza.
# rimuove l'alias
:~$ unalias me='grep memfree /proc/meminfo
:~$ unalias p='shutdown -h now'

una chicca per gli amici che provengono da anni di sistemi windows(e di conseguenza dal Prompt dei comandi), se con una shell vi trovate spaesati con delle alias potrete ricreare i vostri comandi che divergono dalle vostre abitudini.

ecco un esempio.
:~$ alias copy='cp'
:~$ alias dir='ls'
:~$ alias rd='rmdir'

e cosi via con tutti i comandi che volete. Credo vi sentirete più a casa vostra.

E questo e quanto, credo che una volta capito il sistema creare alias sia un modo più veloce e efficiente per essere padroni della nostra shell.

23 dicembre 2008

[PYTHON]Il Tipo List

Le liste sono il tipo di oggetti più flessibili tra quelli disponibili in Python.
Questo significa che le liste possono contenere più tipi di oggetti: stringhe, numeri,
e altre liste(annidate)all'interno di altre liste. Tra l'altro le liste possono essere
modificate sul posto tramite sezionamenti, cancellazione, assegnamenti indicizzati, ecc.

Ecco alcuni esempi di lista

list = [] #lista vuota
list = [0,1,2] #lista con tre elementi
list = ['Python', ['Perl', 'Php']] #lista annidata


E qui le liste al lavoro tramite assegnamento, che come detto qualche riga più su il tipo list è modificabile sul posto ecco un esempio che tramite assegnamento [2] modifica
'Ruby' con 'Haskell'.

>>> lista = ['Java','Jython','Ruby','Javascript','Python']
>>> lista[2] = 'Haskell'
>>> lista
['Java', 'Jython', 'Haskell', 'Javascript', 'Python']

possiamo anche sostituire tramite assegnamento un pezzo di lista con un altra eliminando 'Java' e aggiungendo 'Css' e 'Xhtml'.

>>> lista[0:1] = ['Css','Xhtml']
>>> lista
['Css', 'Xhtml', 'Jython', 'Haskell', 'Javascript', 'Python']


possiamo rimuovere completamente la lista.

>>> del(lista)
>>> lista
Traceback (most recent call last):
File "", line 1, in
NameError: name 'lista' is not defined



adesso per osservare il meglio delle liste ne creiamo una ex novo contenente i quattro elementi della terra.

>>> newLista = ['Acqua','Terra','Aria','Fuoco']
>>> newLista
['Acqua', 'Terra', 'Aria', 'Fuoco']


possiamo invertire la lista appena creata.

>>> newLista.reverse()
>>> newLista
['Fuoco', 'Aria', 'Terra', 'Acqua']


come avevamo detto in precedenza, le liste sono mutabili ecco che con il metodo append aggiungiamo un elemento in coda alla lista.

>>> newLista.append('Animali')
>>> newLista
['Fuoco', 'Aria', 'Terra', 'Acqua', 'Animali']



>>> newLista[0:2] = ['Pesci','Vulcano']
>>> newLista
['Pesci', 'Vulcano', 'Terra', 'Acqua', 'Animali']


se vogliamo inserire un oggetto in una particolare posizione insert e il metodo che fa per noi,
che inserisce nel terzo indice(in Python si inizia a contare da zero) 'Ippopotamo'.

>>> newLista.insert(3,'Ippopotamo')
>>> newLista
['Pesci', 'Vulcano', 'Terra', 'Ippopotamo', 'Acqua', 'Animali']


ecco il metodo extend che aggiunge sempre 'Ippopotamo' ma nel modo seguente

>>> newLista.extend('Ippopotamo')
>>> newLista
['Pesci', 'Vulcano', 'Terra', 'Ippopotamo', 'Acqua', 'Animali', 'I', 'p', 'p', 'o', 'p', 'o', 't', 'a', 'm', 'o']


il metodo remove ovviamente rimuove un indice esattamente 'Pesci'.

>>> newLista.remove('Pesci')
>>> newLista
['Vulcano', 'Terra', 'Ippopotamo', 'Acqua', 'Animali', 'I', 'p', 'p', 'o', 'p', 'o', 't', 'a', 'm', 'o']


il metodo pop rimuove un elemento tramite indice e nello stesso tempo restituisce il valore dell'elemento che viene cancellato in questo caso 'Vulcano'.

>>> newLista.pop(0)
'Vulcano'


qui tramite il metodo index viene riconosciuta la posizione dell'indice passato come argomento
in questo caso Acqua che ha 2 come indice.

>>> newLista
['Terra', 'Ippopotamo', 'Acqua', 'Animali', 'I', 'p', 'p', 'o', 'p', 'o', 't', 'a', 'm', 'o']
>>> newLista.index('Acqua')
2

e qui il metodo count che indicizza come 1(ovviamente si inizia la conta da zero)'Ippopotamo'.

>>> newLista.count('Ippopotamo')
1
>>>

18 dicembre 2008

Perle della Bash [18-12]

Man mano che nel sperimentare(spero con meno danni di quelli già fatti) la shell in particolare la bash e imparo comandi o trucchetti nuovi, sarò felice di condividerlo con tutti quelli che lo vorranno. Questo è anche un modo per motivare me stesso a imparare la shell, che di Gnu/Linux come io ritengo, è la stanza dei bottoni.

Scrivere uno script in bash è molto semplice basta aprire il vostro editor che usate di solito e iniziare a scrivere del codice come il seguente
#!/bin/bash

echo 'Ciao sono la shell sarò sempre al tuo fianco!'

ps ax | wc -l

echo 'bye.'

e salvare il listato con nome_script.sh, poi rendere lo script eseguibile con
:~$ chmod 755 nome_script.sh

e eseguirlo in questo modo
:~$ ./nome_script.sh.

Ma possiamo eseguire la stessa porzione di codice anche in un modo diverso che è quello interattivo. Cioè eseguire il tutto da shell senza scrivere una riga di testo nel nostro editor. esattamente scriviamo lo script senza #!/bin/bash nella shell cosi
:~$ echo 'Ciao sono la shell sarò sempre al tuo fianco!'

:~$ ps ax | wc -l

:~$ echo 'bye.'

e avremo l'output di quanto scritto nel Terminale stesso, niente di difficile vero?

Bene adesso continuiamo nel testare la nostra shell sempre in modo interattivo.




Se abbiamo l'esigenza di rimuovere tutte le righe bianche in un file di testo o in un nostro script sed e nostro amico.
:~$ cat poema.txt | sed /^$/d

tutt'altra cosa è quando non sappiamo dove si trova un determinato file(o anche più di uno) possiamo usare un comando che lo cerca nel sistema è una volta trovato lo elimina.



tipo questo comando che trova e rimuove tutti i file con estensione .bak(bakup).
:~$ rm $(find . -name '*.bak')

se invece abbiamo una directory piena zeppa di file e vogliamo trovare una certa stringa o parola che sia contenuta in ognuno di questi file, ecco quello che fa per noi.

:~$ ls | grep open | wc -l

cerca la stringa open in tutti i file contenuti nella directory corrente.

Certo sicuramente non ce niente di impegnativo in questi comandi, ma iniziare dalle cose piccole
è sempre il modo migliore per sperimentare e approfondire, soprattuto nei riguardi della shell.

10 dicembre 2008

Installare Django per la Prima Volta

Questo mini-tutorial su l' installazione del Framework django presume che tu
non abbia mai installato e usato il Framework. In poche parole che tu sia un vero "Dummies",
di conseguenza la via per installare e mettere in "funzione" django sarà la più semplice
possibile, quindi niente installazioni "esotiche" tipo SVN o via Setuptools.
Il mio consiglio e di installare django direttamente dal pacchetto ufficiale quindi niente apt-get(lo so che non se ne può fare a meno) al momento opportuno vi spieghero perché è forse mi ringrazierete.

Nonostante al momento la release più recente sia la 1.0.2 la versione che noi installeremo è la 1.0. Armiamoci di wget e scarichiamo il tar.gz [wget http://www.djangoproject/download/Django-1.0.tar.gz] o se preferite aprite il vostro browser preferito(spero che sia tra Firefox e Opera ;-)) e collegatevi sul sito http://www.djangoproject.com/download e scaricate il file Django-1.0.tar.gz.

Una volta scaricato il file Django-1.0.tar.gz lo scompattiamo(il termine spacchettare non mi piace)con il comando tipico tar, entriamo nella directory che si e venuta a creare col comando cd e installiamolo con setup.py install.

Ecco l'esempio pratico
:~$ tar xzvf Django-1.0.tar.gz

:~$ cd Django-1.0

:~$ sudo python setup.py install

adesso per avere la conferma che tutto sia andato per il verso giusto aprite una shell Python
e digitate il classico import di Python come da esempio


>>> import django
>>> django.VERSION
riceverete in output una tupla con la versione installata
(1,0, 'official')


ok siamo già a un buon punto(siete eccitati? eh!)adesso che django e installato, e arrivato il momento di sapere perché abbiamo preferito il .tar.gz all'amichevole apt-get. Installando django con setup.py install possiamo creare la directory del nostro progetto dove meglio
ci aggrada al contrario di apt-get che ci costringe(provare per credere)ad una lunga ricerca tra il filesystem per capire dove ha posizionato la directory giusta che contiene django.admin.py.

Ma non solo, installare con setup.py install dovrebbe permetterci di lanciare django.admin.py startproject pommy anche da più parti nel filesystem visto che il setup.py, ci setta django.admin.py già nel path Python e cosi facendo non dovremo creare link simbolici.

Però visto che stiamo operando al computer,(e certe volte accadono cose che non riusciamo
a comprendere), nell'eventualità che non vi funzioni a dovere, allora creiamo un link simbolico, rendiamo eseguibile il file con un bel chmod 755 django-admin.py e siamo a posto.

Invece il link simbolico lo creiamo in questa maniera

ln -s /usr/lib/python2.5/site-packages/django/bin/django-admin.py /home/archie
(logicamente voi mettete il vostro utente).

Quindi adesso con il comando cd entriamo nella /home/archie(vostro utente) e diamo il comando che crea la nostra directory per l'applicazione django-admin.py startproject pommy(voi chiamatelo come volete) che ci crea la directory pommy più quattro file per settare il nostro progetto che sono __init__.py, manage.py, settings.py, e urls.py.

Adesso spiego brevemente la funzione che questi file hanno. Il file __init__.py altro non è che un file vuoto che permette a python di identificare la directory come packages,
il file menage.py contiene una serie di utility per il progetto corrente mentre Settings.py e urls.py non sono altro che dei file di configurazione del progetto Django creato. Esattamente il primo si occupa della configurazione globale del progetto, e il secondo consente di settare gli url del progetto creato in un modo molto pulito e elegante.

Come ho menzionato all'inizio del mini-tutorials, questa è una guida "for Dummies" quindi dei quattro files appena descritti(__init__.py, manage.py, settings.py, e urls.py)ne toccheremo solo uno, e faremo in modo da rendere disponibile un database minimo(sqlite3).

Bene aprite con il vostro editor il file settings.py troverete queste righe di codice


DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = ( )
MANAGERS = ADMINS
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''


le uniche aggiunte che dovrete fare sono quelle che vediamo sotto. Sono le stesse righe di codice che vedete sopra ma con le nostre aggiunte che sono il DATABASE_ENGINE con "sqlite3" e il nome da dare al vostro database DATABASE_NAME con "pommydb", ma voi potete chiamarlo come vi pare.


DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = ( )
MANAGERS = ADMINS
DATABASE_ENGINE = 'sqlite3' #1°aggiunta
DATABASE_NAME = 'pommydb' #2°aggiunta
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''


adesso aprite una shell ricercate la directory dove risiede manage.py e avviamo il database con

:~$ python manage.py syncdb

e per finire diamo un bel avvio al nostro server interno del nostro progetto con

:~$ python manage.py runserver


e aprite il vostro browser(rispero Firefox o Opera)e scriviamo http://localhost:8000 diamo INVIO e ammirate la pagina di benvenuto in tutto il suo splendore(eh..eh!!)per terminare il server Control-C.















Spero che sia stato chiaro, ciao.

6 dicembre 2008

Il Python Apprezzato Sempre di più


Python supera il Perl come linguaggio usato nell'anno 2007.

Ecco uno screenshot della classifica di Tiobe riguardo Novembre del 2007. Non mi resta che augurare lunga vita al Python e a Guido Van Rossum.

E Arrivato PYTHON 3.0 per gli Amici Py3K!

Dopo Python 2.6 il 3 Dicembre è arrivata a vedere la luce anche la tanto "chiacchierata" versione 3.0 di Python. Per chi mastica il linguaggio, sa che questa release porta con se importanti novità, e cambiamenti che per la prima volta rompe la compatibilita all'indietro ( backwards incompatible). Tra le novità più importanti ci sono, la nuova formattazione delle stringhe.

Print diventa una funzione invece di una istruzione, e di conseguenza implementa più funzionalità.



Old: print "The answer is", 2*2
New: print("The answer is", 2*2)

Old: print x, # Trailing comma suppresses newline
New: print(x, end=" ") # Appends a space instead of a newline

Old: print # Prints a newline
New: print() # You must call the function!

Old: print >>sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)

Old: print (x, y) # prints repr((x, y))
New: print((x, y)) # Not the same as print(x, y)!



adesso esiste un solo tipo intero vale a dire int.

Sparisce del tutto l'espressione <> (fino ad ora deprecato) si deve usare !=

la funzione precostruita raw_input(), diventa input()

as, with e nonlocal sono parole riservate.

Le funzioni apply() e reduce() non esistono più, la derivazione delle classi class func(object) non e più richiesta, cambia anche l'istruzione try except. Cambiano anche i metodi per i dizionari dict.keys(), dict.items() e dict.values() che adesso
restituiscono degli oggetti iterabili, per le liste adesso bisogna usare list().




Con Python 3.0 adesso ce un nuovo approccio allo standard Unicode, non si usa più u'....'
adesso tutto il testo è unicode, il "vecchio" metodo è utilizzabile solo per letterali binari b"....".

Cambiano anche le meta classi in questo modo:

vecchio stile

class C:
__metaclass__ = M

in nuovo stile

class C(metaclass = M):

sicuramente la nuova versione non sarà usata nell'immediato(soprattuto in produzione)da una larghissima base di sviluppatori(la 2.5 e la 2.6 hanno tanto da dire ancora)ma sicuramente sono state gettate le basi per rendere il linguaggio(già eccellente) sempre più dinamico e pulito da permettere di scrivere codice migliore e sempre più leggibile che in un linguaggio Open Source non guasta.

ora per non annoiarvi mi fermo qui,ma ce ancora tanta carne al fuoco. Quindi se la cosa vi ha
incuriositi un pochettino e volete approfondire l'argomento vi rimando al What's New e alla
nuova e corposa documentazione.

Happy Coding

1 dicembre 2008

Una Scuola e un Professore da Lodare

Ecco un Istituto da cui dovrebbero prendere esempio gli altri Istituti Scolastici. Grazie al coraggio di osare di un Docente Prof. Cantaro Antonio (da lodare) per aver scelto software Open Source per il suo Istituto, ma non solo, è anche il creatore di una (bella) serie di tutorials su GIMP (ma non solo)il nostro amato editor di file grafici.

30 novembre 2008

Visualizare i Processi in un Sistema Gnu/Linux

In un sistema UNIX o Linux like, i programmi o comandi(a secondo come vi piace chiamarli)non sono altro che processi del sistema dove ogni piccola utility e stata creata per svolgere un determinato compito.

Ad ogni processo sul sistema viene attribuito un PID(Process ID)univoco. Sulla mia Ubuntu il pid del programma che analizzeremo(nelle opzioni dell'utente user) e il 13685 che corrisponde a ps, (status process).

Quando lanciamo da utenti normali il comando ps di solito abbiamo un output come il seguente che ci indica il pid del processo nel terminale, il tempo che il processo impegna, la cpu e il comando eseguito.

esempio:


archie@blackdog:~$ ps
PID TTY TIME CMD
9635 PTS/0 00:00:00 bash
13685 PTS/0 00:00:00 ps

questo e quello che appare a video dando il comando ps da utente normale, vale a dire l'utente archie. Se usiamo il suddetto comando da root l'output a video invece sarà molto più esteso, e se il sistema su cui e stato eseguito ps e un sistema con molti utenti la schermata sarà alquanto lunga. Se restate sconcertati nel vedere tanto testo nella vostra shell, dovreste lanciare l'utility ps, con una pipe che filtra il tutto tramite l'utility more esempio:

archie@blackdog:~$ ps | more

oppure se volete avere la comodità di leggervi l'output con calma, dovreste reindirizzare il tutto in un file di testo come da esempio:

archie@blackdog:~$ ps > /home/archie/file_output.txt


Adesso passiamo alle opzioni più utili di ps.
Una delle opzioni più usate di ps, e "ps u"(status process dell'utente), che ci informa oltre ai soliti valori di sistema anche i processi dell'utente ecco un esempio:

archie@blackdog:~$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
archie 5771 0.0 0.4 5608 3212 pts/0 Ss 14:45 0:00 bash
archie 5810 0.0 0.1 2644 1004 pts/0 R+ 15:08 0:00 ps u

mentre una opzione più ricca di contenuto(ma che non ci dice chi a avviato i processi) e simile al comando ls dato dall'onnipotente root e questo esempio:

archie@blackdog:~$ ps a
PID TTY STAT TIME COMMAND
4163 tty4 Ss+ 0:00 /sbin/getty 38400 tty4
4164 tty5 Ss+ 0:00 /sbin/getty 38400 tty5
4168 tty2 Ss+ 0:00 /sbin/getty 38400 tty2
4170 tty3 Ss+ 0:00 /sbin/getty 38400 tty3
4173 tty6 Ss+ 0:00 /sbin/getty 38400 tty6
4971 tty7 Ss+ 0:21 /usr/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xaut
5196 tty1 Ss+ 0:00 /sbin/getty 38400 tty1
5771 pts/0 Ss 0:00 bash
5814 pts/0 R+ 0:00 ps a

per capire chi ha avviato i processi dovremmo usare il flag "au" o "ua", e la stessa cosa cambia solo l' incolonnamento dell'output. Ecco l'esempio:


archie@Blackdog:~$ ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 4163 0.0 0.0 1716 508 tty4 Ss+ 14:05 0:00 /sbin/getty 38400 tty4
root 4164 0.0 0.0 1716 512 tty5 Ss+ 14:05 0:00 /sbin/getty 38400 tty5
root 4168 0.0 0.0 1716 508 tty2 Ss+ 14:05 0:00 /sbin/getty 38400 tty2
root 4170 0.0 0.0 1716 508 tty3 Ss+ 14:05 0:00 /sbin/getty 38400 tty3
root 4173 0.0 0.0 1716 512 tty6 Ss+ 14:05 0:00 /sbin/getty 38400 tty6
root 4971 0.4 2.9 24848 18820 tty7 Ss+ 14:05 0:38 /usr/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nol
root 5196 0.0 0.0 1716 508 tty1 Ss+ 14:05 0:00 /sbin/getty 38400 tty1
archie 5771 0.0 0.4 5608 3012 pts/0 Ss 14:46 0:00 bash
archie 5818 0.0 0.1 2644 1004 pts/0 R+ 16:21 0:00 ps au

Le seguenti opzioni invece per motivi di output molto ma molto lunghi(almeno per quanto riguarda questa guida), il consiglio e di usarli nel modo menzionato sopra, con delle utility come more o less, oppure tramite re indirizzamento dell'output in un file di testo.
Le seguenti restanti flag per ps sono queste:

$ ps ax

$ ps aux

$ ps l

$ ps le

ora anche se abbiamo visto le opzioni più importanti e comuni di ps, vi invito a approfondire l' elenco(lungo parecchie schermate) completo dei restanti flag da usare. Quindi non resta che digitare nella vostra shell $man ps.


29 novembre 2008

La Shell Prima di Tutto


Un consiglio per le generazioni di futuri "Linux user".
Prima di apprendere qualsiasi linguaggio di programmazione(discorso a parte se siete costretti a impararlo) cercate di impadronirvi della shell.

Si.. lo so, si è molto tentati dalle "mode" del momento es: vedi Rails che inevitabilmente porta a studiare Ruby che è il linguaggio alla base del Framework, io stesso(come avrete avuto modo di vedere) sono un entusiasta utilizzatore di Python.

Come avrete modo di tastare con mano(forse dovrei dire con tastiera)se deciderete di studiare una shell, vi renderete conto che la shell in un sistema Unix-like, e la vera stanza dei bottoni.
Qualunque shell usiate bash, sh, csh, o ksh, una volta che arriverete a padroneggiarla, capirete anche il perché ci sia tanto"fanatismo" attorno ad un sistema di tipo Unix-like.

PYTHON: Iterazione su Dizionario

Iterare tramite il metodo keys su di un Dizionario Python

>>> Creatori = {'Linux':'Linus Torvald', 'Emacs':'Richard Stallman',
... 'Vim':'Bram Moolenaar', 'Python':'Guido Van Rossum'}
>>> print Creatori
{'Python': 'Guido Van Rossum', 'Vim': 'Bram Moolenaar', 'Emacs': 'Richard Stallman', 'Linux': 'Linus Torvald'}

>>> keys = A.keys()
>>> keys.sort()
>>> for extract in keys:
... print extract, ' <creator> ', A[extract]
...
Emacs <creator> Richard Stallman
Linux <creator> Linus Torvald
Python <creator> Guido Van Rossum
Vim <creator> Bram Moolenaar
>>>

23 novembre 2008

NetBeans 6.5 adesso si puo editare codice Python


Questa notizia potrebbe fare felici un po di persone, mi riferisco a quei sviluppatori ma
non solo(può fare piacere anche a chi scrive codice per proprio diletto)che amano editare il
codice del loro linguaggio preferito con questi IDE.

NetBeans dalla versione 6.5 permette tramite early access di poter editare sia codice Jython
che Python(CPython) in modo tipico degli ide, parliamo di importare modelli o progetti già
esistenti o di crearne di nuovi, ma non solo, e compreso di integrazione della shell python,
debugger, smart indent, outdent, code folding ecc, ecc.

Se vi siete incuriositi anche un pochino(a meno che non siate follemente innamorati di Eclipse e PyDev)il consiglio e di fare un giro su NetBeans ide Python, o se volete rendervi conto del suo funzionamento con degli screenshot dettagliati fate un salto sul blog di Tor Norbye's della SunMicrosystem .

Dizionari in Python

Creare un dizionario inizialmente contenente quattro chiavi, poi se ne aggiunge una quinta
tramite un test di esistenza, per poi cancellarne un'altra sino ad arrivare al dizionario
vuoto tramite la cancellazione totale delle chiavi contenenti i valori.

Questo è il codice commendato:

#crea il dizionario
>>> linguaggi = {'Perl': 'estrae del testo',
... 'Python': 'te ne innamori',
... 'Ruby': 'si usa per rails',
... 'Php': 'e stato il re del web'
... }
#stampa la chiave Python
>>> print linguaggi['Python']
te ne innamori
#verifica un test di esistenza
>>> if not linguaggi.has_key('Visual Basic'):
... linguaggi['Visual Basic'] = "per sviluppatori scadenti"
... #stampa il numero di elementi del dizionario
>>> len(linguaggi)
5
#cancella una chiave
>>> del linguaggi['Perl']
#la chiave Perl non ce più
>>> len(linguaggi)
4
#stampa il dizionario con il test verificato VB.. bleaah!
>>> linguaggi
{'Python': 'te ne innamori', 'Visual Basic': 'per sviluppatori scadenti', 'Php': 'e stato il re del web', 'Ruby': 'si usa per rails'}
#cancella il dizionario
>>> linguaggi.clear()
#ecco il dizionario vuoto
>>> linguaggi
{}
>>>

Booleani combinare risultati nei Test

con i booleani(bool) in Python un risultato TRUE corrisponde a un qualsiasi numero che non sia zero o a un qualsivoglia oggetto non vuoto(stringa, lista, dizionario, ecc) mentre un risultato FALSE corrisponde a un numero zero e a un qualsiasi oggetto vuoto, e anche all' oggetto speciale NONE.
In verità i risultati TRUE e FALSE altro non sono che versioni personalizzate degli interi 1 e 0.

Questi sotto sono dei piccoli esempi.


>>> I = 'spam'
>>> U = ' '
>>> if I and U:
... print I
... else:
... print U
...
spam



Questo è un piccolo omaggio ai Monty Python


>>> def Holy_Grail():
... return Holy_Grail
...
>>> def Soup_a_la_Clown():
... return Soup_a_la_Clown
...
>>> def Crucifixion():
... return Crucifixion
...
>>> 0 and Holy_Grail() or Soup_a_la_Clown() or Crucifixion()
<function soup_a_la_clown at 0x00e2ad70>
>>> 1 and Holy_Grail() or Soup_a_la_Clown() or Crucifixion()
<function holy_grail at 0x00e359f0>
>>> 1 and Holy_Grail() and Soup_a_la_Clown() and Crucifixion()
<function crucifixion at 0x00e35a70>

21 novembre 2008

Creare una Galleria di Immagini

Creiamo una galleria simpatica di immagini tramite una semplice lista non ordinata, naturalmente la parte grafica la formatteremo con i css

  • Ora creiamo il codice html, ovvero la lista dove inseriamo le immagini definendo la sola larghezza e altezza.


<ul id="min-gallery">
<li><img src="a.png" width="200" height="150" />immagine01</li>
<li><img src="b.png" width="200" height="150" />immagine02</li>
<li><img src="c.png" width="200" height="150" />immagine03</li>
<li><img src="d.png" width="200" height="150" />immagine04</li>
<li><img src="e.png" width="200" height="150" />immagine05</li>
<li><img src="f.png" width="200" height="150" />immagine06</li>
<li><img src="g.png" width="200" height="150" />immagine07</li>
<li><img src="h.png" width="200" height="150" />immagine08</li>
<li><img src="i.png" width="200" height="150" />immagine09</li>
<li><img src="l.png" width="200" height="150" />immagine10</li>
<li><img src="m.png" width="200" height="150" />immagine11</li>
<li><img src="n.png" width="200" height="150" />immagine12</li>
</ul>


  • Adesso e arrivato il momento di dedicarci alla formattazione css daremo alla pagina uno sfondo nero con il testo in bianco e il padding impostato a zero

  • Nasconderemo il tipo di lista


  • La lista la faremo flottuare a sinistra con un font sns-serif in grassetto 0.8em per la numerazione

  • E in fine bloccheremo le immagini alla pagina con un bordo di 2 pixel il tutto con il codice css sottostante



body {background-color: #000000; color: #ffffff; padding: 0;}
#min-gallery {list-style-type: none;}
#min-gallery li {float: left; margin-right: 6px; margin-bottom: 10px; font: bold 0.8em sans-serif; color: #ffffff;}
#min-gallery img {display: block; border: 2px solid #333300;}

E questo e uno screenshot della galleria che otteniamo

19 novembre 2008

Sudo vs Root

Chi a usato come unica distro es: Una Fedora e poi installa una qualsiasi versione di Ubuntu
non è poco il senso di smarrimento che prova non trovando più il suo amato super utente Root.

Ma non dovrebbero disperare più di tanto perché la soluzione è dietro l' angolo, per ripristinare
l'account Root in modo permanente basta digitare nel terminale

" archie:~$ sudo passwd root "
(naturalmente sostituite archie con il vostro utente e senza le virgolette)

che richiede linserimento della vostra password che usate con sudo più l' inserimento due volte della password che userete per abilitare l'utente Root.

Ecco un esempio che chiarisce ogni dubbio.

mettiamo che la password che digitate per l'utente con sudo sia yx12EXp3rt

e quella che vi abilitera l'utente Root sia l1m0N1@g4o-ab


dal terminale digitate archie:~$ sudo passwd root che corrisponde alla richiesta di abilitare Root

che richiede la vostra password: yx12EXp3rt

che a sua volta richiede la password per root: l1m0N1@g4o-ab

che richiede conferma della password per root: l1m0N1@g4o-ab

adesso avete il vostro amatissimo utente Root.


nota
io consiglio di usare sudo anche perché dopo un po lo si trova utile,
e cosa da non sottovalutare aumenta la sicurezza del sistema, e riduce
le probabilità di fare danni se non siete molto pratici di sistemi
Gnu/Linux.

14 novembre 2008

Semplicemente Bello!



Ragazzi quando ce vo, ce vo! Ammirate la bellezza di www.duoh.com(anche lei non è male)una vera perla di design. Mi riferisco al nuovo sito di Veerle Pieters, illustratrice, Grafica, e Web Designer belga.

Temporalizzare l'uso del PC ai propri Figli

Se pensate che vostro figlio/a stia troppo tempo al computer(parlo di sistemi Windows)leggete questo mini-howto e avrete risolto le vostre ansie di Genitore.
Facciamo un esempio, mettiamo che vostro figlio faccia un uso spropositato del pc il Sabato e la Domenica o che preferiate che dopo una certa ora invece di chattare vostro figlio guardi la Tv.

Si presuppone che sul vostro pc di casa l'account da Administrator sia in vostro possesso e non dei vostri figli! Pena restare interdetti voi stessi dal vostro pc quindi occhio.

Allora come detto sopra colleghiamoci con il nostro account di amministratore apriramo il menu da Start-> Tutti i programmi -> Accessori -> Prompt dei comandi e digitate il comando net seguito dall'utenza di vostro figlio nel seguente modo:

net user Giacomo /times:S-D,17.00-22.00


adesso vi spiego il significato di questo comando, il comando net permette all'user Giacomo(che sarebbe vostro figlio) di poter accedere al vostro pc il Sabato e la Domenica dalle ore 17.00 sino alle 22.00.

Se invece preferite che le restrizioni abbiano effetto per tutta la settimana basta separare i giorni con un punto e virgola come l'esempio sotto:

net user Giacomo L,17.00-22.00;M,17.00-22.00;M,17.00-22.00;G,17.00-22.00;V,17.00-22.00;S,17.00-22.00;
D,17.00-22.00
facile no?

Pero mettiamo che i vostri figli abbiano fatto i bravi per tutto il periodo stabilito da voi, e che quindi meritano un piccolo premio che potrebbe essere usare il computer senza nessun tipo di vincolo, be.., solo allora diamo sempre usando il login di Amministratore sempre il comando net ma in questo modo: net user Giacomo /times:all e gli lasciamo usare il
Pc in santa pace.

ps. Spero che usiate queste restrizioni sui vostri figli con cognizione di causa e non come "solo" metodo di punizione, altrimenti mi vedrò costretto a postare un mini-howto in favore dei vostri figli per eludere suddetta restrizione ;-).

2 novembre 2008

Python: le Funzioni Restituiscono Sempre un Valore

Le funzioni(def) in python ritornano sempre un valore, anche quando non viene usata una istruzione return o yield, in questo caso la funzione ritorna in modo automatico l'oggetto None.

questa è una def che ritorna un valore "una tupla" tramite l'istruzione return

>>> def nome_funzione(val):
... a = 'referenzia (a)'
... b = 'referenzia (b)'
... return a, b
...
>>> chiamata = nome_funzione('che ritorna un valore tramite return a, b')
>>> print chiamata
('referenzia (a)', 'referenzia (b)')
>>>

quest'altra def invece ritorna il valore di default None


>>> def nome_funzione(val):
... a = 'referenzia (a)'
... b = 'referenzia (b)'
...
>>> chiamata = nome_funzione('che ritorna il valore di default None')
>>> print chiamata
None
>>>

Intrepid Ibex è tra Noi


Il 30/10/2008 è stata rilasciata Ubuntu 8.10, detta Intrepid Ibex. Vi invito a scaricare la iso e provare con mano tutte le novità della nuovissima release di casa Canonical.

21 ottobre 2008

Collegarsi a un Database MySQL con Python

Creare una connessione tramite Python a un database MySQL esistente.


import MySQLdb

#connessione al Database
db = MySQLdb.connect(host="localhost", user="archie",
passwd="xjYHKab", db="TopSecret")

cursor = db.cursor()
#secuenza sql
cursor.execute("SELECT * FROM agentisegreti"
result = cursor.fetchall()
for record in result:
print record[0], "===", record[1]

PYTHON Dizionario a chiavi Miste

Creare un dizionario a chiavi di tipo misto

>>> Diz = {}
>>> Diz[1] = 'uno'
>>> Diz[2] = 'due'
>>> Diz[3] = 'tre'
>>> Diz[(1, 2, 3)] = 'vai!!'
>>> Diz
{1: 'uno', 2: 'due', 3: 'tre', (1, 2, 3): 'vai!!'}

15 ottobre 2008

Rilasciato Open Office 3.0.0!


Open Office, la suite libera per l'ufficio è stata rilasciata nella sua major release la 3.0.0 . Per chi ha la sua bella copia pirata di Microsoft Office(si lo so, tutti avete una o più copie pirata di Office) questo è il momento di lasciare stare le solite scusanti, è installare una suite d'ufficio da cui i vostri lavori finali in termini di grandezza pesano un quinto, di uno equivalente creato con la suite di casa Microsoft.

Non ci sono nemmeno più scuse per quanto riguarda la compatibilità con i documenti in formato .doc, l'interoperabilità ormai è al cento per cento basta salvare i vostri lavori in formato .doc è tutti i vostri colleghi e conoscenti potranno aprire i vostri file e lavorare su di essi.
Quindi se non avete soldini da buttare, e sopratutto volete usare una suite per ufficio(ma non solo)in modo legale non pirata, che se vi beccano sono dolori installate Open Office sono sicuro che non avrete da pentirvene.

Per approfondimenti è magari soddisfare la vostra curiosità non vi resta che fare un giretto sul sito italiano di Open Office. Che l'open source sia con voi.

11 ottobre 2008

GIMP 2.6 è tra noi

Periodo felice per il sottoscritto, molti dei miei software open source preferiti si rifanno il trucco è questo non può che rendermi particolarmente felice.
Dopo lo Gnome ecco arrivare il momento che farà felici anche molti altri utilizzatori di GIMP.

Si la notizia la do con un po di ritardo(maledetta influenza)ma sempre di buon grado per quei pochi che ancora non conoscessero questo eccellentissimo editor di immagini che è GIMP. Vi rimando per le nuove inclusioni alla release note sul sito di GIMP.

4 ottobre 2008

Rilasciata Python 2.6 Release!



Il 1° Ottobre è stata rilasciata la nuova release di Python esattamente la versione 2.6 finale che ci prepara per la prossima versione 3.0 o per gli amici di Python Py3k. Per maggiori info trovate sul sito Python.org la news e il What's New che ci spiega le nuove introduzioni che vengono apportate al linguaggio stesso da una precedente versione alla nuova release, in questo caso da Python 2.5 alla 2.6.

28 settembre 2008

Benvenuto Gnome 2.24


Ecco il nuovo rilascio dello GNOME Desktop versione 2.24.
Lo GNOME Desktop viene rilasciato ogni sei mesi senza stravolgimenti profondi al sistema, ma con la garanzia delle correzioni dei bug trovati nella precedenti relese e aggiunte di nuove applicazioni che garantiscano migliorie richieste dagli stessi utenti dello GNOME tra i quali troviamo:


Emphaty
un client di messaggistica istantanea Empathy supporta anche conferenze audio e video XMPP/SIP come sui dispositivi Nokia N800/N810 (il video richiede l'installazione dei codec H.263 per GStreamer). Empathy è un ottimo "partner" di Ekiga, il client SIP di GNOME.

Ekiga 3.0
Ekiga è un programma per GNOME per conferenze audio/video su protocollo SIP, oltre a un'iterfaccia ora imperniata sulla propria rubrica e la presenza dei contatti, Ekiga 3.0 dispone di supporto alla presenza SIP, monitoraggio della linea PBX, miglior supporto ai codec video (H.264, H.263+, MPEG-4 e Theora), video accelerato, schermo intero opzionale e molti miglioramenti lato SIP per delle conferenze sicure.

Una piccola utility per tenere traccia del tempo
forse veramente poco utile almeno a mio parere.

Gestione della vista file migliorata
la gestione vista contiene tre viste tra cui la vista combatta, per abilitare la vista combatta semplicemente selezionare dal menu visualizza combatta o tramite tastiera con CTRL+3
le altre due viste sono icone ed elenco.

Gestione a TAB del gestore di file
la modalità esplorazione del gestore di file supporta ora le schede, per passare rapidamente da una directory all'altra all'interno di una singola finestra di esplorazione.

Nuovi Plugin per la Deskbar
la deskbar dispone ora di nuovi entusiasmanti plugin: una calcolatrice, ricerche attraverso Google (anche attraverso Google Codice), suggerimenti da Yahoo! e Wikipedia e la possibilità di inviare aggiornamenti a Twitter.

Un Nuovo Controllo per la Risoluzione dello Schermo
nella versione 2.24 sono stati aggiornati i controlli per la risoluzione dello schermo, adesso utilizza la nuova specifica XRandR 1.2 di X.Org, questo dialogo permette agli utenti di impostare facilmente i singoli schermi in diverse configurazioni. A ogni monitor viene associato un nome che compare nell'angolo superiore sinistro dello schermo per indetificarlo facilmente.
Le modifiche vengono applicate immediatamente, senza richiedere alcun riavvio della sessione.

Nuovo supporto ai temi sonori
il suono ora è gestito tramite libcanberra che implementa la specifica di Freedesktop.org. È possibile ora installare temi sonori proprio come i temi di icone. Tramite libcanberra inoltre si evita che un avviso sonoro emesso da un'applicazione vada a interferire con il riproduttore audio o video, consentendo di lasciare attivi durante l'ascolto di musica o la visione di un film a tutto schermo solo gli avvisi sonori importanti.

Temi e Grafica Migliorati
sono stati aggiunti temi è molti wallpapers attraenti creati direttamente dagli utenti tramite un concorso indetto appositamente per questa relese.

Migliorie per L'usabilità
varie migliorie per la tastiera, per il mouse, che per i lettori di schermo. Il supporto ai dispositivi braille e testo-a-parlato è stato ampiamente perfezionato per le applicazioni Java, OpenOffice.org, Mozilla Thunderbird, Pidgin e per il pannello e l'esploratore di manuali di GNOME. Gli utenti sono messi a conoscenza della presenza di dialoghi senza focus quando si passa ad un'applicazione.

Ci sono anche interessanti novità per quanto riguarda il Mobile
con GNOME 2.24 viene rilasciata per la prima volta la piattaforma di sviluppo
GNOME Mobile. La piattaforma GNOME Mobile è il cuore tecnologico di molte piattaforme per dispositivi mobili basati su Linux come Maemo, la ACCESS Linux Platform, la piattaforma LiMo, Ubuntu Mobile, Moblin e Poky.

19 settembre 2008

Python Scrivere File sia in Memoria che su Hard Disk

Un esempio che apre e scrive il classico file in buffer di memoria

txtfile = open("txtfile", "w")
txtfile.write("file in buffer di memoria")
txtfile.close()

txtfile = open("txtfile", "r")
txtfile.readline()


invece un esempio che apre e forza con flush la scrittura su Hard Disk

txtfile = open("txtfile", "w")
txtfile.write("Scrivo il file su Hard Disk")
txt.close()
txtfile = open("txtfile", "r")
txtfile.flush()

se credete che sia stato scritto un file fantasma non vi resta che andare a sbirciare nella directory di python.

10 settembre 2008

Ped Text Editor per PyS60


Quanti sviluppano, o hanno sviluppato applicazioni per cellulari o palmari in genere sanno che è molto frustante fare del coding con i piccoli tastierini in dotazione agli stessi.
Ma se amate Python è vi diverte creare "piccole" applicazioni per la serie S60 con l'ambiente di sviluppo PyS60, allora c'è un ottimo editor che rende molto meno traumatico fare del coding direttamente dal cellulare.

Sto parlando di Ped nella versione 2.17-final.sis che io stesso uso spesso con il mio fedelissimo Nokia 6630 quando sono lontano dal computer. Ecco una veloce ma non esauriente introduzione all'editor Ped assumendo che sia già installato, una volta aperto il menù scorriamo il tasto navy sino a trovare l'icona di Ped, apriamo l'editor e ci apparirà una schermata introduttiva con il riepilogo della versione stessa dell'editor installata, e la versione in uso sul cellulare del runtime Python.

Premete il tasto Opzioni e troviamo il menù File dove si può scegliere se creare un nuovo file(New) oppure aprire(Open) uno creato precedentemente, poi troviamo la shell(Python Shell) che apre la shell Python, poi ancora (Run Script) che ci permette di mandare in esecuzione uno script Python.

Poi ancora più sotto troviamo (Settings) settaggio che premendo seleziona ci fornisce una serie di parametri che possiamo configurare tramite delle tab che sono:

  • Text Font: che ci permette di scegliere tra 14 tipi di font
  • Editor Color: ci permette di cambiare il colore del testo nel nostro editor, tra i quali troviamo il Black, Red, Green, Blue che è quello che ci propone di default e il Purple
  • Shell Color: che ha gli stessi colori sopra citati per l'editor, ma che di default ci propone il colore Green
  • Orientation: impostato su automatic
nella tab Text ci sono due parametri
  • Page Size: grandezza della pagina con impostazione di default a 8
  • Indentation size: con impostazione tipica degli editor python settato a 4 caratteri di indentazione come default
poi nella tab File c'è l'encoding del testo impostato di default a utf-8, ma che possiamo tra quattro encoding che sono:
  • ascii
  • latin-1
  • utf-8
  • utf-16
poi abbiamo ancora Autosave(salvataggio automatico del testo)che di default è impostato su off ma che ci permette di scegliere una volta su on, una serie di parametri:
  • 30 secondi
  • 1 minuto
  • 2 minuti
  • 5 minuti
  • 10 minuti
l'ultima tab del menu e MISC(miscellanea) che ha un solo parametro attivabile con on è disattivabile con off, che è Ask for arguments che altro non è che specie di help per argomenti che di default è su off.

Ed in fine ci sono altre due voci(che non potevano mancare)Help che ci permette di leggere un corposo file di aiuto in testo semplice con relative indicazioni sulla licenza(una BSD)e l'autore dell'editor stesso ed in fine Exit.

Concludo dicendovi che indubbiamente Ped è il più dinamico maneggevole è comodo editor free per sistemi S60 che io abbia provato su cellulare, assolutamente da provare.

9 settembre 2008

Includere File Css nell'Html

Non sono qui con questo post a voler reinventare la "ruota" con lezioni su HTML o su tag deprecati che non dovremmo usare nel nostro codice(visto che nemmeno l'autorevole W3C e compatto su cosa dovremmo usare, es:HTML5 vs XHTML)per poterci fregiare dei tanto ambiti bannerini di codice standard compliance che vediamo a fondo pagina in tanti siti in giro per il web.

Per questo in rete ci sono siti che queste tematiche le insegnano nel più standard dei modi, a mio modestissimo parere uno su tutti ritengo sia HTML DOG di Patrick Griffiths.
Il mio post vuole essere un "inizio" di una specie di taccuino degli appunti su quanto riesco ad apprendere sul web design con layout css, e poterne condividere con chiunque lo voglia sia i lavori positivi(se qualcosa di positivo ci sarà)che le critiche, che se fatte in modo sincero sono le più costruttive per chi(come me) vuole imparare qualcosa di nuovo.
Siete i Benvenuti!


I css sono inseriti nel codice html o xhtml in vari modi. Il suo modo "naturale" di inserire delle regole css nell'html è di metterlo tra la coppia di tag <head> e </head>
come l'esempio sotto.

Questo metodo e detto foglio di stile incorporato



<html>
<head>
<title>css incorporato</title>
<style type="text/css">
{regole body }
{regole col-centrale }
{regole links }
{regole pie-di-pagina }
{altre regole }
</style>
</head>
</html>



un'altro metodo e quello detto in-line che viene chiamato in questo modo per il
fatto di essere inserito direttamente nei tag html in questa maniera che vedia mo qui sotto



<p style="color: red; background: yellow;">Io sono un testo rosso su sfondo giallo</p>



comunque e bene ricordare che il metodo in-linea viene sconsigliato perché più
che una regola css vera e propria è un attributo html simile al tanto odiato tag font.

Questi che state per vedere sono i metodi più apprezzati e consigliati nella maggior parte dei tutorials che trattano css sia nei libri che sul web.

Questo è il metodo css esterno un file .css linkato nel corpo html nel seguente modo



<html>
<head>
<title>css linkato</title>
<link rel="stylesheet" type="text/css" media="screen" href="file.css" />
</head>
</html>



e doveroso spiegare che qui c'è un nuovo attributo media="screen" che è "intercanbiabile" a secondo del media a cui il file .css è destinato.

Ecco un esempio completo dei media che css supporta

braille dispositivi braille(per ciechi)
embossed stampanti braille(per ciechi)
print stampanti
screen monitor dei computer
projection proiettori
aural lettori vocali
tv televisori
all tutti i tipi di media
tty dispositivi a caratteri(terminali) oramai in disuso

l'ultimo dei metodi di importazione di un file .css è la regola @import che va inserita sempre nei tag <head> e </head> all'interno dei suoi tag <style> e </style> ma che deve precedere qualsiasi altra regola linkata ai file .css esterni nel seguente modo che vediamo qui sotto




<html>
<head>
<title>regola @import</title>
@import url("file.css");
<link rel="stylesheet" type="text/css" media="screen" href="file.css" />
<link rel="stylesheet" type="text/css" media="print" href="file.css" />
</head>
</html>


è con questo ho concluso.
Spero di essere stato abbastanza chiaro e di non avervi annoiato.