Link del día: SVG y aplicaciones prácticas

SVG son las siglas de Scalable Vector Graphics, algo que no es relativamente nuevo (siendo su primera versión en el 2001), pero algo que hace no mucho comenzaron a aceptar los exploradores (qué les tomó tanto tiempo?). Dejando de lado a Internet Explorer, que aún no parece soportarlo de forma nativa (aunque hay plugins), la gran mayoría de los exploradores ya lo soportan, dando la posibilidad de que podamos insertar gráficos interactivos y hasta dinámicos en nuestras aplicaciones web, sólo escribiendo XML.

Con una aplicación que publiqué el otro día pueden verificar en dónde aplicarlo y dónde no para que lo soporten la mayoría de los exploradores, pero si les interesa indagar en cómo funciona y qué cosas se pueden hacer, pueden visitar una guía paso a paso que escribieron en la W3C llamada An SVG Primer, en donde tienen una guía extensa de cómo trabajar con SVG, cómo agregarle comportamiento, cómo agregar animaciones, como usar JavaScript, e incluso tenemos un apéndice con introducción a HTML e introducción a JavaScript si es que no lo tenemos del todo claro.

Soy un zorrinito escalable.

(Read more →)

Link del día: LINQ y JSON en JS

Aquellos que trabajamos en C# y hemos jugueteado un poco con el lenguaje de LINQ sabemos lo interesante que es poder fácilmente trabajar con datos. Hacer una búsqueda por algún campo de un array antes podía ser algo tan trabajoso como recorrer uno por uno, poner en una lista nueva los que cumplían con este criterio, luego utilizar la nueva lista y volver a filtrar si es que lo necesitamos. Ni hablar de trabajar con dos o más listas al mismo tiempo. Sin embargo, LINQ nos permitió realizar trabajos como ese en códigos de una línea como lista.Where(condicion).Select(campo).

LINQ se jacta de ser transparente y poder ser aplicado a cualquier fuente de datos, y acá hubo gente que quizo llevar eso más allá, para hacerlo trabajable de la misma forma en JavaScript, para la programación de cualquier aplicación web, y el manejo de datos listas de JSON. A esto llamaron jLinq, un trabajo de Hugo Bonacci, que en su web publica varios de sus proyectos e ideas.

La verdad es que no sé qué performance tendrá, pero si queremos simplificar un poco el procesamiento de datos de nuesto JavaScript (especialmente si mostramos cosas como tablas, listas o mucha información que se pueda ordenar, filtrar, etc.), esta parece ser una buena aproximación.

Soy un zorrinito mezcla-lenguajes.

(Read more →)

Link del día: Academia Virtual de Microsoft

Todos saben lo mucho que me apasiona poder encontrar lugares online en donde se den cursos gratuitos de forma medianamente seria, con profesionales que sepan del tema que hablan, y a veces hasta con exámenes que permitan evaluar y certificar que uno sabe lo que estudió. Mi primera aproximación a uno de estos fue con el programa Desarrollador 5 Estrellas de Microsoft (del cual todavía estoy debiendo un par de exámenes), y luego Sun Learning Connection (el cual vi muy completo pero nunca tuve tiempo suficiente de hacer cursos). Ahora me encuentro con otro más, aparte de la cantidad de links que ya he provisto antes, como el proyecto de Academic Earth, o la compilación de Free Lectures, pero no es el caso de ellos.

En este caso, se trata de la Microsoft Virtual Academy, otro de los proyectos educativos de Microsoft para mantener a la gente informada y capacitándose sobre distintas temáticas, muchas, por supuesto, relacionadas a las tecnologías que ellos desarrollan. Está relacionado al resto de la red de TechNet que ellos han creado, por lo cual todos los estudios que desarrollemos con Microsoft se van relacionando a nuestro Live ID, que utilizaremos en todos estos servicios por igual para identificarnos.

Soy un zorrinito alumno.

(Read more →)

Link del día: eBooks ténicos, viajes, información y más

De casualidad me crucé con un link de un sitio llamado Mic-ro.co(s)m (el paréntesis es porque la URL no tiene la s), que es básicamente una colección de links de este lugar, en alemán. Sin embargo, la sección que más famosa se hizo de este sitio prácticamente estático es la sección de eBooks, que ofrece una buena cantidad de eBooks para bajar y leer (o para leer online) sobre distintas temáticas:

  • C y C++
  • Bases de datos y SQL
  • Patrones de diseño
  • Diseño Gráfico y Diseño de UI
  • HTML y JavaScript
  • Java
  • Matemática
  • Redes e Internet
  • Sistemas Operativos
  • Seguridad y Criptografía
  • Smalltalk
  • Ingeniería de Software
  • Teoría de la Computación e Inteligencia Artificial
  • XML
  • Libros de referencias de informática
  • Temas misceláneos de informática
  • Periódicos online (sobre informática)
  • Guías cortas
  • Libros no relacionados a la informática (hay un poco de literatura, enciclopedias, nutrición, viajes, economía, historia, religión, física, oratoria, etc…)
  • y links a otros lugares…

Y por si no fuera poco con eso, hay una buena colección de links en la homónima sección, sobre temas variados también, y si queremos una colección extra de links con cosas relacionadas a los viajes, podemos visitar la sección viajes de este sitio.

Pero por último yo quería mostrar algo que me hizo acordar a los viejos metabuscadores de sitios que alguna vez todos usamos. Si queremos revivir esa nostalgia, podemos usar el metabuscador de mic.ro-cosm.

Soy un zorrinito linkeado.

(Read more →)

Link del día: Compartir escritorio en dos pasos

Alguna vez comenté de los beneficios de un sistema llamado Crossloop, que tenía la ventaja de ser un programita que bajamos, instalamos, y en dos clicks ya estamos compartiendo nuestro escritorio. Esto hacía muy fácil la posibilidad de ayudar a alguien o brindar servicio técnico a distancia (y de hecho, es el uso primario que se le está dando y lo están mejorando para avanzar en esa dirección), pero a veces no necesitamos tanto control, sino solo poder mostrar la pantalla en tiempo real a alguien más, y queremos alguna herramienta que solo con un click, ya tengamos funcionando eso.

Para eso tenemos una nueva tecnología que LogMeIn hace pública, LogMeIn Express. Esta afamada empresa con sus productos de administración remota ahora nos permite bajar un programita de 700 k, que solo con ejecutar ya estamos compartiendo nuestra pantalla, y con pasar un código numérico a alguien más, esta persona no tiene más que ingresar esos dígitos en esa web y ya estará viendo nuestra pantalla en tiempo real. No sólo eso, tambien podemos darle el control y que esta persona maneje nuestro teclado y nuestro mouse, permitiéndole trabajar por nosotros, mientras nosotros miramos lo que ellos hacen.

En fin, lo que me interesa destacar de esto es la simplicidad: un click, y funciona. Así deberían de ser las cosas.

Soy un zorrinito exigente.

(Read more →)

Link del día: Gráficos con Google

Hace un tiempo anduvimos en búsqueda de un buen plugin / framework / herramienta web que me permitiera utilizar gráficos en una aplicación web que nos encontrabamos desarrollando. Pasamos por varias opciones, algunas de las más interesantes siendo jqPlot para jQuery, o flot (también para jQuery), pero terminamos decidiéndonos por OpenFlashChart.

Sin embargo, encontré luego una opción muy útil para sitios estáticos que quizá necesiten solo un poco de HTML, o sitios dinámicos que no quieran incorporar la complejidad de generar gráficos en su código. Esta opción es la que Google Chart API ofrece. Y es tan fácil como hacer un link a una imagen que tenga ciertos códigos que van a determinar el gráfico que mostremos.

Opciones hay muchas, distintos tipos de gráficos, colores, opciones, aunque siendo imágenes, les falta algo que las otras opciones tienen, que es la interactividad. Pero nuevamente, si lo importante es el diseño simple y la tecnología a usar (o tiempo) es limitada, esta puede ser la mejor opción.

Soy un zorrinito graficado.

(Read more →)

Link del día: URLs cortas de verdad

Para algunos servicios en donde se comparten links, como redes sociales, o como simple comodidad para compartirlos, es muy útil que las URLs sean acortadas. Es decir, que en lugar de tener un http://www.example.com/posts.php?postid=2313&searchterm=search&l=en, podemos tener algo como http://bit.ly/6bCxjl, que lleva al mismo lugar. No sólo eso, muchos servicios de acortamiento de URLs (como Bit.Ly, que acabo de mencionar), ofrecen URL-tracking, que nos permite saber cuánto o de dónde se han usado las URLs que hayamos compartido.

Más allá de eso, quería comentar de un servicio que vi funcionando la semana pasada (ya no, pero tengo esperanzas de que vuelva a funcionar) llamado http://to/. Sí, tal cual, no tiene nombre de dominio. Este acortamiento de URLs parece que lo introdujo el gobierno de Tonga (habrán sido ellos realmente?) y podría acortar nuestra URL de ejemplo a algo como http://to/EVFaj. (No la prueben, no funciona, incluso aunque redireccione, no va a ningún lado).

Pero hasta que ese funcione, podemos probar cualquier cantidad de otros servicios disponibles hoy por hoy, algunos ya muy conocidos:

Cabe destacar que algunos consideran que las URLs cortas “rompen” la internet, porque como usuario, uno no sabe a dónde va a parar, y como bot (como los de Google que surfean la internet), se encuentran con que en realidad los links llevan a un lugar que no es el destinado (ya que estos en realidad funcionan haciendo redirecciones). Para revertir estas situaciones existen servicios como Real-URL, LongURL, Untiny.me y PrevURL.

Soy un zorrinito acortado.

(Read more →)

Link del día: Tecnologías Web

Para cerrar la semana vamos a ver un poquito de nuevas tecnologías web que están aflorando desde hace un tiempo. Comencemos por CSS 3, HTML 5, SVG o Canvas, que son cosas que últimamente están ganando mucho la atención de los desarrolladores multimedia. La pregunta es: cuándo sabremos que esto está disponible para usarse y en donde? Para responder de forma fácil esa pregunta es que tenemos a una aplicación web llamada When can I use…, en donde podemos filtrar según nuestros deseos de compatibilidad y ver qué tan cerca estamos de poder usar estas posibilidades sabiendo que será soportado por el público al que apuntamos.

Como extra (y compensando el link del día de ayer que faltó), les dejo una guía muy didáctica, detallada al extremo llamada Creating a Web App from Scratch. Eso es, cómo se construye una aplicación web, desde que se tiene la idea hasta que se termina y se publica. Muy interesante, y con muchas buenas ideas para aprender cómo organizar un proyecto de este tipo.

Soy un zorrinito web.

(Read more →)

Link del día: TODOs pero con onda

Creo que ya éramos varios los que estábamos en busca de alguna aplicación al estilo agenda, pero sin horarios (es decir, no es una agenda). Algo al estilo de listado de cosas pendientes, que pudiéramos acceder y actualizar de distintos lados. Que fuera simple, que fuera fácil de entender, que no haya que rellenar muchas cosas.

Finalmente encontré algo que se acerca muchísimo a eso que buscábamos y, creo yo, que lo voy a estar usando para poder actualizar el listado de cosas pendientes. La idea es básicamente no olvidarse de las cosas que uno debe hacer, no importa exactamente (o no importa tanto) cuándo se tengan que hacer, sólo cuáles son y cuáles ya están hechas.

Les dejo que visiten entonces a Teux Deux, una aplicación web encargada de eso. (via NQB, via swissmiss). Será el nombre una forma rara de decir “To Do”?

Soy un zorrinito atareado.

(Read more →)

Sistemas Jenga

Suelo decir muchas tonterías a modo de chiste, pero de tanto en tanto, alguna de ellas tiene un poco de verdad. Hoy, hablando de un sistema del que estoy encargado (entre otras personas) de mantener, pensé que estaba muy difícil su actualización, y lo llamé un Sistema Jenga. ¿Qué es un sistema Jenga? Es un sistema para el cual agregar una pieza hace que peligre toda la estructura de su programación.

Aquí participan varios conceptos que alguna vez he mencionado. Uno de ellos es, por supuesto, la arquitectura o la estructura con la cual se ha programado, diseñado y modelado el sistema en cuestión. Es obvio que una buena arquitectura, o una pensada en torno a futuros cambios, pueda ser lo suficientemente flexible como para aceptar futuros nuevos requerimientos sin necesidad de rediseños mayores o cambios drásticos en la programación anterior. Pero ese no es el concepto que más me interesa discutir hoy.

Otro de los conceptos es el hecho de cuál es el propósito de una pieza de software. Lo considero un punto incluso filosófico, porque está claro que no hay un sistema multipropósito, que realice todas las funciones que podamos llegar a necesitar, y creo que no debería haberlo tampoco, porque sería infactible que dicho sistema se adapte a todas las situaciones particulares que puedan surgir. Por tanto, el riesgo que tal hipotético sistema introduciría en nuestros procesos, sería catastrófico. No haría falta mencionar tampoco, que la programación/diseño/análisis de ese sistema se aproximaría a lo altamente infactible. Muchos sistemas operativos ya proveen de estas posibilidades gracias a la integración de muchas pequeñas herramientas, pero no es técnicamente parte del mismo sistema, a pesar de que pueden llegar a interactuar de forma muy íntima.

Entonces, a medida que pasa el tiempo, es muy factible que los requerimientos para un sistema se vayan modificando. Muchas veces los cambios son pequeños, pueden ser cuestiones de usabilidad o cuestiones de performance. Incluso puede que haya una modificación grande en el sistema, agregando nuevas funcionalidades y hasta quitando funcionalidades obsoletas, pero el objetivo o el propósito del sistema se mantiene, hace lo que siempre debió hacer.

** ¿Qué pasa, entonces, cuando cambia el enfoque de negocios y los requerimientos del sistema pasan a tener un propósito distinto del original?**

Yo creo (aunque es mi opinión personal) que en ese caso el sistema se vuelve obsoleto, y pierde su razón de ser. Es entonces en donde el mantenimiento de esos sistemas para acomodarse a los nuevos requerimientos puede ser algo dramático, porque se está intentando usar algo que ni siquiera estaba pensado de la forma que se necesita para algo que ni siquiera estaba pensado que se iba a necesitar. Casos tan drásticos son raros, pero son factibles de ocurrir. Y creánme, ocurren.

{ :align-right}

Esto no es nada nuevo tampoco. Se sabe, y es algo conocido como “la curva de la tina de baño” (o su nombre en inglés “Bathtub curve”) que el ciclo de vida de un sofware, o la utilidad que el mismo proporciona a sus propósitos es poco al principio, hasta que los usuarios logran sacar el máximo provecho de los sistemas, hasta que los demás sistemas lograron integrarse de forma correcta al mismo y hasta que los bugs iniciales hayan sido corregidos. En la etapa media es el ápice de la utilización de esos sistemas, pero pasado el tiempo, es cuando el sistema ya deja de satisfacer las necesidades del usuario.

Aquí surge la discusión de qué sucede con la curva en el final. Para productos comunes (por ejemplo, elementos mecánicos) el desgaste producido comienza a introducir nuevas fallas que de a poco vuelven al producto inusable. En el software, es fácil reacomodar la lógica del mismo y entonces, adaptándose a las nuevas necesidades, cabe la posibilidad de que se mantenga en su estado de mejor uso. Así, la curva finalizaría con una forma de sierra, en donde se observarían pequeños picos (dado que al usuario le deja de resultar útil el sistema) y tras dicho re-acomodamiento, una planicie.

Sin embargo, la manutención de un producto a través de la eternidad no es algo factible, y quizá no es deseable tampoco. Aquí es en donde la otra opinión se asoma al respecto, diciendo que la vida de un software también se desgasta proporcionalmente al tiempo que estuvo activo, y, personalmente, creo que tiene sentido. Las necesidades a través del tiempo suelen cambiar muy drásticamente y, aunque una suma siempre haya sido una suma, las cosas tienden a simplificarse para el usuario y cuando un click antes hacía una suma, ahora debe realizar una estimación a futuro.

Y finalmente, otra cosa que quería mencionar al respecto, es la terrible necesidad del backward compatibility. Esto significa que a medida que vamos mejorando y agregando funcionalidades a nuestro sistema, necesitamos algunas veces tener compatibilidad con las versiones viejas de nuestro sistema. A veces es fácil, porque nuestro sistema puede ser una web application que no requiera de muchas entradas, y por tanto podemos cambiarlo todo sin necesidad de tener esa precaución. ¿Qué pasa si en cambio Microsoft, al implementar su nuevo formato de archivos de Office 2007 hubiera hecho inútiles los archivos de Office 2003 hacia atrás? ¿Qué pasa si en cambio cuando decidieron implementar IPv6 no hubieran tenido en cuenta que somos millones los que estamos actualmente usando IPv4 y que no podemos (o queremos) comprar nuevas placas de red en este momento?

Por eso, siempre es una cuestión a considerar, no hay ni blancos ni negros, pero siempre que un sistema debe mantener compatibilidad con sus versiones anteriores, se agrega complejidad, y de alguna forma es un requerimiento extra que nos impide avanzar con las modificaciones que quisiéramos hacer para avanzar con las nuevas funcionalidades del sistema.

Es entonces, en conclusión, en donde el mantenimiento de un sistema se vuelve algo tan pesado que quizá sería mucho más provechoso realizarlo de cero con las nuevas necesidades, y en donde la modificación del mismo lo hace peligrar cada vez más en su integridad, algo que a mí me gusta llamar Sistemas Jenga.

Soy un zorrinito jenga.

(Read more →)