Blog

  • Las maquinas de enseñar

    Las maquinas de enseñar

    Isaac Asimov, no solo para mi si no para muchos amantes de la ciencia ficción, es uno de los mejores autores; muchos de sus relatos con el paso del tiempo han cobrado vida. Ha sido una de las mentes mas influyentes en la robótica, incluso antes de su concepción como una carrera a seguir.

    Hoy les compartiré uno de sus ensayos. Los nuevos maestros. Así se titula este breve pensamiento, que viene en una recopilación de relatos en el libro Visiones de robot. El ensayo mira hacia el futuro, se escribió en 1976, donde los microprocesadores estaban conquistando el mundo, pero aun faltaban algunos años para la aparición del computador personal. Aun se utilizaban grandes servidores para el procesamiento de información y aun faltaban décadas para la aparición de la primera versión de Internet.

    Asimov habla acerca de unas máquinas capaces de enseñar, conectadas a una gran biblioteca, en donde estas máquinas pueden acceder al conocimiento y este es compartido y crece cada día. Con esta descripción es imposible no reconocer esto en la actualidad, a esta gran biblioteca la llamamos Internet. Hoy en día esa imaginativa es toda una realidad. El proponía esa idea como un cambio necesario para el sistema educativo. Pero en realidad, ¿cambio gracias a este avance tecnológico? La triste verdad es que aun falta mucho para que las maquinas nos enseñen, y no por falta de avance tecnológico, si no avance cultural. Podemos atribuir esto al acelerado cambio que se vivía en los noventa, en la generación conocida como Y o mas popularmente millennials. Esto es porque la tecnología paso de gatear a correr, y la mayoría de personas, incluyéndome, vivimos este cambio a través de los videojuegos, con la aparición de diferentes consolas con la necesidad de ver mas pixeles en una pantalla. Tal vez por este motivo aun asociamos la tecnología a entretenimiento, comodidad y placer. Y es innegable que la tecnología nos provee de este efecto, pero aquellos niños millennials que crecimos con este concepto ahora somos una gran parte de las personas que guiamos el futuro, pero quiero enfocarme en la educación, la investigación y los avances tecnológicos. La mayoría de los individuos olvidan ese gran portal al conocimiento, son muy pocas las regiones en donde no hay acceso a Internet, y esto será historia con las nuevas iniciativas de Internet global de Google, Facebook y otras empresas. Y esta gran puerta esta abierta pero falta la cultura de educar a través de las nuevas tecnologías.

    Asimov comenta que gracias a estas nuevas tecnologías no se requiere de un tutor humano, que este al pendiente de los avances del estudiante. Esa idea, en este momento es imposible, por que no somos capaces de separar la tecnología al concepto de dispositivo de entretenimiento. Tenemos Plataformas de enseñanza en línea, herramientas y metodologías para el aprendizaje, pero aun es muy difícil, y lo digo por experiencia propia, seguir una clase y entender todos los conceptos que en ella se imparte es complicado, por que, aunque las herramientas están no sabemos usarlas o no nos gusta, por ejemplo, me enrole en una clase en Coursera, me interese mucho al inicio, estuve completando el material, y aprendí mucho, luego llegue a un tema que se me dificulto bastante, por lo que al no entender y no usar las herramientas que ofrece la plataforma decidí dejar el curso, luego volví a empezarlo y esta vez use los foros y enlaces externos que recomienda el curso, por fin entendí. Pude haberlo completado en el primer intento, si hubiese estado dispuesto a indagar mas.

    Si lo pensamos bien aun queda mucho camino por recorrer en el ámbito de la educación. Hasta ahora se están dando pequeños pasos para integrarla a los colegios y centros que imparten formación. Y la verdad es muy esperanzador ver como nos acoplamos y sobre todo como las nuevas generaciones interactúan con la tecnología para aprender y jugar al tiempo, ya que no quiero demonizar a los juegos, al contrario, son un gran recurso, pero hay que saber orientarlos.

    Países como Japón, que se enfocan mucho en la educación son los que están marcando la pauta en la integración de estas tecnologías. Podemos ver el uso de dispositivos móviles, dispositivos de realidad virtual y aumentada y la integración de la educación con otras plataformas y herramientas.

    Ahora toquemos un punto que a mi me tiene fascinado, la inteligencia artificial. No hay que ser Asimov ni adivino para saber que la inteligencia artificial se integrara cada vez mas en nuestra cotidianidad. Por lo que indudablemente hará parte de la educación. Con los modelos actuales de aprendizaje automático, como las redes neuronales, ya somos capaces de hacer sistemas robustos, que propongan y analicen. ¿Por que no integrar estos sistemas a la enseñanza?, donde un tutor virtual identifica las habilidades y conocimientos del estudiante y propone una enseñanza basada en ese análisis, para reforzar y orientar al estudiante a alcanzar su máximo potencial, y poderle inculcar las materias de su interés; así se evitan clases aburridas, malas notas y la frustración de no entender. Cuando el estudiante se interesa por el tema, realmente es cuando aprende.

    Por ahora solo dejo este pequeño pensamiento e idea en el aire, mas adelante de seguro ampliare un poco mas las expectativas y ahondare en la parte técnica de machine learning.

    Me gustaría conocer tu opinión y que compartas tus ideas también, así que deja tus comentarios.

  • PHP y MySQL

    PHP y MySQL

    PHP y MySQL (Del que ahora deriva MariaDB) son una combinación ganadora, por que es muy fácil implementarlo y desarrollar con estas dos herramientas.

    Para continuar con nuestro curso vamos a realizar una conexión a la base de datos y hacer unas pruebas sencillas, la conexión va a ser directa, sin uso de interfaces ni temas complejos, estos los veremos mas adelante.

    Conectando PHP con MySQL

    En este momento la ultima versión de PHP es la 7.2.6, así que la sintaxis que usare será para la versión 5.5 en adelante, esto lo aclaro por que si tienes una versión antigua debes usar la función mysql_connect, yo en este caso usare la clase mysqli. Si deseas saber que versión de php tienes, puedes usar la instrucción echo phpinfo(); dentro de un documento php, así te mostrara toda la información de PHP con la que cuenta tu equipo o servidor.

    Vamos a crear un archivo, en este caso lo llame 01.ConexionMySQL.php

    <!doctype html>
    <html lang="es">
        <head>
            <meta charset="utf-8">
            <title>PHP y MySQL</title>
            <meta name="description" content="PHP y MySQL template">
            <meta name="author" content="Jhontona.com">
        </head>
        <body>
            <?php
                $host = "localhost";
                $user = "jhontona";
                $password = "phpcurso1";
                $database = "test";
                $mysqli = new mysqli($host, $user, $password, $database);
    
                if ($mysqli->connect_errno) {
                    echo "Fallo al conectar a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
                }
                echo $mysqli->host_info . "\";
    
            ?>
        </body>
    </html>

    Ahora es momento de revisar el código, voy a enfocarme de la línea 15 a la 24, ya que es nuestro código PHP, en las primeras líneas(de la 15 a la 18) estamos declarando variables.

    Variables en PHP

    Si recordamos el anterior post, decíamos que PHP es un lenguaje interpretado y de tipado dinámico, por lo que no es necesario mencionar a que tipo de variable corresponde cada una, es decir, que tipo de valores puede almacenar (Si quieres profundizar en tipados revisa este post).

    Como podemos ver en el anterior ejemplo una variable en PHP se inicializa con el signo $ y seguido el nombre de la variable.

    Después, estamos asignándole un valor a cada variable, con el signo = y luego le pasamos un valor, en nuestro anterior ejemplo todos los valores son de tipo string(texto), pero puede ser de diferentes tipos, y como lo indicamos, puede tomar en el transcurso de la ejecución cualquier otro tipo, vamos a ejemplificar esto con otro pequeño fragmento de código.

     

    Ejemplo de variable con varios tipos

    <?php
    
    /*Tipos de variables*/
    $mivariable = "string"; //Texto
    $mivariable = 4; //Numero
    $mivariable = array(); //Matriz
    $mivariable = 5.32; //Numero decimal
    $mivariable = true; //Booleano (verdadero o falso)
    
    ?>

    En el anterior ejemplo podemos ver como una misma variable puede tomar varios valores de diferentes tipos, si quieres conocer todos los tipos que maneja PHP te dejo el enlace.

    También otra cosa importante es la inclusión de comentarios en el código.
    Adrede incluí los dos tipos de comentarios que maneja PHP, el comentario de varias líneas, que se inicia con /* y se debe cerrar con */, y el comentario de una sola línea //, que solo necesita la apertura, ya que se finaliza automáticamente con el salto de línea.

    Ya que conocemos la teoría sobre variables en PHP continuemos revisando el código.

    En la línea 20 se declara otra variable, y se le asigna una instancia de la clase mysqli, para poder crear un nuevo objeto de este tipo se le pasan unos valores, que en este caso son los valores que almacenamos en las variables antes declaradas. Estos valores corresponden a los datos de conexión a la base de datos. Si quieres conocer mas sobre objetos, clases y conceptos relacionados a la programación orientada a objetos te recomiendo leer este post.

    En PHP para crear una nueva instancia de una objeto se utiliza la sentencia new, que precisamente indica que es un nuevo objeto de un tipo de clase determinado. En la línea 21 estamos utilizando la condición if(si) para preguntar si ocurrió algún error en la conexión. (Si necesitas saber mas sobre las estructuras básicas de programación te dejo este post). Bien, dentro de este condicional tenemos la variable $mysqli que si recordamos era un objeto de clase mysqli, y al ser de este tipo tiene todos sus atributos y métodos(funciones), uno de estos atributos es connect_errno que nos indica si la conexión fue exitosa o no, es decir es una variable de tipo booleano. Si prestamos atención, podemos ver que para acceder a un atributo estamos utilizando los símbolos -> que le indica al interprete de PHP que es un atributo de un objeto.

    La línea 22 se ejecuta si hubo un error, y lo que hace es imprimir el error. Algo nuevo en esta línea es el uso del punto(.) que en PHP es el símbolo para concatenar, es decir, unir dos cadenas de texto.

    Y finalmente en la línea 24 imprimimos el valor de otro atributo de la clase mysqli. Tal vez eso halla sido un poco complejo, pero no te angusties en el transcurso del curso y de la practica entenderás los conceptos, este ejemplo lo saque directamente de la documentación de PHP por lo que te aconsejo que siempre en tus desarrollos y practicas revises el sitio para verificar la sintaxis y el uso de las funciones. También te dejo el link del archivo de esta clase en Github y si tienes dudas o algún comentario por favor déjalo, así podemos seguir aprendiendo todos.

  • Programación orientada a objetos (POO)

    Programación orientada a objetos (POO)

    La programación orientada a objetos (POO o sus siglas en ingles OOP) es un estilo(paradigma) de programación. Donde todo se comporta como un objeto, es decir, se hace una abstracción de un concepto y se lleva a código fuente.

    El concepto de abstracción es muy importante entenderlo ya que es la base de la programación orientada a objetos. Consiste en aislar un objeto de su contexto, e identificar este objeto ¿Qué hace?¿Cómo lo hace? y ¿Para que lo hace?. Estas preguntas se resuelven haciendo una análisis del sistema y llevándolo a modelos de código, donde se expresan las características del objeto deseado. Durante este análisis (abstracción) se identifican las características esenciales y las no esenciales, esto con el fin de generar la representación en código.

    Ahora veamos los conceptos por los que esta compuesto la forma de trabajo orientada a objetos.

    Clase

    Una clase es la abstracción de un objeto/concepto concreto, que tiene tiene propiedades(atributos) y realiza algunas acciones(funciones o métodos) y se pueden crear uno o mas copias de este a partir de un modelo.

    Vamos a ver como esta compuesto. Para ejemplificar y que quede mas claro los conceptos vamos a usar el típico ejemplo de una fabrica de vehículos. Supongamos que queremos construir un carro.

    Atributo

    Un atributo es una característica propia de una clase, por ejemplo, en el caso del carro los atributos pueden ser color, cantidad de ruedas, material, etc.. (podemos listar N cantidad de atributos, siempre y cuando sean necesarios para la descripción o funcionamiento de la clase).

    Método

    Un método es una acción que realiza nuestra clase. Netamente en programación es una porción de código encapsulado que se ejecuta en respuesta a alguna llamada, interacción u otra acción(método). Por ejemplo, en nuestro carro, algunos eventos pueden ser: encender, acelerar, frenar… El termino de encapsulamiento es muy importante en la programación orientada a objetos, ya que todo nuestro código debe ir correctamente estructurado, y los métodos deben ser concretos y bien definidos. (Para profundizar en código limpio te dejo este post). El encapsulamiento se refiere a la agrupación de elementos propios con el objetivo de crear un mayor nivel de cohesión y reutilización del código. En alguna literatura y arquitecturas de trabajo tenemos una separación(clasificación) de estos métodos en métodos, funciones y eventos, pero por lo general usaremos método o función para referirnos a lo mismo.

    Con estos conceptos ya podemos plantear un ejemplo completo de nuestra clase carro, así­ que lo pasaremos a código. Utilizare C# para hacer el ejercicio, aplicado a un proyecto de consola. Podríamos utilizar cualquier otro lenguaje que soporte este paradigma, yo elijo este simplemente por que la lectura de código se me hace muy sencilla y así­ todos podemos ver y entender los ejemplos un poco mejor.

     

    Clase vehí­culo

    public class Vehiculo {
        private string color;
        private int cantidadRuedas;
        private string material;
    
        public void encender() {}
        public void acelerar() {}
        public void frenar() {}
    }

    En el anterior ejemplo de código podemos ver la construcción de la clase vehículo, en donde le asignamos algunos atributos y métodos. Podemos ver que estamos usando unas palabras clave antes de declarar un atributo o método(private, public). No entrare a explicar como usarlas en este lenguaje, si no que dará una definición general, aplicable a cualquier lenguaje. Estas palabras nos indican el alcance(scope) de un atributo, método u objeto. ¿Qué quiere decir con alcance? Pues el nivel de visibilidad dentro del contexto. Es decir a que tiene acceso el contexto de un objeto. Aquí entramos a otro concepto fundamental de la programación orientada a objetos, el principio de ocultación. Esto quiere decir que cada objeto esta ligado a su propio contexto y aislado para el resto del entorno. Por ejemplo en nuestra clase vehículo, seria publico el color del carro, pero, por ejemplo, la marca del motor, no queremos que todos la conozcan, por lo que seria privado, o protegido. Este principio aplica para todos los objetos con los que se trabaje.

    En el ejemplo de código anterior deje los atributos como privados, si queremos exponerlos utilizaremos una función GET(obtener valor) o SET(asignar valor) para por medio de ellas tener acceso a este valor.

    Hemos hablado bastante de los objetos e hicimos un ejemplo de la declaración de una clase. No hay que confundir objeto y clase, son términos totalmente diferentes. Un objeto es la instancia de una clase, es decir, la clase anterior es nuestro modelo abstracto y una instancia de este objeto seria un vehículo como tal. Veamos un ejemplo de la creación de un objeto de tipo vehículo con código.

     

    Instanciando una clase

    Vehiculo modelo1 = new Vehiculo();
    Vehiculo modelo2 = new Vehiculo();
    Vehiculo modelo3 = new Vehiculo();

    Hemos creado varias instancias(objetos) de la clase vehículo, ahora hagamos algunos experimentos.
    Antes de continuar aclaro que a nuestra clase Vehiculo le agregue los getters y setters para trabajar con los atributos, a continuación voy a colocar un ejemplo para el atributo color.

    GET y SET

    public string getColor() {
        return this.color;
    }
    
    public void setColor(string color) {
        this.color = color;
    }

    En la mayoría de lenguajes lo pueden hacer de esta manera, pero en el código completo también encontraran otro modo para hacerlo con una notación propia del lenguaje.

    Bueno ahora si continuemos. Creamos tres vehículos, a cada uno vamos a asignarle las ruedas, un color y un material, finalmente imprimimos en pantalla el color de cada uno.

    Usando los métodos get y set

    modelo1.cantidadRuedas = 4;
    modelo2.cantidadRuedas = 4;
    modelo3.cantidadRuedas = 4;
    modelo1.setColor("Rojo");
    modelo2.setColor("Amarillo");
    modelo3.setColor("Azul");
    modelo1.material = "Aluminio";
    modelo2.material = "Plastico";
    modelo3.material = "Fibra De Carbono";
    Console.WriteLine(modelo1.getColor());
    Console.WriteLine(modelo2.getColor());
    Console.WriteLine(modelo3.getColor());

    Tenemos en este momento una clase Vehiculo, con la cual hemos creado tres carros, pero si lo pensamos bien podemos crear otro tipo de vehículos como una bicicleta, moto u otro tipo de vehículo sobre ruedas. Así­ que vamos a tocar otro pilar de la programación orientada a objetos.

    Herencia

    Aunque las clases se crean para estar aisladas de un contexto, estas se deben relacionar con otras, para así dar sentido y funcionalidad a ese contexto; este concepto podemos entenderlo como una relación padre-hijo, donde el hijo hereda propiedades y características del padre, dependiendo del scope que tengan estas características definidas el hijo podrá o no heredar características que estén como publicas o protegidas en el padre.

     

    Veamos el código. Agregaré dos clases para mostrar como funciona la herencia.

    Clase Carro que hereda de la clase Vehiculo

    public class Carro : Vehiculo {
        public Carro() {
            this.cantidadRuedas = 4;
            this.setColor("Dorado");
            this.material = "Hierro";
        }
    
        public Carro(string color, string material) {
            this.cantidadRuedas = 4;
            this.setColor(color);
            this.material = material;
        }
    }

    Clase Bicicleta que hereda de la clase Vehiculo

    public class Bicicleta : Vehiculo {
        public Bicicleta() {
            this.cantidadRuedas = 2;
            this.material = "Aluminio";
            this.setColor("Cromado");
        }
    
        public Bicicleta(string color) {
            this.cantidadRuedas = 2;
            this.material = "Aluminio";
            this.setColor(color);
        }
    }

    Podemos hablar de otro termino viendo el ejemplo, y son los constructores, no son propios de la programación orientada a objetos, pero se están convirtiendo en un estándar para todos los lenguajes que apuntan a este paradigma. Acerca de este tema solo voy a decir que el constructor es un método que se caracteriza por tener el mismo nombre de la clase y es el encargado de inicializar la instancia de la clase. Un tema mucho mas importante, y que si es propio de este paradigma es el concepto de polimorfismo, este atributo de la programación orientada a objetos nos permite crear varios métodos con el mismo nombre pero que se comporten de manera diferente dependiendo de los parámetros que recibe. En el código anterior podemos ver el ejemplo, donde hay dos constructores para cada clase y así ilustrar esta característica. También lo podríamos hacer con cualquier otro método.

    Hemos revisado el concepto de herencia y ahora podemos segmentar nuestra aplicación en diferentes clases con cierta relación, esto nos lleva a otro principio de la programación orientada a objetos. La modularidad, que se refiere a la capacidad de separar estas clases y agruparlas en módulos, es decir, secciones que comparten un mismo contexto.

    Por ultimo nos queda un ultimo termino que ver, este es la recolección de basura, que se refiere a la capacidad del lenguaje de eliminar de memoria los objetos que ya no se van a usar. La mayoría de lenguajes que usan este paradigma lo hacen de manera automática.

    Y esto es todo amigos… Dejamos por aquí esta introducción a POO, espero les halla sido de mucha utilidad, recuerden dejar sus comentarios y preguntas.

  • Código limpio – Haciendo código bien y bonito

    Código limpio – Haciendo código bien y bonito

    Cuando estas aprendiendo a programar te enfocas primero en la lógica, luego en el lenguaje y rara vez nos detenemos a pensar en la forma de hacerlo, es decir, como pasamos de la lógica al lenguaje. Es justamente el turno de revisar como debemos escribir este código, ver buenas practicas y como aplicarlas. El contenido de este post esta basado en el libro Código limpio(Clean code) de Robert C. Martin y también en mi experiencia. Lo estructurare tal cual esta dividido en el libro.

    ¿Por qué hacer código limpio?

    Si estas leyendo este post, o estas interesado en el libro, eres programador o futuro programador, y crees en la necesidad de hacer un código elegante. No por simple capricho o ego, si no por que a medida que te internas mas en el mundo del desarrollo de software, puedes ver sus falencias. Mientras estaba en el primer semestre de mi especialización en Ingeniería de software, tocamos el origen de este problema, se remonta a la conferencia de Crisis del software que se celebro en 1968, esta se llevo a cabo con el objetivo de identificar causas y dar posibles soluciones a los problemas con los que se venia trabajando el software y aun en la actualidad continua. Se identificaron muchas causas y se dijo que la calidad de un producto se mide por su funcionamiento. En aquel entonces sirvió, y esto dio paso a definición de metodologías, arquitecturas y patrones de desarrollo de software, pero gracias a estas nuevas proposiciones se descubrieron nuevos problemas que estaban ocultos ¿Por qué te cuento esto?, por una sencilla razón, “Aquel que no conoce la historia, está condenado a repetirla“. Miremos ahora el problema que nos concierne, y que actualmente no es tratado como un problema real, si no como un añadido, ya que son pocos los que trabajan con estas pautas de código limpio. La pregunta mas lógica a continuación sería ¿por qué es un problema no trabajar con código limpio? La respuesta te la dará la experiencia, en mi caso llevo varios años trabajando y he sido parte de fracasos de software precisamente por este detallito, se hace el código, y por las prisas, trabajo represado y falta de compromiso como profesional se hace el desarrollo a la carrera, y esto no es el problema. El problema no es correr, el problema es salirse de la pista para coger un atajo. Por ejemplo, inicias con un proyecto, tienes todas las ganas de hacerlo bien, es tu bebe y debes mimarlo, hacerlo fuerte y también sentirte orgulloso de el, pero te piden algo nuevo, o cambian las fechas de entrega y debes correr, ejercen presión sobre ti para generar una entrega rápida y optas por hacerlo rápido y olvidarte de ciertos estándares o la forma de trabajo con la que venias usando. Luego con el tiempo esto se transforma en una bola de nieve, va creciendo con cada iteración que se da, y esto es un grave problema, por que llega un punto en el que el código se vuelve muy difícil de mantener, las personas que lo trabajan se aburren y lo dejan de lado, Se convierte en un ciclo donde un error genera otro error, hasta el punto en que se piensa en reestructurar toda la aplicación, para lastimosamente luego cometer los mismos errores.

    Los lenguajes de programación han ido avanzando, encontramos desde lenguaje de maquina a lenguaje de alto nivel, que se acercan lo mas que pueden al lenguaje natural, pero si el programador es incapaz de expresarse correctamente su código estará lleno de errores, y los errores llaman mas errores. Otro caso, también podría ser que hagamos el código de afán y pospongamos el refinamiento, aquí entra la Ley de LeBlanc, que dice que después es igual a nunca, por eso, lo correcto es desde el inicio fijarnos un camino y seguir las buenas practicas y estándares. Debemos convertirnos en defensores del código elegante, del profesionalismo, eso hace parte de nuestra ética como ingenieros.

    El código limpio debe cumplir ciertas características, ser de fácil lectura, eficiente, concreto, legible, mejora con cada iteración y no contiene duplicados. En el desarrollo de este post entenderás estos principios mas a fondo.

    Nombres con sentido

    En la programación todo el tiempo estamos utilizando nombres, para las variables, funciones, clases. Por lo que la primera regla para un código limpio es crear correctamente estos nombres.

    Dicientes

    Esto se refiere a la capacidad de expresar su propósito, dejar de lado aquellas variables de unas cuantas letras que no expresaban absolutamente nada.

     

    Ejemplo de nombre de variable

    //Incorecto
    int a = 12;
    //Correcto
    int cantidadMeses = 12;

    Diferentes

    Los nombres de las variables, métodos, clases, etc. deben ser diferentes entre si y expresar correctamente su funcionamiento. Por ejemplo, supongamos que tenemos dos funciones, una se llama traerUsuario y la otra getUsuario. Esto nos puede llevar a una confusión y a perder tiempo revisando el código de cada una de estas funciones para verificar cual es la que necesitamos. Esto se puede evitar asignando nombres claros y diferentes.

    No redundantes

    Esto se refiere a no repetir las mismas palabras dentro de un nombre, ya que podemos confundir al lector. También lo podemos aplicar a no repetir los tipos de datos. Miremos el siguiente ejemplo:

    Redundancia en los nombres

    string nombreString = "";

    La palabra string dentro del nombre esta de mas, y si es necesario especificar el tipo de dato, se aconseja que sean palabras diferentes a las reservadas por el lenguaje.

    Pronunciación

    Un dato que me pareció curioso y válido, es que pasamos la mayoría del tiempo de codificación, no escribiendo código, por el contrario, la mayor parte esta dedicada a la lectura del código. Por este motivo tanto énfasis en hacer un código limpio y legible, por eso cada bloque de código se debe poder pronunciar y acercarse lo mas que se pueda al lenguaje natural, claro esta sin excesos, tampoco podemos crear todo un párrafo como nombre de algún objeto, siempre hay que tener buen criterio y la experiencia y uso de estas técnicas son las que nos ayudaran a mejorar.

    Codificaciones

    Debemos evitar el uso de siglas o codificaciones propias, ya que lo que puede ser claro o evidente para mi, puede que no lo sea para los demás. Si se desea usar algún tipo de convención, sigla o codificación especial debe ser consensuada y compartida a cada integrante del equipo.

     

    Para concluir este segmento y continuar revisando los principios del código limpio concluiremos diciendo que los nombres deben tener sentido dentro de su contexto, ser concretos, claros. Podríamos hacer una ejercicio, es tedioso y poco productivo, pero es muy educativo; podemos pasarla la lista de nombres a otra persona y si logra armar el contexto(clase) a partir de nuestros nombres de variables y funciones hemos realizado un excelente trabajo.

    Algunas recomendaciones para nombrar clases es no usar verbos, por el contrario en las funciones se recomienda siempre usarlos. Y por ultimo, aunque parezca contradictorio, intenta hacer nombres cortos.

  • Estructuras básicas de programación

    Estructuras básicas de programación

    Hola querido lector y entusiasta de la programación. En este post te mostrare las estructuras de control que son la base para la programación estructurada. Las condiciones y los ciclos. Para hablar de este tema no tomare ningún lenguaje en concreto, es mas daré ejemplos de varios lenguajes y me referiré a los conceptos basado en el teorema de programación estructurada, teniendo siempre presente que estas estructuras de control existen o se pueden recrear en cualquier lenguaje de programación.

    Estructuras condicionales o de selección

    Este tipo de estructuras ejecuta un bloque de código dependiendo de una o varias condiciones.

    Condición simple

    Iniciamos con esta estructura de control, ya que es la mas usada, sencilla y fácil de entender.

    Lo que permite esta estructura es hacer una evaluación simple, retornando como respuesta un valor (falso o verdadero).

    IF (Condición) THEN
        Hacer esto si la condición se cumple
    ELSE
        Hacer esto si la condición no se cumple
    END IF

    Los siguientes son ejemplos de una condición simple, con opción de ejecución en caso de que la condición sea verdadera o falsa (IF ELSE), ya que podemos hacer la estructura mas sencilla solo validando la condición y no hacer nada en caso de que no se cumpla la condición (IF) ya que la instrucción ELSE es opcional.
    Para el ejemplo vamos a utilizar dos variables y vamos a suponer que tienen asignado un valor numérico. El objetivo es validar si la primera variable es mayor a la segunda.
    Para los ejemplos utilizare los lenguajes que yo mas utilizo, si quieres preguntar por algún otro o quieres comentar con tu ejemplo, dejalo al finalizar el post en los comentarios.

    Nota: Existen las condiciones inline pero esto será tema para otra ocasión al ser un poco mas complejo

    PHP valida número mayor
    if($a > $b){
        echo $a;
    } else {
        echo $b;
    }
    C# valida número mayor
    if(a > b){    
        Console.WriteLine(a.ToString());
    } else {
        Console.WriteLine(b.ToString());
    }
    Python valida número mayor
    if a > b:
        print(a)
    else:
        print(b)
    Javascript valida número mayor
    if(a > b) {
        console.log(a);
    } else {
        console.log(b);
    }

    Estas condiciones simples se pueden volver mas complejas, a medida que agregamos mas condiciones. Además se pueden anidar una dentro de otra, miremos un ejemplo en seudocódigo.

    IF (Condición 1) THEN
        (Código si condición 1)
    ELSEIF (Condición 2) THEN
        (Código si condición 2)
    ELSEIF (Condición 3) THEN
        (Código si condición 3)
    ELSE
        (Código si ninguna de las condiciones se cumplió)
    END IF

    Selección

    Para evitar hacer varias condiciones simples anidadas se creo el control de selección, que se utiliza para escoger una opción dependiendo de una condición.

    Select (Expresión)
        Case Valor1
            (Código que se ejecuta si Expresión = Valor1)
        Case Valor2
            (Código que se ejecuta si Expresión = Valor2)
        Case Valor n
            (Código que se ejecuta si Expresión = Valorn)
        Case Else
            (Código que se ejecuta si Expresión no coincide con ningún valor anterior)
    End Select

    Veamos los ejemplos de este control con algunos lenguajes. Hay una particularidad con Python y es que no tiene por defecto el control switch, pero lo podemos recrear con varios IF ELSE o con un diccionario, como esta en el ejemplo.

    PHP selección con Switch
    switch ($i) {
        case 0:
            echo "i es igual a 0";
            break;
        case 1:
            echo "i es igual a 1";
            break;
        case 2:
            echo "i es igual a 2";
            break;
        default:
            echo "i no es igual a 0, 1 ni 2";
            break;
    }
    C# selección con Switch
    switch(i) {
        case 0:
            Console.WriteLine("i es igual a 0");
            break;
        case 1:
            Console.WriteLine("i es igual a 1");
            break;
        case 2:
            Console.WriteLine("i es igual a 2");
            break;
        default:
            Console.WriteLine("i no es igual a 0, 1 ni 2");
            break;
    }
    Python selección con diccionario
    switch = {0: "i es igual a 0", 1: "i es igual a 1", 2: "i es igual a 2"}
    print switch.get(i, "i no es igual a 0, 1 ni 2")
    Javascript selección con Switch
    switch (i) {
        case 0:
            console.log(i es igual a 0);
            break;
        case 1:
            console.log(i es igual a 1);
            break;
        case 2:
            console.log(i es igual a 2);
            break;
        default:
            console.log("i no es igual a 0, 1 ni 2");
            break;
    }

    Estructuras iterativas o de bucles

    Estas estructuras repiten un fragmento de código N veces, dependiendo de la condición que se este efectuando. Mientras la condición se cumpla el control ejecutara el código, una vez la condición deje de ser cierta sale del ciclo.

    Hay algunos tipos de estructuras que no voy a ejemplificar aquí, como lo son el do-while y el do-until, ya que en seudocódigo y en la teoría son estructuras diferentes, pero en los lenguajes modernos son las mismas estructuras que pasare a mencionar pero con algunos cambios en las condiciones que hace que se comporten de la manera deseada.

    Ciclo PARA – REPETIR

    Este control tiene la característica que desde el inicio se le pude indicar cuantas repeticiones debe hacer, al hacerlo de esta manera creamos una estructura de control Para(FOR), es decir con un numero definido de iteraciones. Si la validación la hacemos al final se convierte en un ciclo Repetir,

    FOR i=0 a 10, STEP = 1
        (Ejecutar código)
    END FOR

    A continuación para los ejemplos de código imprimiremos los números de 1 a 10.

    PHP ciclo For
    for ($i = 1; $i <= 10; $i++) {
        echo $i;
    }
    C# ciclo For
    for (int i = 1; i <= 10; i++) {
        Console.WriteLine(i);
    }
    Python ciclo For
    for x in range(1, 11):
        print(x)
    Javascript ciclo For
    for (let i = 1; i <= 10; i++) {
        console.log(i);
    }

    Ciclo MIENTRAS

    Este ciclo espera siempre una respuesta de una condición, ejecuta un bloque de código mientras que el resultado de la validación de la condición sea verdadera.

    Al igual que el anterior ejemplo, imprimiremos los números de 1 a 10.

    WHILE (Condición)
        (Bloque de código a ejecutar)
    END WHILE
    PHP ciclo While
    while ($i <= 10) {
        echo $i++;
    }
    C# ciclo While
    while (i <= 10) {
        Console.WriteLine(i);
        i++;
    }
    Python ciclo While
    while (i <= 10):
        print i
        i = i + 1
    Javascript ciclo While
    while (i <= 10) {
        console.log(i);
        i = i + 1;
    }

    Hasta aquí­ ha llegado este post, espero que lo hallas disfrutado mucho y te halla sido de mucha ayuda, muy educativo e interesante. No olvides compartirlo, déjame tus comentarios y dudas, hasta la próxima.

  • Introducción a PHP

    Introducción a PHP

    Este es el primer post de un muy prometido curso sobre PHP, los talleres los hare en vídeos que podrás encontrar al final de cada post, pero en cada uno de estos tendrás acceso al repositorio de GitHub y a la tan necesaria información teórica. Bueno y sin mas parafernalia entremos en materia.

    ¿Qué es PHP?”

    PHP es un lenguaje de programación interpretado, que se usa junto con el código HTML para crear paginas web, que es altamente famoso por contar con una gran cantidad de soporte y documentación.

    Para comenzar a utilizar PHP se necesita de un servidor web que le de soporte, recomiendo para desarrollo usar XAMPP, siempre he trabajado con este y nunca he tenido un problema grave. No voy a explicar la instalación ya que se me hace muy sencilla, solo debes tener cuidado que al momento de arrancar el Apache(Es el servidor que soporta PHP) el puerto este libre, por defecto toma el 80 y a veces puede dar conflicto, sobre todo si tienes Skype. Cierra estos programas o configura Apache para que inicie en otro puerto. Al igual si tienes dudas puedes dejarla en los comentarios.
    Continuando, una vez tenemos el servidor montado ya podemos trabajar con PHP, creando archivos con la extensión .php.

    ¿Porqué usar PHP?

    En otro post hablé sobre las ventajas de los lenguajes de tipado dinámico, y además de estas ventajas hay otras mas que pasare a mencionar.

    • Yo diría que la mayor ventaja es su alta difusión, casi cualquier servidor de hosting ofrece por defecto un servidor para PHP.
    • Otra ventaja es que para usarlo no necesitas licencias, y aprenderlo es muy fácil ya que tiene mucha, pero mucha documentación.
    • Es un lenguaje multiplataforma, lo puedes instalar, usar y aprender en cualquier entorno.
    • Junto con MySQL son la pareja mas conocida en la web.
    • Es de código abierto. Puedes formar parte del desarrollo de este lenguaje.

    Hola mundo

    Como mencione anteriormente, yo uso XAMPP, así que los ejemplos y capturas de pantalla que haga estarán sobre este servidor.
    Crearé un archivo llamado index.php con el siguiente código:

    <span>Hola mundo</span>

    Este es simplemente código HTML, pero funciona, ya que como lo había mencionado PHP es interpretado, es mas, en algunas fuentes lo llaman empotrado, ya que hace uso de la semántica de HTML, aunque PHP quiere dejar de lado esto, y que se trabaje de una forma orientada a objetos para olvidarnos de aquellos tiempos del código espagueti, que fue como en un principio inicio y se hizo popular PHP. Así que vamos a cambiar solo un poco ese código. Vamos a agregarle las etiquetas de inicio y cierre de PHP junto con la primera instrucción que veremos.

    <?php
    echo "<span>Hola mundo</span>";
    ?>

    ¿Qué podemos ver de las líneas anteriores de código? Primero conocemos la etiqueta de apertura de PHP, y en la tercera lineá la etiqueta de cierre, esto le indica al interprete que todo el contenido que este dentro de estas etiquetas se entenderá como código PHP.
    Ahora en la segunda lineá vemos nuestra primera función de PHP, bueno en realidad no es una función, es una instrucción propia del lenguaje. Y esta instrucción lo que hace es mostrar una cadena de texto, en este caso le estamos pasando nuestro “Hola Mundo” y finalizamos nuestra lineá con el caracter ; el cual es muy importante, ya que finaliza nuestra lineá y en este caso también la instrucción echo.
    Hay que recordar que PHP nació como un lenguaje estructurado, para ser usado junto con HTML, gracias a esto se popularizo, pero esto también le creo una “Época oscura”, donde casi ni se podía diferenciar el código de script y de HTML, era un caos hacer mantenimiento, por este motivo yo personalmente no aconsejo usar etiquetas HTML dentro del código PHP, mas adelante te enseñare formas elegantes de hacerlo. Por ahora solo quería comentarles que se puede hacer.
    PHP es interpretado lineá a lineá, por lo que es muy importante siempre finalizarlas con ;(punto y coma).

    Vamos a dejar por aquí este post, recuerda que este es el primero del curso de PHP, y por cierto te dejo el enlace a la documentación oficial de PHP. Deja tus comentarios, inquietudes y sugerencias.

  • Batman Ninja, una aventura muy diferente

    Batman Ninja, una aventura muy diferente

    Les compartiré dos de mis hobbies favoritos, el anime y los comics. En comics tengo una predilección por Vertigo Comics y DC, en especial el universo de Batman, me gusta mucho este personaje.

    Con esta entrega de anime se mezclan estos dos mundos, con una animación realmente increíble, cada escena es super bonita y atrapante, es una historia muy original y a pesar de que los mas fanáticos nos podríamos sentir un poco reacios, es mas en algunas ocasiones mientras veía la película pensé “como es posible esto”, pero gracias al anime es posible, es una historia muy diferente al mundo conocido de Batman, pero no pierde esa oscuridad, y cada uno de los personajes sigue manteniendo esa personalidad y toque distintivos, pero con el añadido de los efectos visuales japoneses y el remarcado arte americano, lo vuelvo a decir, la animación es absolutamente fascinante.

    Les contare un poco la introducción y de que va la película sin spoilers, para que se animen y la vean. La historia inicia en Arkham Asylum mientras Batman lucha con Gorilla Grodd, este villano esta creando una maquina del tiempo y la activa provocando que todos nuestro héroes y villanos viajen al Japón Feudal, al periodo Sengoku, allí se enfrentaran en distintas facciones para unificar el país.

    Definitivamente una historia que engancha, muy diferente y ubicado en un periodo que aunque muy usado en los animes y diferentes historias, ahora interpretado por algunos de los héroes y villanos mas icónicos de nuestra cultura.

    Espero que de verdad sigan haciendo este tipo de historias, y que de vez en cuando le pasen la batuta a los japoneses, ya que hicieron una animación de muy buena calidad. Bueno, espero vean esta animación y dejen sus comentarios, realmente muy recomendable.

  • Hello World – Quiero programar ¿Cómo comienzo?

    Hello World – Quiero programar ¿Cómo comienzo?

    Soy programador hace unos 5 años, empecé dando mis primeros pasos empíricamente, leyendo blogs, viendo vídeos y por su puesto con el método de prueba y error, que considero que es la mejor manera de aprender a programar. Pero antes de que te lances a programar déjame decirte que es muy fácil y al mismo tiempo no lo es. En mi opinión creo que todos deberían saber programar, pero no todos se pueden dedicar a esto, de aquí radica mi anterior afirmación.

    Hoy precisamente te quiero compartir los fundamentos de programación, que te van a ayudar muchísimo si quieres dedicarte profesionalmente a esto, o si no como dije todos deberían saber programar.

    El nombre del pots es Hello World (Hola mundo), y estas son las primeras palabras de un programador, independientemente del lenguaje siempre serán nuestros primeros pasos y al igual que en la vida, antes de correr debes andar, y te daré unos consejos para que te inicies exitosamente en la programación.

    Tomate tu tiempo

    Cada individuo aprende de maneras diferentes y a intervalos diferentes de tiempo, en mi caso la lectura y la practica me ayudaron muchísimo, así­ que al igual que yo lo hice, puedes encontrar tu método de aprendizaje, te aconsejo muchísimo que te apoyes en la web, busques literatura, libros, plataformas o aplicaciones que te ayuden, encontraras muchos recursos gratuitos y de pago, como por ejemplo este sitio web o mi canal de YouTube, creeme que esta comunidad es muy grande y muy colaborativa.

    Una vez tengas los recursos de aprendizaje, dedicale tiempo al mismo, y sobre todo practica lo que haz aprendido. Mide tu ritmo de aprendizaje, como dije al principio, todos tenemos nuestra propio ritmo de aprendizaje, así­ que no te angusties si no entiendes algo. Busca la manera de entenderlo, si no logras comprender cambia el recurso o la metodología. Algo que te dará un gran impulso es crear un proyecto propio, busca algo que te apasione y llévalo al mundo de la programación, por ejemplo ¿tienes una idea? empieza haciendo bocetos de la idea, empieza a programar un modulo pequeño de la misma, veras que con el tiempo esa pequeña idea que te apasiona te impulsara a aprender y mejorar, y dirás ¿Cómo voy a hacer mi idea realidad si no se programar? pero ahí­ es precisamente donde radica lo bonito del asunto, a medida que empiezas a desarrollar tu idea encontraras impedimentos y estos te empujaran a aprender y a superar estos retos.

    Todo esta en la mente

    Vuelvo a repetir esta frase, “todos deberían saber programar”, y es que la programación esta en todo, programar no es solo sentarse frente a un computador y digitar hasta que salga fuego entre los dedos; la programación esta en cada decisión que se toma, la programación inicia en nuestra proceso de pensamiento. Por ejemplo, Cuando queremos elegir entre un helado de fresa o chocolate (If – Else) utilizamos siempre condiciones, podemos decir que el ser humano programa antes del nacimiento de los computadores y es que todo lo podemos pasar a condiciones, ciclos o algoritmos. ¿Y a que viene toda esta carreta? Precisamente piensa en las situaciones cotidianas como un algoritmo, intenta deducir cada función, cada control. Por ejemplo en el anterior ejemplo de la selección del helado intenta pensar en el seudocódigo, a continuación te doy un ejemplo de como hacerlo.

    programa elegirHelado
        Si heladoChocolate esMejor Entonces
            comprar heladoChocolate
        Si no Entonces
            comprar heladoFresa
        Fin Si

    Como vez, es algo muy sencillo de entender y que luego se puede pasar fácilmente a cualquier lenguaje de programación; esto lo puedes hacer mentalmente o en un a hoja de papel o si prefieres puedes utilizar alguna herramienta como PSeInt, y esto va a ser un gran ejercicio, es mas, ahora hay herramientas con las que puedes hacer juegos 2D y aplicaciones sin siquiera escribir una lineá de código, solo debes estructurar correctamente el seudocódigo y la plataforma hará el resto, ejemplo de estas aplicaciones son Scratch o Construct 2.

    Así que la esencia de la programación esta en pensar antes de actuar, dedícale tiempo al análisis del problema, estructura bien la solución, ve de pequeño a grande, piensa en pequeñas soluciones que se unifiquen en una grande, piensa en pequeñas ideas, pequeños problemas, aprende a descomponerlo todo en pequeñas situaciones o funciones para así luego formar algo de lo que te sientas satisfecho. Y es mas, este es un principio de la programación orientada a objetos, que luego revisaremos en otro post.

    Desarrolla tu estilo

    Es muy importante que te sientas a gusto con lo que estas haciendo, de lo contrario lo vas a ver como un trabajo o peor como algo muy frustrante y tedioso. Se podría colocar un paralelismo entre la programación y la gastronomía, en las dos hay recetas, hay utensilios y se desea la satisfacción del consumidor, pero lo que yo quiero destacar es que la realización de un chef esta en innovar y crear, no es lo mismo seguir la receta a modificar o crear tu propia receta; en la programación es igual, debes conocer los estándares, conocer ciertas reglas básicas, y estas cambian dependiendo de las herramientas que uses, pero siempre estará tu sello personal en cada código que escribas.

    Este punto es un poco difícil de explicarlo y entenderlo, solo con la practica lo podrás notar, cuando comiences a trabajar con otros programadores, te darás cuenta, en el código se puede saber el conocimiento de una persona, su organización, hasta su estado de animo y aunque no lo parezca este punto es muy importante, por que debes desarrollar y mejorar tu forma de transmitir esas ideas y de plasmarlas en un código.

    Solo me queda decirte animo, no te rindas, practica y practica, nunca se termina de aprender, siempre puedes mejorar mas, y no te pierdas los siguientes post, este solo es el principio de una serie sobre los fundamentos de programación. También no te olvides dejar tu comentario opinando, preguntando o sugiriendo algún tema de interés.

  • ¿Como escribir correctamente?

    ¿Como escribir correctamente?

    Para quien es nuevo en este blog, me presento. Soy Jhonathan Borda, ingeniero de sistemas. Se preguntaran que hace un ingeniero de sistemas escribiendo sobre redacción y les respondo que la programación es otro tipo de escritura, pero no quiero hacer un símil sobre programación y redacción. Aquí vamos a hablar de escritura, pura y dura. De como escribir.

    El proceso de escribir

    Me gusta mucho leer. Mis géneros predilectos son misterio y terror. Entre mis escritores preferidos se encuentra H.P. Lovecraft, Clive Barker y claro Stephen King. Podría hablar sobre sus fantásticas historias, su prosa o estilos literarios pero lo que aquí nos compete es la redacción.

    El maestro King, en su libro Mientras escribo, nos cuenta un poco de su vida por medio de una corta autobiografía. Además comparte su proceso de escritura, el que obviamente ha sido pulido a través de una exitosa y larga carrera como autor. Justamente el objetivo de este post es hablar sobre el proceso de escritura siguiendo la metodología y consejos que se detallan en este libro.

    La caja de herramientas

    Lo primero, es lo primero y nuestra primera herramienta es el vocabulario. Tal cual como te expresas en la vida real debes de llevarlo a tu manera de redactar. Ser fiel a tu propio estilo e identidad. Obviamente teniendo en cuenta las diferencias de entorno. No es lo mismo hablar con un amigo que con tu jefe. De esta manera logramos ser auténticos y expresarnos de manera correcta y veraz. Algo que recalca mucho a través de toda la lectura del libro es hablar con verdad. No puedes engañarte a ti mismo rebuscando palabras o decorando con expresiones que tal vez nunca haz escuchado. Esto provoca que lo que cuentas suene forzado.

    El segundo punto a revisar es la gramática. Obviamente es la cara de presentación y la forma de dar a entender correctamente nuestro mensaje. En el libro se dan recomendaciones a otros textos para aprender un poco acerca de esto aunque son para lengua inglesa, así que me di a la tarea de buscar un buen libro sobre redacción y gramática para el español. En este caso seleccione Redacción sin dolor, de Sandro Cohen, en su sexta edición. Tiene muy buenas criticas en la play store y le di un vistazo. Resulto ser un libro de gran utilidad y muy ameno, exceptuando la tercera parte. Se nota el cambio de autor y el tema tampoco es muy ameno de navegar, pero dejando de lado ese pequeño, digamos, mal entendido (es mi opinión personal y tal vez mas adelante lo este releyendo por alguna consulta), es un gran libro; por lo tanto lo utilizaremos como referencia para consultar y conocer las reglas ortográficas y de gramática.

    Puntuación

    El punto, para estar juntos aunque no revueltos: ¡rehúya, a toda costa, el encabalgamiento!

    Debemos dejar como referencia que una oración esta compuesta por una o mas palabras que tienen sentido completo. A partir de la anterior definición podemos empezar a trabajar.

    El punto es el mas sencillo de los signos de puntuación. Su uso se limita a separar el escrito en secciones digeribles. Por ejemplo, el punto seguido separa oraciones dentro de un mismo párrafo. El punto aparte nos indica un cambio mucho mas grande, inicia un nuevo párrafo y el punto final nos indica precisamente la culminación del escrito. No voy a hondar mas en definiciones o ejemplos ya que considero que se entiende la función del punto. Al igual, como todo en internet, queda abierto a debate si falta o sobra algo de esa pequeña síntesis.

    Ahora pasamos a la coma, esta (desde mi humilde opinión) es mas interesante. Tuve bastantes problemas al momento de identificar donde dejar un punto o una coma. Era muy fanático de colocar siempre puntos, lo que provocaba que perdiera las relaciones gramaticales entre las oraciones. La única relación que respetaba era la de serialización. La coma de serialización, es muy fácil de identificar, se usa cuando tenemos una lista de palabras, frases u oraciones.

    • Ejemplo(Lista de lenguajes de programación): C#, Java, Javascript, PHP, Python.
    • Ejemplo con oraciones: Javascript es un lenguaje de programación interpretado, se utiliza principalmente en su forma del lado del cliente, los navegadores modernos interpretan su código.

    La siguiente coma que revisaremos es la de rompimiento de serie. Cuando estamos realizando una lista, como la que vimos anteriormente, podemos cambiar de idea integrando una coma antes de la conjugación.

    • Ejemplo: Aprenderé este año C#, Java, Javascript, PHP y Python, y puede que escriba un libro.
  • VirtualBox y Hyper-V

    VirtualBox y Hyper-V

    Tengo instalado Windows 8.1 y utilizo Virtualbox para muchas practicas con Linux, pero oh sorpresa, después de instalar Virtualbox no funciona correctamente. Tuve muchos problemas para correr Virtualbox y llegue a pensar que no lo podría correr de nuevo, pensé en cambiarme a Vware o VirtualPc, pero antes de rendirme decidí buscar información del problema googleando. No encontré buena información acerca del problema, la mayoría recomiendan cambiar el programa de virtualización, por lo que me había decido a hacerlo, pero después, antes debía seguir en unas practicas que estoy haciendo para Windows Phone y ahí surgió la respuesta.
    Para hacer las pruebas en el emulador de Windows Phone se Utiliza Hyper-V que viene ahora instalado y activado por defecto para Windows 8. Hyper-V es un programa de virtualización para sistemas de 64x. Se me ocurrió que tal vez por este motivo no corría Virtualbox bien, ya que se veía un poco lento y al instalar algún sistema operativo se quedaba pegado o no cargaba. Busque un poco de información y mi hipótesis era cierta, Hyper-v y Virtualbox no pueden coexistir, ya que una vez se inicia el sistema operativo se carga Hyper-v, Virtualbox no podrá funcionar bien. Así que ahora va la solución. Algo radical seria desinstalar Hyper-V, pero en mi caso que lo utilizo para desarrollo no es una buena idea, por esto opte por deshabilitarlo.
    Aquí van los pasos.

    1. Abrir el símbolo del sistema como administrador.
    2. En el cmd vamos a utilizar los siguientes comandos:
    bcdedit
    bcdedit /set hypervisorlaunchtype off
    bcdedit /set hypervisorlaunchtype auto
    

    bcdedit proporciona la lista para describir las aplicaciones de arranque y configuración de las aplicaciones de inicio.

    Con /set hypervisorlaunchtypepodemos establecer el modo de arranque para Hyper-V que puede ser auto para iniciarlo u off para detenerlo. En este caso como queremos detenerlo vamos a ponerlo en off y luego reiniciamos la maquina.
    Ahora debemos reiniciar el equipo y ya podemos utilizar Virtualbox sin ningún problema. Después del reinicio Hyper-V ya no interferirá con el funcionamiento de Virtualbox y si queremos volver a habilitar Hyper-V solo debemos colocar su estado de nuevo en auto y reiniciar. Es un poco tedioso pero funciona y se puede programar una bat para hacerlo con un solo click.
    Espero te sirva esta información, compártela y comenta.

¡Hola a todos los entusiastas de la tecnología! Quería informarles que en mi blog utilizamos cookies para mejorar la experiencia de usuario. Estas pequeñas herramientas nos ayudan a personalizar el contenido y ofrecer funciones específicas. Al continuar explorando el sitio, aceptas nuestro uso de cookies. Puedes obtener más información sobre cómo las utilizamos en nuestra política de privacidad. ¡Gracias por ser parte de esta comunidad tecnológica! 🍪    Más información
Privacidad