Transacciones en CakePHP

Suongamos que tenemos un código para crear varios registros, pero no sabemos exactamente si todos esos registros van a poder crearse, y queremos que haya un rollback si eso no es posible.

En realidad CakePHP ya viene con una opción para hacer rollback en caso de error al modificar múltiples rows, pero acá lo hice manualmente:


public function miMetodoTransaccional($fkIds, $field1, $field2) {
$dataSource = $this->getDataSource();
$dataSource->begin($this);
$allOk = true;

foreach($fkIds as $fkId) {
$this->create();
$allOk = true & $this->save(array("fk_id" => $fkId, "field1" => $field1, "field2" => $field2));
}

if ($allOk) {
$dataSource->commit($this);
return true;
} else {
$dataSource->rollback($this);
return false;
}
}

Javascript se come al mundo

Algo que ya se está dando, es que el lenguaje Javascript va a adquirir cada vez mas popularidad. En estos últimos tiempos, se le fueron agregando: soporte para desarrollo del lado servidor (Node.js), soporte para videoconferencias (WebRTC), soporte para gráficos 3d (WebGL), haciendo que un lenguaje sencillo (aunque con algunas fealdades importantes) termine siendo el lenguaje mas poderoso de todos. Es decir, Javascript se está haciendo fuerte en los lugares ocupados desde hace décadas por lenguajes “serios” y compilados como Java y C++.

Y si no me creés mirá esta demo de el juego BananaBread, desarrollado por Mozilla. Si, eso corre en un navegador.

Nunca programar un juego o una aplicación y darlo a conocer al mundo fue tan fácil.

Crear DVD de video en Linux

Usamos el programa DVDStyler, que incluye tanto la parte de edición de los menúes, de encoding y de grabación de DVD, es decir, es una solución completa.

Una guía de cómo usarlo, acá.

A tener en cuenta: de tener mas de 4 videos / capítulos, si se usa la vista de 4 capítulos por menú hay que programar los botones de anterior y siguiente.

Política de To-Read

Estoy reduciendo la carga de los “A leer” o To-Read. La idea es que al final del día no me quede ningún to-read a menos que realmente valga la pena. Al mismo tiempo, quiero estar relativamente informado de las tendencias y nuevas tecnologías, por lo que necesito tener al menos una subscripción RSS que englobe mas o menos todas las tendencias tecnológicas (DZone).

Para esto, tengo:

1) RSS con Thunderbird, configurado para borrar los feeds que no lea en el día (y también los leídos) excepto aquellos que marque como “destacados”.

2) Un archivo “leyendo” con las páginas que estoy leyendo (en general tutoriales relativamente largos). La idea es que este archivo sea pequeño, nunca pase de los 5 items.

3) Un archivo de links categorizados donde agregue los artículos que después de leerlos me interese tener como referencia. Esto lo hago con Emacs / Org-Mode y lo publico en mi sito personal. Podría implementarse también con Delicious.

En general ahora elijo sólo aquellos to-reads que realmente me interesen y, sobre todo, dejar de acumular una infinita lista de to-reads.

Visualización de algoritmos

Dos videos geniales.

Este video nos da una percepción sensorial (visual y auditiva) de cómo funcionan los diferentes algoritmos de ordenamiento.

Este es interesante para ver a grandes rasgos como funciona A*, uno de los algoritmos de pathfinding (de encontrar caminos) mas usados, por ejemplo, en los videojuegos.

Objetivos Próximos

Siguiendo la pauta que leí en alguna parte, lo mejor para hacer algo es decir que lo vas a hacer. Así que pienso investigar estos temas en algún momento, haciendo algún que otro post con mis pequeñas investigaciones:

SmallTalk | POO “en serio”

Me dieron ganas de aprender lo básico de SmallTalk cuando en una charla en una empresa del centro sobre Node.js (no recuerdo cuál) un hombre que había trabajado en IBM bastante tiempo me comentó que lo que implementan la mayoría de los lenguajes de programación hoy en día no es POO sino algo “parecido”. Que en realidad POO son objetos “vivos” en memoria y modificables en tiempo real. Es decir, que sólo SmallTalk provee un entorno de objetos.

ExtJS | La web para programadores

Vengo trabajando hace algún tiempo con ExtJS pero todavía no hice un proyecto desde “cero” con esta tecnología y por eso me gustaría conocer las bases. Es excelente porque le saca el carácter “documental” a la web: permite hacer verdaderas aplicaciones web donde no tocás un ápice de HTML ni CSS: Javascript puro y duro como nos gusta a los programadores.

Three.js | Juegos en 3d y Javascript

No hay que ser un genio para darse cuenta por qué puedo estar interesado en esto. O sea, ¡3d!

Aunque mi interés por los juegos decayó bastante, me queda algún interés por renderizar gráficos 3D.

Proyectos personales

Si uno quiere concretar algunas cosas, tiene que expresarlo. Tirar semillas al viento. Alguna quizás crezca. Lo importante es comunicar los deseos o ideas de uno. Si, esto quizás tiene el lado negativo de que alguien puede robar tu idea. Pero, el tiempo que vengo intentando proyectos personales por mi cuenta en solitario no ha dado muchos resultados, así que no está demás probar.

Blog en ingles

Posiblemente sería bueno, tanto para mejorar mi ingles como para mostrar mi trabajo afuera, hacer un blog en inglés.

Otras cosas que me gustaría investigar en algún momento:

– Lenguaje de programación R

– IA

– Lisp

– Programación declarativa

Liberar espacio en disco

Acabo de descubrir que Ubuntu tiene un Analizador de Espacio en Disco (la herramienta se llama así, está en el menú sistema), que básicamente hace lo mismo que el comando du pero de una manera mucho mas intuitiva incluso para quienes usamos con frecuencia la consola. La interfaz está buena y además, permite ver el uso del espacio con gráficos en forma de árbol, de anillos, etc.

Ubuntu la sigue rockeando (en mi caso, Xubuntu).

Unicode y UTF8

Después de varios intentos frustrados logré leer completa la nota de Joel On Software sobre encodings con interés genuino.

Resumiendo, lo mas importante de esa nota es que:

Unicode es un estándar que le asigna un código único (único posta) a cada caracter posible, chinos, occidentales, etc. Sin embargo Unicode no especifica cómo guardar en el disco estos caracteres. Incluye o es compatible con encodings viejos como ASCII7 y ISO 8859.

UTF-8 es un encoding que guarda los caracteres Unicode en al menos un byte cada uno y es compatible con algunos encodings mas limitados de caracteres con respecto a los caracteres en inglés, como ASCII7.

UTF-16 en cambio guarda todos los caracteres en 2 bytes o 4 bytes. La desventaja es que en general usa mas espacio que UTF-8.

Y hay varios mas. Básicamente estos encodings especifican cómo guardar físicamente los caracteres definidos en el estandar Unicode que es abstracto, independiente de la forma de guardarlos en disco. También hay temas de los que se abstrae como por ejemplo si los caracteres están dispuestos con Big-Endian o Little-Endian.

Partículas elementales

Fuentes confiables afirman que los científicos que trabajan en el Gran Colisionador de Hadrones han hecho un descubrimiento importante sobre la estructura mas íntima de la materia. Al parecer, el Universo en su escala mas pequeña está compuesto exclusivamente por dos partículas elementales e indivisibles:

<?php

y

?>