Entradas

Mostrando entradas de 2014

Sustituir alertas del navegador con jQuery UI

Imagen
Antes que nada decir que reemplazar la funcionalidad de las alertas del navegador con código JavaScript nunca es 100 % compatible, por citar un (y el más importante) ejemplo la ejecución del script no se detiene cuando utilizas librerías JavaScript para sustituir alertas.Teniendo en cuenta lo anterior existen 2 opciones para embellecerlas con jQuery, utilizar librerías externas o utilizar los propios cuadros de diálogos de jQuery UI. Si trabajas con esta última librería sería absurdo utilizar otro plugin para recargar aún más nuestro código. Además que muchas de las librerías (como la de jAlert) no están actualizadas con las últimas versiones de jQuery lo que nos obligaría a utilizar la librería extra de migración.Pero hacerlo con jQuery UI no es tan trivial como parece, hay que tener en cuenta un par de cosas importantes:auto foco, los cuadros de diálogo de jQuery UI tienen el foco puesto automáticamente en el primer elemento enfocable de nuestro html, lo cual puede que no sea nada d…

Uso básico de MomentJS

Imagen
El uso de fechas para cualquier lenguaje de programación es algo básico y en JS, siendo del lado del usuario, su uso, validación e internacionalización es más que importante.El objeto Date de JavaScript es bastante básico y aunque hay clases que extienden sus funcionalidades aún no es suficiente. Para ello existe una librería muy útil llamada momentjs.La documentación esta bastante bien pero aún así hay muchos ejemplos que no me quedan claros. Por ejemplo a la hora de crear un nuevo objeto lo podemos hacer de la siguiente forma:moment(value, "MM/DD/YYYY")o con varios formatos posiblesmoment(value, ["MM/DD/YYYY", “DD/MM/YYYY”])Es muy importante que las letras sean en mayúsculas porque el horario se define con letras en minúscula por ejemplo m.format('MM/DD/YYYY HH:mm'), asumiendo que m es la variable resultante del constructor anterior.Se pueden concatenar funciones por ejemplo si queremos validar un campo de un formulario con un formato de fecha específico …

PHP rendimiento curl vs file_get_contents

Imagen
Una de las opciones para mejorar la seguridad de nuestro código que planteaba en el post asegurar php desde el archivo de configuración era la de evitar que archivos remotos pudiesen ser abiertos o incluidos desde nuestro código fuente, también comentaba que una de las consecuencias directas era la imposibilidad de utilizar file_get_contents para abrir urls.Después de realizar varias pruebas internas utilizando ambas instrucciones para obtener un json de una página externa a mi sitio veo que no solo es en seguridad que ganamos sino en rendimiento, desde mi código he podido constatar que utilizar curl es de media un 30 % más rápido que llamar directamente a file_get_contents.Haciendo una búsqueda luego de ver estos resultados (que todo sea dicho fueron hechos con una versión de PHP muy antigua la 5.2.1) he encontrado que hay otros usuarios a los que les ha pasado lo mismo y han obtenido resultados muy similares a los míos.La función que utilicé está dentro de una clase con lo cual gané…

Traducir sitio con PHP

Imagen
Cuando trabajamos con un sitio que debe estar disponible en  varios idiomas hay múltiples alternativas para traducirlo en PHP pero todas básicamente se basan en incluir un archivo de idioma y sustituir cada frase por su equivalente.Cuando tenemos que traducir un sitio deberíamos plantearnos seriamente la internacionalización del mismo ¿qué es? Básicamente es no solo traducir el texto sino mostrar fechas y configuraciones regionales según el idioma elegido. La mejor herramienta para esto es la extensión de PHP gettext, herramienta que aún no he probado pero que sospecho tendrá un rendimiento más que aceptable y mucho mejor que el resto de opciones que veremos en este post. Lo único malo de esta librería y precisamente será lo que garantice su rendimiento es el uso de la cache para almacenar los idiomas con lo cual cualquier actualización requeriría un reinicio de apache, cosa que en muchos casos no es viable salvo que tengamos un servidor dedicado.Os prometo que intentaré implementar e…

Asegurando nuestro servidor Apache

Imagen
Tan importante como asegurar y proteger nuestro código PHP es asegurar y proteger el servidor sobre el que corre, en la mayoría de los casos apache. En este fantástico tutorial en inglés nos dan 13 pautas para tener un servidor apache más robusto e incluso algo optimizado.Ocultar las versiones del sistema operativo y de apache. Quitar la posibilidad de listar directorios. Mantener siempre nuestro servidor apache actualizado. Eliminar módulos innecesarios. Tener un grupo y un usuario diferente que corran apache en entornos linux. Restringir el acceso a directorios. Utilizar los módulos security y evasive para evitar ataques de denegación de servicio. En este enlace tenéis como instalar mod_evasive en entornos xampp y en este encontrareis versiones para diferentes compilaciones de apache. No permitir los enlaces simbólicos. Des-habilitar la inclusión del lado del servidor y la ejecución de scripts CGI. Limitar el tamaño de las solicitudes. Protegernos de ataques DDOS endureciendo y configurando a…

MySQL server has gone away

Imagen
El error MySQL server has gone away es bastante común cuando intentamos restaurar nuestra base de datos en otra configuración o a veces cuando ejecutamos consultas que consumen demasiados recursos.Las dos razones más comunes (y sus posibles soluciones) para el error número 2006 son:El servidor agota el tiempo de espera y cierra la conexiónEL tiempo de espera de MySQL se gestiona desde la la variable wait_timeout en el archivo de configuración my.cnf. Este valor admite un número entero que representa los segundos que el servidor esperará para terminar una operación.El servidor elimina paquetes incorrectos o demasiado grandesSi MySQL recibe un paquete que es demasiado grande o incorrecto, presupone que algo ha ido mal con el cliente y cierra la conexión. El tamaño de los paquetes que puede gestionar MySQL se puede aumentar gracias a la variable max_allowed_packet, también en el archivo my.cnf. El valor suele ser una cadena con el tamaño que es un número entero y la unidad de medida, por…

Asegurar PHP con php.ini

Imagen
En el post anterior vimos como podemos establecer las directivas de PHP para cada subdominio, ahora toca asegurar y proteger nuestro código PHP utilizándolo.Voy a remitiros a este fantástico manual en inglés en el cual dan las pautas para asegurar, proteger y endurecer nuestras páginas PHP con directivas de configuración que no vienen habilitadas por defecto.Modo seguro (obsoleto desde PHP 5.4) Restringir los directorios desde donde podremos incluir archivos PHP y trabajar con ficheros (escritura, lectura), en resumen limitar el acceso de PHP al sistema de archivos. Deshabilitar funciones peligrosas como eval. Evitar que se muestre errores en pantalla Deshabilitar register globals (obsoleto desde PHP 5.4) Evitar que archivos remotos puedan ser abiertos e incluidos con PHP, la consecuencia más drástica de esto es que la función file_get_contents no podrá recibir nada con el protocolo http como parámetro, en su lugar deberemos usar curl. Restringir la subida de archivos y de no ser posib…

Configurar PHP para cada subdominio

Imagen
Por defecto, los ajustes del archivo de configuración de PHP (php.ini) se aplican a nivel global, por servidor si es dedicado o por usuario si es compartido. Muchas veces es posible que necesitemos sustituir esta configuración predeterminada para un subdominio o subdirectorio, para hacerlo debemos hacer lo siguiente:copiar el archivo php.ini a nuestro subdominio editar o crear un archivo .htaccess e incluir la siguiente línea SetEnv PHPRC. editar el archivo php.ini con las características que queramos. Con estos 3 pasos quedaría configurado un archivo php.ini para nuestro subdominio independiente de la configuración global de PHP pero este archivo sería visible con lo cual debemos protegerlo con el mismo archivo htaccess:<Files ~ "\.ini$">
        Order allow,deny
        Deny from all
</Files>Esto denegará cualquier solicitud web a cualquier archivo en ese directorio que termine en .ini; evitando así que la configuración de PHP pueda ser vista por otros.Ahora tienes u…

El modo pasivo de FTP en PHP

Imagen
Antes de cualquier explicación debemos saber las diferencias entre el modo activo y el modo pasivo en FTP. Podemos decir, resumiendo mucho, en modo pasivo las conexiones son siempre abiertas por el pc cliente, mientras que en modo activo se abren por el que envía los datos, el servidor si se trata de bajar archivos o información al pc local, el cliente si se trata de subir archivos al servidor.Tendiendo lo anterior en cuenta en el modo activo se abre una conexión para datos desde el servidor a la maquina cliente, esto es, una conexión desde fuera hacia dentro; si la maquina cliente está protegida por un firewall, este filtra o bloquea la conexión entrante al serle un proceso desconocido. En modo pasivo es el cliente el que inicia ambas conexiones, de control y de datos, con lo cual el firewall no tiene ninguna conexión entrante que filtrar. Por este motivo la razón de que algunas funciones de PHP nos funcionen en un servidor u otro con el mismo código no depende de la versión instalad…

Windows 10 Technical Preview actualiza solo archivos

Imagen
Existe una limitación a los usuarios que actualicen versiones Enterprise:If you’re running Windows 8.1 Enterprise, Windows 8 Enterprise, or Windows 7 Enterprise and your system language isn't English, Chinese Simplified, or Brazilian Portuguese, you can only keep your personal files when you upgrade. You won't be able to keep your apps or Windows settings.Esto no solo se aplica a estas versiones sino también a licencias por volumen de Windows 8.1 Profesional en idiomas que no sean los del paquete de instalación.La traducción del texto de Microsoft sería la siguiente:Si está ejecutando Windows 8.1 de Enterprise, Windows 8 Enterprise o Windows 7 Enterprise y el idioma del sistema no es el Inglés, chino simplificado, portugués o brasileño, sólo se puede mantener sus archivos personales cuando se actualiza. Usted no será capaz de mantener sus aplicaciones o la configuración de Windows.Espero que os sirva, los usuarios de versiones en español tendremos que esperar.

DateJS y jQuery UI Datepicker

Imagen
La librería DateJS es una interfaz muy intuitiva para trabajar con fechas en JS, sobre todo internacionalizar las mismas y escribirlas en diferentes idiomas. Trabajando con ella me he dado cuenta que tal y como la descargamos es incompatible con la extensión de jQuery UI Datepicker produciendo el error Maximum call stack size exceeded error al llamar a la función toString que esta librería sobre escribe.Para corregirlo basta con editar el archivo date.js y reemplazar las apariciones de toString por print (es el nombre que escogí yo) salvo en la línea 40 donde aparece s.toString. Con estas modificaciones ya podremos trabajar con ambas características.

Waze vs Tom Tom

Imagen
Hace pocos días comencé a utilizar Waze, una de las aplicaciones de tráfico basada en una comunidad de más de 25 millones de usuarios. Al venir de Tom Tom, el navegador GPS que siempre he utilizado, noto muchas diferencias, algunas para bien y otras no tanto.La peor desventaja que le veo a Waze es que todo es online, de ahí que su instalación solo ocupe 73 MB contra los 430 MB de Tom Tom Iberia. Al ser online el cálculo de rutas en zonas con poca cobertura es prácticamente imposible, aunque con GPRS suele calcularlas medianamente rápido. El consumo de datos de nuestra cuenta también se dispara, en un año Tom Tom ha consumido 8,8 MB mientras que WAZE en 3 semanas lleva descargados 76,7 MB. El roaming y otros gastos asociados a tarifas de las operadoras son otra pega aunque al ser gratis la aplicación puede que nos compense más que los 39,99 € que cuestan Tom Tom Iberia sin suscripción a tráfico ni radares.NOTA: al ser todo online tiene la ventaja de que no es necesario descargarte mapa…

Trabajar con Excel en SQL Server

Imagen
Muchas veces necesitamos obtener datos desde un Excel e importarlos en una tabla de nuestra base de datos o sencillamente utilizarlos con alguna consulta, si este es tu caso este tutorial te puede ayudar a trabajar con archivos Excel como si fueran una base de datos y cada una de sus hojas como una tabla.Lo primero que tienes que tener instado en el servidor donde está SQL Server (no vale en la máquina remota donde haces las consultas) es el Office o en su defecto 2007 Office System Driver Data Connectivity Components (solo 32 bits) o Microsoft Access Database Engine 2010 Redistributable (versiones de 32 y 64 bits). Es muy muy importante tener esto instalado para evitar el siguiente errorThe OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered. Más importante aún es tener la versión correcta, si tu SQL Server es de 64 bits solo puedes instalar de 64 bits, si es de 32 bits lo mismo, en caso contrario tendrías el siguiente error OLE DB provider 'Microsoft.ACE…

Convertir UTF8 a LATIN1 en MySQL

Imaginemos que tenemos una base de datos con una tabla codificada en UTF8 y otra base de datos codificada en LATIN1, ambas tablas las queremos unir en una consulta y la latin1 es la principal ¿cómo sacar los datos codificados en UTF8 en formato legible con LATIN1? CONVERT(CAST(CONVERT(campo_tabla USING latin1) AS binary) USING utf8)Espero que les valga.

Funciones actualizadas en PHP 5.5

Imagen
En un post anterior vimos las nuevas funcionalidades que PHP 5.5 introduce, en este vamos a ver cambios que se han hecho en funciones ya existentes como por ejemplo la combinación de foreach y list, las mejoras en la función empty, el comportamiento de unpack y la eliminaciones de funciones previamente deprecadas.Combinando foreach con listComo desarrollador, una de las tareas comunes que veo de forma regular es el uso de loops en un conjunto de resultados. Dependiendo de las circunstancias, es posible que tenga que asignar un grupo de variables a valores de propiedades o valores de una matriz. Hasta este momento ha sido un proceso manual, pero en PHP 5.5 es posible asignar estos valores directamente utilizando la función list. Esto me permite recorrer el vector y desempacar matrices anidadas en variables en un bucle. Solo hay una limitación, no puedo utilizar la lista como un elemento clave.Quedaría algo como este foreach($row as list($var1, $var2)).Comprobar cualquier cosa con empty…

jQuery Mobile primeras impresiones

Imagen
Hoy he tenido que desarrollar una aplicación sencilla para móviles y aprovechando uno de los cursos online de lynda.com he decidido poner en práctica lo que sabía de jQuery Mobile y estas son mis primeras impresiones.DocumentaciónEsto es lo primero que me chocó, la documentación de jQuery Mobile es mucho más deficiente a lo que nos tiene acostumbrado jQuery en sus dos grandes proyectos, incluso con incoherencias o falta de datos en algunos temas como la función jqmData (algo equivalente al data de jQuery). Algunos aspectos me parecían difíciles de entender, los ejemplos poco claros y los códigos fuente con falta de información.TemasLo de los temas es otro mundo, en una misma distribución de jQuery Mobile utilizas varios temas y la personalización de estos si bien es muy similar a jQuery UI no me ha quedado del todo claro.ComportamientoLo que peor llevo es cómo funciona jQuery Mobile, es totalmente diferente a jQuery, todo se basa en atributos data que son los encargados de automáticam…

Firefox Error code: sec_error_unknown_issuer

Imagen
Si cada vez que intentas acceder a una web con conexión segura SSL bajo https y te da el error This Connection is Untrusted es altamente probable que tu antivirus tenga algo que ver.En la siguiente imagen vemos el error al entrar acceder a la página principal de Facebook:es-es.facebook.com uses an invalid security certificate. The certificate is not trusted because no issuer chain was provided. (Error code: sec_error_unknown_issuer) Para corregir esto debemos ver el origen del error, el por qué. Pulsamos el botón para añadir una excepción que se encuentra debajo la parte inferior de la ventana al pulsar en entiendo los riesgos. En esta nueva ventana pulsaremos el botón para ver el certificado.Allí nos mostrará toda la información relacionada con el certificado de seguridad y podremos seguramente sacar el origen del error, en mi caso por ejemplo si. Lo que me llamó la atención es que estuviese el nombre de mi antivirus asociado al certificado con lo cual haciendo una búsqueda por intern…

TeanViewer 9 y el reinicio en modo seguro

Imagen
TeamViewer es la aplicación por excelencia para el control remoto de ordenadores, gratis para uso no comercial, y entre sus funcionalidades esta forzar el reinicio del ordenador asociado en modo seguro (safe mode) con funciones de red.Pero cuidado, si no configuramos correctamente luego nuestro ordenador, este no volverá a reiniciarse ni iniciarse de manera normal porque TeamViewer sobre escribe los datos de inicio de nuestro sistema operativo, para cambiarlo basta con ejecutar msconfig y quitar el check en la pestaña de Arranque al Arranque a prueba de fallos.Espero que os sirva y no tengáis que buscar tantos manuales como yo por el reinicio en bucle de Windows en modo seguro (safe mode). Yo lo he probado en un Windows 7 SP1 supongo que el resto sean igual.

Nuevas funcionalidades en PHP 5.5

Imagen
Una vez que hemos visto todas las ventajas que nos puede traer PHP 5.4 y sabiendo que esta no es la última versión estable sería interesante ver cuáles son las ventajas de esta para una vez decididos migrar optemos por una u otra.GeneradoresUna de las necesidades de programación más comunes, es ser capaz de realizar una acción sobre todos los elementos de un objeto. Por ejemplo, usando un foreach en una matriz, para obtener cada clave o, un foreach sobre un objeto, para obtener el nombre de cada parámetro y su valor. El mecanismo para la aplicación de este comportamiento es conocido como un iterador, que se utiliza para recorrer todos los elementos de un objeto o una matriz. Los iteradores se pueden definir de forma explícita con clases personalizadas, pero eso puede ser un proceso difícil de manejar y complejo, con apaños y, más que un puñado de funciones.¿Qué pasa si quiero actuar en un subconjunto de una matriz, y realizar algo de lógica a medida que avanzo, pero aún así ser capaz …

Problemas de espacio en Windows 8.1

Imagen
Realmente todas las posibles causas de aumento descontrolado del espacio ocupado en el disco duro que voy a tratar aquí se pueden aplicar a cualquier sistema Windows, incluso en los casos de software a cualquier sistema que los tenga instalado.Las pruebas siguientes fueron hechas en 2 ordenadores con Windows 8.1 y con discos duros limitados en espacio con lo cual cada GB cuenta, es por ello que he decido monitorearlos porque me parecían demasiados los recursos que se estaban consumiendo, lamentablemente en la mayoría de los casos no hay mucho que hacer, pero, primero a lo primero.Para monitorizar el espacio ocupado por cada carpeta he decidido utilizar la herramienta basa en Java, JDiskReport, y digo basada en Java porque necesitaremos la máquina virtual de este lenguaje para poder ejecutarla, generalmente se agrega la ubicación de Java al PATH de sistema pero en caso de que no se encuentre el archivo javaw.exe lo encontraremos en C:\Program Files (x86)\Java\jre7\bin.Una vez activo y …

CentOS 6.5 con Hyper-V

Imagen
Instalar CentOS 6.5 con Hyper-V es igual a crear una máquina virtual cualquiera en Hyper-V y luego seguir la instalación de CentOS 6.5 paso a paso. El único problema que nos puede dar es que antes de crear cualquier máquina virtual tenemos que crear un switch (conmutador) virtual para que tanto nuestro equipo como el equipo virtual se comuniquen con internet (o también puede ser una red interna si no necesitamos salida a internet en el equipo virtual).Configurar un switch virtual para el acceso a internet en Hyper-VExiste un asistente para crear estos conmutadores virtualesEn la nueva ventana elegimos el nombre y seleccionamos el dispositivo físico de red al que nos queremos conectar. Nos saltará un mensaje de alerta que vamos a perder la conectividad pero le damos aceptar y esperamos que lo instale.Con estos tutoriales que pongo de enlace al principio y estas recomendaciones para crear el switch virtual no creo que tengáis ningún problema creando un CentOS 6.5 u otro sistema operativ…

Virtualización con Hyper-V en Windows 8.1

Imagen
Tanto en Windows 8 como Windows 8.1 disponemos de acceso a la plataforma de Hyper-V y sus herramientas de administración. Esta característica no viene instalada por defecto aunque si por algún casual hemos instalado previamente Visual Studio Ultimate 2013 en el proceso de instalación se instala Hyper-V y una máquina virtual para probar aplicaciones móviles con Windows Phone.Bueno, volviendo al tema, aquí os dejo una excelente guía para instalar Hyper-V en Windows 8, totalmente válida para Windows 8.1. Si bien es cierto que puede que todo no sea un camino de rosas a veces, si por ejemplo no puedes marcar la opción: Plataforma de Hyper-V, y, al ponerte sobre ella sale el mensaje: No se puede instalar Hyper-V: la compatibilidad con la virtualización esta deshabilitada en el firmware; es muy probable que lo tengas deshabilitado en la BIOS.Para comprobar si tu sistema efectivamente soporta la virtualización tenemos la herramienta coreinfo que hay que ejecutarla como administrador en una pa…

¿Herencia múltiple en PHP 5.4?

Imagen
La herencia es uno de los elementos clave de la programación orientada a objetos. Existen la herencia múltiple, herencia simple y la herencia horizontal, dependiendo del número de clases que una clase puede heredar o incluir. La herencia simple es la más sencilla y legible, pero restrictiva. La herencia múltiple en cambio es compleja, pero permite una definición más natural de las relaciones entre las clases. La herencia horizontal es un nuevo concepto introducido con PHP 5.4, a mi entender un parche, que permite a este lenguaje de herencia simple reutilizar código.Los lenguajes de programación orientados a objetos nos proporcionan, a parte de naturalidad al escribir código, la reutilización del mismo; de ahí que una de las principales ventajas sea el concepto de herencia. A través de la herencia podemos crear clases padres que contienen la funcionalidad básica, y luego una nueva clase que extienda a esta donde heredaremos todas sus características, propiedades y métodos. Sin embargo,…

Pequeños cambios en PHP 5.4

Imagen
Veamos algunos de los muchos pequeños cambios realizados en el entorno de PHP 5.4. Cada uno de ellos por sí solo no justificaría un artículo independiente, pero es mejor asegurarse de ellos para que la transición a PHP 5.4 desde versiones previas no se convierta en un quebradero de cabeza.Hay una gran cantidad de cambios que se hicieron en esta actualización y algunos de ellos implican la eliminación por completo, no sólo desuso, de funcionalidades utilizadas por versiones anteriores de PHP que ya no serán compatibles, y de utilizarse obtendremos errores en nuestros archivos. Uno de estos elementos es el modo seguro.Algunas aplicaciones utilizan el modo seguro para el manejo de la seguridad en la interacción con el sistema de archivos. Esta herramienta fue creada principalmente para entornos de alojamiento compartido, pero se ha determinado que este tipo de seguridad es mejor manejarla dentro del propio servidor web o el sistema operativo. Sin embargo, eso no quiere decir que necesari…

Evolución de divisas respecto al euro

Imagen
Es un poco off topic pero recopilando datos del Banco Central Europeo desde 2007 (para el dólar) y 2009 (yen y libra) he decidido crear un par de gráficos dónde se puede ver la evolución de las cotizaciones de estas monedas respecto al euro. Todos los cambios representan el equivalente a 1 euro.Aquí os dejo las gráficas para que puedan sacar sus propias conclusiones.Gráfico comparativo con los cambios del euro a dólar, yen, libra desde 2009 a la fechaGráfico comparativo con los cambios del euro a dólar desde 2007 a la fecha

Novedades en PHP 5.4

Imagen
En el post anterior vimos por qué actualizar a PHP 5.4 en cuanto a factores de optimización del núcleo central, pero, ¿qué novedades trae esta nueva versión?Servidor web incorporadoUno de los cambios más grandes en PHP 5.4 es la adición de un servidor web incorporado. Esto nos permite utilizar PHP sin tener que instalar Apache o IIS y poder probar nuestro sitio en un instante. No es un súper servidor robusto, pero es genial para el manejo de un cierto desarrollo y pruebas en una sola máquina. Con el fin de iniciar el servidor web, la forma más fácil es navegar a la carpeta raíz de PHP y, a continuación, ejecutar PHP usando el flag S.Este servidor utiliza la carpeta public_html como raíz de los contenidos por ello debemos de crearla bajo la carpeta principal de PHP y allí ubicar todos los archivos de nuestro sitio web.php –S localhost:80En caso de que nos salga el siguiente error failed to listen on localhost:80 (reason:Permission denied) es porque otra aplicación está utilizando este …