27 febbraio 2009

Abilitare il Debug in Safari 4beta(win)

I ragazzi di WebKit hanno fatto un eccellente lavoro per il Browser di Apple, sia su MacOSX, che su Windows. Pur trattandosi di una beta pubblica, stabilità e velocità, rendono il navigare sul web veramente piacevole con Safari.

Immensamente utile per chi sviluppa pagine web, e invece il menu Develop, che in questa beta ce il bisogno di renderla visibile(su Windows)in questo modo.

Aprite il percorso:

C:\Documents and Settings\@rchieCreative\Dati applicazioni\Apple Computer\Safari naturalmente questo e il path sul mio XP, ma mettendo il vostro user al posto di \@rchieCreative, il vostro dovrebbe essere identico(almeno su XP).

Una volta entrati nella cartella Safari, troviamo una serie di file, a noi interessa WebKitPreferences.plist, che e un semplice file xml, apriamolo con un editor di testo, e inserite la stringa <key>IncludeDebugMenu</key> come ultima riga, in modo che preceda i tag <true/> </dict></plist>.

Ecco un esempio del file prima della modifica:










e l'esempio dopo la nostra aggiunta:










Adesso aprite Safari e dall'icona con la rotellina marcate Show Menu Bar(Hide Menu per nasconderla)apparirà in alto la barra Menu, da dove potrete fare il debug delle vostre pagine in modo simile a Firebug.

















Non mi resta che augurarvi Happy Coding!

26 febbraio 2009

Debian 5 aka Lenny


Signori e Signore, con un leggero ritardo causa(modem morto) sono lieto...ALT! ricominciamo.

Signori e Signore levatevi cappelli e bigodini, e fate un inchino alla nuova Debian5.0 "aka Lenny" rilasciata il giorno di San Valentino(forse non è casuale, vogliono che ve ne innamoriate)con una dedica particolare a Thiemo Seufer, uno sviluppatore Debian deceduto nel Dicembre scorso.

Le architetture supportate sono ben dodici, gli ambienti desktop supportati da Lenny, sono vari, da Gnome a KDE, a Xfce, al performante LXDE. Chi conosce la politica Debian, sa bene che non può trovare per quanto riguarda il software, le ultimissime versioni delle applicazioni, ma dalla precedente release(etch),sono stati aggiornati comunque, un'infinità di pacchetti, che riporto(in grassetto)direttamente dalla pagina del sito Debian.

l'ambiente desktop K (KDE) 3.5.10, una versione aggiornata dell'ambiente desktop GNOME 2.22.2, l'ambiente desktop Xfce 4.4.2, LXDE 0.3.2.1, il desktop GNUstep 7.3, X.Org 7.3, OpenOffice.org 2.4.1, GIMP 2.4.7, Iceweasel (una versione senza marchio di Mozilla Firefox) 3.0.6, Icedove (una versione senza marchio di Mozilla Thunderbird) 2.0.0.19, PostgreSQL 8.3.6, MySQL 5.0.51a, GNU Compiler Collection 4.3.2, la versione 2.6.26 del kernel Linux, Apache 2.2.9, Samba 3.2.5, Python 2.5.2 e 2.4.6, Perl 5.10.0, PHP 5.2.6, Asterisk 1.4.21.2, Emacs 22, Inkscape 0.46, Nagios 3.06, l'Hypervisor Xen 3.2.1 (supporto dom0 e domU), OpenJDK 6b11 e più di 23.000 altri pacchetti software pronti da usare (compilati da oltre 12.000 pacchetti sorgenti).

Per chi sviluppa con Java, interessante è la messa a disposizione nell'archivio main, di applicativi e librerie basate su Java. Il grosso del lavoro, come da tradizione Debian, e stato rivolto alla sicurezza, già prima del riavvio, viene effettuata sui server Debian un collegamento alla ricerca di eventuali aggiornamenti disponibili. Alla riduzione di binari con bit setuid attivati, a vari accorgimenti per GCC, sino a patch d'irrobustimento per PHP chiamata Suhosin, che e noto per i suoi bug di sicurezza.

Ma per approfondimenti, non vi resta che andare direttamente sul sito Debian.

22 febbraio 2009

Perché Comperare "Sviluppare applicazioni web con Django" Secondo il mio Modesto Parere


Andando in dietro nel tempo con la mia(piccola) testolina, pensavo a quando cercavo un libro nella nostra madre lingua(il mio primo libro) su Python.

Per quanto ho cercato, i risultati, furono vani. Finché nel lontano 2002, stando in ferie(ebbene sì, allora in ferie ci andavo pure io)in quel di Termoli, girovagando per librerie del centro, feci un incontro inaspettato. In uno degli scaffali riservato ai testi di informatica, vidi un testo su Python in italiano, esattamente Python2.1(the bible) edito dalla Apogeo, che dire, ero al settimo cielo, sino a quando con il leggerlo sprofondai all'inferno.

In due parole il testo era tradotto male, e il codice come riportato nel libro, era ancor più pessimo. Come tutti sappiamo(gli amanti del linguaggio almeno) Python fa dell'indentazione, un punto indelebile del linguaggio stesso, mentre sul testo l'indentazione del codice di esempio veniva troncato e portato a capo a piacere di chi lo aveva tradotto, o mandato in stampa.

Con questo aneddoto, non sto a raccontarvi uno scorcio della mia vita(lo so che non interessa a nessuno)ma a incoraggiare a comprare testi validi scritti in lingua italiana.

Si qualcuno potrebbe farmi notare che sul web ci sono ottimi testi tradotti, e che chi non sa l'inglese dovrebbe lasciare perdere la programmazione, infatti io ho letto montagne di documentazione in inglese, e adesso che un po mi raccapezzo(almeno riguardo la lettura) ho già nella mia libreria personale, una dozzina di testi nella lingua madre di Shakespeare.

Ma vuoi mettere un testo tecnico nella tua lingua, e tutta un'altra cosa da capire, o no? Magari comperando il testo di Marco, che comunque non e il primo(è autore di Python, e Espressioni Regolari)ma il primo di un certo contenuto, si "invoglino" anche altri pythonisti a scrivere i loro testi in italiano, e rammento a chi non sapesse, che in Italia(alcuni vivono fuori Italia) abbiamo programmatori Python di altissimo livello, che pubblicano regolarmente testi e articoli in inglese.

Forse dovrei rammentare anche i punti a sfavore, nello scrivere un testo a carattere tecnico in lingua italiana:
Il numero dei lettori sarebbe pari ad un 5% della totalità dei lettori a livello mondiale.
La perdita di "autorità di un testo" di tipo informatico, scritto in una lingua che non sia l'inglese.
Lo "snobbare" in un certo qual modo qualsiasi altro editore che non sia O'reilly.

Ma non posso non far notare, che su Ruby, di testi nella nostra lingua, ne sono stati pubblicati già tre(due editi dalla Apogeo, e uno edito da O'reilly)tra cui, uno scritto completamente da autori italiani, in lingua italiana. Tra questi di autori(ironia della sorte) ce un pythonista dichiarato, e un altro paio lo sono stati in passato, e testi italiani in Python? Nada.

Qualcuno mi dirà ce Learning Python tradotto sia nella 2edizione ,che nella 3Edizione, si è vero(tutto quello che ho appreso su Python sino ad ora proviene proprio da quel testo)ma la stragrande maggioranza e in lingua inglese, e vuoi mettere un libro scritto da un italiano, per italiani?
Semplicemente quello che non afferri lo chiedi direttamente;-).

Certamente sono da incoraggiare,(parlo di tecnologie dal valore indiscutibile come Ruby e Python) pubblicazioni di autori italiani che permettano, a chi nuovo nell'arte del programmare, di apprendere quei "passaggi" che inevitabilmente diventano più lunghi da capire in un testo che non è nella sua lingua madre. Tutto questo può avvenire solamente comperando(è chi ha le competenze scrivendo) testi validi di autori italiani, e Sviluppare applicazioni web con Django, lo è.

Mi auguro, e spero vi auguriate, che chi deve comprare compri, e chi debba scrivere scriva. Ne guadagneremmo entrambi.

Ma adesso passiamo al testo vero e proprio, l'autore ci propone di apprendere Django, tramite una serie di ricette(non è un libro di cucina tranquilli)che ci permetteranno di risolvere i problemi classici dello sviluppo web "moderno", man mano che aumentano di complessità.

Il Testo è strutturato in tre parti, ovviamente dopo l'immancabile introduzione:
La prima parte(definita Gli Antipasti)affronta nello specifico, l'installazione sui sistemi Gnu/Linux, Windows, e MacOSX, sino al classico esempio Hello World!.Per poi affrontare i Database, l'applicazione Admin, gli Url, i Template, i Form, e Django in accoppiata con Apache.

La seconda parte(definita Le Portate):
Entra nello specifico del Framework, con i capitoli su: I Model, Le Query, L'interfaccia di Admin, Il Modulo URLconf, Il Linguaggio dei Template, Le Viste, e I Form di Django.

Mentre la terza parte(Definita i Dolci):
E composta da capitoli brevi, che a mio "parere" sembrano dei rimandi a tutti gli argomenti che l'autore non ha voluto inserire nel testo per non farlo diventare(termine usato dall'autore) troppo Grosso.

Ecco i capitoli : Sicurezza, Internazionalizzazione, RSS e Atom, Databrowse, Generare file non HTML, Ajax, Pagination, Cache, Nuovi tag per Template, e Applicazioni Pronte, e in fine, il Debugging.

Chiudono il Testo, alcune pagine di approfondimenti, e altre di links relativi su Django, che l'autore definisce il Caffè.


AH, se a qualcuno,venisse qualche dubbio:
Non sono stato pagato da Beri, nemmeno sa che esisto!

17 febbraio 2009

HTML5 Sempre più Integrato nei Browser

Che molti sviluppatori web, hanno storto il naso alla notizia che una nuova versione html stava prendendo forma e innegabile. A non prenderla molto bene,(ancora oggi)sono soprattuto sviluppatori che ormai da tempo apprezzano la pulizia, e l'ordine, che xhtml "impone" nello scrivere il markup strutturale delle pagine web, in confronto al vecchio markup dell'html4.

E viene da storcerlo ancora di più in quanto è in lavorazione la versione xhtml2 che a detta di molti, non solo avrebbe risolto le sbavature della versione attuale xhtml1.1, ma porterebbe con se novità eccellenti che ne avremmo beneficiati tutti, dagli sviluppatori agli utenti finali.

Ma ad oggi, e bene guardare la realtà, sempre più browser integrano al loro interno nuove feature volte a html5.

Ecco le feature html5 della versione Firefox 3.1 for Developer, esattamente i tag introdotti per il multimedia, ovvero audio e video, e supporto al drag and drop.

Vediamone alcuni esempi:

in questo avviene il play di un video dal sito web Theora

<video src="http://v2v.cc/%7Ej/theora_testsuite/320x240.ogg">
Your browser does not support the <code>video</code> element.
</video>



in questo esempio sorgenti multiple per differenti tipi di browser.

<video>
<source src="foo.ogg" type="video/ogg">
<source src="foo.mov">
Your browser does not support the <code>video</code> element.
</source>
</source></video>


e qui l'esempio tramite un ipotetico vostro JavaScript.

var v = document.getElementsByTagName("video")[0];
v.play();

Se siete interessati a vedere tutte le feature che diverranno realtà con il rilascio del Browser più amato dagli sviluppatori web non vi resta che puntare il vostro browser alla pagina del Mozilla developer center.

10 febbraio 2009

Siti Truffaldini

Nell'ultimo periodo le nostre caselle di posta, sono sotto un costante bombardamento di mail truffaldine(phishing).

Queste mail che si spacciano( quelle da me ricevute)da posta elettronica inviata almeno apparentemente dalle Poste.it, con dei suoi servizi derivati, tipo Banco Posta, e postepay, ma non solo, ne arrivano anche da servizi bancari tipo UBI Banca(immagine a fianco), e Banca Intesa , e da ebay.

Inutile dire che queste E/mail, sono fasulle, il loro intento è solamente quello di rubare i vostri codici Pin, o le vostre credenziali per accedere ai vostri conti e prosciugarveli.

Non cadete nella trappola tesavi dal furbastro di turno, Poste.it e le Banche, non richiedono mai per E/mail i vostri numeri di conto o le vostre credenziali. Se siete dubbiosi, chiedete aiuto ad un vostro conoscente scaltro nell'usare il computer, basterà un semplice whois tramite IP per non cadere nelle braccia del lupo.

Siate accorti!

8 febbraio 2009

Serializzazione dei dati in Python

Python dispone nella sua libreria standard(già python e compreso di batterie)diversi moduli per memorizzare direttamente oggetti Python in un file, sto parlando di pickle, cpickle, ma anche del modulo shelve che hanno il compito di effettuare il pickling, o serializzare oggetti in un database accessibile tramite chiavi di tipo dizionario nel caso specifico di shelve.

Vediamo il comportamento di pickle:

>>> import pickle
>>> file_diz = {'hacker':1, 'geek':2, 'nerd':3, 'troll':4}
>>> pickle_data = open('file_diz.pkl', 'w')
>>> pickle.dump(file_diz, pickle_data)
>>> pickle_data.close()


Adesso apriamo il file creato con pickle.
>>> pickle_data = open('file_diz.pkl', 'r')
>>> new_pickle_data = pickle.load(pickle_data)
>>> new_pickle_data
{'hacker': 1, 'geek': 2, 'troll': 4, 'nerd': 3}

Vediamo un' altro esempio:

>>> import pickle
>>> diz = {'python':['bello','elegante','divertente'],
...        'java': ['rindondande','noioso','lento'],
...        'ruby': ['copione','sopravvalutato','buono sul web']}
>>> file_diz = open('lista','w')
>>> pickle.dump(diz, file_diz)

Adesso apriamo il file in lettura:
>>> file_diz = open('lista', 'r')
>>> diz = pickle.load(file_diz)
>>> diz
{'python': ['bello', 'elegante', 'divertente'], 'java': ['rindondande', 'noioso', 'lento'], 'ruby': ['copione', 'sopravvalutato', 'buono sul web']}


adesso vediamo shelve al lavoro:

>>> import shelve
>>> databas = shelve.open("mioDB") # creo il database
>>> databas['Top star'] = ['Iron Maiden']
>>> databas['Genere'] = ['Metal'] 
>>> databas  # chiamo il database
{'Genere': ['Metal'], 'Top star': ['Iron Maiden']}
>>> databas.has_key('Top star') # chiamata tramite la prima chiave
1
>>> del databas['Top star'] # elimino la prima chiave cioè Top star
>>> databas
{'Genere': ['Metal']}
>>> databas.keys() # ecco la chiave rimanente nel database
['Genere']
>>> databas.close()# chiudo il database

Indubbiamente sia pickle, che shelve, sono degli ottimi modi per creare dei semplici file di database persistenti, ma non sono i soli, ci sono altri moduli, che definiscono dei dizionari su disco, tra questi ci sono dbm, gdbm, e anydbm.

Operazioni di Incremento e Decremento in Python

Operazione che incrementa da 1 a 9, l'operatore *

>>> def main():
... for count in range(1, 10): # incrementa da 1 a 9
... print "*" * count
...
>>> main()
*
**
***
****
*****
******
*******
********
*********



Operazione che Decrementa da 9 a 1 l'operatore *

>>> def main():
... for count in range(9, 0, -1): # decrementa da 9 a 1
... print "*" * count
...
>>> main()
*********
********
*******
******
*****
****
***
**
*

3 febbraio 2009

PYTHON Modulo Subprocess

Il modulo Subprocess ha fatto la sua comparsa nella versione 2.4 di Python.
Con il modulo Subprocess, si è reso molto più facile, interfacciare Python con processi di
sistema, quali la shell, l'input e l'output, chiamate a processi di sistema, e a una serie
di utility sia per sistemi di tipo Unix, che Windows, che con i "classici" os.popen, os.popen2,
os.system, os.exec, ecc, del modulo OS.

Esempio os.system:

import os
mioSistema = os.system('dir')
mioSistema

Esempio subprocess:

def main():
vers = "du"
vera = "-h"
dir_path = "/home"
print "Verifica spazio occupato nella mia home"
subprocess.call([vers, vera, dir_path])

main()


Questo invece è l'utilizzo reale del modulo subprocess al lavoro, che ci stampa a video la versione del kernel Linux in uso sul sistema, il comando w, e l'utility pstree.

Esempio:

import subprocess

def System():
""" La classica chiamata Linux uname
per visualizzare il nome del sistema in uso
con il flag -a attivato. """
sysInfo = " uname "
sysOpz = " -a "
print " Sistema %s:\n" % sysInfo
subprocess.call([sysInfo, sysOpz])

def Who():
""" Il comando w che ci indica chi
e loggato nel sistema. """
wh = " w "
print " Login User %s:\n" % wh
subprocess.call([ wh ])

def Systree():
""" Il comando pstree, che ci elenca a video
i processi di sistema, avviati con i relativi
sotto processi, che ci permette di vederli in
un formato ad albero, ma con un output molto
più esteso per via del flag -a attivato """
pte = " pstree "
pteOpz = " -a "
print " Processi %s:\n" % pte
subprocess.call([pte, pteOpz])

System()
Who()
Systree()

Visualizare il Path Python

Visualizzare il path sul vostro sistema con il modulo sys.
Nello specifico, questo è il path python sul mio sistema winXP.


>>> import sys
>>> for i in sys.argv:
... print i
...

>>> print '\n\n Questo è il Path Python->', sys.path, '\n'


Questo è il Path Python-> ['', 'C:\\WINDOWS\\system32\\python25.zip', 'C:\\Python25\\DLLs', 'C:\\Python25\\lib', 'C:\\Python25\\lib\\plat-win', 'C:\\Python25\\lib\\lib-tk', 'C:\\Python25\\Lib\\site-packages\\pythonwin', 'C:\\Python25', 'C:\\Python25\\lib\\site-packages', 'C:\\Python25\\lib\\site-packages\\PIL', 'C:\\Python25\\lib\\site-packages\\win32', 'C:\\Python25\\lib\\site-packages\\win32\\lib']