May
30

http://diary.dipler.org

Seguimos con el desarrollo de la modesta aplicación que nos permite llevar un diario mientras nos facilita la vida para llevar un listado de tareas e ideas de forma completamente privada, y es que después de un tiempo sin actualizaciones oficiales, me complace presentar Diary 2.3, esta versión viene con las siguientes novedades que, espero les parezcan interesantes:

  • Corrección de errores puntuales en la edición de entradas categorizadas con un flag distinto al de Diario.
  • Corregido el error al pulsar el botón more después de haber realizado una búsqueda.
  • Corregido el error al codificar los signos +.
  • Mejora de los estilos para mejorar su compatibilidad con Firefox 4 e Internet Explorer 9.
  • Añadida la función de crecimiento automático del area de texto en función del contenido para mensajes nuevos.
  • Añadida la función de crecimiento automático del area de texto en función del contenido para el modo de edición de mensajes.
  • Añadidos hastags al estilo de los tags de Twitter, en los que al pulsar en ellos se realiza automáticamente una búsqueda con dchos tags.
  • Por defecto cuando llegamos a la parte final de la lista de elementos cargados, s

http://diary.dipler.org

Tags:
Categoría PHP, Producción propia | Sé el primero en comentar!
Mar
4

http://diary.dipler.org

Llevabamos ya un tiempo sin añadirle mejoras a la aplicación Diary, así que he creido oportuno lanzar una actualización en estas fechas. Si bien la actualización no tiene grandes mejoras abre paso a un nuevo ámbito de desarrollo. Para futuras versiones se pretende añadir notificaciones por email, planificar tareas para fechas seleccionadas y la integración de la aplicación con redes sociales como Facebook y/o Twitter.

En resúmen, las mejoras añadidas y los errores corregidos en esta versión son los siguientes:

  • Mejorado el rendimiento interno de alguna de las funciones del núcleo de la aplicación.
  • Se permite el borrado de entradas.
  • Se permite la edición de entradas (en caso de ser una tarea, esta estará marcada como no terminada por defecto.
  • Cambios leves en las estrucutras de datos que almacenan la información relativa a las entradas.
  • Añadidos efectos de transiciones en la barra de notificaciones.
  • Movida a la parte inferior la barra de notifiaciones.
  • Corregido el error al introducir en una entrada la barra inclinada “”.
  • Si una tarea está finalizada se mostrará el borde de color verde.
  • Mejorada la notificación de cargando.
  • Leve cambio en la hoja de estilos en lo relevante a enlaces,…
Tags:
Categoría PHP, Programas | Sé el primero en comentar!
Feb
10

http://diary.dipler.org

Como ya sabréis, las versiones de Diary 0.2.x están girando en torno a los diferentes tipos de entradas que podemos tener, así como en una mejora del rendimiento y de la seguridad que presenta la aplicación para permitir al usuario utilizar de una forma sencilla y práctica la aplicación sin tener que preocuparse de nada en absoluto. Dentro de las mejoras podemos diferenciar las de dos tipos:

  • De usuario (mejora la experiencia del usuario para con la aplicación)
    • Nueva interfaz de usuario
    • Nueva interfaz de búsqueda con nuevos filtros
    • Nuevo estilo de marcado de tareas pendientes y terminadas (imágenes en lugar de chekbox)
  • De servicio (mejora la calidad del servicio de forma transparente al usuario)
    • Ajax combinado con XML
    • Mayor seguridad a la hora de intentar replicar sesiones

Por el momento la aplicación está optimizada, como ya hemos dicho, para navegadores modernos, es decir, últimas versiones de Chrome y Firefox, en este último caso, y para sacarle el máximo jugo a la interfaz, será necesario el uso de Firefox 4.0

http://diary.dipler.org

Tags:
Categoría PHP, Producción propia, Programas | 1 Comentario »
Feb
3

http://diary.dipler.org

Como ya comenté en el post de introducción de Diary 0.1.2, esa versión no era nada más que un aperitivo de la que estaba desarrollando en ese momento y, dado que algunas personas me recordaron lo incómodo que era el cambio de hora en los artículos escritos hice una pre-versión estable y la subí, pero no traía grandes cambios; esta sí:

  • Las tareas pueden marcarse como terminadas o no utilizando el checkbox que hay a la izquierda del texto que hemos introducido (más tarde se añadirá búsqueda según el estado de las mismas)
  • Mejorados los logs internos de funcionamiento
  • Coloreadas las entradas de contenido en función del tipo
    • Diario: borde gris
    • Tarea: borde rojo
    • Idea: borde azul
  • Mejorado el sistema de funcionamiento de ajax, basándose ahora en el intercambio de ficheros xml sencillos, permitiendo así gestionar varias partes de la ventana con una sola petición y por ende, mejorando la experiencia de usuario
  • Añadido panel oculto en la parte superior que muestra mensajes de estado de la aplicación, estos pueden ser de tres tipos
    • OK
    • Alerta
    • Error

http://diary.dipler.org

Tags:
Categoría PHP, Producción propia, Programas | 1 Comentario »
Feb
1

http://diary.dipler.org

Me complace presentarles la versión 0.1.2 de Diary. Esta versión ya mencionada se ha adelantado un poco a lo que estaba previsto por los comentarios de algunas de las personas que utilizan la herramienta, entre sus mejoras tenemos:

  • Muestra de la hora local de Madrid por el momento en lugar de la costa oeste de Estados Unidos (fecha que se estaba mostrando hasta ahora)
  • Posibilidad de guardar y buscar entradas por tipo, en un futuro no muy lejano se pretende permitir al usuario marcar las tareas como terminadas y las ideas con estados.
    • Log: función de diario
    • Idea: nos permite almacenar fácilmente las ideas que vamos teniendo
    • Tarea: nos permite almacenar las tareas que debemos hacer en un futuro y no queramos olvidarnos

http://diary.dipler.org

Tags:
Categoría PHP, Producción propia, Programas | Sé el primero en comentar!
Jan
8

http://diary.dipler.org

Hace ya un tiempo, un amigo me preguntó acerca del día en el que había hecho una determinada actividad y no fui capaz de responderle, no suelo fijarme en las fechas en las que hago las cosas; el problema quedaría ahí de no ser porque si te roban una cuenta de correo electrónico te preguntan sobre la fecha aproximada en la que creaste la cuenta y así en muchos otros ámbitos; también cabe la posibilidad de que hayas establecido por sistema llevar un diario o simplemente que desees empezar a llevar uno.

Si la respuesta a alguna de estas preguntas es sí, eres un perfecto candidato para utilizar Diary, una aplicación muy sencilla que llevo desarrollando ya unos meses para uso exclusivamente personal pero que, después de que un amigo me dijese que le parecía una idea interesante y que quería usarlo también, hoy he abierto al público general para que pueda ser utilizada por aquellas personas que piensen que es una aplicación interesante para ellos.

¿Qué es Diary?

Diary es una aplicación escrita íntegramente en HTML5, PHP y Javascript apoyándose en hojas de estilo CSS3 y una base de datos MySQL, por lo que para poder visualizarlo perfectamente hará falta un navegador que soporte HTML5 y CSS3 (lo cual, sinceramente, no es muy complicado, todos los navegadores modernos deberían visualzarlo sin problema alguno.

¿Porqué no es compatible con todos los navegadores de la “historia”?

Muy sencillo, nació como una aplicación personal, y por ahora sigue siéndolo, si veo que a la gente le interesa y se va registrando gente, la aplicación irá creciendo, entre otras cosas, en compatibilidad con navegadores.

¿En qué se diferencia de un blog, Facebook o Twitter?

Es una aplicación de uso privado para el usuario registrado, el usuario que escribe algo podrá verlo de varias maneras, pero nadie más tendrá ese privilegio, por así decirlo es un diario en toda regla para el usuario que lo utilice con la ventaja de que está en la nube y puede ser accedido desde cualquier navegador moderno para insertar entradas nuevas a nuestra lista.

Es una aplicación muy simple ¿alguna mejora futura?

Yo soy de los que utilizan infinidad de aplicaciones de la web para escribir y leer cosas, así que una de las ideas que podrían ser interesantes en esta aplicación es permitir publicar (mediante un botón especial dentro del diario) una entrada determinada en redes sociales como Facebook o Twitter.

Otra mejora que se me había ocurrido es no solo utilizarlo como diario de cosas hechas, sino como lista de tareas pendientes.

Manual de uso

Continue reading “Diary 0.1” »

Tags:
Categoría PHP, Producción propia, Programas, Web | Sé el primero en comentar!
Oct
12

Can’t speak spanish? you can also read this article in english, click here.

Hace ya un tiempo, publiqué una clase para conectar desde PHP con MySQL, dicha clase, si bien cumplía perfectamente con su función, no era eficiente y tampoco le daba mucho juego al programador, así que cuando empecé a desarrollar Keopens, un CMS que empecé a desarrollar con el fin de que fuese un núcleo muy minimalista y adecuado a las nuevas tecnologías que están surgiendo. Por desgracia, no tengo tiempo suficiente para seguir con el desarrollo del mismo, pero algunas clases, si bien forman parte de dicho proyecto, las he sacado del mismo y continuado desarrollando ya que para los pequeños proyectos en PHP que tengo que ir haciendo son muy útiles.

Esta es una de esas clases que han ido creciendo poco a poco y según iban surgiendo necesidades se le iba incrementando las funcionalidades. En general se ha intentado seguir una POO correcta, pero con el fin de compartir la clase aislada, he decidido incluir dos funciones que no deberían estar en dicha clase, una de ellas es la de validar un e-mail y la otra es la de enviarlo.

La clase consta de dos modos de trabajo, un primer modo de debug o testing y un modo de producción, para cambiar entre ambos modos tan sólo hay que cambiarle el valor a una variable, además en el modo testing, la clase nos mostrará, al destruir el objeto o bajo demanda, el número de consultas ejecutadas y el tiempo total entre la creación de la instancia de la clase hasta que esta ha sido borrada. Si ocurre un error grave, y se dan una serie de condiciones (hemos inicializado la clase con un correo electrónico y no estamos en modo testing) se enviará por correo electrónico el fallo, esto es muy útil para tener constancia de los errores e incluso detectar en ocasiones la SQL-Injection en el caso de que se genere una sentencia que no haya podido ser ejecutada debido a errores de sintaxis.

Otras características interesantes:

  • Funciona tanto con conexiones persistentes como no persistentes.
  • Permite la creación de una copia de seguridad de la base de datos escribiendo una única línea de código (MySQL dump desde PHP).
  • Nos permite monitorizar las sentencias, controlando en qué fichero y línea del mismo se ejecuta.
  • Envío de emails cuando sucede un error grave.
  • Conteo de tiempo de ejecución.
  • Conteo de memoria utilizada por el script.
  • Conteo del número de sentencias ejecutadas.
  • Previsualización automática de los datos de salida de una sentencia (modo testing).
  • En bases de datos InnoDB permite el uso de transacciones.
  • Los mensajes extras mostrados en el modo testing tienen asociados una serie de estilos que indican visualmente si la ejecución ha sido correcta o, por el contrario, se ha producido un error.

He aquí una serie de ejemplos muy sencillos para mostrar rápidamente el potencial de la clase.

Para conectar con la base de datos, nos bastará con escribir dos líneas en nuestro programa y ya estaremos listos para trabajar:


$db = new MyMysqli($db_host, $db_uname, $db_pword, $db_name, $debugging, $contactMail, 'MYSQLI_ASSOC');
$db->connect(false);

Para ejecutar una consulta nos basta con escribir una sola directiva.

$query = 'SELECT * FROM text';
$db->execute($query, __LINE__, __FILE__);

Las constantes __FILE__ y __LINE__ nos sirven para indicar, en caso de error, el lugar en el que se encuentra dicha consulta a la base de datos.

El método ejecutado devuelve un resultSet, pero la clase mantiene una referencia al último resultSet dado que es muy probable que nos interese trabajar con él en breves, por lo que devuelve el resultSet para utilizarlo en casos muy específicos, como por ejemplo en el caso de que necesitemos trabajar con dos a la vez.

Para recorrer un resultSet de una consulta nos basta con ir llamando al método fetch(), si no se le pasa como parámetro un resultSet, ejecutará la acción sobre el obtenido en la última petición a la base de datos

if($db->numRows() > 0){
 while($result = $db->fetch()){
//TODO
 }
}

Si somos un poco “vagos” o simplemente vamos a consultar muchas veces los datos, la clase proporciona un método para pasar los datos obtenidos a una tabla.


$db->getTable();

Al igual que en el ejemplo anterior, si no se le pasa como parámetro otro resultSet, formará la tabla partiendo del último restulSet obtenido.

Por último mencionar que, en las primeras lineas de la clase, podrá observar que hay unas líneas comentadas que citan lo siguiente:


//Access control
if(!defined('IN_APP')) exit('Access Forbidden');

Estas líneas están comentadas por una sencilla razón, en PHP es posible acceder a cualquer archivo por URL si el servidor no está bien configurado, esto hace que si la página cargada imprime algo por pantalla, no se muestre, ya que la constante IN_APP no está definida con anterioridad. Por ende para que funcione, antes de incluir el archivo en la ejecución, deberíamos declarar la constante IN_APP. Obviamente el nombre de la constante puede ser cualquiera, en este caso, la que yo usaba en Keopens era IN_APP.

Descarga: [download id="3"]

Categoría PHP, Producción propia, Programación, Web | Sé el primero en comentar!
Feb
4

A día de hoy PHP es uno de los lenguajes web más utilizados y que cuenta con una comunidad más grande de desarrolladores, esto es así por varias razones, entre las que se encuentran:

  • OpenSource.
  • Fácil de aprender.
  • Se pueden cumplir (desarrollar) la mayor parte de los caprichos que tenga el desarrollador/cliente para una página web.

Pero, como no es oro todo lo que reluce, PHP es un lenguaje muy poco eficiente si lo comparamos con sus competidores, y esto es así, porque es un lenguaje interpretado, es decir, cada vez que se solicita una página web el servidor tiene que coger el archivo, interpretarlo y después ejecutarlo, lo que hace que la rapidez del script creado merme considerablemente, y esta es la razón de ser de HipHop.

HipHop es un compilador de PHP cuya tarea es realizar la conversión de PHP a C++, un lenguaje mucho más eficiente que el primero, ya que este es compilado.

HipHop ha sido desarrollado por Facebook durante los dos últimos años, y esto es así por una sencilla razón, Facebook es una de las páginas más grandes y con más tráfico que existen en la actualidad y que han sido desarrolladas en PHP (no en su totalidad pero sí la parte web, para más información puedes leer ¿Cómo funciona facebook? ), lo cual les está obligando a invertir grandes cantidades de dinero en servidores que podrían haberse ahorrado, de hecho, según los datos que proporcionan en la página del proyecto en, aproximadamente un 50%, lo cual, siendo claros es una auténtica barbaridad hablando en términos económicos para la empresa.

A mi modo de ver, este es un gran avance para PHP que tenía que ocurrir tarde o temprano, dado que si hasta el momento PHP era el lenguaje idóneo para crear proyectos pequeños e incluso medianos, con este compilador (una vez que funcione perfectamente), podrá ser utilizado, sin grandes problemas para realizar grandes proyectos, eso sí, teniendo siempre en cuenta que ha de haber alguna manera de interactuar con C++ desde PHP sin tener que utilizar aplicaciones como Thrift, así que tiempo al tiempo, habrá que ir viendo como va evolucionando el proyecto.

Por último os dejo un esquema con su funcionamiento:

Fuente: Facebook Developers

Tags:
Categoría PHP, Programación, Programas | 2 Comentarios »
Oct
1

phpLa optimización de código es algo que ha preocupado a los programadores desde hace mucho tiempo, aunque por suerte o por desgracia, esta preocupación está decrementando día a día dado que los ordenadores con cada vez más potentes y por lo tanto importa menos el malgaste de ciclos de CPU.

Esta preocupación por el tiempo de ejecución de un programa viene dado sobre todo por el desarrollo de proyectos grandes (muchas visitas simultáneas) en los que sea crucial la velocidad de ejecución del algoritmo, por otro lado para aquellos proyectos que dada su escalabilidad pudiesen aumentar su complejidad de una forma un tanto brusca, es importante que el núcleo sea tan eficiente como sea posible además de, obviamente, tener el mínimo número de errores como sea posible, y por último puede que se dé el caso que en el caso de que tengas un servidor compartido, tu hosting te haya dado un toque porque haces uso de demasiados ciclos de CPU a la vez que te instan a migrarte a un plan de hosting más avanzado y que por consiguiente posea más recursos para tu script.

En este artículo vamos a intentar dar algunos consejos que permitan mejorar el rendimiento de nuestras aplicaciones web escritas en PHP con relativamente poco esfuerzo.

1.- Versión de PHP

Si estás utilizando una versión antigua de PHP será conveniente que hicieses una actualización de la misma en tu servidor, esto es así porque con cada versión, el equipo desarrollador de PHP ha ido implementando nuevas funciones así como optimizando partes de código, llegando a, reducir notablemente el tiempo de ejecución y la memoria consumida por determinados scrips y funciones de las que vienen por defecto.

A día de hoy, las últimas versiones estables de PHP son la 5.3.0 y la 5.2.11, eso sí, en ningún caso recomiendo instalar en un servidor en producción una versión que no sea estable.

2.- Utilizar algún sistema de Cacheado

En lenguajes interpretados, como es PHP, cada vez que se desea ejecutar un script, éste ha de ser interpretado, lo que hace que el consumo de CPU se incremente más que si se tratase de un lenguaje compilado, además de que ha de ejecutar todas las operaciones y funciones cada vez que se ejecute, lo que hace que si éstas son complejas, el script se ralentice considerablemente; un ejemplo de estas funciones son las llamadas a la base de datos.

A pesar de que no es recomendable cachear todas las páginas en algunos proyectos, en ocasiones es bastante recomendable utilizar aplicaciones como Memcache para así evitar que se ejecute el script siempre que se hace una petición de una página.

Otra opción es hacer uso de sistemas de templates, como es Smarty, que hace un cacheado de la página pero ejecutando siempre las consultas a la base de datos.

3.- Optimizar el código

3.1.- Strings

En PHP las cadenas de caracteres (Strings) pueden, al contrario que en lenguajes como C o Java, ir rodeados, tanto de comillas dobles () como de comillas simples (), pero a pesar de que el resultado pueda llegar a ser el mismo, el comportamiento de una cadena delimitada por uno u otro de estos caracteres se comporta de manera diferente. Continue reading “20+ Consejos para optimizar tus programas PHP” »

Tags:
Categoría Manuales, Open Source, PHP, Programación | 1 Comentario »
Jan
13

Con el proyecto OGStats, estoy desarrollando una serie de clases, así como usando librerías bajo licencia LGPL para mejorar la experiencia del usuario a la hora de hacer uso de la aplicación, pues bien hoy vengo a hablaros de una clase que he puesto a disposición (está en la sección de descargas) de todo el mundo bajo licencia LGPL.

La clase anteriormente mencionada tiene la funcionalidad de conectar con una base de datos MySQL haciendo uso exclusivo de PHP, así que procedamos a comentar la clase, la verdad es que no es nada nuevo :P .

Una de las características de las que he implementado que más me han gustado, es la de el modo de testeo, modo debug o como quieras llamarlo.

En condiciones normales cuando se produce un error en la base de datos, hace un tratamiento del error haciendo uso excepciones que son gestionadas dentro de la propia clase (para así evitar que el usuario se complique demasiado la vida) siendo el comportamiento estándar realizar un envío por correo electrónico al administrador informando de la ocurrencia de un error (siempre y cuando la configuración previa así lo indique); este correo va (siempre y cuando se haga un uso completo de os métodos de la clase) acompañado de la petición que lo ha hecho saltar, el motivo del error, el archivo y la línea dónde se ha producido sendo error.

Pero por el contrario, si tenemos activado el modo de testeo, sendos errores son visualizados por pantalla (en lugar de realizar el envío por correo) del siguiente modo:

  • Si se trata de una sentencia SELECT, la clase muestra una tabla con el contenido de la sentencia además de lo que mostraría con las de cualquier otro tipo.
  • En cualquier otro caso muestra la petición, la línea y el archivo de la misma, y en el caso de que se hubiese producido un error, éste se mostraría por pantalla.

Cuando está en este modo, además también muestra a pie de página el tiempo que ha sido necesario para generar la página (que  no en descargarla)

Algunos ejemplos:

$db = new database;
$db->setAttribute('host', $db_host);
$db->setAttribute('username', $db_username);
$db->setAttribute('password', $db_password);
$db->setAttribute('database', $db_name);
$db->setMail($db_emergencyMail);
$db->setTesting($db_testing);
//New db connection
$db->connect(true);

En esta pequeña parte de código, se establecen los valores necesarios para realizar la conexión con la base de datos, siendo las funciones:

$db->etMail($db_emergencyMail);
$db->setTesting($db_testing);

Completamente opcionales a la hora de crear la conexión, ya que si no se les establece ningún valor, directamente se anula el envio de correos electrónicos en caso de fallo, y se desactiva el modo de testeo respectivamente.

Otro aspecto a tener en cuenta es como realizar de forma correcta las sentencias SQL o Querys para sacarle el máximo partido a esta clase:

$query = 'SELECT * FROM mi_tabla';
$db->execute($query, __FILE__, __LINE__, true);

Analicemos uno a uno los argumentos que se le pasan al método execute:

  • $query: es el campo que contiene la sentencia SQL.
  • __FILE__: es una manera de indicar el archivo en el que nos encontramos (campo opcional).
  • __LINE__: es una forma de indicar la línea del archivo en la que nos encontramos (campo opcional).
  • El último argumento se corresponde con una variable que anula el muestreo de información en caso de encontrarnos en el modo de testeo, de manera que si está con el valor true, el mensaje no se mostrará, mientras que si se pone false o simplemente no se pone nada, éste no se mostrará (campo opcional). Este punto es especialmente importante si realizamos una petición entre etiquetas </tr><tr>, o similares, lo que incomodaría mucho la lectura del texto, porque la tabla en este caso pierde la estructura.

Por último mencionar que en un principio puede parecer un poco pesado seguir esta estructura , pero partiendo de mi experiencia personal, me ha servido para corregir relativamente rápido algunos fallos que se daban en OGStats, ya que el tiempo de localización del error se restringe mucho.

Descargar

*NOTA: todos los mensajes que muestra esta clase están marcados con la clase devInfo por si se les quiere dar algún formato en particular.

**NOTA: si haces uso de esta clase, dejases un comentario, así como si le ves algún error o tienes alguna sugerencia para las próximas versiones.

Categoría PHP, Producción propia, Programación, Web | 1 Comentario »