Link of the day: Internet Safety
A couple of days ago, one internet link surfaced between all of the popular ones for being one-big-and-for-all resource for online safety. This safety I’m talking about is not only the kind of safety where you want to protect your data, but the one where you want to protect yourself and your family. If you’re close to technology, and if you live part of your life online, this is surely something you must think of sometime.
SimpleK12 posted a resourcefull guide called Internet Safety Resources, where it covers different topics, as preventing online bullying, avoiding inappropriate content, how to deal with children in difficult situations, identity theft, internet addiction, online gambling, pornography, data security, viruses, browsers, fraud, phishing, gaming sites, hoaxes, forums, netiquette, online journalism and blogging, cellphones, social networks, download sites, P2P, copyright and piracy, plagiarism, laws, and further more. That big list I just mentioned is a quick scan I did on the titles of some articles.
So, quite complete, right? Between the articles, there are some resources which you may interact with, organizations available to help you with your doubts or personal problems, and even to take you as part of them. Make sure to be safe.
I’m a safe little skunk.
Link del día: Usar código para interpretar código
El título no es novedoso de por sí, todos sabemos que los intérpretes o compiladores de código se escriben también con algún tipo de código. A veces, y eso es lo que puede ser nuevo para nosotros, es en el mismo código. Por ejemplo, el famoso compilador de GCC está escrito en C.
Pero lo que quería mostrarles hoy es una característica de .NET no tan conocida, o al menos no tan utilizada, y se trata de la compilación de código on-the-fly, basado en el ejemplo muy bien explicado que pueden ver en el artículo de Rick Strahl, llamado Executing Dynamic Code in .NET. Dicha presentación explica (con buenos ejemplos y detalles) cómo sólo con una entrada de texto podemos generar las clases y métodos que serían representados por ese código. No sólo eso, sino formas alternativas de compilarlo, separándolo o no de nuestro dominio de aplicación, y cómo se pueden utilizar clases de scripting para ello.
Yo en realidad encontré eso mientras buscaba otra cosa, estaba buscando algo equivalente al famoso ClassLoader de Java. No sólo encontré un buen ejemplo, simple y claro llamado C# - Dynamic Class Loading, sino que encontré un muy buen artículo para aquellos que comenzaron en C# desde Java: C# From a Java Developer’s Perspective. Este es el famoso “C# vs Java” que muchas veces se menciona.
Soy un zorrinito dinámico.
Link del día: ¿Cómo rankear contenidos?
Hace un tiempo me puse a investigar sobre cómo utilizar alguna técnica que me permitiera rankear contenidos. Es decir, tener algún feedback de parte de los usuarios para saber qué contenido gustaba más y cuál no tanto. “Copiémosnos de los grandes”, pensé yo, y busqué algún ranking de estrellas, al mejor estilo Youtube.
Encontré un plugin de jQuery llamado Star Rating, un sistema que basado en AJAX, y dos o tres imágenes, podemos tener un sistemita de ranking por estrellas muy simpático. Es muy personalizable y fácil de implementar, también muy fácil de acomodar según los distintos layouts que dispongamos para nuestro contenido, y finalmente, algo personalizable en funcionalidad también (por ejemplo, podemos hacer que muestre un promedio o un valor determinado, podemos hacer que sólo se pueda votar una vez o que se pueda cambiar el voto, o que se puedan votar varias veces, etc.)
Fue no mucho después que leí un artículo llamado Youtube Like Rating with jQuery & Ajax, y ahí fue en donde me dí cuenta que los grandes ya no utilizan el sistema de estrellas. Por si se dieron cuenta, Facebook tiene sólo un “Like” (o “Me gusta”, en español), y Youtube ahora tiene un “Like” y un “Don’t like”. ¿Por qué tan simplista?
La respuesta estaba en un artículo del blog oficial de Youtube, llamado Five Stars Dominate Ratings, en donde básicamente explican que de las 5 estrellas, rara vez alguien utilizaba la número 2, 3 y 4. Generalmente, si a alguien le gustaba un video, lo rankeaba como 5 estrellas, y si no le gustaba para nada, simplemente lo abandonaba o lo rankeaba con una estrella. ¿Y en el medio? Una minoría.
Y sobre ese mismo tema encontré un artículo muy interesante, también analítico de la gente de Steepster, Brewing a Better Rating System, en donde explican cuáles fueron las distintas aproximaciones que tuvieron para que la gente rankeara la información de su blog. Es interesante leer esta versión porque a la vez ellos creen que el sistema de sí/no no es del todo apropiado para expresar lo que uno piensa de un artículo, y entonces ellos permitieron una variabilidad en el puntaje.
¿Qué piensan ustedes? ¿Cuál sería la mejor forma de pedirle a alguien que opine, fácilmente, de un artículo/contenido que ustedes hayan generado?
Soy un zorrinito de feedback.
Link del día: ¿Qué es el A/B Testing?
Quizá para muchos sea un concepto totalmente básico y muy simple de comprender, pero para aquellos que no lo tenemos tan asimilado, seguramente no estemos apreciando el importantísimo concepto que representa.
A/B Testing es una forma de probar las aproximacinoes de marketing de forma de poder tomar una decisión correcta con la aproximación final que va a hacerse al público en general. Muchas empresas grandes la utilizan para tomar decisiones, y se trata básicamente de probar distintas posibilidades, seleccionando siempre la que mejor resultados haya dado.
Adrián Paenza contaba en uno de sus libros una forma de ganar inversores. Decía que de una lista de emails de 130 personas les envíaba a 64 un mensaje que decía “mañana el dolar subirá su precio”, y a otras 64 “mañana el dólar bajará su precio”. (Eso suma 128, dejemos a 2 de lado.) Con 64 se habrá equivocado, con las otras no. Entre las que acertó, volvería a enviar un mail al día siguiente, haciendo lo mismo, pero dividiéndolas en 32 y en 32. Lo mismo al día siguiente: 16 y 16. Llegado a este punto ya existen 16 personas que durante 3 días consecutivos vieron como él acertó la varianza del dólar. Estas personas ya están muy seguras de que Adrián sabe lo que hace en sus finanzas, y muy seguramente, aceptarían un negocio con él.
Esa forma de aprovechar el A/B testing es muy similar a como se hace en la realidad, identificando qué formas de mensajes o de campañas publicitarias tiene mejor efecto.
Jeff Atwood hace una reseña de la película Atrapado en el Tiempo, una película en donde el personaje está condenado a repetir el mismo día siempre. Tras ir intentando distintas combinaciones de su día, él llega a lograr el día perfecto. él lo considera deshonesto, y lo relaciona con otra técnica de marketing llamada Ghetto testing, porque el resultado que llega al usuario final está “pensado y probado” para que realmente le guste. ¿Es realmente deshonesto, o es perfectamente válido?
A/B Testing tiene algunas alternativas. Una de ellas es llamada A/B/N testing, en donde se utilizan varias iteraciones. Otra es A/B/A testing, en donde se repite la primer prueba para verificar que los resultados fueran realmente consistentes y no mera casualidad, etc.
Para más información, pueden visitar los artículos de Wikipedia sobre Choice Modelling, Adaptive Control, y Multivariate Testing.
Como extra, debo aclarar que la reseña de Atrapado en el Tiempo es impecable.
Soy un zorrinito testeado.
**UPDATE 28/7/2010: **Marc Von Brockdorff escribió un artículo sobre la medición de la validez estadística de un test A/B: AB testing Statistical Significance. Por otro lado, me encontré en WebDesignerDepot una muy buena guía llamada A Complete Guide to A/B Testing.
Link of the day: Parallel programming with C#
I just found out that the “Start page” for Visual Studio can really provide nice interesting articles and news. It’s there where I found a link to an unfinished series of posts called Parallel Programming. These are part of the C# Frequently Asked Questions blog, one of the very interesting blogs around the MSDN.
These specific posts I mentioned are some techniques that we can take advantage of in C# (of course, VB also applies) to easily develop multi-thread applications without struggling with the bared thread objects. Of course, being based in .NET Framework 4, we have a lot of new features we can take advantage of.
Happy Friday to all!
I’m a parallel little skunk.
Link del día: Máquinas virtuales en la web
Hace pocas horas Peteris Krumins (@pkrumins) anunció que en poco tiempo estará saliendo al público su nuevo proyecto con James Halliday.
Dicho proyecto, llamado StackVM, tiene como propósito poder insertar máquinas virtuales en páginas web, darles conectividad entre ellas con simple pasos como drag & drop, y la cantidad de usos que esto podría tener son miles.
Entre los ejemplos que él menciona en su anuncio, están la posibilidad de dar una demo “live” de un software (que podría incluir por detrás todo el entorno necesario para mostrarlo, incluyendo servidores de bases de datos, incluyendo routers, etc). Podría demostrar online (sí, en la misma página web) el funcionamiento de un software cliente servidor, de un software firewall, o cosas que por lo general son muy complejas de demostrar.
Otro de los ejemplos es la enseñanza, testeos de seguridad, o la posibilidad de que los estudiantes realmente interaccionen con entornos virtuales sin otra necesidad que un navegador.
Otro de los ejemplos es el testeo de aplicaciones. Imaginen probar su software en un entorno Linux, un Mac OS, un Windows en distintas versiones, sin más que un navegador.
Actualmente están de a poco liberando muestras para distinta gente, solo tienen que apuntarse para ser tenidos en cuenta si es que lo quieren probar.
Soy un zorrinito virtual.
Link del día: Ahora hay que reaprender PHP
Gracias a @Analton llegué a un artículo llamado Never user $_GET again, que habla de cómo ya no deberíamos utilizar más las archi-conocidas variables globales de GET y POST al programar en PHP. No sólo eso, sino que explicando los conceptos de validación y sanitización nos deja como paso siguiente ir al manual de PHP, y explorar una sección que quizá muchos ya no tengamos del todo frescas.
Esta sección es la de Filtering, en donde nos vemos introducidos a distintas funciones que ya efectúan validaciones de determinados tipos de entrada en particular, y nos permiten filtrar el resto de lo ingresado para obtener valores correctos, o al menos, lo suficientemente corregidos como para que no dañen nuestro código.
” ¿Desde cuando está eso ahí?”, algunos preguntarán. Desde PHP 5.2, de forma que ya tiene un ratito ahí, no sé como a muchos se nos pasó de largo. Aprovechen a reaprenderlo y será más fácil programar la entrada de datos!
Soy un zorrinito preprocesado.
Link del día: Bases de datos pre-armadas
Esperemos que pronto podamos volver a la frecuencia común de los links del día. Mientras tanto, intentemos mantenerlos cortitos para que no tomen demasiado tiempo.
Hoy los dejo con SQL Dumpster, un sitio con una muy buena idea, pero desafortunadamente, algo abandonado. La idea del sitio es que podamos agregar nuestro script SQL con los datos que queramos compartir al mundo. Cualquiera, nosotros incluidos, podemos navegar por los scripts disponibles según lo que necesitemos. Por ejemplo, ¿necesitamos un listado de países? No hace falta más que ir a la sección de scripts geográficos y lo encontraremos listo para ejecutar en nuestra base de datos. ¿Queremos un listado de tipos de empleo? Ahí están.
Como esos podrían haber muchos más que no sean útiles, y si el sitio se hiciera conocido, sin duda tendría muchos scripts muy útiles.
Soy un zorrinito compartido.
Link del día: Recursivi(recursivi(recursivi.dad)dad)dad
Probablemente conozcamos ya el concepto de recursividad. Si no lo conocen, para entenderlo van a tener que entender el concepto de recursividad. =P
La recursividad, según la define la Wikipedia, es un método de resolución de problemas que se basa en su propia definición. Para decirlo de forma más tangible, un problema se puede reducir a más de un problema de la misma naturaleza pero de más fácil resolución. (El típico ejemplo es el factorial: n! = 1 × 2 × 3 × … × n puede resolverse como n × (n-1)!, que se puede resolver como n × (n-1) × (n-1-1)!, hasta que (n-…) = 1 y entonces 1! = 1, 2! = 2 × 1 = 2, 3! = 3 × 2 = 6, 4! = 4 × 6 = 24, etc.).
Lo curioso es que esto no solo aplica a la matemática, ni a la forma de programar algoritmos. Pensemos en una especie de recursividad conceptual. Por ejemplo, la definición de la palabra definición. O en un método para mostrar cómo se resuelve ese método.
Y ese último caso que queremos ver es el que trataremos hoy. Russ Cox publicó en su blog research!rsc un artículo llamado Zip Files all the way down, en donde cuenta cómo generó un archivo zip que se contenía a sí mismo. (Por supuesto, está ahí para que lo bajemos y revisemos a gusto.) También cuenta cómo es que se embarcó en la empresa de generar un programa que escribiera su propio código fuente. Cómo lo hizo? Hay que leer el artículo. ;)
Soy un zorrinito de zorrinito de zorrinito de zorrinito de …
Link del día: 1, 2, 3... Regex!
¿Recuerdan los posts viejos sobre cómo convertir un texto en una expresión regular acorde (Text2RE), y sobre cómo visualizar las expresiones regulares (ReAnimator)?
Bueno, si esas les gustaron o les fueron útiles, vamos a dar dos nuevas utilidades para trabajar con expresiones regulares.
La primera de ellas es Regular Expression Library (o RegexLib). Como su nombre lo indica, es básicamente una librería de distintas expresiones regulares para distintos usos. Podemos buscar también por categoría o palabra clave, y tras eso, elegir del listado aquellas que tienen una mejor puntuación, o la que mejor se adecúe a nuestras necesidades. Por supuesto también podemos contribuir con las nuestras, y al mismo tiempo probarlas en el mismo sitio.
La segunda herramienta es RegExr, de GSkinner (gracias Seinkraft!), una herramienta basada en Flash que nos permitirá experimentar con expresiones regulares, basándonos en nuestro propio texto, o en expresiones de ejemplo pre-armadas que podemos seleccionar para utilizar. Podemos luego guardar las que hayamos construido para su posterior uso, y también ver las que otra gente ha construido.
Soy un zorrinito regular.