jueves, 12 de noviembre de 2015

Estructura de Repetición For


Buenas noches, volviendo con el curso de C# vamos a exponer rapidamente que es una estructura de repetición FOR.

En programación un ciclo for, se define como una ciclo repita para, esta estructura de repetición en la mayoría de los lenguajes de programación define define una variable de control en su definición que indica de que manera se va a llevar  a cabo la repetición de los procesos indicados. La idea fundamental de las estructuras de repetición, es repetir una operación tanta cantidad de veces o hasta que se cumpla determinada condición.

Veamos el ejemplo. En C#


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EstructuraFor
{
    class Program
    {
        static void Main(string[] args)
        {

            System.Console.WriteLine("Esta aplicación cuenta hasta 100");

            for (int i = 0; i <= 100; i++) {

                System.Console.WriteLine(i);

            }
            System.Console.WriteLine("Ya terminó de contar");
            System.Console.ReadKey();
        }
    }
}
Observen, que básicamente la idea del ejemplo es repetir la impresión del conteo en cada vuelta. Esta estructura básica de programación permite más adelante hacer algo que comúnmente llamamos una multiplicación, es decir una suma repetida.
Veamos el siguiente ejemplo.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EstructuraFor
{
    class Program
    {
        static void Main(string[] args)
        {
            String multiplicando = "";
            String multiplicador = "";
            System.Console.WriteLine("Por favor ingrese el multiplicando");
            multiplicando = System.Console.ReadLine();

            System.Console.WriteLine("Por favor ingrese el multiplicador");
            multiplicador= System.Console.ReadLine();

            double a = System.Convert.ToDouble(multiplicando);
            double b = System.Convert.ToDouble(multiplicador);


            double result = 0;
            for (double i = 0 ; i < b; i++) {

                result = result + a;

            }
            System.Console.WriteLine("La multiplicación es {0}", result);
            System.Console.ReadKey();
        }
    }
}

Ahora, en sus casas pueden practicar realizando una estructura de repetición que realice la potencia.

¿Como sería?

viernes, 1 de mayo de 2015

Django Role Based Access Control Modelado

Buenas tardes a todos, he estado un poco ocupado con mi trabajo habitual adicional de un proyecto personal y por esa razón no he vuelto a publicar del curso de C#, obviamente deseo terminarlo y tal vez aprovechando el fin de semana largo mañana publique una entrada o dos. Pero lo que me trae por aquí hoy es un interés que tenia en el Django Role Based Acces Control, y su modelado de base de datos para poder integrarla a nuestros proyectos. Entonces, como necesitaba dicha información me tome la molestia de generar el diagrama usando mysql workbrech. Aquí se los dejo.



Bueno, espero les sea de utilidad. Hasta la próxima. 

PD: Algunos artículos que pueden ser de utilidad.

http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/

http://www.b-list.org/weblog/2007/feb/20/about-model-subclassing/

http://www.b-list.org/weblog/2007/feb/20/about-model-subclassing/

domingo, 29 de marzo de 2015

Maquina Virtual Virtual Box en segundo plano


Les cuento, dadas las fronteras digitales que existen por la Digital Millennium Copyright Act algunas personas en algunos paises no pueden acceder a ciertos contenidos, así algunos familiares se encuentre pagando por ellos. Ejemplo, mi madre en Venezuela no puede usar Claro Vídeo porque el servicio no se encuentra disponible para su país, sin embargo en computación siempre hay una manera de hacer las cosas. 

Para poder acceder a servicios restringidos por direcciones ip, hay que pedirle a un familiar que nos haga los siguientes favores.

1) Crear una maquina virtual en el país donde el servicio es valido, usando Virtual Box tal como lo explica la señorita Jessica en lignux.com.
2) Instalar una herramienta gratuita de control remoto como TeamViewer en la maquina virtual
3) Activar el inicio automático en segundo plano de la maquina virtual en nuestro equipo para que nuestra querida madre acceda de manera remota y pueda ver lo que quiera ver sin afectar nuestro trabajo en primer plano. Este paso se divide en los siguientes:

a) Crear un archivo de nombre startvm.bat en cualquier ruta con la siguiente linea:

"C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "Debian" -p 3340

b) Crear otro archivo startvm.vbs con las siguientes lineas en la misma ubicación

Dim oShell
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run  "startvm.bat",0, true
Set oShell = Nothing

c) Agregar al inicio automático de windows nuestro scritpt startvm.vbs, de la siguiente manera 

Ahora la maquina virtual se iniciará automáticamente al encender nuestro equipo host. Adicional a esto debemos configurar el inicio automático de teamviewer en la maquina virtual. Así se podrá controlar apenas se encienda sin mayor interacción de nuestra parte. Para eso, podemos seguir las instrucciones del siguiente enlace.


sábado, 28 de marzo de 2015

Estructuras de control de flujo (decisión)

Estructuras de control de flujo

Buenos días, hoy vamos a hablar de las estructuras de control de flujo, en esta primera parte de las estructuras de decisión. Estas estructuras son las que permiten escribir programas complejos dado que solo con variables y sentencias de captura las aplicaciones serían una sucesión lineal de instrucciones sin mucha utilidad.
Las estructuras de control se dividen en dos grupos: Estructuras condicionales, y estructuras de repetición . Cada una con sus propias especificaciones que ayudan a dar sentido a nuestros programas.

Estructuras de decisión.
Son las estructuras de control de flujo que permiten elegir comportamientos distintos para nuestros programas según las condiciones establecidas usando los operadores de comparación que vimos en la sesión anterior.

     Estructura de decisión if.


Las estructuras de decisión if permiten definir el flujo de nuestras aplicaciones. Si no definiéramos condiciones según a eventos a realizar por el usuario o decisiones que debe tomar el programa según el valor de algunas variables, nuestros programas serían solo instrucciones lineales una tras otra sin demasiado sentido. 

En el ejemplo anterior se le solicita al usuario que ingrese un número y de acuerdo al valor ingresado se imprime por pantalla un mensaje previo a la impresión del valor del valor del  número, a diferencia de las estructuras if else que veremos más adelante  si la condición no se cumple no hay flujo alternativo. Solo se descartan las instrucciones que no cumplen la condición.

Veamos el código fuente de este primer ejemplo. 



    Estructura if else.

La estructura if else, se encarga de cambiar de hacer el trabajo que la estructura anterior no realiza. En dado caso de que la primera condición no se cumpla se ejecutarán las instrucciones encerradas en el bloque else. 


En este caso, la condición divide el flujo en dos. Una donde es afirmativa y la otra donde es negativa. El caso else se ejecuta si solo si, el caso evaluado en la condición es falso. 

 Ahora veamos el código de este ejemplo.



Estructura If else if else.

En esta estructura aparece la diferencia de que condiciones adicionales son agregadas a la primera en dado caso que esta no se cumpla. Podemos agregar tantas condiciones adicionales como deseemos.

El flujo es que si la primera condición no se cumple se evaluara la siguiente. Hasta tanto se cumpla alguna, en dado caso de que alguna de las condiciones no se cumpla, se procede entonces a ejecutar el caso else. 


Después de las condiciones pueden existir sentencias adicionales, es decir estructuras de repetición, otras estructuras de decisión etc.

Veamos el código fuente.



Estructura switch.

La estructura switch es muy similar a las estructuras if else if else. Cada caso evaluado por el switch representaría un caso del if else if else. La ventaja sobre las condiciones normales es que el código luce más ordenado. Sin embargo no admite definir condiciones complejas como con los if. Solo condiciones donde la opción es una cadena  o número entero.

Veamos el primer ejemplo de esta.



Veamos el segundo.



Bueno, hasta aquí la entrada de hoy. 

Para aprender deben practicar. Recuerden siempre eso. 

A continuación los ejemplos del día de hoy

domingo, 1 de marzo de 2015

Operadores


Buenos días continuando con el curso de C#, ahora vamos a hablar de operadores.

Operadores aritméticos.

Los operadores en los lenguajes de programación son los mismos que conocemos de matemática. 

Estos son: suma, resta, multiplicación, división, resto y potencia. 

En C# los operadores se representan de la misma manera que en matemática, a excepción de resto y potencia. 

Para realizar una operación matemática, al igual que en el ejemplo anterior para capturar datos debemos capturar las variables como cadenas, y luego convertirlas en números de acuerdo a los tipos de datos que vimos anteriormente. 

Veamos un ejemplo. Debemos repetir el procedimiento de creación del proyecto. 

Menú archivo, Nuevo Proyecto , Aplicación de consola, Nombre de proyecto: Control de Flujo 

Los operadores aritméticos tienen un nivel de precedencia, de acuerdo a la siguiente tabla:

  • Multiplicativos: * / %
  • Sumatorio: + -

Cuando un operando se encuentra entre dos operadores con igual grado de prioridad, la asociación de los operadores controla el orden en que se ejecutan las operaciones. A excepción de los operadores de asignación, todos los operadores se agrupan por la izquierda, es decir que con igual grado de precedencia las operaciones aritméticas se ejecutan de izquierda a derecha.

Por tanto,

int x = a + b - c ;

Es igual a decir

int x = (a + b) - c ;

Operadores de Comparación.

Los operadores de comparación en C# son los que permiten determinar el comportamiento de control de flujo si se cumple alguna condición, unidos a las estructuras de control de flujo son herramientas elementales para el desarrollo de software. 

  • Comprobación de tipos:   <><= y >= Mediante estos operadores, podemos evaluar la igualdad de objetos si los números son menores (<), menores o igual que (<=), mayores (>) o  mayores igual que (>=). 
  • Comprobación de igualdad: ==, != Estos nos permiten evaluar si un objeto es igual a otro (==) o diferente ( != ). 

De esta forma podemos evaluar el comportamiento del usuario, los resultados de las operaciones realizadas por el mismo y de acuerdo a eso seguir un flujo determinado en nuestros programas. 

Operadores Condicionales.

Los operadores condicionales permiten asociar condiciones y mediante estas seguir flujos durante la ejecución del programa. Para entender este punto, debemos echar un vistazo a las tablas de verdad. Dado que cada uno de los operadores se comporta distinto según los valores a los que se confronte. 

Tabla de verdad para Operador (AND)  &&. 

A
Operador
B
Resultado
true
&&
true
true
true
&&
false
false
false
&&
false
false
false
&&
true
false




Tabla de verdad para Operador (OR)  &&. 

AOperadorBResultado
true
||
true
true
true
||
false
true
false
||
false
false
false
||
true
true


Estos operadores se asocian con otras operaciones lógicas que algunas veces pueden ser más complejas que una variable booleana sencilla. Pero de esta manera permiten controlar las acciones realizadas por el usuario, el comportamiento de las variables y junto con herramientas de control de flujo que veremos más adelante definir acciones de los usuarios y cambiar el comportamiento de las ejecuciones.

En la siguiente entrada veremos un ejemplo de esto. 





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.