domingo, 1 de noviembre de 2015







Demostración de como funciona el complemento A1 y A2 en los números binarios.

















Autores: Michel Muñoz, Daniel Cruces, Alejandro Fuentes.
Competencia: Trabajo en equi´po.

Palabras claves: binarios,complemento,a1,a2.





Contextualización y descripción de la actividad



En el curso de programación 2 el segundo semestre tuvimos que hacer un informe donde debíamos demostrar como funcionaban el complemento A1 y A2. Este trabajo lo desarrollamos en conjunto, donde Daniel se encargo de la parte matemática, Alejandro del informe y yo Michel de la utilización del código.


Actividad



Analizar el siguiente código en C# y comparar con los datos del programa Free Hex Editor Neo.

Luego se debe demostrar mediante operaciones binarias y de conversión de datos, que los valores presentes en el archivo char.bin son equivalentes a los del arraycharData[6].

 Demostración

Para comenzar, el Free Hex Editor Neo es un editor que descifra o convierte números en binarios y/o hexadecimales por pantalla.
Usa algunos tipos de funciones llamadas complementos. Estos complementos le permiten llevar a cabo dichas operaciones.

Hay 2 tipos de complementos:

Complemento a 1 o de bit a bit: Básicamente consiste en que al tener  un número binario, cambia 0 por 1, y 1 por 0. (Invierte).
Ejemplo:
10 = 10102 =01012

Complemento a 2: Consiste en que sigue un camino semejante al C1, pero este suma 1 (binario) al bit menos significativo.
Ejemplo:

2 en decimal =   00102
Invierte           =   11012
----------------------------------------------------------------------------------------------
Suma un 1       =   00012
Resultado        =   11102

Para llevar a cabo la demostración del código se tomarán los datos contenidos en el arreglo Data[6] = {10,-15,-125,65,45,-89}; y se compararán con los mostrados en el editor Free Hex Editor Neo.

Tenemos que en el editor para ver los números convertidos hay filas y columnas que poseen una función en específico. Al lado izquierdo de la pantalla se encuentran números  expresados de forma hexadecimal habiendo un “salto” de 10 entre número y número (de hecho los saltos reales son de 16 octetos c/u). En la parte de superior de la pantalla se encuentra una fila (00, 01, 02, etc.), esta tiene por función obtener la ubicación de cada octeto dentro de las filas (en total hay 15 octetos en la fila).
Los valores ubicados en la fila de abajo están expresados en valores hexadecimales.

Para determinar que los datos del “arreglo” son equivalentes a los entregados por el editor, se deben realizar las siguientes operaciones:

10(10) =  00001010(2)         //se convierte a binario
10(10) =  0000|1010(2)
10(10) =  0|a                         //se transforma a hexadecimal
10(10) =  0a(16)

-15(10) = 00001111(2)         //se convierte a binario como si fuera positivo
-15(10) = 11110000(2)         //utilizando el complemento 2 se invierte el número binario y suma 1
-15(10) = 11110001(2)
-15(10) = 1111|0001
-15(10) = f|1                         //se transforma a hexadecimal
-15(10) = f1(16)

-125(10) = 01111101(2)      //se convierte en binario como si fuera positivo
-125(10) = 10000010(2)      //utilizando el complemento 2 se invierte el número binario y suma 1
-125(10) = 10000011(2)
-125(10) = 1000|0011
-125(10) = 8|3                      //se transforma a hexadecimal
-125(10) = 83(16)

65(10) =  01000001(2)         //se convierte a binario
65(10) =  0100|0001
65(10) =  4|1                         //se transforma a hexadecimal
65(10) =  41(16)

45(10) =  00101101 (2)       //se convierte a binario
45(10) =  0010|1101           //se transforma a hexadecimal
45(10) =  2|d
45(10) =  2d(16)

-89(10) = 01011001(2)         //se convierte en binario como si fuera positivo
-89(10) = 10100110(2)         //utilizando el complemento 2 se invierte el número binario y suma 1
-89(10) = 1010|0111          //se transforma a hexadecimal
-89(10) = a|7
-89(10) = a7(16)


De esta manera, con c/u de los números usando los complementos 1 y 2, se pueden comprobar que los valores mostrados por pantalla son equivalentes al conjunto de números en el arreglo Data.


Conclusión y reflexión de la actividad


Gracias a la aplicación del complemento 1 y 2 pudimos comprender acerca de como funciona los números negativos binariaos, de que el complemento 1 sirve para sólo representar y que el 2 sirve para representar y calcular. Con mis compañeros dividiéndonos el trabajo llegamos a una demostración efectiva del código entregado por el profesor, osea un desarrollo de la competencia de trabajo en equipo.


lunes, 26 de octubre de 2015

Hacer login sencillo con PHP, MYSQL y HTML

Un Login sencillo con PHP, MYSQL Y HTML.


Autor: Michel Muñoz.

Competencias : Desarrollo de software, ingeniería en tecnologías de la                                       innovacion.
                        
Palabras clave: php, mysql, phpmyadmin, html, login.
                     


Contextualización y descripción de la actividad



Dentro del ramo taller de integración tengo que agregar otra entrada acerca de trabajos realizados y de como estos fueron abordados, de las dificultades y de lo que aprendí, a modo de repositorio. Si se quiere saber más acerca de del porque las entradas del blog visite la primera entrada.

El trabajo que escogí fue un control realizado el segundo semestre en el ramo "Desarrrollo de aplicaciones cliente-servidor". Luego de la semana de aprendizaje de PHP y MYSQL se nos fue asignado un control del ramo donde debíamos hacer un ejercicio que constaba de 2 paginas que serán explicadas más adelante.




--------------------------------------------------------------------------------------------------------

Universidad católica de Temuco.






Descripción del trabajo:

Competencias a desarrollar:

- Desarrollo de software.
- Ciencia de la ingeniería.
- Programación en lenguajes de internet.


Habilidades blandas (genéricas):

- Gestión del conocimiento.


Otros:

Curso: Desarrollo de aplicaciones cliente-servidor.
Profesor: Víctor Valenzuela
Año: 2015.          

Actividad


Ejercicio entregado:
"a. A través de un login en html de nombre "index.html" permita ingresar al usuario al sistema. Si el usuario está registrado en la base de datos, debe ingresar al documento en php "muro.php" el cual indicará en un div un mensaje del tipo "hola test", donde test será el nombre de usuario correspondiente al login, sino, también ingresará a "muro.php", pero creará un nuevo registro en la tabla "usuario" con los datos ingresados (se entiende que, en este último caso, el div tendrá un mensaje del tipo "hola nuevo usuario victor", donde victor sería el nombre del nuevo usuario)(...)."


Según podemos ver se me pide que haga un login donde se pueda confirmar en la base de datos que exista un registro y que si coincide mande a muro.html donde diga "Hola usuario x" y que en caso de no estarlo también  se cree un registro en la base de datos y luego mande a la página muro.html diciendo "Hola nuevo usuario x".

Esto es sólo la primera parte pero la que yo considero la más difícil, ya que la parte "b." que no aparece era solo mostrar una tabla e ingresar datos en ella (como tipo chat global). También el profe nos dio un script de creación de base de datos, yo usare PHPMYADMIN desde XAMPP para ejecutar este script y correrlo en mi base de datos local ( de prueba). Ahora se muestra el script que también será agregado como descarga. Copiar y pegar lo que está en otra tipografía si se quiere hacer sin descargar el script (también será explicado más adelante).

CREATE SCHEMA base ; DROP TABLE IF EXISTS base.chat ; CREATE TABLE IF NOT EXISTS base.chat ( id int(111) NOT NULL auto_increment, nombre text NOT NULL, mensaje longtext NOT NULL, PRIMARY KEY (id) ) PACK_KEYS=0 AUTO_INCREMENT=0 ; DROP TABLE IF EXISTS base.usuario ; CREATE TABLE IF NOT EXISTS base.usuario ( id int(111) NOT NULL auto_increment, nombre text NOT NULL, pass text NOT NULL, PRIMARY KEY (id) ) PACK_KEYS=0 AUTO_INCREMENT=0 ;

Paso 1) Para empezar instalaremos el xampp desde este enlace:Descargar XAMPP (totalmente gratuito)

XAMPP para quien no lo  conce es un servidor independiente de plataformasoftware libre, que consiste principalmente en el sistema de gestión de bases de datos MySQL, el servidor web Apache y los intérpretes para lenguajes de script: PHP y Perl (fuente wikipedia).

Paso 2)Luego de ser instalado lo abrirán XAMPP Control Panel y harán click en START en Apache y START en MYSQL, después de que inicien y se pongan en verde (significa que están listos para correr) click en ADMIN en la linea de MYSQL. Luego se abrirá el navegador por defecto de su computador en la pagina "http://localhost/phpmyadmin/" que será su manager de base de datos.

Paso 3) Ingresar la pestaña SQL e ingresar el script anterior, luego se generará nuestra base de datos y vamos a abrila, si no se entiende mire la siguiente imágen.
Paso 4) Examine la tabla usuarios y entienda como funciona, cuales son los valores de las tablas y columnas (se necesita conocimiento basico acerca de funcionamiento SQL) Entre en la tabla usuarios y genere  1 o más registros con la herramienta insertar. 

Paso 5) creación de la página HTML. Para empezar lo más sencillo, la vista, dejare un script luego para una rápida utilización. Hay que recalcar y entender que TODO SE PONE EN CARPETA C:/XAMPP/HTDOCS sino el PHP no correrá en conjunto con el HTML y nuestro MySQL. También use su editor de texto preferido, yo ocupe el Notepad++ que pueden encontrar aquí: Descargar Notepad++ (totalmente gratuito)

Creando el html hay que hacer un formulario que nos permita ingresar en ella, para hcer un formulario en html, para empezar el formulario usará metodo POST porque será más seguro y es el indicado en cuestiones con mayor seguridad. Primero creemos el formulario y luego el PHP.

Html de formulario de login de nuestra llamada página index.html:
"# es un comentario pero en sólo en esta página, no funciona como comentario en la sintaxis de html"

<form method='post' action='login.php'>#método post, que sera enviada a login.php que será nuestro motor de interacción con este foormulario
      <table align='center' border='1'> $lo alineamos en centro y damos borde 1
  <caption>Acceso al sistema</caption>
     <tr>
<td colspan='2'>
   <span> Usuario: </span><br/>
<input type='text' name='usuario'> #nuestro primer dato                                                               el nombre 
</td>                                     #estos datos los 
     </tr>                                       comprobaremos en la base
     <tr>                                         de datos
 <td colspan='2'>
        <span> Clave: </span><br/>
<input type='password' name='clave'>#2do dato, la clave, donde el input type es password por medidas de seguridad.
 </td>
     </tr>
     <tr>
  <td><br/>
       <input type='submit' value='Ingresar' name='boton'>
   </td>
   <td><br/>
       <input type='reset' value='Limpiar'>#un enviar y limpiar
   </td>
             </tr>
  </table>
      </form>


se verá algo así:
        

Paso 6) Desarrollar el PHP para que trabaje bien con los datos datos, cabe recalcar que si existe un usuario te envía a muro.html sino existe también envía a muro.html y te crea un registro (ojo con las consultas sql), pero con diferentes mensajes dentro del muro. También hay que mencionar que si existe el nombre en la base de datos pero está incorrecta la contraseña no se puede generar un nuevo usuario. "$_SESSION['x']" es una variable global generada, osea si usamos "$_SESSION['x']" en PHP distintos por con el mismo "session_start();" y carpeta se ejecutara correctamente.

El código PHP: 
<?php 
$db=mysql_connect("localhost","root","");
if(!$db) echo "Error de conexión"; //conectar a la bd
mysql_select_db("base", $db);//seleccionar bd
session_start();
$usu=$_POST['usuario'];
$pwd=$_POST['clave'];
$_SESSION['usuario']=$usu;
$_SESSION['registrado']=false;
$querylog= mysql_query("select nombre,pass from usuario where nombre like '$usu' and pass like '$pwd'",$db);
$querypwd= mysql_query ("select pass from usuario where nombre like '$pwd'",$db);
$queryname=mysql_query("select nombre from usuario where nombre like '$usu'",$db);
$filasname=mysql_num_rows($queryname);
$filaspwd=mysql_num_rows($querypwd);
$totalfilas=mysql_num_rows($querylog);
 
if($totalfilas == 0){ //primer caso, no coincide ni nombre ni contraseña
if($filasname==0) //tampoco existe el nombre, por lo tanto
{
mysql_query("INSERT INTO usuario(id,nombre,pass) VALUES ('','$usu','$pwd')",$db); #ingresamos al usuario a la base de datos
header('location:./muro.php');
}
}
if($totalfilas == 0 ){
if($filasname != 0){
if($filaspwd==0){
echo "<h3> CONTRASEÑA INCORRECTA</h3>";
header('location:/error.html'); #error.html sera una pagina 
}                              que mostrara un mensaje, que
}                              diga:<<ustedes se equivoco>> y 
}                              que tenga un link para volver
if($totalfilas != 0){ //tercer caso, si existe el nombre y la contraseña
$_SESSION['registrado']=true;
header('location:./muro.php');
}



PASO 7) Ahora sólo nos queda personalizar nuestro muro.php, para simplificar trabajo escribiremos el html y php juntos, hay que separarlos por los comandos "<html></html>" para el HTML y "<?php ?> "para el PHP.  Para saber si el usuario estaba conectado ocupé "session_start();" que genera una especie de cookie que sabe si el usuario está registrado o no, es la utilidad necesaria para saber que monasje mostrar y tambien "session_start();" aplicado en otro script PHP sigue corriendo el anterior ya que es una variable global.

<?php
$db=mysql_connect("localhost","root","");
if(!$db) echo "Error de conexión"; //conectar a la bd
mysql_select_db("base", $db);//seleccionar bd
session_start(); #uso de sesion
?>

<html>
<head>
<title>Muro</title>
</head>
<body style='background:#36465D'>
<span style='color:#FFFFFF'>
<?php #si no esta registrado hacemos echo                                                "Bienvenido nuevo usuario.."
if($_SESSION['registrado']==false){
echo "<div><h2 align='center'>Hola nuevo usuario ".$_SESSION['usuario'].", bienvenido al muro.</h2></div>";
} #si ya esta regsitrado:                                              echo"Bienvenido..."
if($_SESSION['registrado']==true){
echo "<div><h2 align='center'>Hola ".$_SESSION['usuario']." bienvenido al muro.</h2></div>";
}
?>


Ahora unas imagen del resultado:


Conclución y reflexión de la actividad

Finalmente tienen un login basico pero que funciona correctamente con PHP, MYSQL Y HTML, como ven es  muy sencillo,pero para empezar a aprender en programación está súper bueno. Pude aprender de HTML, PHP Y MYSQL de manera práctica y con ello desarrollar las habilidades necesarias para hacer un login. Los códigospueden probarlos, dejare los códigos limpios de comentarios más abajo, gracias por leer y ojalá les sirva, cualquier duda escriban un comentario. Saludos

Descarga (incluye un chat global basico): https://mega.nz/#!l1kQWC6b

lunes, 5 de octubre de 2015

Seno y coseno en series de Taylor para lenguaje Python.





Seno y coseno en series de Tayor aplicados en lenguaje Python.


     Autor: Michel Muñoz.

Competencia(s): Desarrrollo de software, programación en lenguaje Python.
                                                Aplicación efectiva matemática.

      Palabras clave: Programación, Python, Taylor.








Contextualización y descripción de la actividad:

            En el presente blog desarrollare entradas acerca de la programación, hablaré sobre diversas competencias básicas exigidas en mi universidad. Específicamente en el ramo de "Taller de integración" trabajamos acerca de cómo realizar un proyecto de manera correcta, bajo supervisores y ayuda de nuestros profesores

         Dentro del ramo tenemos que crear un repositorio, donde evidenciemos el trabajo ya realizado antes que subjetiva mente ha significado  en el aporte de nuestros conocimientos. Para realizar la tarea de repositorio como primera entrada escogí la activada de laboratorio n° 3 "Seno y coseno en series de taylor" del ramo de Programación 1 que trabajamos el primer semestre desde junio y presentamos en julio del 2015.

Introducción:

      En junio la profesora Marcella Bizama encargada del ramo de Programación 1, hizo la tercera evaluación  de laboratorio, donde debíamos trabajar con contenido básico de Python. En este tercer laboratorio se nos designo el  "Seno y coseno de en series númericas" donde debíamos cumplir con requisitos mínimos para ser presentado y luego poder defender nuestro trabajo.

   Python es un lenguaje de programación de sintaxis clara y sencilla, sí quieres saber como funciona puedes aprenderlo, 100% recomendado para los iniciados como yo en el mundo de la programación. Sólo trabajaremos en este lenguaje esta entrada -por mientras -y trabajaré en la versión de python 2.7.10 descargada desde el sitio oficial: https://www.python.org/

Descripción del trabajo:

Competencias a desarrollar:

- Desarrollo de software.
- Ciencia de la ingeniería.
- Programación en lenguaje Python.

Habilidades blandas (genéricas):

- Gestión del conocimiento.

Otros:

Curso: Programación 1.
Profesora: Maercella Bizama.        
Año: 2015.                 


-----------------------------------------------------------------------------------------------------------

Universidad Católica de Temuco.

Actividad

La actividad evaluada que nos designo la profesora:

Captura de pantalla acerca de la actividad desginada.


        Hay que mencionar que la profesora nos comunico que la serie numérica  a la cual se refería provenían de Brook Taylor (Siglo XVII). Primero veremos que es una serie numérica enfocada en la trigonométria (específicamente sólo en seno y coseno) y luego procederemos a como llevarlo a la programación. 
        
        La trigonometría (el estudio de los ángulos del triangulo en sus inicios) nos sirve en diversas materias de estudio como la cartografía, la astronomía, topografía, navegación, etc.
Dentro de lo básico se encuentra en seno y coseno que son las razones entre dos lados de un triangulo rectángulo:

Información proveniente de la web disfrutadelasmatematicas,com

       
Función seno:
sin(θ) = Opuesto / Hipotenusa
Función coseno:
cos(θ) = Adyacente / Hipotenusa
Un ejemplo de utilización puede ser esta, que tiene que ver con el ámbito del estudio de la física:

Sabiendo la  distancia entre la persona y el arbol, el angulo del triangulo formado podremos saber la altura del árbol, o si tenemos el angulo y la altura del árbol con la de la persona podemos calcular la hipotenusa, o también con las razones entre sus lados(seno y coseno) todo gracias a la trigonometría,
       
¿Y entonces para qué nos sirve la serie de Taylor? 

      La función de esta serie es que podamos calcular una aproximación del seno y coseno sin utilizar la división tradicional y demostrar por que una serie de sucesivas sumatorias si funcionan y pueden servir (y mucho).

Las siguientes sumatoria de series son:

 Como podemos ver la aproximación consta de una sumatoria, que parte desde 0 en n y puede ser calculada infinitamente(nos da un resultado más aproximado) pero que en un lenguaje de programación, (ya que trabajaremos con float, un tipo de dato que tiene sus límites) en este caso en particular  calcularé hasta n=99 veces la suma. Para el seno y coseno tenemos un x que va a ser el grado del angulo del triangulo rectángulo, dentro de nuestra dos sumatorias tenemos en común un factorial y (-1) elevado a nuestro numero de repeticiones. Estas repeticiones nos darán una suma negativa y otra positiva, dándonos un resultado decimal (negativo o positivo dependiendo del caso).

Finalmente ¿Cómo llevamos estas series a la programación en lenguaje python..?

Empezaremos desde los recursos básicos y funciones necesarias para cumplir con los requerimientos mínimos que nos puso la profesora :

(cada vez que salga una lista enumerada y en otra fuente es código de programación en python)
"#" signifcara un comentario dentro del codigo.

  1. import math #para comprobar resultados 
  2. bandera = True #será el switch de encendido/apagado del código

  3. def factorial(x):#definimos factoriales a utilizar en el código 
  4.            factorial = 1: #iniciamos en 1 
  5.            while (x >1):
  6.                      factorial = factorial * x  #ira multiplicando 
  7.            x = x - 1                  # y restando 1
  8.     return factorial                            #que nos retornará el factorial

  9. resultados = [] #para guardar nuestros resultados en una array
  10. ds
  11. while bandera: #hacemos el menú
  12.       
  13.     print "M&M COOMPANY LTDA." #mi compañía ficticia
  14.     print "Que funcion trigonometrica desea utilizar?"
  15.     print "1-Calcular el SENO"
  16.     print "2-Calcular el COSENO"
  17.     print "3-Ver resultados anteriores"
  18.     print "4-Finalizar programa"
  19. opcion_menu=float(raw_input("Digite su opción:  "))#Opcion a   
  20.                                      #utilizar dentro del menú
  21.  
  22. #trabajaremos por ahora creando la función SENO.
  23. #MENU 1
  24.     if opcion_menu == 1: #si se escoge el menú 1
  25.        #pedira al usuario que ingrese el angulo del rectangulo
  26.          
  27.        grado = float(raw_input("Ingrese grado del triangulo:"))
  28.        repeticiones = 99.0 #las 99 repeticiones
  29.             decimales = int(raw_input("con cuantos decimales desea ver?  "))
  30.             sumatoria = 1.0 #definí las variables necesarias
  31.             contador = 0.0
  32.             seno = 0.0
  33.              #y ahora comienza el trabajo, enumerare el trabajo               a realizar en una imagen

  34.                          #estableci un contador para                                     repeticiones exactas
  35.              while(contador < repeticiones): 
  36.                contador += 1  
  37.     #parte 1   dividendo = float((grado**(2.0*contador+1.0)))
  38.                divisor = float(factorial(2.0*contador+1.0))
  39.                sumatoria = float((dividendo/divisor))
  40.     #parte 2   if (contador % 2  == 0):
  41.                    seno += sumatoria 
  42.                else:
  43.                    seno -= sumatoria
  44.             senofinal=seno+grado
  45.    #parte 3 senofinal=str(round(senofinal, decimales))
  46.             grado=str(grado)
  47.             print "EL seno del grado",grado," es igual a ",senofinal

  48.             resultados.append("El seno del grado "+ grado + " es igual " + senofinal)

  49.     #MENU 2
  50.     if opcion_menu == 2:
  51.             grado=float(raw_input("Ingrese grado del triangulo:  "))
  52.             repeticiones = 99.0
  53.             decimales = int(raw_input("con cuantos decimales desea ver?  ")) 

  54.             sumatoria = 1.0
  55.             contador = 0.0
  56.             coseno = 0.0
  57.             cosenofinal = 0.0
  58.             while(contador < repeticiones):
  59.                 dividendo = float((grado**(2*contador)))
  60.                 divisor = float((factorial(2*contador)))
  61.                 sumatoria = float((dividendo/divisor))
  62.                 contador = contador+1

  63.                 if (contador % 2 == 0):
  64.                     coseno += sumatoria
  65.                 else:
  66.                     coseno -= sumatoria

  67.             cosenofinal= (coseno*(-1))
  68.             cosenofinal=str(round(cosenofinal, decimales))
  69.             grado=str(grado)
  70.             print "EL coseno del grado",grado," es igual ",cosenofinal
  71.             
  72.             resultados.append("El coseno del grado "+ grado + " es igual a " + cosenofinal)
  73.         

  74.     menu3=True #menu que mostrará el arreglo con los resultados
  75.     #MENU 3
  76.     if opcion_menu==3:
  77.         while menu3:
  78.             print resultados
  79.             sub_menu3=int(raw_input("Ingrese 1 para salir: "))
  80.             if sub_menu3 == 1:
  81.                 menu3= False
  82.        
  83.        
  84.     #MENU 4 si esta opcion es marcada se cerrara el programa
  85.     if opcion_menu==4:
  86.         print "Goodbye"
  87.         bandera=False #la bandera que mantendia funcionando                            #se apaga y con ello el codigo
#fin de codigo.




Reflexión de la actividad:

     Con a actividad realizada reuní los conocimientos aprendidos  y los aplique sobre una problemática mas amplia, además aprendí materia respectiva a las sumatorias y series de Taylor.
Finamente a creación de software fue efectiva y el trabajo  realizado de manera estructurada y ordenada. Con lo nuevo que aprendí me di cuenta que el lenguaje  Python puede servir para solucionar problemáticas reales.



Descarga de código:

     Lo comparto con todos los que  quieran utilizar, difundir y compartir. Se encuentra mejor organizado, ya que, el blog no deja escribir lineas largas. Saludos visitantes!





-----------------------------------------------------------------------------------------------------------

Universidad Católica de Temuco.