giovedì 29 novembre 2012

4 html5 css frameworks


four interesting framework css designed for html5 and also for mobile.


these frameworks includes tables, forms, tabs ... ie all those you need for a good ui. update: see also: http://imperavi.com/kube/

lunedì 26 novembre 2012

python pil and ubuntu 12.10


python PIL on ubuntu 12.10
install deps:
sudo apt-get install libfreetype6-dev libjpeg62-dev zlib1g-dev
ubuntu 12.10 uses stanges path for this library so, we make symlinks
for 32bit:
sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so /usr/lib
sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so /usr/lib
sudo ln -s /usr/lib/i386-linux-gnu/libz.so /usr/lib
for 64bit:
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib
sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib

enjoy :-)

giovedì 22 novembre 2012

python 2.4 and python 2.6 on ubuntu 12.10


For business reasons I am forced to use python 2.6 and python 2.4.
Compile the python on each  *buntu 12.10 machine that i have is a frustrating job. (some real, many virtual)
I made packages with checkinstall, these are not true ppa but maybe someone can find them useful.
I've also tested on Ubuntu 12.10 server and Lubuntu 12.10
First install the dependencies:

sudo apt-get install zlib1g libncurses5 libncursesw5 libc6 libbsd0 libreadline5 libreadline6 libsqlite3-0 bzip2 libgdbm3 libssl1.0.0

then download and install the packages:

sudo dpkg -i python2.6.deb
sudo dpkg -i python2.4.deb

(for now are hosted on dropbox doh!)

https://dl.dropbox.com/s/0cvh8jm7qcbq5py/python2.4.deb
https://dl.dropbox.com/s/jbdgbt2smu352ry/python2.6.deb

Everything is provided in the hope that it is useful to someone; but with no guarantee.
The paths are:

/opt/python-2.6.8/ (for python 2.6)
/opt/python-2.4.6/ (for python 2.4)

you can add to $PATH or make symlinks.

sudo ln -s /opt/python-2.4.6/bin/python2.4 /usr/bin/python2.4
sudo ln -s /opt/python-2.6.8/bin/python2.6 /usr/bin/python2.6

or even better using virtualenv, ex:

virtualenv -p /opt/python-2.6.8/bin/python --no-site-packages myenv
source myenv/bin/activate
(myenv)  ... your environment, your python, your packages.

I hope someday to have the time to create a real ppa with better packages.
The only supported architecture is i686, at least for the moment.

Build yourself!

(pre) sudo apt-get install build-essential zlib1g-dev libncurses5-dev libncursesw5-dev libc6-dev libbsd-dev libcurl4-openssl-dev libreadline-dev libreadline6-dev libsqlite3-dev libbz2-dev libgdbm-dev libssl-dev

for python 2.4.6

./configure --prefix=/opt/python-2.4.6/ --enable-unicode=ucs4 --with-ssl --without-tkinter

edit setup.py, change:

lib_dirs = self.compiler.library_dirs + [
    '/lib64', '/usr/lib64',
    '/lib', '/usr/lib',
    ]
 
to:

lib_dirs = self.compiler.library_dirs + [
'/lib64', '/usr/lib64',
'/lib', '/usr/lib', '/usr/lib/i386-linux-gnu',
]

then:

make
sudo make install

for python 2.6.8

./configure --prefix=/opt/python-2.6.8/ --enable-unicode=ucs4 --with-ssl --without-tkinter

edit setup.py, change:

lib_dirs = self.compiler.library_dirs + [
    '/lib64', '/usr/lib64',
    '/lib', '/usr/lib',
    ]
 
to:

lib_dirs = self.compiler.library_dirs + [
'/lib64', '/usr/lib64',
'/lib', '/usr/lib', '/usr/lib/i386-linux-gnu',
]

edit Modules/Setup, change:

#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto

to:

SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto

edit Modules/_ssl.c, change:

  else if (proto_version == PY_SSL_VERSION_SSL2)
        self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */

to:

#ifndef OPENSSL_NO_SSL2
    else if (proto_version == PY_SSL_VERSION_SSL2)
        self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
#endif

then:

make
sudo make install

.....
good luck ;-)

TODO:

* find a better host
* a better english page
* an italian page
* more testing
* more check on deps
* 64bit version
* real package for ppa in chroot env

any help is appreciated. (thanks to Riccardo Lemmi for helping me on python, even at impossible hours.)

sabato 3 novembre 2012

P.js


P.js, an object oriented javascript system in 559 bytes!
an example:

// P.js exposes the `P` variable
(function()
{
    var Animal = P(function(self)
    {
        self.init = function(name)
        {
            self.name = name;
        };
        self.move = function(meters)
        {
            console.log(self.name + " moved " + meters + "m.");
        }
    });

    var Snake = P(Animal, function(self, base)
    {
        self.move = function()
        {
            console.log("Slithering...");
            base.move.call(self, 5);
        };
    });

    var Horse = P(Animal, function(self, base)
    {
        self.move = function()
        {
            console.log("Galloping...");
            base.move.call(self, 45);
        };
    });

    var sam = Snake("Sammy the Python"),
        tom = Horse("Tommy the Palomino");

    sam.move()
    tom.move()
})();

i love it!

sabato 25 agosto 2012

lubuntu come desktop principale

Lubuntu, il miglior ubuntu di sempre.
Una serie di shot.

il desktop di lxde

 sviluppo con geany

file manager

grafica con gimp

vlc e il visualizzatore di immagini di lxde

gioco open  assaultcube

 

gioco closed spirits

gioco open frogatto

il browser web midori

lunedì 2 luglio 2012

chrome on ipad

This is an experiment, it is my first bilingual post.
All web application developers waiting in glory for the release of google chrome ipad. This application could move a little numbness caused by web applications on safari ios. In the dekstop version of Chrome, we can use many features to create real applications. We have a very powerful JavaScript engine, the V8 engine with a jit compiler and many features of html5 like api to access the file system.
ipad's chrome seems castrated ...
ok the market place is missing, Apple hates competition.
But Apple does not even allow the use of JavaScript engines other than "UIWebView's Javascript callback interface" that is not a very powerful engine.
Safari uses a js engine called "nitro", it is more powerful and fast than the "UIWebView js engine".
PhoneGap also use UIWebView js and it is a second hand engine.
But inside chrome is much more serious, we expected a way for write high performance applications for ipad without using PhoneGap or anything similar.
but.. no manifest, no file system access, no v8.
chrome UIWebView js can not compete with safari's nitro. One of the strengths of chrome on dekstop becomes a weakness.
It must be said that they focused heavily on users, with synchronization between dekstop and mobile mode and a decent porn mode, but as a developer I feel cheated and not care if the fault lies with apple, google has the numbers to make themselves heard, and must be heard!
(Forgive my English.)

==== in ITA ====
Questo è un esperimento, è il mio primo post bilingue.
Tutti gli sviluppatori di applicazioni web aspettavano in gloria l'uscita di google chrome per ipad.
Questa applicazione poteva un pò smuovere il torpore causato da safari e dalle applicazioni web su ios.
Nella versione dekstop di chrome possiamo usare molte funzionalità interessanti per realizzare vere e proprie applicazioni.
Abbiamo un motore javascript molto performante, il motore v8 con tanto di compilatore "just in time" e molte funzionalità interesasnti di html5 come le api per accedere al file system.
Su ipad chrome sembra castrato...
Certo manca il market place, visto che apple odia la concorrenza.
Ma apple non consente nemmeno l'utilizzo di motori javascript diversi da "UIWebView's Javascript callback interface" non un motore molto performante.
Oltretutto safari utilizza nitro un motore ben più performante di "uiwebview js". Anche lato phonegap c'è poco da ridere dobbiamo beccarci un motore javascript di seconda mano.
Ma dentro chrome è ben più grave, ci aspettavamo una via per le applicazioni html5 performanti su ipad senza ricorrere a phonegap o simili invece nulla, niente manifest, niente accesso al file system, niente v8.
Oltretutto resta un browser di serie B visto che non può competere con nitro di safari, praticamente uno dei punti di forza di chrome su dekstop diventa un punto debole. C'è da dire che hanno puntato molto sugli utenti, con sincronia tra dekstop e mobile e una modalità porno decente, ma come sviluppatore mi sento fregato e poco mi importa se la colpa è di apple, google ha i numeri per farsi sentire, e deve farsi sentire!

lunedì 14 maggio 2012

vivaldi tablet e considerazioni.

tablet Linux puro e duro con una versione di kde sulla quale viene montato un launcher scritto ad hoc (e fortemente ottimizzato per il touch) unito ad un prezzo di lancio fortemente aggressivo, si parla di circa 200 dollari ;-)
Esaminiamo ora alcune caratteristiche devo dire, da amante di kde/qt che specialmente lato software le trovo molto interessanti, altre (specialmente sull'hardware) mi danno un pochetto da pensare.
Lasciamo subito perdere cpu, gpu e ram, che ritengo essere più che degne, quello che mi colpisce sono la relativamente bassa risoluzione:
  • 800*480, decisamente troppo bassa per una visione tranquilla del web che "diciamocelo" si è spostato sul 1024*…
  • l’aspect ratio... ossia l’aver scelto un 5/3 invece di un 4/3 secondo me rende l’esperienza multimediale frustrante, il 5/3 è una via di mezzi tra il 16:9 e il 4:3 poco usata in clip e film
  • anche sul prezzo c'è poi da ridire... 200$ potrebbe sembrare un grande punto a favore, ma va considerata l’assenza di grandi player in gioco, che in pratica vuol dire niente fabricazioni ad hoc, ma un utilizzo di una cineseria di infima qualità costruttiva*
  • senza infamia e senza lode la batteria (3000mAH)
  • ottimo invece il peso appena 350grammi
  • ovviamente il poter sviluppare con qt e python (io lo comprerò solo per questo), buona anche la dotazione di serie con un pim già pensato per il touch e con un viewer dei dei file d’ufficio (doc, odf, xls, etc) basato sulla suite calligra (ex koffice) e già pensato per il touch.
Quindi promosso ma con riserva ne vorrei uno per toccare con mano questa macchina che alla fine mi intriga assai!

giovedì 19 gennaio 2012

recuperare dati da apk android

Oggi pomeriggio mi è capitata una cosa sul terrificante andante.
Mentre stavo lavorando su un progetto html5 + phonegap invece di
eliminare una risorsa siccome ho il rm -rf facile ho eliminato la
directory del progetto (apk incluso). dopo essere rimasto impietrito
dal terrore per 15 secondi netti, visto che avevo ancora l'emulatore
funzionante con l'ultimo apk ancora runnante mi sono dato al recupero
e visto che questa situazione potrebbe succedere anche ad altri
diciamo che il recupero è sempplice si apktool e adb. Con adb si
recupera l'apk in maniera semplice.
Con:
adb remount
adb shell
si va sul file system dell'emulatore, poi sotto la directory data/app
cerchiamo la nostra applicazione, copiatevi il nome ;-)
poi scarichiamo apktool da http://code.google.com/p/android-apktool/,
che è un semplice jar...
quindi:
mkdir recupero
cd recupero
adb remount
adb pull /data/app/{nome_app.apk}
java -jar apktool.jar d {nome_app.apk}
dove {nome_app.apk} è il nome della vostra bella applicazione.
Semplice no?... stavolta ho sudato freddo...

sabato 7 gennaio 2012

servizio di shorturl scritto in 12h!

Per un mio studio sui microframework (studio orizzontale da css a js, da sql a php), ho deciso di fare un piccolo tour de force e realizzare un servizio di rimpicciolimento degli url utilizzando slim microframework come base (come middle-end diciamo), utilizzare framework css e js sul front-end e volevo utilizzare notorm.php per accedere ai dati, ma le query erano talmente semplici che mi è venuto più naturale scrivere l'sql quindi ho optato per utilizzare PDO e buona notte... (magari in una futura versione passo a notorm).
Torniamo al lato client, invece di utilizzare jquery ho optato per ender una libreria no-library che permette di costruirsi la propria versione in maniera modulare... be a me serviva fondamentalmente manipolazione del dom, ajax ed eventi, ho ottenuto un 19k minified gzipped contro i 31k di jquery minified gzipped (ho risparmiato 12k perché come dice gozzilla size matter)
perchì fosse interessato il mio build di ender per questo progetto è:
ender build domready qwery bean bonzo reqwest
(per installare ender servono node e npm)
Per i css essendo io un non-designer (cioè sono capace di buttare giù layout in css ci mancherebbe ma ci metto giusto giusto quei 6-7 giorni, meglio fare altro no?) avevo testato bootstrap di twitter ma visto che avevo già rotto le scatole abbastanza a fat per richieste su ender ho optato per toast.
Infine ho usato un semplice sqlite3. (magari in una prossima versione valuto altri db, comunque con pdo alla fine è solo una stringa di configurazione)
L'algoritmo per la generazione degli hash degli url accorciati è la cosa più stupida che mi è venuta in mente è utilizzare semplicemente un indice progressivo in base 36 che utilizza quindi numeri e lettere in maniera case insensitive, quindi facilitare la vita a chi vuole scrivere magari tutto maiuscolo o minuscolo senza problemi.
è una buona idea? nzomm' in base di 62 ci si guandagnava na cifra..
Comunque anche in base 36 già con 4 lettere si gestisce:
36*36*36*36-1 => 1.679.615 redirezioni visto che non voglio andare a competere con goo.gl diciamo che ci posso stare.
Il codice grazie ai microframework che semplificano la vita è molto semplice mappo 3 azioni: index, /:hash, /short/ (rispettivamente in get,get e post) sulle funzioni: servi il modulo, recupera _link_per_hash_da_db_e_ridirigi e genera_hash_da_url.
Un po di ajax un pò di css e zack il gioco è fatto.
Ho messo tutto su github, è una versione preliminare ed essendo scritta in tuor de force spero non ci sian castronerie.
https://github.com/micheg/piqo
Ah oh dimenticavo c'è pure: una demo qui.
Aggiunta dell'ultimora:
Mi han fatto notare che un servizio di short url a cui serve il www davanti è inutile... ok bè lo so, ho lavorato sui dns vediamo quanto ci mette a propagarsi la modifica!

PHP Slim Framework e TOPHOST

è qualche tempo che sto utilizzando una serie di microframework per i miei progetti web; fondamentalmente sinatra, flesk e slim (rispettivamente per ruby, python e php).
Visto la vasta diffusione di hosting php molti dei miei progetti si concentrano su questo linguaggio.
Dovo voglio andare a parare? e un secondo e che cavolo.
Dicevo.. Alcune dei miei clienti non vogliono nemmeno permettersi aruba e ripiegano sul veramente economicissimo tophost.
Ora il problema è che non sono riuscito a fare funzionare l'.htaccess standard di slim (e che utilizzo un pò ovunque) su tophost... il fatto che non sia possibile accedere all'error log del dominio mi ha lasciato poca libertà di esplorazione.
Dopo vari tentativi una htaccess minimale, ma funzionante l'ho trovato ;-)
(gioia gaudio e tripudio, pure il poster di darth fener sembra dirmi uè comessibravo)
allora cianciando le bande e bando alle ciance...

----- .htaccess testato solo con framework slim

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule . /index.php [L]

-----

In pratica se non sei un file o una directory fisica o la favicon ridirige all'index.php.
Questo file va messo nella directory htdocs del dominio tophost.

Ben'inteso che se qualcuno ha testato meglio slim con questo provider e ha soluzioni migliori le proponga pure!