Actualmente estas viendo el weblog personal de Carlos Montalvo, un profesional en el desarrollo web con sede en la ciudad de Lima, Perú.

Suscribete a posts o comentarios

Sigueme en Twitter

Zend Server Community Edition (webserver)

02 Sep

Escrito por hace 17 horas y 50 mins | Sin Comentarios

Zend Server Community Edition (CE) es una versión del servidor de aplicaciones PHP Zend Server rápido y confiable que funciona en distribuciones de Linux, Windows y Mac OS X.

A diferencia de su versión de pago, Zend Server Community Edition (CE)es completamente gratuito, y usted puede usarlo en las fases de desarrollo, prueba y producción.

¿Que lo diferencia?

Al ser de Zend, este incluye:

  • Acelerador de código byte (Zend Optimizer+, incrementa el desempeño con cambios sin aplicación.)
  • Cacheo de Datos Zend ( Un set de funciones que permite a los desarrolladores cachear datos en una memoria compartida, o bien en un disco.)
  • Una distribución PHP 5.2/5.3 certificada .
  • Zend Framework.
  • Apache (o integración IIS).
  • MySQL (en Windows y Mac OS X).
  • Conectividad completa a todas las bases de datos comunes.
  • Conectividad de código Java.
  • Consola de administrador PHP basada en Web.

Instalación en Ubuntu 10.04

$ sudo -s

#Agregar el Repositorio de Zend
echo "deb http://repos.zend.com/zend-server/deb server non-free" > /etc/apt/sources.list.d/zend.list

#Agregar la clave del Repositorio
wget http://repos.zend.com/deb/zend.key -O- | sudo apt-key add -

#Actualizar la lista de Paquetes
apt-get update

#PHP 5.3
apt-get install zend-server-ce-php-5.3

#O PHP 5.2
apt-get install zend-server-ce-php-5.2

Manual Oficial de instalación completo

Categorizado :Desarrollo Web

Etiquetado :Zend,Ubuntu,php,MySQL

Quality Assurance en PHP

30 Aug

Escrito por hace 3 días y 20 horas | Sin Comentarios

Xdebug

Un depurador, perfilador y analizador de trazas para PHP con posibilidad de realizar code coverage (no me atrevo a traducirlo :) .

Lo mejor de esta herramienta son los volcados de pila y variables en memoria, una auténtica gozada después de sufrir durante años los echo, los var_dump y los printr.

El tema del perfilado de código también es bastante interesante de cara a ver dónde se pierden ciclos en los scripts. En Linux se puede ver el árbol de llamadas del código con el KCacheGrind de toda la vida (viene con KDE-devel en todas las distros); para los que sufren Windows está el port WinCacheGrind, pero ya aviso que es lento y pesado a más no poder. Para OSX ni idea, imagino que habrá un port de KCacheGrind o como mínimo se podrá utilizar la instrumentación de valgrind/callgrind a pelo, no se.

También se puede integrar con Eclipse + PDT para depurar sin salir del IDE, aunque es un poco fiable todavía.

Para instalar Xdebug lo mejor es tirar de los repositorios PEAR/PECL y compilarlo. Instalarlo desde ubuntu o debian ya no es cosa del pasado.

PHPUnit

Un framework para realizar tests unitarios de manera tan sencilla que da reparo no hacerlos :).

Antes utilizaba SimpleTest pero este me gusta mucho más por la versatilidad que ofrece y el rápido desarrollo. Está completamente orientado a objetos y puede funcionar conjuntamente con Xdebug para realizar unos bonitos informes de cobertura.

PHPUnit es una herramienta sobre la que se está trabajando muy activamente. Entre las cosas interesantes que se pueden hacer (a parte de lo que he dicho) quizá destacaría el mutation testing y el test para bases de datos PHPDBUnit que es un port directo del DBUnit de Java.

Otra herramienta increíble que puede interactuar con PHPUnit es Selenium. Con estas dos joyitas se puede construir un sistema de tests de aceptación completo para aplicaciones web.

Para instalar PHPUnit, lo mejor de nuevo, es tirar de Pear porque la versión que viene empaquetada en Debian/Ubuntu es bastante antigua.

Phing

¿Habeis utilizado alguna vez Apache Ant en Java? pues Phing es lo mismito pero para PHP; guarda una cierta compatibilidad con la sintáxis de Ant pero incorporando algunos targets útiles para PHP,como por ejemplo la integración con PHPUnit :) o el acceso a Subversion.

Tampoco es que me guste mucho utilizar XML para hacer los scripts de los despliegues... porque el XML tiende a hacer las cosas complicadas imposibles, pero para las tareas habituales no se requieren más de una docena de lineas.

Para instalarlo, más Pear.

Categorizado :Desarrollo Web

Etiquetado :Testear,php,Debugear,Debug

Paginación de datos

25 Aug

Escrito por hace 1 semana y 1 día | Sin Comentarios

¿Qué es el paginado?

El paginado de datos consiste en trocear una salida de datos muy larga en paquetes más pequeños y digeribles para el usuario. Hay ejemplos de paginados en la inmensa mayoría de aplicaciones, especialmente en las de Internet. Por ejemplo:

Paginado de Google:

Paginado de Flickr:

Paginado de Digg:

¿Por qué debo paginar?

  • Para el usuario es más sencillo ver 10 paquetes de 10 resultados que 100 de golpe.
  • Probablemente al usuario sólo le interesen los resultados más relevantes que son los que aparecen en la primera o segunda página.
  • Para la base de datos es más sencillo y rápido traer 10 resultados que 100.
  • Para el servidor HTTP es más sencillo y rápido servir 10 resultados que pesan 20Kb en lugar de 100 resultados que pesan 200Kb.

¿Cómo paginar datos?

Para paginar los datos necesitamos de antemano dos cosas: el tamaño de la pagina y el total de filas que tenemos de datos.

Contamos el total de filas:

SELECT COUNT(*) AS total FROM employees;

total
---------------
63

Mediante la instrucción SQL LIMIT n,m podemos Dividir en trozos los datos de salida y mostrar la pagina que nos interese. LIMIT acepta dos parámetros: el primero es el offset de la pagina y el segundo la cantidad de filas que devuelve.

Devolvemos 10 resultados de la página 3:

SELECT id,name FROM employees LIMIT 3,10;

id name
------------------------
13 José
22 Billy
34 Carlos
...

Necesitamos el total de filas para calcular cuántos paquetes de datos (paginas) necesitamos. En este caso tenemos un total de 63 filas paginadas de 10 en 10. Veamos un script PHP muy simple que nos devuelve las páginas:


$pagging = 10;

isset($_GET['page']) ? $current = (int)$_GET['page'] : $current = 1;

$q = mysql_query("SELECT COUNT(*) FROM employees;");

$row = mysql_fetch_assoc($q);

$total_pages = (int)ceil($row['total']/$pagging);

//header pagging

echo "Pagina $current de $total_pages ({$row['total']} resultados)nn";

//body pagging

$q = msql_query("SELECT id,name FROM employees LIMIT {$current-1},$pagging;");

while($row = mysql_fetch_assoc($q))

{

echo vsprintf("%dt%sn", array($row['id'], $row['name']));

}

//footer pagging
echo "«t";

for($i=0;$i < $total_pages;$i++)

{

if($i === ($current-1))

echo " [$i] ";

else

echo " $i ";

}

echo "t»";

Página 1 de 7 (63 resultados)

13 Pepe
22 Manolo
34 Jose
...

« [1] 2 3 4 5 6 7 »

Consideraciones para MySQL

Para calcular el paginado debemos utilizar obligatoriamente dos consultas como mínimo, si las consultas son complejas podemos tener un problema de rendimiento importante pero existen maneras de atajar el camino. Si la base de datos que utilizamos es MySQL existe un hack para devolver el resultado paginado y el total de filas en un solo paso.

Seleccionamos la página que nos interesa:

SELECT SQL_CALC_FOUND_ROWS id,name FROM employees LIMIT 0,10;

Miramos cuantas filas tiene en total:

SELECT FOUND_ROWS();

Siguen siendo dos consultas pero a efectos prácticos rinde como "una y media", en cualquier caso nunca será tan lento como hacerlo con las dos consultas anteriores.

SQL_CALC_FOUND_ROWS funciona a partir de la versión 4 de MySQL si no recuerdo mal.

Las instrucciones SQL_CALC_FOUND_ROWS y FOUND_ROWS() deben ir una detrás de otra, si hacemos consultas por en medio es muy probable que nos encontremos con resultados imprecisos.

Me consta que Oracle tiene una instrucción equivalente pero no sabría explicaros, no tengo suficiente experiencia con esa base de datos. PostgreSQL y SQLite sí que sé seguro que no pueden hacer uso de este hack, al menos en sus versiones actuales.

Nota: Para utilizar SQL_CALC_FOUND_ROWS y FOUND_ROWS() el valor de mysql.trace_mode debe ser off.

Si dudas de que este off al inicio de tu pagina php coloca.

ini_set("mysql.trace_mode", "0");

o en tu archivo .htaccess

[BASH]
php_value mysql.trace_mode "0"
[/BASH]

Categorizado :Desarrollo Web

Etiquetado :php,MySQL

A varias personas nos agrada el estilo del chat de gmail, porque
este es muy rápido y ligero para usar. Navegando por la red encontré un script
que simula su estilo y funcionamiento con lo cual podemos integrarlos a
cualquier página web y así montar nuestro chat con nuestros amigos. [ Descarga ] [ Demo ]

Generar Slugs para Urls Amigables con php v2

18 Aug

Escrito por hace 2 semanas y 1 día | Sin Comentarios

Hace un tiempo habíamos visto como Generar Slugs para Urls Amigables con php, hoy he reducido dicho código en tan solo una simple línea.

Dicha función soporta caracteres latinos de una forma más sencilla.

function generar_slug($string, $separador = '-')
{
//sin espacios al inicio o al final
   return strtolower(trim(preg_replace('~[^0-9a-z]+~i', $separador, html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), $separador));

}
//uso
$str = generar_slug('He regresado y con más ganas');
//retornara #-> he-regresado-y-con-mas-ganas
echo $str;

Categorizado :Desarrollo Web

Etiquetado :Urls Amigables,php

Hoy TutorialZine a desarrollado un sistema de Notas Adhesivas (Sticky Notes) con PHP y jQuery 1.4. Para tal fin han montado un ejemplo donde los visitantes tienen la posibilidad de crear notas con una vista previa en vivo y moverlos por la pantalla, cada movimiento será registrado a través de AJAX y se guardara en la base de datos. [ Descarga Codigo Fuente ]

Frog es un CMS bastante sencillo pero potente en sus funciones, con una elegante interfaz usando prototype.js, un sistema de plantillas que nos permiten cambiar fácilmente su apariencia y un panel administrador en el cual podremos manejar a gusto las funciones de nuestro sitio.

The Pastry, la mejor forma de compartir codigo

09 Nov

Escrito por hace 9 meses y 3 semanas | Sin Comentarios

The Pastry es una excelente forma de compartir código por Internet, basta pegar las líneas, escoger el lenguaje deseado (ActionScript, HTML, C++, PHP, Python, CSS, etc) y obtendremos el enlace generado con el código perfectamente ordenado, coloreado y listo para compartirlo.

pastry

Entre las cualidades de The Pastry podemos resaltar que usa tu Cuenta de Google para poder almacenar tus código anteriores, así tener un historial. Otra de sus funciones a resaltar es la que cualquier persona pueda editar nuestro código con lo cual se creara una nueva revisión del código donde podemos comparar los cambios hechos linea por linea.

CushyCMS es un sistema de gestión de contenidos estáticos, que no necesita instalación. Solamente proporcionamos los datos de acceso FTP al servidor y asignamos una clase a cada elemento de la página que precisemos que sea editable, permitiendo así la modificación del contenido mediante un editor WYSIWYG (FCKEditor ahora CKEditor). El funcionamiento de CushyCMS se aprecia en el video que suministra su propia web.

Instalar Lamp + SVN + Trac en Ubuntu II

16 Apr

Escrito por hace 1 año y 4 meses | 3 Comentarios

En la entrada anterior pudimos instalar un Servidor Web ahora veremos la instalación y configuración de SVN (Subversion).

ulamp

Instalación de SVN

Abrimos la consola (Terminal) y escribimos lo siguiente.

sudo apt-get install subversion
sudo a2enmod dav
sudo /etc/init.d/apache2 restart
sudo apt-get install libapache2-svn
sudo /etc/init.d/apache2 restart

subversion: Con esto instalamos subversion.
a2enmod dav: Activamos el modulo de Apache usado para hacer que los repositorios estén disponible a otros a través de una red.
/etc/init.d/apache2 restart: Reiniciamos el servidor web, esto es necesario para poder ver los cambios realizados.
libapache2-svn: Contiene los módulos que capacitan a Apache funcionar como un servidor de Subversion además del módulo de identificación.

Creación de Repositorio

Primero creamos el directorio:

sudo mkdir /var/svn

A continuación indicarle al Subversion que es un repositorio:

sudo svnadmin create /var/svn/repos

A continuación, abrir el archivo /etc/apache2/httpd.conf y añada las siguientes líneas:

<location>
DAV svn
SVNPath /var/svn/repos
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/subversion/passwd
Require valid-user
</location>

Asignamos permisos para que el servidor web pueda modificar el repositorio:

sudo chown -R www-data /var/svn

Añadimos un usuario le asignamos la contraseña y reiniciamos el servidor web.

sudo htpasswd -c /etc/subversion/passwd calinsoft
sudo /etc/init.d/apache2 restart

Añadimos nuestro proyecto al repositorio, en mi caso mi proyecto lo tengo en esta dirección /home/calinsoft/bobi-system

svn import -m "Mi Primer Proyecto" /home/calinsoft/bobi-system file:///var/svn/repos/bobi-system/trunk

Ahora nos dirigimos a http://localhost/repos y nos pedira el usuario y password que hayamos asignado.

Si necesita un Cliente SVN similar a TortoiseSVN les recomiendo NautilusSVN

Continuara...

Categorizado :Informatica

Etiquetado :php,Linux,Ubuntu,MySQL,SVN,Track

« 1 2 3 4 5