Entradas

Mostrando entradas de mayo, 2010

Codeplex excelentes soluciones

Imagen
Desde hace mucho tiempo utilizo la clase PHPExcel para trabajar excel con PHP y crear y leer archivos reales, alojado en este proyecto de hosting para software open source.Hoy he estado buscando un plugin para Windows Life Writer que me permitiera incluir código fuente dentro del blog y para mi sorpresa este proyecto llamado Code Colorizer también está alojado en Codeplex (ver cómo instalar Code Colorizer).Aquí podemos encontrar muchos proyectos pero los que más me han llamado la atención aparte de los dos anteriores son PHPWord y PHPPowerPoint.¡Increíble que tengamos tantos recursos para PHP y blogs de manera gratuita, me encanta la comunidad Open Source!

Evento onchange con jqtransform

En un artículo anterior hablaba sobre las deficiencias del pluging de jquery jqtransform y hoy he descubierto otra más referente al evento onchange. El error en sí es que no se puede aplicar este evento a un select modificado con jqtransform porque realmente este evento nunca es llamado, veamos que crea este plugin:<div>
<select>
<option>Prueba</option>
</select>
<ul>
<li><a>Prueba</a></li>
</ul>
</div>


El plugin se encarga internamente de modificar el evento click sobre el tag a para simular la selección en el select, por lo que nosotros si queremos simular el onchange debemos encontrar el div superior a nuestro select y luego aplicarle los cambios al evento click de los tags a que hay dentro de él.

¡Funciona!

Consejos para diseñar tu blog

Estos puntos y recomendaciones los he ido recopilando a través de la web, pueden faltar muchos pero estos consejos para diseñar tu blog son fundamentales y se deben de tener en cuenta a la hora de crear una nueva bitácora:El cuerpo del texto debe ser grande y con títulos grandes y claros.Dale un toque personal y fácilmente identificable. Hay muchos blogs igual que el tuyo. Tienes que hacer que el usuario reconozca rápidamente tu marca.Dale la máxima importancia al texto. No dejes que nada le robe atención al lector, elementos como banners, GIFs animados, etc.La longitud de la línea de lectura no debe sobrepasar los 700 píxeles, aunque suele ser mejor acortarlo hasta los 500.El usuario no debería mover la barra lateral para encontrar el contenido. Haz que sea lo primero que vea al entrar en tu página.Intenta que tus páginas validen según los protocolos. Si no es posible acércate lo máximo.Haz que sea visible para la mayoría de los navegadores incluyendo otras plataformas como dispositi…

¿Por qué eliminamos un blog?

Estas causas que voy a poner a continuación son basadas meramente en mi experiencia personal, imagino que existan más motivos por los que darse de baja de un feed de un blog pero estas son por las que yo me he dado de baja de algunos, las ordenaré por preferencia y gravedad:el blog ha dejado de existirla temática del blog ha cambiado (muchos editores una vez tienen un número de usuarios suelen cambiar la temática original de su blog)en los feeds solamente aparece una muestra del texto y no el artículo completo (a mi personalmente esto me molesta muchísimo, creo que es penalizar a tus usuarios habituales solo por ganar una visita a tu web)saturación de feeds (algunas veces no nos compensa tener tantos feeds diarios de un tema que realmente no nos interesa del todo, si este blog tuviera menos actualizaciones es muy probable que siguiéramos leyéndolo)por discrepancias con los editores del blog o por sentirse ofendido y maltratado por estos (no es muy habitual pero puede darse el caso que…

Comparar con cero en php

PHP tiene mucha flexibilidad y muchas herramientas para comparar valores aunque no deja de tener algunas particularidades especiales a la hora de tratar los valores vacíos, por ejemplo si tenemos:a = ‘’;si hacemos a == 0 esto devolverá true y si hacemos (int)a === 0 también devolverá true.Con ello sacamos la conclusión de que el valor vacío de una cadena al llevarlo a valor numérico es cero. Como otro ejemplo si tenemos un formulario el cual tiene valor 0 (un input de texto por ejemplo, aunque es válido para todos) al recibirlo nuestro script en PHP tendríamos que:si hacemos $_POST[‘variable’] === 0 esto daría false tenemos que compararlo de esta forma $_POST[‘variable’] === ‘0’ (como cadena).Concluyendo: si utilizamos el operador == los siguientes valores son iguales 0, ‘0’, (int)’’, ‘’, FALSE, false. En cambio si utilizamos el operador === todos estos valores son distintos salvo (int)’’ que si es igual a 0.

Convertir números romanos en PHP

He reutilizado una clase en PHP de Víctor De la Rocha que convierte números romanos en arábigos y viceversa para agregarles nuevas funciones y compatibilidad con PHP 5, si necesitas una clase que:convierta de números romanos a arábigos (números normales)convierta de decimales a números romanosvalide números romanosEntonces esta es tu clase y puedes descargarla en el enlace: clase para convertir números romanos a decimales.Nota: se puede utilizar tanto como un objeto o como funciones estáticas. La función para saber si un número es romano o no utiliza expresiones regulares a la hora de validar los números romanos introducidos.

¿Por qué utilizar PHP 5.3?

PHP 5.3 recién está en sus primeras versiones preliminares, pero para aquellos que corren PHP en servidores Windows, hay algunas importantesnovedades en las notas de lanzamiento de sus binarios oficiales:Se abandona el soporte de versiones de Windows anteriores a Windows 2000. Quienes todavía usen Windows 98, Me o NT y planean usar PHP 5.3 deberán primero actualizar su sistema operativo. Hasta ahora, PHP para Windows ha sido compilado con Visual C++ 6 (VC6), que fue lanzado en 1998. A partir de PHP 5.3 habrá dos binarios de PHP para Windows: si uno usa extensiones hechas por terceros o el servidor Apache, necesita usar el binario compilado con VC6. De otra manera puede usar el compilado con VC9. Los binarios de las futuras versiones de PHP serán compiladas solo con VC9. Binarios de 64 bits serán ofrecidos en forma experimental y todavía no deberían ser usados en entornos de producción.

PHP Non-Thread Safe vs Thread Safe

Actualmente las versiones de PHP se están distribuyendo como Non-Thread Safe (NTS) y Thread Safe (TS), veamos en que consiste cada una:Thread Safe (TS) es una característica que permite optimizar PHP para un entorno MultiHilo (Windows) y no Multiproceso (Linux) , siendo así mas efectivo en Apache para Windows ya que permite, dicho de una forma totalmente ambigua, cargar todo el ambiente de PHP y mantenerlo en la memoria para todos los hilos que lo necesiten. Esto sin embargo generaba problemas varios en ISS al ejecutar PHP como ISAPI ya que muchas extensiones estaban hechas pensado en el modelo Multiproceso (Linux) y obligaba a utilizar PHP como CGI, esto lo hacía más estable pero exageradamente más lento debido a que tiene que cargar y descargar de la memoria el ambiente completo de PHP en cada requerimiento o proceso.Lo que Non-Thread Safe (NTS) permite es configurar ISS y otros servidores basados en el modelo de Windows (MultiHilo) para que usen PHP como CGI pero mejorando increíbl…

Plugin jquery jqtransform, errores

Embellecer formularios es una tarea bastante dura con HTML, actualmente hay innumerables plugins para hacer este tipo de tareas pero el que he encontrado más sencillo de implementar y utilizar es jqtransform para jquery, aunque no está exento de fallos o de deficiencias notables, por ejemplo:al cargarse los estilos de los formularios si un select es modificado por ajax los nuevos option no se muestran, hay que crear un código especial para agregar los nuevos option de manera que sean compatibles (yo no lo he hecho) el plugin autocomplete de jquery ui no muestra la imagen de carga al procesar los datos, esto supongo que sea porque sobre escribe los estilos y no muestra la imagen. el mismo plugin anterior no redimensiona correctamente el tamaño del input dejándolo más pequeño, a un tamaño de 16 px por lo que antes de escribir debemos utilizar el método width de jquery para cambiar el tamaño del input a uno más grande. Para solucionar el punto 1 intenté primero modificar el plugin jqtransfo…

Plugin de jquery ui: autocomplete

Me gustó mucho que en la nueva versión de jquery incluyesen esta nueva funcionalidad autocomplete pero aún me parece un poco escasa la documentación en castellano para ella, la he utilizado y no es difícil pero lo malo es que en caso de error no se puede visualizar nada para saber a que se debe, algunas cosas que me he topado son las siguientes:en la distribución oficial no está incluido el archivo ui-anim_basic_16x16.gif necesario en el estilo de este plugin cuando está buscando los datos en archivo search.php de la demo incluye una función array_to_php que es posible utilizarla con versiones de php anteriores a la 5, pero para 5+ es mejor utilizar la propia función de json_encode de PHP. admite 2 tipos de array para convertirlos a json, el array normal de toda la sin índices y un array con cada valor que es un array con 3 claves id, label y value (ejemplo[] = array (‘hola’,’hi’,’hello’) ó array_push(array(‘id’=>’MAD’,’label’=>’Madrid, España’,value=>’Madrid’))), en el primer …

Claves externas en mysql, notas

No cabe duda que para garantizar la integridad en una base de datos es imprescindible utilizar claves extranjeras (foreign keys, claves externas, etc.), pero a la par con su importancia está su difícil manejo en algunas ocasiones y sumado esto a la escases de información referente a errores de mysql muchas veces nos encontramos desamparados a la hora de crear tablas con este tipo de claves.Para evitar errores del tipo Can't create table (errno: 121), que no te dicen nada, debemos tener en cuenta los siguientes aspectos a la hora de crear foreign keys:los campos de origen y destino deben ser del mismo tipo, misma longitud y con los mismos atributos (si uno es unsigned el otro también, si es int (3) el otro debe ser int y con longitud 3 también) los campos de origen y destino ambos deben ser índices (algunas aplicaciones al crear la clave ya te crean el índice en el campo origen pero el campo de destino siempre tienes que crearlo como índice, no es necesario que sea una primary key s…

Errores con load data infile en mysql

Hoy he tenido que utilizar este comando para importar un simple archivo csv del estilo:campo1;campo2\r\nTodo sería muy sencillo si este comando no fuera tan flexible y a la vez complicado de utilizar. Lo primero que me pasó fue el ERROR 1045: Access denied for user: 'x@%' (Using password: YES), esto e sun problema de permisos del usuario en cues´tión, para ahorrar tiempo cambie el usuario y puse el root y solucionado, si alguien sabe el permiso específico por favor que lo ponga.Otro problema es la ruta del archivo que debe ser absoluta porque sino mysql toma por defecto el directorio de instalación de mysql, por ejemplo si pones ../import/file.csv en interpreta que está en c:\wamp\bin\mysql\mysql5.1.34\import\file.csv siendo c:\wamp\bin\mysql\mysql5.1.34\ la ruta de mi instalación de mysql y nos daría un error del tipo:29: File 'c:\wamp\bin\mysql\mysql5.1.34\import\idiomas.csv' not found (Errcode: 2)En caso de que estés sobre Windows y lo hagas desde un script en php d…