Verificar status de aliases de Apache

Hace poco hice una migración de un servidor que, entre otras cosas, tiene un Apache con numerosos aliases. Para verificar que los aliases estuvieran “arriba”, solo hace falta un poco de magia, también conocida como awk y curl:

grep Alias /ruta/a/configuracion/apache | awk '$1 !~ /#/ {print $2}' | xargs -I {} curl -sL -w "%{http_code} %{url_effective}\n" SERVIDOR.COM/{} -o /dev/null;

hattip curl

De hackers, crackers y editores flojos

Andaba navegando por el twittverse cuando me encontré con una nota referente a la psique de los ‘hackers’. “Fabuloso,” pensé. “Una deconstrucción de los clichés referentes a los intrusos informáticos.” Ja. Ja. Y más ja.

La joyita más importante está a la mitad del artículo:

Las ganas de explorar son el combustible por excelencia y muchos solo quieren romper los sistemas a los que ingresan. A estos la mayoría les dice hackers, pero el término adecuado es crackers. Suelen hacer colapsar servidores, infectar computadoras, entrar a zonas restringidas y crear botnets, es decir, ‘ejércitos’ de computadores ‘zombies’, que hacen lo que ellos les ordenan, como atacar un sitio web.

Yay! Paz y buena voluntad a los hombres de eltiempo.com! Excepto que, no. En el siguiente párrafo:

El nacimiento de Anonymous, la organización de hackers que en su momento hizo colapsar páginas de la talla del FBI o de Visa y MasterCard[…]

Ex-fucking-cuse me? Buuuu al editor!!!

Ese es el maldito problema con estos artículos. Preservan conceptos erróneos, y tergiversan el significado verdadero de las palabras. Primero, que un “hacker” es un cuate que sabe utilizar herramientas para vulnerar sistemas. Nel, mil veces nel! Conozco pocos hackers en persona (el equipo completo del Giraffe Chapter califica) pero sé bien quienes *no* son hackers. “Tirar” un servidor no te hace hacker. Sacarle la contraseña de red inalámbrica al vecino tampoco. Y borreguear, menos. Lo que más me molesta, supongo, es que los verdaderos hackers ya no tienen término. “Gurú” no hace justicia: hay gurús que no producen soluciones (i.e. “hackear”). Tampoco “experto”; muchas personas utilizan la etiqueta cuando no tienen el mínimo derecho a ella, y la vasta mayoría son consultores – donde lo que menos se hace, es hackear. Cobrar, eso sí; hackear, terriblemente poco. Y, obviamente, los que verdaderamente merecen la medallita salen perdiendo – porque en el miasma de las TIC (creo que me siento sucio nomás de escribirlo) es difícil distinguir a los elementos valiosos. Bueno, a veces hasta es difícil distinguir a los competentes…

Segundo, que Anonymous es una organización. Esto es un problema ligeramente más grave, porque preservar esta concepción es precisamente el problema de aquellos que pelean contra sus ataques. Creen que hay líderes que derrocar, sistemas centrales que neutralizar, herramientas que identificar. El LOIC es *una* de muchas. Aquí unas cuantas, apenas para DDOS. Y en realidad, ninguna es una “herramienta Anonymous”; mañana sale un plugin para que sirva para XSS, y presto – otra más al arsernal. Arrestan a 7 miembros; 70 más salen de salones de clase, cubículos de oficina, etc. Apagan 3 servidores IRC; mañana publican otros 10 – incluso en otro protocolo, tal vez más seguro, tal vez menos detectable. La inercia y el conformismo de los “expertos” en seguridad es lo que preserva su fuerza.

Quieren derrotar a estos “hackers” y su “organización”? Empiecen a formarse una imagen más propia de lo que en realidad son. El grueso, script kiddies. O acarreados. O ambos. El “miembro” promedio de anonymous no es más hacker que el pajarito de Homero. Y dejen de pensar que están viviendo su propia versión de “Takedown”. Fortalezcamos nuestros sistemas; hagamos consciencia de seguridad. Invirtamos (sí, ni modo) en equipos, si no tenemos el expertise para cubrirnos. Véanlo de esta forma: Anonymous es el equivalente digital de las marchas que acongojan nuestras ciudades casi diariamente. Sí, hay marchas estúpidas. Sí, nos joden la vida a todos. “Use vías alternas” es el credo, no “atropéllenlos a todos.”

Y sí, el próximo miembro de Anonymous que me demuestre que tiene “ganas de explorar” será el primero. La mayoría ni siquiera prueba las múltiples opciones de las herramientas 🙁

Registrando actividad de shell (script) *remotamente*

script es un comandito de UNIX muy útil: permite registrar toda la actividad de la consola (incluyendo salidas de comandos) en una bitácora.

Hasta ahí, nada raro; el problema es que a veces uno quisiera que esta bitácora se registrara fuera del sistema en cuestión, por cuestiones de integridad (modificar en lo más mínimo el sistema en cuestión) o comodidad (centralizar las bitácoras de actividad de un sysadmin de múltiples sistemas, por ejemplo). script exige un archivo local para escritura. Sin embargo, le podemos dar la vuelta… con pipes nombrados (FIFO):


mkfifo /ruta/al/pipe
cat /ruta/al/pipe | nc 192.0.2.1 1111 &
script -f /ruta/al/pipe

Un netcat en el equipo remoto (o un webservice, o lo que sea que reciba nuestra bitácora) y listo!

Extraer nombres de rutinas en códigos fuente tipo C

Bien dicen que la necesidad es la madre de la invención.

Tenía que extraer todos los nombres de rutinas de las diferentes clases de C# que he estado trabajando. Después de buscar en Visual Studio por alguna opción que me permitiera hacer esto de manera sencilla – y vaya que busqué – me desesperé y pensé… finalmente son texto plano, no? Las clases, esto es.

Pues, ¡claro que lo son! Y entonces awk viene muy al caso. El siguiente script sirve para cualquier código fuente tipo C (rutinas con parámetros entre paréntesis, código de la rutina entre llaves) – siempre y cuando las llaves no estén nunca en la misma línea que el nombre de la rutina (una práctica relativamente común). Ejemplo de lo que sirve:

modificador modificador RUTINA(parámetros si los hay)
{
...
}

o también

modificador modificador RUTINA(parámetros si los hay)
{...}

o cualquier combinación entre ellas. Luego entonces, el script:

awk 'BEGIN{x=0;} {if($0 ~ /{/) x=x+1; if($0 ~ /}/) x=x-1; if(x==0 && $0 !~ /}/) print $0;}'

Nótese que esto no nos quita los modificadores, solo el código intermedio. Si queremos quitar todo lo demás, podemos utilizar sed – pero después de 10 minutos de jugar con él me doy cuenta que no es trivial (al menos ahorita ¬¬) y lo dejo para otro post – o como dijeran mis libros de la prepa: “Queda como ejercicio para el lector”.

🙂

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.

Poniendo colores de fondo diferentes a diferentes elementos de un ComboBox

Los comboBox son un control que permite seleccionar uno (y solo uno) de una lista de elementos. Algunos lenguajes los nombran dropDownBox, en HTMl es una etiqueta SELECT, etc.

En la familia .NET, no existe forma “sencilla” (objeto.propiedad) de cambiar el color de fondo para diferentes elementos. Pero con un poquito de investigación, descubrí que es posible redefiniendo el método que se encarga de dibujar cada elemento de la lista, en el control. Esto se logra:

1. Modificando la propiedad DrawMode del control, de “Normal” a “OwnerDrawFixed” u “OwnerDrawVariable” (este último es útil si se quiere modificar el tamaño de los elementos, de otra forma Fixed nos funciona perfecto).

2. Agregando un método al evento DrawItem del control.

3. Poniendo en ese método algo como:

private void _DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
Graphics g = e.Graphics;
switch ()
{
case 0:
g.FillRectangle(new SolidBrush(Color.LightGreen), e.Bounds);
break;
case 4:
g.FillRectangle(new SolidBrush(Color.LightCoral), e.Bounds);
break;
case 8:
g.FillRectangle(new SolidBrush(Color.LightYellow), e.Bounds);
break;
case 12:
g.FillRectangle(new SolidBrush(Color.LightBlue), e.Bounds);
break;
default:
g.FillRectangle(new SolidBrush(Color.LightGray), e.Bounds);
break;
}
string text = ((ComboBox)sender).Items[e.Index].ToString();
Brush brush = Brushes.Black;
e.Graphics.DrawString(text, ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y);
e.DrawFocusRectangle();
}

🙂

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$.

😀

A veces se me olvida lo lindo que es Visual Studio…

private void algunTextbox_KeyPress(object sender, KeyPressEventArgs e)
{
const char Delete = (char)8;
e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
}

🙂

P.D.: Esto sirve para que, con C# (o bien, C sharp), podamos limitar el contenido de un textbox a solo digitos. En esencia, estamos aceptando teclazos si y solo si son digitos (o estamos borrando).

iOS 4.2 está bastante chido…

Pues acabo de actualizar mi iPhone a la versión 4.2 del sistema operativo. He de decir… wow. Apple acaba de hacer que mi teléfono cuente con muchísima mayor funcionalidad. Veámoslo a detalle.

1. Primero que nada, el nuevo AirPrint. Resulta que ahora puedes imprimir a cualquier impresora soportada (que tristemente, no son muchas… pero la mía sí :D) desde el mugroso iPhone. Esto incluye Fotos, Safari, Mail y Notas, así como una cantidad de aplicaciones adicionales. O sea, que la próxima vez que quiera imprimir un correo, solo debo hacer dos clicks… y voilà. Realmente de siglo 21 😀

2. Find My Iphone. Esta es probablemente la característica más payasa. Resulta que este servicio, que anteriormente tenía un costo de $100 USD al año, ahora es gratuito para todos los usuarios de iPhone 4. Y está… impresionante. En esencia es un servicio push que permite posicionar al iPhone en cuestión desde web (o incluso otro dispositivo iP*)… pero eso no es todo. Permite enviarle un mensaje (que se despliega en la pantalla del iPhone), deshabilitarlo (para que no lo puedan utilizar), o incluso, borrarle toda la información que contiene, de manera remota y confiable.

Es decir, que ya no me tienen que presumir nada los que usan su BlackBerry. Este dispositivo también tiene su remoteWipe. 😀

3. Por último, pero no menos importante… el Tethering. O sea, compartir internet. Disponible en el menú “Red” de la sección de configuración, ahora podemos compartir internet con otro dispositivo (ej. Laptop) a través de la conexión 3G del teléfono, sin necesidad del jailbreak. Ya lo probé y funciona de maravilla. Ahora, a ver si Telcel no se mancha y quiere cobrar de más por esta funcionalidad… Pero de momento, es una fantástica adición.

Creo que tiene otro par de mejoras más, pero estas fueron las que me vendieron la actualización. Gracias, Apple!