Sigueme en Twitter

Archivo de artículos en la categoría "Tips"

Ir al inicio

Helpers dentro de controllers en CakePHP

9/08/2007

Esto es cochino, sucio y hay 99% de posibilidad de que si necesitas hacer esto, estes en un error de conceptos y lo que intentes hacer se pueda hacer mejor de otra forma.

Los Helpers fueron pensados para ser usados dentro de las Vistas. Punto.

Aún asi no deja de ser interesante el saber como utilizarlos dentro de un Controller, quien sabe, talvez algún día te saque de algún apuro.

1
2
3
4
5
6
7
class UsersController extends AppController {
    function index() {
        loadHelper('Html');
        $html = new HtmlHelper();
        debug($html->link('Un buen link', 'http://cakephp.org'));
    }
}

Vía | CakeBaker

6 Comentarios

VLC y sus pantallas negras en Compiz Fusion

3/08/2007

Cuando usaba Beryl, justo antes de fusionarse con Compiz para dar paso a Compiz Fusion, me sucedia que cada vez que veia un video en VLC, este solo mostraba una pantalla negra,

Esto lo podia solucionar facilmente con el Beryl Manager, al desactivar Beryl mientras no estaba viendo algo, nunca me pregunte porque era, ni me importo ya que no suelo ver muchas cosas en la computadora.

Como ahora el Compiz Fusion no trae este administrador, me obligo a gastar 10 segundos de mi tiempo en una busqueda de google, para solucionar ese probema solo hay que activar la salida de video en VLC como X11 en lugar de la opcion de default.. duh.

Preferences -> Video -> Output Modules : X11

VLC y Compiz Fusion

4 Comentarios

Convirtiendo rapidamente PNG a JPEG

1/08/2007

Algo que utilizo mucho en Compiz Fusion, es el plugin de screenshots, que te permite tomar capturas de pantalla de zonas seleccionadas, el screenshot resultante es un PNG de muy buena calidad, lo que trae un problema cuando publicas muchas de esas imágenes para web, el tamaño es excesivo.

Hay varias maneras de darle la vuelta, como abrirlo con Gimp para cambiarlo de formato o usar el comando convert de ImageMagick. Realmente tratar de comprimirlo dejandolo en formato PNG, no tiene mucho sentido, ya que el formato no es bueno para eso y no se comprime suficientemente bien con ninguna utileria.

Como es una lata abrir Gimp o la consola una y otra vez, asi que decidi utilizar el comando convert pero desde el menu de clic derecho en Gnome en 3 simples pasos:

Paso 1: Crea un ‘wrapper’

Crea un archivo llamado convert2jpeg.sh (o como te plazca) con esta linea:

convert -compress JPEG -quality 85 $1 ${1%.png}.jpg

Lo unico que hace es convertir a JPEG, el archivo .png que le pases, como salida te da el mismo nombre del archivo pero con extension .jpg

Paso 2: Haz que sea un comando global

Hazlo ejecutable y crea un link hacia /usr/local/bin/ para que se pueda ejecutar en cualquier lado, en mi caso:

$ chmod +x convert2jpeg.sh
$ sudo sudo ln -s /home/pablasso/development/bash/convert2jpeg.sh /usr/local/bin/convert2jpeg

Paso 3: Activalo desde el clic derecho

En Gnome, al seleccionar una imágen con clic derecho, entra al menu

Open With -> Open with another application

convert2jpeg

En “Use a custom command”, escribes el comando que acabas de crear, convert2jpeg. Ahora siempre tendras ese comando disponible desde el menu “Open With”, para comprimir tus imágenes en 1 segundo.

No es cosa del otro mundo, pero ahorra tiempo y bytes.

7 Comentarios

Depura tus Hojas de Estilo

25/07/2007

Mike ha sacado un servicio bastante útil, cuantas veces no nos pasa que estamos modificando una hoja de estilos mientras desarrollas un diseño y al ir cambiando tus puntos de vista muchas quedan sobrando.

CSS Redundancy Checker

CSS Redundancy Checker sirve precisamente para detectar cuales son los estilos que tenemos de sobra, solo pasale la dirección de tu hoja de estilo, la dirección de la página que quieres checar y listo.

Un punto a tomar en cuenta, es que no detecta los estilos que asignas con javascript, lo cual es muy común en estos dias de ajaxmanía, asi que ten cuidado al borrar un estilo que si puedas estar utilizando.

Un link mas para delicio.us obligado.

Sin Comentarios

Una de VirtualBox y Apt

1/06/2007

Algo que me traia loco con el Ubuntu de la PC (ya lo mate por cierto.. usare OpenSuSE un tiempo para probar) fue el paquete de VirtualBox y sus problemas con las dependencias de modulos del kernel.

El asunto es que me corrompia el administrador de paquetes cuando no encontraba un modulo de kernel apropiado, y no podia bajar el dichoso kernel apropiado porque el administrador de paquetes estaba bloqueado, haciendo un loop demoniaco.

dpkg E: The package virtualbox needs to be reinstalled, but I can’t find an archive for it.

La solución fue primero borrar toda info relacionada de virtualbox en dpkg

sudo rm -r /var/lib/dpkg/info/virtualbox.*

Y despúes ya se puede remover el paquete de virtualbox sin que nos este molestando por sus dependencias que el mismo no nos deja instalar.

sudo dpkg –remove –force-remove-reinstreq virtualbox

Otro punto a favor de VMWare

3 Comentarios

Templates en Django

29/05/2007

Si alguna vez haz utilizado Smarty en PHP entenderás facilmente como va el sistema de templates en Django, tal como en Smarty, su objetivo es no mezclar la lógica de programación con el diseño.

Su poder se basa en el principio de la herencia, todo esta definido en base a un diseño de base ‘padre’.. a menos que un diseño ‘hijo’ diga lo contrario.

Como siempre un ejemplo vale mas que cualquier verbo:

Este es un archivo en HTML que tomamos como ejemplo.. un head, un body, nada especial.

1
2
3
4
5
6
7
8
9
<html>
<head>
    <title>Este es el titulo de mi pagina</title>
</head>
<body>
    <h1>Un granjero tenia un perro</h1>
    <p>Se llamaba bingoooooo ... </p>
</body>
</html>

Como vamos a repetir esta página en muchos lados, nos conviene etiquetar cada parte que sera repetida considerablemente en bloques, mas especificamente; en title, content y footer.

A este le llamaremos archivo ‘base.html’.

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
    <title>{% block title %}Este es el titulo de mi pagina{% endblock %}</title>
</head>
<body>
    <h1>Un granjero tenia un perro</h1>
    {% block content %}<p>Se llamaba bingoooooo ... </p>{% endblock %}
    {% block footer %}
    <p>Gracias por visitarme<p>
    {% endblock %}
</body>
</html>

Ya teniendo la base definida, solo tenemos que preocuparnos por el contenido especial en cada página diferente, ya que el sistema de heredación elimina toda redundancia, y cada nuevo template contiene código que sea solo unico para el mismo.

Para ilustrarme mejor, esta es una página que solo necesito cambiar el titulo.

1
2
{% extends 'base.html' %}
{% block title %}Este es un titulo personalizado{% endblock %}

Esta otra solo necesitó cambiar el pie de la página.

1
2
{% extends 'base.html' %}
{% block footer %}Yo soy un mejor pie{% endblock %}

Y esta cambia el titulo y el contenido, mas no el pie

1
2
3
{% extends 'base.html' %}
{% block title %}<h3>Titulo grande.. pero menor</h3>{% endblock %}
{% block content %}<p>Este es un nuevo y simple contenido</p>{% endblock %}

Como puedes ver, al extender el template ‘base.html’ tomamos toda su información tal cual, incluidos sus bloques, los que si no son sobreescritos, quedaran de la misma manera.

Obviamente no estas obligado a utilizar el sistema de templates de Django, puedes utilizar cualquier metodo que te venga en gana, pero yo considero que este tipo de templating cumple.. y con creces.

2 Comentarios

Componente de JSON en CakePHP

28/05/2007

Un componente muy útil desarrollado Eelco Wiersma en base al paquete de PEAR Service_JSON.

Su uso es muy simple, agregar el componente en tu controlador y esta listo para encoding y decoding en JSON.

1
2
3
4
5
6
7
8
var $components = array('json');
 
$valor = array('uno', 'dos', 'tres', array('arreglo', 'multiple'));
//convertimos el arreglo a json y lo guardamos en $resultado
$resultado = $this->json->encode($valor);
 
//ahora al revez.. lo pasamos de json a un objeto
$resultado = $this->json->decode($resultado);

Bajalo en CakeForge

Actualización

Las funciones de JSON también estan disponibles como extensiones de PECL para PHP y a partir de PHP 5.2 son incluidas en los binarios por default.

Sin Comentarios

Cual versión de CakePHP deberías de usar?

25/05/2007

Ahora que esta tan de ‘moda’ la utilización de frameworks para programar cualquier cosa, y siendo PHP tan usado, mas de alguno seguro se ha topado con CakePHP.

Desde hace algunos meses sucede una extraña situación con el proyecto; esta a punto de salir una nueva versión (1.2.x.x) que sustituira a la actual (1.1.x.x) haciendo varios cambios significativos en el funcionamiento del framework, el gran problema es que esta versión como bien puede salir en dias, tambien puede salir en semanas o hasta en meses.

Asi que si estas indeciso sobre que versión utilizar, aqui van unos pros y contras, cortesía de CakeBaker

CakePHP 1.1.x.x

Pros:

  • Estable
  • Documentación abundante con manuales y tutoriales

Contras:

  • No se sacan mejoras para esta versión, solo se corriguen bugs

CakePHP 1.2.x.x

Pros:

  • Muchas funcionalidades nuevas
  • El futuro de Cake

Contras:

  • Sin documentación (casi)
  • Es una versión Alpha, asi que puede cambiar y algunas funciones pueden no estar terminadas

En lo personal, pienso que es simple, los que ya tienen experiencia con Cake, deberían de usar la versión 1.2.x.x y no tendran ningún problema al adaptarse (y si lo tienen hay muchas personas a quien preguntarles en IRC o listas de correo).

Las personas que no lo conocen aún, deberían de usar la versión que esta documentada, que es la 1.1.x.x.

Una experiencia con un modelo del que estas aprendiendo y que no tiene documentación, puede ser frustrante.

Sin Comentarios

Guardando varias filas en CakePHP

22/05/2007

Una característica extraña (util?) de CakePHP es que guarda el indice de el ultimo registro guardado automaticamente en $this->Model->id y como bien sabemos, cuando insertas algo en un modelo, que trae seteada una id que ya existe, actualiza los datos en lugar de insertar unos nuevos.

Es muy comodo en realidad, pero en este caso en particular que tengo varias filas a insertar, no lo es.

1
2
3
4
5
6
$datos = array('primero', 'segundo', 'tercero');
 
foreach ($datos as $dato) {
  $this->data['Modelo']['dato'] = $dato;
  $this->Modelo->save($this->data);
}

Esto resultara en que solo se va a crear una fila nueva que se ira actualizando constantemente segun tratamos de insertar y quedara con el valor de ‘tercero’ porque es el último dato.

Para solucionar esto hay que destruir el índice que crea despues de cada inserción.

1
2
3
4
5
6
7
$datos = array('primero', 'segundo', 'tercero');
 
foreach ($datos as $dato) {
   $this->data['Modelo']['dato'] = $dato;
   $this->Modelo->save($this->data);
   $this->Modelo->id = false;
}

Voilá!

3 Comentarios

Variables Dinámicas en PHP

18/05/2007

Notita cultural.

El operador $$ en PHP se utiliza para las variables dinámicas, es decir, lo utilizas cuando quieres que el valor de una variable, se convierta en otra variable por si mismo, un tanto confuso, pero resulta muy util.

Un código dice mas que mil palabras.

1
2
3
4
5
6
7
8
9
10
11
12
$dinamica  = 'variable';
$$dinamica = 'Algun valor tonto';
echo $variable;
//Algun valor tonto
 
$variable = 'Otro valor tonto';
echo $variable;
//Otro valor tonto
 
$$dinamica = 'Amigas';
echo "Las llaves son tus ${$dinamica}";
//Las llaves son tus Amigas
3 Comentarios