viernes, 14 de enero de 2011

Operadores a nivel de bits en C# (bitwise operators)

Además de los operadores condicionales lógicos y de relación C# cuenta con operadores a nivel de bits (bitwise operators o logical operators) que permiten realizar operaciones con las representaciones binarias de las variables que internamente utiliza la computadora, esto es útil en ciertos casos donde se requiere interactuar directamente con el hardware o utilizar una variable entera como un arreglo de bits donde por ejemplo un tipo short representaría un arreglo de bits con una longitud de 16 valores y cada bit podría ser utilizado como si fuera un valor booleano 1 igual true y 0 igual a false.

Los tipos de datos donde usualmente aplican estos operadores son: los numéricos y las enumeraciones.

La siguiente tabla muestra los tipos numéricos, su longitud en bytes y su valor en decimal.


Así por ejemplo si tenemos valores decimales representados en variables byte (8 bits hasta 255 en decimal)

byte a = 22;
byte b = 33;

Internamente su representación en binario es:

22 = 00010110
33 = 00100001

si utilizamos variables de tipo short (16 bits hasta 65,535)

short c = 666;
short d = 6666;

su representación en binario es:

666 = 00000010 10011010
6666 = 00011010 00001010

Así con cada tipo numérico siempre agrupando las cadenas de bits de 8 en 8.
La siguiente tabla muestra los operadores bitwise, su significado y su resultado.


A continuación un ejemplo de la utilización de estos operadores con enteros, este programa tiene 3 clases:

  1. BitwiseGUI.class: Contiene el código para las interacciones del usuario con el programa, como el menú,la pausa y la impresión del resultado.
  2. BitwiseMath.class: Contiene las operaciones unarias y binarias de los operadores.
  3. MainClass.class: Es el programa principal en donde se evalua la opción ingresada por el usuario.


Compilamos y ejecutamos el programa desde Monodevelop


Al ejecutarlo veremos los siguientes resultados:






Otro uso común de estos operadores esta en las enumeraciones como en el caso de los valores de las enumeraciones FileMode y FileAccess del siguiente código.


    
FileStream outStream = new FileStream("log.txt",FileMode.Append | FileMode.Create,
FileAccess.Read | FileAccess.Write,FileShare.Read);
StreamWriter sw = new StreamWriter(outStream);
sw.WriteLine("Archivo de log");
sw.Close();

  Descarga el proyecto.

martes, 4 de enero de 2011

Notas acerca de los elementos de la comunicación en redes de datos

La comunicación comienza con un mensaje o información que debe enviarse de un individuo o de un dispositivo a otro. Aunque hay muchos métodos de comunicación la comunicación tiene básicamente tres partes, que son:



  • La fuente del mensaje o el emisor que pueden ser personas o dispositivos.

  • El destino del mensaje o el receptor quien recibe el mensaje y lo interpreta.

  • El canal que consiste del medio en el cual se transmite el mensaje.


En el caso de las redes de datos en vez de enviar todo el mensaje por el canal y esperar hasta que el receptor lo interprete de principio a fin, se realiza una estrategia llamada segmentación donde el mensaje se divide en pequeñas partes y cada una de esas partes es enviada al emisor hasta completar el mensaje, esto trae dos ventajas, la primera es que se pueden enviar diferentes mensajes por el mismo canal ya que se pueden intercalar las partes de diferentes mensajes dentro del canal evitando la saturación por un mensaje de tamaño considerable y la segunda es que no todos los mensajes van desde la misma fuente al mismo destino si una vía dentro del canal se congestiona o se cae, las partes pueden tomar vías alternas y además si algunas partes del mensaje no llegan a su destino esas partes pueden ser retransmitidas.

Aunque la segmentación le agrega mayor complejidad y consumo de tiempo al proceso de la comunicación en las redes de datos esto asegura el correcto envió y recepción de mensajes. Varios tipos de dispositivos a través de la red participan en este proceso, los componentes visibles y los componentes no visibles. Los componentes visibles de la red de datos son los elementos de hardware que participan en la red como laptops, PC's, el cableado y los switches y los elementos no visibles se refiere al software como los procesos de servicios de los programas de comunicación que se ejecutan en los dispositivos de red, estos servicios responden a una petición como los servicios de emaill o de web, aunque son menos evidentes son críticos para la operación de las redes ya que se encargan de la respuesta a las solicitudes de los mensajes.

Los dispositivos de red que están cerca del usuario se conocen como dispositivos finales estos dispositivos son la interfaz entre la red humana y la red de comunicación de datos. En el contexto de las redes de datos un dispositivo final está referido como un host, ya que es tanto como el emisor o el receptor de los mensajes transmitidos a través de la red, un host se distingue de otro dentro de la red mediante su dirección. En las redes modernas un host actúa tanto como cliente, como servidor o como ambas cosas esto lo determina el tipo de software que tenga instalado.

Por ejemplo si una PC tiene instalado un servidor de correo electrónico (como postfix) y de hosteo de páginas Web (como apache) entonces está habilitada como servidor tanto de correo electrónico como de páginas web y sí tiene además instalado software de cliente de correo (como thunderbird) y de navegador web (como firefox) entonces también está habilitada como cliente de correo electrónico y de páginas web.

Además de los dispositivos finales en la red de datos existen los dispositivos intermediarios que proporcionan la conectividad y todo el trabajo para asegurarse que los datos fluyan dentro de la red. Estos dispositivos conectan los hosts a la red y la red o redes de hosts para formar una interred o internetwork como es el caso de Internet, ejemplos de dispositivos intermediarios son:



  • Dispositivos de acceso a la red (Hubs,switches, wireless access point)

  • Dispositivos interred (routers)

  • Servidores de comunicación y los modems

  • Dispositivos de seguridad (firewalls)


Estos dispositivos usan la dirección de host (host address) en conjunción con la información de las redes interconectadas para determinar la trayectoria de los mensajes dentro de la red, los procesos que se ejecutan en estos dispositivos realizan las siguientes funciones:



  • Generan y retransmiten las señales de datos.

  • Mantienen la información acerca de las rutas existentes en la red.

  • Notifican a otros dispositivos de los errores o de las fallas de comunicación.

  • Si hay un error de enlace enviar la señal en rutas alternas.

  • Clasifican los mensajes acorde a las prioridades de QoS.

  • Permite o rechazan el flujo de datos basados en la configuración de seguridad.


Las redes modernas usan principalmente tres tipos de medio para la interconexión de dispositivos, esos medios son:



  • Cables metálicos

  • Cables de fibra óptica

  • La transmisión por ondas (wireless)


La codificación de la señal es diferente en cada tipo de medio, en los medios metálicos la señal es codificada mediante impulsos eléctricos, en los medios de fibra óptica es codificada como impulsos de luz infrarroja o blanca y en la transmisión wireless es codificada como patrones de ondas electromagnéticas.