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.