viernes, 29 de enero de 2010

Apache Pivot: Una RIA más

Las RIA's están revolucionando el modo en que interactuamos con Internet, gracias a las interfaces de usuario que proporcionan una experiencia diferente y amena, en contraste con las vetustas y aburridas interfaces tradicionales. En un artículo anterior (¿Cuál es la mejor plataforma RIA?) hice un análisis superficial sobre las distintas propuestas existentes: Ajax, Adobe Flex, OpenLaszlo, Microsoft Silverlight y JavaFX.

He descubierto una RIA más que me parece muy interesante, pues viene de la comunidad Apache, líder en proyectos de tecnologías web libres. Esta propuesta se denomina Apache Pivot, basándose en el archiconocido y popular lenguaje Java, líder mundial en cuanto a número de desarrollos y desarrolladores. El concepto es distinto al de JavaFX de Oracle (anteriormente Sun MicroSystems), pues esta comunidad ha sabido ver lo mejor de cada mundo y desarrollar una tecnología agradable y sencilla.



Al ser un desarrollo en Java, contamos con multitud de IDE's para desarrollar, en cualquier plataforma. Sólo es necesario descargar el framework y empezar a trabajar, sin necesidad de plugins adicionales en el navegador (sólo la máquina virtual de Java). Cuenta con un lenguaje de marcado llamado WTK basado en el modelo vista controlador, que facilita mucho el desarrollo de las aplicaciones, y que permite también combinar con código Java, del mismo que Adobe Flex combina MXML y ActionScript.


Apache Pivot ha desarrollado un conjunto de elementos de interfaz de usuario amplia, que abarca cualquier necesidad que podamos tener, incluyendo contenedores, árboles, menús, etc.

Aconsejo al lector que pueda verla y probarla mediante la siguiente demo: http://pivot.apache.org/tutorials/sample-application.html


Apache Pivot dispone también de recursos para conectar con servicios de datos remotos, como SOA, Web Services, HTTPServices o servicios de queries web (por citar algunos). La gestión de XML es simple y potente, al igual que que trabajar con JSON y con colecciones. No se olvida tampoco de efectos visuales ni del tratamiento del drag and drop. Asimismo, incluye un módulo especialmente dedicado a gráficos estadísticos.



Tampoco se olvida de las pieles para los elementos de interfaz, así como tampoco de los renderers, pudiendo ser capaz de añadir elementos de edición a las interfaces, como a una tabla o Grid.


Apache Pivot es una buena alternativa libre a las RIA's, con una comunidad con solera y con muchos adeptos. Los desarrolladores Java lo van a acoger muy bien, pues la interfaz de usuario es muy rica y bien definida y organizada, además de poder seguir desarrollando en Java o integrar este lenguaje al WTK.

Para ser imparcial, debo añadir algunas críticas:
1) La velocidad de carga. La carga del applet es tediosa, pudiendo llegar a minutos. Lo más importante en una página web o en una aplicación es que el usuario no tenga que esperar.
2) La velocidad de navegación. Cuando navegas por una aplicación, al cambiar de escenario (mediante una opción, por ejemplo), parece que la aplicación se para durante un tiempo indeterminado. El usuario no sabe qué hacer, hace clic en otros sitios y no responde. Crea estupefacción y confusión.
3) Recursos multimedia. Apache Pivot parece más pensado para aplicaciones de gestión, y no añade recursos multimedia, aunque conociendo Java, sería posible importar alguna librería y poder usar estos recursos. Tampoco tiene muchos efectos.


Enlaces
Página oficial: http://pivot.apache.org/index.html
Tutoriales: http://pivot.apache.org/tutorials
Demos: http://pivot.apache.org/demos

martes, 26 de enero de 2010

Manifiesto por el Dominio Público

Se está llevando a cabo una recopilación de firmas para un manifiesto por el Dominio Público a nivel mundial. Esta es una oportunidad única de expresarnos y poder reclamar la riqueza común y universal que políticos, empresarios y organizaciones tienen enjaulada para su propio beneficio.

http://www.publicdomainmanifesto.org/
PDF en español

¿Cuál es la mejor plataforma RIA?

En la actualidad se está debatiendo una guerra por la supremacía de las RIA's, aún en pañales. Tenemos en el escenario varios actores: Flex, Ajax, OpenLaszlo, Silverlight y JavaX. Es posible que pudiera aparecer algún nuevo actor, pero dada la consolidación de estas plataformas, se hace difícil competir en este terreno, a no ser que incorpore una revolución en cuanto a innovación, tecnología o prestaciones.

Para aquellos que no conocen lo que es una RIA, baste decir que es una tecnología para crear interfaces de aplicaciones ricas para Internet (Rich Internet Application). La gran cualidad de esta tecnología es que permite interactuar con datos con un servidor y actualizar las interfaces (pantallas, formularios, etc...) sin tener que redibujar todo nuevamente. Asimismo, incorporan nuevos elementos de interfaz que permiten una experiencia de usuario muy agradable y usable, añadiendo propiedades multimedia (imágenes, vídeo, sonido...).

Para evaluar qué plataforma es mejor, hay que considerar varios factores, principalmente las necesidades que uno tiene para la aplicación a desarrollar. En el presente análisis se van exponer qué cosas fuertes y flojas tiene cada una de estas plataformas.


Ajax

Ajax (Asynchronus Javascript And XML) aprovecha la penetración y uso de Javascript en los navegadores web. El casi 100% de los navegadores tiene esta capacidad, sin importar en qué sistema operativo se esté ejecutando. La pega es que los navegadores podrían tener alguna pequeña incompatibilidad en alguna característica de Javascript (supone un porcentaje ínfimo), especialmente entre Internet Explorer y Mozilla Firefox.

El código Ajax se integra perfectamente con el código HTML y CSS de las páginas web, pudiendo, incluso incrustar otros elementos tales como películas Flash. El código no se compila, si no que el navegador lo analiza, lo interpreta y lo ejecuta. Esta característica lo puede hacer más lento que otras opciones (que veremos más adelante). Las últimas versiones de navegadores están optimizando el motor de javascript, alcanzando niveles de ejecución realmente rápidos (actualmente ganan esta carrera Opera, Chrome y Safari).

Ajax, en su esencia, puede resultar un poco artesano y arduo de programar, sobre todo si se desea cosas avanzadas en interfaces. Existen frameworks disponibles que facilitan esta tarea, tales como MooTools, Dojo, ExtJS, JQuery o Prototype. Asimismo, hay extensiones para eClipse para desarrollar en Ajax que facilitan su implantación.

A favor tiene la adopción unánime de la comunidad de Internet, lo que le erige como un estándar abierto y universal.


Adobe Flex
Adobe Flex aprovecha el parquet de implantación de Flash, con un concepto muy interesante y con un gran apoyo técnico por detrás. El plug-in de Flash está instalado en cerca de un 95% de los navegadores, y al ser un lenguaje compilado (en lugar de interpretado, como Ajax) la ejecución es mucho más rápida, optimizando más los tiempos de la CPU y del navegador.

Utiliza un lenguaje basado en tags XML, denominado MXML. Asimismo, puede incrustar código en ActionScript, el lenguaje nativo de Flash. Este lenguaje no es tan universal como Ajax, y por ello, el número de desarrolladores es mucho menor, más especializados y mejor cotizados en el mercado laboral. Detrás de Flex hay una comunidad extensa, con soporte masivo de tutoriales, blogs, foros, libros, librerías, utilidades, etc.

Adobe Flex está muy pensado al diseño, proporcionando herramientas profesionales para crear interfaces de usuario espectaculares y cuidadas, con una velocidad sorprendente. Incluye también una plataforma de comunicación con servidor muy buena, para acceso a servicios y datos remotos, donde la complejidad se reduce al mínimo y la estabilidad y velocidad se aprovechan al máximo. Esta plataforma está especialmente indicada para desarrollos multimedia, debido a sus capacidades de reproducción de vídeo, de música o de animaciones 2D y 3D, así como de la multitud de efectos visuales y de animación que posee.

Esta plataforma tiene sus detractores, entre los que se encuentran aquellos que abogan por el software libre 100%. El plug-in de Flash no está liberado todavía (está liberado el lenguaje Flex), y éste es un factor importante a la hora de confiar la ejecución de un programa en un entorno que no sabes qué hace por detrás ni que puedes modificar. El plug-in de Flash, por contra, tiene a favor que no hay incompatibilidades entre los navegadores ni entre sistemas operativos.

Otro factor a tener muy en cuenta, es que casi todos los recursos de un proyecto en Flex se compilan y se integran en un único archivo .SWF. Por un lado es bueno, porque la instalación es sencillísima, y el navegador sólo ha de cargar dicho fichero. Pero, por contra, si alguno de los recursos (como una imagen, un icono, una fuente o un archivo de audio o vídeo) se ha de actualizar, hay que volver a recompilar nuevamente el swf, y volverlo a instalar en el servidor.

Uno de los problemas que ven los adeptos a Ajax con respecto a Flex, es que toda la aplicación se carga desde el principio (fichero SWF), cargando innecesariamente la memoria del navegador y ejecutando procesos que no se requieren en ese momento. La carga inicial puede ser tediosa si la aplicación es de tamaño considerable.

Otra cosa a favor de Flex, es que también existe la tecnología AIR, que permite desarrollar las mismas aplicaciones para entornos de escritorio, con una extensión de funcionalidades que permiten fortalecer la seguridad del equipo, así como el acceso a ficheros físicos del disco duro o el uso directo de una base de datos, como SQLite (entre otras muchas características adicionales).

La tecnología Flash también permite su ejecución en dispositivos móviles, con el inmenso mercado que hay detrás.

Otro problema añadido a la tecnología Flash es que al estar todo encapsulado en un archivo SWF, y compilado, no hay elementos visibles en la página para que los buscadores puedan indexar. De cara al éxito de búsquedas, no es la mejor opción.


OpenLaszlo

OpenLaszlo lleva ya diez años en este escenario de las RIA's. A favor tiene que es software libre 100%, lo que lo convierte en un buen candidato para los puritanos. Esta plataforma tiene una dependencia importante del servidor de aplicaciones Apache Tomcat y de la máquina virtual de Java, pues se trata, principalmente, de un servlet que interpreta el código y lo compila en tiempo de ejecución para devolver al navegador un Ajax o DHTML, o un Flash.

El lenguaje está muy estudiado para que sea interpretado igual en DHTML o en Flash (sinergias entre ambas plataformas), y también, en el caso de Ajax, corrige las posibles incompatibilidades entre navegadores.

Está basado en un lenguaje de marcas XML muy sencillo de aprender, e incluso permite agregar scripts de JavaScript.

Las capacidades multimedia son muy limitadas, si bien puede reproducir algunos medios audiovisuales. También son limitadas las capacidades de interfaz (comparándolas con Flex), pero son sobradamente suficientes para cualquier aplicación de gestión.

La comunidad OpenLaszlo no es muy numerosa, y el número de recursos en la red no es tan numeroso como en las plataformas anteriores. En el sitio oficial de OpenLaszlo, se puede encontrar una buena documentación, así como otros recursos. Fuera de este sitio, es más difícil encontrar soluciones específicas.


Microsoft Silverlight

Silverlight es la apuesta de Microsoft a este nuevo mercado de oportunidades tecnológicas basadas en RIA. Llegó tarde, cuando las plataformas anteriormente citadas ya estaban consagradas.

En este periplo, Microsoft trae una interfaz rica y con capacidades multimedia, para intentar cubrir lagunas en Ajax. Su CORE está basado, precisamente, en Ajax, y con Silverlight extiende sus capacidades de forma notable, haciendo más sencilla la programación gracias también a su entorno de desarrollo Visual Studio (para mi, sin lugar a dudas, el mejor sistema de programación que existe, aunque sea propietario).

Si bien la idea es buena, y la productividad aumenta con esta tecnología, tiene por contra que los clientes han de instalarse un plug-in en su ordenador (como el de Flash), y que además de ser una tecnología que no es open source, tiene gran dependencia con otras tecnologías de la fábrica del gigante de Redmond, como el framework .NET. Asimismo, el plug-in de Silverlight sólo funciona para entornos Windows y MacOS, y que el entorno de desarrollo Visual Studio está unicamente para entornos Windows (el proyecto MONO aún no contempla esta tecnología).

Si el entorno de la apliación está basado en sistemas Microsoft, con servicios de servidor basados en .NET, Silverlight es el complemento idóneo, ya que se integra a la perfección sin problemas, además de añadir una dosis de productividad que se aprecia en las planificaciones y en la rentabilidad de los proyectos.


JavaFX

JavaFX llega bastante tarde a esta contienda, y viene con una propuesta interesante, aunque algo escasa en comparación con sus competidores, especialmente a lo que se refiere a capacidades multimedia (de momento no tiene capacidad para 3D y en cuestión de vídeos o audio está muy limitado).

JavaFX requiere de la instalación de la máquina virtual de Java, así como del módulo específico de JavaFX, en el equipo cliente (en donde está el navegador web).

El IDE de JavaFX es interesante, pues es una extensión que se ha añadido a NetBeans, el IDE de Sun Microsystems.

Las interfaces de usuario están heredadas de las vetustas y anticuadas Swing, aunque han mejorado ciertas cosas. Parece que también han retomado los anticuados Applets. En este aspecto, queda un poco humilde en relación a sus competidores.

La carga de cualquier aplicación JavaFX puede resultar desesperante. Del mismo modo que Flash, requiere que se cargue toda la aplicación al principio. En el caso de Flash es bastante rápido, y la espera no suele suponer un problema. En el caso de JavaFX recuerda mucho a la de los antiguos Applets, y es muy lenta (he probado los ejemplos de la página de JavaFX, y no se trata simplemente de unos pocos segundos).

Otra de las apuestas de JavaFX es el mercado de los dispositivos móviles, donde ya tiene bastante parte del pastel ganado, aunque no es lo mismo un framework ligero como Java ME, que un framework tan pesado como éste.

En cuanto a soporte, JavaFX está a la altura que nos tiene acostumbrados Sun Microsystems (ahora Oracle). El IDE NetBeans es bueno, hay mucha documentación y recursos documentales, así como comunidades en torno a esta tecnología.


Conclusión final

La mejor plataforma RIA dependerá de las necesidades del proyecto, y es necesario conocer las características de cada una de las plataformas que hemos visto en este artículo.

Ajax es la plataforma RIA utilizada por una amplia mayoría de desarrolladores Web. Las capacidades básicas o de serie de esta plataforma no pueden compararse con las de Flex, y los elementos de interfaz, o bien se desarrollan, o hay que buscar frameworks de terceros. Muchos desarrolladores se encuentran muy a gusto con este entorno, y puede ser utilizado desde diversos IDE, como eClipse, NetBeans, Aptana Studio, Visual Studio, etc. Los navegadores no requieren de instalaciones adicionales (Ajax se interpreta de serie), y la velocidad de su motor JavaScript es lo suficientemente rápido como para soportarlo.

Adobe Flex es mi plataforma favorita, y para mis proyectos lo utilizo por su velocidad, por su bajo consumo, por sus capacidades de interfaz, multimedia, de integración, de desarrollo y de depuración, así como tener la posibilidad de portar el desarrollo a una aplicación de escritorio mediante AIR. Sin embargo, en una aplicación pública en la que su principal activo sea la promoción y en la que sus contenidos que aparezcan en las búsquedas, desde luego, deberíamos pensar en otra plataforma.

OpenLaszlo recoge lo mejor de Ajax y AdobeFlex, y lo plasma en un lenguaje muy sencillo de aprender y de utilizar, suficiente para cualquier aplicación de gestión que no requiera de grandes dosis multimedia.

En un entorno puramente Microsoft, Silverlight es una gran opción, si bien no hay una comunidad tan amplia como la de Ajax o la de Flex, Microsoft tiene recursos suficientes como para dar soporte.

JavaFX aún está en pañales, y si la comunidad Java, que es ingente y amplia, da su voto de confianza a esta tecnología, es muy posible que las nuevas versiones puedan codearse con sus competidores.



Enlaces:

Ajax (Wikipedia): http://en.wikipedia.org/wiki/Ajax_(programming)
Adobe Flex: http://www.adobe.com/es/products/flex
OpenLaszlo: http://www.openlaszlo.org
Microsoft Silverlight: http://www.microsoft.com/SILVERLIGHT
JavaFX: http://javafx.com
Safe Creative #1001265387317

martes, 19 de enero de 2010

PHP y PostgreSQL: servicio de consultas XML

El presente artículo se centra en la creación de un servicio que retorna un XML con el resultado de consultas a bases de datos PostgreSQL. Dicho servicio puede ser invocado desde cualquier programa, como si se tratase de un servicio Web (en nuestro caso será un servicio HTTP).

El planteamiento para este servicio, es poder suministrar una serie de parámetros vía URL, para ir conformando la consulta:

- fields (obligatorio). Lista de campos de la consulta
- tables (obligatorio). Lista de tablas de la consulta
- criteria (opcional). Condiciones que ha de cumplir la consulta
- order (opcional). Campos por los que ordenar la consulta
- group (opcional). Campos por los que agrupar la consulta.
- having (opcional). En caso de haber especificado una agrupación, indica las condiciones a cumplir por dicho agrupamiento.

Internamente, el servicio creará la consulta SELECT correspondiente a partir de estos parámetros, procesando la consulta y retornando el XML correspondiente.

El formato del XML retornado, en caso de éxito sería el siguiente:

<query_result>
  <tuple>
    <nombre-campo>valor-campo</nombre-campo>
    ...
  </tuple>
  ...
</query_result>

El formato del XML retornado, en caso de error, sería el siguiente:

<query_result>
  <result>NOK</result>
  <message>mensaje-error</message>
</query_result>

El código para dicho servicio sería el siguiente:

<?php
 $pfields=$_GET["fields"];
 $ptables=$_GET["tables"];
 $pcriteria=$_GET["criteria"];
 $porder=$_GET["order"];
 $pgroup=$_GET["group"];
 $phaving=$_GET["having"];
 
 $dbhost='localhost';
 $dbport='5432';
 $dbname='trazalogic';
 $dbusr='trazalogic';
 $dbpasw='trzlgc';
 $dbcon="host=".$dbhost." port=".$dbport.
  " dbname=".$dbname." user=".$dbusr." password=".$dbpasw;
 
 $xmlresult="<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n\n";
 $xmlresult.="<query_result>\n";
 
 $con = pg_pconnect($dbcon);
 
 if (!$con) {
  $xmlresult.="<result>NOK</result>\n";
  $xmlresult.="<message>";
  $xmlresult.='Se produjo un error al intentar conectar con la base de datos';
  $xmlresult.="</message>\n";
 }
 else {
  $qry="SELECT ".$pfields." FROM ".$ptables;
  
  if (strlen($pcriteria)>0)
   $qry.=" WHERE ".$pcriteria;
  
  if (strlen($porder)>0)
   $qry.=" ORDER BY ".$porder;
  
  if (strlen($pgroup)>0) {
   $qry.=" GROUP BY ".$pgroup;
   if (strlen($phaving)>0)
   $qry.=" HAVING ".$phaving;
  }

  $result = pg_query($con, $qry);
  
  if (!$result) {
   $xmlresult.="<result>NOK</result>\n";
   $xmlresult.="<message>";
   $xmlresult.='Error al ejecutar la consulta ['.$qry.
   "] ".pg_last_error($con);
   $xmlresult.="</message>\n";  
  }
  else {
   $numfields=pg_num_fields($result);
  
   while ($tuple=pg_fetch_row($result)) {
    $xmlresult.=" <tuple>\n";
    for ($i=0;$i<$numfields;$i++) {
    $fld=pg_field_name($result, $i);
    $xmlresult.="<".$fld.">".$tuple[$i]."</".$fld.">";
     $xmlresult.="";
    }
   
    $xmlresult.=" </tuple>\n";
   }
  }
  pg_close($con);
 }
 
 $xmlresult.="</query_result>\n";
 echo $xmlresult;

?>

El servicio en acción sería como se muestra en la siguiente imagen (prestar atención a los parámetros pasados en la URL):


La principal aplicación de este sencillo servicio es poder invocar desde interfaces de usuario (como las RIA's) y pintar los resultados. Esto evitaría tener que definir un servicio por cada consulta, con el consiguiente aumento de productividad. Por contra, cualquier cambio o corrección en una consulta afectaría directamente a la interfaz (no a la capa de negocio).

Safe Creative #1001195346088

PHP y PostgreSQL: Metadatos de una consulta SQL

En la ejecución de una consulta SQL, normalmente se recorren, una a una, las filas (registros o tuplas) obtenidas, y se accede a las columnas (campos) necesarios para obtener un valor concreto. La gestión de estos accesos permiten extraer los datos necesarios para pintarlos en una interfaz, o generar una nueva masa de datos que almacenamos en una nueva tabla, en un servicio Web o en un fichero (por citar sólo algunas aplicaciones comunes).

Pero el resultado de una consulta da muchas más información, y así podemos acceder a información interna de la estructura del resultado: número de registros, número de campos, nombre de campo, tipo de datos, si es nulo, longitud del valor o tamaño del valor, entre otros. A la información de estructura comúnmente se la conoce como metadatos.

Para conocer qué funciones más comunes de PHP obtienen dicha información y cómo funcionan, lo mejor será plantear un código de ejemplo:

<html>
<head>
<title>PHP & PostgreSQL: Metatadatos</title>
</head>
<body>
<?php
  $pfields=$_GET["fields"];
  $ptables=$_GET["tables"];
  
  $dbhost='localhost';
  $dbport='5432';
  $dbname='trazalogic';
  $dbusr='trazalogic';
  $dbpasw='trzlgc';
  $dbcon="host=".$dbhost." port=".$dbport.
   " dbname=".$dbname." user=".$dbusr." password=".$dbpasw;
  
  echo "Cadena de conexion: ".$dbcon."<br>";
  
  $con = pg_pconnect($dbcon);
  
  if (!$con)
    echo 'Se produjo un error al intentar conectar con la base de datos';
  else {
    $qry="SELECT ".$pfields." FROM ".$ptables;
    echo "qry= ".$qry."<br>";

    $result = pg_query($con, $qry);
    $numfields = pg_num_fields($result);
    $reg=0;
    echo "Num filas= ".pg_num_rows($result)."<br>";
    echo "Num campos=".$numfields."<br>";
  
    while ($tuple=pg_fetch_row($result)) {
      echo "<br>Reg num: ".$reg."<br>";
      for ($i=0;$i<$numfields;$i++) {
        echo "#".$i." - ";
        echo "Nombre= ".pg_field_name($result,$i)." - ";
        echo "Valor= ".$tuple[$i]." - ";
        echo "Longitud= ".pg_fieldprtlen($result,pg_field_name($result,$i))." - ";
        echo "Tamaño= ".pg_field_size($result,$i)." - ";
        echo "Tipo= ".pg_field_type($result,$i)."<br>";
      }
      $reg++;
    }
    pg_close($con);
  }

?>
</body>
</html>

Al comenzar la ejecución de este código, las variables "pfields" y "ptables" recogen los parámetros ("fields" y "tables" respectivamente) pasados mediante la URL. Ambos parámetros formarán parte de la consulta a realizar a la base de datos.

A continuación se definen las variables (dbhost, dbport, dbname, dbusr y dbpass) para formar la cadena de conexión (dbcon) a la base de datos. Después, se realiza la conexión a la base de datos (pg_pconnect), y se almacena la misma en el objeto "con".

Una vez obtenida la conexión, se componen la sentencia SQL (variable qry) con la consulta a realizar.

El siguiente paso es ejecutar la consulta, almacenando el resultado en el objeto "result", utilizando la función pg_query. Tras ésto, se accede a diversos metadatos del resultado mediante las siguientes funciones:

- pg_num_fields: Retorna el número de campos retornados por la consulta
- pg_num_rows: Retorna el número de filas retornadas por la consulta

A continuación se recorren todas la filas mediante un bucle while, el cual recupera la siguiente fila mediante la función pg_fetch_row y la almacena en el objeto "tuple", en forma de array (cada elemento del array almacenará el valor de cada uno de los campos de la fila), y se repetirá hasta que no queden filas en el resultado (valor FALSE).

A medida que se recorre cada fila, otro bucle interno (bucle for) recorrerá uno a uno los campos de la fila actual, mostrando otros metadatos que son obtenidos por las siguientes funciones:
- pg_field_name: Nombre del campo
- pg_field_ptrlen: Longitud del valor impreso del campo (tal como se visualiza)
- pg_field_size: Tamaño del campo (tamaño interno, limitado por su tipo)
- pg_field_type Tipo de dato del campo

Una vez finalizado, se libera la conexión mediante la función pg_close.

El resultado final sería similar al siguiente:



Safe Creative #1001195345951

lunes, 18 de enero de 2010

¿Por qué no terminan de tener éxito las RIA's?

Algunos fruncirán el cejo con el título de este post, y es que el mismo puede dar lugar interpretaciones de datos y de gustos, donde se juntan en la cazuela de un debate apasionado y colectivo.

Las RIA's (Rich Internet Applications o Aplicaciones Ricas de Internet) prometen ser la siguiente revolución en cuanto a software se refiere, trayendo a la web interfaces de usuario de buen gusto y diseño, muy usables y productivas, amén de mantener una comunicación de datos entre el navegador y el servidor en la que no hay que repintar a cada actualización.

Hay propuestas muy interesantes, tales como Ajax, que es una evolución del JavaScript; Flex, que lleva la tecnología Flash a las aplicaciones de gestión, aprovechando las capacidades multimedia de esta tecnología; Silverlight, que extiende las posibilidades de Ajax; y OpenLaszlo, que facilita el desarrollo de estas tecnologías, generando finalmente la aplicación bajo tecnología Flash o bajo Ajax. Existen más propuestas, pero quizás sean éstas las más extendidas o populares.

Se puede apreciar que surgen ideas y propuestas, y rápidamente salen nuevas versiones de estas tecnologías con nuevas y espectaculares funcionalidades. Pero, ¿terminan de despegar realmente la implantación de estas tecnologías? Si interpretamos el cada vez mayor número de aplicaciones, podemos decir que sí, pero no con el crecimiento esperado como en otro tipo de tecnologías anteriores, que tuvieron una aceptación inmediata y una adopción ingente en muy poco tiempo, teniendo una curva de crecimiento bastante tenue. ¿Recelos a adoptar estas tecnologías? ¿Influye quizá la crisis actual?. La culpa la tiene, probablemente, una pequeña cantidad de cada, y ambas estén interrelacionadas.

La crisis ha recortado drásticamente el número de proyectos tecnológicos, y además está obligando al sector a rebajar al máximo las tarifas y los márgenes de beneficio, amén de concentrarse en aquellos proyectos vitales y prioritarios. Se prima ahora más la productividad que la calidad.

Las aplicaciones RIA's encarecen los proyectos, debido a que los nuevos profesionales de estas tecnologías son todavía pocos, y debido a la oportunidad de la escasez y la especialización, sus tarifas son más altas.

Aunque las RIA's añadan más detalles y posibilidades a una aplicación, añaden también tiempo de desarrollo, con el siguiente incremento de coste. Para la productividad se sigue confiando en los frameworks ya existentes (como, por ejemplo los struts) o en interfaces estándar, que sin ser tan funcionales, se despachan con mucha más presteza y a un menor coste. La "industrialización" está garantizada en las anteriores tecnologías por experiencia y rodaje, mientras que las RIA's, aunque sean su especialidad, se les imprime o demanda más artesanalidad.

Otro punto a considerar es que un desarrollador RIA, generalmente, no desarrolla la parte de negocio, o la planificación de un proyecto separa claramente a un desarrollador de front-end de uno back-end. En un desarrollo estándar, comúnmente, un desarrollador puede elaborar las dos capas simultáneamente. Esta particularidad añade dependencias, pues un desarrollador RIA necesitará tener un determinado servicio funcionando para poder desarrollar su interfaz. Cualquier demora en la capa de negocio afectará, inevitablemente, a la capa de presentación.

Por otro lado, un proyecto desarrollado con RIA, requerirá un mantenimiento posterior en la misma tecnología, lo que hipoteca tener a disposición especialistas en estas tecnologías. Como dije anteriormente, son profesionales especializados con un coste superior a un profesional de una tecnología más estandarizada, donde el valor de la escasez no existe y sus costes son muy inferiores.

Las ventajas de un aplicativo desarrollado mediante RIA's son innegables: presencia, diseño, usabilidad, funcionalidades de usuario, refresco... Yo desarrollo por mi cuenta utilizando RIA's, pero en la empresa para la que trabajo no se demanda este tipo de tecnologías, y no porque no se proponga a los clientes, si no porque en estos tiempos de crisis, las RIA's vienen a ser un pequeño lujo que pocos clientes están dispuestos a pagar, sacrificando una estética bonita a una interfaz estándar, completamente funcional que presente y capture datos, y que después sea fácil y barato de mantener.

Cuando estos tiempos se superen, las RIA's ganarán más porcentaje de adopción y más confianza en los proyectos. De momento lo mantendremos como un capricho o un pequeño lujo para las necesidades actuales, pero que indudablemente, marcarán en un futuro no muy lejano, un nivel de categoría mínimo para los desarrollos de aplicaciones.

Safe Creative #1001195345876

sábado, 16 de enero de 2010

La tecnología y la cultura libre

En los últimos años estamos viviendo una vorágine de cambios y de "guerras" en el mundo de la cultura. Estos movimientos son necesarios y positivos para avanzar y evolucionar hacia una sociedad mejor. Algo está pasando cuando ciudadanos, autores e intermediarios están en cruenta batalla sobre la gestión y el uso de las obras culturales.

La tecnología, aunque no lo crean los acérrimos defensores de los derechos de autor, es la mejor bendición que podían haber tenido, pues gracias a la tecnología las obras llegan a más gente, en menos tiempo y de forma más accesible. Este tipo de promoción no se ha conocido en la historia, y una obra desconocida hoy puede ser conocida al otro lado del planeta en cuestión de minutos.

Pero, ¿qué ocurre para que haya tanto revuelo por el uso de estas tecnologías como para que la presunción de inocencia sea ignorada, y se acuse a cualquier ciudadano de a pie como un pirata, y que el simple hecho de descargar una canción sea un delito más grave que una paliza, una violación o incluso un asesinato? ¿No nos estaremos volviendo locos?

Los derechos de autor se crearon en una época en que las circunstancias sociales y culturales demandaban un modelo de protección de las obras. Este modelo ha sido explotado con éxito durante cerca de un siglo, con las mejores intenciones. Sin embargo, la cultura se ha convertido en un negocio, y en ese mundillo han llegado oligarcas que imponen su dominio sobre los autores, especialmente a los que empiezan, en donde atan cultura y autores mediante contratos abusivos y exclusivos. Un autor puede crear una obra con pasión e inspiración, pero la obra sólo le pertenece por nombre, pues la explotación de la misma está encadenada en la prisión de la industria. El autor no tiene derecho a decidir con quién editar la obra, con quién distribuirla, cómo promocionarla o cómo venderla. Una vez terminada su obra, se convierte en un títere con imagen, al que le caen las migajas tras haber sido repartido el botín por su explotación.

Entra también en juego la guerra entre oligarcas, por la supremacía del mercado, imponiendo sus catálogos, eclipsando promesas a la sombra de sus altas ramas. Así, en la lista de tops en obras no suelen estar los mejores (digo "suelen", no digo "no están"), y a menudo nos cuelan bodrios como si fueran algo delicatessen. Al final se vende lo que quieren, a base de talón, y no lo mejor a base de méritos y de sondeos de opinión.

En este circo hay mucho intermediario que se lleva gran parte de los beneficios sólo por hacer nada, acaso un contacto o una recomendación o un telefonazo. Algo injusto, pues el trabajo de la obra la hizo un autor encerrado en la soledad de su estudio durante gran parte de su tiempo (su vida), de su talento, de su esfuerzo y, muchas veces, de su propio dinero. Del total de la obra que se pone a la venta, el autor sólo ve una ínfima parte de los royalties que le presentan (muchas veces no coinciden con la realidad). Parte del resto se lo llevan parásitos chupasangres.

Surge un medio universal de conocimiento llamado Internet, en el cual es posible compartir y llegar a todas partes obras. La difusión es incalculable, y esto es muy bueno. Para el autor es la mejor promoción que le podía ocurrir, y además gratis. Todo el mundo conoce al autor, escucha su música, lee su libro, ve su cuadro o su escultura. Mucha gente querrá asistir a un concierto, o querrá pedirle que escriba algo para él, o que le pinte algo. Es trabajo directo, donde se crea un negocio sin intermediarios. Asistimos a un medio en el que una canción en MP3, un pdf de un libro, o la foto de una pintura o de una escultura, es una tarjeta de visita para darse a conocer.

A la industria esto le parece una intromisión, y pierde la exclusividad. Ve que los autores se dan cuenta de que hay otro tipo de negocio, y en ese negocio encuentran libertad. El autor es ahora libre de decidir qué hacer con su obra, cómo, cuando y con quién. Incluso el autor mismo puede distribuir su obra asumiendo los costes. Impotente ante esta tendencia inevitable, en lugar de adaptarse a la tecnología, al movimiento cultural, a ajustar su sistema de negocio de una manera mucho más popular y beneficiosa que antes, fruncen el entrecejo y atacan sin consideración ni respeto a los ciudadanos (que también son sus clientes, no lo olvidemos) por hacer uso de esa nueva cultura, y a los autores se les hace un lavado de cerebro convenciéndoles de que es ilegal (no hay leyes, pero untando a los políticos se crean leyes dictadas por su pluma, y no por la de jueces o de senadores), y que hay que seguir abrazando el antiguo dogma. Hay que vetar esa libertad de cultura, tanto para los ciudadanos como para los autores. El negocio se pierde si no imponemos nuestra oligarquía de una forma mucho más dura e inflexible, o morir matando.

Así, de esta guisa, los ciudadanos nos convertimos en delicuentes de la peor calaña, y de paso sufragamos los chalets y palacios de los oligarcas con impuestos revolucionarios. El canon digital es prueba de ello. Tenemos que pagar un canon por comprar un CD virgen, una memoria SSD, un disco duro, un teléfono móvil... donde guardamos las fotos de nuestras vacaciones o los documentos que generamos en nuestro trabajo, o por los programas de software libre que nos descargamos. Somos piratas, no "presuntos" piratas. Y pagamos por la ineficiencia de un modelo aligarca que se erige como defensor de algo que no defiende, si no que promueve eso que no defiende para imponer acciones que los vuelve más poderosos y ricos. Dicen defender los derechos de autor, cuando lo que defienden realmente es el derecho a pernada.

Ramoncín, antiguo autor de poca y reconocida trayectoria, incluso se ha permitido registrar su apodo, a fin de que no se pronuncie su "nombre artístico" en vano, so penalización por su uso. ¿Cuándo uno puede registrar su mote o apodo en exclusividad? Ramoncines he conocido muchos, y ahora no pueden utilizar su apodo. ¿Qué Paco, Manolo, Pepe, Charo, Clemen, Santi, Rafa, Edu, Charli, Chelo, Josemi, Goyo, Javichu, Toñi, Miguelón, Candy, Tito, Tino, Moncho, Espe, Alf, Alex, Use, Yoli, Rober, Pepelu, Juanlu, Nacho... puede registrar su apodo en exclusiva? ¿Qué organismo oficial o persona ha permitido ésto, cuando ese nombre es propiedad de la humanidad y de las costumbres populares incluso mucho antes de que este señor naciera? ¿Por qué registra algo que no ha creado? Un poco hipócrita viniendo del mayor defensor de los derechos de autor, ya que ha robado la creación a la humanidad y se la apropiado sin más. Además, pone como ejemplo a Coca-Cola, como si con eso puede evitar que se utilice su nombre para críticas. Lo único que permite un nombre o marca es su uso para obtener beneficios sin permiso de su propietario, no por críticas vertidas hacia dicho nombre o marca.

Pero dejando de lado esta anécdota, está claro que la cultura libre triunfará sobre las oligarquías. Es inevitable, y el modelo de libertad ha quedado claramente como beneficioso en todas las culturas. Comenzamos por el mercado libre, cuyo modelo se ha demostrado ser beneficioso para la civilización, el desarrollo de los países y de los ciudadanos, afectando también a lo social, la cultura, los servicios, la justicia, la ciudadanía, etc. Lo mismo está ocurriendo con el software libre, precursor de la cultura libre, pues el software es también cultura, y gracias a éste la cultura crece, une pueblos, civilizaciones y favorece la competitividad, logrando, al igual que el mercado libre, mejores productos, mejores tecnologías, mejores calidades, más ventas y clientes más satisfechos.

Con la cultura ocurrirá lo mismo. Una cultura libre dará la oportunidad a cualquier autor a promover su obra, tener no sólo el derecho de autoría si no también el de explotación. Podrá tener a su disposición herramientas para vender su obra, e incluso darse a conocer para que sus clientes utilicen libremente sus servicios. Libre no significa gratis, si no libertad para ofrecer la obra para que sea usada libremente, ya sea copiada o incluso utilizada como parte de otra obra. Si una obra es utilizada para otra obra, la autoría debe quedar patente en la nueva obra. Hay licencias que imponen que las obras derivadas se promuevan en los mismos términos que las obras originales. Por ejemplo, mi libro "SPI: el demonio que me despierta mientras duermo" (en el que se incluyen algunos artículos de otros co-autores) se editó bajo Creative Commons, de forma que no se pueda vender, que se reconozca la autoría, y que se pueda utilizar para crear nuevas obras. Este libro de divulgación permite que nuevas obras utilicen mi libro como base y añadan más información o información más actualizada sobre esta enfermedad. Estas obras deben mencionar mi obra y mi autoría, y además, no puede venderse y se debe editar bajo la misma premisa que mi obra. Con ello sale ganando la sociedad entera, pues se enriquecerá el conocimiento de esta enfermedad. Si acaso algún autor no respetase esta licencia, y publicase su obra sin mencionar la mía y además cobrando, tendría todo el derecho de denunciarlo. Puede que un juez imponga una multa económica e incluso que parte de los beneficios de su obra me sean remunerados por daños y perjuicios. En mi caso, escribí el libro para la divulgación del SPI sin ningún afán recaudatorio, por lo que, por ética, donaría esta remuneración a asociaciones de pacientes de SPI.

Cualquier ciudadano puede ser autor ahora, pues tiene libertad para serlo. Concentraría su talento en crear una obra. Una vez creada tiene la libertad de decidir qué hacer con ella. Si quiere venderla, tiene también la libertad de poder contar con un representante o de contactar con una editorial para que le asesore y permita mover los hilos para que su obra se pueda vender, o bien puede crear su propia página web y promover su obra, editando parte de la misma o la obra completa. Promoviendo en lugares de difusión y publicidad, su obra es rápidamente expandida y conocida. Puede añadir valores adicionales a su obra, como, por ejemplo, vender la edición impresa de su libro en un formato especial, o grabar un reproductor de MP3 con todas sus canciones, o incluso promover sorteos para entradas a un concierto, o de regalar una camisa firmada... la imaginación del marketing no tiene límites, y por todo ello tiene el control de su venta. También tiene la libertad de decidir con qué imprenta, o con qué serigrafía, u otra empresa, poder editar el formato físico de sus ventas. Los intermediarios desaparecen, por lo que el beneficio es mayor incluso rebajando el precio de venta. Gana el ciudadano, gana el autor y ganan las empresas que colaboran con el autor.

Otra ventaja de este sistema es que todos tienen las mismas oportunidades a darse a conocer. Aquí ya no hay favoritismos por tal o cual autor, ni zancadillas a los que no pasan por el aro o están rebeldes. Hay igualdad y equidad, y la ventaja de la escasez desaparece para los oligarcas. Cualquiera en Internet puede llegar a descubrir a ese nuevo talento, y si le gusta el MP3 que se descarga, puede comprarle camisetas firmadas, o una entrada para su próximo concierto, o, si se es un productor de cine, contratar la composición de la banda sonora de una película, o componer canciones para otros cantantes (que no autores). Si le gusta el libro que se descargó de la página web del autor, puede querer comprar la edición especial impresa dedicada y firmada, o incluso contratarle para escribir una historia o un artículo.

Esa libertad de cultura se implementará en una sociedad que ya se ha beneficiado del mercado libre y que se está beneficiando del software libre. La libertad mueve más y genera más. Se crea más cultura, nacen más autores bendecidos por el sol de la libertad. Los ciudadanos se beneficiarán de una cultura accesible y económica, y de la ventaja de tener más variedad, competencia, calidad y riqueza.

¿Qué pasará con los oligarcas? Al igual que con los antiguos oligarcas del pasado que controlaban las riquezas para sólo unos pocos, a costa de los pocos pobres que generaban algo de riqueza, en detrimento de su país y de su pueblo, aplastando cualquier brote de competencia y de nuevos valores culturales; tenderán a extinguirse o a adaptarse (los que menos). Yo les recomendaría que conocieran esta nueva cultura, y que su codicia desaparezca para brindar a los autores de los medios para promover y vender sus obras CON LIBERTAD Y SIN EXCLUSIVIDAD, creando servicios opcionales que ayuden a los autores a divulgar, distribuir y vender sus creaciones. Pero no a los precios abusivos de ahora, porque bajar un MP3 por 0,99 euros es el mismo precio por canción de un CD, y en ese proceso no hay ningún intermediario, ni costes de fabricación, distribución ni logística. Han de ser precios sin usura, que puedan competir con los de otras empresas nacidas de oligarcas del pasado. Esta competencia equilibraría los precios para que tanto el autor como el ciudadano se beneficie, y se genere un mercado nuevo que entierre el modelo actual, el cual empieza a pudrirse. Aquellos oligarcas que empiecen hoy con este nuevo modelo de negocio tendrán la ventaja del posicionamiento en el mercado.

Safe Creative #1001195345869

viernes, 15 de enero de 2010

PHP y PostgreSQL

En el presente post voy a explicar cómo utilizar una base de datos PosgreSQL ( http://www.postgresql.org) en programas desarrollados con PHP, una combinación perfecta para desarrollos utilizando productos de software libre. Aunque hasta hace poco, la sinergia más común era utilizar PHP con MySQL, la compra de Sun Microsystems por Oracle cuestiona la continuidad de MySQL como un producto completamente libre o que pueda desaparecer. Otra circunstancia que apoya estas hipótesis es que los principales desarrolladores y líderes de MySQL han abandonado el proyecto y han fundado otros proyectos libres tomando como referencia MySQL, creando así un fork, como puede ser MariaDB.

La opción más aconsejable sería PostgreSQL, una poderosa y veterana base de datos, nacida hace más de quince años en la Universidad de Berkeley, California, y que está disponible para casi cualquier sistema operativo, y que puede utilizarse en multitud de lenguajes de programación. Destaca por su estabilidad, mínimo mantenmiento y velocidad. Una relación resumida de características sería la siguiente:
- Compatible con ACID
- Compatible con ANSI SQL
- Integridad referencial
- Interfaces nativas para ODBC, JDBC, .NET, C, C++, PHP, Perl, TCL, ECPG, Python y Ruby
- Definición de reglas
- Vistas
- Procedimientos almacenados
- Unicode
- Secuencias
- API abierta
- Tipos de datos extensibles

PHP ( http://www.php.net) es un lenguaje de programación muy popular en Internet, y la mayor parte de empresas de hosting del planeta lo incluye en sus servicios. Es un lenguaje muy sencillo de usar, con una sintaxis similar a la de C, y que es interpretado por el servidor para generar páginas web dinámicas y acceder a recursos de red y locales, tales como ficheros, bases de datos, servicios web, comunicaciones, etc). PHP se instala, generalmente, sobre un servidor Apache o Internet Information Server (IIS).

No voy a describir el proceso detallado de instalación de PHP y de PostgreSQL (mirar la guía de instalación de cada uno de estos productos). Simplemente, indicaré que primero hay que instalar el servidor de aplicaciones (yo recomiendo Apache). A continuación, con el servidor de aplicaciones parado, instalar PHP de forma personalizada, indicando entre las opciones, que instale la extensión para PostgreSQL. Una vez instalado PHP, instalar PostgreSQL.

Tampoco voy a describir cómo utilizar el servidor de aplicaciones, programar en PHP o administrar o gestionar bases de datos en PostgreSQL (recomiendo bajaros la aplicación PgAdmin). Voy a meterme en harina, centrándome exclusiva y concretamente en el uso de Postgre desde PHP.


Conexión a la base de datos

El primer paso a realizar es conectarse a la base de datos. Para ello tenemos el comando “pg_connect”, el cual utilizaríamos de la siguiente manera:
<?php
$dbhost='localhost'; // servidor de PostgreSQL (nombre o DNS)
$dbport='5432'; // Puerto de PostgreSQL (por defecto 5432)
$dbname='midb'; // Nombre de la base de datos
$dbusr='miusuario'; // Nombre del usuario de base de datos
$dbpasw='mipassword'; // Contraseña de base de datos

$con = pg_connect("host=".$dbhost." port=".$dbport.
"dbname=".$dbname." user=".$dbusr." password=".$dbpasw);
if (!$con)
echo 'Se produjo un error al intentar conectar con la base de datos\n';
else {
pg_close($con);
}
?>

A la función "pg_connect" se le pasa una cadena con los parámetros de conexión:
- host=servidorPostgre
- port=puertoPostgre
- dbname=nombreBaseDatos
- user=usuarioBaseDatos
- password=contraseñaBaseDatos

Esta función retorna FALSE si hay algún problema en la conexión (base de datos caída o detenida, o si alguno de los parámetros de conexión es incorrecto). Si la conexión se produjo sin problemas, retornará un objeto de conexión a base de datos, que se utilizará para las siguientes acciones. En el código anterior, si se conecta bien, cerrará la conexión mediante la función "pg_close", a la que se pasa como parámetro el objeto de la conexión abierta.

Si la aplicación va a tener concurrencia en el uso de las bases de datos, se recomienda utilizar la base de datos en modo concurrente, ya que optimiza la creación y el uso de las conexiones. Para ello, en el archivo "php.ini" han de configurarse los siguientes parámetros:
- pgsql.allow_persistent - Valor "On"
- pgsql.max_persistent - Número máximo de conexiones abiertas. -1 es infinito.
- pgsql.max_links - Número máximo de conexiones a asignar.

Para hacer uso de la persistencia, la obtención de las conexiones se realizará mediante la función "pg_pconnect", cuya sintaxis es muy similar a su homónima "pg_connect".


Obtención de datos

PostgreSQL es una base de datos basada en el estándar SQL para su gestión. Para obtener datos se utiliza la sentencia SELECT, donde se especifican los campos y las tablas de donde obtener datos. En el siguiente ejemplo se obtienen todos los datos (campos y filas) de la tabla "trzuser":

$qry = pg_query($con, "select * from trzuser");

if (!$qry)
echo 'Error al ejecutar la query';
else {
$rows = pg_num_rows($qry);
echo "Filas: ".$rows;

while($tuple=pg_fetch_row($qry)) {
echo 'userid='.$tuple[0].' - ';
echo 'username='.$tuple[1].' - ';
echo 'usernick='.$tuple[2].'- ';
echo 'userpassword='.$tuple[3].' - ';
echo 'useradmin='.$tuple[4].' --- ';
}
}

Para lanzar una consulta a la base de datos se utiliza la función "pg_query". Se pasa como parámetros el objeto de conexión a la base de datos (que previamente hemos de obtener), y la consulta SQL. Esta función retornará FALSE si hay algún error o problema, o un objeto con el resultado de la consulta en caso de éxito (en el ejemplo se almacena en $qry).

Para conocer el número de registros que retorna la consulta SELECT, se utiliza la función "pg_num_rows", a la que se le pasa como parámetros el objeto del resultado de la consulta ($qry).

Cuando se obtiene el resultado, internamente hay un puntero posicionado justo antes de la primera fila. Con la función "pg_fetch" se mueve el puntero al siguiente registro o fila, retornando ésta. Si se hubiera alcanzado el final del resultado y no hubiera más registros, retornaría FALSE.

En el ejemplo se captura la fila en el objeto $tuple (tupla), en un bucle (while) que se repita mientras este objeto no tenga el valor FALSE. El objeto que recoge la fila es un array, en donde cada elemento de la matriz contiene el valor de cada campo, en el mismo orden de columnas de la consulta. Para acceder a cada valor se utiliza la referencia [nº matriz].


Actualización de datos

La actualización de datos conlleva, comúnmente, a crear, modificar o borrar datos de las tablas de la base de datos. Estas acciones las realizan las sentencias INSERT, UPDATE y DELETE. Estas sentencias se ejecutan como consultas de actualización, y como consultas también se ejecutan mediante la función "pg_query", la cual permite ejecutar una o varias consultas de actualización. En el caso de ser varias las consultas de actualización, éstas se deben separar mediante el carácter ";" (punto y coma.

El siguiente ejemplo muestra cómo insertar un registro en nuestra tabla:

$ins = "insert into trzuser (username, usernick, ".
"userpassword, useradmin) ".
"values ('Carlos Garcia', 'cgarcia', '1234', false)";

$qry = pg_query($con, $ins);

if (!$qry)
echo 'Error al ejecutar la query: '.$ins;
else {
$affected = pg_affected_rows($qry);
echo 'Filas afectadas: '.$affected;
}

La función "pg_affected_rows permite comprobar cúantas filas han sido afectadas por la consulta de actualización.


Conclusión
Desarrollar aplicaciones mediante PHP y PostgreSQL es muy fácil y potente. Con tener básicamente conocimientos acerca de HTML, PHP y SQL, es posible desarrollar una aplicación web completa sin grandes dificultades.

También es muy interesante utilizar PHP para realizar una capa de negocio en un sistema distribuido o Web, en donde la parte cliente (front-end) pueda ser una aplicación de escritorio (.NET, Adobe AIR, Delphi, etc.) o una aplicación RIA (Adobe Flex, Ajax, OponLaszlo). Es posible interconectar estas dos capas mediante HTTPServices o mediante servicios Web.

Para más información sobre estas técnicas, te recomiendo la documentación de PHP explícitamente dedicada a usar PostgreSQL: http://es2.php.net/manual/en/book.pgsql.php

Safe Creative #1001195345852

martes, 12 de enero de 2010

El anteproyecto de Ley de Economía Sostenible es una estupidez

Leo en el blog de Enrique Dans, un interesante post, en el que comenta diez razones por las cuales la Disposición Final Primera del Anteproyecto de Ley de Economía Sostenible es una estupidez. Estas diez razones van dirigidas a la polémica desatada ante la posibilidad de de cerrar webs sin necesidad del poder judicial, o en todo caso, vía express en la que el poder judicial tiene poco que ver, y que será un juguete al servicio de los lobbys de la industria.
1. Porque la propiedad intelectual no es en modo alguno un derecho fundamental, y en ningún caso puede ser puesta por encima de éstos. Montar un enorme aparataje legislativo y judicial para intentar combatir el declive de un modelo de negocio determinado es una auténtica barbaridad.
2. Porque poner los delitos contra la propiedad intelectual por encima de muchos otros delitos infinitamente más graves es algo que no se justifica de ninguna manera.
3. Porque no se protege a los creadores, sino únicamente a la industria intermediaria de la creación cultural. Los creadores, en una economía basada en atención, pueden adoptar modelos de negocio que les permitan seguir siendo remunerados por sus creaciones.
4. Porque crear una “casta de protegidos” que pueden acudir a una “justicia express” para solucionar sus problemas supone un evidente desprecio al resto de la ciudadanía.
5. Porque la cultura española no está sufriendo por culpa de las webs de enlaces que este plan pretende supuestamente combatir. De hecho, la cultura española no está sufriendo en absoluto.
6. Porque tal y como está redactado, el articulado permite que se persiga cualquier tipo de página web, sea cual sea su contenido y función. De hecho, al retirar la responsabilidad de los derechohabientes (quien denuncia es la Comisión, y quien asume responsabilidades en caso de daños y perjuicios por tanto el Estado), éstos pasarán a “tirar con pólvora del Rey”, y el volumen de denuncias y las casuísticas recogidas en ellas se incrementarán notablemente.
7. Porque la protección existente con el ámbito legislativo actual es adecuada. Un derechohabiente que considere lesionados sus intereses puede interponer medidas cautelares que se ejecutan en un plazo muy breve, y derivar las oportunas responsabilidades en caso de que éstas existan. Que los jueces hasta el momento hayan considerado que esos casos deben ser sobreseídos o desestimados no es un “error del sistema”, sino un criterio judicial plenamente fundamentado y justificado. La medida, por tanto, supone un desprecio al criterio de los jueces.
8. Porque la Ley de Economía Sostenible no es lugar para este debate, ni lo permite. El debate sobre la protección de los derechos de autor debe vincularse con la redefinición legislativa de los derechos de autor y la propiedad intelectual para adecuarla al nuevo escenario, y debe tener su propia tramitación independiente.
9. Porque permitir que un lobby industrial introduzca artículos a su antojo en un anteproyecto de ley revela un importantísimo problema de funcionamiento democrático, y debería conllevar la correspondiente depuración de responsabilidades: ¿cómo consiguió la Coalición de Creadores “colar” esa disposición final ahí? ¿Qué miembro del Gobierno les permitió hacerlo? ¿Por qué se escuchó a ese lobby que se arroga la representación de “los creadores”, cuando existen muchos más creadores en Internet cuya voz no fue escuchada?
10. Y sobre todo, porque no va a servir para nada. Las páginas que sean cerradas reaparecerán con otros nombres, se clonarán cien mil veces, y se reubicarán constantemente. Porque esas páginas ni siquiera son necesarias para localizar contenidos para su descarga. Porque los bloqueos pueden saltarse de infinitas maneras. Y porque se está creando un incentivo para el desarrollo de una red mucho más incontrolable, que acabará generando muchos más problemas que los que hoy se pretende combatir.

lunes, 11 de enero de 2010

Cuando algo no se puede controlar

Ayer nevó en Madrid. Este es un acontecimiento que rara vez ocurre, y la de ayer, fue una de las nevadas más grandes que se recuerdan. Hoy los niños no han ido a la escuela, y el blanco paisaje anima el espíritu. Este milagro blanco enardece corazones, y muchos han salido a las calles a jugar con la nieve, o a dar un paseo para deleitarse de su textura y su frescor.

Esta mañana me he levantado pronto, como siempre. La rampa del garaje está completamente nevada, a excepción de un par de metros en el interior, donde está a cubierto, pero que, por desgracia, tiene una capa de hielo mortífera. He vaciado cinco kilos de sal seca y gruesa, pero el efecto derretidor de este mineral hace efecto muy despacio. A pesar de usar la pala, la capa de hielo persiste. Se hace imposible sacar el coche del garaje.

Aún en el caso de haberlo conseguido, median 40 kilómetros hasta la oficina. No tengo sal, ni palas ni fuerzas para despejar tan peligroso trayecto. Asimismo, mi barrio es nuevo, con muy pocos vecinos. El tráfico por mi calle es irrisorio. Sólo se ven las huellas de uno o dos coches, que no han hecho sino aplastar la nieve hasta convertirla en una apelmazada capa de hielo.

Muy cerca de mi casa pasa la carretera que sale de Arroyomolinos. Puedo ver la glorieta desde mi despacho. Anoche estaba la policía impidiendo a los coches tomar esa carretera. Hay cuatro kilómetros repletos de curvas muy peligrosas, con muchos cambios de rasante y cuestas de vértigo. Circular por ahí es muy peligroso. Esta mañana, esa carretera, la que lleva a la A5 por el Xanadú, está cortada. Ahora, en lugar de la policía, se encuentran unos conos que cortan dos de las salidas de la glorieta.

Los autobuses están muy lejos de mi casa, y la regularidad de los mismos no es buena. No estábamos preparados para ésto. El ayuntamiento no dispone de máquinas quitanieves ni de sal. ¿Cuándo ha nevado alguna vez aquí?. Si las calles son peligrosas, los autobuses no son inmunes a los accidentes. En este pueblo no tenemos ni trenes de cercanías ni metro. Sólo los autobuses pueden comunicar algunos pueblos.

Tengo suerte de tener ADSL en casa, el portátil y el teléfono de trabajo. Puedo trabajar desde casa. Acabo de mandar un correo electrónico a mis jefes comentándoles que estoy atrapado en la nieve, pero que estoy operativo online. !!! Benditas tecnologías y el concepto de oficina móvil !!!

Pero este es mi caso. ¿Y el de los demás? ¿Cuántos empleados pueden trabajar como yo? Me temo que una minoría absoluta. ¿Y qué le supone éso a una empresa, en términos económicos tangibles? ¿Y los intangibles? ¿Y para aquellos que han arriesgado y han salido con el coche, y los accidentes que seguramente hoy se han producido? Espero que no haya que lamentar pérdidas personales o daños corporales.

En el 2010 podemos estar orgullosos de poder tener los embalses y pantanos llenos, y que tendremos agua suficiente para nuestras necesidades y nuestros campos. Pero, ¿y las pérdidas que se desprenden de estas nieves? ¿Cuántos cultivos de temporada se han echado a perder, tales como el ajo o la lechuga? ¿Estamos a salvo de nuevas nevadas o heladas? Algún experto ya ha señalado que el aceite subirá escandalosamente debido a los efectos de esta nevada.

Vivimos en un mundo en que creemos controlar el destino, que todo está bajo nuestro control. Creemos, en nuestra erudita ignorancia, tener el poder de hacer que todo suceda más o menos a como habíamos planificado.

Mi reflexión es ésta: podemos hacer análisis de riesgos, prever contingencias, elaborar planificaciones precisas que contemplen infinidad de casos y escenarios, nos adelantamos a peligros conocidos y que sabemos pueden impactar o atacar nuestros planes, pero siempre obviamos lo más natural y probable, la fisura que nos hará tambalear y darnos cuenta de que somos una pluma a merced del viento, y no el Dios del viento.






viernes, 8 de enero de 2010

OpenLaszlo: Componente View

El componente View (Vista) es un componente contenedor básico que permite definir un área, dentro del cual dibujar otros componentes. El presente artículo es una introducción al uso de este componente, cuyos conceptos pueden ser utilizados en otro componente contenedores, tales como ventanas.


Ejemplo 1: View como contenedor

Para el primer ejemplo, crear el directorio "ejemploView1" en la siguiente ruta:

[directorioInstalacionOpenLaszlo]/Server/lps-4.6.1

Dentro de este directorio, crear el archivo "ejemploView1.lzx", cuyo código será el siguiente:

<canvas>
  <view x="25" y="25" width="200" height="200" bgcolor="#CCCCFF">
    <text>Texto simple</text>
    <text x="30" y="60">
      <font face="Courier" size="16" weight="bold" color="#AA0000">
      Texto formateado
      </font>
    </text>
    <button x="25" y="100">Boton</button>
  </view>
</canvas>

El contenedor principal es Canvas, que ocupa, por defecto todo el contenido del navegador. Dentro de este contenedor se creará el contenedor View, al que se le asignará un ancho y un alto de 200 píxeles, con un color de fondo azul claro (tirando a lila), y ela posición x(horizontal)=25, y(vertical)=25, partiendo de la esquina superior izquierda de su contenedor padre (Canvas).

A continuación se añade un componente Text por defecto. Este componente visualiza un texto. Si no se indica nada, el componente obtendrá, por defecto, un tipo de letra, un tamaño, un color y una posición dentro del componente View (en este caso x=0, y=0).

El siguiente componente Text se sitúa en las coordenadas x=30 y=60, y con una fuente Courier en negrita, de 16 puntos y de color rojo oscuro.

Por último, se añade un botón (componente Button) en las coordenadas x=25 y=100.

Lanzar la aplicación accediendo a la siguiente URL:

http://localhost:8080/lps-4.6.1/ejemploView1/ejemploView1.lzx

El aspecto final sería el siguiente:




Ejemplo 2: View como imagen

Para el segundo ejemplo, crear el directorio "ejemploView2" en la siguiente ruta:

[directorioInstalacionOpenLaszlo]/Server/lps-4.6.1

Dentro de este directorio, crear el archivo "ejemploView2.lzx", cuyo código será el siguiente:

<canvas>
  <view x="25" y="25" width="200" height="200" bgcolor="#CCCCFF">
    <text>Ejemplo de imagen</text>
    <view x="50" y="50" resource="rafinguer.jpg"/>
  </view>
</canvas>

En este ejemplo se ha utilizado un View dentro de otro View (contenedor dentro de otro contenedor). El último contenedor se sitúa en las coordenadas x=40 y=50 dentro de su contenedor padre. Asimismo, se indica que este contenedor será una imagen, y para ello se carga la imagen mediante el atributo "resource". La imagen, en este caso se carga de forma relativa (sin path), y para ello se aloja la imagen "rafinguer.jpg" en el mismo directorio que código.

El resultado sería el siguiente:




Ejemplo 3: View como audio

Lo aplicado en el ejemplo anterior para una imagen es aplicable también para reproducir música. El siguiente ejemplo reproduce un archivo en formato MP3:

<canvas>
  <view x="25" y="25" width="200" height="200" bgcolor="#CCCCFF">
    <text>Reproduccion de audio</text>
    <view x="50" y="50" resource="http:archivoAudio.mp3"/>
  </view>
</canvas>


Ejemplo 4: View como vídeo

El ejemplo más sencillo para reproducir vídeo sería aquel en el que éste es reproducido en un archivo de Flash en formato SWF:

<canvas>
  <view x="25" y="25" width="200" height="200" bgcolor="#CCCCFF">
    <text>Reproduccion de audio</text>
    <view x="50" y="50" resource="http:videoFlash.swf"/>
  </view>
</canvas>

Safe Creative #1001195345913

jueves, 7 de enero de 2010

Para entender las licencias software (no privativas)

Leo en Vivalinux un interesante artículo para entender qué son las licencias software y qué significan, especialmente cuando nos referimos a licencias no privativas. De esta manera podemos entender qué significa GPL, LGPL, etc.

En primer lugar, se propone en el siguiente cuadro unos iconos que explican algunas de las características individuales que puede cumplir el software:



La combinación de estos iconos configurarán unas características propias de cada tipo de licencia. El siguiente cuadro explica cada licencia y su configuración correspondiente:



Fuente: http://vivalinux.com.ar/articulos/licencias-con-iconos

lunes, 4 de enero de 2010

Software por la patilla

IZArc
Magnífico compresor/descompresor, sencillo y estable, que reconoce multitud de formatos: 7-ZIP, A, ACE, ARC, ARJ, B64, BH, BIN, BZ2, BZA, C2D, CAB, CDI, CPIO, DEB, ENC, GCA, GZ, GZA, HA, IMG, ISO, JAR, LHA, LIB, LZH, MDF, MBF, MIM, NRG, PAK, PDI, PK3, RAR, RPM, TAR, TAZ, TBZ, TGZ, TZ, UUE, WAR, XXE, YZ1, Z, ZIP, ZOO. También abre y convierte imágenes de CD (ISO, BIN, CDI y NRG). Permite configurar el uso de un antivirus para chequeo de los archivos a comprimir/descomprimir. Para Windows.


XMPlay
Excelente reproductor multimedia que reconoce una gran multitud de formatos. Para Windows, Linux y Mac.


Imagination
Sorprendente, sencilla e intuitiva aplicación para crear tus propios DVDs a partir de unas fotografías y música, pudiendo añadir zooms y 69 efectos de transición. Para Linux.


Muvee Reveal
Increíble aplicación que te permite crear tus propias películas a partir de archivos de vídeo, fotografía y música. Para Windows.

XMind
Increíble aplicación para generar mapas mentales que ayudan a organizar el conocimiento o las tareas. Permite múltiples vistas por cada nodo, es muy configurable en formatos, muy completo en cuanto a opciones y dispone de la posibilidad de compartir mapas vía web. Para Windows, Linux y Mac.


IcoFX
Magnífico programa para crear y editar tus propios iconos. Para Windows.

Jing
Utilidad que permite capturar partes de tu pantalla (en imagen), e incluso grabar en vídeo lo que ocurre en ésta (screencast), y añadir elementos como texto, flechas, resaltar, etc. El resultado se puede guardar en local o subirlo a internet (screencast.com) para compartirlo, y obtener el código para incrustarlo en tu página o en tu blog. Para Windows.

Vitamin D
Una curiosidad muy práctica. Se trata de convertir tu webcam en un sistema de vigilancia, que permite detectar movimiento de objetos, objetos de un tamaño determinado y/o en una zona de pantalla determinados, grabar y avisar mediante email. Para Windows.

Karos
Increíble juego de rol online que te asegurará horas y horas de diversión. Para Windows.

Ladrones de tiempo

Comenzamos 2010, un año nuevo con nuevas oportunidades en mitad de una agónica crisis que nos azota desde hace 2 años, y de la cual parece que no se ve la luz al final del túnel. El 2009 ha sido un año difícil en todos los sentidos, y la preocupación por el trabajo ocupa el primer lugar.

He cerrado el 2009 haciendo balance y reflexionando sobre cómo puedo afrontar el 2010 de manera más productiva y positiva. Uno de los factores más importantes es el tiempo, pues tiempo somos y cada vez menos. Y es que la tecnología, por muy atractiva y aparentemente útil, muy a menudo se convierte en un ladrón de tiempo importante, y aquí es donde hay que reflexionar seriamente en qué invertir los momentos de que se componen nuestras vidas.

Voy a daros mi top 10 (personal) en ladrones de tiempo, los cuales me dejan agotado y que no me aportan nada realmente útil en mi vida (o por lo menos, en el balance es lo menos importante):
1) Twitter. Apenas tengo tres seguidores (gracias, mamá, esposa y hermano), y la mayor de las veces publico alguna cita, pero nada que revierta en mi beneficio. Sigo sin verle la utilidad, a no ser que sea un medio como un RSS de noticias de una empresa. No soy interesante para los demás, y de momento Twitter no es interesante para mi.
2) Facebook. A pesar de tener casi 200 "amigos", a la mayoría no los conozco en persona, y realmente me quita mucho tiempo ver qué hacen los demás (nunca he sido cotilla, pero últimamente, si no te preocupas en cómo van los demás pareces un egoísta egocéntrico), navegar en sugerencias y en publicidades. No me aporta nada productivo. Mandaré un mensaje a todos mis amigos verdaderos, instándoles a comunicarse conmigo vía email.
3) Blogs. De los cuatro blogs que tengo, solamente éste me permite manifestar mi pasión por la tecnología, y además es un escaparate de mi personalidad y mis conocimientos.
4) Suscripciones. La mayor parte de las suscripciones no me aportan nada ahora, y me quitan un tiempo valioso. Revisaré mis suscripciones y dejaré únicamente aquellas que me merezcan la pena.
5) Boletines. Lo mismo que las suscripciones.
6) Mensajería. No tengo instalada ninguna aplicación de mensajería, pero es inevitable que desde Facebook, Gmail o Yahoo, aparezcan ventanitas de amigos que no tienen nada mejor qué hacer que charlar sobre nada, en lugar de sobre temas de trabajo, consultas técnicas o sobre organizar algún encuentro físico y real. Pondré mi estado en permanente "Ocupado".
7) Cuentas Email. Tengo tropecientas cuentas de correo. Revisaré todas, dejando solamente las más habituales (2 ó 3).
8) Correos "chorra". Son divertidos, pero roban tiempo. Según lleguen, a la papelera. En cuanto a mí, lo siento, no enviaré ni reenviaré nada curioso ni divertido. No quiero perder tiempo ni hacérselo perder a los demás.
9) Teléfono. Parece inevitable tener que llamar a todo el mundo. Reservaré sólo las llamadas urgentes y necesarias. Por de pronto, no he felicitado vía teléfono a nadie estas navidades ni en Nochevieja. Paso de hacer muchimillonario al presidente de Telefónica, cuando puedo al día siguiente ir a comer a casa de algún familiar y felicitar las fiestas en persona, o felicitar mediante email (que es gratuito) a los que no puedo ver en persona.
10) Descargas. No tiene sentido descargar material si luego no tienes tiempo para usarlo. En mi caso yo no descargo películas, ya que de siempre odié la televisión ni tengo tiempo para ello (siempre me levanto y me acuesto con un libro). Yo descargo y pruebo programas, casi siempre libres y gratuitos. O música Copyleft. De ahora en adelante, dejaré de ocupar mi tiempo en estos menesteres, y así ahorraré también espacio en disco.

¿Cuáles son tus ladrones de tiempo tecnológicos?