miércoles, 20 de julio de 2016

Esteganografía en Python con un archivo MIDI parte II

Buenas tardes a todos, regresé por aquí y ahora si voy a publicar el ejercicio de la esteganografía en Python para ocultar mensajes de texto en archivos midi. Básicamente necesitamos la librería midi de python que se puede descargar siguiendo las instrucciones del proyecto en la siguiente url una vez hecho esto, pueden bajar el código fuente de la aplicación de esteganografía en mi bitbucket donde se encuentra el proyecto. Al que le puede interesar, espero que le sea útil.

 https://bitbucket.org/vteran/esteganograf-a-en-python/overview

El proyecto consta de dos clases , ocultamiento y desocultar y un script ejecutar que actúa como punto de entrada. Espero les sea útil y si les gusto, recuerden dejar un comentario o invitarme un café.

viernes, 26 de febrero de 2016

La vida es pasajera

Hace dos noches falleció un hombre muy importante en mi vida, mi tío Juan Carlos para toda mi familia, Kiko. La tristeza en este momento embarga a toda mi familia, aquí en la distancia como emigrante venezolano saber que todos están sobre llevando este duro dolor me hace sentir más triste aún. Para mi, un gran amigo casi como un padre por el rol que jugó en mi vida. Mis primos, son más que mis primos son mis hermanos. Lo extrañare por todo, desde su risa y burla de la situación de Venezuela hasta los almuerzos familiares en el restaurante Yuan Lin, simplemente ya no será lo mismo. Es duro que el sea el primero de mis familiares más cercanos en partir, siendo el más joven de ellos. Estoy seguro que todos lo amábamos, mi hermano y yo lo admirábamos de la gran manera como llevaba a su familia, yo en especial lo admiraba como arquitecto como profesional y en mi juventud siempre e inexperiencia siempre acepte su consejo. "A veces toca regalar el trabajo, para ganar experiencia. La experiencia es lo que vale plata" sus consejos con las mujeres también están en mi mente. La que llegue a ser mi esposa, me ganará por los consejos de mi tío. Aquí, escribiendo este largo párrafo se me enredan los sentimientos. Se me salen las lagrimas, solo pido a Jehova Dios que lo tenga en su seno y que sea salvado por su familia que creemos en Jesús como nuestro salvador, la biblia dice cree en el señor Jesús y tu y tu casa serán salvos, ruego que Jesús pague su rescate como lo ha pagado por mi, y por ser mi familia este descansando con el padre Abraham.

Tenia tiempo sin escribir, pero esto me tiene triste. Solo puedo desahogarme por medio de las letras.

Al que me lea, gracias,

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.