Don Beto, ya tenemos correos!

Mea culpa: en la última iteración de sergiob, se me olvidó “prender” muchas cosas, y eso incluye los correos del blog. No se preocupen, solo es una basurita en mi ojo

A todos aquellos usuarios registrados últimamente (sí, ustedes, legión de 2): por favor, envíenme un mensajito (ahí a la derecha está mi twitter) y les establezco su contraseña.

Si les interesa saber cómo se hacen esas magias, son tres pasos:

1) Instalar/configurar msmtp
2) Configurar php para utilizar msmtp para enviar correos (ambos pasos descritos aquí)
3) Configurar wordpress para enviar correos con la función mail de php (Configuración | E-mail).

“Late” night crusin’

What I want, you've got
But it might be hard to handle
Like the flame that burns the candle
The candle feeds the flame yeah yeah
What I got -- full stock of thoughts and dreams that scatter
And you pull them all together
And how I can't explain oh yeah
Well well you (ooh ooh ooh ooh) you make my dreams come true (you you) you
(you you)

Ok, no es un “code”…

He aquí unas verdades fundamentales de la vida:

– Conforme avanzas en edad (y rutina, y responsabilidad), te cuesta más trabajo desvelarte.
– Conforme avanzas en edad (y rutina, y responsabilidad), más te gusta desvelarte.
– Desvelarte es la ÚNICA (acentuado para no tener problemas de copyright con la FI) manera de programar algo que valga la pena.

Ergo… conforme avanzas (bla bla bla), más te gusta programar (WTF, old dude?). O al menos buscar la solución a los problemas computosos. Estúpido moodle, pero a la vez bello moodle.

Por cierto, me gustaría saber cuáles son las mejores canciones para programar. Tengo propuestas:

– Orbital: Halcyon (and on and on). Está en mi iPod como “Mortal Kombat Symphony” porque el soundtrack me lo bajé de interné y no tenía el nombre de las canciones. Y se callan, MK es la neta… Tiene dos grandes cosas a su favor, esta rola: no tiene letra (salvo algunos cánticos medio ballenescos) y es laaaarga. Muy buena por si tienes chance de poner una y ya.
– The Dandy Warhols: Bohemian like you. “oooh-ooh oooooooh!” Por cierto, WTF significa “I’m feeling bohemian like you”? Obviamente los grititos son buenos para celebrar una línea particularmente inteligente, o haberle entendido a la documentación finalmente (quién diablos se imagina que String.Format toma CUALQUIER OTRA COSA SALVO UN STRING COMO PARÁMETRO en ciertos casos? O sea, digo, no mamen…)
– Héroes del Silencio: Apuesta por el Rock ‘n Roll. “Y no sé si nací para correr… pero quizás sí que nací para” compilar? Geeky as fuck. Y también porque no hay lista de mejores canciones sin Bunbury. Eso me recuerda: el dolor en la planta del pie es 1) pie plano, 2) plantar fasciitis (como se diga en español), 3) gordura extrema, o 4) psicosomático?
– Smash Mouth: Walkin’ on the sun. Igual es porque así van saliendo en el iPod, entre 7 millones de canciones inútiles (por cierto, qué será mejor? Limpiar tu música de todo lo que no te GUSTA TREMENDAMENTE, tener un segundo dispositivo para esas canciones que son doubleplusgood, o resignarte a la diversidad?) De cualquier forma, si puedes cantar la canción y seguir programando sin poner “INSERT INTO fashion will be smashing WHERE the true meaning” ya la hiciste… igual es para rondas dobles de programación.
– Edward Maya, Vika Jigulina (really? Jigulina??): Stereo Love. Y en la misma idea:
– Röyksopp: Follow my ruin. Esta la conocí en el taller de Yopas. Me cae que no me gusta la electrónica (o dance, o house, o techno, o como les digan hoy en día – y casi puedo apostar que estas dos no son del mismo género. Fuckers), pero de repente como que sí. Igual es porque parecen un loop de lo mismo y entonces no te distrae tanto. Pero si un loop musical te traba en un loop mental??? Qué entonces, carajo?! Igual ya es la hora.

Se aceptan sugerencias…

P.D. Sí, el último post estuvo muy raro. Juro que no nació de un motazo…

El dolor es temporal (pero eso no quiere decir que no duela)

Hay un dicho por ahí que aplica en la mayoría de los deportes – bueno, en la mayoría de las actividades de la vida: “El dolor es temporal. La victoria es eterna”. Y sí, es la esencia del “ni quién te quite lo bailado”, o del honor, o de un legado, o cualquier cosa similar.

La cosa es que… MALDITA SEA, Sí DUELE!! Al menos mientras lo estás viviendo, dices “changos… esto está cañón”. El asunto sale a relucir hoy (y a estas horas) porque me la he pasado [medio|mal|pseudo]durmiendo con una tremenda amigdalitis. O sea, anginas. Y aunque sé que hay dolores mucho peores allá afuera (y yo mismo he sufrido algunos), este no deja de tener su peculiar sentido de diversión, con eso de que cada vez que mi cuerpo ejercita ese viejo reflejo de tragar saliva me acuerdo perfectamente de la ubicación, tamaño, código postal, CURP y otros detalles íntimamente personales de cada una de mis amígdalas. Incluyendo, por supuesto, su tremenda población bacterial.

El punto es que estuve inconsciente menos de 3 horas en toda la noche, y eso echándole porras a mi cuerpo. En esencia, tragar cualquier cosa me duele (tal vez es un mecanismo de defensa de la bacteria?), respirar no es muy divertido que digamos (una ruleta con un 30% de probabilidad de dolor), y aunque ya no tengo fiebre ni sufro de alucinaciones como hace 2 días, sigo teniendo ciertos dolores corporales muy específicos y a la vez aleatorios (o sea… qué tiene que ver con la gripa, o infección de garganta, o algo generalmente relacionado con el aparato respiratorio, que de repente me empiece a punzar el pie? En serio, WTF, agente patógeno?) que en suma me mantienen con una esperanza de vida de YA POR FAVOR DÉJENME SALIR. Pero no me quejo 🙂

(Mientras escribía el párrafo anterior tragué 4 veces. Así que cualquier falta de hortografía serían muy amables en ignorar).

Pendientes:

– Escribir la canción (ya tengo la idea, ya tengo la tonada).
– Escribir el resumen del juego de mesa (ya tengo la idea, y creo que hasta un bosquejo del tablero).
– Sugerir amigdalectomía junto con circunsición, como “paquete” a hospitales (ok ok, no soy tan cruel).

Baaaaahhhhhhh….

Scp y C#

Hay veces que la vida te hace sentir inseguro, triste, alicaído, dolido y débil…

Then again, hay veces que… bueno, un video dice más que 1M palabras:

El código relevante:

Scp bule = new Scp(servidor, user, pass);
bule.Connect(puerto);
bule.Put(archivo origen, archivo destino);

Y la biblioteca relevante:

http://www.tamirgal.com/blog/page/SharpSSH.aspx

😀

Yujú!

Misión: rotar una imagen para su impresión en C# (counter-clockwise 90º)

Tiempo estimado de completado: 1-3 horas (dependiendo de lo que Dios Google me dijera)

Resultados preeliminares de búsqueda (re: Google):

Already done

Tiempo real de completado: 5 minutos

YUJU!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Y… me hackearon

Pues… qué puedo decir? Me descuidé, y me descuidé horriblemente.

La historia, horriblemente, es como sigue: hace un mes me ví en la necesidad de configurar un servicio de correo express, por cuestiones profesionales. Y como buen debianero, dije “pues el exim, he escuchado que es muy práctico!” Y entonces hice un sencillo apt-get, configuré algunos parámetros… y listo. No configuré un open relay (digo, tampoco soy un completo idiota) pero sí dejé muchos parámetros de manera insegura. Aún peor, y a diferencia del resto de mis servicios, no lo puse en una jaula, ni le cambié el usuario predeterminado. Total que bueno, hay cosas que uno mismo se busca…

Un par de semanas después, Javier tuvo una plática (de botnets) y lo acompañé. Durante la plática, comencé a recibir un montón de correos de sergiob, informándome que habían nuevos comentarios en el blog. Como esto es tremendamente raro (considerando que nadie *jamás* pone comentarios – vamos, casi nadie lee el blog para empezar) inmediatamente verifiqué… y ciertamente, era puro spam. Cambié la configuración predeterminada del wordpress, de manera que todos los comentarios requirieran aprobación previa, y cerré capítulo. Ni volví a pensar en ello…

…hasta hoy.

Amazon (mi amable proveedor de nubecitas) me mandó mi factura mensual, como todos los meses. Apenas y volteo a ver los correos: las cuentas suelen ser ridículamente bajas. Excepto hoy. Hoy, la cuenta reportada excedía en 10,000% (y no, no exagero) lo que normalmente pago. Lo que es… bueno, es bastante. Mi reacción fue inmediata: verifiqué el reporte de uso de Enero, observé con horror que la cuenta era correcta, bajé los reportes para un análisis posterior, y abrí una terminal para corregir los problemas. Los hallazgos fueron… terribles.

Los atacantes consiguieron acceso a través de una vulnerabilidad de exim (específicamente esta) y tomaron control del sistema. Se acomodaron felices, pusieron su bot, y descargaron… y descargaron…

860 Gigabytes.

El problema ya está controlado, y no hay hueco de exim por donde puedan volverse a colar. Al menos me llevo conmigo dos lecciones: la primera, dolorosa porque la repito (y suelo vivirla), no hagas las cosas mal, ni siquiera por hacerlas rápido. La segunda, y más importante en mi opinión, monitorea, maldita sea!. No porque sea tu servidor personal, y no un equipo de producción, te da derecho a olvidarlo a la buena de Dios. Pero en fin… echando a perder se aprende.

Al menos ya estamos de regreso. A ver que tal sale el servicio de correo de Amazon.

(Con disculpas a los profesionistas del tema, pero “me explotaron una vulnerabilidad” no tiene el mismo sonidito, o sí?)

Messenger 2011, Tweetdeck, y mi CPU: el asesino (no tan) silencioso

Como aquellos que me conocen saben, tengo una cierta costumbre de trabajar de noche. Es fabuloso para mí: nadie me molesta, no molesto a nadie (salvo por el ruido del teclado), avanzo muy rápido, la red está especialmente fluida… todo conspira para que sea mi horario de facto. Evidentemente, como me encanta la música, suelo traer puestos mis audífonos – los muy fantásticos MDR-NC7 de Sony, altamente recomendados por cierto – y evidentemente no escucho absolutamente nada de lo ocurre afuera.

Por ello, no me dí cuenta del problema inmediatamente.

Hoy en la tarde noté que tenía mucho calor. Esto es anormal en mi cuarto: desde que sergiob se mudó a Amazon, no existe un equipo de cómputo con su CPU al 100% todo el tiempo (y por ende, con ventiladores a máximo), lo que reduce muchísimo la temperatura – sin mencionar el gasto de luz eléctrica. Pero recuerdo bien la sensación… total que encontré las mismas condiciones, y me sorprendió mucho. Tenía la televisión prendida, y bueno, no me dí cuenta al inicio que los ventiladores zumbaban al máximo, prácticamente gritando “wey! Pon atención!” Llegó la noche y el calor continuaba. Con los audífonos, el ruido hubiera sido evidente – pero, afortunadamente, Elena marcó por teléfono. Y esto me forzó a quitarme los audífonos, a escuchar el ambiente… y a notar el tremendo ruido que causaba mi compu. Windows no viene con un monitor de recursos incrustable en la barra de tareas – como lo permite GNOME – de manera que no puedo echarle un ojo permanente a los recursos. OK, pero no es culpa de Windows, enteramente.

Un rápido vistazo al administrador de recursos dió con 3 aplicaciones que, alternadamente, se jugaban entre el 25% y el %60 de mi procesador. El primero es iTunes: viejo conocido de los problemas de CPU. El segundo fue Tweetdeck: entendible en que es Beta, aunque… qué demonios tiene que ocupar tanto CPU una estúpida aplicación que en resumen es un RSS reader? Ah, las maravillas de Adobe Air. El tercero, sin embargo, me sorprendió tremendamente: Windows Live Messenger.

Así es. El ubicuo mensajero, que solía ser de los programas menos demandantes (algo que contribuyó tremendamente a su adopción generalizada, por cierto – aquellos usuarios de Yahoo! Messenger o ICQ en los viejos días sabrán a lo que me refiero) – ahora resulta que es un hoyo negro para los recursos de mi sistema. Una ligera investigación reportó que, efectivamente, WLM 11 tiene un grave problema de recursos – relacionado con la “Vista completa”, donde permite recabar información de diferentes redes sociales. Al parecer, esta tarea acosa terriblemente al procesador, causando picos constantes que, a la larga, conllevan un aumento de temperatura, y todos los problemas que esto último ocasiona.

La mejor solución? Cambiar a “Vista compacta”. Por supuesto que se pierde el componente de redes sociales: pero francamente, prefiero enterarme de algo por las alertas del correo de Facebook, a que mi compu se muera prematuramente. El calor es un terrible asesino, como cualquier persona involucrada en soporte técnico puede asegurarles. Terriblemente efectivo, y lamentablemente fácil de evitar – si estamos dispuestos a controlarlo. Es por ello que me encanta mi panel de monitoreo en Debian, es por ello que pagaría buen dinero por un panel similar en Windows. Realmente lo vale.

Un último tip: otro posible problema de WLM 11 son los anuncios. Un anuncio mal programado (y créanme, los hay) puede inducir el mismo comportamiento excesivo de recursos. Así que ya lo saben: poco y bueno con el Messenger.

Acerca de .Net, el manifiesto y los requisitos previos

Pues llevo la mejor parte de la noche (ok, ok, apenas un par de horas, pero es bastante para mí!) lidiando con un problema interesante. Explicaré un poco de los preeliminares, para que todos nos entendamos.

La plataforma de .Net es, para mi gusto, una verdadera maravilla. Si vas a desarrollar para Windows (y no te importa mucho obligar a tus usuarios a que instalen X dependencias que bien pueden ser molestas), te permite utilizar una serie de lenguajes muy parecidos entre sí, sólidos, con una gran base de desarrolladores que pueden ayudarte, código disponible en línea, e incluso bibliotecas listas para ser aprovechadas. Como Java, pues, pero sin la molestia de tener que usar… *eso*. Si tú desarrollaste en Visual Basic, VB.net es prácticamente lo mismo; si trabajaste en Java, C# es un camino bastante directo. Tiene gran versatilidad para desarrollar aplicaciones web, permite redistribución de dependencias (recuerden esto), tiene soporte para actualizaciones automáticas de tu aplicación… bueno, las bondades son demasiadas. En fin, es una plataforma que personalmente, me agrada bastante.

Nosotros, los programadores eventuales (es decir, que en realidad no nos dedicamos a esto para vivir), tenemos muchas malas mañas. Generamos código sucio, no muy organizado ni comentado; nuestra documentación puede catalogarse como garabateadas en servilletas y hojas de papel que acaban tiradas por ahí; y tendemos a vivir en el modo “debug”, nunca preocupándonos por cómo va a quedar la aplicación final cuando el usuario final decida instalarla – digo, podemos dejarlo hasta el final, no? El problema con esto es que cuando llega el famoso final… es una pesadilla.

De entrada, les recomiendo esto: no utilicen acentos para nombrar a su aplicación. No, .Net no truena con eso. Pero si quieren utilizar la funcionalidad de actualizaciones, su servidor web puede darse de topes con ustedes, porque va a buscar archivos y cadenas no fácilmente codificables. Solo… tómenlo como una recomendación amable.

Y por supuesto, el centro del problema: los requisitos previos. .Net corre sobre una máquina virtual (el “Framework”), y mi aplicación en particular utiliza un motor de bases de datos sencillo (SQL Server CE, que es algo así como el primo debilucho de SQL Server Express, que a su vez es el babas a comparación de SQL Server, que a su vez… etc etc), comparable con sqlite. El Framework, para instalarle, utiliza *otro* requisito previo, el Windows Installer (v.3.1 en este caso en particular). Estos requisitos son manejados elegantemente por el instalador generado por .Net: se descargan automáticamente de internet, si el usuario final no los tiene ya instalados. El problema es que, combinados, son alrededor de 100 Mb de descarga: ciertamente no es mucho para un geek, pero un usuario con una conexión de Infinitum a 512 (cuando le va bien) nos va a obligar a visitar a los papás. So… debemos poder incrustarlos con nuestro instalador, cierto?

La respuesta es “sí, pero te va a costar trabajo”. Resulta que estos instaladores (que se pueden bajar bastante fácil de internet) no se ponen en cualquier localidad. Deben ir en el directorio que .Net utiliza para almacenar los instaladores. Suena sencillo… hasta que nos enteramos que cada versión del Framework tiene diferentes localidades (y lo mismo para cada versión del Installer, SQL, etc), y que a su vez, cada versión de la IDE lo pone en directorios ligeramente diferentes. En mi caso?

C:Program Files (x86)Microsoft SDKsWindowsv7.0ABootstrapperPackages

¬¬ Sí te iba a encontrar, no?

Pero gracias a un valiente y hermoso post:

http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/56584721-3064-46c2-81f4-6c29c01e1895/

Tuvo solución el problema. La moraleja, como siempre, es no fiarse de M$.

😀