Programación para redes y concurrencia (III)

Luego de que en la entrega anterior complicáramos un poco las cosas introduciendo concurrencia en el servidor, un amigo me hizo notar que quizás sería mejor dar un ejemplo un tanto más «real» de lo que estábamos haciendo.

Es por eso que dejaremos por un rato el camino planificado para jugar un poco explorando las posibilidades con un cliente en PHP (en una especie de «recreo«).

Sigue leyendo «Programación para redes y concurrencia (III)»

Programación para redes y concurrencia (II)

En la entrega anterior abordamos el diseño de un protocolo y la implementación de un servidor secuencial muy simple y un cliente. Haciendo esto, inspeccionamos los conceptos fundamentales de la programación de aplicaciones usando sockets.

En esta segunda parte, desarrollaremos un servidor capaz de recibir conexiones de varios clientes de manera concurrente (en paralelo). Para ello utilizaremos dos técnicas distintas: procesos múltiples e hilos de ejecución (threads).

Nota del 19/11/2006: Ahora puede descargar el tutorial completo.

Sigue leyendo «Programación para redes y concurrencia (II)»

Programación para redes y concurrencia (I)

Este es el inicio de una serie de artículos introductorios sobre programación para redes (usando sockets) y programación concurrente. El objetivo es presentar una serie de conceptos que iremos explorando progresivamente:

  • Programación cliente/servidor usando sockets: Cómo desarrollar programas que se comuniquen a través de la red para realizar distintas tareas.
  • Protocolos de comunicación: Explorar los principios básicos de los protocolos de aplicación (alto nivel) utilizados para intercambiar información.
  • Concurrencia: Cómo construir programas que se ejecuten paralelamente y resolver algunos de los problemas que nos plantea la concurrencia.

Nota del 19/11/2006: Ahora puede descargar el tutorial completo.

Sigue leyendo «Programación para redes y concurrencia (I)»

Libre, gratuito, portable y estándar

Discusiones sobre «estándares», «software libre», «software gratuito», «portabilidad» y cuestiones afines se dan muy a menudo. En la mayoría de ellas puede apreciarse que existen grandes confusiones que involucran a estos términos.

Desde varios ámbitos (por ejemplo, el Proyecto GNU) se insiste hasta el hartazgo en marcar diferencias importantes (como la de «gratuidad» y «libertad«), pero esto no parece suficiente para aclarar el equívoco. Este es el por qué de mi pequeño aporte.

Sigue leyendo «Libre, gratuito, portable y estándar»

TCP/IP es simple

Parece increible, pero la realidad nos muestra que muchos informáticos desconocen totalmente los principios del funcionamiento de Internet y las redes IP en general (aún muchos que trabajan en áreas relacionadas).

En muchos casos, no ayudan ni el pésimo nivel de muchas materias universitarias (algunos analistas son formados sin siquiera una introducción a las redes), ni el afán de ocultar la realidad de muchos libros de texto. No me ocuparé del primer caso (al menos por ahora), pero sí quiero hacer hincapié en el segundo.

Sigue leyendo «TCP/IP es simple»

Programación orientada a objetos

Cuando comencé a explorar la programación orientada a objetos (POO u OOP, en inglés), allá por el año 1994, me ocurrió lo que a muchos. Luego de casi 10 años de programar proceduralmente (en Basic, Pascal y Cobol) me encontraba con una nueva visión. Si bien creía entender los conceptos de clase, objeto, herencia y polimorfismo, no lograba ver claramente la diferencia de enfoque a la hora de diseñar un programa. No podía apreciar realmente cuáles eran las diferencias y las similitudes entre el enfoque procedural y el orientado a objetos.

A través de mi experiencia docente varias veces me vi frente a la tarea de introducir los conceptos básicos de la POO, encontrándome con la misma situación, pero desde un lugar diferente: ¿Cómo explicar el nuevo enfoque a personas acostumbradas a programar de forma procedural? ¿Cómo resaltar las similitudes y las diferencias? Fue gracias a un ejemplo del libro «C++ Annotations» que encontré una forma simple de presentar la idea básica detrás de la programación orientada a objetos.

Sigue leyendo «Programación orientada a objetos»

Proyecto de ley sobre delitos informáticos

En el año 2002 a poco estuvo de aprobarse un ridículo proyecto de ley sobre delitos informáticos, que afortunadamente fue desactivado gracias al accionar de distintos grupos sociales.

Recientemente, se ha elaborado un nuevo proyecto de ley con el objetivo de modificar el código penal argentino para cubrir los delitos realizados mediante herramientas informáticas. Si bien este nuevo proyecto está mejor elaborado que el anterior, existen en él varios puntos que, de no ser modificados, implicarían un peligroso avance contra la libertad en nuestro país.

Sigue leyendo «Proyecto de ley sobre delitos informáticos»

Internet con límites

El slogan publicitario del ISP Fibertel es «Internet sin límites«. Esta frase apareció en el marco de una campaña publicitaria, realizada en el momento en que otros proveedores amenazaron con imponer límites a la cantidad de tráfico de los usuarios.

Como podrá verse a continuación, este slogan es totalmente engañoso, ya que Fibertel sí impone límites a sus clientes/usuarios.

Pues bien, analicemos lo que significa «sin límites» para esta empresa.

Sigue leyendo «Internet con límites»

OpenVPN: estabilidad, economía y simpleza en VPNs

A la hora de montar redes privadas virtuales (VPNs) muchos consultores aconsejan a sus clientes la utilización de hardware específico (dedicado). Tipicamente se instala un router (enrutador) Linksys BEFVP41 (u$s 180) como servidor y routers Linksys BEFSX41 (u$s 120) en cada red a conectar, todo esto utilizando el protocolo IPSec. En caso de querer conectar PCs o Notebooks individuales (por lo general con Windows XP/2000) se suele configurar un tunel IPSec o utilizar el cliente de VPN Microsoft (que utiliza el poco recomendable protocolo PPTP).

Esta solución tiene varios puntos en contra:

Sigue leyendo «OpenVPN: estabilidad, economía y simpleza en VPNs»

Microsoft y la Agencia Nacional de Seguridad de los EE.UU.

Desde el movimiento del software libre siempre se ha alertado que el software privativo, distribuido en forma de código binario cerrado, representa una grave amenaza contra la privacidad de las personas.

La reacción usual de muchos, cuando se les dice que si uno solamente recibe el código binario no puede saber a ciencia cierta qué es lo que hace el programa (y qué es lo que no hace), es de incredulidad. Generalmente se muestran excépticos ante la posibilidad de que una empresa incluya funciones ocultas en los programas cuyo código binario comercializa.

Aunque hay gran cantidad de casos demostrados de prácticas de este tipo (inclusión de Spyware, Rootkits, etc.), ninguno alcanza la magnitud que tendría, de ser cierta, la relación entre Microsoft y la Agencia Nacional de Seguridad de los EE.UU. (NSA).

Sigue leyendo «Microsoft y la Agencia Nacional de Seguridad de los EE.UU.»