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.