sábado, 28 de febrero de 2015

Configurar Wireless RaLink 3090 (VIT M1110) en Debian 7 wheeze

Este post es viejo, dado que estaba configurado para publicarse y al fin no se publicó. 

Así que, al que pueda interesar.

Una alumna me pidió que instalara Debian 7 en su flamante netbook VIT M1110 , así que me puse manos a la obra. Tras instalar debian me conseguí con un problema a la hora de configurar la red inalambrica dado que no quería aceptarme el driver oficial para Debian whezzy para la tarjeta RaLink RT3090 , entiéndase éste, entonces me encontre un severo problema. Pero de tanto googlear me encontré con la solución de usar ndiwrapper para resolver el lío, así que procedí a instalarlo y configurarlo como dice aquí, como ya había instalado los drivers de esta versión firmware-ralink me toco pasarlos a la lista negra de módulos de Debian, para eso seguí las siguientes instrucciones una vez creado el archivo allí mencionado, puse las siguientes lineas dentro



blacklist rt2800pci
blacklist rt2800usb
blacklist rt2800lib



Posteriormente, necesitaba instalar los drivers para windows xp en mi flamante Debian 7, así que me baje el archivo de drivers cortesía de hp descomprimí el archivo usando el gestor de compresión de Debian, y luego con mi terminal ejecuté:



# ndiswrapper -i /ruta/a/carpeta/sp49134/Driver/XP/Win2KX/rt2860.inf



verifique si estaba instalado con



#ndiswrapper -l

rt2860 : driver installed
    device (1814:3090) present (alternate driver: rt2800pci)



Ultimo paso, reiniciar el equipo y cruzar los dedos.

Luego obviamente configurar el NetworkManager.







Variables y conversión de tipos en C#


Buen día a todos,

Hoy vamos a hablar acerca de algo muy importante a la hora de programar, las variables.  A partir de matemática de bachillerato sabemos que son valores que son desconocidos, pero en programación son el almacén principal de los datos para poder obtener la información que realiza nuestro programa. En C# las variables van atadas al tipo de dato que almacenan, entendiéndose por tipo de dato si es un número (entero corto, entero largo, decimal o complejo), una cadena de texto o un valor booleano.

A la hora de definir una variable en C# al igual que en lenguajes como C/C++ y java es especialmente necesario definir el tipo, por esta razón la sintaxis general es:

                identificador_tipo nombre_variable = valor ;

Así que empecemos con las cadenas.

Se define como un tipo cadena  o string a una secuencia de caracteres unicode, este es un tipo implícito de C#.
Se define mediante el identificador de tipo:
                string palabra = "Ensayo";
En la línea anterior, definimos una variable llamada palabra que contiene una cadena "Ensayo". ese es el valor de nuestra variable.

Veamos los número enteros.

En C# existen distintos tipos de enteros. De acuerdo a la documentación oficial son 9 y no todos necesariamente representan un número. 


Como se puede observar en la tabla anterior se pueden presentar datos astronómicamente grandes según el tipo de entero que se esté usando. Y el uso del tipo correcto tiene implicaciones en la cantidad de memoria usada por nuestro programa. Por dicha razón, si se va a mostrar la cantidad de opciones vinculadas a algo como por ejemplo las entradas del menú de un restaurante y es un número relativamente pequeño el de las respuestas a ser tomadas en cuenta debemos elegir un número byte, en cambio si nuestro objetivo es mostrar una operación matemática con un número de respuesta realmente grande (ejemplo una operación monetaria entre países) debemos usar un número entero de tipo Long. Claro, hay que tener en cuenta que si la operación tiene decimales ninguno de estos números nos va a ser realmente útil dado que perderíamos la precisión decimal.

Por otro lado el tipo char, representa un carácter Unicode de 16 bits, es decir una letra o carácter imprimible de 16 bits. Ejemplo, la letra Ñ tiene una representación de 16 bits en binario de la siguiente manera: 11000011 10010001

Algunos ejemplos de declaración de enteros:

int diez = 10;
sbyte nueve = 9;
short corto = 25340;
ushort = 32456;

Ahora, hablemos acerca de los decimales o números de punto flotante.
En C# existen dos tipos de números de punto flotante que son el float y el double, cada uno tiene un rango mínimo y máximo de alcance al igual que con los enteros  


Como podrás observar son números bastante pequeños o extremadamente grandes con la precisión decimal correspondiente, por esta razón son muy útiles a la hora de representar valores numéricos donde los decimales no pueden ser despreciados, como por ejemplo operaciones monetarias, de esta manera se resuelve el problema de las operaciones monetarias entre países, de la sección anterior.

Convertir una cadena a un número

Vale la pena resaltar que a la hora de leer un número los métodos proporcionados por C# toman la entrada como una cadena de texto(o tipo string), por tanto para posteriormente realizar las operaciones matemáticas que deseemos debemos proceder a realizar un conversión de tipos. Por defecto, C# lee  todo lo que entra por teclado como una cadena entonces es trabajo del programador realizar estas conversiones, para esto se usan las funciones que son parte de la librería System



System.Convert.ToDecimal(var);
System.Convert.ToInt16(var);
System.Convert.ToInt32(var);
System.Convert.ToInt64(var);



Y otras que puedes ver usando la característica intellisense de tu editor de Visual Studio. En nuestro programa de ejemplo, leeremos por teclado el nombre del usuario luego le pediremos que ingrese dos valores y ejecutaremos conversión de tipos para sumarlos. Y finalmente los mostraremos por teclado.  Repitamos el paso de la entrada anterior y generemos un nuevo proyecto de Consola. 

Menú archivo -> nuevo proyecto -> aplicación Windows -> aplicación de consola

Establecemos el nombre de la solución y el proyecto a Variables y luego en la sección de program.cs del explorador de soluciones agregamos el siguiente código. 


Para finalizar ejecutamos nuestro proyecto en la barra de menús presionando el botón iniciar, y veremos la siguiente salida. 



Recuerda, si te gusto la entrada y su contenido puedes invitarme a un café.

Para descargar las fuentes puedes hacerlo aquí

Hola Mundo en C#


Buenos días como dije anoche, voy a retomar el curso de C# para todo aquel que quiera aprender y como este es uno de los lenguajes más populares del mundo lo voy a hacer seriamente. Así que voy a publicar cada programa con la documentación asociada para que cualquiera lo entienda de principio a fin. Bueno, sin más preámbulo vamos a nuestro primer programa en C#.

Para comenzar tenemos que hablar acerca de cómo funcionan los proyectos. Para eso nos vamos al editor de Visual Studio y seleccionamos en el menú archivo nuevo proyecto, a continuación se abrirá la siguiente ventana:


Allí en la sección nombre le colocaremos el nombre de nuestra aplicación y el nombre de la solución, se entiende por solución el nombre general del proyecto. Para nuestro ejemplo será:

Nombre: HolaMundoConsola
Nombre de la solución: HolaMundo

Una vez creado el proyecto podremos observar su estructura en el explorador de soluciones a mano izquierda de nuestro editor Visual Studio. Tal como se ven en la siguiente captura.


Veamos la estructura y como funciona:

En la parte superior vemos el nombre de la solución tal como lo establecimos. Luego el nombre de proyecto de la aplicación. La sección References , Properties, y el App.config  las veremos más adelante en el curso.
Ahora la parte que nos interesa es la sección Program.cs donde realmente está el código fuente de nuestra aplicación. Y que como veremos durante esta serie de artículos es el punto de entrada para nuestras aplicaciones. Al abrirlo, veremos el siguiente código inicial. 


En la cabecera del archivo vemos las instrucciones using, estas instrucciones le dicen al compilador las librerías que debe utilizar para compilar nuestro proyecto.
La siguiente instrucción es el namespace, esta instrucción establece el espacio de nombres donde está contenida la clase 'Program', como vemos en el código ya tenemos un método Main o principal que actuara como punto de entrada para la aplicación.

Viéndolo en UML se ve de la siguiente manera. 


Bien, ahora vamos al código.


Bien, la pregunta es ¿de donde viene el objeto Console? mediante el cual llamamos al atributo Title, al método Write() y al método ReadKey(). La respuesta es a través del using System declarado en la primera linea de nuestro programa, C# toma de manera implícita todo lo que se encuentre en ese contexto.

Para finalizar, veamos nuestro programa en ejecución. 


Bueno, que hacen las lineas escritas anteriormente. 

  • La linea Console.Title establece el nombre de la consola.
  • La linea Console.Write imprime en la consola el texto que se le pase como argumento.
  • Y por ultimo la Console.ReadKey, espera a que el usuario presione cualquier tecla para salir de la aplicación. 


Bueno para descargar el programa, puedes seguir el siguiente enlace.

Recuerda, si te gusto la entrada me puedes invitar a un café. 

viernes, 27 de febrero de 2015

Esteganografia en Python con un archivo MIDI

Bueno, primero que nada el contexto. 

Unos amigos me pidieron el favor de que los ayudara con un programa que necesitaban para un postgrado de la seguridad de la información. El objetivo del programa: "Escriba un programa en Python que permita ocultar un mensaje en un archivo midi".

De allí viene el análisis. 

¿Como lo hago?


Primero que nada, vamos a ver la base conceptual de este asunto. 



Esteganografia: Según la wikipedia  trata el estudio y aplicación de técnicas que permiten ocultar mensajes u objetos, dentro de otros, llamados portadores, de modo que no se perciba su existencia. Es decir, procura ocultar mensajes dentro de otros objetos y de esta forma establecer un canal encubierto de comunicación, de modo que el propio acto de la comunicación pase inadvertido para observadores que tienen acceso a ese canal.


Archivo MIDI: MIDI (Musical Instrument Digital Interface) permite que distintos elementos electrónicos como computadoras, sintetizadores y otros dispositivos musicales se comuniquen y compartan información. 

En los archivos MIDI, la información viaja en bytes(es decir 8 bits) [para efectos del programa a escribir esto es sumamente importante], si se han dado cuenta una cadena de caracteres de la tabla ascii de 0 a 127 también tiene 8 bits como lo pueden ver en aquí. Entonces, podemos notar algo interesante con respecto a las notas musicales midi, una nota musical es un número entero de 0 a 127, que permite cubrir la escala musical en 11 octavas. ¿Interesante verdad?

Bueno, entonces si reemplazamos las notas musicales MIDI por números enteros naturales para su representación ASCII. ¿Problema resuelto verdad?

Ahora, la siguiente pregunta es ¿Como leemos el archivo binario y lo modificamos para poder ocultar allí nuestro mensaje? Y sobre todo ¿Como evitamos que sea detectable a los sutiles cambios del oído?

La respuesta a la segunda es:  los canales.

MIDI puede direccionar hasta 16 canales (también llamados voces, o instrumentos); por ello, al instalar el sistema MIDI será necesario asignar un número de canal para cada dispositivo.

Considerando esto, podríamos abrir un canal mudo(sin sonido) que tenga la misma longitud de notas que el canal más largo existente en el archivo original. 

¿Interesante verdad?

Ahora, vamos a la parte divertida ¿Como lo programamos?

En internet existen varias librerías para trabajar con archivos midi en python. A saber:

  1. midiutil
  2. pygame.midi
  3. pyMIDI
  4. midi.py
  5. MIDI.py 



Para resolver nuestro ejercicio hicimos uso de python-MIDI.

En una entrada posterior les mostrare la lógica general del programa y las clases que creamos para implementar dicha tarea. 

Oye, por cierto. Si te gusto la entrada puedes brindarme una taza de café. 



¿Desaparecido? La verdad no.

Bueno, muchas cosas han cambiado en mi vida empezando por mi lugar de residencia. Ya no estoy más en Venezuela para mi fortuna. Emigre a Colombia, mi querido país se cae a pedazos. Pero bueno, el curso de C# es algo que quiero completar. Mañana Dios mediante publicare un par de entradas para los que estén interesados con algún código de ejemplo.

Bueno, saludos.


Por cierto, si alguien me lee de España.

NO DESTRUYAN SU PAÍS CON EL SOCIALISMO CHAVISTA DE PODEMOS.

Bueno, dulces sueños.