ReportLab & PIL
Devo generare un BarCode Code 128 da Python.Ho trovato una estensione per Report Lab che unita PIL (Python Imagin Library)permette la creazione di BarCode anche su file immagini come png, jpg, gif.Su Windows però, per installare sia ReportLab sia PIL, è necessario registrare la versione di Pythonsul registro di Windows, creando ed eseguendo uno script come indicato qui.
Pensione Per Cani
E’ online il nuovo sito del Centro Cinofilo Peter Pan
che dal 10 Agosto 2009 aprirà la Pensione Per Cani.
JQuery Validation
Segnalo due plugin per JQuery per la validazione dei form:
- http://bassistance.de/jquery-plugins/jquery-plugin-validation/
- http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/
Entrambi mi sono sembrati validi ad una prima occhiata, la differenza sostanziale fra i due è che il secondo crea tooltip vicino ai campi con errori, mentre il primo aggiunge il testo a fianco ai campi stessi.
Bigo Captcha
Veloce e stupida nota, come di abitudine ormai..
Volevo personalizzare l’immagine prodotta da Bigo Captcha,
il plugin captcha per Joomla che preferisco, cambiando font e colori,
così ho dato un veloce occhiata al codice ed ho trovato che:
- lo sfondo dell’immagine è alla riga 180 del file CaptchaImage.php
- lo sfondo della banderia è alla riga 395 del file CaptchaImage.php
- i fonts sono gestiti in modo random dalla sottocartella fonts
MySQL Restore Password
Nella settimana scorsa me ne sono capitate di ogni, fra cui, la necessità di reimpostare una password per un utente mysql di cui avevamo perso le chiavi di accesso. Essendo fisicamente sulla macchina con la installazione di mysql, il processo non è affatto complicato.
Trovate lo step-by-step sia per sistemi linux che windows sul sito mysql: a questo indirizzo.
Mac-Address su Mobile
Dopo aver perso un po’ di tempo per cercare un modo per identificare il mac-address di un dispositivo mobile, e dopo essermi accorto che era più facile di quello che sembrava, ho deciso di prendere nota qui del metodo:
Start-> Settings -> System -> Device Info -> Identity.
Da questa schermata è possibile leggere i Mac-Address della schede WiFi e Bluetooth per Windows CE e Window Mobile.
Python #3 (Django #1)
Come primo Python Web Framework da passare in rassegna ho scelto Django, un framework con ORM, interfaccia di amministrazione automatica, sistema di templating, di cache e di internazionalizzazione… sembra tutto molto interessante.
- Per prima cosa quindi ho bisogno di installare un server di database e le rispettive librerie Python. Decido di usare MySql:
sudo apt-get install mysql-server python-mysqldb - Poi installo Django, scaricando il package più recente da: downloads Django
tar xzvf Django-1.0.2-final.tar.gz
cd Django-1.0.2-final
sudo python setup.py install
- Ora mi creo un symLink dalla cartella di django alla usr/bin:
sudo ln -s /usr/local/lib/python2.5/site-packages /usr/local/bin - Ok, tutto pronto per creare un nuovo progetto, quindi mi posiziono sulla cartella dove organizzerò tutti i miei progetti, non nello stile PHP (/var/www) per una maggiore sicurezza, ma in home/user/… quindi lancio il comando per la creazione del progetto:
sudo django-admin startproject NomeProgetto
Startproject creerà una cartella NomeProgetto con all’interno 4 files .py (__init__.py, manage.py, settings.py, urls.py) . - Ora dall’interno della cartella NomeProgetto, invoco la creazione della mia applicazione:
python manage.py startapp NomeApplicazioneQuesto comando creerà la cartella NomeApplicazione con all’interno i files:__init__.py, models.py, views.py . - Ora posso iniziare a disegnare il modello della mia applicazione, modificando il file NomeApplicazione/models.py
(utili queste pagine: pagina di documentazione django per la scritura di modelli pagina di documentazione django per i tipi di campi utilizzabili nel modello) - Di seguito modifico il file NomeSito/admin.py per attivare l’amministrazione per le classi di modello disegnate in precedenza:
from NomeSito.NomeApplicazione.models import NomeClasseadmin.site.register(NomeClasse)
from django.contrib import admin - Fatto ciò, apro il file NomeProgetto/settings.py e configuro la sezione database e INSTALLED_APPS.
Per il database configuro la connessione ad un db fra quelli disponibili (MySql, PostgreSQL, SQLite):
DATABASE_ENGINE
DATABASE_NAME
DATABASE_USER
DATABASE_PASSWORD
DATABASE_HOST
DATABASE_PORT
Per le installed apps, devo aggiungere due applicazioni: la mia NomeApplicazione e la applicazione per l’amministrazione ‘django.contrib.admin’ - Modifico poi il file NomeProgetto/urls.py per attivare la parte di amministrazione (scommentando dove trovo il commento: ‘# Uncomment .. to enable the admin”
- Ora posso lanciare il comando syncdb che creerà le tabelle per le INSTALLED_APPS di Django:
python manage.py syncdbLo script lancia la creazione delle tabelle per le INSTALLED_APPS che ancora non esistono sul database. Se non è mai stato creato un utente amministratore, questo script ci chiederà di configurarne uno. - Per verificare che tutto sia funzionante, entro nella cartella NomeProgetto e lancio:
python manage.py runserver 8080Se tutto funziona correttamente, l’output sarà qualcosa come questo:Validating models...Django version 1.0.2 final, using settings ‘NomeApplicazione.settings’
0 errors found.
Development server is running at http://127.0.0.1:8080/
Quit the server with CONTROL-C. - Ora puntiamo il browser all’indirizzo sopra indicato (http://127.0.0.1:8080/) e dovremmo vedere una pagina “Welcome to Django”.
Puntando il browser invece all’indirizzo http://127.0.0.1:8080/amin accederemo alla parte di amministrazione. - Per testare invece le API Django ed il nostro modello a riga di comando, possiamo lanciare:
python manage.py shell
Prima giornata con Django conclusa. Sono molto soddisfatto e sorpreso per le features di Django, infatti disegnando solo alcune classi di modello, ho a disposizione già tutti i metodi CRUD ed una ottima interfaccia di amministrazione back-office già pronta e funzionante out-of-the-box.
Python #2 (Hello World Web Wide Web)
Per prima cosa installo Apache:
~$ sudo apt-get update
~$ sudo apt-get install apache2
Verifico che Apache sia installato correttamente, navigando all’indirizzo: http://127.0.0.1,
poi installo il mod-Python per Apache:
sudo apt-get install libapache2-mod-python
Ora è necessario configurare Apache per abilitare il modulo Python, e devo decidere fra uno dei due modi possibili:
- Publisher Handler ovvero useremo pagine con estensione .py “stand-alone”
- Psp Handler ovvero useremo pagine con estensioni .psp con codice html con all’interno linguaggio python
Scelgo la seconda possibilità, ovvero Psp Handler, e quindi devo mettere mano al virtual host:
sudo gedit /etc/apache2/sites-available/default
Inserendo le seguenti righe di configurazione:
<directory>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
AddHandler mod_python .psp
PythonHandler mod_python.psp
PythonDebug On
</directory>
Riavviamo il server Apache:
sudo /etc/init.d/apache2 restart
Creo la prima pagina psp helloworld.psp:
sudo gedit /var/www/helloworld.psp
Edito la mia prima pagina psp:
<html>
<body>
<% req.write("Hello World Wide Web") %>
<body>
<html>
Verifico il funzionamento della pagina, puntando il browser all’indirizzo: http://127.0.0.1/helloworld.psp .
Python #1 (Hello World)
I primi test su Python partono su Ubuntu, versione 8.04.
Installo Python:
~$ sudo apt-get update
~$ sudo apt-get install python
Primo esempio: Hello World.
- Creo il file “HelloWorld.py”
~$ nano -w HelloWorld.py - Edito il file “HelloWorld.py”, scrivendo la mia prima riga di codice Python:
print “Hello, World!” - Eseguo il mio primo programma Python:
~$ python HelloWorld.py - Il programma stampa sul terminal:
Hello, World!
Voglia di qualcosa di nuovo
Dopo un lungo periodo di assenza da questo blog, in cui mi sono dedicato a tante e svariate attività, fra cui i miei tornei di frisbee, il mio nuovo cane Spike, i vari siti che curo, il lavoro all’Università con un grosso progetto .NET e lavori privati fra cui il software DietaFactory, scritto sempre in .NET, attraverso ora un periodo con una strana voglia di nuovo.
Sto valutando e provando vari linguaggi che fino a oggi avevo solo sentito nominare ed userò il blog per annotare gli step necessari per le configurazion e tenere traccia delle risorse trovate in rete.
I linguaggi che mi incuriosiscono principalmente sono Ruby e Python, ovviamente sempre con l’attenzione rivolta al web, quindi i framework Ruby On Rails, Pylons, Django, Grok e Zope passeranno presto sotto le mie mani…