03/09/2010

No me importa a qué heroe de videojuegos puedan citarme, pero cuando no una, sino varias empresas, intentan enterrar definitivamente a un personaje de ficción por 13 años y no lo logran, hay que reconocerlo. Cumpliendo con nuestra labor como periodistas, les informo oficialmente:

¡Duke Nukem Forever vuelve a estar en desarrollo!

Ya en su momento habíamos lamentado la muerte de 3DRealms, la empresa responsable del juego, así que esta es para nosotros la noticia de la semana. Una creería que a estas alturas ya habrían aprendido (o, para ser exactos, que ya habían aprendido cuando cerraron la empresa y dieron el proyecto de baja), pero bueno, esperemos que esta vez la cosa marche mejor.

Hail to the king, baby!

27/08/2010

Entrada rápida: viendo la página de la Comisión Nacional de Comunicaciones (CNC) con los proveedores de internet de Argentina, me causó mucha gracia notar lo siguiente: en el apartado “Localidad”, Córdoba figura tanto como “CORDOBA” como “CÓRDOBA”. Lo gracioso es que los listados para uno y otro son distintos (lo cual tiene sentido), o lo serían de no ser porque UOL Argentina figura por duplicado, una vez en cada uno. Anécdota: UOL es, desde hace unos 8 años, el proveedor de e-mail para mi cuenta de spam, o sea la que uso para darme de alta en sitios a los que no me interesa volver (notar que esto fue antes de los servicios de e-mail temporal, sobre los cuáles debería hablar alguna vez).

En fin, me fui por las ramas, como siempre. Lo que quería decir, en definitiva, es esto: si tienen una situación como esta, donde pueden encontrar “Córdoba”, “Cordoba”, “CORDOBA”, “cordoba” o incluso “Còrdoba”, hay dos alternativas:

  • Usar un combo que diga “Provincia”. Problema solucionado, y encima tenemos de regalo un código para nuestra base
  • Validar. Pero no validar después, sino en el preciso momento en el que el usario está escribiendo. Una vez alguien (no recuerdo quién, sorry) dijo algo que me llegó al alma, y fue algo como “si sabemos que un dato está mal, ¿para qué pedirle al usuario que lo vuelva a ingresar si podemos corregirlo directamente?”. Obvio, esta situación no se da muy seguido, pero el ejemplo típico sería, si yo pongo una regla (ej, no utilizar acentos ni números), en vez de saltar un pop-up que diga “no ingrese caracteres raros”, mejor un poco de Javascript que los elimine mientras los estamos escribiendo (tomando las debidas precauciones, por supuesto).

Tengo una hermosa maquinita de estados en código que hace lo segundo. Si se alinean los astros, escribiré algo al respecto la semana que viene.

19/08/2010

Como ya comenté un par de veces, el reciente incremento del spam nos obligó a implementar algún sistema un poco más elaborado para proteger nuestros comentarios. Este problema no es nuevo, y hay mucha literatura al respecto, pero en general siempre tienen algún inconveniente extra para los usuarios (a saber, las soluciones tienden a requerir registrarse para comentar, resolver un captcha o escribir comentarios sin enlaces), y nuestra filosofía es más cercana a la de permitir que cualquiera que tenga algo que decir lo diga sin problemas - para la estadística, al día de hoy solamente hemos perdido tres comentarios, uno por problemas de hosting y dos (descriptos aquí) por un problema ID-diez-T.

Teniendo esto en cuenta, decidimos hacer uso y abuso de una característica pura y exclusivamente nuestra: el hecho de que este blog es en castellano. Debido a que la mayoría de los desarrollos se hacen en los países del norte, no hay una movida seria de plugins para detectar el idioma de un texto, lo cual a los que vivimos de este lado del charco nos viene bárbaro, ya que el spam en castellano es muy poco. Con esto en mente, desarrollamos nuestro primer esquema: un mecanismo que detecta si un texto está en inglés. El algoritmo es una pavada: usando esta guía de las 100 palabras más comunes en el idioma inglés (mas un par extra, como “free”, “lesbian”, “teen” o “boob”), armamos una funcioncita que calcula, sobre el total de palabras en un comentario, cuántas de ellas están en la lista. Si el resultado excede un cierto umbral (un 20% aproximadamente, bastante conservador considerando que las primeras 100 palabras corresponden al 33% de todo el texto en inglés), el texto se clasifica como en otro idioma y va a parar al tacho. Esto, combinado con la política de que todo comentario con más de 2 links va a parar a moderación, hace un filtro super efectivo.

O casi. Como ya mencionamos anteriormente, nuestro problema actual es el spam en ruso - no hemos encontrado todavía una forma efectiva de detectar con PHP si un texto contiene o no caracteres cirílicos (nuestra última prueba daba positivo en todo texto que tuviera la letra “a”), así que todavía lo estamos afinando. De todas formas, por si les interesa, les pego aquí el código de la función (que es una pavada):

(seguir leyendo…)

07/08/2010

Finalmente, y porque lo prometido es deuda, les traigo los videos de mi tan postergada charla sobre phishing.

Foto mia exponiendo en mi charla sobre phishing
No les puedo contar lo mucho que me gusta esta imagen, así que no se sorprendan de verla en todos lados

La charla completa dura poco más de una hora, así que para hacerla más llevadera está dividida en 6 partes, que enumero abajo. No incluyo los clips para hacer más rápida la carga del sitio, así que sólo pongo los enlaces (haciendo click en el título de la parte que les interese, asumiendo que les interese alguna), pero si alguien tiene un buen argumento para incluirlos no dude en escribir, que los ponemos.

  • Parte 1: introducción a la charla, definición de phishing, y análisis de cuánto vale una identidad
  • Parte 2: análisis del aspecto técnico del problema, explicamos cómo es el panorama internacional y qué son las botnet, en el contexto de los virus, el spam, el phishing y los ataques de negación de servicio
  • Parte 3: tratamos la componente humana del problema, introduciendo el concepto de Ingeniería Social y dando ejemplos típicos de engaños
  • Parte 4: explicamos las medidas de prevención que nos provee el navegador, para lo cual discutimos primero la importancia de la identidad y la privacidad en un intercambio
  • Parte 5: vemos cómo se comportan distintos sitios reales en los aspectos vinculados con seguridad mencionados hasta aquí
  • Parte 6: preguntas de los asistentes y el fin de la charla

A nivel personal, mis preferidos son las partes 2 y 3 - la primera porque pude darme el lujo de exponer frente a un mapa como si fuera el pentágono, y la segunda porque son ejemplos de ingeniería social, que es un tema super interesante (y, de yapa, incluye un clip de la película Nueve Reinas). Como bonus, pueden buscar en cámara el momento en el que vuelco mi vaso de agua encima de mis notas, un personaje de la serie The Office disimulado por ahí (hubo un par de personas que se dieron cuenta), los momentos en los que el control remoto no me funcionaba (esta es fácil) y/o la parte en la que la edición salta por no estar bien hecho el corte (hay una anécdota muy divertida relacionado con esto, pero me temo que me la van a tener que preguntar en persona).

Finalmente, hay un pequeñísimo guiño para los seguidores del sitio, pero no les puedo dar pistas porque sino pierde la gracia (aunque si son lectores asiduos capaz lo saquen enseguida, no es tan complicado).

Actualizacion: si quieren bajar la charla completa en un único archivo (480 Mb aproximadamente), pueden hacerlo desde este link.

06/08/2010

Una pequeña actualización con respecto al post anterior sobre el filtro anti-spam. En primera instancia, nuestro filtro de comentarios en inglés no anduvo muy bien, porque en realidad nosotros esperábamos spam de este tipo:

Hello. Yes, really. All above told the truth. Let’s discuss this question. Here or in PM. www.elsitiodelspammer.com - camping trailers colman g

El problema con este filtro fue que, en realidad, el spam típico luce más bien como esto, que a dura penas califica como inglés, ya que en realidad es más bien un rejunte de palabras:

Good evening! call: hawaii porn top 10 free porn sites porn star name list iraq porn porn clip dump , punk porn wet place porn or pamala anderson porn chinese porn movie hot naked porn , little lupe porn picture hunter porn stop porn addiction adult porn clips and soul calibur porn porn on youtube , lesbian porn movies teen porn star school girl porn party porn jewish porn , free podcast porn got gay porn or free young porn movies oral sex porn free home porn videos free transexual porn .

En vista de esto, hemos hecho un par de retoques al algoritmo (que, repito, es una pavada y prometo post para la semana que viene) que funciona muy bien, pero que deja al descubierto nuestro segundo problema, a saber, que algún spam en otros idiomas (ruso, generalmente, aunque nos sorprendió ver también en alemán) sigue pasando.

En vista de esto es posible que invirtamos el filtro, es decir, que filtremos los comentarios que no están escritos en castellano, aunque siempre nos queda la duda de qué pasaría si alguien quiere citar algún texto de una película o hacer copy-paste de algún otro sitio con motivos legítimos, así que lo estamos analizando. Por lo pronto, pido disculpas a todos aquellos que hayan recibido spam por haber hecho click en la opción de recibir actualizaciones por e-mail a algún comentario.

Seguiremos informando.

31/07/2010

Un pequeño anuncio: hemos instalado un filtro experimental que no permite agregar comentarios escritos en inglés, que son los que hoy por hoy están pasando el filtro anti-spam con mayor regularidad. Como esto es todavía un área en investigación, no duden en avisar si tienen algún problema con un falso positivo.

Una vez que lo hayamos probado con mayor o menor éxito, y si la cosa funciona bien, publicaremos el código fuente para aquellos interesados en implementarlo (hint: es una pavada).

Este fue un mensaje de bien público

Actualización: como no vale la pena hacer un segundo post por esto, lo agrego acá: para todos los robots en la audiencia, y para aquellos que viajan en aviones antiguos remodelados, quería recordarles que mañana es el casamiento de Lisa Simpson:

Tarjeta de invitacion al casamiento de Lisa Simpson

Bienvenidos al futuro.

30/07/2010

El staff de 7c0h quiere desearles un muy feliz día a todos los administradores de sistemas en su día. Bueno, técnicamente es “Día de apreciación de tu administrador de sistemas“, pero la idea es la misma.

Y para todos aquellos que tienen que compartir las tareas de sysadmin con las de soporte técnico (algo para nada inusual), les dejo esta joyita que ví hace algún tiempo en algún lugar:


Soporte técnico medieval

Y si, el año pasado nos olvidamos y nos salteamos un año, así que este saludo vale por dos :) . ¡Feliz día!

23/07/2010

Seeeduino Como mencioné la semana pasada, ya tengo en mis manos un Seeeduino V328, que viene a ser el hermano pobre del Arduino que conté en su momento. Si bien todavía no terminé el proyecto (principalmente porque Martín y yo somos un poco reacios a gastar $150 sin buscar una alternativa más económica primero), quiero aprovechar para comentarle un poco más acerca del Arduino/Seeeduino/Freeduino/*ino.

Hasta hace un par de años, todo aquel que quería hacer algún tipo de proyecto no trivial que saliera de su PC (luces, motores y todo eso) tenía que programarse un PIC, es decir, una especie de computadora pequeñita con algo de memoria, algunos puertos de entrada/salida y que se programaba en Assembler*. A este chip, además, había que hacerle una placa para montarlo, soldarle los componentes, etc, lo cual lo alejaba un poco del desarrollador común que no hubiera hecho antes una carrera de electrónica. Y además se programa por defecto vía el puerto serie, lo cual es un problema adicional en esta época modernas en que las PC ya casi no lo traen (igual que el paralelo - ver nota al final).

Afortunadamente para todos, en 2005 un grupo de desarrolladores italianos crearon, con el fin de hacerle la vida más fácil a todo el mundo, un conjunto de herramientas (tanto en hardware como en software) que pasaron a ser lo que hoy conocemos como Arduino, que en esencia se compone de una placa pre-ensamblada con un PIC, con un entorno de desarrollo simplificado, conexión vía USB y, lo más importante, todo bajo licencia abierta. Gracias a esto, se generó toda una comunidad en torno a estos bichitos.

Dado que las especificaciones de toda la plataforma son abiertas, hubo gente que se dedicó a generar variaciones de este mismo proyecto. Como el nombre “Arduino” le pertenece exclusivamente al proyecto oficial, todos los demás clones llevan el nombre <algo>-duino, pero sin perder la compatibilidad con el proyecto original (el entorno de desarrollo, por ejemplo, está programado en Java y es el mismo para todas las placas). De todos esos proyectos, yo tengo un Seeeduino, que viene con un lindo detalle atrás: un mapita del mundo con la frase que ilustra este post, “La electrónica puede ser arte”, que me gustó mucho y que usaré cada vez que pueda.

Con respecto a lo que mencioné de costos, el proyecto que estoy armando con Martín (ya publicaremos todos los detalles) podría haberse hecho utilizando únicamente un puerto paralelo (ya que de todas formas tiene que conectarse con una PC, el cable no sería molestia). El principal inconveniente radica en que habría que alimentar al proyecto con 5V extras, por lo que llevaría dos cables en lugar de uno, y encima se complica más si la PC no tiene puerto paralelo - con USB es todo más fácil porque uno toma la alimentación de ahí mismo, pero implica dejar la placa ahí adentro para siempre, y no es una idea muy tentadora, o al menos no sin un subsidio primero :P.

Seguiremos informando, pero los dejo antes con esta imagen:

Proyecto con Seeeduino

¿Y que es todo esto? A la izquierda, tienen una placa armada con un PIC para la optativa Microcontroladores que cursó Martín en Famaf (”y que me gustó mucho“, me hace aclarar); al medio tienen un Seeeduino V328, que como pueden ver es bastante más pequeño. A la derecha… hay algo, pero para la descripción van a tener que esperar. Y no, no es el botón rojo del cuento aquel, aunque lo parezca.

*Nota: Ya se que el lenguaje de programación no es “Assembler”, sino “Assembly”, pero siempre pensé que el primero sonaba mejor. En todo caso, para los puristas (como yo), acá está la aclaración. ¿Contentos?

23/06/2010

Siguiendo con el artículo de la semana pasada (que asumo ya han leído y mas vale que así sea porque sino no van a entender nada), hoy vamos a ver lo que nos quedó pendiente de ver y entender para poder codificar video.

Ya habíamos definido, entonces, cómo elegir los parámetros correctos (cuadros por segundo, tasa de bits, etc) para que nuestro video se vea lo mejor posible. Ahora es momento de convertir ese chorizo de 1s y 0s en un archivo que podamos intercambiar sin problemas (bueno, eso es imposible, pero al menos uno que podamos intercambiar entre nuestra PC y nuestro celular o DVD). Para eso, tenemos que entender dos cosas, pero primero una aclaración: lo que digamos del video se aplica también al audio, pero lo digo una única vez para no repetirme. En los casos donde haya una diferencia importante, lo aclararé. Dicho esto, vamos a los conceptos:

  • Codec: uno pensaría que hay una única forma de guardar audio o video, pero si algo nos ha enseñado el mundo de las imágenes (donde tenemos jpg, png, gif, ps y un laaaaargo “etc”) es que las personas nunca están conformes con lo que hay y tienen que inventar un nuevo estándar. Con el video ocurre lo mismo, tenemos infinidad de formatos para guardar nuestras imágenes en movimiento (con pérdida o sin pérdida, comprimido o sin comprimir, y todo eso). Para generar información en un determinado tipo (ya los vamos a ver a los más populares) tenemos que usar un tipo particular de “codec” (abreviatura de “codificador/decodificador”). En estos casos, los datos resultantes llevan el nombre del codec utilizado, por lo cual un video en formato DivX es generado con el codec de mismo nombre, y nos quedará a nosotros como tarea identificar uno u otro según el contexto (técnicamente, los datos resultantes son un formato).
  • Contenedor (container): Si bien el audio y el video son cosas separadas, es generalmente importante tener los dos juntos en un único archivo (es muy común que la gente no se conforme con tener video, sino que se pone en exigente y quiere también audio). Para solucionar esto, se inventaron un par de soluciones para empaquetar todo de forma bonita adentro de un único archivo, que es lo que conocemos como “container”. Si bien en teoría uno adentro de un container puede poner un video armado con cualquier codec, en la práctica esto no es así y hay que elegir el container correcto para que los codecs elegidos funcionen bien (y viceversa). ¿Y si elegimos mal? A veces tenemos audio sin video, o un video mudo, o un archivo con la extensión que se supone que tiene que tener pero que igual no funciona. Como detalle extra, los containers más modernos tienden no solo a soportar un gran rango de codecs, sino que también nos permiten poner más de una pista de audio/video en un mismo archivo, lo que nos permite tener un mismo video con múltiples idiomas. Y ya en el extremo del lujo, tenemos también la posibilidad de meter adentro subtítulos, dando lugar al DVD que todos conocemos.

Supongo que con esto ya habrán comprendido por qué a veces el video funciona bien y a veces no: viendo la extensión de un archivo nos dice cuál es su container, pero no nos dice con qué codec se generaron los datos que tiene adentro, ¿se entiende? A veces tenemos suerte y usamos el codec más popular para esa extensión, pero a veces no y la cosa no marcha.

MPEG

Es imposible (o mejor dicho, poco práctico) escribir un artículo sobre video sin mencionar al Moving Pictures Experts Group (MPEG), un grupo de expertos que crea los estándares ISO para la compresión y transmisión de audio y video. Estos estándares ocuparían bibliotecas enteras en papel (y encima se subdividen en otros estándares), así que no nos vamos a meter en tanto detalle, porque sería imposible darle un análisis completo (tendríamos que hacer dos artículos aparte, por lo menos). Lo que es importante saber es que el MPEG libera cada tanto un conjunto de estándares, publicados como “MPEG-x”, donde “x” es el número de estándar (si están pensando en MP3 están más o menos cerca, pero no se confíen porque es un poco más complicado). Estos estándares son:

  • MPEG-1: El primer conjunto de estándares, cuyo segundo resultado más popular fue el formato de video utilizado para los VCD (Video CD, algo que por aquí nunca marchó). ¿Y cuál es el primero? Nada menos que el “MPEG-1 Audio Layer 3″, un codec para audio conocido vulgarmente como “MP3″. O sea, para que no queden dudas: MP3 es un codec de audio, parte del paquete de estándares que conforman el MPEG-1. Espero no haberlos perdidos, porque de acá en adelante la cosa se complica cada vez más :P
  • MPEG-2: Normas de audio y video que se usaron en la difusión para televisión (con soporte para medios inestables y video entrelazado, dos cosas muy útiles para TV). Una versión modificada de este estándar es el que usan los DVD.
  • MPEG-3: Un estándar que se abandonó en favor del MPEG-2. No hay mucho más que decir.
  • MPEG-4: Un estándar extremadamente complicado (se divide en 21 partes) que incorpora, entre otras cosas, el tan odiado DRM. La parte 2 del estándar es implementada por DivX, Xvid y Quicktime, mientras que la parte 10 la implementan H.264, Quicktime 7 y los Blu-ray.
  • MPEG-7 y MPEG-21: Basta con saber que existen. Por ahora no los necesitamos para nada, así que los ignoramos.

Un detalle importantísimo a tener en cuenta: estos estándares no son libres, y de hecho que para trabajar con ellos a veces hay que discutir patentes con más de una docena de compañías (léase: sustituir “discutir” con “pagar”). Debido a esto, algunos programas que pueden utilizar estos codecs los traen deshabilitados por defecto, ya que no tienen los derechos para distribuirlos en tal o cual caso. ¿Ejemplo? Los programas ffmpeg y MPlayer, en su última versión para Debian y Ubuntu, no pueden codificar en MPEG-2 (para habilitarlo, hay que bajarse el código fuente y recompilarlo).

(seguir leyendo…)

12/06/2010

Voy a contarles dos hechos iguales y opuestos.

  • Hecho nro 1: me encanta la edición de video. Al día de la fecha he puesto videos en mi mp4, en mi celular, he creado mis propios DVDs (¡con menú y todo!), he editado video (ya tengo lista la edición de cierto curso de phishing que espera aprobación), he creado gifs animados (en los tiempos pre-youtube) y he llegado a traducir subtítulos.
  • Hecho nro 2: trabajar con codecs es un infierno. En mis años de edición no he podido terminar de entender qué tipos de archivo funcionan con qué, las diferencias entre, por ejemplo, DivX y XVid, MPEG-2 contra MP3 o AVI vs ASF (por nombrar algunos). Se ha dicho que los codecs son el nuevo DLL Hell, y es difícil no estar de acuerdo

Como verán, esta situación se vuelve insostenible - no se puede trabajar sin entender las herramientas. Además, hoy que tenemos tanto aparato dando vuelta capaz de reproducir video, llámese celular, MP4/5/6/7/…/10/11 (sin comentarios), PC, DVD, Divx o como sea, no hay excusa para no poner nuestro video preferido en cualquiera de estos aparatos (trivia: yo uso mi celular para ver series en el colectivo, y no me quejo). Es así que me embarqué en un estudio completo sobre el tema, cuyo resultado secundario es este artículo (el resultado primario fue la creación de un nuevo script para subir videos a un Nokia N95, cuando Ubuntu me rompió el anterior). Si bien este artículo está simplificado, creo que va a ser suficiente para entender los conceptos detrás de todo este desastre, y con suerte podrán entender qué tipo de video les pide su nuevo reloj pulsera con MP3.

Conceptos básicos

El video es más que un montón de imágenes una después de otra. Mejor dicho: el video es exactamente eso, pero la mejor forma de guardar dichas imágenes es otro tema. La cuestión surge por el lado de la compresión: el video sin comprimir ocupa muchísimo espacio, por lo que hay distintas variaciones de cómo almacenarlo. Además hay que mantener el formato original lo mejor que se pueda, por lo que el tamaño y aspecto de la imagen final también cuenta. Todo esto redunda en los siguientes conceptos:

(seguir leyendo…)

Posts anteriores »