Archive for the ‘PHP’ Category

Screencast – Soporte para Symfony en NB

Tuesday, November 3rd, 2009

Por todos lados habran leido que Netbeans traerá soporte para Netbeans en su próxima versión, bueno, la gente del equipo de desarrollo de NB realizó un screencast para demostrar su nueva Feature. Sin mas rodeos los dejos con lo prometido.

  • Share/Bookmark

Ponencia Juti 2009

Saturday, September 5th, 2009
Juti 2009

Juti 2009

A pedido de varios que asistieron a mi ponencia en la Juti 2009, les dejo para que descarguen las diapositivas de mi presentación de Symfony.

Espero que la charla alla sido de su agrado y puedan llegar a experimentar con esta excelente herramienta que cada día me sorprende mas.

Enlace de Descarga : Diapositivas de la charla en la Juti 2009

  • Share/Bookmark

Symfony 1.2.2

Saturday, January 10th, 2009

En un solo día de trabajo, la gente del proyecto Symfony arreglaron más de 40 bugs hallados en la versión 1.2.1. Los errores corregidos estaban relacionados principalmente con la generación de la parte de administración y la interacción con doctrine.

Como siempre, para actualizar tu versión de Symfony:

  • Si usas el sandbox, te lo tienes que bajar otra vez.
  • Si lo has instalado mediante PEAR, ejecuta el comando pear upgrade symfony/symfony-1.2.2
  • Si lo instalas mediante Subversion, ejecuta el comando svn checkout http://svn.symfony-project.com/tags/RELEASE_1_2_2/ .

Independientemente de cómo lo actualices, no olvides borrar la caché de cada proyecto después de la actualización y volver a generar los formularios y las clases del modelo.

Si utilizas Doctrine como ORM:

$ php symfony doctrine:build-model
$ php symfony doctrine:build-forms
$ php symfony doctrine:build-filters
$ php symfony cache:clear

Si utilizas Propel como ORM:

$ php symfony propel:build-model
$ php symfony propel:build-forms
$ php symfony propel:build-filters
$ php symfony cache:clear

Fuente:

http://www.symfony-project.org/blog/2009/01/08/symfony-1-2-2-doctrine-service-release

http://www.symfony.es/2009/01/10/se-publica-symfony-122/

  • Share/Bookmark

Editor WYSIWYG para SPIP

Saturday, November 29th, 2008

Hace unos días me recomendaron un producto llamado SPIP, este es como un CMS pero especifico para sitios de publicación de artículos como por ejemplo diarios digitales, es un producto bastante práctico y sencillo tanto de utilizar como de customizar, lo malo es que los desarrolladores son franceses y tanto el código como la documentación esta en francés (en momentos como este ves lo bueno que es desarrollar en la lengua madre, el ingles), pero existe suficiente documentación traducida.

Trabajando con el producto lo primero que vi desagradable fue su pobre editor para redactar los artículos, así que inmediatamente busque algún Rich Text Editor (Editor de Texto Enrriquecido) o WYSIWYG. Encontré varias alternativas alguna de ellas muy buenas, como por ejemplo FCKEditor, pero al final me quede con un editor llamado Xinha. La decisión de por que lo elegí fue sencilla, probé copiar artículos redactados en Open Office y pegarlos en el editor para ver como salían, grata fue mi sorpresa en el momento que quedaban iguales, salvo por los objetos embebidos como imágenes, para mi gusto fue mas que suficiente.

La instalación es muy sencilla, lo primero es descargarse un parche para SPIP que modifica ciertos archivos para incluir el editor en la sección de edición de artículos, solo para versiones 1.9 o superiores. Puede obtenerse el editor de esta dirección:

http://www.clubinfops.org/cours/spip_patch.zip

Una vez descargado el parche solo resta descomprimirlo y copiarlo en el directorio raíz de SPIP, eso sobreescribirá un par de archivos, al finalizar el editor quedará listo para utilizarse. Quedaría en el tintero personalizar la configuración del editor, para ello se debe entrar a los directorios ecrire/xinha/plugins/ExtendedFileManager/ y ecrire/xinha/plugins/ImageManager, en estos buscar el archivo config.inc.php y como minimo editar los paths de los directorios para subir los archivos e imágenes ($IMConfig['images_dir']).

  • Share/Bookmark

Esquinas Redondeadas en HTML

Thursday, November 6th, 2008

Quien no recibió alguna vez un diseño web realizado por un diseñador gráfico, esclavo de Fireworks, Adobe ILustrator, Flash y Photoshop, en el cual había animaciones, sombras, esquinas redondeadas por doquier y cosas super extrañas como esas. Díganme si no les dan ganas de cortarse las pelotas de una al ver una cosa así.

Buscando la forma mas práctica y estándar para hacer esquinas redondeadas me tope con una herramienta muy práctica, se llama Nifty Corners, básicamente es un JavaScript que al cargar el documento en el browser del cliente aplica un css especial que provoca que los divs elegidos redondeen las esquinas.

Como se hace, fácil, muy fácil, vean lo documentación y pruebenlo.

Les cuento que es fundamental indicar el tipo de selector CSS que es, para el caso de id es “#” y en el caso que sea un selector de clase deben indicar el “.”, en función este tipo el JavaScript sabe si debe aplicar a varios bloques o a solo un bloque. Tambien es fundamental poner el JavaScript en la ubicación correcta y junto con el la CSS, caso contrario no les va a funcionar como debería. El script se encarga de incluir su css automáticamente.

Pueden ver un ejemplo sencillo aquí.

No dejen de revisar su documentación, esta provee mucha info sobre diferentes variantes de uso.

  • Share/Bookmark

Problemas con EasyEclipse en Debian

Monday, October 13th, 2008


Tratando de encontrar una IDE agradable para PHP me tope con EasyEclipse, una distro de Eclipse totalmente lista para utilizar con lenguajes de scripting como PHP, Python y Ruby.
La cosa es que cuanto pretendía arrancarla misteriosamente se colgaba arrojando un error como este.

easyeclipse-lamp-1.2.2.2/./jre/bin/java: symbol lookup error: /home/agustin/Desktop/easyeclipse-lamp-1.2.2.2/configuration/org.eclipse.osgi/bundles/171/1/.cp/libswt-mozilla-gtk-3236.so: undefined symbol: _ZN4nsID5ParseEPKc

Aparentemente el error surge en Debian, dado que este entorno depende de Firefox y como en Debian solo tenemos Iceweasel por defecto y los paths están cambiados de lugar, la ide no puede encontrar correctamente las librerías que necesita.

La solución, es exportar la variable que define el home de firefox, MOZILLA_FIVE_HOME, de la siguiente manera.

export MOZILLA_FIVE_HOME=’/usr/lib/iceweasel/’

Con esto deberíamos haber solucionado ese problema.

  • Share/Bookmark

Mejorando código

Friday, September 19th, 2008

Hoy me puse a ver unos fuentes en un sistema importante que estoy auditando y me encuentro con cositas muy graciosas como por ejemplo esta (alteré un poco el código por razones obvias pero les prometo que no lo empeore, así estaba cuando llegue).

Bueno, los que saben algo ya estarán diciendo WTF, para aquellos que no saben tanto alguno de los problemas aquí son los siguiente:

1 – Código repetitivo para hacer exactamente los mismo
2 – Inclusión de los datos de la conexión múltiples veces, con una vez al principio alcanza
3 – Conexiones repetitivas a la base, eso consume recursos en el servidor y hace más lenta la respuesta de la página.
4 – Código feo y difícil de entender, muy acoplado y poco amigable a los cambios

Podría nombrar mas problemas pero dejemoslo ahí, creo que se entiende lo que estaba mal. Por que pasa esto, calculo que

1- Falta de experiencia
2- No leer los manuales
3- No Releer los manuales
4- Copypastear de internet código sin entender que coño hace
5- No hacer chocar las neuronas en la cabeza con el fin hacer las cosas más fácil para uno mismo

Como quedaría un poco mas lindo y entendible este código, bueno esta es una alternativa.

Si si, eso hace lo mismo…. , y lo único que hice fue agregar un bucle que se aprende en la segunda clase de cualquier curso de programación :S, no se necesita ser un gurú para saber eso, si alguien dice “yo se programar” debería como mínimo saber eso.

Es una lástima que los dueños de los sistemas, por ende los que contratan el servicio, no puedan entender esto y darse cuenta del valor de un buen programador y el de uno malo (y esto no esta vinculado al factor dinero, es decir el bueno cobra mas y el malo menos, no no, esto no necesariamente es así) lamentablemente esto es una selva muchachos, salgan con el cuchillo entre los dientes y que se salve quien pueda.

  • Share/Bookmark

Dos de Symfony por una peso

Tuesday, May 6th, 2008


Tengo preparado dos tips para los usuarios de symfony, espero que les sea de ayuda en sus de desarrollos con esta excelente herramienta.

El primero es para Exportar una consulta a una planilla excel. Para ello deben crear un método en module/modulename/actions/action.php del modulo al cual pretenden realizar la consulta, en este caso a la acción la llame executeExcel y el modulo se llama autorizaciones.

En la acción lo primero que hago es recuperara los filtros que selecciono el usuario en la vista de lista del modulo autorización (Se supone que los resultados de dicha vista son los que se desean exportar).
Luego Realizamos la consulta y al traer los registros lo procesamos uno por uno de tal manera que queden en una sola variable string, cada campo separado por una como y al final un retorno de carro, esto con el fin de que quede un archivo del tipo CSV (Comma Separated Values), formato que excel entiende a la perfección para importar. Dicha variable la vamos guardando en un archivo temporal el cual posteriormente sera enviado al cliente para que lo descargue.
Por último debemos redireccionar la vista a NONE con el fin de que no se envie ninguna información después de descargar el archivo.

El código completo es el siguiente.
public function executeExcel() {
//Recuperamos los Filtros

$this->processSort();
$this->processFilters();
$this->filters = $this->getUser()->getAttributeHolder()->getAll(’sf_admin/autorizaciones/filters’);

//Hacemos la Consulta
$c = new Criteria();
$this->addSortCriteria($c);
$this->addFiltersCriteria($c);

$autorizaciones = AutorizacionesPeer::doSelect($c);

//Creamos el archivo temporal de exportación
$file = “autorizaciones-exporta.csv”;

$fh = fopen($file,”w+”) or die (”unable to open file”);

//Cabecera – Cambienla por sus necesidades
$row = “\”Codigo\”,”;
$row .= “\”Sucursal\”,”;
$row .= “\”Vendedor\”,”;
$row .= “\”Motivo\”,”;
$row .= “\”Comentario\”,”; $row .= “\”Autorizado por\”,”;
$row .= “\”Deteriorado\”,”;
$row .= “\”Cod. Articulo\”\n”;

fwrite($fh,$row);

//Procesamos cada línea

foreach($autorizaciones as $aut){
$row = “\”".$aut->getCodigo().”\”,”;

$row .= “\”".$this->getSucursalName($aut->getIdSucursal()).”\”,”;
$row .= “\”".$this->getVendedorName($aut->getIdVendedor()).”\”,”;
$row .= “\”".$this->getMotivoName($aut->getIdMotivo()).”\”,”;

$row .= “\”".$aut->getComentario().”\”,”;
$row .= “\”".$aut->getUsuario().”\”,”;

$row .= “\”".$aut->getDeteriorado().”\”";
$row .= “\”".$aut->getCodArticulo().”\”\n”;
fwrite($fh,$row);
}
fclose($fh);

//Enviamos la cabecera HTML para que ejecute la descarga y el browser lo identifique
// como un elemento Excel


header(”Content-Type: application/vnd.ms-excel”);

header(”Content-Type: application/force-download”);

header(”Content-Transfer-Encoding: binary”);

header(”Content-Disposition: attachment;filename=”.$file );

header(”Content-Length: “.filesize($file));

header(”Pragma: no-cache”);

header(”Expires: 0″);
readfile($file);

//Tiramos la vista a NONE

return sfView::NONE;

}

La sugunda cosa que tengo para contarles es sobre la internacionalización de las aplicaciones con symfony. Para pasar al español los elementos generádos con CRUD deben configurar apropiadamente los archivos

apps/nombrapp/config/settings.yml

Poner la variable i18n en on, sobre la sección all, de tal manera que se aplique a todos los entornos del proyecto.

i18n: on

Tambien el archivo

apps/nombrapp/config/i18n.yml

En el cual se define la cultura, y el formato de definición del archivo

all:
default_culture: es
source: XLIFF
debug: off
cache: on
untranslated_prefix: “[T]“
untranslated_suffix: “[/T]“

El último paso es crear el archivo messages..xml en el directorio app/miappname/i18n/.

Dicho archivo debe parecerce a este:


http://alba.pressenter.com.ar/cgi-bin/trac.cgi/browser/trunk/alba/apps/principal/i18n/messages.es.xml

Una vez que terminan lo guardan y al entrar al site deberían ver todo en el idioma seleccionado, en el ejemplo español.

  • Share/Bookmark