Probando las nuevas versiones de Zend Studio

Escrito el 29/April/2009 por juan_belon

He estado probando las versiones de editores de la familia Zend Studio, en su versión del extendido proyecto Eclipse, y me he decepcionado con la 6.0.0… :/

Empezando porque tarda muchísimo en cargar, al cargar un proyecto por FTP es lento hasta decir basta, y eso que dispongo de un buen ordenador, con 2GB de memoria ,Core 2 Dúo y conexión de banda ancha…

Sobre todo a la hora de construir la jerarquía de clase, lo que el IDE llama "Build Project", que lo que hace es escanear todos los ficheros de proyecto y analizarlos sintáctimente con el lenguaje que tenga, HTML,PHP, JScript, etc. Esto es sumamente tedioso cuando tienes miles de ficheros y además se sincronizan por FTP, si además cambias algo externamente trae un activador de este evento que hace que se vuelva a lanzar el proces, la captura trae el caso en que se queda totalmente colgado esperando…no se a qué…pero que da mucho que pensar, desde luego me quedo con la versión antigüa, la de la izquierda jajaj

Captura - Zend Studio 6 Colgado

Porque quien tiene tiempo para ver como construye el/los proyecto/s mientras las anteriores versioneslo hacian muchísimo más rápido y sin consumir tantos recursos?

En qué estarán pensando estos programadores…ayyyyyyyy

Equilibrando la carga de procesamiento

Escrito el 30/January/2008 por juan_belon

A veces deberemos hacer más consultas que procesamiento y otras veces es al revés, por eso debemos conocer los mecanismos equivalentes como instrucciones tanto para PHP como para mySQL o cualquier otro motor de base de datos.
Ejemplo, si necesitamos construir una tabla, un listado que extraemos de una serie de tuplas de una consulta de la base de datos ,pero sólo queremos mostrar del campo título ,digamos unos 20 ó 30 caracteres, en lugar de seleccionar todas las tuplas que podrían ser miles, y tienen cada una 250…y después recortar la cadena con substr() de PHP, lo que hacemos es seleccionar sólo esos 20 ó 30 caracteres desde la base de datos con una instrucción mejorada de mySQL: "SELECT SUBSTRING(campo, 1,20) as campo from tabla" o bien SELECT SUBSTRING(campo, 1,30) o cualquier otra subcadena, recortando el texto en el motor de base de datos lo hace más eficiente y carga menos el buffer. Observar que se empieza con 1 y no con 0 (por si os da quebraderos de cabeza…)

Saludos de un programador PHP.
(keep up the good code!!=)

Usando el sistema de memoria con PHP

Escrito el 25/January/2008 por juan_belon

PHP ofrece una extensión para usar el sistema de memoria de System V de S.O. tipo Unix, GNU/Linux, Solaris, etc a través de llamadas al sistema ,estamos hablando de semáforos.

La memoria compartida es memoria virtual compartida por procesos separados. Ayuda a solventar problemas de comunicación entre procesos ejecutándose en la misma máquina. Un método obvio debería ser escribir información en un fichero, pero el acceso a un medio permanente es relativamente lento. La memoria compartida permite la creación de memoria de sistema que pueda ser accedida por múltiples procesos, lo que es mucho más rápido. Como el uso exclusivo de la memoria es esencial, se debe usar un orden de bloqueo. Esto se suele hacer con semáforos. Si se usan las funciones de memoria compartida primero tenemos que asegurarnos de que se incluye el soporte de semáforos de System V.

Una discusión completa del uso de las funciones de memoria compartida se encuentra en http://www.whatis.com

La función integer_shm_attach(integer key, integer size, integer permissions) fue añadida por Christian Cartus. (thank you)

Un ejemplo:


<?php
/**
* Este ejemplo usa un semáforo para usar la
* memoria compartida para comunicarse
* entre múltiples procesos.
* Para liberar la memoria creada se debe
* de usar shm_remove
*/

//definir las llaves enteras de los semáforos
define(‘SEM_GRANADA_PHP',1970);
// la memoria compartida (MC):
define(‘MC_GRANADA_PHP',1970);
//llave para la variable:
define(‘MC_MENSAJE',1970);

//Obtener o crear el semáforo
$sem sem_get(SEM_GRANADA_PHP,1);
//sólo se puede obtener una vez:
if (sem_acquire($sem))
{

//asociar a la memoria:
$mem shm_attach(MC_GRANADA_PHP,1024);
//Hacemos que entre en un KiloByte.
//Obtenemos el mensaje:
if ($anterior_mensaje shm_get_var($memMC_MENSAJE)){
echo 
"Valor anterior: $anterior_mensaje &lt;br&gt;\n";
}
//crear nuevo mensaje:
$nuevo_mensaje getmypid()." aqui a las ".microtime();
//poner el nuevo valor:
shm_put_var($memMC_MENSAJE$nuevo_valor);
//desasociar de la memoria compartida:
shm_detach($mem);
//liberar el semáforo:
sem_release($sem);
}
else {
echo 
"No se pudo obtener el semáforo!";

}

?>


shm_remove:


<?php
//Con las mismas constantes
//obtenemos el semáforo:
$sem sem_get(SEM_GRANADA_PHP1);
if (
sem_acquire($sem)){
//añadir a la memoria compartida
$mem shm_attach($memMC_MENSAJE);
//quitar la memoria compartida:
shm_remove($mem);
//borrar el semáforo:
sem_release($sem);
} else {
echo 
"No se pudo obtener el semáforo!";
}

?>


Último artículo del año: Componentes imprescindibles del desarrollador web

Escrito el 31/December/2007 por juan_belon

No puede faltar un artículo en el último día del año ,¿no?!, además es Navidad jeje

Tampoco puede faltar en los módulos del Firefox de todo desarrollador Firebug e YSlow!

Gracias a éste último, combinado con Firebug podemos analizar la fuente de las esperas más largas por carga en nuestra web,es necesario para saber cómo mejorar nuestras prácticas de programación y escritura de aplicaciones para el marco de internet.

Los consejos de YSlow son buenos consejeros y nos enseñan como construir etags,hacer cacheable ajax,…y en general nos dan unas sencillas reglas para hacer que las cargas sean más rápidas, usar ficheros comprimidos con gzip, evitar las expresiones dentro de CSS,etc.

Todo un regalo de Reyes Majos para esta entrada del 2oo8!

Salu2 y cuidaros!

Evitando malgasto de memoria con objetos

Escrito el 14/December/2007 por juan_belon

¿Por qué?: Fácil: porque si queremos mantener referencias a objetos dentro de otros objetos veremos que si hacemos una clase llamada clase_prueba y la instanciamos:

<?php
$a = new clase_prueba();
?>

Si queremos referenciarla y no realizar copias innecesarias de TODO el objeto simplemente hacemos:

<?php
$a =& new clase_prueba();
$b =& $a;
?>

De forma que ambas tienen AHORA la misma referencia.

Corregidme si me equivoco :P que no hay programador PHP perfecto en este mundo! :)