Preparando la versión 2.1 del plugin UserAgent theme switcher

24 mayo, 2011 por Juan 3 comentarios »

Estoy trabajando en la nueva versión del plugin de wordpress User Agent Theme Switcher. El plugin para la gestión de diferentes navegadores móviles, de escritorio, etc. que permite cambiar el template de wordpress entre los diferentes navegadores.

Las mejoras propuestas para esta nueva versión son:

  • Añadir WordPress como useragent reconocido y no generar alerta, aunque no sera incluido como opción configurable, ya que será solo para pingbacks y trackbacks
  • Nuevos navegadores para iPad y Kindle gracias a la colaboración de ovi_mihai
  • Nuevos bots configurables con GoogleBot y GoogleBot mobile

Espero tener listos los cambios en las próximas semanas. Gracias a todos los que enviaron los useragents no soportados y a aquellos como ovi_mihai que ayudaron con el código.

Selectores dobles con JQuery, aumentando el rendimiento de JQuery

12 abril, 2011 por Juan 4 comentarios »

JQueryA menudo suele pasar que al comparar diferentes librerías de Javascript, se habla de JQuery como una librería de muy fácil manejo por utilizar selectores DOM y de CSS pero a la vez se dice que por esto es mas lenta que el resto. Mi objetivo con este artículo no es explicar los diferentes tipos de selectores de JQuery sino como aumentar el rendimiento de JQuery utilizando selectores dobles de contexto.

En JQuery aparte de otras formas como objetos DOM y similares, lo normal es realizar un selector apuntando a una clase de CSS o un id. Antes de nada, comentar que el uso de clases en los selectores de JQuery, es recomendable omitirlo siempre que sea posible (no siempre se puede), ya que JQuery espera encontrar varios nodos y por tanto evaluará todo el código, por lo que es mas lento que utilizar ids, que una vez lo encuentre, dejará de buscar. Tras este miniconsejo de rendimiento de JQuery, me gustaría comentar como funcionan los selectores dobles de contexto de JQuery.

Normalmente  para hacer una selección en JQuery, hacemos algo tal que $("selector") y seleccionamos el objeto de JQuery. Un selector doble o selector de contexto es básicamente una especie de cache, un contexto donde buscar ese selector pero no en toda la página, sino en una parte de esta. Para utilizar un selector doble o selector de contexto, lo que hacemos es enviarle un parámetro extra a la consulta de selección. En mi caso me gusta enviar un objeto de JQuery que intento cargar en memoria al cargar la página, sacrificando tiempo de carga por velocidad a la hora de interactuar con la propia página. Para utilizar un selector doble o selector de conexto lo que hacemos es por ejemplo hacer $("selector", objetopreseleccionado), de esta forma, JQuery no buscará el selector en toda la página, sino que se centrará en el contexto donde se encuentra lo preseleccionado.

Para que todo quede un poco mas claro, voy a poner un ejemplo, partamos de la idea que tenemos la página partida en 4 sectores, una cabecera, un contenido dividido en menú lateral y contenido en si, y un pie. Todas estas partes cambiarán dinámicamente, así que al realizar el document ready cargaremos en variables las diferentes secciones de la web con la idea de realizar operaciones de una forma mas rápida y consumiendo menos recursos de procesador al cliente, que ya sabemos que el javascript puede ralentizar mucho una página si no se hace con cuidado.

var header, footer, menu, content;
 
$(document).ready(function($) {
  header = $("#header");
  footer = $("#footer");
  menu = $("#menu");
  content = $("#content");
}

Una vez que hemos cargado en memoria las diferentes secciones de la web, podremos trabajar con eventos, modificaciones y efectos de una manera mucho mas eficiente, realizando las llamadas utilizando en los selectores esas variables como contexto de JQuery.

$("#logo", header).html("mi html");
$(".article a", content).click(function() { .... });

Si utilizamos los selectores de JQuery como en el ejemplo anterior, usando un contexto para la búsqueda, ahorraremos muchísimo tiempo de proceso porque JQuery no tendrá que buscar en todo el documento, sino que lo realizará en base al contexto que le indiquemos. Quiero aclarar que como todo, hay que estudiar cuando usar o no usar contextos, ya que si la página es muy pequeña no merece la pena cargar en memoria las diferentes secciones, pero si la página es bastante grande y con muchos datos, podemos acelerar el uso de JQuery y aumentar el rendimiento de JQuery en un 250%.

Router Wifi en el móvil o como salir de un apuro sin internet

17 marzo, 2011 por Juan 2 comentarios »

WifiDesde que tengo un móvil de HTC con Android, nunca pense en que iba a utilizar una aplicación llamada "Router Wifi", hasta la otra noche. "Router Wifi" es una aplicación, en mi caso de HTC para Android, aunque ya casi todos los móviles modernos disponen de alguna opción similar y que básicamente, lo que hace es simular un router como el que podemos tener en casa pero utilizando el teléfono móvil y su red 3G. Al activar esta aplicación se genera una red wifi, a la cual podemos conectarnos desde otros dispositivos entre ellos un portátil.

Os pongo en contexto: 2:30 de la madrugada, subiendo los últimos cambios de un proyecto y pensando en ir a dormir ya que al día siguiente toca estar a las 7 en pie. Cuando solo queda un archivo por subir pero quizás sea mas importante que el resto de archivos que ya había subido, el FTP deja de funcionar, pero me fijo y no funcionaba internet. Me voy del despacho al salón, reinicio el router de Telefónica pero sigue sin funcionar, pero no podía acostarme sin subir ese último archivo.

HTC Android Router Wifi

Medio desesperado y sin saber que hacer, se me ocurre utilizar la aplicación "Router Wifi" del teléfono móvil, ya que pensé que quizás era el momento de utilizarlo por primera vez. Activo el "Router Wifi" de HTC para Android, configuro los datos de seguridad de la red y me conecto con el portátil. Hago una primera prueba con Google y veo que se conecta, vuelvo a abrir la conexión FTP y veo que también, así que termino de subir con éxito el archivo y pruebo el proyecto. Todo funcionaba genial, me salvó de un autentico apuro.

Después de ese momento, estoy un poco mas feliz por tener un Android.

RockMelt el navegador social basado en Chrome

14 marzo, 2011 por Juan 2 comentarios »

RockMeltLeyendo el otro día a @manoloruiz, descubrí un nuevo navegador social llamado RockMelt, basado en Google Chrome. RockMelt es un navegador, basado en Google Chrome, con una apariencia muy similar al Chrome de Google, salvo por algunos pequeños detalles. Lo que mas me llama la atención es que nada mas iniciar RockMelt, aparece una ventana, similar a la conexión que realiza Chrome con GMail, pero en este caso de acceso a Facebook, para importar nuestra cuenta de Facebook. Una vez lo hallamos realizado el login en Facebook, aparecerá una barra lateral con nuestros contactos de facebook, permitiendonos chatear con ellos. En el otro lateral encontramos una barra con las aplicaciones instaladas, por defecto Facebook y Twitter, aunque de momento también se puede Youtube, donde podremos ver las actualizaciones de nuestras redes sociales y añadir contenido directamente desde esta barra. Por último destaca junto a la barra de direcciones, el botón de compartir, que nos permitirá compartir la página actual en cualquiera de nuestras redes sociales.

La verdad es que este navegador tiene muy buena pinta y creo que se va a convertir en mi navegador secundario para e trabajo, ya que así de un vistazo puedo ver el twitter. Tiene muy buena pinta, el único problema es que aún no esta en español, pero todo se andará.

Os dejo algunas capturas del navegador.

RockMelt página de descarga

RockMelt acceso a Facebook

RockMelt página de inicio

Un rack en la cocina 2: las goteras

7 marzo, 2011 por Juan Sin comentarios »

Hace tiempo publique el post de "un rack en la cocina" donde se veia entre microondas y neveras un curioso armario que era en realidad un rack de servidores. Hoy os traigo una segunda parte de "un rack en la cocina".

Una tranquila mañana, como cada día al llegar al trabajo, fui a la cocina a hacerme un café para entrar en calor y despertarme, al ver esta imagen, no pude evitar sacarle una foto. Que cada uno, fregona en mano, saque sus propias conclusiones.

Rack en la cocina, fregona

 

Actualizando Microsoft Windows en todas sus versiones desde Windows 1.0 hasta Windows 7

3 marzo, 2011 por Juan 1 comentario »

Os dejo un video que he encontrado de Andriew Tait. El video es un experimento de una actualización de Microsoft Windows en todas sus versiones, desde Windows 1.0 hasta Windows 7. Me llama especialmente la atención este video ya que salvo la versión 1.0 y la versión 2.0, el resto las he instalado cientos de veces, salvo el Windows 7 que solo una vez y la verdad es que ver este video me trae gratos recuerdos de juventud. Os dejo el video donde en la misma maquina instala Windows 1.0, Windows 2.0, Windows 3.0, Windows 3.1, Windows 95, Windows 98, Windows 2000, Windows XP, Windows Vista y Windows 7.

Resaltar como mantiene algunas configuraciones de por ejemplo color de fondo y compatibilidad de programas antiguos como editores y juegos aparte de las pruebas que se realizan en cada versión con el Monkey Island y el Doom 2. También resaltar que se hecha en falta algunas versiones con menos éxito como Windows Millenium mas conocido como Windows Me y bueno no se puede tener todo ya que son de otra rama, pero versiones Windows NT y posteriores Windows Server que sería interesante ver si mantiene la misma compatibilidad.

Por qué usar StringBuilder en lugar de concatenar Strings

2 marzo, 2011 por Juan 2 comentarios »

Ando un poco liado y llevo una temporada sin escribir. Hay un apunte, que es común para varios lenguajes que son Java y por ejemplo .Net, tanto Visual Basic .Net y C#, así como el resto de lenguajes de la plataforma .Net que es la clase StringBuilder. Hay gente que no sabe por que o cuando utilizar la clase StringBuilder y realmente es uno de esos pequeños detalles de buenas prácticas, que a simple vista en un proyecto pequeño no se aprecian, pero cuando entre manos tenemos un gran proyecto que recibe millones de peticiones diarias, estas pequeñas nuevas practicas pueden suponer un gran referente de ahorro en el consumo de memoria y procesador de un servidor.

Tanto en Java como en .Net, cuando creamos un nuevo String, instanciamos un objeto String en una variable, cuando con la sentencia "+=" vamos concatenando mas texto, lo que hacen estas plataformas es crear una nueva instancia del objeto con la concatenación de las dos variables de texto. Por otro lado, cuando tenemos un StringBuilder instanciamos una clase StrringBuilder, llamando al método "append" en Java y "Append" en .Net, lo que hacemos es realizar una concatenación real de texto en el buffer de texto para luego instanciar un nuevo objeto String cuando llamemos al método "toString" en Java y "ToString" en .Net. A simple vista parece una tontería, cuando tenemos un texto que concatenamos 2 o 3 veces, realmente no merece la pena generar un StringBuilder, pero cuando concatenamos repetidamente texto varias veces el rendimiento es mayor si utilizamos StringBuilder, ya que si tenemos 20 concatenaciones seguidas, utilizando Strings normales concatenados, tendríamos 20 instancias de objetos, mientras que con StringBuilder solo 2. Como he dicho antes, en un pequeño proyecto, esto es prácticamente inapreciable, pero cuando tenemos un proyecto que recibe millones de peticiones diarias, algo tan tonto como utilizar concatenaciones de texto o StringBuilder puede suponer tener que añadir mas memoria al servidor para soportar tantas instancias de objetos e incluso un procesador mas potente para soportar el paso del recolector de basura para tantos objetos instanciados, esto en el mejor de los casos, si no llegamos al caso de tener que añadir un servidor al cluster para soportar todo esto.

Un cumulo de buenas practicas pueden suponer un gran ahorro de recursos, que se traducen en ahorro de dinero, cuando se trata de grandes proyectos.

Próxima actualización de Android Market

11 diciembre, 2010 por Juan 1 comentario »

Google está preparando una actualización del Android Market con motivo de la nueva versión de Android Gingerbread 2.3. Esta actualización estará disponible en un par de semanas, es decir, antes de finalizar el año 2010 y ademas de mejoras visuales notorias, se han añadido nuevas categorías como widget y livewallpaper. Además de esto, se ha ampliado el tamaño máximo de las aplicaciones hasta los 50MB, lo que permitirá crear juegos para Android más ricos visualmente hablando. También se ha reducido el tiempo de devolución de las aplicaciones compradas desde las 24 horas actuales a los 15 siguientes minutos tras la compra, ya que según Google, los usuarios devuelven las aplicaciones en los 10 minutos tras su compra. Por último se añadirán los vídeos promocionales de las aplicaciones. Todo esto es poco, ya que según Google, aún no han terminado con los cambios aunque seguramente los cambios que tienen en mente realizar, los liberaran en futuras versiones del Android Market.

Os dejo un par de capturas de pantalla del nuevo Android Market de la mano de Google.

Google preview, capturas de pantalla de los resultados en Google

11 noviembre, 2010 por Juan 1 comentario »

De casualidad, me he encontrado con algo que no habia visto hasta hoy. Últimamente, el buscador Google, ha experimentado ciertos cambios como actualizacion en pocos minutos u horas del contenido sin tener que esperar al Google Dance, Google Instant, que tambien esta para moviles y nos permite ver los resultados intantaneamente ademas de ofrecernos sugerencias de busquedas, una pagina nueva de resultados para imagenes, en fin mil cambios en poco tiempo. De casualidad, me pongo a buscar un texto sobre Bill Gates, y me encuentro con que al pinchar sobre el texto que suele aparecer debajo del link de la pagina en Google, aparece un cuadro a la derecha con una captura de pantalla o snapshot. Que es esto, ni idea y la verdad es que me he puesto a buscar un poco y viendo la hora no me he esforzado mucho, pero no he visto nada. Vamos a llamarlo Google Preview por llamarlo de alguna manera, como siempre Google innovando y mejorando dia a dia. Dejo una captura de pantalla donde se puede ver el snapshot de Google. Por cierto, que tambien resalta el texto buscado.

Google Preview

Un rack de servidores en una cocina

1 noviembre, 2010 por Juan 3 comentarios »

Hace tiempo que llevo con ganas de publicarlo y siempre se me olvida. Hace algún tiempo, mi empresa mudó las oficinas de una plata a otra, haciendo la oficina desde 0. La verdad es que como persona curiosa de cuando en cuando me asomaba a ver como iban las obras, ya que era en el mismo edificio pero otra planta. Al ver que todo el cableado, paredes, mesas, sillas, todo menos los ordenadores era nuevo estábamos todos un tanto expectantes/ilusionados. Al mudarnos en pleno verano y aprovechando el buen tiempo, algunos compañeros nos íbamos a comer a una residencia de ancianos cercana, que nos permitía comer allí y disfrutar aunque sea por un breve espacio de tiempo de sus jardines y poder así relajarnos y desconectar un rato. Es por tanto que en todo el verano algunos compañeros entre los que me incluyo, no llegamos a ver la nueva cocina, denominada por algunos como "la cocina de gran hermano" por el estilo y diseño que tiene. Finalizando el verano, en una oleada de despidos, despidieron a un compañero de departamento y este, en su despedida, trajo algunos aperitivos y cervezas y fuimos todos a la cocina a pasar el rato. Estando allí, un compañero que como yo, aún no había comido nunca allí, fue a abrir lo que pensábamos era una nevera buscando unas cervezas fresquitas y la sorpresa al abrir la supuesta "nevera" fue mayúscula. No comento más, mejor ver las fotos.

Rack de servidores en cocina

Rack de servidores en cocina