Calcular el hash criptográfico MD5 o SHA1 de un archivo en Windows.

hash1A veces cuando descargas un ISO de Windows o similar requieres calcular el hash SHA1 para ver que concuerde con el archivo que has descargado. La idea es validar que el archivo descargado no esté corrupto y puedas utilizarlo.

Para eso puede usar el programa FCIV.exe de Microsoft en Windows.

FCIV es el acrónimo de File Checksum Integrity Verifier.

En esta página está el enlace para descargar el programa.

En esta otra página te explica como usarlo.

Para calcular los valores de hash MD5 y SHA-1 hash para un archivo tipea el siguiente comando en la línea de comando:

FCIV -md5 -sha1 path\filename.ext

Por ejemplo, para calcular los valores de hash MD5 y SHA-1 para el archivo Shdocvw.dll que se encuentra en la carpeta %Systemroot%\System32, tipea el siguiente comando:

FCIV -md5 -sha1 c:\windows\system32\shdocvw.dll

Este es el comando que utilicé para validar el ISO de la versión «Technical Preview» de Windows 10, un archivo de 3.92GB con un hash SHA1 6A95316728299D95249A29FBEB9676DED23B8BEB

fciv -sha1 WindowsTechnicalPreview-x64-EN-US.iso

Para poder ejecutar el fciv desde cualquier ruta lo puedes agregar al «path».

Si instalaste el FCIV en el directorio C:\FCIV, tipea en una ventana de comando:

set path=%path%;c:\fciv

Con eso se agregara a la ruta del sistema y podrás ejecutarlo desde cualquier ruta.

Si no quieres hacer eso lo que puedes hacer es simplemente copiar el archivo fciv.exe a la carpeta donde está el archivo del que quieres calcular el hash. En realidad eso fue lo que yo hice porque estaba apurado.

Tener en cuenta que para archivos grandes de 4GB, la operación demora un poco y luego te devuelve un resultado.

fciv-resultado

Como pueden ver el hash es diferente del que debería ser.

Twitter Bootstrap Acordeón: preservar el estado luego de refrescar la página o navegar de regreso.

Cuando usas Bootstrap y usas el componente llamado «Acordeón» (accordion en inglés) si en el panel pones enlaces a otras páginas y luego regresas, el acordeón (acordión para los amigos) no recuerda qué panel estaba «expandido» o en dónde te quedaste, simplemente carga como si fuera la primera vez que lo vas a usar.

En el sitio web de StackOverflow hay varias respuestas:

http://stackoverflow.com/questions/12733238/retain-twitter-bootstrap-collapse-state-on-page-refresh-navigation

La que me parece la mejor en mi caso es la de Ravimallya. Funciona con Bootstrap versión 3.x.x.

La idea de la solución es guardar en una «cookie» el ID del elemento que quieres que permanezca abierto cuando regreses de navegar o porque refrescaste la página.

El script en JavaScript y jQuery hace lo siguiente:

  1. Cuando la página está lista (ready) se busca el cookie «activeAccordionGroup» y si lo encuentra hace una búsqueda del ID que está grabado en el cookie y le quita a todos los paneles la clase «in» y al panel con el ID del cookie le agrega la clase «in».
  2. Cuando le damos clic a un panel para expandirlo se produce un evento «shown.bs.collapse» y en ese evento grabamos en la cookie el ID del panel que tenga la clase «.in».
  3. Cuando se contrae o se cierra un panel se produce un evento «hidden.bs.collapse» y en ese evento borramos la cookie.

HTML.

<div class="panel-group" id="accordion">
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4 class="panel-title">
                <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Collapsible Group
                    Item #1 </a>
            </h4>
        </div>
        <div id="collapseOne" class="panel-collapse collapse in">
            <div class="panel-body">
                Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson
                ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food
                truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put
                a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim
                keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
                Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table,
                raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
                labore sustainable VHS.
            </div>
        </div>
    </div>
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4 class="panel-title">
                <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">Collapsible Group
                    Item #2 </a>
            </h4>
        </div>
        <div id="collapseTwo" class="panel-collapse collapse">
            <div class="panel-body">
                Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson
                ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food
                truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put
                a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim
                keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
                Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table,
                raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
                labore sustainable VHS.
            </div>
        </div>
    </div>
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4 class="panel-title">
                <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">Collapsible
                    Group Item #3 </a>
            </h4>
        </div>
        <div id="collapseThree" class="panel-collapse collapse">
            <div class="panel-body">
                Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson
                ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food
                truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put
                a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim
                keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
                Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table,
                raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
                labore sustainable VHS.
            </div>
        </div>
    </div>
</div>

JavaScript.

$(document).ready(function () {
        //when a group is shown, save it as the active accordion group
        $("#accordion").on('shown.bs.collapse', function () {
            var active = $("#accordion .in").attr('id');
            $.cookie('activeAccordionGroup', active);
          //  alert(active);
        });
        $("#accordion").on('hidden.bs.collapse', function () {
            $.removeCookie('activeAccordionGroup');
        });
        var last = $.cookie('activeAccordionGroup');
        if (last != null) {
            //remove default collapse settings
            $("#accordion .panel-collapse").removeClass('in');
            //show the account_last visible group
            $("#" + last).addClass("in");
        }
    });

Pero eso no es todo…

Tienes que usar un plugin jQuery llamado jquery-cookie creado por carhartl. Permite manipular cookies de esta manera:

$.cookie('nombre-cookie', valor);
$.removeCookie('nombre-cookie');

Descárgalo aquí:
https://github.com/carhartl/jquery-cookie

Desempaquetar el Zip y buscar el archivo jquery.cookie.js y copiarlo en tu proyecto.

Tienes que incluirlo en tu HTML así:

<script src="/path/to/jquery.cookie.js"></script>

La línea va después de la de jQuery por si acaso, no al revés.

No hagas referencia al archivo en GitHub porque es el archivo es entregado con el MIME text/plain y como tal es bloqueado en Internet Explorer en Windows 7 (porque tiene el MIME incorrecto).

En conclusión: GitHub no es un CDN.

<script src="https://raw.github.com/carhartl/jquery-cookie/master/jquery.cookie.js"></script>

No usar la línea de arriba, no funciona.

Optimizar imágenes para la web.

Para optimizar imágenes en otras palabras reducirlas de tamaño he venido utilizando varias opciones desde el famoso Smush.It de Yahoo, hasta el Image Optimizer que es una extensión para Visual Studio creada por Mads Kristensen.

Desde hace un tiempo atrás la extensión ha venido fallando, primero saltando archivos, dando time-outs, y a veces ya no hace nada.

Yahoo parece que no tiene interés en Smush.it su optimizador de imágenes. A veces es muy lento y a veces no funciona.

Nota: Yahoo ha abandonado Smush.it así que no hay vuelta atrás.

Formato PNG.

Buscando alternativas para optimizar archivos en formato PNG está el famoso PNGGauntlet.

pnggaunlet

Es muy bueno pero algo lento. Y tiene una opción para que sobreescriba la imagen cuando termine.

Para usarlo simplemente arrastras los archivos .png al PNGGaunlet y le das clic al botón «Optimize!» luego esperas… esperas… y como si fuera poco esperas. La espera depende del tamaño del archivo contra más grande peor.

¿Y que hago con los JPG?

Los muchachos de Kraken.io tienen una interfaz web que te permite optimizar tus archivos. Simplemente arrastras y sueltas en el recuadro todas las imágenes que quieras y te las optimiza. Super rápido.

kraken.io

Te da 2 opciones de optimización: con pérdida (lossy) y sin pérdida (lossless), escoge tu veneno.

En las pruebas que realicé he obtenido unos resultados asombrosos con pérdida y sin pérdida no tan asombrosos pero mejores resultados creo que los del Smush.it de Yahoo.

Sólo queda esperar que no se echen para atrás y quiten la opción gratuita.

Otra opción es imageoptim.

imageoptim

Conclusión.

La búsqueda de mejores soluciones para optimización de imágenes nunca termina. Es bueno saber que al menos hay opciones sin tener que pagar.

Si conoces más opciones para optimizar imágenes, por favor deja un comentario.

Convertir una tabla en HTML a JSON.

Escenario: Tienes que convertir una tabla en HTML al formato JSON y no tienes acceso a la base de datos que genera la tabla o la tabla es de un tercero. Tampoco quieres digitar los miles de registros a mano.

Hay varias maneras de lograr esto. Una forma es usar JavaScript y jQuery, existen vídeos en Internet que explican esta manera. Otra opción es usar un plugin de jQuery pero estas técnicas no funcionan si la tabla no está correctamente escrita o en inglés no está «well-formed». Puede que el resultado no sea el esperado o salga un error y no obtengas ningún resultado.

Well-formed: significa que las etiquetas abran y cierren, que el anidamiento esté correcto y que los elementos vacíos terminen correctamente).

Ejemplo:

Correcto:

<b>Hola</b>

Incorrecto:

<b><i>Hola</b>

Elementos vacíos correctamente terminados:

<img />, <br />, <hr />

Anidación incorrecta:

<p>Normal <em>emphasized <strong>strong emphasized</em> strong</strong></p>

Volviendo al tema si la tabla HTML no está bien creada usar JavaScript para obtener los valores probablemente no funcione.

En este caso una solución (no la más elegante ni la mejor probablemente) es valerse del navegador para lidiar con la tabla. En otras palabras los navegadores «corrigen» y «pasan por alto» las reglas para un correcto HTML y logran mostrar la tabla (no sé ni como lo logran).

La idea es copiar y pegar desde el navegador la tabla HTML y pasarla a JSON.

Es más fácil decirlo que hacerlo y una forma que he encontrado es valerse de Excel y pegar la tabla HTML allí (claro, es que no pude con Word).

Luego en Excel graba la hoja de cálculo como «valores separados por comas» o CSV.

Finalmente busca un conversor de CSV a JSON en Internet.

En mi caso utilicé está página web: http://www.convertcsv.com/csv-to-json.htm

Subes el archivo con formato CSV y si quieres te pones a jugar con las opciones. En mi caso funcionó a la primera.

Aquí unas imágenes de la página web:

csv2json

 

csv2json2

En la imagen superior pueden ver el resultado la conversión en JSON.

No es una solución muy sofisticada pero hace el truco. Si conocen de una mejor manera de pasar una tabla HTML (mal formada) a JSON favor poner un comentario.

Instalar mapas de Perú en GPS de marca Garmin.

garmin-peru-ruteableNo sirve de nada un GPS sin los mapas, a menos que seas un cartógrafo y te sepas guiar sólo por la latitud y longitud.

Instalar los mapas y mantenerlos actualizados ayuda a que tu GPS te lleve a donde quieras llegar sin contratiempos.

Instalar el mapa de Perú en los GPS de marca Garmin es relativamente fácil. Por eso compra Garmin y no te hagas problemas.

Los buenos muchachos de Perú Ruteable tienen una página web donde publican sus mapas y los distintos procedimientos para instalarlos en varios GPS populares (no sólo Garmin).

Hay varios procedimientos pero aquí voy a explicar el que utilizo que es muy simple y me parece que cualquiera lo puede realizar.

  1. Descarga desde este enlace el archivo gmapsupp.img (aprox. 41.7MB):
    http://www.perut.org/english.htm
  2. Inserta una memoria microSD en tu computadora o laptop, si no tiene lector de memorias entonces utiliza un adaptador microSD a USB.
  3. En la memoria microSD crea una carpeta y pon el archivo gmapsupp.img. (El que descargaste en el paso 1).
  4. Extrae la memoria microSD de tu computadora y ponla en el GPS.

Ejemplo de lector de tarjetas microSD:

garmin-usb-microsd
Insertas el microSD por la parte posterior y luego insertas el lector USB en la computadora.

En el paso 3 el nombre de la carpeta a crear depende de qué modelo de Garmin hayas comprado.

garmin-tabla

Por ejemplo para el caso de un Nuvi2595LMT tengo que crear una carpeta «map» y el nombre del archivo puede ser cualquiera .

Las siglas LMT en los Garmin significan lo siguiente:

  • LM significa «Lifetime Maps», el dispositivo puede actualizar los mapas de por vida. Entras a Garmin, usas el software llamado Garmin Express y actualizas los mapas. El problema es que Perú se tiene que comprar como parte de nüMaps Lifetime South America.
  • T significa «Traffic» o Información del tráfico.
garmin-express
Software Garmin Express actualizando mapas (4.7GB). Está descargando a 1.6MB/s y va a demorar 44 minutos. Es útil para actualizar el software del dispositivo también. Está en versión 8.20.

Consideraciones.

No recomiendo esto pero puedes conectar directamente el Garmin a la computadora con un cable USB. En este caso ya no requieres una memoria microSD copias el archivo directo a la memoria interna del GPS. Sigue las recomendaciones de este enlace sobre donde ponerlo y donde no ponerlo: http://perut.org/index.php?PHPSESSID=tdphm9apjconno1oksjhlm03u2&topic=496.0

En realidad si tu Garmin tiene un slot para insertar una memoria microSD es mucho más simple copiar el archivo gmapsupp.img allí que correr el riesgo de alterar los archivos de la memoria interna de tu Garmin y luego no funcione. El poder para destruir para siempre tu GPS está en tus manos, tú decides.

Si vas a usar una memoria microSD de preferencia cuando la insertes en el GPS Garmin asegúrate que esté apagado (a veces está en espera stand-by). Si eres super valiente insértalo nomás ¿qué le va a pasar? De hecho ten el comprobante de compra, el certificado de garantía y unos dolarillos, por si acaso.

Se busca.

Si has actualizado un GPS de ésos que vienen instalados en los autos de hoy, los que uno no sabe qué marca son a veces. Me gustaría saber cómo lo hicieron.

Nuevo libro Windows 8.1 Succinctly de Syncfusion.

syncfusion-windows8.1-succinctlyPuedes descargar el nuevo libro Windows 8.1 Succinctly de Syncfusion aquí. Está en inglés.

«Obtén lo máximo de Windows 8.1 con Windows 8.1 Succinctly escrito por Matteo Pagani. Esta completa reseña te guiará desde una comprensión básica del sistema operativo hasta desarrollar aplicaciones para ambos ambientes escritorio y móvil. Desde los conceptos esenciales (Visual Studio, XAML y C#) a trabajar con archivos (almacenamiento, bases de datos y configuración), este valioso recurso te ayudará a emplear el poder de Windows 8.1 para desarrollar aplicaciones en ambientes de Microsoft. Descarga tu copia ahora».

Ya viene, parte 2: More Windows 8.1 Succinctly.

Samsung SM951 (512GB) PCIe SSD.

samsung-sm951La revolución de los «discos» SSD PCIe ya está sobre nosotros. Casi todo vendedor de controladores ha mostrado un diseño PCIe SSD. Un gran número de productos llegarán en la segunda mitad del 2015.

Samsung comenzó la tendencia en el 2013 con la introducción del XP941.

A pesar de ser un producto OEM el XP941 ha sido muy popular entre los entusiastas. La ventaja en rendimiento sobre un disco SATA de 6Gbps es significante tanto que vale la pena pagar un poco más por él. El puerto SATA 6Gbps ya se encuentra saturado, PCIe y el XP941 ha sido la única manera de mejorar el rendimiento de IO (entrada/salida) de manera económica. Existen discos PCIe más rápidos pero su enfoque empresarial hace los precios inalcanzables para la mayoría.

El sucesor del XP941 es el SM951. Inicialmente iba a soportar NVMe. Desafortunadamente Samsung cambió sus planes y el SM951 no soporta NVMe pero provee una actualización de PCIe Generación 2 a Generación 3 lo cual en teoría duplica el ancho de banda disponible. Samsung no ha explicado la razón por la cual dejó fuera el soporte NVMe, de lo que sabemos los actuales chipsets no soportan NVMe de manera apropiada por defecto. Es probable que los socios OEM de Samsung hayan preferido mantener AHCI para mejor compatibilidad.

Samsung está trabajando en discos SSD que soporten NVMe así que en el futuro veremos alguno de ellos.

El SM951 es un producto OEM como su predecesor. No se puede comprar en canal de «retail». Lenovo utiliza este «disco» en su laptop ThinkPad X1 Carbon. Estará disponible a finales de mayo. El precio será 10% más que el actual XP941, un poco más d e 1 dólar por gigabyte. El precio se ve afectado por la capacidad de producción de Samsung y la demanda, es muy temprano para decir precios.

Samsung SM951 Especificaciones
Capacidad 128GB 256GB 512GB
Form Factor M.2 2280 (doble-lado)
Controlador Samsung S4LN058A01 (PCIe 3.0 x4 AHCI)
NAND Samsung 19nm 64Gbit MLC
Lectura Secuencial 2,000MB/s 2,150MB/s 2,150MB/s
Escritura Secuencial 600MB/s 1,200MB/s 1,500MB/s
4KB Lectura al azar 90K IOPS 90K IOPS 90K IOPS
4KB Escritura al azar 70K IOPS 70K IOPS 70K IOPS
L1.2 Consumo de energía 2mW 2mW 2mW
Consumo en espera 50mW
Consumo en actividad 6.5W
Encriptación N/A

La velocidad de 2.15GB/s de lectura es casi el doble que el XP941.

¿Es «Bootable»?

Cuando fue lanzado el XP941, el problema número 1 fue la falta de soporta para arrancar desde este disco. El XP941 no tenía sus propios controladores que cargan antes que el BIOS de la placa madre y por eso el XP941 requería una actualización de BIOS del fabricante para poder usarlo como un disco de arranque. A la fecha la mayoría de placas basadas en Z97 y X99 tienen soporte en la BIOS para arrancar desde el XP941. Desafortunadamente chipsets antiguos y placas de AMD no son soportadas.

Confirmamos que el SM951 arranca en una placa: la ASUS Z97 Deluxe usando el BIOS 2205 y el dispositivo se muestra como cualquier otro disco en el menú de arranque. También funciona en Mac Pros en forma de torre (modelos del 2012).

Conclusión.

El SM951 supera al XP941 por un margen de entre el 50% al 100%. La actualización del XP941 al SM951 representa un paso más grande que pasar de SATA 6Gbps al XP941. No se puede argumentar que simplemente el SM951 es el cliente SSD más rápido por un gran margen.

La única desventaja en estos momentos es no poder conseguir uno. La única manera de conseguir uno ahora es comprar la laptop ThinkPad X1 Carbon de Lenovo (la que está configurada con PCIe SSD). La configuración más barata que viene con un disco de 512GB SM951 cuesta $1,709.10.

Como no hay disponibilidad hasta finales de mayo, hay una posibilidad que para esa fecha no sea el SSD más rápido del mundo.

Solo queda esperar.

AnandTech – Kristian Vättö.