13 ottobre 2011

Morto Dennis Ritchie A Lui Dobbiamo Il Linguaggio C E UNIX

E morto Dennis Ritchie.
Ritchie e stato uno di quegli uomini che certamente avrebbe meritato l' appellativo di genio,  uno di quegli uomini che i media, tutti, avrebbero dovuto ricordare come tale se non altro per il contributo vero che ha dato all 'informatica,  d' altronte Ritchie non vendeva aggeggi alla moda, non e stato un buon markettaro di oggetti cool quindi non vale la pena di riservargli qualche riga come avrebbe meritato.

Tantomeno  non avrebbe voluto lacrime ipocrite di gente falsa e opportunista ma un ricordo sincero si.

Addio Dennis Ritchie, il Mondo dei computers ti deve molto, addio genio vero.

21 settembre 2011

Personalizzare il prompt della bash

Ecco alcuni casi di personalizzazione del vostro prompt senza incasinarlo troppo.  Per vedere come è formato il vostro prompt della shell, basta eseguire echo $PS1(esistono anche una PS2, PS3, e una PS4, ma non le prenderemo in considerazione). Il quale stampa la variabile d' ambiente settata  in un  file  nascosto quale .bash_profile o .bashrc, a secondo di quello che viene trovato  nella vostra /home/user.

Prendiamo come esempio la bash nella mia linux box,
archie@fobia:~$ echo $PS1

ritorna come output PS1="\u@\h:\w\$ " che corrisponde ai  valori impostati nel seguente modo:
\u@ = archie ovvero l' utente del sistema.
\h: = l' host ovvero il nome della nostra macchina preceduta dai due punti.
\w = la directory corrente ovvero la tilde.
\$ = il segno del dollaro ci segnala il tipo di user al lavoro. Mentre il cancelletto #, equivale all' utente root.

Ecco altri semplici esempi di prompt:
PS1="[\u]$ "  corrisponde al seguente esempio [archie]$

PS1="\w:$ "  corrisponde al seguente esempio ~:$

PS1="\t " corrisponde all' orario del sistema 12:21:05

PS1="\h\w\t " corrisponde al seguente esempio fobia~12:21:05

questi sono i caratteri speciali usati con più frequenza :
\d     SIGNIFICATO   data
\h     SIGNIFICATO   nome host
\s     SIGNIFICATO   nome della shell
\t      SIGNIFICATO   ora corrente
\u     SIGNIFICATO   nome utente
\w    SIGNIFICATO   directory corrente
\[     SIGNIFICATO   inizio caratteri non stampabili
\]     SIGNIFICATO   fine  caratteri non stampabili

per la lista completa dei caratteri speciali, vi rimando alla  Bash Prompt HOWTO dove potrai approfondire, tra l' altro  come rendere colorato, e in alcuni casi di cattivo gusto il tuo prompt della shell. Il mio consiglio e di avere un prompt quanto più pulito e il meno appariscente possibile, ne trarranno beneficio  i vostri occhi.

Ecco alcuni esempi di come colorare il tuo prompt della bash:

PS1=”\033[1;31m\u@\h\w\$\033[0m “

la prima parte "\033[1;31m\u@\\h\w\$\033 indica che è di colore rosso, poi tutto quello che viene dopo [0m " diventa di colore grigio.

I colori per personalizzare il testo sono:

0   dark
1   brillante
4   sottolineato
5   lampeggiante
7   inverso


mentre la m serve per la chiusura delle sequenze dei caratteri non stampabili.

PS1=”\033[0;37m\033[1;41m\u@\h:\w$ “

in quest' altro esempio il testo è di colore grigio ”\033[0;37m, su sfondo rosso \033[1;41m
Questi sono i codici dei colori:

Nero                      0;30
Rosso                    0;31
Verde                     0;32
Marrone                0;33
Blu                        0;34
Viola                     0;35
Ciano                    0;36
Grigio Chiaro      0;37
Grigio Scuro        1;30
Rosso  Chiaro      1;31
Verde  Chiaro      1;32
Giallo                  1;33  
Blu    Chiaro      1;34
Verde  Chiaro     1;35
Ciano  Chiaro    1;36
Bianco                1;37


E mia premura, PRIMO ricordarti di lasciare uno spazio tra l' ultimo carattere di escape(es: \t ") e le virgolette di chiusura in modo da evitare che il testo da digitare sia attaccato al prompt(es: archie@fobia:~$echo).

E SECONDO che per rendere permanenti le modifiche che apportate al prompt, ce bisogno che le scriviate all' interno di uno dei file sopra citati (.bash_profile o .bashrc).

10 maggio 2011

Google Chrome Hackerato!

Sotto il video messo a disposizione dai ricercatori di Vupen che hanno implementato lo zero-day.


4 gennaio 2011

Compilazione Base di un Sorgente C

Compilare un Sorgente C

Usando Gnu/Linux prima o poi ci si ritrova inevitabilmente(almeno per chi smanetta) ad avere a che fare con il linguaggio C. Tra l'altro era mia intenzione con l' arrivo del nuovo anno di imparare il linguaggio C quindi eccomi qua a scriverne.

Vediamo come compilare un sorgente minimale in C che ci fornisce in output il famosissimo Hello World, con cui hanno avuto a che fare(almeno agli inizi) anche i guru del C.

Apriamo il nostro editor preferito e scriviamo il nostro sorgente che salveremo nel file dal nome hello.c

#include
main ()
{
printf("Hello World\n");
}

poi proseguiamo con la semplice compilazione con gcc hello.c, che crea il file di nome a.out

[archie@fobia ~]$ gcc hello.c
[archie@fobia ~]$ ls
a.out hello.c Modelli Pubblici Scrivania
Documenti Immagini Musica Scaricati Video

che possiamo eseguire con il comando di esecuzione ./a.out, che produce il nostro Hello World a video

[archie@fobia ~]$ ./a.out
Hello World!

mentre usiamo l'opzione -c di gcc per una compilazione intermedia che crea il file oggetto hello.o

[archie@fobia ~]$ gcc -c hello.c
[archie@fobia ~]$ ls
a.out hello.c Immagini Musica Scaricati Video
Documenti hello.o Modelli Pubblici Scrivania

e ne visualizziamo il suo contenuto tramite il comando file


[archie@fobia ~]$ file hello.o
hello.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped


invece se vogliamo creare del codice assembler dal nostro sorgente c, l'opzione -S crea il nostro hello.s che e per l' appunto un file assembler

[archie@fobia ~]$ gcc -S hello.c
[archie@fobia ~]$ ls
a.out hello.c hello.s Modelli Pubblici Scrivania
Documenti hello.o Immagini Musica Scaricati Video

[archie@fobia ~]$ cat hello.s
.file "hello.c"
.section .rodata
.LC0:
.string "Hello World!"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $.LC0, (%esp)
call puts
leave
ret
.size main, .-main
.ident "GCC: (GNU) 4.4.4 20100630 (Red Hat 4.4.4-10)"
.section .note.GNU-stack,"",@progbits


per visualizzare i tempi della compilazione usiamo il comando -time

[archie@fobia ~]$ gcc -time hello.c -o hello.c
# cc1 0.02 0.01
# as 0.00 0.01
# collect2 0.04 0.01
[archie@fobia ~]$

per un resocondo completo di gcc supporto al debug -g, linking ldd, ottimizzazione del codice ON, e molto altro, consiglio di scaricarvi la relativa manualistica in uno dei suoi molteplici formati.

3 gennaio 2011

Verifica dell' OS con sys.platform

Identificare il Sistema Operativo su cui gira l' interprete python, tramite il metodo platform del modulo sys .

Ci sono diversi modi di identificare su quale versione di OS gira l'interprete python:
la versione "classica" sys.platform == "win32" or sys.platform == "dos", oppure sys.platform[:3] == "win", o anche sys.platform.startswith('win')
oppure il nuovo metodo aggiunto nella versione python2.6, dove vediamo un esempio reale.

>>> import sys

>>> sys.getwindowsversion()

(5, 1, 2600, 2, 'Service Pack 3')
>>>

dove stampa una tupla di major e minor built, la piattaforma 2 (nel mio pc xp) con service pack 3.

I codici completi di equivalenza sono:

0 win32 o windows3.1
1 Windows95-Windows98-WindowsME
2 WindowsNT-Windows2000-WindowsXP-x64
3 Windows CE


E il metodo "classico" o il più usato dai programmatori python ovvero sys.platform

import sys
if sys.platform == "win32" or sys.platform == "dos":
print "sistema di casa Microsoft"
print sys.api_version

elif sys.platform == "linux1386" or sys.platform == "linux2":
print "sistema di tipo Gnu/Linux"
print sys.api_version

elif sys.platform == "bsd" or sys.platform == "darwin":
print "sistema di tipo bsd"
print sys.api_version

else:
print " |sistema non riconosciuto!| "

[output]
sistema di casa Microsoft
1013

il metodo platform contiene altri identificatori di piattaforma quali:

cygwin, sunos5, palmOS3, os2, riscos, atheos.

Per approfondire l'argomento non resta che spulciare la meravigliosa Library Reference e il relativo modulo sys con platform.