Entradas

Mostrando entradas de noviembre, 2010

Valores aleatorios en MySQL

MySQL tiene la función RAND() para devolver valores aleatorios y en este post lo que voy a comentar es que no es tan óptimo utilizarla en caso de que queramos un registro aleatorio de una tabla. Por ejemplo, imagina que quieres un registro aleatorio de una tabla, utilizando RAND() lo tendríamos con la siguiente query: select * from tabla orde by RAND () limit 1 Esta consulta es mucho menos eficiente que si ejecutamos la siguiente: select * from tabla limit X,1 Dónde X sería un valor aleatorio generado en un lenguaje de servidor entre 1 y el total de registros de la tabla, claro para esto necesitamos saber ese valor máximo pero si lo tienes te recomiendo que utilices la segunda consulta que es una media de 4 a 5 veces más rápida que la primera.

Comprimir y ofuscar código javascript

Imagen
Con el avance de javascript como parte cada vez más importante en el desarrollo de aplicaciones web, el comprimir su contenido y a la vez ofuscarlo para evitar ingeniería inversa son 2 procesos cada vez más habituales, pero, no todo lo que brilla es oro; aquí quiero mostrar las ventajas y desventajas de ofuscar y comprimir el código javascript de una aplicación web. Como todo en programación es relativo aquí solo me limitaré a cosas y características generales, luego cada programador debe decidir realmente lo que quiere. Ventajas de comprimir y ofuscar javascript el código resultante es mucho más ligero de descargar sin penalizar el rendimiento. haces más difícil el proceso de ingeniería inversa (aunque solo es ralentizarlo con las herramientas de desofuscación actuales) Desventajas la corrección de errores y modificación del código resulta casi imposible en código ofuscado por tanto o se tiene el código fuente y se ofusca cada vez que hay un

HTML 5, JQuery y los atributos DATA

Desde que utilizamos jquery muchas veces nos vemos obligados a crearnos atributos con nombres 'raros' dentro de tags HTML para tener almacenadas algunas propiedades extras como por ejemplo: <a id='d' href='x' numero='1' valor='3' /> En este caso numero y valor no son atributos reconocidos por los navegadores aunque con jquery si funciona $('#d').attr('numero') Para estos casos en HTML 5 se han inventado los atributos DATA por ejemplo: <li class="user" data-name="John Resig" data-city="Boston" data-lang="js" data-food="Bacon"> Donde lo que vaya despues de data- nos lo podemos inventar y estos parámetros si son reconocidos por los navegadores y jquery desde la versión 1.4.4 (la última) incorpora una función específica para los mismos: $("li").data("name") === "John Resig"; Incluso pueden definirse objetos json dentro de estos at

Diferencias entre apache 2.0 y 2.2

El otro día estuve instalando apache 2.2 y noté algunas diferencias interesantes respecto a la versión 2.0 del mismo servidor web. Librerías incluidas por defecto en apache 2.2 Ahora apache 2.2 trae instaladas por defecto las librerías xml, zip y mycrypt. Módulos sustituidos en apache 2.2 La nueva versión de apache ha sustituido algunos módulos y los ha unificado con otros que trae instalados por defecto, dichos módulos sustituidos en la versión 2.2 son los siguientes: LoadModule access_module modules/mod_access.so LoadModule auth_module modules/mod_auth.so LoadModule imap_module modules/mod_imap.so

Error ZDS: Bad escape sequence

Un error común, por lo menos para mí, cuando trabajo con el Zend Development Studio (ZDS) es el de Bad escape sequence cuando pongo el caracter “\” dentro de una cadena. Por ejemplo, imagina que tenemos: include_once “c:\archivo.php” Esta instrucción estaría correcta realmente pero el ZDS marca el error como bad escape sequence \a . La solución es muy sencilla, en vez de utilizar comillas dobles “ en la cadena debemos de utilizar comillas simples ‘, de esta forma ya el Zend no identifica esto como un error porque interpreta la cadena de otra manera. ¡Curioso!

Google Chrome intenta hacernos programar bien

Desde las versiones más recientes de Google Chrome se pueden ir observando cambios en la gestión de los códigos javascript, por ejemplo en las redirecciones. Mientras que en versiones anteriores y en otros navegadores como Firefox la siguiente instrucción redirigiría a la página 1, las últimas versiones de Chrome (8 y 9) redirigen a la página 2 en el siguiente código: if ( true ) location.replace = 'pagina1' location.replace = 'pagina2' Lo correcto sería: if ( true ) location.replace = 'pagina1' else location.replace = 'pagina2' Otra de las cosas que podemos notar es que cada vez es más estricto con el HTML y por ejemplo si tenemos unas etiquetas </script> sin cerrar con ‘>’ o sea </script ese archivo en concreto lo cargaría pero los siguientes no, por ejemplo el archivo 2 del siguiente ejemplo no seria cargado: < script type = "text/javascript" src = "archivo1" > </script <script type= &q

MySQL error number 1130

Otro de los errores clásicos al crear una nueva cuenta de hosting en un servidor cloud de 1and1 es MySQL error number 1130 host nombre del host is not allowed to connect to this server . Lo primero que tenemos que comprobar es el firewall y mirar si para el servicio de MySQL están abiertos o cerrados las conexiones externas. En los servidores cloud de 1and1 por defecto el usuario root de mysql no puede acceder remotamente por ello tenemos que crear un usuario con permisos para acceder desde un terminal remoto, esto no es recomendable pues representa una fuente más de ataques posibles a nuestro servidor MySQL pero en caso que queramos acceder desde nuestra casa a través de MySQL Center u otra herramienta remota y el firewall esté correctamente configurado tendríamos que crear un usuario para acceder. Como ejemplo os pongo esta instrucción que desde consola crearía un usuario con poderes: GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%' IDENTIFIED BY 'contraseña

Error SQL 1040: Too many connections

Imagen
La configuración por defecto de MySQL es de 100 conexiones como máximo, esto viene por defecto al instalarlo y por tanto en cualquier CentOS de 1and1. La opción max_connections la podemos editar en el archivo de configuración de mysql my.cnf que se encuentra en las distro de CentOS en /etc/. Esta opción no viene por defecto en este archivo por lo que debemos agregarla justo en el bloque de configuraciones de [mysqld] max_connections = 500 500 es el número que se pone generalmente en todos lo tutoriales pero algunas veces bastaría con 200 o 300, hay que tener en cuanta la cantidad de memoria RAM que tiene nuestro plan de hosting o servidor pues debe cumplir la siguiente fórmula para que el sistema operativo y el resto de funciones puedan trabajar correctamente: global buffers + (thread buffers * max_connections) < RAM ¿Cuáles son los global buffers de MySQL? key_buffer, innodb_buffer_pool, innodb_log_buffer, innodb_additional_mem_pool, net_buffer ¿Cuáles son los Thre

Agregando repositorios en CentOS 5

Imagen
Con el nuevo servidor cloud que he contratado he necesitado actualizar algunos paquetes por defecto de CentOS y agregar nuevos, la forma más cómoda y compatible es hacerlo con yum porque nos olvidamos de dependencias o de compilar lo que nos haga falta. La única pega de yum es que se basa en repositorios y en CentOS la verdad es que por defecto no van muy sobrados. Aquí os dejo los pasos que he seguido para actualizar mi CentOS 5, agregar nuevos repositorios y actualizar a versiones más actuales de algunos programas como PHP. Actualizando CentOS Lo primero que haremos será actualizar todo con los repositorios por defecto #yum update Luego instalaremos el pluging para yum priorities, con él podremos asignar las prioridades a nuestros repositorios instalados #yum install yum-priorities Una vez instalado tenemos que editar el archivo de configuración que se encuentra en /etc/yum/pluginconf.d/priorities.conf y poner a 1 el valor enable. Luego veremos como editar los re

Calcular el día máximo de un mes

Para celebrar el nuevo diseño del blog, por cierto muy buena la actualización de blogger para cambiar el diseño y las plantillas, os dejo esta función que según el mes te devuelve el día máximo del mes, o sea de enero el 31 y febrero si es un año bisiesto 29 y de lo contrario 28. Espero que os sirva: function dameMaximoDiaMes($mes,$anno = null){ if (is_numeric($mes) && ! empty ($mes) && $mes < 13){ $largos = array (1,3,5,7,8,10,12); $cortos = array (4,6,9,11); if (in_array($mes,$largos)) return 31; if (in_array($mes,$cortos)) return 30; if ( empty ($anno) || !is_numeric($anno) || $anno < 0) return 28; $cualquiera = "$anno-01-01" ; $biciesto = date( "L" ,strtotime($cualquiera)); return (! empty ($biciesto))?29:28; } return false; } ¿Alguna otra forma?