2015-01-28

Como hacer nudos

En Nudos.org encontrarás una extensa colección de vídeos originales dónde mostramos todo el proceso para la correcta ejecución de todo tipo de nudos, a través de la técnica Stop motion ofrecemos los resultados de forma clara y didáctica. Actualmente encontrarás más de 70 vídeos correctamente clasificados según cuál sea su origen o uso más habitual. Además junto con cada vídeo puedes leer una descripción detallada con información útil sobre el nudo que estés observando, cómo por ejemplo: su origen, sus ventajas e inconvenientes y la posibilidad de realizar nudos alternativos.

Nudos.org es tu página de referencia tanto, si practicas algún deporte, te gustan las actividades al aire libre y de aventura o si deseas ser la persona más elegante en tu próxima cena familiar o de negocios.

2015-01-25

Las fuentes de iconos (Icon Fonts)

Las fuentes de iconos o fuentes de símbolos, han sido, y son de gran utilidad para un montón de proyectos; incluyen desde iconos de redes sociales a flechas y glifos. Todo lo que se necesita para manejarlos es CSS (y mejor si es la versión 3).

En la actualidad no se puede predecir ni el ancho ni la altura con la que serán vistas nuestras paginas web, y por otro lado, los iconos,(que hasta ahora), han sido imágenes, (con mucha frecuencia), aparecen pixelados al perder definición por mostrarse en cualquier pantalla (y con resoluciones) distinta(s) a la que originalmente fueron pensados y diseñados

Para resolver este 'problemilla' están apareciendo unas nuevas fuentes de iconos que están compuestas de gráficos vectoriales. Sus principales ventajas son:
  • Se ven tan nítida y claramente como el texto en cualquier pantalla.
  • Todos los navegadores web, incluso IE6, tienen la capacidad de manejar fuentes incrustadas en una página HTML.
  • Pueden modificarse sobre la marcha a través de CSS. Cambiar la escala, cambiar el color, añadir una sombra etc.
  • Como son vectoriales, se ven muy bien en densidades de píxeles más altas, como las que se encuentran en las pantallas "Retina display" de Apple.
  • Sólo se necesita una petición HTTP para todos los iconos. No es necesario utilizar ningún tipo de trucos difíciles para ajustar iconos como sprites o sustitución de la imágenes.
Los sitios de referencia más populares, serán (probablemente) IcoMoon y Fontastic, que permiten al usuario seleccionar entre cientos (sino miles) de posibles iconos y crear y descargar esa fuente en cuestión de segundos. Además, es aconsejable consultar el exhaustivo artículo de Chris Coyer (CSS Tricks)  " The Big List of Flat Icons & Icon Fonts " , donde se encuentra una lista muy extensa de enlaces y muestras de iconos listos para usarse en cualquier sitio.

2015-01-04

Levenshtein, midiendo las palabras


Levenshtein  Info en  Wikypedia

Sin duda, una de las principales tareas a las que nos enfrentamos los programadores, es la gestión de palabras. Un nombre de usuario, un modelo de coche, una carpeta, etc… constantemente solicitamos al usuario que introduzca palabras pero, ¿están bien escritas?.

Verificar un código (DNI, EAN, VISA, …) suele ser muy sencillo, porque es habitual que cuenten con códigos de verificación pero, ¿cómo verificamos si una palabra está bien escrita?, mejor aún ¿cómo podemos sugerir al usuario alternativas correctas?.


Definiendo el problema

Cuando escribimos un documento podemos activar el corrector ortográfico, en tal caso, es habitual que mientras escribimos, se resalten aquellas palabras que no aparecen en el diccionario. Además, se nos muestra una palabra (o varias) que probablemente sea la que queríamos escribir.
En nuestras aplicaciones, no solemos incluir un “corrector ortográfico”, sin embargo, es realmente sencillo y mejora enormemente la experiencia de usuario. Por ejemplo, es probable que en vuestro cliente de correo electrónico, al escribir una dirección de correo, se os sugieran aquellos cuyo prefijo coincide exactamente con los de la libreta de contactos. Por ejemplo, si escribís “juan”, se sugerirá “juanmonfor@genbetadev.com”, pero si os habéis equivocado y ponéis “jjuan” ¿porqué no sugiere nada?.
Si nuestra aplicación solicita al usuario un nombre de usuario, de una máquina, una carpeta, etc… ¿porqué exigirle que no cometa errores al escribir?, podemos hacer que nuestro “autocompletado” sea tolerante a fallos.

Levenshtein, midiendo las palabras

Levenshtein es una distancia ideada por Vladimir Levenshtein en 1965 que nos permite medir la distancia entre dos secuencias, por ejemplo de caracteres.
En concreto, dadas dos secuencias A y B, la distancia Levenshtein nos informa del número mínimo de cambios (inserción, eliminación o sustitución de elementos) que deben hacerse a una cadena para obtener la otra.
Por ejemplo, la distancia Levenshtein entre “juan” y “jjuan” es de una única operación (eliminar/insertar una “j”).
La función Levenshtein es realmente sencilla y no requiere explicación, ésta podría ser una implementación en “javascript”:

// Levenshtein(String, String) -> Integer
function Levenshtein(a, b) {
    var n = a.length;
    var m = b.length;
    // matriz de cambios mínimos
    var d = [];
    // si una de las dos está¡ vacía, la distancia
    // es insertar todas las otras
    if(n == 0)
        return m;
    if(m == 0)
        return n;
    // Inicializamos el peor caso (insertar todas)
    for(var i = 0; i <= n; i++)
        (d[i] = [])[0] = i;
    for(var j = 0; j <= m; j++)
        d[0][j] = j;
    // cada elemento de la matriz será¡ la transición con menor coste
    for(var i = 1, I = 0; i <= n; i++, I++)
      for(var j = 1, J = 0; j <= m; j++, J++)
          if(b[J] == a[I])
              d[i][j] = d[I][J];
          else
              d[i][j] = Math.min(d[I][j], d[i][J], d[I][J]) + 1;
    // el menor número de operaciones
    return d[n][m];
}

Levenshtein de subcadena

La distancia Levenshtein la podemos aplicar directamente en multitud de escenarios, pero únicamente en aquellos con una palabra, es decir, Levenshtein no funcionará bien en escenarios en los que debamos contrastar la entrada del usuario “vistamar” con un valor en la lista de “hotel vistamar”, es evidente que el usuario sí se refiere al “hotel vistamar” ¡pero Levenshtein ha dado una distancia de 6!. Para poder aplicar Levenshtein en estos escenarios, voy a sugerir una función adicional:


/*
LevenshteinSubminimal(String A, String B) -> {k: Integer, t: String}
    A, es la cadena que introduce el usuario
    B, es la cadena candidata a ser alternativa del usuario
    k, es la mínima Levenshtein de A sobre todas las subcadenas de B
    t, es la cadena con menor distancia Levenshtein
*/
function LevenshteinSubminimal(A, B) {
    var a = A.length;
    var b = B.length;
    // siempre comparamos A con las subcadenas de B
    var f = function(s){return Levenshtein(A, s)};
    // si A es mayor que B no comparamos subcadenas
    if(a >= b)
        return {k: f(B), t: B}
    // peor caso y cotas
    var m = {k: b+2, t: null}, c1 = a-1, c2 = a+1;
    for(var p = 0; p < b - c1; p++)
        for(var l = c1, c3 = Math.min(c2, b - p); l <= c3; l++) {
            var t = B.substr(p, l), k = f(t);
            // mejor caso
            if(m.k >= k)
                m = {k: k, t: t};
        }
    return m;
}


Efectivamente, como habrás pensado, la función LevenshteinSubminimal ya no es una distancia (aunque nos devuelva una), la forma más sencilla de verlo es que ya no se cumple la propiedad de simetría.
Como única aclaración sobre la función LevenshteinSubminimal decir, que tomamos todas las subcadenas b de B tales que len(A) – 1 <= len(b) <= len(A) + 1, esto es así para relajar los caracteres iniciales y finales de cada subcadena.

Conclusiones y notas adicionales

Como ves, crear una interface de usuario tolerante a fallos es muy sencillo (no sé porqué mi cliente de correo es tan estricto) y mejorará sustancialmente la experiencia de usuario.
La distancia Levenshtein no es la única posible, existen otras definiciones y variantes de distancia entre secuencias que pueden ser más adecuadas dependiendo del contexto.

2015-01-03

Un pensamiento ¿Profundo? Sobre si usar (o no) PayPal

He estado mirando las condiciones de servicio de PayPal para ver si me abro una cuenta o no y al final he decidido que mejor no.  ¿La razón? Pues…

PayPal. Es una empresa que permite a sus usuarios la realización de pagos y cobros de forma instantánea. Las personas que se dedican a realizar transacciones en Internet, por ejemplo en e-Bay, generalmente encuentran en Paypal la forma idónea para realizar sus actividades comerciales. Por eso es habitual que cada vez sean más las tiendas electrónicas que acepten PayPal como otra forma más de pago más.

El sistema de pago por Internet es extremadamente simple: cuando el usuario quiere pagar, sencillamente introduce una cuenta de e-mail y el vendedor carga el importe. PayPal retira entonces ese dinero de la cuenta del usuario y lo traspasa a la del vendedor, si el dinero de la cuenta Paypal no cubre el total del importe, Paypal carga la diferencia a la tarjeta de crédito asociada.

En principio, parece que todo son ventajas  pero existen varias razones importantes para evitar usar Paypal:
  • Paypal NO es un banco, es un empresa privada que presta unos servicios financieros y no está respaldada por ningún sistema bancario, si Paypal quiebra pierdes tu dinero.
  • Según las condiciones de servicio de Paypal, al hacerte usuario renuncias a los derechos de reembolso por utilización fraudulenta o no autorizada de tu tarjeta de crédito.
  •  Falta de cobertura legal, al ser una empresa estadounidense, cualquier contencioso que alcance la vía jurídica deberá resolverse en Estados Unidos, presentando cuanto menos dificultades para que los usuarios extranjeros puedan defender sus derechos por la vía legal.
  •  Las condiciones de Paypal son abusivas y cambian constantemente, entre sus páginas de condiciones se aprecia la falta de legislación internacional sobre este tipo de empresas. Según sus condiciones PayPal puede bloquear preventivamente las cuentas de un usuario sin tener que dar más explicaciones. Hay numerosos hilos en foros que explican este tipo de abusos por parte de Paypal e incluso hay constituidas asociaciones de usuarios que han interpuesto demandas judiciales.
  •  Paypal puede embargar el saldo de la cuenta indefinidamente, del mismo modo que en el punto 4 para recuperar las cantidades embargadas se necesitarán muchísimos trámites y paciencia, ya que su servicio de atención al cliente es casi tan eficiente como el de e-Bay. Y por supuesto las cantidades embargadas serán custodiadas por Paypal mientras dure la “investigación”.
  • El usuario siempre tiene las de perder ante cualquier problema que surja, al ser PayPal el único juez tomara la decisión que más le convenga a la empresa. Si el usuario recibe un pago realizado con una tarjeta de crédito robada los fondos le serán embargados, si el dinero se pierde al gestionar el cobro el usuario tendrá que realizar innumerables trámites para optar a recuperarlo, si como comprador no recibe el producto solo recibirá una parte del importe siempre que puedan embargar esos fondos al vendedor.
  • Las cuentas de Paypal son un botín muy deseado por los ciber-delincuentes, es frecuente recibir correos falsificados haciéndose pasar por eBay o Paypal con la esperanza de tener acceso a las cuentas de sus usuarios. Aunque PayPal no es la única empresa que ha sido víctima del spoofing sí que es cierto que es una de las que más lo sufre.
  • La utilización de PayPal significa tener que aceptar la ética comercial de esta empresa y esperar que actúe honestamente por razones de prestigio, pero debido a la falta de un marco legal que abarque este tipo de actividades no es una institución que ofrezca garantías a sus usuarios