viernes, 26 de mayo de 2017

Maquina de Alan Turing

MAQUINA DE ALAN TURING








La máquina de Turing (abreviado MT) tiene, un control finito, una cabeza lectora y 
una cinta donde puede haber caracteres, y donde eventualmente viene la palabra de 
entrada. La cinta es de longitud infinita hacia la derecha, hacia donde se extiende 
indefinidamente, llenándose los espacios con el carácter blanco (que representaremos con “t”). 
La cinta no es infinita hacia la izquierda, por lo que hay un cuadro de la cinta que es el 
extremo izquierdo, la MT la cabeza lectora es de lectura y escritura, por lo que la cinta 
puede ser modificada en curso de ejecución. Además, en la MT la cabeza se mueve 
bidireccionalmente (izquierda y derecha), por lo que puede pasar repetidas veces sobre un 
mismo segmento de la cinta.

Este modelo está conformado por un alfabeto de entrada y uno de salida, un símbolo especial 
llamado blanco(normalmente b, Δ o 0), un conjunto de estados finitos y un conjunto de 
transiciones entre dichos estados. Su funcionamiento se basa en una función de transición, 
que recibe un estado inicial y una cadena de caracteres(la cinta, la cual es finita por la izquierda) 
pertenecientes al alfabeto de entrada. Luego va leyendo una celda de la cinta, borrando el 
símbolo, escribir el nuevo símbolo perteneciente al alfabeto de salida y finalmente avanza a 
la izquierda o a la derecha(solo una celda a la vez), repitiendo esto según se indique en la función 
de transición, para finalmente detenerse en un estado final o de aceptación, representando así 

la salida.

¿CÓMO FUNCIONA?




Una máquina de Turing es un dispositivo que transforma un INPUT en un OUTPUT 
después de algunos pasos. Tanto el INPUT como el OUPUT constan de números en
código binario (ceros y unos). En su versión original la máquina de Turing consiste 
en una cinta infinitamente larga con unos y ceros que pasa a través de una caja. 
La caja es tan fina que solo el trozo de cinta que ocupa un bit (0 ó 1) está en su interior. 
La máquina tiene una serie de estados internos finitos que también se pueden numerar 
en binario. 

Para llevar a cabo algún algoritmo, la máquina se inicializa en algún estado interno arbitrario. 
A continuación, se pone en marcha y la máquina lee el bit que se encuentra en ese momento 
en su interior y ejecuta alguna operación con ese bit (lo cambia o no, dependiendo de su 
estado interno). Después se mueve hacia la derecha o hacia la izquierda, y vuelve a procesar 
el siguiente bit de la misma manera. Al final se para, dejando el resultado al lado izquierdo 
por ejemplo. 


La traducción es como sigue: si la máquina se encuentra en el estado interno 0 y lee 1 en la cinta, 
entonces pasará al estado interno 1101 (13), escribirá 1 y se moverá hacia la izquierda un paso 
(la cinta se moverá hacia la derecha). 

A continuación es conveniente inventar una notación para la secuencia del INPUT. 
Esta notación se llama notación binaria expandida. Consiste en cambiar la secuencia original
binaria por otra construida de la siguiente forma: el 0 se cambia por 0 y el 1 por 10 y se ponen 
un cero a la izquierda y/o a la derecha del resultado si empieza o acaba en 1 respectivamente. 
Así por ejemplo, el número 13 que en binario es 1101 es en binario expandido 1010010 con 
un cero delante por esta última regla 01010010. Para volver al original hay que contraer el 
binario expandido con la siguiente regla: 

Empezamos a leer por la izquierda el binario expandido. Cuando encontremos un 0 tomamos 
nota de cuántos 1 hay hasta llegar al siguiente 0 y lo escribimos. Si encontramos que hay dos 
0 seguidos, apuntaríamos un 0 porque no habría ningún 1.Veamos con el 13 cómo se haría. 
El primer 0 se encuentra en la primera posición y el siguiente 0 está en la posición 3. 
Entre los dos solo hay un 1. Lo anotamos. Seguidamente hay un 1, y después un 0, entonces 
apuntamos 1 porque hay un 1 entre medias de ellos. Esto es lo que se hace sucesivamente 
y encontramos: 1101 que es el número original. 

lunes, 22 de mayo de 2017

TAREA

ALAN TURING




Alán Turing fué un pionero de los campos de la computación y la inteligencia artificial, y uno de los padres de la informática actual. Nació en 1912, en el seno de una familia de clase media londinense. Su padre, funcionario británico en India, deseaba que Alan fuera criado en Inglaterra. Por esa razón, cuando sus padres regresaron a India, lo dejaron al cuidado de unos amigos. Tenía solo 1 año de edad.

Durante su periodo de estudiante, pasó por diferentes centros de prestigio como el King’s College de Cambridge y la Universidad de Princeton, en los que se especializó en matemáticas, lógica y teoría de probabilidades. En 1936 publicó un trabajo en el que propuso un ingenio abstracto, conocido posteriormente como máquina de Turing. La máquina de Turing es un modelo matemático
que opera y lee instrucciones de una cinta y que es capaz de emular la lógica de funcionamiento de cualquier algoritmo de un computador.

Lo más sorprendente es que Turing desarrolló este modelo, que podía describir el funcionamiento de los ordenadores, antes de que existiera la tecnología capaz de construirlos.

En 1938, tras completar su doctorado en Princeton, Alan regresó a Gran Bretaña y comenzó a trabajar en la Escuela Gubernamental de 
Códigos y Cifrados, donde investigó sobre el descrifado de códigos de la máquina alemana Enigma. Al principio no se dedicó exclusivamente  a esta tarea, pero tras el estallido de la Segunda Guerra Mundial se mudó a Bletchley Park y se concentró por completo en la criptografía.

Trabajando en Bletchley Park junto con otros colegas desarrolló La Bombe, una máquina electromecánica basada en el trabajo de unos 
criptógrafos polacos y con la que se consiguió descrifrar el código de las Enigma. El funcionamiento de La Bombe se basaba en una heurística que permitía acotar las posibilidades descartando las combinaciones menos probables. Lo que hacía era estudiar todas las posibles soluciones  a fragmentos del texto original cifrado. Como se centraba en pequeños fragmentos, lograba descartar rápidamente gran cantidad de combinaciones  que daban resultados sin sentido. Cuando La Bombe daba con una combinación exitosa se desconectaba la corriente eléctrica.

¿QUÉ APORTE HIZO ALÁN TURING PARA LA ÉPOCA MODERNA?

Alán Turing realizó numerosos aportes a lo que son hoy nuestras computadoras modernas, a través dela programación y la matemática. Sin duda fue un gran pensador que aportó desde varios campos al desarrollo de la programación y los códigos. 

Dio el primer paso en plantear la posibilidad de una inteligencia artificial que pueda parecerse a la humana en su efectividad y cumplimiento de tareas, un tema que hasta el día de hoy es clave.



Clase Número 12

CLASE NÚMERO 12

Vimos la mitad de la película llamada "el Código Enigma" relacionando y entendiendo más a fondo la historia de la primera computadora.

Clase Número 11

CLASE NÚMERO 11

Empezamos a ver la temática de clases relacionada con la programación orientada a objetos (POO). También prácticas de constantes y clases en PHP.

jueves, 18 de mayo de 2017

Clase Número 10

CLASE NÚMERO 10

Hicimos un repaso de las funciones que hemos visto hasta el momento de php y aclaramos dudas que habían quedado en las clases anteriores.

Clase Número 9

CLASE NÚMERO 9

Consulta:

Diferencia entre $i++  y  ++$i

Ambas operaciones incrementan en una unidad el valor de l variable $i (en este caso), la única diferencia es que $i++ incrementa después de devolver el valor de $i, mientras que ++$i incrementa antes de devolver el valor de $i

Clase Número 8

CLASE NÚMERO 8

HTML



HTML es el lenguaje con el que se define el contenido de las páginas web. Básicamente se trata 
de un conjunto de etiquetas que sirven para definir el texto y otros elementos que compondrán 
una página web, como imágenes, listas, vídeos, etc.

El HTML se creó en un principio con objetivos divulgativos de información con texto y algunas 
imágenes. No se pensó que llegara a ser utilizado para crear área de ocio y consulta con carácter
 multimedia (lo que es actualmente la web), de modo que, el HTML se creó sin dar respuesta a todos
 los posibles usos que se le iba a dar y a todos los colectivos de gente que lo utilizarían en un futuro. 
Sin embargo, pese a esta deficiente planificación, si que se han ido incorporando modificaciones con 
el tiempo, estos son los estándares del HTML. Numerosos estándares se han presentado ya. 
El HTML 4.01 es el último estándar a febrero de 2001. Actualización a mayo de 2005, en estos 
momentos está apunto de presentarse la versión 5 de HTML, de la que ya se tiene un borrador casi 
definitivo.

El HTML es un lenguaje de marcación de elementos para la creación de documentos hipertexto, 
muy fácil de aprender, lo que permite que cualquier persona, aunque no haya programado en la vida, 
pueda enfrentarse a la tarea de crear una web. HTML es fácil y pronto podremos dominar el lenguaje. 
Más adelante se conseguirán los resultados profesionales gracias a nuestras capacidades para el diseño
 y nuestra vena artista, así como a la incorporación de otros lenguajes para definir el formato con el que 
se tienen que presentar las webs, como CSS.

Una vez conocemos el concepto de HTML os vamos a adelantar algunas cosas más. Este lenguaje se escribe 
en un documento de texto, por eso necesitamos un editor de textos para escribir una página web. Así pues, 
el archivo donde está contenido el código HTML es un archivo de texto, con una peculiaridad, que tiene 
extensión .html o .htm (es indiferente cuál utilizar). De modo que cuando programemos en HTML lo haremos 
con un editor de textos, lo más sencillo posible y guardaremos nuestros trabajos con extensión .html, 

por ejemplo mipagina.html

Clase Número 7

CLASE NÚMERO 7

1. No cierre las etiquetas PHP


Una gran cantidad de desarrolladores cierran la etiqueta PHP, tal como el siguiente ejemplo:

<?php

1 class TuClase{
2
3 public function TuFuncion(){
4
5 //Algo debe de hacer, no?
6
7    }
8 }
9

?>

El problema con esto es que puede introducir caracteres de espacio o de nueva línea en blanco
si el desarrollador no tiene cuidado. Esto puede causar dolores de cabeza más adelante,
cuando las cabeceras son interrumpidas o espacios en blanco aparecen inexplicablemente
en la salida.

Ok, así que ¿qué se debe hacer?

Esto es perfectamente aceptable:

<?php

1 class TuClase{
2 public function TuFuncion(){
3 //Algo debe de hacer, no?
4 }
5 }
6
7
?>


Para ser honesto, la única vez que realmente debes cerrar las etiquetas PHP es cuando
estás mezclando PHP con HTML:

1 <h1><?php echo $title; ?></h1>
2 <p><?php echo $description; ?></p>


2. No utilice las funciones mysql_*.


A partir de PHP 5.5, las funciones mysql se han desaprobado oficialmente. Según el sitio
web oficial de PHP, la extensión por defecto de MySQL se eliminará por completo en el futuro.
Si eso no te persuade para encontrar una alternativa, entonces deberías considerar también
el hecho de que carece de soporte a una serie de características de MySQL. Lo más
destacado de las nuevas funciones son:

– Declaraciones preparadas.
– Transacciones.
– Procedimientos almacenados.
– Consultas asíncronas.
– Sentencias múltiples.

El hecho es que esta extensión casi obsoleta fue desarrollada para la versión MySQL 3.23.
Desde entonces, muy poco en realidad se ha añadido en el camino a las características.

OK, así que lo puedo usar en su lugar?

Dos buenas alternativas son PDO y MySQLi. Personalmente, prefiero usar PDO, ya que proporciona
una capa de abstracción de acceso a datos, lo que básicamente significa que puedes utilizar las
mismas funciones para acceder a otras bases de datos, así (PostgreSQL, SQLite, etc).


3. Protéjase contra XSS!


XSS (también conocido como Cross-site scripting) es una vulnerabilidad que permite a los
atacantes ejecutar código desde el lado del cliente en tu sitio web. Por ejemplo: Si entro algo de
JavaScript en un formulario de comentarios y te muestro ese comentario sin limpiarlo, el código
en cuestión se ejecutará cada vez que un usuario carga la página. Para defenderse de este tipo
de vulnerabilidad, debe desinfectar los datos enviados por el usuario antes de que se muestre en
la página. Para ello, puede utilizar la función htmlspecialchars:

<?php

1 echo htmlspecialchars($userComment, ENT_QUOTES, 'utf-8');
2 Esta función convierte los caracteres especiales en sus entidades HTML correspondientes,
por lo que son seguros para su visualización


4. No sobre comentar el código


La documentación apropiada del código en definitiva es una buena práctica, pero ¿es realmente
necesario comentar cada línea? Probablemente no. Comentar las secciones complicadas de su
código fuente para que cuando vuelva a visitarlo recordará rápidamente lo que está pasando,
pero no comentamos las cosas simples, como su código de conexión MySQL.

La manera correcta:

<?php

1 /* Conexion a la base de datos */
2
3 $hostname = "localhost";
4 $username = "";
5 $password = "";
6 $dbname = "";
7
8 $connectionStatus = mysql_connect($hostname, $username, $password) or die(mysql_error());
9
10 $selectionStatus = mysql_select_db($dbname) or die(mysql_error());
11
12 /* Fin conexion a la base de datos */
13
?>

5. Conozca el concepto DRY.


El paradigma DRY – Don’t Repeat Yourself el algo que sin duda debes de aplicar cuando comiences
a codear. Debes evitar una situación en la que estás repitiendo exactamente el mismo código.
Esto se puede hacer a través de el uso de un simple include, funciones y clases. Por ejemplo,
si tengo un pedazo de código que calcula la edad de una persona, puedo crear una función de
este modo:

<?php

1 function CalcularEdad($dateOfBirth){
2
3     $birthday = new DateTime($dateOfBirth);
4      $interval = $birthday->diff(new DateTime);
5     return $interval->y;
6 }
7
?>

Ahora, cada vez que quiero para calcular la edad de un usuario, sólo tengo que llamar a la función
anterior; en lugar de repetir la misma lógica. Esto es ventajoso porque:

– Mi código base es menor como consecuencia.
– Si tengo que modificar la lógica, puedo editar la función de CalcularEdad.


6. Contraseñas de usuario Seguras!


Las contraseñas de usuario deben hash, no se almacenan en formato de texto o base codificada
(en serio, de hecho he encontrado esto antes). Una función hash es una calle de sentido único.
Una vez que la contraseña en texto plano se ha transmitido a través de él, no hay manera de
recuperarlo (de ahí la razón por la que utilizamos el término “hash”, no “cifrado”).
Si está usando PHP> = 5.5, debe utilizar el password_hash función. Si está atrapado en una
versión anterior, entonces usted puede hacer uso de la librería password_compat en Github.


7. Utiliza sentencias preparadas!


Una de las principales ventajas de usar PDO es que permite que puedas hacer uso de
sentencias preparadas. En el pasado, los desarrolladores de PHP se vieron obligados a
usar unciones como mysql_real_escape_string así:

<?php

1 $username = mysql_real_escape_string($username, $connection);
2 $result = mysql_query("SELECT name FROM users WHERE username = '$username'");
3

?>

Esta función escapa caracteres especiales que puedan causar problemas con tu sentencia SQL.
Es decir, ayuda a proteger contra la inyección SQL. Sin embargo, lo que no hará es a protegerse
de los ataques que no implican caracteres especiales como x00, n, r, , ‘, ” y x1a.

Afortunadamente, la inyección de SQL no es rival para comandos preparados. Con declaraciones
preparadas, la sentencia SQL se envía al servidor antes de que los datos, manteniendolos independientes
entre sí. Esto significa que la base de datos sabe lo que necesita para ejecutar correctamente,
antes de que cualquier carácter potencialmente peligrosos se envían a través de la comunicación.
Un ejemplo de la selección de filas con el objeto PDO:

<?php

1 //Preparamos la sentencia SQL. En esta etapa se va enviado al servidor
2 $stmt = $db->prepare("SELECT name FROM users WHERE username = :username");
3
4 //Enlazamos nuestros parámetros / datos.
5 $stmt->bindParam(':username', $username);
6
7 //Ejecutamos la sentencia.
8 $stmt->execute();
9

?>

Nota importante: Con la extensión PDO, tendrás que activar manualmente el uso de declaraciones
“naturales” preparadas. A los efectos de la portabilidad, esta extensión utiliza el emulado de
las declaraciones preparadas por defecto. Para desactivar comandos preparados emulados,
puede utilizar el siguiente código:

<?php

1 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
2

?>


8. “or die ()” tiene que morir …


Si has decidido ignorar por completo todas las ventajas del por que usar PDO, entonces creo
que es justo decir que es probable que estés manejando consultas poco practicas,
como por ejemplo:

<?php

1mysql_query($sql, $conn) or die(mysql_error($conn));
2

?>

El problema con el enfoque anterior es que no se puede detectar el error o registrarlo.
Tampoco se puede controlar si es o no se da salida a la pantalla. A los ojos de la función
de la matriz, un servidor de desarrollo y un servidor de producción, son exactamente la
misma cosa! No se puede controlar a través de los ajustes del .ini o un archivo de configuración
de todo el sitio.

Un mejor enfoque a este sería el uso de excepciones, simplemente porque pueden ser
capturados o manipulados:

<?php

1 $res = mysql_query($sql, $conn);
2 if($res === false){
3    throw new Exception(mysql_error($conn));
4 }
5

?>

La excepción anterior puede ser capturada con un bloque TRY CATCH o manejada con un
manejador de excepción personalizada. Esto te da mucho más control sobre cómo los
errores se manejan. Por supuesto, si se utiliza la extensión PDO, podrías tener los errores SQL
lanzando excepciones por defecto utilizando el siguiente atributo:

<?php

1 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
2


?>

Clase Número 6

CLASE NÚMERO 6

If: Significa (SI) en español. Sirve para evaluar una condición, si está es verdadera se ejecutará.

Else: Significa (SI NO) en español. Sirve para que, si la función no se cumple, está ejecute otro caso.

Else If: Es una combinación de if y else. Del mismo modo que else (SI NO) extiende una sentencia if (SI) para ejecutar una opción distinta si la posición If original se encuentra como FALSE (Falsa).

Clase Número 5

CLASE NÚMERO 5


hicimos el inicio de un servidor desde cada uno de los computadores por medio de Xampp a la hora de iniciar apache, el cual cada uno de los computadores tiene su propio servidor y pueden entrar a ver el contenido de un computador por medio del IP de este, siendo así a nivel LAN (Local Area Network).
 Aprendimos la introducción del lenguaje PHP y algunas cosas básicas más.

Clase Número 4

CLASE NÚMERO 4


Glosario de PHP:




<?php: Indica el inicio del pseudocódigo.

?>: Indica el final del pseudocódigo.


Echo: Es la función que se utiliza para escribir.

(; o :): Es el cierre de cada linea del pseudocódigo.


<pre>: Sirve para imprimir en pantalla tal cual y como escribo(obviamente con la ayuda de (Echo)).

</pre>: Sirve para cerrar la función <pre>.

<br>: Se utiliza para hacer un salto de renglón.

Array: Se utiliza para guardar valores del mismo tipo pero de manera ordenada.