Cajón Desastre

Entorno de Desarrollo Web en GNU/Linux

El siguiente enlace lleva a un artículo que describe herramientas bajo el SO GNU/Linux para el desarrollo en entorno Web [Inglés].

Python/Django

Para saber donde se encuentra site-packages ejecutar la siguiente linea:
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

Librerias PDF

Para hacer informes en PDF existen varias librerias, a continuación se clasifican según el lenguaje de programación empleado:

Java

PHP

NetBeans

ERROR: access denied for user root@localhost
A falta de detalles técnicos que ilustren mejor la manera en que NetBeans implementa la persistencia, simplemente comentar un problema con la que me encontré el otro día mientras me iniciaba en el mundo de Java con NetBeans.

Siguiendo el tutorial «Creating a Custom Java Desktop Database Application«, por muchas configuraciones distintas que probaba el driver JDBC para la conexión con la base de datos MySQL, incluso cambiando la contraseña de administrador del servidor MySQL, siempre obtenía el error:

Internal Exception: java.sql.SQLException: Access  denied for user  ‘root’@’localhost’ (using password: YES)

Sin embargo desde consola si que podía entrar perfectamente al servidor MySQL.

NetBeans crea un archivo XML llamado persistence.xml donde se indica toda la información de conexión a la base de datos. Este archivo se puede encontrar dentro del paquete META-INF del proyecto. Quizá por un BUG de NetBeans, el caso es que no se actualizaban los valores que indicaba en el driver, sino que se quedaban fijos los datos de conexion user=root, password=

Editando este archivo y poniendo los valores correctos para la conexión a la base de datos, se solucionó el problema.

Añadir directorios de clases en NetBeans
Para añadir un directorio de clases propias, se pueden seguir dos caminos:

1) Declarar tu propia librería de clases en NetBeans, y decirle a tu proyecto que la utilice.

Puedes definir una librería en Tools -> Libraries -> New Library. Para utilizarla, en el nodo Libraries de tu
proyecto das click derecho y seleccionas «Add Library».

2) Añadir el directorio de clases

En la pestaña Projects hacer clic derecho sobre Libraries…
MI_PROYECTO > Libraries *(clic derecho)* -> Add JAR/Folder…
y agregar el path de tus clases

Hacks CSS

Para eliminar el borde de un link que activa algún elemento de la misma página:

a { outline: none; }

Internalización PHP + Smarty

Visión General

Este documento describe una solución para permitir desarrollar aplicaciones multilenguaje con soporte para Smarty.

Dicha solución se basa en la clase IntSmarty, que se trata de una extensión del motor de plantillas Smarty. Toda la información que aquí se comenta ha sido extraída del artículo Internalize your website with IntSmarty and Smarty.

Se supone conocimientos previos de Smarty, HTML y PHP, así como que se dispone de una configuración de Smarty que funciona correctamente de modo que la clase IntSmarty pueda incluirse sin problemas en la aplicación.

Funcionamiento

Preparación de los archivos de traducción

La idea es identificar en la plantilla entre las marcas {l} {/l} las cadenas que se desean traducir. Ayudándonos del script grep_lang.php,

<?php
/* grep_lang.php
Generate localization for IntSmarty
*/
$file = 'templates/' . $_GET['file']; // Modificar la ruta donde se encuentra la plantilla si es necesario
$fp = fopen($file, 'r');
$content = fread($fp, filesize($file));
$regex = '!{l}(.*?){/l}!s';
preg_match_all($regex, $content, $matches);
foreach($matches[1] as $m) {
echo '$__LANG[\'' . md5($m) . '\'] = \'' . $m . '\';<br>';
}
?>

se parsea el siguiente archivo

<html>
<head>
<title>Internationalization Smarty</title>
</head>
<body>
{l}Hello{/l} Guest<br>
{l}Welcome to my tutorial{/l}<br>
{l}Tutorial for Internationalization your PHP with IntSmarty{/l}
</body>
</html>

cuyo resultado servirá de base para la creación de los respectivos archivos de idioma. La plantilla se debe pasar al script grep_lang.php con el parametro file=. Como resultado se muestra en pantalla lista de todas las cadenas de la plantilla entre las marcas {l} y {/l} en el idioma que esté la plantilla, pudiendose editar posteriormente para crear el fichero de traducción correspondiente.

Un ejemplo de un archivo de idioma generado mediante la ayuda de este script podría ser el siguiente, que debe ser guardado en el PATH correspondiente al directorio donde se almacenaran los diferentes archivos de traducciones. Este PATH puede ser definido por el usuario, como veremos a continuación.

$__LANG['8b1a9953c4611296a827abf8c47804d7'] = 'Hello';
$__LANG['628dd18721ddcaa880f8e46f9a3fa2ac'] = 'Welcome to my tutorial';
$__LANG['76779fb3d56344c10128e90225823a30'] = 'Tutorial for Internationalization your PHP with IntSmarty';

Uso de IntSmarty

El archivo base PHP deberá incluir la clase IntSmarty y especificar el PATH donde se guardaran los archivos de traducción.

Para especificar el PATH donde se guardaran los archivos de idioma, extendemos la clase IntSmarty donde se indicará el PATH de los archivos de idiomas así como la estructura de archivos necesaria para el sistema de plantillas Smarty.


Class Translate extends IntSmarty {
var $lang_path = 'lang/'; //include trailing slash
function Translate($lang = null) {
$this->Smarty();
$this->template_dir = 'templates/';
$this->compile_dir = 'templates_c/';
$this->config_dir = 'configs/';
$this->cache_dir = 'cache/';
parent::IntSmarty($lang);
}
}

Una vez hecho ésto sólo hay que instanciar la clase Translate, que como puede verse en el código no es más que una extensión de su clase base IntSmarty, pasando como argumento el idioma en el que se desea mostrar la página y llamar a la función display de Smarty con su correspondiente plantilla como argumento.

$IntSmarty = new Translate($lang);
$IntSmarty->display(‘int_smarty.html’);

Hay que considerar que los ficheros PHP de idioma deberán llamarse {$lang}.php. Así, por ejemplo si para identificar el idioma Catalán utilizamos el valor ‘cat’, el fichero de idioma correspondiente deberá llamarse cat.php y encontrarse en el PATH de idiomas que se ha definido.

int_smarty.html es el nombre de la plantilla que se encuentra bajo el directorio templates/ y que contiene las marcas de traducción {l} {/l} que se ha comentado al principio del documento.

Internationalization Smarty

{l}Choose your language{/l}: ES ||EN || CAT


{l}Hello{/l} {$name}

{l}Welcome to my tutorial{/l}

{l}Tutorial for Internationalization your PHP with IntSmarty{/l}

Por hacer (TO-DO)

Para montar un sistema multilenguaje fácil de mantener, sería conveniente desarrollar una pequeña aplicación que con la ayuda del script grep_lang.php muestre todas las frases a traducir y permita especificar el idioma que se desea crear y lo guarde con el nombre correspondiente en el directorio de idiomas especificado.