Archivo de la categoría: Programación

Detectar problemas de memoria en PHP


echo "Memory after attachment: ".memory_get_usage(true).PHP_EOL;
$attachmentId = pods_attachment_import(LODGE_FEATURE_PHOTOS_FOLDER.$image, $lodge["ID"], true);
echo "Memory before attachment: ".memory_get_usage(true).PHP_EOL;

Poniendo varias de estas líneas en el código podemos saber qué llamada es la que nos está consumiendo memoria. Se empieza por dividir el código en partes “sospechosas” y luego en el log vamos viendo entre cuáles se hizo la diferencia de memoria. Ejemplo:

Memory before attachment: 47972352
Memory after metadata: 47972352

Está claro que ahí no hay un problema de memoria.

 

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.

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.