martes, 12 de febrero de 2008

Conjugando el inexistente verbo "subnetear" (Episodio II)

Hay dos razones por las que he decidido dar continuación al tema de la obtención de sub-redes (subnetear, pues, para los que insisten): una es la creciente cantidad de referencias de búsquedas que he visto desde Google hasta este blog, referentes a "subnetear" o "subredes"; y otra es por pedido específico de una lectora que recientemente pidió que ejemplificara el caso para una red de clase A y otro de clase B. Pues bien, en esta segunda parte explicaré el procedimiento con una red de clase B (posiblemente haga una tercera parte con un ejemplo de clase A, dependiendo del interés).

Ok, partamos de un caso concreto: tenemos la red 150.14.0.0/16. Hay que recordar que el sufijo /16 indica que los bits que representan la máscara de sub-red (que para las redes clase B, antes de ser "subneteadas", siempre es 16 o sea, 2 octetos de 8 bits). En una red de esta clase (clase B), la cantidad de hosts está determinada por los 16 bits restantes de la parte de hosts, por lo que 216-2=65,534 hosts posibles... ni hablar del desperdicio de direcciones.

Nuestra máscara /16, que en decimal es lo mismo que 255.255.0.0, se representa en binario de la siguiente manera.

11111111.11111111.00000000.00000000
<-------------red*host------------>

Ahora la parte crucial: ¿cómo comenzar a dividir la red? Simple: debemos partir de una necesidad: ¿qué requerimos?, ¿cierta cantidad de redes o cierta cantidad de direcciones de host por red? Tal vez son ambas cosas. En este ejemplo supondremos que el requerimiento es obtener de la dirección dada por lo menos 500 sub-redes con capacidad para 100 hosts cada una. Vamos a aplicar una sencilla regla para determinar cuántos bits necesitamos pedir (recuerden que no es un préstamo, sino un obsequio :-D):

Como necesitamos que haya 500 sub-redes, necesitamos encontrar un número tal que elevando la base 2 a dicho número nos de la cantidad de sub-redes necesaria, o un poco más. Como ya lo mencioné anteriormente, podemos obtener la potencia por aproximación (al "ojo por ciento") o usando logaritmos. Al final puse una breve explicación de ambos procedimientos, para quien tenga interés.

Lo importante es que obtuvimos el número que buscamos: 9 bits. Con 9 bits podemos obtener 512 combinaciones, lo que nos da alegremente la posibilidad de obtener tranquilamente las 500 sub-redes que nos piden. Ahora sólo nos resta verificar que cada sub-red (de las 512) pueda efectivamente incluir al menos 100 hosts. Para esto basta con obtener la cantidad de combinaciones que nos dan los bits restantes. Recuerda que una dirección IP está formada por 32 bits, y para nuestro caso 16 bits ya están siendo usados por la dirección clase B, y 9 bits son los que acabamos de calcular que necesitamos para obtener las 512 sub-redes. Así que, si la aritmética no nos falla, nos quedan 7 bits para obtener direcciones de hosts (sí, mira: 32-16-9=7). Con 7 posiciones podemos obtener 128 combinaciones de "0" y "1" (bits), y aún restándole las 2 direcciones de ley (al total de direcciones de hosts siempre restamos dos, porque una será la dirección de la sub-red y otra será la dirección de broadcast) nos da un número (126) que nos permite cumplir, también tranquilamente, con el requerimiento de 100 direcciones. Con "bolitas y palitos" (literalmente) queda de la siguiente manera:

11111111.11111111.11111111.10000000
<--red original--><-subred->
<--nueva máscara de subred->
11111111.11111111.11111111.10000000

Y esta nueva máscara de sub-red en decimal sería: 255.255.255.128 (él último octeto sólo tiene un bit 1 en la posición más significativa, y es el número 128).

Lo interesante de este caso es obtener las direcciones de sub-red, pues hay que observar que los bits de sub-redes abarcan dos octetos (9 bits). No se asusten, no pondré las 512. Voy a poner sólo las primeras combinaciones de sub-redes para los dos últimos octetos. Así tenemos:

00000000.00000000 (es decir, 0.0)
00000000.10000000 (es decir, 0.128)
00000001.00000000 (es decir, 1.0)
00000001.10000000 (es decir, 1.128)
00000010.00000000 (es decir, 2.0)
00000010.10000000 (es decir, 2.128)

Quiero hacer notar una cosa: el bit menos significativo de la nueva máscara es precisamente el que está en la posición 128 del cuarto octeto (y, por cierto, 128 es el número que resulta de 27, antes de restarle 2). Si lo que queremos es obtener más rápido las direcciones de red (¿quién no quiere?), puede hacerse con incrementos de 128 (el bit menos significativo de la máscara) en el octeto correspondiente. Sólo que hay un detalle: comenzamos con 0 (cero), luego sumamos 128, pero si sumamos 128 a 128 nos da 256, que no puede expresarse con sólo 8 bits (256=100000000, 9 bits). Lo que hacemos es exactamente lo mismo que con las horas y minutos del reloj: después de 59 minutos se incrementa en 1 la hora, y los minutos quedan en cero; por lo tanto, si tenemos 0.128, el siguiente número NO es 0.256, sino 1.0. ¿Está claro?

Ahora sí, poniendo las direcciones completas, quedarían:

150.14.0.0/25
150.14.0.128/25
150.14.1.0/25
150.14.1.128/25
150.14.2.0/25
150.14.2.128/25
etc.

"¡Espera! ¿De dónde salió el '/25'?". Originalmente teníamos 16 bits en la parte de la red, pero como pedimos 9 bits a la parte de hosts, sumando 16 mas 9 nos quedan ni más ni menos que 25 bits, por eso la nueva máscara es /25.

Muy bien, hasta este momento hemos obtenido las combinaciones de sub-redes. Ahora necesitamos obtener las direcciones de host para cada una de las sub-redes obtenidas. Eso es fácil. Hagámoslo primero en binario. Para cada sub-red vamos a calcular su dirección de broadcast:

00000000.01111111 (este es 0.127)
00000000.11111111 (este es 0.255)
00000001.01111111 (este es 1.127)
00000001.11111111 (este es 1.255)
00000010.01111111 (este es 2.127)
00000010.11111111 (este es 2.255)
etc.

No hay que olvidar la regla: "las direcciones de red tienen todos los bits de host en cero (0), y las direcciones de broadcast tienen todos los bits de host en uno (1)".

De esta manera, obtener los rangos de direcciones de host válidas es mucho más sencillo, pues la primera dirección válida será una más que la dirección de red, y la última dirección válida será una menos que la dirección de broadcast. Sencillo, ¿no?

Para la sub-red 150.14.0.0/25
150.14.0.0/25 (dirección de red)
150.14.0.1/25 (primera dirección de host válida)
150.14.0.126/25 (última dirección de host válida)
150.14.0.127/25 (dirección de broadcast)

Para la sub-red 150.14.0.128/25
150.14.0.128/25 (dirección de red)
150.14.0.129/25 (primera dirección de host válida)
150.14.0.254/25 (última dirección de host válida)
150.14.0.255/25 (dirección de broadcast)

Para la sub-red 150.14.1.0/25
150.14.1.0/25 (dirección de red)
150.14.1.1/25 (primera dirección de host válida)
150.14.1.126/25 (última dirección de host válida)
150.14.1.127/25 (dirección de broadcast)

Si observan, la cantidad de direcciones entre la primera y la última válida son exactamente las 128 que dijimos (aunque sólo necesitamos 100, pero no es lo mismo "desperdiciar" 28 que 15,000).

Y con esto hemos terminado de "subnetear" la red de clase B (¡perdón!, la palabra "subnetear" sigue sin existir en español) sin desperdiciar muchas direcciones.

(Ningún bit salió lastimado durante esta división de sub-redes).
:-D


:wq!







Procedimiento usando logaritmos


Me voy a permitir hacer un pequeño recordatorio matemático y pondré el procedimiento para obtener la potencia usando logaritmos:

Sabemos que:
x=bn

y que:
n=logbx

Si la base (b) fuera 10, obtener n con la calculadora es directo. El problema con una calculadora sería obtener n siendo la base (b) diferente de 10, como en nuestro caso que es 2. Para esto podemos usar la siguiente identidad:

log2 x=(log x)/(log 2)

De tal manera que la fórmula quedaría:
n=(log x)/(log 2)

Sustituyendo:
n=(log x)/(log 2) = (log 500)/(log 2)
n=2.7/0.3
n=9

Porque:
29=512

El resultado indica que necesitamos 9 bits para obtener las sub-redes. Este procedimiento es el más complejo y requiere usar calculadora o tablas de logaritmos, pero sirve por lo menos para impresionar a más de dos. ;-) Esto me recuerda lo que decía mi maestro de Ecuaciones Diferenciales, cuando nos motivaba a comprar el libro de texto. Él decía: "muchachos: compren el libro. Les aseguro que si no aprenden, por lo menos podrán impresionar a las muchachas con el puro título". :-D ¡Cuánta razón tenía!.

Procedimiento por aproximación

Perdón por haber puesto el procedimiento anterior, pero varios se habían quedado con la duda de cómo se resolvía por logaritmos, si es que realmente se podía. La realidad es que muchos de los que regularmente calculan sub-redes no usan ese procedimiento (y muchos ni siquiera lo conocen). Mejor hagámoslo de la manera tradicional, aunque no se vea tan nerd.

Si lo que necesitamos es un número al que podamos elevar (potencia) el 2 (la base) para que nos dé 500 redes, yéndonos por potencias de 2 podemos encontrarlo relativamente rápido:

n=9, pues
29=512 (porque 2*2*2*2*2*2*2*2*2=512)

El "secreto" es ir multiplicando 2*2, llevando la cuenta de cuántos "2" llevas, hasta que encuentres el número que buscas... ;) Este procedimiento es más práctico que el anterior; tal vez no impresiones a nadie (o ¿quién sabe?), pero al menos llegarás rápido al número que necesitas. ;-)

:wq!

lunes, 4 de febrero de 2008

Aka Knaverit

Hace un tiempo me preguntó un amigo si yo tenía algún nickname o seudónimo con el que me conocieran en la red, o si yo era alguien "importante", de esos que colaboran en muchos foros y responden preguntas, o encuentran vulnerabilidades y hacen alarde de ello, etc. La realidad es que no soy nadie importante en la red (al menos eso creo), sólo alguien que gusta de compartir cosas que sabe (algunas sencillas, otras no tanto), o cosas que considera que podrían interesarle a alguien. Y respecto a encontrar vulnerabilidades, sí he encontrado algunas de vez en cuando, y el código de ética de CEH me obliga a no divulgarlas, sino a reportarlas directamente a los responsables de los sitios para que las solucionen, con mi valor agregado: la recomendación de solución. Eso sí me gusta. Ahorita, por ejemplo, estoy haciendo un white hat hacking que una empresa me pidió hacer para ella misma (y mis planes de fin de semana largo se fueron por la borda). Si no fuera por estas pausas que me doy para escribir de vez en cuando, ya hace rato me hubiera ido a dormir.

Para los que tengan curiosidad, en todas mis entradas de mis blogs firmo como Knaverit, aunque no es nada parecido a los seudónimos que usan los hackers o los crackers. Mi seudónimo se remonta a hace muchos años, cuando dibujaba, y es el nombre que le puse al personaje principal de una historieta que nunca vio la luz, mas que de mi lámpara de mi mesa de dibujo. Mis personajes están por ahí en algún lugar entre mis viejos libros, pero Knaverit siempre fue mi favorito, así que esa es la razón por la que firmo así. De hecho si buscan "knaverit" en Google (o sea, si "googlean" :-D) seguramente me van a encontrar a mi (quiero decir, a mis blogs), y también descubrirán que hace tiempo compré unos limpiadores para la pantalla de mi laptop (no me gusta que pongan los dedos en la pantalla), y alguna referencia a un sitio donde próximamente estaré subiendo mis podcasts: así es, dentro de poco comenzaré a subir algunos de mis entradas de los blogs que escribí en 2007, en formato MP3, leídos por el de la voz (o sea por mi, para que me entiendan). Aún no sé si esta forma de comunicar lo que escribo sea de interés para alguien, pero voy a probar. Incluso se me ocurren dos o tres ideas para aprovechar el podcasting... luego les platico.

Sólo una nota aclaratoria, en caso de que ISC2 me investigue ahora que soy candidato a CISSP: No pertenezco a ninguna agrupación de hacking ni oculto mi identidad con otro nombre; sólo me gusta cómo se oye y, como escritor novel me puedo permitir tener algún seudónimo, ¿no?, . :-D

Así que ya lo saben, me llamo Romeo (para los cuates), pero también soy conocido (aka=also known as) como Knaverit... KnaverIT (léase con la pronunciación conocida de: "my name is Bond, James Bond"). :-D

:wq!

jueves, 13 de diciembre de 2007

La imperiosa necesidad de la confidencialidad

Hace varias semanas atrás terminé de leer el libro "Criptonomicón", de Stephenson. Uno de los grandes temas abordados en él fue sin duda el de la confidencialidad. La necesidad que tienen no sólo los individuos sino también las organizaciones de mantener en secreto su información crucial es lo que ha permitido la evolución de los criptosistemas y otros mecanismos que garanticen -si es que puede existir alguna garantía- que esa información no será conocida por ningún otro que no sea aquél a quien va dirigida.

Sin embargo el derecho a la confidencialidad se ha encontrado en controversia al ser confrontado con la obligación de los gobiernos de garantizar la seguridad. Mucho se ha dicho acerca de las diferentes maneras que tienen los gobiernos de conocer y controlar el flujo de la información. Por ejemplo, pocos han oído acerca de Carnivore*, la herramienta de software usada hasta hace algunos años por el FBI de los Estados Unidos para analizar (con la orden judicial correspondiente) el tráfico de correo electrónico que pasa por un proveedor de servicios de Internet (ISP) y que permite leer los encabezados de los mensajes de correo electrónico en busca de indicios de alguna conspiración o hecho ilegal (cuando digo "hasta hace algunos años" no quiero decir que ya no lo hace, sino que ha optado por otras alternativas de software que logran el mismo fin). Por otra parte, también muy pocos han escuchado acerca de las posibilidades de codificación de mensajes usando, por ejemplo, PGP (Pretty Good Privacy, Privacidad Bastante Buena), que es un programa utilizado para autentificar (estar seguros de que una persona que envía un mensaje es realmente quien dice ser) y, especialmente, dar privacidad por medio de la criptografía ("esconder" un mensaje para que, en caso de ser interceptado o leído por un tercero, no pueda ser entendido) no sólo en transmisiones en vivo (como lo haría un protocolo como SSL, por ejemplo) sino aún en datos almacenados en algún medio. Sin duda, un juego de gato y ratón en el que prevalece el más astuto o, en ocasiones, el más persistente.

La pregunta es, ¿hasta dónde es importante la confidencialidad? Por supuesto que a ninguno le agrada la idea de que alguien más conozca la información que uno considera privada. ¿Cuántos casos no sabemos de gente que ha leído el correo electrónico de otra persona sin su consentimiento, o ha averiguado cuánto dinero gana consiguiendo acceso a algún reporte de estado de cuenta bancario del afectado? Los gobiernos de algunos países consienten la idea de intervenir en las conversaciones (telefónicas o de correo electrónico, por ejemplo) con la justificante de prevenir algún delito. La respuesta, por supuesto, no es trivial. Sin embargo, es innegable el hecho de que todos tenemos derecho a conservar en secreto aquello que consideramos que no deba ser conocido por los demás pues nos haría vulnerables, a menos que ese secreto ponga en riesgo la vida o la integridad de los demás, en cuyo caso deberíamos ser capaces de descifrar dichos mensajes a tiempo y tomar acciones en consecuencia.

La frontera entre ocultar y conocer es muy sutil, y la legislación muy pobre, pero en mi humilde opinión (IMHO) todo este asunto de conocer o no conocer la información ajena, o de ocultar o no nuestra información se debe resumir en una palabra: respeto.

:wq!

* El enlace original a Carnivore ya no existe en el sitio del FBI, por eso incluí la referencia de archive.org, donde es posible encontrar versiones antiguas de páginas web.

jueves, 22 de noviembre de 2007

¡Felices 100000 años!

Pues llegó el día.

Hoy es mi cumpleaños número 100000 en binario (oigan, en hexadecimal es mucho más atractivo: 0x20). Generalmente no soy muy dado a considerar mi cumpleaños como una fecha muy importante (aunque definitivamente lo es), pero en esta ocasión y por tratarse de un número significativo, estoy haciendo una excepción (¿o debo decir "lanzando una excepción"?, throw new java.lang.Exception();... no, porque una excepción es una condición inesperada en un programa, y en mi caso este cumpleaños sí lo estaba esperando).

Y no es sólo porque 32 sea la cantidad de bits que forman una dirección IPv4, o porque 32 es el código ASCII del carácter espacio, o el tamaño que generalmente reservan en memoria las variables de tipo entero en un programa, o la quinta potencia de dos (2^5), o el punto de congelación del agua (en grados Fahrenheit) al nivel del mar, o porque 32 son las piezas que hay al iniciar un juego de ajedrez, o mejor aún, porque en matemáticas el 32 es el noveno número feliz o el tercer número de Leyland... no, no sólo es por eso, también es porque he dado 32 vueltas alrededor del sol.

Realmente no tengo un comentario tan profundo el día de hoy, sólo quería compartir con ustedes este momento; disculpen tanta simpleza, pero no todos los días se cumplen 100000 años. ;-)

:wq!

viernes, 12 de octubre de 2007

define:googlear

Es increíble como pasa el tiempo. Aún recuerdo cuando era "más joven" y asistía regularmente a las bibliotecas. Cuando era niño me gustaba pasar a la biblioteca cuando salía de la escuela, aunque llegara tarde a la casa. La gente que me conoce sabe que me gusta mucho leer, y leo prácticamente cualquier cosa, siempre y cuando valga la pena. Mi gusto por la lectura es algo así como una necesidad primaria para mi espíritu curioso, y vaya que si algo me disgusta es no saber algo o quedarme con la duda.

Pero muchas cosas han cambiado. Con la entrada de Internet a nuestras vidas, cada vez menos gente acude a las bibliotecas, especialmente desde que se inventaron los motores de búsqueda de WWW (hay otros tipos de buscadores, como Gopher, Archie o Veronica, pero sin duda los más conocidos son los de WWW).

Les puedo asegurar que en la actualidad la gran mayoría de la gente que frecuenta Internet depende de algún buscador. Tengo una hermana que se sorprende de cómo encuentro tan rápido prácticamente cualquier cosa en Internet (esta va para ti, Juli). En particular, yo utilizo Google (por cierto, dicen que es uno de los mejores lugares para trabajar, y no lo dudo), y en esta ocasión quiero compartirles algunos trucos o hacks de Google para que sus búsquedas en WWW sean más provechosas. Por cierto, ¿alguien llegó aquí por una búsqueda en Google? Sería interesante saberlo.

Lo más sencillo de esto es la clásica búsqueda que todo mundo hace, por ejemplo, buscar la palabra Knaverit (que es el seudónimo que uso, por si no lo han notado) encontrará algunas de mis entradas en mis blogs, o la palabra héroes nos traerá, sin duda, enlaces a sitios dedicados a la ya popular serie de televisión (que, por cierto, es de mis favoritas). ¿Pero qué tal si lo que estás buscando algo sobre los héroes en la historia y no quieres ver las páginas de la serie? Bastaría con usar héroes -serie para que, gracias al signo "menos" (-) se excluyan las páginas que contengan la palabra "serie". Claro que es mucho más fácil especificar a qué héroes estás buscando, como héroes grecia o héroes desconocidos, pero ¿y si lo que quieres es realmente comprar el DVD, pero que cueste entre $45 y $50 dólares? (porque con eso de que algunos dicen que si no es caro, no vale la pena) pues muy fácil: usa DVD héroes $45..$50 (los ".." indican un rango de valores), o haz la prueba con algún precio más barato, qué tal entre 10 y 20 dólares... por ahí hubiéramos comenzado, ¿no?.

Para aquellos que desean refinar sus métodos de búsqueda un poco más, les tengo otras sugerencias: ¿necesitas saber qué es un "encabezado"? Puedes usar define:encabezado, y te mostrará las páginas que definen esa palabra; o define:buscador para saber que un buscador es un sitio Web que te ayuda a encontrar otros sitios (o define:googlear, para saber qué quise decir con el título de esta entrada). Por cierto, ¿y si lo que quiero es buscar algo en un solo sitio? (es decir, limitar la búsqueda) Ya ven que a veces esto de buscar se vuelve una tarea titánica, pero es muy fácil con la etiqueta site:, por ejemplo: redes site:romeosanchez-0xCAFE.blogspot.com te mostrará lo que he escrito sobre redes en este weblog, o criptonomicon site:www.gandhi.com.mx te llevará a las opciones de compra del libro que recomendé hace poco, en una conocida librería de México, o incluso algo como blog site:www.eluniversal.com.mx te mostraría las noticias de un periódico referentes al tema "blog", o cualquier otro que se te ocurra.

Muy poca gente sabe que en Google se pueden hacer cosas como las que voy a contar a continuación; por ejemplo, que se puede usar como una calculadora: así, una expresión como 12 * 22 o 15% of 67 pondría el resultado de esa operación aritmética; o si alguien tiene la duda de qué valor en decimal es mi famoso 0xCAFE hexadecimal, puede buscar 0xCAFE to decimal y verá el resultado. Incluso pueden convertir entre unidades, como 100 USD in pesos. Todo eso es chido.

Hay muchos ejemplos más, pero para no cansarlos me limitaré a unos pocos, por ejemplo: related:www.hispasec.com mostraría sitios relacionados con seguridad, o related:www.google.com daría la lista de otros buscadores relacionados (en el sentido funcional) con Google.

Ya por último, debo recordarles que algo como ~poesia buscaría sitios no sólo con la palabra poesía, sino también con sus sinónimos (por ejemplo, literatura), o "Romeo y Julieta" (así, entre comillas) haría una búsqueda exacta del contenido entre comillas, pero... esperen.... esta última búsqueda trae resultados que no me interesan, así que la refinaré un poco: "Romeo y Julieta" -cigars ; sí, así es mucho mejor, porque yo no fumo :-D. También una búsqueda de tipo el * camino (con un asterisco, *) me encontraría sitios con contenidos como el mismo camino, el único camino, el buen camino, el largo camino, etc., porque el asterisco (*) representa cualquier cantidad de palabras, en este caso, entre la preposición "el" y el sustantivo "camino". En fin, es cuestión de experimentar. Se queda de tarea.

Así que ya lo saben. No es ningún secreto. Los motores de búsqueda en Internet son una herramienta indispensable en la actualidad, pero no hay que creerse todo lo que está en Internet, pues no todo es cierto. Pienso que ningún buscador reemplaza la escencia de la consulta bibliográfica y el olor a hojas de libro, pero sí hace mucho más fácil el suplir una necesidad básica del hombre: salir de la duda.

:wq!

miércoles, 10 de octubre de 2007

Entre Objetos, Java, C# y... ¿Sinclair BASIC?

Hace algunos días fui requerido para ir a dar un seminario acerca de cómo desarrollar aplicaciones para Windows en .NET, usando C#. No había tenido oportunidad de usar VisualStudio 2005, pues el último que había usado era el 2003, y me llevé la grata sorpresa de que tiene algunas ventajas con respecto a la versión anterior (ya sé, ya está la nueva versión 2008 en Beta, pero no la he visto, lo siento). Me dediqué unos días a revisar la versión 2005 y debo decir que sí me quedé con buena impresión del IDE.

Durante la presentación les expliqué a los asistentes, a través de una demostración, la manera de desarrollar rápidamente una aplicación sencilla con acceso a datos, con muy poco código qué programar. Es increíble cómo muchas de las cosas que anteriormente nos llevaba horas desarrollar, ahora con las herramientas adecuadas se pueden hacer en cuestión de minutos (ya lo dije anteriormente cuando hablé acerca de NetBeans 5.5). Claro está que nada reemplaza la satisfacción de hacer un programa "desde cero", pero hay proyectos en los que el tiempo apremia (pensándolo bien, en todos los proyectos el tiempo apremia). Todos los asistentes (al menos la mayoría, creo yo) quedaron asombrados de la facilidad de uso del IDE y de cómo en pocos minutos ya teníamos la aplicación terminada (me extendí un poco porque, como ustedes imaginarán, me gusta hablar demasiado).

Días después me llamaron para que diera una clase sobre Programación Orientada a Objetos (OOP) para un grupo de estudiantes de un curso de Java. En la lección expliqué acerca de la relevancia de los lenguajes orientados a objetos (como Java, C++ y C#) y cómo es que el paradigma de orientación a objetos nos ayuda a escribir código mucho más legible, reutilizable y relativamente rápido. Hice un recuento breve acerca de la evolución de los paradigmas de programación y cómo en la actualidad los sistemas emplean el máximo poder de cómputo para lograr cosas cada vez más poderosas. Todos se mostraron interesados, en particular porque algunos nunca habían escuchado (o entendido) acerca de términos como encapsulamiento, herencia y polimorfismo. Fue una mañana muy interesante.

En ambas charlas concluimos lo siguiente: los sistemas actuales cada vez demandan desarrollos de software más robustos en el menor tiempo posible. Tanto Sun Microsystems como Microsoft Microsoft están dando batalla para lograr que los desarrolladores tengan cada vez mejores herramientas que les permitan tener más tiempo libre ;-) (¿por qué no tenía algo así antes?). Lo importante ahora es no depender tanto del uso de las herramientas, y seguir cultivando las mejores prácticas de programación, que corren el riesgo de ser olvidadas por quienes abusan del uso de IDEs o de ser completamente ignoradas o desconocidas.

Creo que independientemente de las tecnologías que pueda llegar a conocer, en el fondo siempre seré un desarrollador de software. Me gusta programar y creo que no lo hago tan mal ;-). Habrá que ver qué es lo que sigue para las siguientes generaciones de herramientas de desarrollo de software.

Como punto final, en la clase de OOP uno de los alumnos confesó haber comenzado a programar con una Timex Sinclair 1000, igual que con la que comencé a programar (esto es demasiado curioso, puesto que no mucha gente que yo conozca usó ese modelo en particular). Es que haciendo un poco más de memoria (cosa difícil para mi), realmente antes de GWBASIC usé el Sinclair BASIC. Para los que estén un poco interesados en la "prehistoria" y quieran saber qué usaba (yo) para programar hace 20 años, en este enlace encontrarán un emulador de Timex Sinclair 1000 hecho en Java.

:wq!

lunes, 24 de septiembre de 2007

Criptoanálisis de sobremesa

Esta tarde me ocurrió algo extraño durante mi tiempo de comida. Últimamente he estado leyendo el libro de Neal Stephenson, "Criptonomicón" (en español se publicó en tres tomos, y estoy por terminar el tercero). Debido a que no dispongo por lo general de mucho tiempo libre, aprovecho mi tiempo de comida para leer un poco (después de comer, por supuesto). Como decía, hoy estaba en un conocido restaurante de hamburguesas y me puse a leer mi libro, justamente en la parte cuando Lawrence Waterhouse estaba rompiendo un código nipón con ayuda del computador que él había inventado, cuando una persona que estaba sentada como a cuatro mesas de mi (perdón, no es que esté inventando una nueva unidad de medida, quise decir a algo así como a 10 metros) me gritó desde su lugar (gritó, porque a esa distancia no podía haberle escuchado de otra manera) y me dijo: "¡oye, te felicito!, ¡ya casi no hay gente que traiga consigo libros y los lea!"; a lo que yo respondí (también gritando): "¡gracias!, ¡siempre procuro hacerlo!". Imagino que en este momento alguien podría estar diciendo que qué tiene que ver este comentario con el weblog. Lo que sucede es que esta persona me preguntó que qué leía. Yo sólo le mostré la portada del libro y dijo: "ah, es sobre criptografía, de los rompedores de código de la Segunda Guerra Mundial". Me sorprendió justamente que una persona x (en el sentido algebraico de identidad desconocida, no peyorativo) conozca sobre el contenido de ese libro, particularmente porque su lectura no es algo tan trivial, pues Stephenson asume cierto conocimiento sobre el tema, aunque en el desarrollo de la historia se ocupa de aclarar muchos puntos e incluso en algunas partes dedica varios párrafos a explicar con detalle algún tema matemático, físico o de cualquier otra índole que requiera una explicación por parte de él (eso es lo que creo que piensa, porque en ocasiones me parece que entra demasiado en ciertos detalles). Volviendo al punto, esta persona y yo "conversamos", él desde su mesa y yo desde la mía, por espacio de unos 5 minutos, acerca de cómo la tecnología que nosotros vemos en la actualidad, en realidad hace tiempo que se ha comenzado a usar (antes de que se "abra al público"). Hablamos de la Guerra Fría, de la Segunda Guerra Mundial, un poco de Internet y hasta de los avances en materia de genética. En fin, una charla interesante y poco ortodoxa, que lamentablemente tuve que interrumpir pues debía volver (yo) a la oficina.

Soy un aficionado al criptoanálisis (y digo aficionado, porque no me dedico a ello de manera profesional, aunque mi trabajo pudiera llegar a requerirlo). En general soy lector asiduo de todo lo que tenga que ver con seguridad de cómputo, cualquiera que sea su faceta: desde el desarrollo de software hasta transmisiones seguras de datos, y no es paranoia. Estoy convencido que la seguridad es lo que regirá el futuro de todo lo que hagamos con los sistemas de cómputo (en realidad no hay que esperar mucho, ya hay bastantes cosas qué ver).

Si les gusta todo el asunto del criptoanálisis, la historia, no tienen problema en leer un libro de 1,500 páginas y tienen un amplio criterio (yo sé por qué se los digo, no se vayan a escandalizar por cierto contenido del libro), les recomiendo leer el "Criptonomicón". Hay muy buenas reseñas acerca del libro, así que no pienso hacer el ridículo dando la mía, tan sólo sepan que estoy enfrascado en su lectura y que espero terminar de leerlo pronto.
Hoy coloqué mi separador en la página donde me quedé, cerré mi libro, me levanté de la mesa, me despedí de mi interlocutor desconocido (x), y me fui pensando en que las cosas que en otro tiempo fueron un misterio, están cada vez más al alcance de las manos de cualquier persona que tenga el valor y el tiempo suficiente para explotarlas.
:wq!