lunes, diciembre 17, 2012

Antipatrones de SQL

Así lo describen en el sitio web...
Bill Karwin ha ayudado a miles de personas a escribir mejor SQL y construir bases de datos relacionales más fuertes. Ahora él comparte su colección de antipatrones - los errores más comunes que ha identificado en esas miles de peticiones de ayuda.
El libro al que me refiero es "SQL Antipatterns: Avoiding the Pitfalls of Database Programming" y a mi juicio debería ser de lectura obligada para que todo desarrollador que toca bases de datos conozca lo que NO debe hacer. Al menos en mi experiencia, he visto estos antipatrones implementados demasiadas veces.

Estas slides algo viejas, de la MySQL Conference & Expo 2009, les darán una idea de lo que trata el texto:


martes, diciembre 04, 2012

Trivia de enlaces en Linux: ls -l

En una charla de mate con un amigo dimos con las siguientes cuestiones, que pudimos dilucidar luego de pensar un buen rato (y sin salir a buscar en google o la wikipedia). Dado el siguiente árbol y posterior listado de directorio:

.
├── bin
├── examples
├── pydasm
│   └── build
│       ├── lib.linux-x86_64-2.6
│       └── temp.linux-x86_64-2.6
└── rbdasm

mauro@stereo:/usr/local/src/libdasm-1.5$ ls -la
total 900
drwxr-xr-x 6 mauro mauro   4096 dic 15  2011 .
drwxrwsr-x 5 root  staff   4096 nov 29 12:04 ..
drwxr-xr-x 2 mauro mauro   4096 ene  9  2006 bin
drwxr-xr-x 2 mauro mauro   4096 dic 15  2011 examples
-rw-r--r-- 1 mauro mauro   5558 dic 27  2007 HISTORY.txt
-rw-r--r-- 1 mauro mauro 163894 dic 15  2011 libdasm.a
-rw-r--r-- 1 mauro mauro  31201 feb 14  2006 libdasm.c
-rw-r--r-- 1 mauro mauro    344 ene  9  2006 libdasm.def
-rw-r--r-- 1 mauro mauro  17199 feb 21  2006 libdasm.h
-rw-r--r-- 1 mauro mauro 162312 dic 15  2011 libdasm.o
-rwxr-xr-x 1 mauro mauro 161338 dic 15  2011 libdasm.so
-rw-r--r-- 1 mauro mauro    785 feb 21  2006 LIB.txt
-rw-r--r-- 1 mauro mauro    605 ene  9  2006 Makefile
-rw-r--r-- 1 mauro mauro    183 ene  9  2006 Makefile.msvc
-rw-r--r-- 1 mauro mauro 283110 feb 21  2006 opcode_tables.h
drwxr-xr-x 3 mauro mauro   4096 dic 15  2011 pydasm
drwxr-xr-x 2 mauro mauro   4096 ene 11  2006 rbdasm
-rw-r--r-- 1 mauro mauro  14460 feb 21  2006 README.txt
-rw-r--r-- 1 mauro mauro    161 ene  9  2006 TODO.txt

Con el único fin de molestarles, acá van unas preguntas:
  1. ¿Qué representan los números de la segunda columna del listado?
  2. ¿Podría un archivo tener un número mayor a 1?
  3. ¿Por qué las entradas . (punto), .. (punto-punto) y pydasm (entre otras) tienen distintos números?
  4. ¿Mediante qué llamada a sistema (función, no comando) puede obtenerse ese valor?
  5. ¿Cuál es el campo relevante en la estructura obtenida por la llamada del punto anterior?
Se los dejo como tarea y en quince días vemos que sale...

jueves, octubre 18, 2012

Esto pasó el fin de semana

Y gracias al usuario LeanHG en youtube lo podemos volver a vivir...

G3 - You really got me (The Kinks) [Luna Park 2012]

G3 - White Room (Cream) [Luna Park 2012]

G3 - Rockin' in the Free World (Neil Young) [Luna Park 2012]

Joe Satriani - Flying in a blue dream [Luna Park 2012]

Efectivamente, Steve Morse (act. Deep Purple), John Petrucci (act. Dream Theater) y Joe Satriani (act. Chickenfoot) dieron gala en una nueva edición del G3 en Argentina, acompañados por Dave LaRue, Mike Keneally, Jeff Campitelli y Mike Mangini, entre otros.

Dejo varias reviews del show así se dan una idea: El Acople, Clarín, Rock & Pop, y la de Fabio, obviamente.

viernes, septiembre 07, 2012

Creo haber viajado alguna vez

Algún alma caritativa me puede decir en qué parte del sitio web de la tarjeta SUBE está el bendito enlace a la pantalla de consulta de viajes?
Desde ya, muchas gracias!

Actualización: 10/09/2012: Por fin apareció el botón en la pantalla de gestión! Gracias SUBEros!

lunes, agosto 27, 2012

Capusotto para (casi) todos

Ingenuo de mí, queriendo escuchar algo de buena música en el retorno de Peter Capusotto y sus Videos, a través de la Internete...

Como estaremos de complicados que hasta el logo del canal está en blanco y negro.

No, acá hay algo que definitivamente no anda bien.

Tres preguntas:

  • Será porque soy un sacrílego que se conecta por Fibertel? (aunque por Speedy tampoco anda)
  • Me tendría que haber conseguido un deco digital cuando estaban de moda, no?
  • Me perdí un buen programa?

Igual, no se compara con Casero y el viejo Cha Cha Cha. Juzguen ustedes mismos...

Que épocas aquellas... sniff...

martes, agosto 21, 2012

Andá a la esquina a ver si llueve

Porque con Speedy no llego a espanol.weather.com (y por ello el widget de tiempo no funciona)...

¿Alguno me confirma si soy el único al que le pasa?

Graciasss

jueves, agosto 16, 2012

Settings de Trebuchet en MiniCM9

Hace unos días volví a utilizar el launcher Trebuchet en el celular; previamente estuve utilizando Apex Launcher, pero últimamente se está tornando algo lento para operar así que decidí retornar al original de CyanogenMod9.

Por motivos que desconozco, teniendo los dos lanzadores instalados no es posible acceder a las opciones de configuración de Trebuchet, no se si se mambea el menú o qué, pero no aparecen donde deberían aparecer. Para colmo, la búsqueda en Google me da la sensación que no soy el único al que le pasa (ver forum.cyanogenmod.com y forum.xda-developers.com).

En cualquier caso, es posible salir del paso iniciando la configuración desde una terminal, para ello vamos al Android Terminal Emulator, y ejecutamos:

am start com.cyanogenmod.trebuchet/.preference.Preferences


Logrando el resultado que puede verse aquí:


Por cierto, estaba buscando cómo tomar una captura de pantalla y no advertí que era tan sencillo como elegir la opción en el menú que aparece pulsando Power. Tonto de mí.

martes, mayo 29, 2012

Software privativo: por qué es malo y por qué lo odio tanto

Ya hemos hablado aquí de mis sentimientos hacia el software cerrado, y particularmente de aquellos sentimientos que nos genera una empresa bien conocida. Normalmente cuando alguien me pregunta el porqué de la elección de tal sistema operativo para uso diario, uno suele traer a la memoria un montón de ventajas técnicas, seguramente sesgadas, y olvida los motivos por los cuales “hizo la conversión”. Hablando francamente, a muchos de los que venimos del lado oscuro, de algún momento a otro el bocho nos hizo un clic, después de haber renegado tanto con ello.

El tiempo me ha enseñado que evitar este tipo de software reduce en gran medida el estrés, algo más que beneficioso para la salud, pero sin embargo cada tanto caigo, o me cae, algún amigo con un problemilla en su máquina, y como todos sabemos eso es el dulce que nos mueve a los informáticos de corazón.

Esta vez la paciente fue una portátil con un Windows 7, un equipo razonable, un sistema operativo cuidado, con antivirus al día, pocas aplicaciones, ninguna de ellas trucha, uso esporádico, actualizado a la fecha. Bueno, casi hasta la fecha, porque precisamente las “Actualizaciones de Windows” se negaban a funcionar. ¿El error? Este:


En un castellano impecable: “Windows Update no puede buscar actualizaciones porque el servicio no se está ejecutando. Puede que tenga que reiniciar el equipo.”

Hasta ahora, solo un inconveniente menor. Vale decir que no había motivos para semejante advertencia: la semana anterior el sistema operativo se actualizó correctamente, el equipo andaba sin inconvenientes, no se instaló nada en el medio, se apagó correctamente, el chequeo con antivirus actualizado no encontró ninguna amenaza, y hoy muestra este mensaje. Lo que se dice, un error sacado de la galera.

Bueno, al menos nos da una punta por donde comenzar a investigar. Según el error, el servicio de Windows Update se encuentra detenido. ¡Elemental! Vamos al gestor de servicios y vemos que, efectivamente, el servicio Windows Update se encuentra...


Iniciado? Pero cómo, no era que...

Bueno, seguramente ha sido todo un malentendido, vamos a reiniciar el servicio e intentar de nuevo. Y procedemos a cumplir con la formalidad. De hecho, para hacerla completa y evitar cualquier interferencia casual vamos a reiniciar el ordenador para luego intentar bajar nuevamente las actualizaciones... así que, reboot de por medio...


Debe ser un problema temporal, probemos con otro reinicio, funcionará bien la próxima...


A esta altura la heurística del cerebro nos lleva de inmediato a preguntarnos: seremos los únicos a los que nos toca la nube con más rayos? no, no puede ser... y vamos como un disparo a consultarle en Google, repitiendo la frase como en la escuela primaria: “Windows Update no puede buscar actualizaciones porque el servicio no se está ejecutando.”. Google engulle nuestra consulta cual galletita de chocolate y nos devuelve foros, foros y más foros de gente que se desgarra las vestiduras por ese error. No somos los únicos, hay más como nosotros.

Y navegando por los foros, allí, iluminado por la luz de las estrellas, está el link con la solución, justo en el sitio de soporte de Microsoft. Un artículo titulado ¿Cómo se pueden restablecer los componentes de Windows Update? Ohhh! toda la inmensidad se reduce a ese cartel azul que dice “Microsoft Fix It”: un extraordinario plan que nuestra empresa de confianza pone a disposición de sus apreciados clientes... “Fix It”, tan sencillo como un botón mágico que nos salva del hastío, de la oscuridad, y de los dolores de cabeza.


Asi que sin perder un segundo, damos clic al botón “Ejecutar ahora”, y luego “Acepto”, “Siguiente”, “Siguiente”, “Siguiente”, viendo una tenue barra de progreso hasta encontrar, ¡al fin!, que nuestro problema “ha sido corregido”.



O no, no ha sido corregido. Sigue igual. Igual que antes. Ni se ha inmutado:


Bueno, seamos optimistas, quizás ese parche no era el adecuado, quizás haya otro que lo resuelva. Probemos con este que parece similar: .



No che, tampoco funciona. El fix no fixea nada. Todo muy bonito y lleno de firuletes, pero a la hora de correr se queda en la gatera:


Siguiendo con la lectura doy con otro enlace que puede ser el santo grial de las Actualizaciones de Windows. Se titula “Herramienta de preparación para Windows 7 sistemas basados en x64 (KB947821)” y se describe como:
“Esta herramienta ha sido puesta a su disposición porque se ha detectado una incoherencia en el almacén de servicios de mantenimiento de Windows que podría impedir la correcta instalación de futuras actualizaciones, service packs y otro tipo de software.”
Tan explicativo como ya nos tienen acostumbrados: una “incoherencia en el almacén de servicios de mantenimientos”, ¡pero que obvio! ¡quién lo hubiera dicho! Tan solo hay que bajar un parche de apenas... 340 MB... 340 megabytes por un Windows Update que no funciona. Un parche que pesa tanto o más que el instalador de Windows 98 tiene que arreglarlo todo: este problema y los que vaya a tener dentro de un año. Un parche de 340 megabytes tiene que arreglar TODOS los problemas.


no? NO.


Me hace acordar a una frase de la tira ECOL: “Mierda, mierda en estado puro.”

¿Que nos queda? Un poco más de lectura nos lleva a este post en el sitio de preguntas y respuestas de Microsoft, una especie de Yahoo Answers donde MVPs y usuarios intercambian sus miserias con el sistema operativo de las ventanitas.

La primera respuesta nos dice todo: “You are seeing the effects of a hijackware infection. Only the format & clean install will resolve the problem.” Y te lo dice un MVP con un montón de medallas, eh!

Ahhh, si me dieran un billete por cada vez que escucho eso... Verán, en el gremio informático es materia de todos los días que chantas que arreglan computadoras le achaquen los problemas a los virus. Ojo, en un cierto porcentaje es así, pero buena parte de ellos -los que degradan el oficio- aprovechan la ignorancia del cliente y le cargan al código malicioso todo aquello que ellos mismos no pueden resolver. Les suena...
  • ¿Te anda lento el explorer? Ah, tenés un virus.
  • ¿No abre facebook? Huy, un virus.
  • ¿La impresora no toma las hojas? Zás, tenés un virus.
  • ¿Se tapó el desagüe de la pileta? Que crees, un virus seguro!
Fíjense que hemos llegado a exportar -o quizás lo hemos importado de ellos- el mismo vicio a los médicos cuando no saben el origen de una molestia:
  • Una mancha y picazón en el brazo? Ah, tenés un virus.
  • Dolor de estómago y malestar general? Que crees, un virus seguro!
Y así como nos dan una bayaspirina y nos mandan de vuelta al hogar, los técnicos chantas inmediatamente dan la solución infalible: reinstalar, reinstalar, reinstalar.

No es una solución que me convenza, y evidentemente tampoco le convence al usuario j15Gatz quien, en la segunda respuesta y con buen pensamiento crítico, da la posta: apunta a un blog, que no pertenece a Windows ni a MSDN, donde sí está la solución:

Tres pasos sencillos:
  1. detener el servicio de Windows Update,
  2. eliminar el contenido de la carpeta C:\Windows\SoftwareDistribution\ 

  3. volver a iniciar el servicio.
Listo. Sólo eso.

A esto se enfrenta, sin saberlo, quien utiliza aplicaciones de código cerrado:
  • no conoce la interacción entre componentes, 
  • no puede saber la causa de los problemas, 
  • el desarrollador le impide por todos los medios que efectúe un diagnóstico preciso -de hecho se lo prohíbe explícitamente-, 
  • debe confiar en “soluciones mágicas” sin fundamento ni asidero alguno,
  • el soporte técnico es un pozo negro de tiempo y dinero desperdiciado,

lunes, abril 30, 2012

Viendo el streaming de TN, sin navegador web

Lamentablemente no pude estar en Capital para el recital que diera Pedro Aznar recordando al eterno flaco Luis Alberto Spinetta, me tuve que conformar con intentar verlo por algún medio de comunicación, y considerando que en casa no está andando la TV por cable, suelo recurrir a ver los especiales rockeros de TN por la web.

Pero a mi juicio los reproductores basados en Flash son un atropello al navegante cuando existen muy buenos reproductores de video; tiene que haber una forma de ver el flujo de video en tiempo real, pasando por fuera del navegador.

Afortunadamente el usuario LeaN946 en el foro de TDT Latinoamérica nos brinda la respuesta adecuada: utilizando rtmpdump con algunos parámetros mágicos:

$ rtmpdump -r rtmp://stream.tn.com.ar/live/tn2 -a live/tn2 -y tnlive3 -W http://tn.com.ar/sites/all/themes/dozer/swf/cplayer/player.swf -p http://tn.com.ar/envivo/especiales | cvlc -

o bien

$ rtmpdump -r rtmp://stream.tn.com.ar/live -a live -y tnhd1 -W http://tn.com.ar/sites/all/themes/dozer/swf/cplayer/player.swf -p http://tn.com.ar/envivo/24hs | cvlc -

es posible arribar a esto:


El audio deja un poco que desear :( pero la imagen no está mal, no?

lunes, abril 09, 2012

FLISOL 2012 - Festival Latinoamericano de Instalación de Software Libre

Como ya viene siendo una sana costumbre, el Grupo de Usuarios de Software Libre de la Universidad Nacional de Luján está organizando la edición local de la 8va edición del Festival Latinoamericano de Instalación de Software Libre (FLISoL), el evento simultáneo de difusión de Software Libre más grande en Latinoamérica.


El FLISOL se realiza desde el año 2005 y su principal objetivo es promover el uso del software libre, dando a conocer al público en general su filosofía, alcances, avances y desarrollo. Para tal fin, las diversas comunidades locales de software libre (en cada país, en cada ciudad/localidad), organizan simultáneamente eventos en los que se instala, de manera gratuita y totalmente legal, software libre en las computadoras que llevan los asistentes. Además, en forma paralela, se ofrecen charlas, ponencias y talleres, sobre temáticas locales, nacionales y latinoamericanas en torno al Software Libre, en toda su gama de expresiones: artística, académica, empresarial y social.

El FLISOL 2012 se llevará a cabo el sábado 28 de abril. Por quinta? sexta? séptima? vez, el UNLUX organizara la actividad en la ciudad de Luján. La jornada está dirigida a todo público, sin importar el nivel de conocimientos técnicos que se posea, y comprenderá la instalación de software libre en los equipos que acerque el público, así como también habrá charlas de variado tenor.

Agendando...
Más Info en el sitio web del UNLUX y en www.installfest.info/FLISOL2012/Argentina/Lujan

Recuerden que además, el sábado siguiente -5 de Mayo- tenemos ¡PyDay en la UNLu!

martes, marzo 27, 2012

Jornada de Python en Luján: PyDay Luján 2012

Replico FYI:

PyAr, el grupo de usuarios de Python Argentina, está orgulloso de presentar una nueva Jornada del lenguaje Python 2012 (PyDay) en la Universidad Nacional de Luján, el día Sábado 5 de Mayo de 2012 de 11Hs a 18Hs.

Durante el Python Day se darán pequeños cursos y charlas relacionadas a este lenguaje, creando un espacio en donde cualquier persona interesada pueda acercarse para preguntar, aprender y experimentar con
esta herramienta.

Python es un lenguaje moderno, sencillo de aprender pero muy poderoso en cuanto a la cantidad de aplicaciones en las que es usado profesional y académicamente: en sitios web, en juegos, aplicaciones de escritorio y en scripting en general, etc...

El publico al que nos dirigimos es de todos los niveles, pero estamos muy interesados en acercar Python a quienes solo lo conocen de oído o directamente no saben de que tipo de lenguaje se trata. Tendremos charlas
especiales para ellos.

Con esta misma invitación damos por iniciado el Call For Charlas; aquellos interesados ya pueden proponer nuevas charlas y son bienvenidos los colaboradores y empresas/entidades interesadas en participar y auspiciar la jornada.

Cualquier duda o consulta, el mail de contacto es pydaylujan@gmail.com
El encuentro se llevará a cabo en el pabellón 400 de la sede central de la UNLu http://www.unlux.com.ar/como-llegar/

La entrada libre y gratuita (previa inscripción web), ¡los esperamos!

jueves, marzo 01, 2012

Open Security Training, CS:APP y gPEFile

Finalizando las vacaciones, antes de reincorporarme al trabajo diario, dediqué unos días a seguir uno de los cursos de análisis de malware que tenía agendado desde hace tiempo, en este caso, el de Open Security Training.

La gente de OST provee el material, los ejemplos y los videos en línea para que uno vaya, a su tiempo, incorporando conocimientos repartidos en las siguientes clases:

Beginner Classes

Intermediate Classes

Advanced Classes

La primera clase sirve como base para las siguientes y discurre sobre los conceptos iniciales, describe el hardware sobre el que se programa en lenguaje ensamblador, describe con varios ejemplos las instrucciones del lenguaje más comunes, y muestra cómo seguir la ejecución de un programa con en Windows con Visual Studio Debugger (u OllyDbg, que no es tan distinto) y en GNU/Linux con gdb. Como bien hace mención el instructor, con conocer algunas pocas instrucciones ya es posible leer la mayoría de los programas.

La clase finaliza dejando como tarea el análisis y la resolución del clásico ejercicio de "bomba binaria" de la asignatura Arquitectura de Computadores de la Carnegie Mellon University, la cual requiere conocer técnicas básicas de ingeniería inversa para progresar a traves de las diferentes fases de la bomba, dando las respuestas correctas y evitando "explotarla". Sin duda es un ejercicio que me ha entretenido mucho, me ha hecho pensar bastante, y que realmente debo recomendar como un buen inicio al arte de la ingeniería inversa.

Buscando información sobre el tema dí con el libro de cabecera de tal asignatura: Computer Systems: A Programmer's Perspective, cuya edición 2011 es altamente recomendable. Está escrito en un lenguaje claro pero detallado, con ejemplos concretos (casi diría “palpables”) para explicar las abstracciones de sistema, y con un amplio conjunto de ejercicios para realizar. El sitio web contiene algunas secciones de ejemplo que sirven como preview, así como también material adicional al texto en papel. En retrospectiva, es el libro que me tendrían que haber recomendado cuando cursé las materias de arquitectura.

La clase “The Life of Binaries” trata efectivamente sobre “la vida de los ejecutables”, desde su creación: parsing del código fuente, abstract syntax trees, estrategias de compilación, lenguajes intermedios, enlazado del binario final; hasta su carga en memoria por el loader del sistema operativo y posterior ejecución en el computador. Se dan descripciones detalladas sobre los formatos binarios Portable Executable (PE) de Windows y Executable and Linkable Format (ELF) de Linux. El recorrido por el formato PE y su estructura, basado en el trabajo realizado por Ero Carrera, es muy completo y esclarecedor. La clase abarca también algunas de las técnicas que de ocultamiento y hooking utilizadas comúnmente en el malware, cómo funcionan realmente los virus de computadora, y qué técnicas es posible utilizar fácilmente para brindar mayor seguridad a los binarios que se generan.

A partir de esta clase se me ocurrió aprovechar el excelente trabajo realizado por Carrera con la biblioteca pefile y desarrollar con python-gtk2 un visor de archivos PE para interfaz gráfica, inspirado en el utilizado en los videos de entrenamiento. Dejo algunas capturas de la primera versión que no da vergüenza mostrar. El código, como siempre, se puede descargar desde el link que sigue y las correcciones y sugerencias serán bienvenidas.

Descargar: gpefile.py (v0.19, 78 KB)
Último cambio: Agregado despliegue de recursos RT_BITMAP, RT_GROUP_CURSOR, RT_GROUP_ICON, RT_STRING, GIF y PNG.

Me queda pendiente continuar con las clases siguientes, en cuanto el tiempo me lo permita. A la gente detrás del proyecto de Open Security Training, mi sincero agradecimiento por la dedicación y por el material brindado generosamente a la comunidad.