Archivos de la categoría: Desarrollo

Obtener la ciudad del cliente en PHP

Hola Mundo:

Ya saben, estoy metiéndome poco a poco en desarrollo y les quiero compartir un trocito de código que utilicé en un proyecto.
El objetivo de este código  es obtener la ciudad del visitante a partir de la dirección IP.

 $ip = $_SERVER['REMOTE_ADDR'];
$url = "http://freegeoip.net/json/".$ip;
$data = file_get_contents($url);
$obj = json_decode($data);
$ciudad = $obj->city;

El codigo es sencillo. Obtiene un archivo JSON desde el servicio de Free Geo IP, lo procesa y almacena la ciudad en una variable.

Sencillo, ¿no?

Enviar datos a Azure Mobile Apps usando jQuery

Hola Mundo:

Este artículo es un tanto distinto a los que siempre se publican. Esta vez es sobre desarrollo, pero
consumiendo servicios publicados en Microsoft Azure.

Azure Mobile Apps es un servicio de Microsoft Azure que permite levantar, sin mayor esfuerzo, un backend para aplicaciones móviles. Este backend puede estar construido con ASP.NET o Node.js.
De cualquier manera, provee las herramientas para generar una REST API lista para ser consumida desde las aplicaciones cliente.

Me refiero a aplicaciones cliente y no móviles, porque estos servicios pueden ser consumidos desde cualquier lugar. Incluso desde un sistema web usando Javascript.

En este caso puntual, compartiré una ayuda de memoria para enviar datos usando jQuery usando el método AJAX:

$.ajax({
type: "POST",
contentType: "application/json; charset=UTF-8",
url: "https://xxxxxxx.azurewebsites.net/tables/xxxxxx",
headers: {'ZUMO-API-VERSION': '2.0.0', 'Content-Type': 'application/json'},
data: JSON.stringify({
"Campo1": "Valor1",
"Campo2": "Valor2"
}),
dataType: "json",
accept: "json",
success: function(datos){
console.log(datos)
alert('Datos reportados correctamente')
},
error: function(jqXHR, estado, error){
console.log(estado)
console.log(error)
},
complete: function(jqXHR, estado){
console.log(estado)
},
timeout: 1000000000
});

Lo relevante:

  • El type es POST. No olvidar que estamos enviando datos al servidor. Si tienes duda sobre esto, revisa este link: http://www.restapitutorial.com/lessons/httpmethods.html
  • contentType debe ser “application/json; charset=UTF-8”. El servidor recibe datos en formato JSON. De otra forma, arrojará error 500.
  • La url es la dirección web del servicio. Esta es la forma más estándar si es que no han creado una personalizada.
  • La cabecera de la petición se indica en headers. Siempre debe estar incluido ‘ZUMO-API-VERSION’: ‘2.0.0’ y  ‘Content-Type’: ‘application/json’. En el caso que alguno falte, la consola indicará que hace falta una de las dos y arrojará un error 500 o 400.
  • En data se indican los datos que se enviarán. El método stringify del objeto JSON es el encargado de hacer que los datos que estamos enviando sigan el formato de JSON.  Recuerden que en contentType y en la cabecera se indica que estamos enviando datos en formato JSON. Si esto no está, recibirán un error 400.
  • El atributo accept le indica al servidor el formato en el que se requiere la respuesta.
  • El atributo dataType es usado por jQuery para “formatear” la respuesta antes de dejarla disponible para el trabajo con ella.
  • Success indica la función que se ejecutará cuando los datos se reporten correctamente.
  • Error indica la función que se ejecutará cuando se produzca un error en el reporte de datos.
  • Complete indica la función que se ejecutará luego de la ejecución de lo indicado en Success o Error.
  • Timeout indica el tiempo total de espera, en milisegundos, antes de cancelar la operación. Previene una ejecución casi infinita de la solicitud.
Nada más quería estar a la moda y jugar un rato con Javascript y Azure.
Espero que les sea de su total utilidad.

Rápida reflexión sobre seguridad y IoT

Hola Mundo:

En los últimos 2 ó 3 años hemos visto como han ido creciendo el desarrollo de las tecnologías que se conectan directamente a internet y aportan datos de todo tipo. Ya es cada vez más común que los electrodomésticos se conecten a Internet y muchas personas estén experimentando con dispositivos y componentes cada vez más baratos que apoyan en la lectura de variable y automatización de procesos.

Es entretenido ver a adultos jugando como niños al construir sus proyectos con Arduino o Raspberry Pi o algún otro hardware y construyendo piezas de software exclusivos para el sistema.

El principal problema está en que no se trabaja con un equipo con roles definidos, donde cada uno se encargue de las distintas variables de un sistema: red, administración, seguridad, procesos, etc.
Es momento de tomar conciencia y hacerse responsable de todo lo que conectamos a internet.

Esto nace del conocido ataque DDoS al servicio Dyn del pasado viernes, donde se descubrió que el ataque venía del Botnet Mirai. Este botnet se aprovecha de los dispositivos sencillos conectados a internet o que forman parte de algún sistema IoT.

Existen decenas de herramientas gratuitas y de código abierto que apoyan en el monitoreo de recursos y detección de intrusos que permitirían apoyar en la seguridad de los entornos.

Aparte de las herramientas externas para el monitoreo de nuestra solución, también se deben revisar constantemente las actualizaciones del firmware de nuestro dispositivo o del sistema operativo que esté utilizando. Es altamente recomendable unirse a las listas de distribución del dispositivo para estar  enterado de las actualizaciones del componente.

El llamado es a trabajar en equipo y a estudiar más allá del desarrollo del proyecto en si, siendo responsable de las “cosas” que conectamos a internet.

Mas información:
http://dyn.com/blog/dyn-statement-on-10212016-ddos-attack/
https://en.wikipedia.org/wiki/2016_Dyn_cyberattack
http://www.zdnet.com/article/the-dyn-report-what-we-know-so-far-about-the-worlds-biggest-ddos-attack/

Un abrazo a todos y sigamos desarrollando!

Ubicacion de adb en Mac OS X

Hola Mundo:

Dentro de los variados tópicos que aquí se hablan a calzón quitado, ahora es el turno de un tip interesante de la plataforma de desarrollo de Android para Mac OS X.

Hace unos días instalé la suite de Android Studio para aprender el oficio del desarrollo de móviles y hacer algunas aplicaciones para mi entretención.

Al querer instalar el sdk de Facebook, me di cuenta que no encontraba la herramienta adb para el trabajo con el emulador. En varias partes encontré ubicaciones que no correspondían a mi escenario. De tanto buscar en mi equipo, di con la ubicación. Esta es:

/Users/<usuario>/Library/Android/sdk/platform-tools

Teniendo esta información, la pueden agregar al PATH y listo.

Chau!