oriolrius.cat

Des del 2000 compartiendo sobre…

Category: Development, Models and Methodologies

Què és Mono?

Reading time: 2 – 3 minutes

mono.gif

No fa massa temps es va fer pública la primera versió estable de Mono, aquesta implantació de codi
obert del .NET. De fet és molt interessant tot això del .Net i Mono. Fins ara ho veia como una
re-invensió de Java. Però entre la conferència del Miguel de Icaza (local) a les Drassanes i
aquest docuement de Jordi Mas ja ho veig tot molt més clar. Pel que com jo
no teniu gaire clar diferència entre Java i .Net, com a idea fonamental, jo diria que és:

Java és un llenguatge de programació que corre sobre una màquina virtual, de forma
que el procés de compilació acaba sent un procés de traducció a un llenguatge intermig
que enten la JVM (Java Virtual Machine) i que aquesta és la que tradueix a instruccions
d’ensamblador específiques de cada arquitectura. Doncs bé, .Net i el Mono el que permeten
és no només aconseguir programes multiplataforma sinó també programes multi-llenguatge i
multiplataforma que tot i ser interpretats per una màquina virtual intermitja poden treballar
directament contra la arquitectura interna del sistema operatiu. Aconseguint d’aquesta forma
que els llenguatges sembla que corrin de forma nativa contra el sistema operatiu, com si no hi
hagués una màquina intermitja.

Malgrat que Mono encara no és un implantació 100% de totes les parts de .Net, per exemple, en els
Winforms aquest encara esta una mica verd. Es pot considerar que són totalment compatibles .Net i
Mono. O sigui, que sobre el paper moltes aplicacions programades per Windows amb .Net podrien corre
directament, o amb poques modificacions, contra Linux, Solaris, MacOS, S390, etc. El que jo em
pregunto és si les aplicacions programades en .Net per pocket pc podran correr contra algún sistema
linux <> (embeded) que suporti Mono. Aquesta és l’única manera que veig que a curt termini
el linux com a sistema operatiu de handhelds podria tenir algo que dir contral la invesió de pocket
pc que hi està havent en aquest tipus de dispositius.

Creant noves pàgines integrades amb Blog:CMS (NucleusCMS)

Reading time: 1 – 2 minutes

Tot llegint els forums del Blog:CMS m’he trobat amb una nota molt interessant. Bàsicament es tracta
de poder crear noves pàgines web dintre del nostre portal com si aquestes estessin incrustades
dins del propi sistema CMS (Content Managment System) personal.

Doncs el que es comenta és que s’han de fer dues coses:

1er) S’ha de crear un nou skin, una bona idea per exemple és copiar l’skin anomenat “About”, la idea és que el contingut del nou skin sigui semblant a això: (“MyNewSkin”)

<%ExtraSkin(header)%>
<div id='items'>
<h2>New Title</h2>
Your Content here
</div>
<%ExtraSkin(shortsidemenu)%>
<%ExtraSkin(footer)%>

2on) Creem un fitxer de PHP amb el següent contingut: (“NewBlankPage”)

<?php
$CONF = array();
$CONF['Self'] = "index.php";
include('./config.php');
selectSkin('MyNewSkin');
selector();
?>

Ara només cal que accedim a http://host/path/NewBlankPage.php i ja tindrem una pàgina que semblarà que sigui propiament del Blog:CMS, sigui quin sigui el theme que usem.

dadabik: Databases interfaces creator

Reading time: 1 – 2 minutes

Normalment és Comesfa qui referència els meus articles, però avui faré alrevés ja que fa molt de temps en Ramón va publicar un article sobre dadabik i ja el vaig trobar molt interessant però avui l’he pogut probar per motius professionals i és una passada tot i que no l’hi he tret ni l’1% del suc. Com indico al títol és un software que serveix per crear de forma molt senzilla interficies d’accés a BBDD. Permet crear tan interficies d’introducció de dades com de consulta i busqueda, a més permet relacionar taules entre elles, realment molt útil. Per gestionar l’accés a BBDD simples. Val la pena que penseu en el dadabik la propera aplicació de BBDD que programeu amb PHP.

tidy: Convertir HTML a XHTML

Reading time: 4 – 6 minutes

Segurament ja heu llegit que he tingut, i segurament encara tinc, problemes en formatejar la informació HTML a XHTML, que és el format amb el que treballen les noves versions de BLOG:CMS i en teoria el format del futur de les pàgines web. Ja que a través de les fulles d’estil s’aconsegueix una independència quasi 100% del contingut i el format del contingut. Si voleu més info del tema ús recomano que ús passeu per la web del Diego ( mini-d ) allà hi trobareu molta més informació sobre aquests formats i les seves avantatges.

Doncs en aquest article ús intentaré explicar com usant el PHP he intentat convertir automàticament el codi HTML dels meus anteriors articles i comentaris al nou format XHTML 1.0 transitional. De fet, com tots els processos de migració tenen un retoc manual, però l’important és que l’escript ens estalviï el màxim de feina possible.

Bé doncs, com diu el titol he usat el tidy per fer això, aquest software és una extensió pel PHP que ens permet automatitzar la conversió. De fet són una col·lecció de funcions molt útils, podeu mirar la documentació oficial de les mateixes a la web de php.

De fet, la majoria de funcions del tidy són pel PHP5 i jo obviament no uso aquesta versió del PHP, sinó la versió PHP 4.3.8, així doncs he suat una bona estona fins que he descobert a base de proba i error quines funcions anaben en PHP4, que per cert, no estan especificades al fantàstic manual de la gent de php.

Per instal·lar el tidy, amb el mini-manual que hi ha a php.net n’he tingut prou, tot i que el que no posa és que s’ha d’editar el fitxer php.ini i s’ha d’afegir la següent línia perquè es carregui l’extensió tidy:

extension = tidy.so

Es poden posar més opcions al fitxer php.ini però jo sincerament he passat d’elles. Per saber que funciona correctament, ús recomano que feun phpinfo(); i busqueu el requadre d’opcions per defecte del tidy, si no hi és vol dir que encara no teniu el suport carregat. Recordeu que després de tocar el php.ini heu de reiniciar el l’apache.

El codi de PHP4 que finalment he usat per fer la conversió és el següent:

$opts = array(
"clean" => true,
"output-xhtml" => true,
"drop-font-tags" => true,
"drop-empty-paras" => true,
"wrap" => 80,
"logical-emphasis" => true,
"enclose-text" => true,
"enclose-block-text" => true );

$html="Codi en format HTML<br>Per provar <b>que tot funcioni</b>";
$xhtml=tidy_repair_string($html,$opts);

Pel que fa les opcions que uso, ús recomano que les treieu de Clean up your Web pages with HTML TIDY aquest document, té una zona on es descriuen força bé les opcions del conversor. Pel que fa a la resta del codi ens tornarà el codi XHTML amb tots els headers i footers i les mandangues propies dels formalismes del XML. Si com jo el que voleu és enviar aquest codi a la BBDD perquè són continguts d’articles, comentaris i altres similars, el que voldreu és treure aquestes capçaleres, perquè no hagueu de pensar com fer-ho aquí teniu el meu codi:

$inici = strpos ($xhtml,"<body>")+6;
$final = strpos ($xhtml,"</body>");
$final = $final - $inici;
$article = substr ( $sortida, $inici, $final);

Ara dins la variable article tindreu algo així:

<p>Codi en format HTML<br />Per provar <strong>que tot funcioni</strong>

Tot i que sembli molt senzill no ús vull dir les hores que m’ha portat descobrir això sinó pensarieu que sóc retrassat . De fet, tinc el cervell tan destrossat després d’intentar corregir tot això que m’entren ganes d’enviar-ho tot a rodar. Per altre banda, estic segur que encara queden coses que no acaben de funcionar al poral, espero que m’ajudeu a trobar-les perquè les pugui corregir. Gràcies.

La curiositat del giorno

Reading time: < 1 minute

Holas a toots!! Avui estava jo tot felis tornan a programar en PHP a la
italiana quan he fet un “if” de tota la vitta i quina ha estat la meva sorpresa
al descobrir que els teclats italianus no tenen per obrir i tancar condicio!!
si!! els mitics “{” i “}”!! no hi son!! he hagut de configurar el teclat a
catala per poderne fer us, ja que passu un monton de fer ALT+123 i ALT+125.I jo
ma pregunto…com cony programen els italians?? Ho tenen xungu amb l’expressio
ALT+ pq no veas com s’usan!! eh nenes!! C, PHP, Java,… Reflexio al cantu per
qui vulgui tema de conversa. I encara em queda publicar un recull de parides
inventades a Napols…pero es que soc un perrote. ale!! besitus.

Convertir les HTMLentities en format numèric en PHP

Reading time: 1 – 2 minutes

Fa temps tenia un problemilla en PHP que vaig reportar a la llista de
Comesfa? però no vaig aconseguir
treure’n l’aigua clara, el problema era el següent: (mail original)

From:      Oriol Rius 
To: comesfa@guifi.net
Subject: Pregunta pels PHPerus!!!
Date: Tue, 29 Jun 2004 09:14:16 +0200
Hola nanos, aquest finde m'he passat unes quantes hores programant en
PHP fent un connector per la itnerficie XMLRPC dels blogs. Bé és igual,
ja ús explicaré. El problema és que m'he passat més de 4h buscant com
convertir això:
Caracter&#237;stiques
a
Característiques o Caracter&iacute;stiques
i no he tingut collons de fer-ho... HELP!!!!!!!!!!!!!!!!!
A veure si algú sap com fer-ho, gràcies.
Salutacions,
Oriol.


Doncs l’altre dia buscant una cosa que no tenia res a veure, vaig trobar la
solució al propi manual del PHP online,
aquí teniu el trosset de codi màgic, que soluciona el problema
anteriorment mencionat:

function unhtmlentities ($string)  {
$trans_tbl = get_html_translation_table (HTML_ENTITIES);
$trans_tbl = array_flip ($trans_tbl);
$ret = strtr ($string, $trans_tbl);
return preg_replace('/&#(d+);/me',
"chr('1')",$ret);
}

10 motius per usar Subversion encomptes de CVS

Reading time: 1 – 2 minutes

No he posat moltes referències al portal sobre el Subversion. Malgrat en sóc recent
usuari, i fins hi tot diria més: orgullós nou
usuari. Tret d’un petit problemilla que tinc de consistència de les
bases de dades de Berkeley (sistema de BBDD que usa el Subversion internament)
per la resta ús puc dir que n’estic molt content. Fins hi tot he fet un
mini-mini-quick-start-guide
(.doc,
.pdf )
en català, és clar. Ús recomano millor la quick start guide feta per Catux. Ja que la meva la vaig fer per sortir del pas
amb un tema de feina.

Doncs bé, si algú encara es planteja aprendre CVS, o bé, està una mica cançat
d’algunes de les limitacions que té el CVS. Ús referèncio
una llista de 10 motius pels quals és millor usar Subversion que
CVS:

The Top Ten
Subversion Tips for CVS Users

Fer un FTP des del PHP

Reading time: 4 – 6 minutes

Això no és cap manual de com fer un FTP des del PHP, com
sembla pel titol. Per això ja hi ha la web de PHP, on podeu buscar informació sobre la
funció ftp_put (es) per exemple.

El que vull explicar és com funciona internament la funcion ftp_put
perquè no queda gens clar al manual del PHP ni a cap forum d’ajuda.
Perquè és tan important saber això? doncs perquè
sinó els exemples que hi ha a les web de PHP o dels forums no funcionen
ni a la de tres.

Centraré tota l’explicació en base a l’exemple de la web. A la web hi ha dos trossos de codi un .html i .php, el primer mostra el formulari per pujar el fitxer i el segon el codi que fa el ftp per pujar el fitxer:

<html>

<body marginwidth=4 marginheight=4 topmargin=4 leftmargin=4 bgcolor=white vlink="#0000ff" link="#0000ff">

<form name="Attachments" method=POST action="sendimage.php" enctype="multipart/form-data">

<input type=hidden name=box value="">

<tr> <td nowrap width="1%">&nbsp;&nbsp;<b>Image:</b></td> <td colspan=2>

<input type=file name=source_file size=20> <br>

</td> </tr> <input type=submit name=btnSubmit value=Submit size=20 style="border: 1px solid #0000FF"></form>

</body> </html>

D’aquest codi és important fixar-se, a part del que ja explica la web, que el camp d’input és de tipus ‘file’ i li posem de nom a aquest camp: ‘source_file’. Seria normal pensar que el tipus ‘file’ és equivalent a una cadena (string), però no és així sinó que és una taula (array). Aquí teniu un exemple de valor que pot agafar la taula de tipus ‘file’ anomenada $sourcefile:

Array
(
    [name] => foto.jpg
    [type] => image/jpeg
    [tmp_name] => /tmp/phpFpMtnb
    [error] => 0
    [size] => 44050
)

D’aquí és important adonar-se que “name” conté el nom del fitxer al ‘site origen’, el tipus conté el tipus de fitxer que s’esta pujant segons MIME, “tmp_name” (molt important) conté el nom del fitxer temporal, amb el que es guarda el nostre fitxer al servidor de PHP. Aquest fitxer és molt important perquè és el fitxer que realment es pujarà per FTP al site destí.

De fet, sembla extrany però si ens ho pensem bé és obvi. Perquè el PHP no pot fer un ftp des del nostre directori origen, ja que és codi que s’executa al servidor. Per tant, quan el PHP vulgui fer un FTP només ho podrà fer de fitxers que hi hagi al servidor i no al nostre PC. Suposo que ara queda clar, el perquè.

Al camp “errors” de la taula es guarda el codi d’error que retorna la funció ftp_put al fer l’ftp. Per últim “size” ens indica la mida del fitxer.

El codi de sendimage.php que és el fitxer que crida l’anterior formulari és el següent:

Hem de capturar l'array del form
$source_file=$_FILES["source_file"];

$ftp_server='example.com';//serverip $conn_id = ftp_connect($ftp_server);

// login with username and password $user="user"; $passwd="password"; $login_result = ftp_login($conn_id, $user, $passwd);

// check connection if ((!$conn_id) || (!$login_result)) { echo "FTP connection has failed!"; echo "Attempted to connect to $ftp_server for user $ftp_user_name"; die; } else { echo "
Connected to $ftp_server, for user $user
"; }

// Posem el mateix nom de destí que d'origen $destination_file=basename($source_file["name"]); echo ("
"); print $destination_file;

echo ("
");

// Pugem el fitxer temporal tal com hem explicat abans $upload = ftp_put($conn_id, $destination_file, $source_file["tmp_name"], FTP_BINARY);

// check upload status if (!$upload) { echo "FTP upload has failed!"; } else { echo "Uploaded $source_file["name"] to $ftp_server as $destination_file"; }

// close the FTP stream ftp_close($conn_id); ?>

D’aquest codi és important fixar-se en dos coses:

1) a la primera línia capturem la taula (array) de tipus ‘file’ que ens envia el formulari, aquesta taula (array) com ja hem dit és el que conté la informació del fitxer a enviar.

2) la línia del ftp_put, cal fixar-se que com a fitxer origen passem el camp ‘tmp_file’ del array de tipus ‘file’ anomenat ‘source_file’.

Suposo que la resta del codi és molt clar, si no és així ja sabeu que heu de fer: preguntar.

Referències a recursos/llibreries de PHP

Reading time: 1 – 2 minutes

L’altre dia vaig veure que havien sortit els ebuilds de les següents
classes per PHP:

XML-RPC: This collection of
PHP classes provides a framework for writing XML-RPC clients and servers in
PHP.

Acceleradors de pre-process de codi per PHP: The ionCube PHP Accelerator i Alternative PHP
Cache
.

ADOdb Database Abstraction Library
for PHP (and Python)
: ADOdb is a database abstraction library for PHP.
There is also a Python version which is documented here. The PHP version
currently supports MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MS
SQL, Foxpro, Access, ADO, Sybase, FrontBase, DB2, SAP DB, SQLite, Netezza,
LDAP, and generic ODBC, ODBTP. The Sybase, Informix, FrontBase and PostgreSQL,
Netezza, LDAP, ODBTP drivers are community contributions.

Imagick:
Provides a wrapper to the ImageMagick/GraphicsMagick library.
(sincerament no tinc ni puta idea de perquè serveix, algú
ho sap?
)

XML_RSS: parser XML que
permet treballar amb RSS sense complicar-nos la vida, molt útil si heu
de treballar en aquesta definició d’XML.

a i més com ús dic totes en paquets ebuil per
instal·lar al a Gentoo 😉