oriolrius.cat

Des del 2000 compartiendo sobre…

Category: Development, Models and Methodologies

GTK i PHP

Reading time: 1 – 2 minutes

Em sembla que va ser l’Oriol que un dia em va parlar sobre programar aplicacions PHP que usen les llibreries GTK, amb tot el que això implica. O sigui, poder programar aplicacions d’escriptori en llenguatge PHP. Si sabeu programar en PHP us recomano que li doneu un cop d’ull ja veureu com en un moment sou capaços de fer miracles fora del navegador. Us sortiràn unes GUIs que no us creureu que les heu fet voslatres i menys en PHP. A més del phpGTK hi ha una eina que es diu gnope que ens permet fer fins hi tot instal·ladors de les eines que programeu, tan per Win, Linux i Mac OS X. La veritat és que a mi la idea m’ha encantat.

deployment.gif

MVC i PHP

Reading time: 4 – 7 minutes

Com molts sabeu jo no sóc informàtic ni pretenc ser-ho, ara com jo sempre dic, als telemàtics se’ns pre-suposa que sabem informàtica. Alguns diuen que saber programar no és saber informàtica però jo crec que almenys si saps programar algo d’infomàtica saps. Així doncs entre tot aquest dilèma que m’he montat per dir només que, fins no fa massa anys no havia sentit a parlar del sistema de programació MVC (Model Business, View i Controller). Potser algú recorda que fa molt de temps vaig publicar un article on recomanava la web d’en Tony Marston. Doncs aquí van ser on per primer cop vaig coneixer una mica a fons tot aquest tema.

Malgrat no ho necessito per res en especial fa uns dies vaig pensar que seria bona idea aprofundir una mica més en aquest tema del MVC i he estat llegint una miqueta sobre el tema. Com que el llenguatge de programació que més uso és el PHP vaig buscar informació de frameWorks que implementessin el model MVC sobre aquest llenguatge que en principi no implementa per defecta una estructura MVC. Perquè us feu una idea en aplicacions ASP (Applications Service Provider) el sistema MVC per excel·lència és els servlets de Java, per exemple, la implementació Tomcat. Pels que conegueu millor el tema que jo és el que en java en diuen struts. Si algú de vosaltres ja ho coneix i vol una implementació dels mateixos feta en PHP us recomano que us mireu el phpMVC.

Com us comentava abans tot això ho vaig descobrir a fons a través d’en Tony i ell mateix té un document que crec que és molt bo, que explica com implementar un model MVC directament sobre PHP sense passar per un frameWork concret. El document en qüestió es diu The Model-View-Controller (MVC) Design Pattern for PHP. Si com jo abans d’atacar documents com aquest heu de fer una intro al tema, la documentació de Java sobre el MVC i els struts jo diria que és molt bona. Concretament us recomano els següents capitols:

Un bon dibuix perquè veieu pels que no us soni de res el que dic, que el model és molt útil:

web-tier8.gif

Des de la documentació d’Oracle sobre els models MVC he trobat un gràfic que aplica la teoria exposada en el gràfic i documents anteriors des d’un gràfic aplicat directament a explicar les sigles MVC:

mvc.jpg

Tornant al tema PHP hi ha molts més frameworks i webs que parlen d’MVC sobre aquest llenguatge. Però potser els que més bona pinta m’han fet, sense haver tingut la sort de poder-los provar amb calma i tranquil·litat, són els que us poso a continuació:

  • phpMVC com us he comentat abans jo diria que és un dels frameworks que implementen MVC més complerts, sobretot perquè en la capa d’accés a dades i en la capa de presentació suporta llibreries tan conegudes com: PEAR, phpLIB, Smarty i moltes d’altres. Com us he comentat és una implementació directa del model struts que usen els servlets de java.
  • cakePHP jo diria que és la llibreria MVC perfecte per programar ràpidament una aplciació sense tenir una curva d’aprenentatge que es dilati massa en el temps.
  • WACT (Web Application Component Toolkit) també té pinta de no ser massa complicat i jo diria que esta prou bé. Sembla que esta pensat perquè no ens perdem a l’hora de programar aplicacions segures. Però no veig massa clar quines carències té. Potser la petita comunitat d’usuaris?

Com que sobre aquest tema no en sé gaire més, us remeto a una discusió que he trobat en un forum que sembla prou interessant i de nivell. A més molta gent hi parla amb coneixement de causa, cosa que és d’agraïr, Tired of non-standards? Take a look. si aquesta us sembla poc concreta, una altre: PHP Frameworks.

Si algún dels lectors que sigui informàtic, o que senzillament, en sapigue molt més que jo i ens pot donar eines per mortals per dominar aquestes tècniques encantat de mirarme-les.

Com funcionen/funcionem els programadors

Reading time: < 1 minute

Mai m’he considerat programador, tot i que hem passo el dia escribint linies i linies de codi, tot un misteri la contradicció, però com deia el Pujol: “Català és tot aquell qui es sent Català”, o algo així. La qüestió és que quan jo treballava al CISS, ja fa uns quants anys teniem penjat un poster a la paret i curiosament aquesta setmana m’ha arribat el típic email conyon sobre programadors i/o informàtics i hi anava adjuntada una imatge amb el mateix poster. Així que no he pogut evitar penjar-lo aquí:

Problema dels PNG transparents amb IE

Reading time: 2 – 2 minutes

Continuant amb el tema de les transparències i els .png, doncs resulta que el títol del portal que abans era un .gif ara és un .png, igualment amb la transparència necessaria perquè es vegi el color de fons de la pàgina. El que passa és que aquest .png ja no es veu bé amb IE, com sempre per raons incomprensibles de M$. Així doncs el Law, creador de la imatge del títol, m’ha passat un petit javascript que soluciona el problema.

Primer de tot el que hem de modificar és on es crida la imatge, per exemple:

<img src="path/imatge_transparent.png" onLoad="fixPNG(this)"  />

La funció fixPNG concretament té aquest codi JavaScript:

function fixPNG(myImage){
	var imgID = (myImage.id) ? "id='" + myImage.id + "' " : ""
	var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : ""
	var imgTitle = (myImage.title) ? "title='" + myImage.title + "' " : "title='" + myImage.alt + "' "
	var imgStyle = "display:inline-block;" + myImage.style.cssText
	var strNewHTML = "<span " + imgID + imgClass + imgTitle
	strNewHTML += " style=\"" + "width:" + myImage.width + "px; height:" + myImage.height + "px;" + imgStyle + ";"
	strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
	strNewHTML += "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></span>"
	myImage.outerHTML = strNewHTML
}

Si no volem deixar aquest codi enmig del codi HTML/xHTML, podem guardar aquesta funció, per exemple, en el fitxer titol.js i després incrustar-la al meta-codi així:

<script type='text/javascript' src='path/titol.js'></script>

Moltes gràcies, LAW!

Groovy: simplificant Java

Reading time: 1 – 2 minutes

groovy.png

Groovy és un llenguatge que usa les APIs de Java però que simplifica la programació al màxim. Sembla que no esta malament algún dia li podria donar un cop d’ull. També he trobat un article d’IBM que en fa una petita introducció, sembla molt senzill realment.

A O’Reilly Network es va publicar no fa massa un codi fet en Groovy que servia per crear un lector de feeds (tipus liferea) que treballava contra les APIs de bloglines. Això et pot interessar pof. L’article: A Complete Bloglines API Application ( versió imprimible )

Si algú l’ha provat o l’arriva a provar que avisi que tinc curiositat de saber fins on arriba la implementació de la API o del paquet de classes de java millor dit.

Treballant amb cookies de sessió i PHP

Reading time: 1 – 2 minutes

A vegades necessitem parlar amb una web des de PHP i aquesta usa cookies de sessió sense les quals no podem parlar amb la web. Per agafar la cookie d’inici de sessió podem usar aquesta funció:

function getgaleta($server, $port)
{
   $cont = "";
   $ip = gethostbyname($server);
   $fp = fsockopen($ip, $port);
   if (!$fp)
   {
       return "Unknown";
   }
   else
   {
       $com = "GET http://www.barcelonastyle.com/gc/web/webesp/framesetxsl.asp HTTP/1.0rnrn";
       fputs($fp, $com);
       while (!feof($fp))
       {
           $cont .= fread($fp, 500);
       }
       fclose($fp);
       return substr($cont, strpos($cont, "Set-Cookie: ")+12, 45);
   }
}

Si ara que ja tenim la cookie el que volem fer és usar-la per fer peticions contra el site, podem usar aquesta altre funció:

function getcontent($server, $port, $file,$galeta)
{
   $cont = "";
   $ip = gethostbyname($server);
   $fp = fsockopen($ip, $port);
   if (!$fp)
   {
       return "Unknown";
   }
   else
   {
       $com = "GET http://".$server.$file." HTTP/1.0rnCookie:".$galeta."rnrn";
       fputs($fp, $com);
       while (!feof($fp))
       {
           $cont .= fread($fp, 500);
       }
       fclose($fp);
       return $cont;
   }
}

Tonto però útil, tinc moltíssimes més funcions però tampoc és qüestió de marejar, només que les he trobat útils aquestes junt amb les dues anteriors.

Un parell de funcions que us poden ser útils

Reading time: 2 – 3 minutes

Porto uns quants dies que crec que estic deixant de ser humà m’acaba de trucar la Daphne i semblava un mussol. No era capaç de lligar una frase amb cara i ulls. Què té a veure això amb el codi que posa més avall? doncs que estic programant una especie de webspider o robot o diga-li com vulguis per un tema de Downcenter, per tal de nutrir d’informació la BBDD del proper software que surt l’1 de desembre.

Com que no puc explicar més detalls del que estic programant em limitaré a enganxar un parell de funcions que poden ser útils a més d’un que estigui programant en PHP. Segur que sabeu que quan accediu a un formulari HTML i aquest llença una petició la URL que s’envia, com es pot comprobar a la barra de direccions del navegador, agafa una forma rara. O sigui, els espais passen a ser símbols “+” i els caràcters ASCII extesos, per sobre el codi 127, es codifiquen en codis hexadecimals.

Doncs bé aquestes funcions el que fan és precisament això, els passes una cadena, per exemple, una URL en forma de 8 bits normal i corrent i te la converteix en el format que comentava anteriorment. L’altre funció el que fa és alrevés, passa de format codificat a normal. Espero que us sigui tan útil com ho ha estat per mi.

function cadenaNormal2Hex ($cadena) {
	// Canviem simbols Hex del mig de la cadena
	$llarg = strlen($cadena);
	for ($i=0;$i<$llarg;$i++) {
		$numascii=ord($cadena[$i]);
		if ( $numascii>127 ) {  // És text pla (???)
			$car=strtoupper(dechex(ord($cadena[$i])));
			$cadena = substr_replace ($cadena,"%".$car,$i,1);
		}//if
	}//for
	// Canvia el + per l'espai
	while ($pos = strpos($cadena," ")) {
		$cadena = substr_replace ( $cadena, "+", $pos,1);
	} //while
	return $cadena;
} // function
function cadenaHex2Normal ($cadena) {
	// Canvia el + per l'espai
	while ($pos = strpos($cadena,"+")) {
		$cadena = substr_replace ( $cadena, " ", $pos,1);
	} //while
	// Canviem simbols Hex del mig de la cadena
	while ( $pos = strpos($cadena,"%") ) {
		$codi=substr($cadena,$pos+1,2);
		$car=chr(hexdec($codi));
		$cadena = substr_replace ($cadena,$car,$pos,3);
	}//while
	return $cadena;
} // function

XML & DocBook: Structured Technical Documentation Authoring

Reading time: 2 – 3 minutes

docbook.jpg

XML is short for Extended Markup Language and is a subset of SGML, the Standard Generalized Markup Language. XML is an HTML-like formatting language. Whereas most HTML-related formats developed in the past adopted the “be conservative in what you send and liberal in what you receive” attitude, XML takes the opposite approach–documents should be 100% compatible. This compatibility is known as “well-formedness” of an XML document. To this end, even when the goal is clear, a document is rejected if it does not follow XML specifications to the fullest extent. In terms of practicality, this approach guarantees interoperability in the long run. Unlike HTML, which is the standard groupname for a lot of sub-protocols that are slightly different and not fully interoperable with one another, the strictness of XML ensures compatibility. XML also improves security dramatically, because there is only one way to interpret expressions, a way on which everybody agrees.

DocBook is an XML Document Type Definition or DTD. It is a subset of XML particularly suited for but not limited to the creation of books and papers about computer hardware and software. DocBook is well-known in the Linux community and is used by many publishing companies and open-source development projects. Most tools are developed for the DocBook DTD and are included in most Linux distributions. This allows for sending raw data that can be processed at the receiver’s end–wherever applications able to interpret XML directly are available.

The important thing to keep in mind is XML and DocBook let authors focus on content. In that sense, the presence of the word “markup” in the definition of XML is misleading. With XML, authors specify what type of data they are including, such as text explanations, command names, tables or images. How the content is formatted, laid out and displayed should not be their concern. From a single source, the receiver might generate PDF, PS, plain text, HTML and many other representations of the content.

Another advantage is DocBook XML files are written in plain text. Although many editors are available, such as oXygen and XMLmind, advanced DocBook users easily can write the source texts using vim, Emacs or any other text editor.

Publicat al Linux Journal: XML & DocBook: Structured Technical Documentation Authoring

Tony Marston’s Web Site (UNIFACE, XML/XSL, PHP)

Reading time: 2 – 4 minutes

TonyPhoto.jpg

Aquest article podria semblar el típic article on es referència una altre web, doncs potser si que ho és. Ara el que cal dir és que és la WEB. Bé m’explico, doncs aquest tal Tony té una web sobre programació en PHP, ell mateix fa uns articles boníssims sobre teoria de la programació tot i que sovint amb molt exemples demostratius, no reals. M’he estat mirant algún dels manuals que té per uns projectes que tinc entre mans a la feina i és brutal.

Bàsicament podeu trobar interessant el site pels següents motius:

Uniface is Compuware’s development environment for building,
renewing and integrating the largest and most complex enterprise
applications. Offering high developer productivity and leading-edge
functionality, Uniface helps IT organizations reduce the cost of
ownership for business-critical applications and increase the return on
investment for the IT budget.

The Uniface Application Platform Suite (APS) delivers an enterprise
capable solution. It provides application development, integration,
business process management and user interface frameworks though
software products that can be used both individually, or together.

  • També té una secció d’XML/XSL on ens parla com aprofitar la potència d’aquest parell d’estàndars, des d’UNIFACE i des de PHP.
  • La secció on jo realment he trobat indispensable la web és la de PHP, dona una prespectiva de PHP molt professional, com usar una eina d’aquest tipus en un projecte de grans dimensions. De fet, aquest senyor era programador de COBOL i això es nota en tot el que fa. La rigorositat, organització dels elemens i la visió dels projectes a llarg termini, pensant en el seu manteniment, correcció d’errors, auditoria del sistema i sobre tot la bona estructuració.
  • Molt interessant comprobar com treballar amb les 3 capes amb PHP:
    • Presentation
    • Business rules
    • Data access
  • En concret val la pena que mireu com planteja que s’ha de treballar amb PHP orientat a objectes, usant XML+XSL per generar XHTML que després amb CSS es formateja. Realment em queia la baba al veure la capacitat d’en Tony.

UPDATE: he fet un mirror de les pagines en les que parla aquest article en local.