lunes, 14 de octubre de 2013

Videojuego con Python, Pilas Engine y Arduino - Parte 1

En esta ocasión  estoy realizando mi primer videojuego, es algo sencillo. anteriormente en la universidad había realizado el típico snake con C y Conio pero como tarea. Hoy intento realizar este pequeño juego para el cumpleaños de mi hija utilizando uno de sus personajes preferidos.

El video genera "enemigos" aleatoriamente que son las bombas  y también genera estrellas que al tomarlas aumentan el puntaje y generará premios eventualmente y de forma random también, que al tomarlos mediante serial y arduino entregara un chocolate mediante un mecanismo (Pendiente).

Para realizar este juego utilizo el lenguaje de programacion Python junto a un interesante motor y fácil de utilizar, Pilas Engine un proyecto latino y que nos hace la vida mas fácil a la hora de desarrollar videojuegos.

También utilizo la librería Pyserial para la comunicación entre Arduino y Python.

el juego es controlado de la siguiente forma:




Es una placa de Arduino UNO que lee desde su puerto análogo 0 un LDR de esta forma el esquema de conexión:


El programa que alojara Arduino es sencillo y calcula mediante un umbral si enviara 1 o 0 por el puerto serial el cual estará recibiendo nuestro código en python, 1 significa arriba y 0 abajo.

int umbral = 660;
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(0);
  // print out the value you read:
   if (sensorValue < umbral)
    {
      Serial.println("00");
    }
    else {
      Serial.println("10");
    }
delay(30);
  //Serial.println(sensorValue);
}

Luego subiré el código en Python en la segunda parte del Post.
 Hasta la PROXYma.

viernes, 26 de julio de 2013

RIP Barnaby Jack, conocía las técnicas para atacar dispositivos cardíacos





El conocido 'hacker', Barnaby Jack, ha muerto en San Francisco, una semana antes de mostrar las técnicas que conocía para atacar los dispositivos cardíacos implantados en las personas y que según dijopodía matar que se encuentre a 10 metros de distancia aproximadamente.

De momento no se conocen detalles sobre las causas de la muerte. La oficina médica forense de San Francisco explicó que Jack ha fallecido en la ciudad el jueves, pero no ha dado más detalles.

Barnaby Jack, experto en seguridad, se convirtió en uno de los 'hackers' más famosos del planeta, cuando en 2010 consiguió controlar los cajeros automáticos para que le entregasen el dinero que contenían y grabasen la información de las tarjetas que se insertasen en él. Fue tan conocido que a esta técnica se la llegó a apodar como 'Jackpotting'.

La comunidad de hackers ha expresado su sorpresa a través de las redes sociales por la noticia de su muerte, que se ha extendido a través de Twitter el viernes por la mañana. El pirata informático Tyler Shields escribió "Wow... Sin palabras" y la empresa de seguridad informática para la que trabajaba, IOActive, dijo en un tweet: "nunca olvidaremos a nuestro querido pirata, Barnaby Jack".

Trabajaba como director de seguridad de dispositivos integrados de IOActive y su genialidad fue conseguir 'hackear' aparatos médicos, como marcapasos o bombas de insulina, alterando su funcionamiento de manera que pudiera causar la muerte de la persona. Llegó a encontrar errores en los aparatos médicos de una importante marca y afirmó: "puedo recuperar los códigos necesarios para intervenir en los implantes individuales a distancia".

El pirata informático tenía previsto presentar su última investigacióndurante el próximo foro de hackers conocido como 'Black Hat hacking', en las que había recibido la ovación de sus compañeros por su creatividad y talento para el espectáculo.

miércoles, 24 de julio de 2013

Realizar llamada por medio de Arduino y Asterisk (Video)



Realizar llamada de acuerdo al cambio de luminosidad en el ambiente por medio de Arduino, es decir cuando el nivel de luz cambie Arduino le dara la orden a Asterisk para realizar una llamada anunciando un movimiento.

(Utilizamos Arduino UNO con Ethernet Shield)

El video ilustrativo de como funciona:


Creamos el archivo arduino.php en /var/lib/asterisk/agi-bin/ :

#!/usr/bin/php -q

<?php
require("phpagi.php");

$agi = new AGI();

        $agi->answer();
        $return = $agi->get_data('beep', 30000, 1);

        $agi->text2wav("Hubo movimiento en la habitacion ");
        $agi->hangup();

?>


En /var/www/html (la ruta que tienen configurado en el server web) creamos el archivo call_sense.php :


<?php


$luz = $_GET['luz'];

echo $luz;
$asterisk_outgoing = "/var/spool/asterisk/outgoing/";

$asterisk_tmp = "/tmp/";

$asterisk_cid = "Sensor de Luz<7307>"; // the from caller id you'd like to display.

                $arduinocallfile = "/$asterisk_tmp/arduino_call.txt";

                $arduinocall = fopen($arduinocallfile, 'w') or die("can't open file");


$arduinocall_data="Channel:SIP/7306\nApplication:AGI\nData:arduino.php\nCallerID:$asterisk$
                fwrite($arduinocall, $arduinocall_data);

                fclose($arduinocall);



                // chmod, chown and chgrp the file to asterisk:asterisk

                 chmod ("/$asterisk_tmp/arduino_call.txt", 0666);

                 chown ("/$asterisk_tmp/arduino_call.txt", "asterisk");

                 chgrp ("/$asterisk_tmp/arduino_call.txt", "asterisk");


                rename("/$asterisk_tmp/arduino_call.txt","/$asterisk_outgoing/arduino_call.call");
?>


Y ahora el código de nuesto Arduino UNO :

Antes el diagrama de conexión:


Código:

#include <SPI.h>

#include <Ethernet.h>


int lightPin = 0; 
int threshold = 640;  //este valor lo modificamos de acuerdo el nivel de sensibilidad que tiene nuestra fotoresistencia dada por la resistencia que esta entre A0 y GND.



byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { xxx, xxx, xxx, x }; //IP del servidor web donde esta Asterisk y el archivo call_sense.php
int luz = 0;
EthernetClient client;

  
void setup()


{


  Ethernet.begin(mac);


  Serial.begin(9600);


}



void loop () {

  Serial.println(Ethernet.localIP());
senddata();
delay(500);


}


void senddata()
{


  Serial.println(analogRead(lightPin)); 

    if(analogRead(lightPin) > threshold ){    
      
        Serial.println("high"); 
    }else{
        
        Serial.println("low"); 
        
         luz = 1;
          Serial.println();
          Serial.println("Iniciando conexion!");
          Serial.println("Conectando!");
          delay(1000); //This one keeps it from hanging
          
          if (client.connect(server,80)) {
          Serial.println("Connected!");
          client.print("GET http://XXX.XXX.XXX.X/call_sense.php?luz=");
          client.print(luz);
          client.println(" HTTP/1.1");
          client.println("User-Agent: Arduino 1.0");
          client.println("Host: xxx.xxx.xxx.x");
          client.println();
                                      }
           
           else 
           {
           Serial.println("Connection failed");
           client.stop();
           }
                  
    }     
    


}




martes, 23 de julio de 2013

Asterisk: Generar llamada automática de acuerdo al clima en una ciudad

Una de las posibilidades que tenemos con Asterisk es que podemos realizar llamadas automatizadas a travez de nuestros scripts en diferentes lenguajes de programación: PHP, Perl, Java, C, en fin, mediante una interfaz transparente al usuario haciendo modificaciones o consultando bases de datos, consultando estados de variables, controlar el dialplan, etc.. haciendo la llamada desde el archivo extensions_custom.conf y por medio de un archivo .call  , y todo esto gracias a Asterisk Gateway Interface (AGI) .

Manos a la obra:

-En la el archivo de extensions_custom.conf agregamos la extension 7307 en la cual mediante AGI llamaremos al script php.

extensions_custom.conf

exten => 7307,1,Answer
exten => 7307,2,AGI(/var/lib/asterisk/agi-bin/mencionar_clima.php)
exten => 7307,3,Hangup


-Ahora escribimos el script que creara el archivo .call , el cual es el que realizara la llamada automáticamente siempre y cuando la temperatura sea mayor a 31 (Este script lo podemos colocar en la ruta /var/lib/asterisk/agi-bin/ ) la temperatura ustedes la pueden ajustar a sus necesidades:

llamada_clima.php

#!/usr/bin/php -q

<?php

$asterisk_outgoing = "/var/spool/asterisk/outgoing/";

$asterisk_tmp = "/tmp/";

$asterisk_cid = "Clima<000>"; 


$temp=file_get_contents('http://www.interactivahn.com/climahonduras/sensores/lugares_turisticos.php');

        if($temp>31){

                $callfile = "/$asterisk_tmp/arduino_call.txt";

                $call = fopen($callfile, 'w') or die("can't open file");


                $call_data="Channel:SIP/7306\nExtension:7307\nCallerID:$asterisk_cid";

                fwrite($call, $call_data);

                fclose($call);
                 chmod ("/$asterisk_tmp/_call.txt", 0666);

                 chown ("/$asterisk_tmp/_call.txt", "asterisk");

                 chgrp ("/$asterisk_tmp/_call.txt", "asterisk");

                rename("/$asterisk_tmp/_call.txt","/$asterisk_outgoing/_call.call");
        }

?>

Con este código creamos el archivo en .call en la ruta de outgoing que revisa el Asterisk para realizar la llamada cuando encuentre un nuevo archivo en la carpeta.

Donde Channel:SIP/7306 es la extensión a donde va dirigida la llamada y Extension:7307 es la extencion a que ejecuta el AGI con la línea que anteriormente escribimos (exten => 7307,2,AGI(/var/lib/asterisk/agi-bin/mencionar_clima.php)
)

-Ahora nos falta el archivo mencionar_clima.php que es el que nos habla cuando contestamos la extesion 7306:


#!/usr/bin/php -q

<?php

require("phpagi.php");
$agi = new AGI();


   $return = $agi->get_data('beep', 30000, 1);
  //Nos muestra la temperatura actual de San Pedro Sula, Honduras
   $temp=file_get_contents('http://www.interactivahn.com/climahonduras/sensores/tempsps.php');
   $text="La temperatura en s p s es de ".$temp." grados centigrados";

    $agi->text2wav($text);


?>

-Lo que nos queda es programar en el crontab para que se ejecute periódicamente el archivo llamada_clima.php y si en la hora que se ejecuta la temperatura sobrepasa los 31 grados centigrados, efectuara la llamada.

Este script con algunas modificaciones podría servir para Hoteles, en donde los huéspedes puedan programar "alertas" para el clima con una llamada a la central telefónica (Asterisk), y que les llame cuando la temperatura este en el punto que ellos desean para salir o que les avise si habrá lluvia a determinada hora.

Hay tantas posibilidades, el limite es su imaginación.

jueves, 20 de junio de 2013

2 Herramientas, Ixquick y Wickr





Enviar mensajes gratis a otros usuarios Wickr en cualquier parte del mundo,  sin dejar rastro y auto destructivos.

Wickr fue fundada en San Francisco, California por un equipo de expertos en seguridad y privacidad que creen que las comunicaciones privadas son un derecho humano universal que es muy importante para una sociedad libre. Hoy, ese derecho es casi inexistente.

Wickr usa AES256 para proteger los datos,  también utiliza Hash SHA256 Transport Layer Security (TLS). Las claves de cifrado se utilizan sólo una vez y luego son destruidas por teléfono del remitente.

Puedes enviar archivos, wickr se encarga de eliminar metadata que contengan información nuestra o del equipo que enviamos los datos, envió encriptado de mensajes, se integra con Box, Dropbox, Google Drive.

Wickr se está convirtiendo en el sistema de comunicación más grande en el mundo, dándole poder a la gente.






Ixquick


Ixquick es un metabuscador localizado en Nueva York y Holanda, que ha provisto más de 120 millones de búsquedas desde 2004.


Fue relanzado el 23 de marzo de 2005 con muchas nuevas características, incluyendo un algoritmo de metabúsqueda rediseñado y un directorio telefónico internacional.


El 27 de junio de 2006, Ixquick.com se convirtió en el primer motor de búsqueda que borra la información privada de sus usuarios. Direcciones IP y otra información personal eran borrados dentro de 48 horas desde la búsqueda. Ixquick tampoco comparte la información personal de sus usuarios con otros motores de búsquedas o con sus patrocinadores.


A partir del 29 de enero de 2009, Ixquick no registra las direcciones IP de sus usuarios en absoluto.






Estas herramientas nos pueden servir a todos, pero el post lo hice pensando en herramientas que les pueda dar mas seguridad en la información a los periodistas.






Hasta la PROXYma.



lunes, 10 de junio de 2013

Sreenscraping usando extension de Google Chrome’s Scraper

¿Cómo se obtiene la información de un sitio Web a una hoja de Excel? 

La respuesta es screenscraping. Hay una serie de programas y Plattformas (como OutWit Hub, Google Docs y Scraping Wiki) que le ayuda a hacer esto, pero ninguno de ellos son - en mi opinión - tan fácil de utilizar como la extensión  Google Chrome scraper.

Que es Screen Scrapping?

El Screen Scrapping o “respaldo de pantalla”, es una técnica usada para extraer automáticamente información de un documento, un documento puede ser una página web, un archivo PDF, un archivo de Word, etc.

Google Chrome's Scraper puede ser instalado gratis desde aquí: link

Ahora que ya la tenemos instalada procedemos a realizar las pruebas, en cualquier pagina web da click derecho sobre el texto y debería salir algo así entre las opciones: 


Manos a la obra:  Sacar los nombres de los diputados de la bancada nacional de Honduras con laURL de la imagen. (url: http://www.congresonacional.hn/images/bancadaN/PN.html )


Damos click derecho sobre el nombre de uno de los diputados, y escogemos la opción "Scrape similar...", en donde nos saldrá este ventana:


Si nos fijamos solamente obtuvimos la url de la imagen de los diputados, nos falta el nombre en el campo de XPath donde dice @tittle lo cambiamos por @alt quedando así y veremos que ya sale el nombre de los diputados:



Y veremos en la esquina inferior derecha el botón "Export to Google Docs" click ahi y veremos que ya tenemos nuestros datos.






martes, 4 de junio de 2013

Controlar LED con Arduino a través de Asterisk (Video)

Comencé  con Arduino desde hace ya algún tiempo, y quise escribir un post fuera de lo común y debido a que últimamente me a tocado "trastear" con Asterisk, que mejor que unirlos aquí.

El escenario:

Arduino IDE 1.0.4
Placa Arduino UNO con Ethernet Shield.
FreePBX Version 2.8.1.4
Asterisk 1.6.2.21


Lo que vamos a hacer es ejecutar un PHP cuando Asterisk reciba una llamada a la extensión eje: 7307 .
Para esto usaremos en nuestro script la libreria phpagi.php que se encuentra en /var/lib/asterisk/agi-bin/

Link del codigo PHP: https://docs.google.com/file/d/0B4yVk8iE3E-FYjBXMGozZVpfQmc/edit?usp=sharing

Link del codigo para Arduino .pde: https://docs.google.com/file/d/0B4yVk8iE3E-FV1VPSmJUcl9ESms/edit?usp=sharing

En nuestro Arduino el LED estará conectado al puerto digital 4.

En el server Asterisk lo siguiente:
El código php lo copiaremos en la ruta /var/lib/asterisk/agi-bin/ y daremos permisos al usuario asterisk sobre el script con chown asterisk:asterisk arduino_control.php

En /etc/asterisk/extensions_custom.conf agregamos:


; Arduino Control
exten => 7307,1,Answer
exten => 7307,2,AGI(arduino_control.php)
exten => 7307,3,Hangup



Este código lo tome de Nerdybynature y modifique principalmente el .pde para adaptarlo a mi versión.

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Web Host