Ismael Dijo

jueves 15 de julio de 2010

Page up/down en aplicaciones de terminal con buffer propio

Por razones de tiempo cada vez me conecto menos a IRC, aunque creo firmemente que sigue siendo el sistema de chat con el cual me siento más cómodo. Hace algún tiempo note que al conectarme desde irssi sobre Mac OS X, no me funcionaba el bendito Page up/down como con el resto de las aplicaciones!!!. Esto sucede porque irssi maneja un buffer de manera independiente a Terminal, por lo cual las combinaciones clásicas no funcionaban. Probando combinaciones casi al azar, logré encontrar una que me permitió desplazar a través del buffer de irssi:

(shift + fn) + (flecha arriba)

(shift + fn) + (flecha abajo)

Con eso queda resuelto el problema del desplazamiento en irssi y probablemente otras aplicaciones que utilizan el mismo sistema. Aunque queda muy poca gente que usa clientes de IRC por terminal espero que el tip sea de utilidad.

miércoles 28 de abril de 2010

Symfony/Doctrine: Clave Primaria Compuesta

Debo reconocer que soy bastante crítico al momento de modelar datos, ya que me gusta que todo quede lo mejor optimizado posible. En estos días he estado trabajando junto a mi equipo, en un proyecto el cual tienen como base tecnológica: PostgreSQL, Symfony y Doctrine; todo iba viento en popa hasta que llego el momento de intervenir el mantenedor de una entidad cuya clave primaria era compuesta y además los campos eran foráneos, lo cual gatilló en los siguientes problemas:

  1. Hubo que crear a mano los elementos del formulario correspondientes a los campos foraneos correspondientes a la clave primaria.
  2. Una vez creados, se logra ingresar un dato... hasta aquí todo parecía ir bien, sin embargo, la sorpresa apareció al momento de intentar desplegar la grilla, en la cual aparecío un flamante error en el routing (routing.yml) del backend, especificamente en la opción column que tenía como valor Array. Se intento solucionar de variadas formas propuestas como pseudo-soluciones en algunos sitios web, para nuestro infortúnio sin conseguir el exito esperado.
  3. Cuando casi perdiamos la esperanza y ya estabamos casi dispuestos a darle toda la responsabilidad a la capa del modelo de Symfony, nos iluminamos, pensamos y compartiendo experiencias de amigos externos (Gracias Jorge por tu infiníto tiempo libre para los amigos), en que quizás si creabamos un índice compuesto y que además sea único, con eso en teoría podíamos garantizar que no hubiesen registros duplicados (que era lo importante), y dejar como clave primaria un simple id autoincremental, y gotcha! funcionó perfecto.
A continuación dejaré una entidad de ejemplo para config/doctrine/schema.yml y backend/config/routing.yml.

schema.yml


MiEntidad:
columns:
id_mi_entidad:
type: integer
primary: true
notnull: true
autoincrement: true
id_foranea_uno:
type: integer
notnull: true
id_foranea_dos:
type: integer
notnull: true
relations:
ForaneaUno:
foreignAlias: MisEntidadesForaneaUno
local: id_foranea_uno
foreign: id_foranea_uno
type: one
foreignType: many
ForaneaDos:
foreignAlias: MisEntidadesForaneaDos
local: id_foranea_dos
foreign: id_foranea_dos
type: one
foreignType: many
indexes:
mi_entidad_index_unq:
fields: [id_foranea_uno, id_foranea_dos]
type: unique

routing.yml

mi_entidad:
class: sfDoctrineRouteCollection
options:
model: MiEntidad
module: mi_entidad
prefix_path: /mi_entidad
column: id_mi_entidad
with_wildcard_routes: true

Espero que este post, les sea de todo su gusto y les permita optimizar de mejor forma su tiempo que a mi :P.

Pd, Disculpen la indentación y recuerden que en yamel la indentación es de dos espacios y no de una tabulación tradicional (cuatro espacios).

sábado 23 de enero de 2010

Seducido por la Manzana Prohibida


Después de mas de una decada codeando sobre Sistemas Operativos Unix BSD y UnixLike Libres, debo asumir que me he dejado seducir por el encanto e inigualable belleza entregada por una manzana, que aunque está mordida en sus principios, me dejo encantado por la forma en la cual logra integrar lo mejor del mundo Unix BSD con el principio KISS. Si bien es una relación que recien comienza, tengo la esperanza que será una larga y comprometida relación (espero no estar escupiendo al cielo).