Entradas

Mostrando entradas de 2012

Monitorar uso de la CPU por procesos

Imagen
Hasta ahora ninguno de los plugins que hemos visto permite saber el uso de la CPU por usuarios o por procesos pero para ello hay 2 plugin adicionales que te permiten hacer esa tarea. De esta forma se puede monitorar el consumo de CPU de procesos como apache, mysql y el propio munin.Los citados plugin se encuentran en la siguiente ruta y se llaman cpu-usage-by-process y cpubyuser, el primero lo renombraremos como cpubyproc y modificaremos el archivo de configuración de munin en /etc/munin/plugin-conf.d/munin-node agregándole las siguientes líneas:[cpubyproc]
env.procs crond httpd mysqld munin-node[cpubyuser]
env.USERS apache mysql muninlos proceso y los usuarios se pueden modificar a gusto de cada cual.Para saber el listado de procesos activos escribiremos ps aux y para el listado de usuarios cat /etc/passwd | cut -d":" –f1.Importante: para evitar errores del tipo Warning: bad syntax, perhaps a bogus '-'? debemos buscar la línea 68 del plugin cpubyproc y sustituir ps –a…

Monitorar Apache en CentOS 6 con Munin

Imagen
Al igual que para MySQL, los plugins de Apache no vienen activados por defecto. En este manual los activaremos y además agregaremos uno extra que no es oficial. aunque hay muchos más pero este es el que me pareció mas interesante.Entre los plugins que viene con la instalación de apache se puede monitorar lo siguiente:accesos por segundo procesos activos, inactivos y slots libres número de bytes por segundo Y el plugins adicional que podemos encontrar aquí nos permitirá ver el tamaño medio en bytes de los procesos de apache.Los tres primeros como ya están en el directorio /usr/share/munin/plugins/ podemos activarlos de la siguiente manera:ln -s /usr/share/munin/plugins/apache_* /etc/munin/plugins/No son necesarias más configuraciones extras.El plugin que no es oficial presenta algunos bugs y es por ello que hay que modificar algunas líneas, el plugin se llama apache_memmory:Modificamos las líneas 13 y 14 con el usuario que ejecuta apache (apache) y el nombre del proceso (httpd). Luego par…

Monitorar MySQL en CentOS 6 con Munin

Imagen
Entre los gráficos instalados por defecto en Munin no se encuentra ningún monitorado específico para MySQL aunque si vienen en la carpeta de plugins una multitud de estos entre los cuales hay algunos que tal vez no nos interese instalar.Antes de entrar en el tema concreto de MySQL voy a explicar el procedimiento por defecto para instalar plugins en Munin.El plugin debe existir en el directorio /usr/share/munin/plugins y además tener permisos de ejecución. Un plugin no es más que un script shell o perl en el que algunos sea necesario modificacar las variables dentro de este script, para otros se pueden definir las variables globales en el archivo /etc/munin/plugin-conf.d/munin-node de la siguiente forma

[nombre_del_plugin_igual_al_del_archivo]
env.variable valor
variable valor

Importante: los valores no pueden tener símbolos cómo # porque pueden causar errores Luego hay que hacer un enlace simbólico del plugin en el directorio /etc/munin/plugins Una vez visto el funcionamiento de los plugins…

Instalando Munin en CentOS 6

Imagen
Munin es una herramienta para el monitorado de recursos que puede ayudar a analizar las tendencias de los mismos e identificar y solucionar problemas asociados a una bajada de rendimientos en nuestros servidores. Según está diseñado Munin llega a ser una herramienta prácticamente de plug and play aunque dependiendo de la distribución dónde la instalemos puede dar algunos problemas o no. Si bien es cierto que una instalación predeterminada proporciona una gran cantidad de gráficos con casi ningún trabajo para el caso de monitorado de MySQL y Apache son necesarias varias configuraciones extras las cuales veremos en otros post.Sin más os dejo el paso a paso de la instalación para la última versión de Munin a la fecha (2.0.8) en un CentOS 6.3.Lo primero que debemos hacer es instalar algunos paquetes extras:yum install perl-XML-SAXEs muy importante instalar este paquete antes de la instalación de Munin porque si tienes habilitado el repositorio de RPMForge te puede dar colisiones con algun…

Archivos grandes con PHPseclib

Imagen
Uno de los mejores conjuntos de plugins, o clases, o librerías externas, para PHP es PHPseclib (PHP secure library) la cual implementa de manera mucho más intuitiva las funcionalidades para acceder a servidores con SSH y SFTP. Lo malo de casi todas estas librerías es que no son distribuciones oficiales y por tanto estamos sujetos a los intereses o convicciones de cada programador.Las ventajas de PHPseclib son muchísimo mayores que sus desventajas, que las hay, una de ellas por ejemplo es su incapacidad de gestionar correctamente el tamaño de archivos superiores a 4 GB. Según reza en la misma documentación de la clase:Los archivos de más de 4GB se mostrarán como si tuviesen exactamente 4GB.Los tamaños de archivos están representado por un número entero de 64 bits, no se debe utilizar Net_SFTP para transferir archivos con más de 4 GB (0xFFFFFFFF bytes) porque todos los tamaños de los archivos que son más grandes se representarán como 4GB.La solución para esto es reescribir la función si…

jQuery, Firefox 15, live + onKey

Si tenéis errores con Firefox 15 utilizando jQuery con captura de eventos del tipo live blur, y además tenéis sobre ese elemento definidas funciones onKeyUp o por el estilo, tened presente que esto os va a dar error, lo aconsejable para solucionarlo es eliminar las funciones onKey del propio elemento y definirlas dentro del estándar jQuery, o también podéis probar a actualizar vuestra versión de este framework a la más reciente.

Convertir Minutos o Segundos a fecha formateada

A veces tenemos un valor de minutos o segundos y queremos convertirlo a una cadena de tiempo formateada del tipo x horas x minutos etc. Esta clase que os voy a presentar ahora es precisamente para ello.La clase se basa en la modificación de una clase parecida que lo que hace es dando una fecha determinada calcula el tiempo que ha pasado desde esa fecha hasta el momento actual, la clase original se puede encontrar en el post Clase para mostrar fechas al estilo “hace 1 dia 6 min” con PHP.class haceTanto extends DateTime {

protected $strings = array(
'y' => array('1 año', '%d años'),
'm' => array('1 mes', '%d meses'),
'd' => array('1 día', '%d dias'),
'h' => array('1 hora', '%d horas'),
'i' => array('1 min', '%d minutos'),
's' => array('segundos', '%d segundos'),
);

public $profundidad;

public function…

SQL Joins (intersecciones entre tablas en SQL)

Imagen
Mucho de lo que voy a hablar hoy es lo típico que se te olvida de cuando lo has estudiado, te quedas con lo más frecuente, lo más utilizado, pero SQL trae consigo multitud de herramientas, todas y cada una imprescindibles, para extraer datos con la intersección de 2 o más tablas.No confundir este post que trata sobre los JOIN (intersecciones) con la sintaxis UNION.Veamos de las más conocidas a las menosInner joinSELECT <> FROM A INNER JOIN B ON A.KEY = B.KEYEsta sencilla consulta nos devolvería los datos que están presente solamente en ambas tablas y su notación sería la siguiente AnB donde n significa intersección.left outer joinLos que trabajamos con SQL Server y que provenimos de trabajar con MySQL esta sintaxis nos parece extraña y tal vez excluyente porque left join hace lo mismo, y es verdad, es realmente lo mismo, pero MySQL al abreviarlo nos elimina la posibilidad de saber el por qué del OUTER al no incluirlo en sus sintaxis, mientras SQL Server es más pragmático y a pes…

UNION en SQL Server

Imagen
Esto no lo he comprobado en MySQL pero supongo que siga el mismo principio que SQL Server, es muy probable que hayamos utilizado la sintaxis UNION de SQL en multitud de ocasiones pero creo que es importante recalcar lo siguiente de esta sintaxis:UNION especifica que se deben combinar varios conjuntos de resultados para ser devueltos como un solo conjunto de resultados.Mientras que UNION ALL agrega todas las filas a los resultados. Incluye las filas duplicadas. Si no se especifica, las filas duplicadas se quitan.Para más datos ir a la página de UNION en SQL Server.

Activando CURL en WAMP 2.2 64 bits

Imagen
¿Problemas con PHP Curl en una de las instalaciones wamp siguientes para Windows 64bit?wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-x64.exe wampserver2.2e-php5.4.3-httpd-2.4.2-mysql5.5.24-x64.exe Si es así entonces este post te ayudará a solucionarlas y activar nuevamente esta extensión tan útil de PHP.WAMP no cabe duda ha mejorado muchísimo desde que sus primeras versiones vieran la luz, es una interfaz muy sencilla y una de las pocas que se ha atrevido a compilar MySQL, PHP y Apache para Windows en 64 bits, y es sobre esta distribución en concreto que voy ha hablar y es que la librería curl que viene compilada para PHP 5.4.3 en WAMP 2.2 está mal, al activarla todo parece normal pero cuando ejecutamos un script con alguna de las funciones podemos tener errores de este tipo:Use of undefined constant CURLOPT_TIMEOUTO si comprobamos el evento de logs de WAMP tendríamos lo siguiente:Activation context generation failed for “c:\wamp\bin\php\php5.4.3\ext\php_curl.dll”. Dependent Assembly …

Introducción a las fechas en SQL Server

Imagen
En este post quiero tratar de explicar cómo usar las fechas en SQL Server y que cosas debemos tomar en consideración pero antes voy a tratar de explicar que son para SQL Server, el cual, tiene básicamente dos tipos de datos donde se pueden almacenar las mismas: Datetime y SmallDateTime, en este cuadro veremos las diferencias entre estos dos tipos de datos.DateTimeValores de Fecha y Hora que están comprendidos entre 1/1/1763 y 31/12/9999. La hora se expresa con una exactitud de hasta 1/300 de segundoSamallDateTimeValores de Fecha y Hora que están comprendidos entre 1/1/1900 y 6/6/2079. El grado de precisión de la hora llega hasta el minuto¿Cómo guarda internamente SQL Server las fechas? El motor de SQL Server siempre guarda las fechas de una sola forma y no esta referida a ningún formato concreto como podría ser Americano, Español, Japonés, etc.; SQL Server guarda las fechas DateTime como enteros de 4 bytes (los primeros 4 bytes almacenan la fecha y los otros 4 la hora), en SmallDateti…

mssql_connect(): Unable to connect to server

Imagen
Existen dos posibles soluciones para este error de la librería de PHP mssql (obsoleta ya desde la versión 5.3 de PHP por la aparición del driver de Microsoft para SQL Server sqlsrv). El error unable to connect to server puede deberse a una de estas dos razones:La librería ntwdblib.dll perteneciente a las MS SQL Client Tools está desfasada, por tanto tenemos que localizarla en nuestro ordenador y descargar una versión más reciente. En la configuración del php.ini tenemos la directiva mssql.compatability_mode a 0 y deberíamos tenerla a 1. Con estas sencillas comprobaciones nos evitaremos muchos quebraderos de cabeza al intentar conectar nuestro servidor web con PHP y un servidor de base de datos SQL Server con esta librería.

Procedimientos vs T-SQL en SQL Server

Imagen
¿Por qué recomendar el uso de los procedimientos almacenados en lugar de las sentencias T-SQL? Los procedimientos almacenados deben de ser una de las herramientas reinas de los motores de bases de datos (cómo es el caso de SQL Server) y de los DBA ¿Por qué? Mayor optimización para el motor: Este mismo no debe compilar (a menos que se lo indiquemos) cada instrucción T-SQL, sino que ya la tiene compilada y esto genera mucho mayor rendimiento. También se da el caso que el procedimiento reside en nuestro servidor por lo cual el trafico de red es muy inferior al que podemos hacer si mandamos las T-SQL desde nuestro cliente. Seguridad: Los procedimientos no solo son buenos por rendimiento, sino que nos permiten hacer las operaciones no directamente sobre nuestras tablas. Reutilización de código: El uso de procedimientos es muy útil para esto, si la consulta de rangos de fechas para buscar los pedidos en firme de un cliente por ejemplo, la necesitamos en mas de una aplicación, entonces podemo…

Principio de sustitución de Liskov (LSP)

Imagen
Hoy vamos un poco a la teoría, he escrito varios post sobre la herencia y la programación orientado a objetos, temas que van muy de la mano y cuyo fundamento se basa en el principio que da título a este post. Este principio fue escrito por Bárbara Liskov en su trabajo sobre abstracción de tipos de datos y está relacionado con un principio que se podría decir que nació junto con la programación orientada a objetos, el diseño por contratos. ¿Cansado de datos históricos? Vamos al grano. El principio dice que cualquier función que utilice una referencia a una clase base debe ser capaz de usar cualquier clase derivada sin saberlo. Es decir que el cliente usa una referencia a la clase base, sin saber si se usa la clase derivada A o la B. No basta con "ser" hay que "comportarse como tal".Para lograr esto, hay que usar abstracción de datos y polimorfismo, que son las bases del principio de abierto cerrado. El Principio de sustitución de Liskov se usa para medir el correc…

Habilitar la copia automática de textos al portapapeles

Imagen
En anteriores ocasiones he escrito como copiar desde el portapapeles con JS y copiar al portapapeles con JavaScript, pero para aplicar ambas opciones en muchos navegadores no está disponible y en otros hay que hacer configuraciones adicionales. Este tutorial es aplicable a los navegadores Firefox cualquier versión, para Internet Explorer no es necesario habilitar nada en concreto y para el resto de navegadores está pendiente de analizar.Abrimos el navegador y en la barra de navegación (dónde se ponen las direcciones de las páginas web –recuadro rojo imagen 2- ) escribir “about:config”, nos aparecerá la siguiente advertencia: No os preocupéis ignorar este mensaje y pulsad el botón “Tendré cuidado, lo prometo”, el check “Mostrar esta advertencia la próxima vez” marcado también. Una vez pulsado el botón nos aparecen un listado con todas las opciones de configuración de nuestro navegador, es una pantalla como esta: Dónde pone Filtro escribimos “signed.applets.codebase_principal_support” y…

Tipo de campo en una tabla SQL Server con PHP

Utilizando algunas funciones del driver de Microsoft para PHP y SQL Server se puede obtener una cadena con el tipo de un campo concreto en una tabla de nuestra base de datos:$query = "select $campo from $tabla where 1=2";
$cols = sqlsrv_query($this->iIdConexion, $query);
$valores = sqlsrv_field_metadata($cols);
echo $sql_fields_types[$valores[0]['Type']];La relación de equivalencia entre los valores numéricos y su correspondiente cadena es la siguiente:$sql_fields_types = array("-5"=>"bigint",
                "-2"=>"binary",
                "-7"=>"bit",
                "1"=>"char",
                "93"=>"datetime",
                "3"=>"decimal",
                "6"=>"float",
                "-4"=>"image",
                "4"=>"int",
                "3"=>"…

Ojo con la función filesize de PHP

Este post es bastante corto y es para hacer énfasis en los que a mi entender es un bug de la función filesize de PHP en algunos sistemas Linux de archivos. Según el propio manual de PHP filesize:Devuelve el tamaño del fichero en bytes, o FALSE (y genera un error de nivel E_WARNING) en caso de que se produzca un error.Aunque lo más interesante es la nota siguiente:Nota: Debido a que el tipo integer de PHP es con signo y muchas plataformas usan enteros de 32bit, algunas funciones de sistema de ficheros pueden devolver resultados inesperados para ficheros que son mayores de 2GB.Pues bien, estos resultados inesperados en mi caso han sido que a veces se devuelve el tamaño del archivo en bits y no en bytes, para calcular la relación entre bits y bytes os dejo este enlace.

Configurar Apache para acceder a carpetas remotas

Imagen
En el pasado post escribí sobre cómo configurar IIS 7 para acceder a carpetas remotas, este es el turno de apache.El problema en ambos casos es el mismo: el usuario que ejecuta el servicio por defecto no puede acceder a contenido ni funciones de red. La solución sin embargo en apache es mucho más simple y basta con cambiar este usuario en el servicio de apache.¿Por qué? pues porque apache solamente tiene un servicio mientras IIS cuenta con varios que están relacionados entre si y cambiar los permisos muchas veces genera que los servicios no se reinicien debido a que no tienen suficientes permisos los nuevos usuarios o que servicios que dependen del servicio cambiado tienen usuarios distintos.Veamos como cambiar el usuario por defecto de un servicio apache. Lo primero es ir a inicio –> ejecutar y escribimos services.msc, en la nueva ventana localizamos el servicio de apache:Hacemos clic derecho y seleccionamos propiedades, en la nueva ventana elegimos inicio de sesión:En esta nueva …

Acceder a contenido remoto en IIS 7 con PHP

Imagen
En realidad lo de PHP es por mi caso particular pero este post se aplica a cualquier script que vayamos a realizar pues trata realmente sobre los permisos de IIS para acceder a contenido en otros servidores distintos del local.Podrían ser en unidades de red pero en mi caso concreto lo hago accediendo a una carpeta compartida en un servidor externo.El origen del problema que impide a IIS acceder a unidades de red radica en los permisos de los usuarios por defecto que ejecutan los servicios o scripts PHP en mi caso. Existe una funcionalidad activada por defecto llamada acceso anónimo y esta se conecta por defecto con el usuario IUSR el cual no tiene permisos de red.Para acceder a esta funcionalidad abrimos el panel de control del IIS y accedemos en el nombre de nuestro servidor a la funcionalidad autentificación:La abrimos y seleccionamos la opción de acceso anónimo y en el panel derecho le damos a edit:Nos saldrá una nueva ventanaAl pulsar en set elegimos en la nueva ventana un usuario…

Ejecutar comandos desde PHP para Linux

Imagen
Existen varias funciones para ejecutar comandos desde php en un servidor linux pero yo me centraré en 3 de ellas: ssh2_exec, system y exec.La primera de ellas ssh2_exec se ejecuta cuando establecemos una conexión SSH con otro servidor (o el mismo pero esto carece un poco de efecto práctico).Esta función nos devuelve un stream o FALSE en caso de error, para poder trabajar con los datos devueltos deberíamos hacer lo siguiente:<?php
$stream = ssh2_exec($connection, "cd /hom");
$errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);
// Activar bloqueo para ambos stream
stream_set_blocking($errorStream, true);
stream_set_blocking($stream, true);
// Cualquiera de los dos comandos de abajo recibirá su salida correspondiente. El segundo comando no recibe nada porque no hay error.
echo "Output: " . stream_get_contents($stream);
echo "Error: " . stream_get_contents($errorStream);
// Close the streams      
fclose($errorStream);
fclose($stream);
?>Ejecutar aplicac…

Actualizando contraseñas en MySQL

Imagen
Desde hace unas cuantas versiones de MySQL la generación de contraseñas seguras ha aumentado, pero actualizarlas es un proceso bastante tedioso porque tiene que ser usuario por usuario en nuestra base de datos.Para compatibilizar con contraseñas antiguas existen dos instrucciones en el archivo my.cnf que nos permiten utilizar contraseñas menos seguras en sistemas más modernos y de esta forma no tener que actualizar uno a uno todos los usuarios, estas instrucciones son:secure_auth=1
old_passwords=1Si queremos que MySQL se conecte utilizando contraseñas antiguas debemos tener la primera comentada y la segunda no. ¿Qué hacen estas instrucciones?secure_auth le dice al servidor de MySQL que solo permita conexiones seguras y old_passwords activado lo que le dice a MySQL que cada vez que se ejecute la función PASSWORD nos devuelva una contraseña en formato antiguo.Actualizando contraseñas en MySQLSi decidimos actualizar lo podemos hacer remotamente, no hay necesidad de conectarnos directament…

Instalando Wamp x64 en Windows 8

Imagen
He descargado la última versión de Wamp Server de la página oficial en concreto la 2.2 para 64 bits y la he instalado en el nuevo Windows 8 Costumer Preview. La instalación es bastante sencilla y solo hay que seguir los pasos del instalador, lo único es que la he instalado con ciertas particularidades que os pongo ahora a continuación.Instalar Wamp Server en la carpeta Program FilesSi sois tan maniáticos como yo tal vez os moleste tener en el directorio raíz la carpeta de instalación del Wamp Server por eso he escogido instalarla dentro de la carpeta de Archivos de programas de Windows 8 pero para ello tenemos que hacer luego de la instalación una pequeña modificación que nos ayudará mucho.Esta carpeta de archivos de programas está protegida contra modificaciones y siempre pide permisos de administración a la hora de realizar cualquier cambio sobre cualquier fichero dentro, esto invalidaría por ejemplo crear repositorios subversión con Tortoise SVN y además para agregar o editar los a…

Los programas en Windows 8

Imagen
Con la nueva versión de Windows 8 en concreto la beta o Customer Preview nos podemos hacer una idea de lo que se acerca en la nueva versión, mi opinión es que se han centrado demasiado en dispositivos con pantalla táctil y a los usuarios de escritorio nos han dejado un poco abandonados.Lo primero que sorprende es la pantalla de inicio que ya todos habréis visto en alguna imagen:En ella podemos ver que la integración con aplicaciones móviles y redes sociales es inmensa, de un vistazo podemos ver fotos, las actualizaciones de nuestros amigos en las redes sociales, RSS, el tiempo, la bolsa y acceder directamente a los servicios más comunes, música, video e Internet Explorer.Se ven algunas aplicaciones pero ¿y el resto? Bueno vayamos por partes, ahora las esquinas de nuestra pantalla son muy importantes, por ejemplo la esquinas superior e inferior derecha nos muestra una útil barra de herramientas:Como vemos en la imagen anterior el menú inicio a desaparecido pero en esta esquina podemos …

Requerimientos PHP, Apache y SQL Server driver

Cada vez nos volvemos más locos con las distribuciones de PHP, si son compatibles con apache, con cuál distribución de apache, en qué están compiladas, para que sistemas son, en fin un sin número de preguntas que nos pueden llegar a volver loco. En este post voy a intentar resumir estos requerimientos agregando el driver de Microsoft para PHP y SQL Server.Importante: Este post se basa en entornos con Windows.Requerimientos Driver SQL Server para PHPLas versiones 1.0 y 1.1 de este driver están completamente fuera de soporte por parte de Microsoft, encontrarlas tiene que ser en sitios externos y no oficiales, estas versiones son compiladas para equipos de 32 bits y en VC6 además de que no soportan Microsoft Native Client 2008 R2, necesitan ambas el 2005.La versión 2.0 necesita PHP > 5.2.13 y Microsoft SQL Server 2008 R2 Native Client y la versión 3.0 PHP > 5.3.6 y Microsoft SQL Server 2012 Native Client.Requerimientos PHP>= V5.2 estas versiones aparecen compiladas tanto en VC6 …

Saber el día exacto de tu alta en Facebook

Imagen
Saber el día en que nos dimos de alta en esta red social podía ser un engorro en el antiguo diseño porque supuestamente tendrías que ir bajando hasta que llegaras a tu primer contenido, esto con el nuevo diseño a modo de Biografía es muy sencillo.En nuestro perfil (no la pantalla de inicio y notificaciones) tenemos a la derecha una barra de tiempo como esta:Lo único que tenemos que hacer es ir al año que creemos que nos dimos de alta y buscar una notificación como la siguiente:¿Sencillo verdad? De esta forma sabemos de manera segura en que fecha nos dimos de alta en Facebook.

Aumentar la velocidad de tus páginas web

Imagen
Si eres desarrollador de páginas web, o administrador de algún sitio web, sin duda una de tus principales preocupaciones es optimizar la carga de las mismas, un tiempo de carga pequeño se traduce en una mejor experiencia de usuario y de cara a los buscadores un sitio de más calidad. Buscando por internet encontré este maravilloso tutorial con unas excelentes y completas técnicas para aumentar la velocidad de una web, aunque para mi lo mejor fueron los enlaces externos al final del mismo y de ellos el más relevante y sobre el que basaré este tutorial es web page test.Cómo bien dice el nombre Web Page Test es un sitio que examina tu página web y te muestra las recomendaciones necesarias para corregir o mitigar cada uno de los fallos que sus test encuentran. Los test se basan en 6 bloques fundamentales:First Time Byte Keep alive enabled Compress text Compress images Cache static content CDN detected Sobre el primer punto el Time to First Byte ya he hablado en alguno de mis post por lo que no c…

Favoritos en Firefox, Chrome e Internet Explorer

Imagen
Más que una comparativa es un análisis desde mi propia experiencia personal en cuanto a la pestaña de favoritos en estos 3 navegadores. El pionero en este sentido fue Safari pero luego el primero en hacerlo a su estilo fue Google Chrome aunque es una copia bastante parecida al de Safari con una vista previa de los sitios pero más minimalista y menos llamativa, aquí os dejo cómo se ve en la versión actual de desarrollo (v18.0.1017.2 dev-m):Internet Explorer lo sacó luego y a mi entender salvo algunas diferencias es el más limpio y más coqueto, aquí os dejo la imagen en Internet Explorer 10 Developer Preview:Ambas versiones son minimalistas y son capaces de dejar sitios en blanco y solo gastan una casilla por cada dominio o subdominio favorito, cosa que no hace Firefox, que aparte de llegar tarde (en la versión 13) lo hace mal, los sitios se repiten indiscriminadamente, no es capaz de detectar que sitios se visitan más y cuales no y da preferencia a uno de un dominio ya agregado que a u…