Día de la Ciencia y la Tecnología 2015

Día de la Ciencia y la Tecnología 2015

Nota: El texto que continua fue escrito como discurso de apertura de la jornada del día de la ciencia y la tecnología del Colegio Agustiniano Norte del año 2015.

El día de la ciencia y la tecnología es una jornada que nos invita a reflexionar acerca de esa curiosidad que de niños nos llevó a plantear continuamente preguntas acerca del funcionamiento y de la existencia del mundo. La perfección y eficiencia de los mecanismos, los organismos y el funcionamiento de la naturaleza, nos ha llevado a generar el estudio, modificación e innovación en el entorno según las necesidades presentes de la época.

Con el ánimo de satisfacer nuestra curiosidad, hemos contemplado el universo cada noche observando maravillados el cielo, admirando las estrellas que como la nuestra brillan con luz propia; emitiendo energía para el universo, energía sin la cual nuestra vida sería un evento imposible. No menos complejo es aquel conjunto de circuitos eléctricos,  reacciones químicas, redes neuronales, fuentes y depósitos de neurotransmisores que hacen posible que en este mismo instante quien escucha recree ese universo mencionado, mediado y transformado por su propia experiencia, por sus propios recuerdos, pensamientos y vivencias. Pero no sólo las grandes estrellas, constelaciones y galaxias han llamado nuestra atención, también nos hemos dejado maravillar y logrado contemplar lo más pequeño, por aquel vacío descomunal en el interior del átomo, por lo invisible, por lo inaudible, por lo intocable, por esas interacciones que mantienen unido lo que asumimos debía estar separado y que mantienen separado aquello que presumimos debía estar unido, todo con el fin de una armonía equilibrada. Si el electrón se dejara llevar por su naturaleza eléctrica al núcleo, el carbono no hubiese sido estable y si los protones en el interior del núcleo se hubieran repelido mutuamente, todo hubiese sido frío y muy distante.

Pero la curiosidad no quedó satisfecha por la contemplación, intentamos acceder al universo a través de nuestros sentidos, y cuando estos no son suficientes hemos desarrollado instrumentos con los que podemos ver más allá de lo que permiten nuestros ojos, que nos permiten apreciar con plenitud aquello que por la naturaleza de nuestra proceso adaptativo ha sido vetado para nuestros cuerpos. Con todo esto, hemos creado modelos matemáticos y artefactos tecnológicos, con lo que no sólo logramos admirar la belleza de las estrellas, sino realizar viajes a través del tiempo para contemplar su nacimiento, su desarrollo y su posterior deceso. Así, nuestra admiración por el universo es cada vez más profunda: cada nueva idea, cada nuevo medio que resulte predecir el comportamiento natural, sea en términos deterministas, probabilistas o descriptivos nos plantea nuevos retos, nuevas preguntas, y hace que nuestro deseo por la comprensión del mismo sea más evidente.

La Ciencia es nuestra conexión con el mundo, donde las ideas matemáticas más abstractas creadas por el hombre encuentran sus pares en el funcionamiento natural. Nada más independiente del hombre resultó siendo recreado por la imaginación del mismo. Pues la imaginación y la creatividad de muchos hombres y mujeres han sobrepasado cualquier límite impuesto por su naturaleza y por su contexto. Porque el incansable anhelo, amor y pasión por el arte de la investigación pueden más que cualquier obstáculo limitante.

Hoy, dejémonos contagiar de esa curiosidad, de esa mente inocente a la que el más mínimo movimiento, el más tenue destello de luz, la más mínima vibración sonora impresiona, y seamos participes de esto en el amor por lo que nos rodea, en la alegría de nuestra existencia y en el placer inmensurable que genera la comprensión y el entendimiento de esa realidad que está más allá de nosotros y que sin embargo, no existe sin nuestra presencia.

Los invitamos a explorar la dinámica del conocimiento aplicado y que desde este espacio se proyecten nuevos caminos que permitan unir lo que se ha fragmentado con el tiempo.

Posted in Uncategorized | Leave a comment

Deepdream, generando imágenes mediante Redes Neuronales

Imagen generada por Deepdream

Imagen tomada de la galería de DailyMail que muestra la transformacion del Taj Mahal mediante deepdream.

Prólogo

Me gustaría mencionar antes de iniciar que no se requieren conocimientos previos acerca de aprendizaje máquina o inclusive de programación en Python para producir imágenes. Esto se puede utilizar como un tema de introducción para motivar e iniciar el estudio de esta grandiosa y fascinante rama de la tecnología que cada vez tiene un espacio más amplio en nuestra cotidianidad, y que sin duda será parte esencial de ésta en el futuro (si es que ya no lo es). A modo de ejemplo fue producida la imagen que se encuentra a continuación. Tomó un tiempo de aproximadamente 8 minutos en un computador regular sin aceleración gráfica.

Imagen original: Punto de inicio

Imagen antes de ser procesada

Imagen Final: Producto de la Red Neuronal

Imagen generada por Deepdream

Imagen Final: Producto de la Red Neuronal, luego de aproximadamente 12 horas de retroalimentación:

Imagen generada por Deepdream

Introducción

¿Han notado las nuevas estrategias para evitar el SPAM? No hace mucho me encontré con un pequeño recuadro en una página web en el que debía dar click para comprobar que “no era un robot”, esto abrió una ventana donde se me retaba a seleccionar de un conjunto de imágenes que entraban dentro de una clasificación determinada (Seleccione los pasteles, bebidas, pastas) para comprobar que yo no era algún elemento automatizado (por lo menos no uno tan sofisticado) intentando hacer uso del servicio que ofrecía. Éste es un caso donde la inteligencia artificial juega un papel importante, ya que es posible, diseñar algoritmos para entrenar redes neuronales en el reconocimiento y clasificación de imágenes. De tal modo, que será una red neuronal la que decidirá si yo soy o no un “robot” en base a qué tan bien realice la selección. Es decir, un algoritmo computacional decide si soy o no soy humano.

Hace unos días, encontré que google había liberado deepdream un algoritmo que permite procesar una imagen a través de una red neuronal y observar cómo la misma es modificada en base al proceso de entrenamiento que ha tenido la red.

El tema me pareció bastante interesante al leer la descripción que realizaban algunos de sus desarrolladores. Las imágenes producidas por el algoritmo son (desde mi perspectiva) intrigantes. Y más intrigante aún es que, según lo describen los desarrolladores, lo que pasa al interior de la Red Neuronal no es del todo claro. Cuando se trata de programación suelo pensar en algo completamente determinista, en un algoritmo en el que cada paso es conocido y que si se conocen los argumentos se conocerá el valor de retorno (asumiendo que no se usen elementos aleatorios en el interior, elementos que no son del todo aleatorios sino pseudoaletorios, producidos por otros procesos deterministas). Pero esa es una visión incompleta al entrar al terreno de la inteligencia artificial ya que si algo se caracteriza por ser inteligente, es por definición algo que cuenta con la capacidad de adaptación, y esa capacidad no se puede determinar de principio a fin sino a través de procesos de retroalimentación, de ensayo-error, de interacción, de aprendizaje.

Bueno, sin más preámbulos. Manos a la obra:

Instalación

A continuación se describe el proceso de instalación llevado a cabo en Ubuntu 14.04. Para otras distribuciones no todas las dependencias se encuentran en los repositorios y será necesario compilar e instalar algunos paquetes manualmente (paquetes como glog y gflags). Tenga en cuenta que si cuenta con una unidad de procesamiento gráfico (GPU) de Nvidia puede utilizar CUDA, el proceso descrito a continuación es para un equipo que no cuenta necesariamente con CUDA.

Para poder ejecutar deepdream es necesario instalar Caffe. Así que iniciamos con la instalación de tanto de sus dependencias como las de deepdream:

sudo apt-get install \
libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev \
libboost-all-dev libhdf5-serial-dev protobuf-compiler \
libgflags-dev libgoogle-glog-dev liblmdb-dev \
libopenblas-dev python2.7 python-numpy python-scipy \
python-pil python-protobuf python-skimage python-pip

Establecemos un directorio de trabajo:

$ mkdir ~/deepdream
$ cd ~/deepdream/

Descargamos el código de Caffe:

$ wget -c https://github.com/BVLC/caffe/archive/master.zip -O caffe.zip

Desempaquetamos el archivo:

$ unzip caffe.zip
$ mv caffe-master caffe
$ cd caffe

Modificamos el archivo de configuración de la compilación:

$ mv Makefile.config.example Makefile.config
$ nano Makefile.config

Descomentamos la línea 8:

CPU_ONLY := 1

Modificamos la línea 33:

BLAS := open

Y la línea 72:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include

Con lo que se le indica que no se hará uso de CUDA, y que se usarán las librerías de álgebra lineal de OpenBlas que han sido instaladas previamente. Se procede a compilar el código fuente:

$ make -j 4 all

Se compila también las librerías de Caffe para Python, de tal manera que posteriormente se pueda hacer uso de Caffe desde Python:

$ make pycaffe

Se le informa a Python que las librerías compiladas están disponibles:

$ export PYTHONPATH=$HOME/deepdream/caffe/python/:$PYTHONPATH

Si desea configurarlo de manera permanente puede incluir la línea anterior en su ~/.bashrc.

Necesitamos descargar el modelo utilizado para la generación de las imágenes (BVLC GoogLeNet):

$ wget -c http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel \
-O ~/deepdream/caffe/models/bvlc_googlenet

Instalamos ipython con todas las dependencias requeridas para ejecutar notebooks:

pip install "ipython[notebook]"

Descargamos y descomprimimos deepdream en el directorio de trabajo:

$ cd ~/deepdream
$ wget -c https://github.com/google/deepdream/archive/master.zip -O deepdream.zip
$ unzip deepdream.zip
$ mv deepdream-master deepdream
$ cd deepdream

Hacemos que el notebook sea de solo lectura:

$ chmod -w dream.ipynb

Y finalmente, abrimos el notebook de IPython:

$ ipython notebook dream.ipynb

Con lo que se abre una pestaña en el navegador, de aquí en adelante el proceso es bastante intuitivo: se modifican los parámetros como la imagen o la capa cuya salida quiere visualizar, se selecciona el código y se ejecuta de manera secuencial haciendo click en Play.

Epílogo

Luego de la instalación, es posible iniciar con la generación de las imágenes. Como se mencionó anteriormente este es un tema fascinante así que esto es simplemente una excusa para empezar a explorarlo.

Me llamó la atención que el proceso de retroalimentación consiste, al parecer, en la creación y profundización de los detalles de las formas previamente “inventadas” (¿Vemos sólo lo que nos es familiar y cotidiano, lo que se nos ha enseñado desde siempre?). El producto de la red neuronal es consecuencia del entrenamiento, si el algoritmo se ha entrenado para reconocer edificios, rostros, o autos, es bastante probable que dejemos de ver perros, pájaros y caracoles en las imágenes “creadas” por estas redes neuronales.

Leave a comment

Cifrando las comunicaciones en Facebook usando Pidgin

Cifrando las comunicaciones en Facebook usando Pidgin

Edición 27/Jul/2015:

Debido a la modificación de la API de Facebook, ya no es posible conectarse utilizando clientes diferentes al distribuido por Facebook, Pidgin en particular. Más Información. No obstante el método descrito a continuación se puede aplicar para cifrar las comunicaciones en otros servicios como lo es Google Talk.

Introducción

Las comunicaciones privadas tienen lugar cada vez más en “lugares” públicos. Una conversación entre dos personas tiene la privacidad asegurada en tanto las dos acuerden mantener la información que comparten reservada. No obstante, este tipo de conversaciones se han transladado a internet, donde la información que se comparte no sólo estará en manos de las personas que quieren y desean compartirla, sino que quedará registrada en una base de datos de una empresa cuyas políticas de privacidad son en el mejor de los casos deplorables, las agencias de seguridad estatales, y alguno que otro contratista.

Una de las formas de retomar nuevamente el tipo de privacidad que se tenía en las conversaciones cotidianas es a través de la criptografía. Existen diferentes protocolos con sus ventajas y desventajas. En esta entrada veremos cómo utilizar Pidgin (un software de mensajería instantánea) con el plugin pidgin-otr para cifrar las comunicaciones. Es necesario, decir de antemano, que para que la comunicación sea cifrada las dos personas deben contar con un cliente configurado para usar el protocolo Off-the-record que será descrito más adelante.

El protocolo utilizado es Off-The-Record (OTR) que mantiene ciertas ventajas frente a otros protocolos como: la generación continua de claves de cifrado, lo que implica que no siempre estaremos utilizando la misma clave para cifrar. En caso de que alguien logre romper una clave ésta le servirá sólo para obtener el texto parcial de la conversación, no el texto total. Ofrece mecanismos para corroborar la identidad con la persona que se está comunicando, pero al mismo tiempo, la implementación del protocolo permite negar posteriormente la autenticidad de los mensajes. Puede leer una descripción detallada (e inspiradora) del protocolo aquí.

Manos a la obra

Si usa un sistema operativo windows puede descargar los binarios de pidgin y el complemento (Seleccione Win32 Installer for Pidgin 2.x), las indicaciones para configurar son similares en ambos sistemas. En GNU/Linux se instalan los paquetes:

$ sudo aptitude install pidgin pidgin-otr

Se ejecuta pidgin:

$ pidgin &

Se añade una cuenta teniendo en cuenta la siguiente configuración:

Seleccione el protocolo Facebook (XMPP). El nombre de usuario es aquel que usted ha seleccionado, visite https://www.facebook.com/me e inicie sesión. Si usted no ha seleccionado nombre de usuario será el valor de la variable id en la URL que ha visitado, por lo general un número de 15 cifras. Si usted ya seleccionó el nombre de usuario será el que sale en la URL: facebook.com/MiNombreDeUsuario. El dominio al cual se conectará es chat.facebook.com y la contraseña es la misma que utiliza para acceder a facebook a través de su navegador. En recurso no es necesario ingresar nada.

Una vez ingresamos a pidgin, habilitamos el uso del plugin “Off-the-record messaging”, a través del menú Tools/Plugins (“Herramientas/Complementos”), abrimos la configuración del plugin (doble click) y en la sección Config/My private keys, generamos la clave para la cuenta (este proceso demora un poco). Observamos las demás opciones de configuración y establecemos la mejor según nuestro criterio. Tenga en cuenta que no es muy útil que se cifren las comunicaciones si permanecerán registros no cifrados en su computadora.

Finalmente, cuando iniciemos una nueva conversación y tenemos la certeza que el destinatario usa el plugin habilitamos la conversación privada mediante el menú de la ventana de la conversación en el menú OTR/Start a private conversation. Una vez se inice la coversación podrá verificar la identidad del destinatario, para lo cual se necesita acceso a información privilegiada que solo las dos personas conozcan y mediante una pregunta de seguridad, opción Unverified/Authenticate Buddy. Existen otras opciones, esto fue apenas una introducción.

Epílogo

Como se observó, gracias al desarrollo de aplicaciones como pidgin y la implementación de protocolos como OTR, el usuario puede hacer uso de tecnologías avanzadas de cifrado con apenas unos cuantos clicks.

Es importante masificar el uso de la criptografía, ésta es un legado matemático y científico que todas las personas pueden usar para mantener el control sobre su información, sobre su vida privada, sobre su conocimiento, sobre los secretos que se comparten en una relación cualquiera sea su naturaleza. La próxima vez que inicie una conversación en facebook tenga en cuenta que al hablarle a un destinatario utiliza un altavos y una grabadora de una empresa cuyo principal activo es la información generada por sus usuarios.

Aunque se explicó el procedimiento para agregar una cuenta de facebook, pudo notar que existen varias opciones, como agregar la cuenta de Google Talk -ahora Google Hangouts-.

Leave a comment

Administrador una toalla por favor, sudo con tantos comandos

Administrador una toalla por favor, sudo con tantos comandos

Por: Fabián Torres.

Sudo (contracción de las palabras en inglés substitute user do) es un programa para consola o línea de ordenes, en sistemas operativos tipo *nix, que permite a un usuario registrado en el sistema ejecutar ordenes como si fuera otro usuario, aunque generalmente es al llamado root. Se ubica generalmente en /usr/bin, directorio donde se encuentran los binarios ejecutables más importantes del sistema y su archivo de configuración en /etc/suoders.

La primera versión data de los años 80, y algunas fuentes le rastrean su origen en la universidad estatal de Nueva York. Actualmente el encargado junto con otros colegas de su desarrollo y mantenimiento es Todd C. Miller del grupo OpenBSD.

Debido al las directivas de seguridad de los sistemas *nix, el inicio de sesión en una estación de trabajo o un servidor dedicado, debe darse a un usuario registrado y distinto a root, salvo contados casos, en donde este usuario ya se le han dado privilegios al mismo nivel que root pero no siendo él y probablemente con algunas limitaciones o menor poder que éste. También, algunas distribuciones vivas (distros live) para auditoría de redes por ejemplo, por defecto su usuario activo al finalizar el proceso de arranque es un root, y esto es así porque por su naturaleza auditora, gran parte de los comandos y aplicaciones sólo pueden ser accedidos por un usuario administrador o éstos hacen uso de dispositivos virtuales o de hardware de un modo especial de ejecución, que solo es accesible o manipulable por un root.

Generalmente, gran parte de los programas tienen un único objetivo, o un grupo de objetivos que apuntan a un mismo fin, a realizar ciertas funciones con alcance limitado a un contexto, o a pasar el control a otros programas con diversos fines, estos programas digamos «legítimos» deben ser llamados por un usuario humano, o uno del sistema (en otra entrada hablaremos de esto), con cierto alcance de ejecución. Es decir, como norma cualquier binario ejecutable trabaja sobre otro archivo, pej un documento, un archivo de configuración, o un dispositivo físico de hardware (que es tratado como si fuese un archivo), al que solo se es accesible si se tienen ciertos permisos, para tocarlo o mirarlo, leerlo, escribirlo y/o ejecutarlo. Esos permisos se dan de acuerdo a la función del usuario (humano o virtual), por lo que no todos los programas (algunos comandos especiales pudiéramos tratarlos también como ejecutables) son accesibles a todos los usuarios, dadas las directivas propias del SO, o de las asignadas por el administrador del sistema, existirán por ejemplo usuarios con «súper poderes» para tocar cualquier parte del sistema, y otros usuarios supremamente mutilados.

Aveces nos encontramos en situaciones en que es necesario ejecutar un comando, o programa, o un conjunto limitado de ellos, y hasta el conjunto completo de todas la aplicaciones y comandos disponibles en el equipo que pudiéramos llamar «ilegítimos», y que sólo le es permitido a otro usuario o usuarios de mayor jerarquía, y para ello existe «sudo».

NOTA: para comenzar debemos convertirnos temporalmente en root o usuario administrador con máximo poder destructivo y creador, debemos recordar que al momento de instalación se ha creado un usuario especial con estas características, el propio dueño del equipo lo sabrá o el administrador de la red, o sala de sistemas u oficina.

SU

su también es una es una utilidad propia de los sistemas *nix para el terminal o interprete de comandos, que nos permite sustituir nuestra identidad por la del usuario root o administrador momentáneamente y únicamente en la terminal desde donde fue ejecutado. Este será el contexto para root en el cual todos los comandos y programas lanzados serán ejecutados por el súper usuario y registrados en su propia bitácora o log.

lanzamos un emulador de terminal y escribimos y ejecutamos:

=-------------------------------------------------------=
= usuario@equipo:~$ su                                  =
= Contraseña:                                           =
=                                                       =
=                                                       =
=                                                       =
=-------------------------------------------------------=

Para suplantar a otro usuario y lanzar un solo comando escribimos:

=-------------------------------------------------------=
= usuario@equipo:~$ su usuario2 -c comando              =
= Contraseña:                                           =
=                                                       =
=                                                       =
=                                                       =
=-------------------------------------------------------=

y la clave de aquel.

Sin darle ninguna opción suplantaríamos directamente al root, y entraríamos también directamente a su shell (en una próxima entrada escribiremos sobre la shell).

Nos pide la contraseña de root, la escribimos, y aunque no la vemos aparecer podemos estar seguros que se va introduciendo símbolo por símbolo.

En este momento ya tenemos súper-poderes y el prompt cambiara de símbolo de dólar $ a almohadilla # y se ubicará en el directorio base del usuario que lo ejecutó, cuando se lanza desde una terminal nueva, o se ubica en el directorio actual desde donde se esté trabajando.

=-------------------------------------------------------=
= root@equipo:/home/usuario#                            =
=                                                       =
=                                                       =
=                                                       =
=-------------------------------------------------------=

A continuación vamos por la utilidad objeto de éste artículo, llamada visudo, que en pocas palabras activa la substitución de usuario, crea el archivo de configuración, y abre un editor de textos, que si no se a definido otro abrirá el editor nano para editar dicho archivo.

=-------------------------------------------------------=
= root@equipo:/home/usuario#visudo                      =
=                                                       =
=                                                       =
=                                                       =
=-------------------------------------------------------=

Editamos el archivo, de acuerdo a nuestras necesidades. Por ejemplo vamos a pensar en estas tres posibilidades:

  1. Que se pida una contraseña cada vez que ejecutamos un comando restringido como super usuario (la clave será la del usuario que hizo la petición)
  2. Que NO se pida nunca una contraseña cada vez que ejecutamos un comando restringido como super usuario.
  3. Que sólo pueda ejecutarse un único comando como super usuario, pero que no se pida la clave.
  4. Otras alternativas que de seguro se le ocurran.

Estas acciones se denominan, “añadir usuarios al sudo”, Recuerde que puede tomar un solo caso por cada usuario registrado en su equipo.

Procedimiento

Caso 1:

Que NO se pida nunca una contraseña cada vez que ejecutamos un comando restringido como super usuario.
Añadir al final del archivo sudoers lo siguiente:

nombre_usuario ALL=(ALL): ALL

Caso 2

Que se pida una contraseña cada vez que ejecutamos un comando restringido como super usuario (la clave será la del usuario que hizo la petición). Añadir al final del archivo sudoers lo siguiente:

nombre_usuario ALL=NOPASSWD: ALL

Caso 3:

Que sólo pueda ejecutarse un único comando como super usuario, pero que no se pida la clave. Añadir al final del archivo sudoers lo siguiente:

nombre_usuario ALL=(ROOT)NOPASSWD: /ruta_binario/programa

Para el caso del editor nano, usamos la combianción de teclas control+o, para guardar, y luego cotrol+x, para salir del editor.

Y luego para renunciar a ser super usuario en el contexto actual (es decir el terminal actual desde donde se hizo la llamada a su), damos el comando exit:

=-------------------------------------------------------=
= root@equipo:/home/usuario#exit                        =
= exit                                                  =
= usuario@equipo:~$                                     =
=                                                       =
=                                                       =
=-------------------------------------------------------=

Desde ahora, de acuerdo al caso elegido, con solo teclear en un terminal “sudo” y el “comando” o aplicación deseada pero restringida, será ejecutado como si fuese un usuario root o administrador, pero no quedará en la bitacora de root, y sí en la del usuario que hizo la petición de super usuario.

Por ejemplo, si queremos revisar la tabla de particiones, de los discos duros actualmente instalados: (y nos pide clave para sudo)

=-------------------------------------------------------=
= usuario@equipo:~$ sudo fdisk -l                       =
= [sudo] pasword for usuario                            =
=                                                       =
=                                                       =
=                                                       =
=-------------------------------------------------------=

O cuando una aplicación que nos resulte útil y solo puede ser ejecutada por el administrador, (y por comodidad preferimos que no nos pregunte la clave)

=-------------------------------------------------------=
= usuario@equipo:~$ sudo truecrypt                      =
=                                                       =
=                                                       =
=                                                       =
=                                                       =
=-------------------------------------------------------=

Nota 1: Algunos programas de gestión del sistema, administrativos, o de configuraciones varias, y que requieran de interfaz gráfica o terminal X, no pueden ser ejecutadas desde un emulador de terminal mediante una suplantación de root cuando se ha llamado mediante el comando su, para ello se han implementado herramientas con ese propósito. Por ejemplo, synaptic para sistemas (basados en debian). La llamada a dicha aplicación nos mostrará una caja de dialogo (tambien es probable nos muestre un emulador de terminal) preguntándonos por la clave del administrador, que por ejemplo pudiera ser un usuario común pero con privilegios (en algunas distros como Ubuntu) , o un usuario root puro (en otras distros como debian).

Nota 2: Algunas distribuciones linux com es el caso de Ubuntu, Trisquel etc, el usuario root puro está desactivado, y la gestión y administración pudieran hacerse mediante sudoers.

Leave a comment

ROOT’s Basics II: ¿Qué son los archivos .root y cómo crear uno?

ROOT’s Basics II: ¿Qué son los archivos .root y cómo crear uno?

Ya hemos instalado ROOT, Ahora ¿Qué es un archivo .root? *.root es un formato (tipo de archivo) diseñado por el CERN para almacenar y tener acceso de manera eficiente a datos (objetos de C++). Este archivo ha sido estructurado a modo de sistema de archivos, es decir, dentro del mismo se pueden encontrar directorios, subdirectorios y objetos.

Crearemos un archivo e iremos entendiendo la función de lo que hacemos a medida que vamos trabajando en ello.

Inicialmente, creamos un archivo .root que es una instancia de la clase TFile:

root[] TFile *MyFirstFile = new TFile("MyFirstFile.root","NEW");

Mediante lo cual creamos la instancia MyFirstFile de la clase TFile. El primer argumento del constructor "MyFirstFile.root" indica el nombre del archivo, mientras que el segundo ("NEW") le da la instrucción a root de crear el archivo, el cual quedará ubicado en el directorio de trabajo. Otras opciones para el segundo argumento es "READ", lo cual abrira el archivo .root indicado en el primer argumento en modo lectura (útil cuando nos han dado un .root y no tenemos ni ídea qué hacer con el), o "UPDATE" para abrir un .root existente para modificarlo.

Verificamos que el archivo se haya creado de manera correcta:

root[] cout << MyFirstFile->IsOpen() << endl ;

IsOpen() es un método binario que devolverá 1 (true, que en ROOT es kTRUE) si el archivo se encuentra disponible para el uso en ROOT o 0 (false, que en ROOT es kFALSE) si el archivo no está disponible. Alguién podría preguntar "¿y acaso podía fallar?", la respuesta es SÍ, hubiese podido fallar, por ejemplo si el directorio de trabajo no hubiese tenido permisos de escritura para el usuario. Aunque parezca una verificación algo "ingenua", es necesario recordar que siempre que se está diseñando y escribiendo Software, es indispensable que usted como "escritor" imagine la peor situación en la que se puede encontrar un usuario del mismo. Lo ideal es hacer un Software a prueba de tontos (no es fácil, y en la mayoría de los casos no se logra). Así, será necesario adecuar éste método en un condicional para que el Software (o script o macro -como se llama en ROOT a los scripts-) sepa qué hacer en caso de que se presente un error.

Vamos a crear un directorio, ¿cómo?, ROOT es hijo de GNU/Linux, así que:

root[] MyFirstFile->mkdir("TestFolder");

¿Cuál será el nombre del directorio creado?. Ingresamos al directorio:

root[] MyFirstFile->cd("TestFolder");

La cuestión es que ahora tenemos un archivo, una carpeta, pero no sabemos qué guardar en ella. Pero, recordemos que comenzando esta entrada, comentamos que podíamos almacenar objetos de C++. Así que creemos un objeto para almacenarlo ¿Qué tal un histograma?:

root[] TH1I *FirstHistogram = new TH1I("FirstHistogram","My First Saved Histogram",5,0,50) ;

Con lo que se creó un histograma de tipo entero (TH1I), cuyo título será "My First Saved Histogram", que tendrá 5 cajas "bins", cuyo límite inferior será 0 y cuyo límite superior será 50. Con tales límites parece que será un histograma que contiene notas de resultados de exámenes:

root[] Int_t Data[]=
{47,47,43,45,45,45,33,43,45,45,37,45,45,42,42,43,42,42,42,42,43,40,42,43,30,42,40,40,38,40,28,40,38,35,27};

Así, hemos definido un Array llamado Data que contiene un ejemplo típico del conjunto de notas obtenidas en los exámenes de física de un profesor promedio.

Mediante un ciclo rellenamos el histograma con cada uno de los datos del Array:

root[] for(Int_t i = 0; i < sizeof(Data)/sizeof(Data[1]); i++){ root[] FirstHistogram->Fill(Data[i]);
root[] }

Donde la expresión sizeof(data)/sizeof(data[1]) es una forma de obtener el número de datos que contiene el Array. Graficamos el histograma (porque siempre que esas horribles líneas de código generan una gráfica hay cierto tipo de motivación):

root[] FirstHistogram->Draw("*H")

Finalmente, guardamos nuestro histograma en el archivo .root que habíamos creado, y lo cerramos:

root[] MyFirstFile->Write()
root[] MyFirstFile->Close()

Bueno, ahora ¿Cómo sabemos (aparte del acto de fé) que el histograma ha sido guardado en el archivo?. Ejecutamos ROOT (léase ejecutamos otra instancia de ROOT para tener la certeza de que no estamos trabajando con objetos que hagan parte de la anterior ejecución) y creamos un TBrowser:

root[] new TBrowser

Una vez allí, buscamos (una instancia de TBrowser tiene interfaz gráfica) nuestro archivo .root y verificamos la existencia del histograma.

Leave a comment

Utilizando Raspberry Pi + Tor como proxy para la red local

Utilizando Raspberry Pi + Tor como proxy para la red local

Introducción

En la primera sección se explicó el procedimiento para que el Raspberry Pi obtuviera un IP estática en la red, luego instalamos y configuramos tor. Finalmente, abordaremos el tema de ser cliente del Raspberry Pi + Tor.

Antes de realizar una conexión mediante tor, es necesario configurar el navegador para mantener un nivel alto de privacidad. Adicionalmente, es necesario que el navegador (firefox) sea configurado para que todas las conexiones necesarias para navegar en internet sean enviadas mediante el proxy. Para esto, en firefox abrimos about:config y cambiamos a TRUE el valor de verdad del siguiente registro:

network.proxy.socks_remote_dns

De esta manera conseguimos que las peticiones dns también utilicen la configuración del proxy del navegador.

La transmisión de datos Cliente/Router puede realizarse sin cifrar o cifrando la información.

Sin cifrar la información en la red local

En una red local privada (accesos físicos protegidos y accesos inalámbricos limitados mediante un buen cifrado Router-Cliente), puede transmitirsen las comunicaciones Router/Cliente sin cifrar, para ello simplemente se configura el navegador para utilizar como proxy al Raspberry Pi: En firefox, menú Editar/Preferencias/Avanzado/Red/Configuración se selecciona “Configuración manual del proxy” Seleccionando “SOCKS Host” como tipo de proxy, introduciendo la IP del Raspberry PI, 10.1.1.20 en el ejemplo, y el puerto 9050. Opcionalmente puede utilizar un plugin como Proxy Selector.

Agregamos unas reglas para el firewall, de tal manera que sólo sean posibles las conexiones que van dirigidas al proxy:

$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A OUTPUT --destination 10.1.1.2 --protocol tcp --dport 9050 --jump ACCEPT

Con lo que cualquier otro paquete que, utilizando el protocolo TCP no se dirija al puerto 9050 (! --dport 9050) o que se dirija a un destino diferente del Rasperry Pi (! --destination 10.1.1.20) es descartado por el firewall.

Cifrando la información en la red local

Si la red local no es privada, o los accesos físicos e inalámbricos de la red no son considerados seguros. Resulta necesario realizar un tunneling mediante ssh, con lo que garantizaremos que la información viajará con una capa de cifrado que la protejerá.

Agregamos unas reglas para el firewall, de tal manera que sólo sean posibles las conexiones que permitirán la conexión con tor:

$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A OUTPUT --destination localhost --jump ACCEPT
$ sudo iptables -A OUTPUT --destination 10.1.1.2 --protocol tcp --dport 22 --jump ACCEPT

Con lo que descartamos todos los paquetes que no sean dirigidos al localhost o al servidor ssh (! --dport 22) del Raspberry PI (! --destination 10.1.1.20).

Abrimos un tunel ssh que permita redirigir el tráfico que inicialmente estaba dirigido al puerto 9000 del cliente al puerto 9050 del Raspberry PI:

$ ssh pi@10.1.1.20 -L 9000:localhost:9050

En firefox, menú Editar/Preferencias/Avanzado/Red/Settings se selecciona “Configuración manual del proxy” Seleccionando “SOCKS Host” como tipo de proxy, introduciendo la IP 127.0.0.1, y el puerto 9000.

Al finalizar el uso de Tor…

Al finalizar de usar tor es necesario eliminar las reglas impuestas al firewall para que pueda conectarse a internet sin utilizar el proxy:

$ sudo iptables -F
$ sudo iptables -P OUTPUT ACCEPT

Epílogo

Una vez configurado es posible navegar a través de tor. Recuerde que el nivel de privacidad y anonimato obtenido dependerá de la configuración del navegador, por lo cual no olvide eliminar las cookies, y no utilizar plugins como Adobe Flash.

1 Comment

Instalando un Tor Relay 24/7 usando el Raspberry Pi

Instalando un Tor Relay 24/7 usando el Raspberry Pi

Introducción

La privacidad es un asunto importante, el anonimato puede ser utilizado para solventar problemas de privacidad. Tor es una red enfocada a garantizar el anonimato de sus usuarios. El funcionamiento de la misma puede resumirse del siguiente modo: El cliente no se conecta directamente a su destino sino que utiliza una serie de proxys (relays) que voluntariamente participan en la red Tor, el trafico en el interior de la red es cifrado, así que el contenido permanece seguro. En la red Tor, una conexión usa varios proxys de tal manera que el destino último desconoce de donde se originó el tráfico o la solicitud y los proxys al interior de la red además de desconocer el contenido de la información, no tienen certeza de si la fuente del tráfico es la fuente primaria (donde se originó la solicitud).

Tor ha sido mainstream por otro tipo de cosas, como por ejemplo el caso “Silk Road”, un Hidden Service (servicios hospedados al interior de la red Tor), que permitía a sus usuarios tranzar con drogas ilegales. Tal como afirmó en una ocasión Jacob Applebaum (cabeza visible de tor) Internet es sólo un reflejo de la sociedad y Tor no escapará a ello. Como dato curioso, la persona que está siendo investigada por presuntamente ser el administrador es Ross Ulbritch un Físico de la Universidad de Texas.

Instalar Tor

Instalamos las dependencias para poder compilar el código fuente:

$ sudo apt-get install libevent-dev libssl-dev checkinstall

Descargamos el código fuente:

$ wget -c https://www.torproject.org/dist/tor-0.2.6.8.tar.gz

Descomprimimos el archivo:

$ gzip -dc tor-0.2.6.8.tar.gz|tar -xvf -

Nos dirijimos al código descargado:

$ cd tor-0.2.6.18

Compilamos (esto dura un buen tiempo):

$ ./configure
$ make
$ sudo make install

Por seguridad, creamos un usuario (debian-tor) que ejecutará tor:

$ sudo adduser debian-tor --shell /bin/false --home /var/lib/tor/ --disable-password

Podemos establecer que Tor se ejecute al inicio del sistema para lo cual se debe crear un script:

$ sudo nano /etc/init.d/tordaemon

En el cual ubicamos las siguientes líneas:

#!/bin/sh
sudo -u debian-tor tor

Programamos el script para que corra cuando se inicia el sistema:

$ sudo update-rc.d tordaemon defaults

Configurar Tor

El archivo de configuración de Tor se encuentra en /usr/local/etc/tor/torrc :

$ sudo nano /usr/local/etc/tor/torrc

Agregando las siguientes líneas:

Permitir que tor se ejecute como demonio (servicio):

RunAsDaemon 1

Definimos el archivo de registro en el cual estarán los mensajes que tor arroje:

Log notice file /var/lib/tor/tor-notices.log

Habilitar un mensaje de estado (tráfico circulando) cada 7200 segundos (1.5 horas):

HeartbeatPeriod 7200

Habilita el puerto 9050 para poder habilitar tor como proxy de la red local:

SocksPort 9050

Habilitar que la red local pueda utilizar tor mediante el Raspberry (asumiendo que la ip del Raspberry Pi es 10.1.1.20):

SocksListenAddress 10.1.1.20
SocksListenAddress 127.0.0.1

Permitir el uso de tor a estas ips (10.1.1.22 y 127.0.0.1) de la red local:

SocksPolicy accept 10.1.1.22
SocksPolicy accept 127.0.0.1
SocksPolicy reject * # Denegar el servicio a todos los demás usuarios

Habilitamos el puerto para poder controlar tor, establecemos como medio de autenticación la contraseña p4ssw0rd (cree su propia contraseña utilizando $ tor --hash-password NuevaContrasena:

ControlPort 9051
HashedControlPassword 16:E63C58BC4A7C32666047FE8CF397EEACF895A54E15384DA4108D067DD9

El puerto por el que ingresarán las comunicaciones de la red tor:

ORPort 9001

Habilitamos un puerto adicional (aumentará el tráfico del relay):

DIRPort 9030

Es necesario, entonces, configurar el router de la red para que dirija el tráfico recibido en los puertos 9001 y 9030 al Raspberry PI.

El nombre con el que se conocerá el relay en la red tor “MyBelovedRelay”:

Nickname MyBelovedRelay

La cantidad de información por segundo que será publicada como disponible para uso de la red tor:

RelayBandwidthRate 400 KB

La cantidad de información por segundo máxima permitida para el uso de la red tor:

RelayBandwidthBurst 500 KB

Habilitar el relay como nodo disponible para salida (aquellos que salen de la red tor y ponen la cara al internet)

ExitPolicy accept *:53, accept *:80,accept *: 443, reject *:*

Advertencia: El habilitar el relay como nodo de salida puede traer implicaciones legales si tienes la mala suerte de que un usuario use tor para un uso no aceptado de manera legal en tu país. Para que tor funcione únicamente como middle-relay se deberá incluir la directiva ExitPolicy reject *:*

Una vez hemos configurado Tor, podemos iniciarlo:

$ sudo -u debian-tor tor

Monitoreamos que todo esté ejecutándose como se espera:

$ tail -f /var/lib/tor/tor-notices.log

Una vez aparezcan los siguientes mensajes, estaremos seguros de que nuestro relay está funcionando correctamente:

[notice] Self-testing indicates your DirPort is reachable from the outside. Excellent.
[notice] Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.

Seleccionando el nodo de salida de nuestras solicitudes

¿Te gustaría saber cómo percibiría un ciudadano alemán el feed de noticias de Google?. Con tor puedes elegir en qué país se encontrará el nodo de salida de tus solicitudes. Para ello, nos conectamos al puerto de control del demonio tor:

$ nc localhost 9051

Y digitamos lo siguiente

AUTHENTICATE "p4ssw0rd"
SETCONF ExitNodes=DE
SETCONF StrictNodes=1
SIGNAL NEWNYM
QUIT

Donde hemos configurado “ExitNodes” con el sufijo de internet de alemania (DE). Recuerde que la contraseña deberá ser la que configuró previamente en el archivo /etc/tor/torrc

Epílogo

Bastante información de los intentos de la NSA por perseguir y anular el anonimato proporcionado por la red tor fue revelada por Edward Snowden. Los desarrolladores están al tanto de esos intentos y seguro trabajarán por mejorar el sistema y corregir los fallos en caso de presentarse. Mientras tanto, nosotros como usuarios podemos a través de acciones sencillas (como instalar un relay) contribuir al desarrollo de éste tipo de herramientas y a masificar su uso. El hecho de que se utilice herramientas criptográficas y de que se abogue por la privacidad y el anonimato, es de hecho, una actitud racional en un mundo donde la información se canjea como cualquier producto del mercado, y donde se evidencia excesos y abuso de poder en regimenes autodenominados democráticos.

En la próxima entrada veremos cómo podemos utilizar la instancia de tor que ha sido instalada en el Rapberry PI como un proxy para la red local.

Comentarios desactivados en Instalando un Tor Relay 24/7 usando el Raspberry Pi

ROOT’s Basics I: Compilar e Instalar ROOT en GNU/Linux

ROOT’s Basics I: Compilar e Instalar ROOT en GNU/Linux

En la serie ROOT’s basics se abordará los conceptos básicos de ROOT, una infraestructura de análisis de datos desarrollada por el CERN; ROOT es un conjunto de clases desarrolladas con el fin de facilitar el análisis de datos en física en altas energías, que como es bien sabido es un campo de la ciencia que maneja grandes cantidades de datos. No obstante, también dispone de múltiples clases de propósito general como la creación de interfaces gráficas de usuario. Además, ROOT provee de un interprete de C++ (Cling), lo que aumenta la eficiencia de la escritura de software, ya que se puede omitir el ciclo de compilación, y facilita la realización de prototipos, la escritura de software para tareas específicas sin la rigurosidad que implica el uso de C++ como lenguaje de programación.

Compilar e Instalar ROOT

En el sitio web de ROOT se describe cómo realizar la instalación, aquí se resume brevemente el procedimiento:

Se descarga el código fuente de la última versión pro de ROOT, en éste caso la versión 6.02.08:

$ wget -c http://root.cern.ch/download/root_v6.02.08.source.tar.gz

Se descomprime el archivo:

$ gzip -dc root_v6.02.08.source.tar.gz | tar -xf -

Se instalan las dependencias y paquetes recomendados para poder realizar la compilación, si su distribución no es Debian (o no es basada en Debian) debe revisar la página de prerequistos:


$ sudo apt-get install git dpkg-dev make g++ gcc \
binutils libx11-dev libxpm-dev \
libxft-dev libxext-dev gfortran \
libssl-dev libpcre3-dev \
xlibmesa-glu-dev libglew1.5-dev \
libftgl-dev libmysqlclient-dev \
libfftw3-dev cfitsio-dev \
graphviz-dev libavahi-compat-libdnssd-dev \
libldap2-dev python-dev libxml2-dev \
libkrb5-dev libgsl0-dev libqt4-dev

Se ubica en la carpeta del código fuente:

$ cd root-6.02.08

Se ejecuta:

$ ./configure

En este punto es necesario determinar qué características adicionales desea habilitar para ROOT por ejemplo el uso de SSL, MySQL o habilitar las librerías de Pythia. Para más información: $ ./configure --help

Se compila el código fuente (esto tardará un tiempo):

$ make -j 4

Aquí se asumió que se dispone de 4 núcleos (-j 4) para hacer la compilación. Para poder ejecutar ROOT desde cualquier directorio, sin salir del directorio donde se realizó la compilación:

$ echo "export ROOTSYS=`pwd`">> ~/.bashrc
$ echo "source \$ROOTSYS/bin/thisroot.sh">> ~/.bashrc

La primera vez se necesita ejecutar:

$ source ~/.bashrc

Lo cual corre las dos últimas líneas que han sido agregadas al archivo ~/.bashrc, cuya función es inicializar un conjunto de variables que permiten ejecutar ROOT.

Ahora sí es posible ejecutar ROOT:

$ root

Si desea obtener más información acerca de ROOT puede leer la sección 2.3 del libro, la cual también presenta información acerca de la documentación, la referencia, y una breve introducción a la programación orientada a objetos.

En la siguiente entrada de la serie se abordará los archivos “.root”. ¿Qué son?, ¿Para qué se utilizan?. Si le interesaría que se abordara algún tema en particular sobre esta tema no olvide comentarlo.

1 Comment

Administrando el Raspberry Pi de manera remota

Administrando el Raspberry Pi de manera Remota o ¿Cómo usar el Raspberry sin monitor ni teclado?

Si está interesado en tener un computador encendido las 24 horas del día, 7 días de la semana, 365.6 días al año, sin consumir mucha potencia, posiblemente un Raspberry Pi sea una buena aproximación. Éste, es un dispositivo pequeño (del tamaño de la palma de la mano) que presenta bajo consumo y donde se puede correr un sistema operativo, con todo lo que esto implica. Existen varias versiones cada una con características diferentes.

A continuación se presenta una de las formas para configurar el Raspberry Pi de manera remota a través de la red local, sin necesidad de utilizar monitor o teclado.

“Instalar” Raspbian en la tarjeta SD

Inicialmente se debe “instalar” el sistema operativo, aquí será utilizado raspbian, una distribución basada en GNU/Linux Debian especialmente diseñada para correr en el Raspberry Pi. Se realiza la descarga de la imagen de raspbian:

$ wget -c http://downloads.raspberrypi.org/raspbian_latest

Se descomprime el archivo:

$ unzip -x raspbian_latest.zip

Ésta imágen es una copia bit a bit de un dispositivo de almacenamiento que contiene raspbian (comprimida en zip). Se introduce la tarjeta SD en la ranura y se “copia” la imagen a la tarjeta:

$ sudo dd bs=4M if=./2015-05-05-raspbian-wheezy.img of=/dev/mmcblk0

Donde es necesario reemplazar mmcblk0 por la tarjeta SD en la cual desea realizar el procedimiento. Puede identíficarla mediante la capacidad de almacenamiento en el siguiente comando:

$ sudo fdisk -l |grep "Disk /"

Una vez terminada la ejecución del comando dd, se expulsa y vuelve a insertar la tarjeta SD. En este punto, aparecerán dos particiones en la SD (/boot/ -mmcblk0p1- y la raíz -mmcblk0p2-), se monta en el sistema la raíz para poder modificar algunos archivos que permitirán la administración remota del Raspberry Pi:

$ sudo mkdir /mnt/SDCard/
$ sudo mount /dev/mcblk0p2 /mnt/SDCard/

Fijar una IP estática para el Raspberry Pi

Se modifica el archivo /etc/network/interfaces :

$ sudo nano /mnt/SDCard/etc/network/interfaces

Comente (agregando # al inicio de la línea) las entradas relacionadas con la interfaz eth0 y agregue las siguientes líneas:

iface eth0 inet static
# La IP que tendrá el RPI:
address 10.1.1.20 
netmask 255.255.255.0
broadcast 10.1.1.255 
# La IP de la puerta de enlace (El router):
gateway 10.1.1.1 

Lo cual permite establecer una IP estática para el Raspberry. Deberá editar ésta información en base a la configuración de su red (Sugerencia: Use $ ip r).

Configurar ssh

Se genera un archivo de clave ssh de tal manera que no sea necesario digitar la clave cada vez que se conecta remotamente al Rasperry Pi:

$ ssh-keygen -N "" -b 2048 -t rsa -f ~/.ssh/RPIKey

Con lo cual se creó una clave rsa (-t rsa) de 2048 bits (-b 2048) que no necesita contraseña para ser utilizada (-N "") almacenada en ~/RPIKey (-f ~/RPIKey). Tenga en cuenta que cualquier persona que utiliza el equipo y el usuario desde el cual se generó la clave puede conectarse remótamente al Raspberry Pi sin la necesidad de digitar la contraseña.

Luego se copia la clave pública (que también ha sido generada en el paso anterior) en la tarjeta SD:


$ mkdir /mnt/SDCard/home/pi/.ssh/
$ cat ~/.ssh/RPIKey.pub>/mnt/SDCard/home/pi/.ssh/authorized_keys

En el archivo authorized_keys se guardan todas las claves que tienen acceso al usuario pi. Por lo que debe tener permisos especiales:

$ chmod 600 /mnt/SDCard/home/pi/.ssh/authorized_keys

Así sólo el usuario pi podrá leer y editar el archivo mencionado.

Inciar el Rasperry Pi

Se expulsa la tarjeta SD:

$ umount /mnt/SDCard

Luego, se inserta la SD en el Raspberry PI, se conecta el cable de red y se enciende el dispositivo. Se conecta remotamente al raspberry a través de:

$ ssh pi@10.1.1.20

Una vez en el interior del sistema se ejecuta la utilidad que permite configurar el rasperry:

pi@10.1.1.20 $ sudo raspi-config

No olvide a través de esta herramienta dos pasos escenciales: 1. Expandir el sistema de archivos. 2. Cambiar la contraseña del usuario Pi.

Epílogo

Correr el sistema operativo desde una tarjeta SD no es necesariamente el mejor método, ya que rápidamente aparecen errores en el sistema de archivos, lo cual implica, si no se tiene una copia de seguridad, volver a realizar todo el procedimiento. Por esta razón se recomienda usar una memoria USB como sistema de almacenamiento del Raspberry Pi.

Administrar el sistema de éste modo requerirá herramientas útilies y convenientes para el uso del shell. En particular sugiero el uso de tmux.

1 Comment

Mejorar la privacidad y evadir la publicidad mientras navegas en Internet

Privacidad en la Web

Imagen tomada de la película The Conversation (1974)
Imagen tomada de la película The Conversation (1974)

Cuando una persona utiliza internet, se generan miles de comunicaciones, el contenido que desea ver viaja (literalmente hablando) a través del mundo. La información de nuestros intereses (en mi concepto) debe ser privada y protegida: cómo invertimos nuestro tiempo libre, los productos que consumimos, la música que nos gusta escuchar. Toda esa información sólo debería ser revelada bajo nuestro consentimiento explícito. Sin embargo, al utilizar internet siempre revelamos (sin un consentimiento explicito) toda ésta información. Creo que a nadie le gustaría que un desconocido llegue a su puerta ofreciendo productos basado en tus intereses, diciendo: sé perfectamente qué música escuchas, qué películas te gustan, qué artículo leíste el día tal a la hora tal, ésta escena sabiendo que es un desconocido me parece poco menos que aterradora.

La dirección que visitas (que apunta a un contenido específico en internet) puede ser guardada por una de las cientos de máquinas por las cuales pasa , existen empresas proveedoras de internet que utilizan proxies transparentes (que no necesitan configuración alguna por parte de los usarios finales). Los proxies, por dar un ejemplo, tienen la posibilidad de registrar cada conexión, el origen (quién la solicitó), el destino (la URL solicitada), la fecha, hora y toda la información que esté disponible (por ejemplo qué navegador utilizas, qué incluye entre otros el sistema operativo, versión, etc). Todo esto no se hace con el fin de vigilar tus comunicaciones (es lo que afirman las compañías), la principal razón es que permite controlar y ocasionalmente mejorar la eficiencia de las redes de la compañía. Por ejemplo, entes gubernamentales prohiben la visita de determinados sitios web (en todos los países existe. ¡Sí, en Colombia también!), en consecuencia, para que la compañia se adapte a la legislación local puede utilizar un proxy u otros mecanismos.

Pero no todo es acerca de los proveedores de internet, y la reglamentación de los gobiernos locales. Como internet es una gran red, todo está interconectado, los proveedores de servicios (por ejemplo facebook, google, etc) delegan y/o contratan funciones con otras empresas. Por ejemplo, facebook contrata con un tercero (akamaihd) para albergar las imágenes que guardan los usuarios “en facebook”. Facebook, y en general, cualquier sitio de internet resulta entonces el centro de un conjunto de actividades de decenas de terceras partes. Ésto, por su puesto, es una ventaja, ya que proveedores “pequeños” de servicios no tienen que montar sus propios servidores (lo cual es costoso) sino contratar (delegar). Si alguien tiene un blog, por ejemplo en wordpress puede utilizar flickr o imgur para albergar las imágenes. Lo cual implica que cuando visitamos el blog de ésta persona, nuestro computador no sólo se conecta a wordpress sino también a flickr o a imgur. Pero esa es la parte saludable. Tal como funciona la economía en internet, para obtener dinero de la producción de contenido en una página web, se utilizan anuncios y los anuncios se cargan de los servidores de anunciantes, a estos últimos (a muchos más, pero a estos en particular) les resulta económicamente atractivo conocer los intereses de cada persona en internet (para ofrecerles publicidad a la medida) y para esto utilizan varios mecanismos. Pero por ahora dejémos la parte filosófica y vamos a la parte técnica, práctica, de los dos asuntos se ha escrito mucho, esto es una resumen de las fuentes a las que he accedido:

Selecciona un buscador

Los buscadores son un asunto sensible, son los gurús de internet; no porque lo sepan todo, pero porque saben donde encontrarlo. Es un asunto sensible porque son a estos a los que les realizamos preguntas, si te gusta google, cámbiate a startpage que es un intermediario entre google y el usuario, tú le haces preguntas a startpage, y startpage se las hace a google y luego te responde lo que dijo google, startpage de acuerdo a sus términos de uso no registra quién preguntó, y no instala cookies (un mecanismo de identificación) en tu navegador, entonces google dirá startpage me preguntó y no sabrá que fuiste tú el que encargó a startpage para preguntar.

Instala HTTPS-Everywhere

https-everywhere es un complemento (disponible para firefox y chrome) que permite cifrar (hacer ilegible para terceros) el contenido entre el servidor y el usuario en una gran cantidad de servicios que tienen configurada esta opción.

Instala Adblock plus

Adblock plus es un complemento que permite bloquear la publicidad de todos los sitios web (Sí, también esos molestos anuncios de Youtube). Esto puede ocasionalmente agilizar su conexión a internet ya que evita que nuestro equipo se comunique con los servidores de anuncios (mecionados anteriormente). Es necesario mencionar que algunos generadores de contenidos están en contra de estos mecanismos debido a que (como se mencionó anteriormente) los anuncios hacen parte de la infraestructura económica sobre la cual se basa la internet. Si ya lo instalaste, te recomiendo agregar estos filtros para facebook y para youtube.

Nota: The Guardian tiene una crítica acerca de Adblock Plus. Sería bueno que la leyera para poder tomar una decisión responsable.

Instala Remove Cookies for this site

Este es un sencillo complemento que elimina las cookies de las páginas que visitaste una vez cierras una pestaña de tu ordenador. Está disponible para firefox, también para Chrome (pero no lo he probado).

Instala Ghostery

Si bien Ghostery no es un complemento de código abierto, lo recomiendo porque permite agilizar la conexión a internet y mejorar la privacidad al hacer que por ejemplo los “plugins” de las redes sociales (como facebook), no se carguen, estos plugins hacen que facebook (si tienes abierta una sesión) o si tienes la configuración por defecto de tu navegador (respecto a las cookies) sepa qué sitios visitas.

Configura las cookies de tu navegador

Configura tu navegador para que elimine las cookies cada vez que cierres el navegador, y para que prohiba que terceras partes instalen cookies en tú navegador.

Otras medidas más drásticas…

Si quieres ser un poco más radical (y conoces detalles de configuración de tu navegador y principios básicos de internet) puedes instalar el complemento Request Policy, que por defecto bloquea toda conexión a terceras partes. Si no conoces, es mejor que no lo instales ya que vas a pensar que has dañado el navegador.

Nota

Ocasionalmente cuando menciono a facebook hago referencia a cualquier red social, facebook es la empresa (más conocida) que maltrata la privacidad de sus usuarios, pero es precisamente la ignorancia (de nosotros como usuarios) lo que permite que estos temas a sus ejecutivos les tenga sin cuidado. facebook no es el diablo, pero se le parece tanto que a veces no puedo diferenciarlos.<

1 Comment