jueves, 4 de junio de 2020

Debian "sudo command not found"

El día de hoy estaba trabajando con debian y me encontré con este error en la consola al intentar ejecutar el comando "sudo".

Los pasos para solucionarlo son:

1. Instalar el paquete "sudo", desde la cuenta del root.

#apt-get install sudo

2. Añadir el usuario al grupo de "sudo"

#usermod -aG sudo <username>

3. Iniciar sesión de nuevo.

https://laptrinhx.com/ubuntu-debian-fix-sudo-command-not-found-3405516199/

sábado, 23 de mayo de 2020

Virtualización en Acer Aspire E 15 E5-553-1786

Hace algunos años compré una laptop Acer de modelo Aspire E 15 E5-553-1786, estaba a buen precio, sin embargo fue una decepción cuando me neteré que el BIOS no cuenta con la opción para activar la opción de virtualización, por lo que no podía utilizar VirtualBox, luego de mucho tiempo encontré un artículo con una opción para activarlo desde Windows, por lo que comparto los pasos a seguir y el enlace. Cabe mencionar que ninguna de las actualizaciones del BIOS incluye la opción.

Paso 1:
descargar y descomprimir archivo H2OUVE.rar

yo lo descomprimi en carpeta
c:\temp

Paso 2: descargar y copiar archivo vars_mod.txt en carpeta c:\temp

Paso 3:
Entrar en modo consola como administrador
Presionando tecla windows y tecla x simultanamente.
Elegir => simbolo del sistema (administrador)

en modo consola nos cambiamos a la carpeta temp
cd\temp

tecleamos el comando:
H2OUVE.exe -sv vars_mod.txt
y ENTER

se ejecutara los procesos
y al finalizar unicamente apagamos la laptop
encendemos y listo
En virtualbox (en micaso) ya estaran activos la maquina virtual Windows de 64bits

Link original de referencia:

Nota: los pasos aqui descritos es responsabilidad de quien los use

Fuente:

viernes, 5 de julio de 2019

Programación Orientada a Objetos

¿Que es la programación orientada a objetos?



La programación orientada a objetos (POO) es un paradigma de programación basada en la interpretación de los elementos como objetos con atributos y otra propiedades.

El uso de este paradigma se popularizó a principios de la década de 1990. Actualmente existen distintos lenguajes de programación orientados a objetos, entre ellos:
  • Java
  • C++
  • Objective C
  • Ruby
  • Python
  • Smalltalk
  • Eiffel
  • Perl
  • Visual .net
  • PHP
  • etc
Algunos de los conceptos fundamentales de la POO:
  • Clase: Es la definición de las propiedades y comportamiento de un tipo de objeto en concreto.
  • Instanciación: Es la creación de un objeto a partir de una clase.
  • Herencia: Es la propiedad mediante la cual una clase puede heredar atributos y operaciones de otra.
  • Objeto: Es la instancia de una clase. Esta entidad es provista de las propiedades y atributos definidos en la clase a la que pertenece.
  • Método: Es un algoritmo asociado a un objeto, cuya ejecución se inicia tras la recepción de un mensaje o invocación. Por decirlo de otro modo es "lo que el objeto puede hacer". En un método se puede realizar un cambio en las propiedades del objeto o invocar otro método.
  • Evento: Es un suceso en el sistema.
  • Atributos: Características que pertenecen a la clase.
  • Mensaje: Es una comunicación dirigida a un objeto, que le ordena ejecute uno de sus métodos con ciertos parámetros asociados a dicho evento.
  • Propiedad o atributo: Es un contenedor de un tipo de dato asociado a un objeto, que permite acceder a los datos fuera del objeto y se define como sus características predeterminadas, y cuyo valor puede ser alterado por medio de un método.
  • Estado interno: Es una variable que se declara privada, y que solamente puede ser accedida y alterada por un método del objeto, no es visible al programador que maneja una instancia de la clase. 

Las características más importantes de la POO son:

Abstracción
Denota las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar "cómo" se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos, y, cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción. El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.

Encapsulamiento
Significa reunir todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión (diseño estructurado) de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

Polimorfismo
Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre; al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O, dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

Herencia
Las clases no se encuentran aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento, permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases, y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase, se dice que hay herencia múltiple; siendo de alta complejidad técnica por lo cual suele recurrirse a la herencia virtual para evitar la duplicación de datos.

Modularidad
Se denomina "modularidad" a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la modularidad de diversas formas.

Principio de ocultación
Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una "interfaz" a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas; solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no puedan cambiar el estado interno de un objeto de manera inesperada, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

Recolección de basura
La recolección de basura (garbage collection) es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse expresamente.

Referencias:


lunes, 10 de junio de 2019

Estructura de control IF en PL/SQL - Oracle

El día de hoy trabajando con un script pl/sql me vi en la necesidad de implementar una sentencia de tipo "switch", sin embargo no soy programador pl/sql, por lo que fui con un camarada que si lo es y me explico un poco del tema, buscando más en Internet encontré la guía oficial de Oracle y comparto de manera resumida y en español la información en caso de que a alguien más le pueda ser de utilidad.

De acuerdo al "structure theorem" cualquier programa de computadora se puede escribir utilizando las estructuras básicas de control de acuerdo a la ilustración que se muestra abajo. Estas pueden ser combinadas de cualquier manera necesaria para poder resolver un problema.

Text description of pls81008_control_structures.gif follows

A continuación en listo los ejemplos de las estructuras que podemos utilizar en PL/SQL:

Sentencia IF-THEN


La forma más simple de la sentencia "IF" asocia una condición con una secuencia de sentencias encerradas en un bloque con las palabras "IF" y "END IF":

IF condition THEN
     sequence_of_statements
END IF;

Sentencia IF-THEN-ELSE

La segunda forma de la sentencia "IF" añade la palabra clave "ELSE" para indicar una secuencia alternativa de sentencias:

IF condition THEN
     sequence_of_statements
ELSE
     sequence_of_statements2

END IF;

Sentencia IF-THEN-ELSIF

Cuando se requiere especificar más casos en un flujo de condiciones se utiliza la tercera forma de la sentencia "IF", mediante la palabra  "ELSIF" (No ELSEIF), en este caso también la sentencia "ELSE" se vuelve opcional.

IF condition THEN
     sequence_of_statements
ELSIF condition 2 THEN

     sequence_of_statements2
ELSE
     sequence_of_statements3


END IF;

https://docs.oracle.com/cd/B10500_01/appdev.920/a96624/04_struc.htm

viernes, 20 de mayo de 2016

Crear Web Services con PHP y SOAP Básico

Encontré un excelente artículo que habla acerca de la creación de WS en PHP, es muy básico, sin embargo esta excelente para introducirse al tema, explica de manera muy clara los conceptos y los ejercicios son muy explícitos, la url del artículo es la siguiente (está en inglés): Creating Web Services with PHP and SOAP, Part 1

Para la banda que se desespera y no quiere leer aquí pongo los ejemplos, si alguien no sabe ingles y desea que traduzca la página para su comodidad por favor solicítenmelo en los comentarios :)


Servidor:

<?php
require_once "nusoap.php";

function getProd($category) {
    if ($category == "books") {
        return join(",", array(
            "The WordPress Anthology",
            "PHP Master: Write Cutting Edge Code",
            "Build Your Own Website the Right Way"));
 }
 else {
            return "No products listed under that category";
 }
}

$server = new soap_server();
$server->register("getProd");
$server->service($HTTP_RAW_POST_DATA);
?>

Cliente:

<?php
require_once "nusoap.php";
$client = new nusoap_client("http://localhost/nusoap/productlist.php");

$error = $client->getError();
if ($error) {
    echo "<h2>Constructor error</h2><pre>" . $error . "</pre>";
}

$result = $client->call("getProd", array("category" => "books"));

if ($client->fault) {
    echo "<h2>Fault</h2><pre>";
    print_r($result);
    echo "</pre>";
}
else {
    $error = $client->getError();
    if ($error) {
        echo "<h2>Error</h2><pre>" . $error . "</pre>";
    }
    else {
        echo "<h2>Books</h2><pre>";
        echo $result;
        echo "</pre>";
    }
}
?>

lunes, 22 de junio de 2015

¿Que es un patrón de diseño?

Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.

Un patrón de diseño resulta ser una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reutilizable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.

Fuente: Wikipedia (2015), obtenido de: https://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o

miércoles, 3 de junio de 2015

Guías y tutoriales para principiantes de Desarrollo Orientado a Objetos - UML -

Muchos aprendimos a programar casi de manera autodidacta, tal ves les sucedió como a mí, que me compre un libro de Java y en unas semanas ya estaba programando ventanas y consultas a una BD.

Sin embargo llega el momento en que es necesario documentar o proyectar en un papel nuestras ideas, diseños y soluciones, es por eso que escribo esta entrada, en la que pretendo compartir con ustedes algunos enlaces de publicaciones muy útiles para comprender el proceso de Análisis y diseño orientado a objetos.

Estos libros en formato PDF les serán muy útiles si desean aprender a documentar y a modelar casos de uso con el lenguaje de modelado unificado (UML por sus siglas en inglés).

Primero me gustaría citar de wikipedia:
"Análisis y diseño orientado a objetos (ADOO) es un enfoque de la ingeniería de software que modela un sistema como un grupo de objetos que interactúan entre sí. Este enfoque representa un dominio absoluto en términos de conceptos compuestos por verbos y sustantivos, clasificados de acuerdo a su dependencia funcional. En este método de análisis y diseño se crea un conjunto de modelos utilizando una notación acordada como, por ejemplo, el lenguaje unificado de modelado (UML). ADOO aplica técnicas de modelado de objetos para analizar los requerimientos para un contexto - por ejemplo, un sistema de negocio, un conjunto de módulos de software - y para diseñar una solución para mejorar los procesos involucrados. No está restringido al diseño de programas de computadora, sino que cubre sistemas enteros de distinto tipo. Las metodologías de análisis y diseño más modernas son casos de uso guiados a través de requerimientos, diseño, implementación, pruebas, y despliegue.

El lenguaje unificado de modelado se ha vuelto el lenguaje de modelado estándar usado en análisis y diseño orientado a objetos."
A continuación agrego los enlaces que serán de utilidad:

Wikipedia: Análisis y Diseño orientado a objetos (2015) Obtenido de:
Desarrollo orientado a objetos con UML. Xavier Ferré Grau, María Isabel Sánchez Segura
Facultad de Informática – UPM (2015).
Obtenido de: http://www.uv.mx/personal/maymendez/files/2011/05/umlTotal.pdf
El lenguaje unificado de modelado. Grady Booch, Jim Rumbaugh e Ivar Jacobson.
Obtenido de: http://elvex.ugr.es/decsai/java/pdf/3E-UML.pdf
Herramientas para elaborar diagramas UML
http://thenullpointerexceptionx.blogspot.mx/2015/05/cual-es-la-mejor-herramienta-de.html?view=magazine

En estos documentos se cubren entre otros temas:
  • Componentes UML
  • Casos de uso y diagramas de CU
  • Diagramas de secuencia
  • Modelado de un sistema
  • Fases de Planeación y especificación de requisitos
  • Análisis
  • Diseño
  • Implementación y Pruebas