Cuando un JSON viene con error

Traté de muchas maneras poder utilizar un webservice que entregaba un JSON, pero no me daba ningún resultado.

Al principio pensé que estaba haciendo mal las cosas, utilizando Ajax, JQuery, etc. pero la verdad era que el servicio estaba entregando los datos con unos caracteres raros al principio.

Obviamente Google me ayudó y di con la función que te permite limpiar esos caracteres que no corresponden y que no nos permitirán leer de manera correcta un JSON.

<?php
$datos = file_get_contents("http://domino.com/Json");
// Remover carcateres que no queremos
// http://www.php.net/chr
for ($i = 0; $i <= 31; ++$i) {
$datos = str_replace(chr($i), "", $datos);
}
$datos = str_replace(chr(127), "", $datos);
// algunos archivos comienzan con 'efbbbf' para marcar el comienzo del archivo (nivel binario)
// aqui lo detectamos y removemos, basicamente los 3 primeros caracteres
if (0 === strpos(bin2hex($datos), 'efbbbf')) {
$datos = substr($datos, 3);
}
//Decodificamos el json y lo imprimimos
$datos = json_decode( $datos );
print_r($datos);
?>

Ahora a continuar con el desarrollo de una aplicación web (y posiblemente para smartphone) consumiendo estos datos interesantes.

UDID o UUID en iPhone

En estos días de aplicaciones híbridas en mi trabajo, tuve que aprender un montón de cosas, como por ejemplo que es el UDID o UUID de un iPhone.

El identificador único universal es un número de 32 dígitos hexadecimales, que como bien dice su nombre es único y sirve para identificar un iPhone, en mi caso particular, para que la distribución de una aplicación sea solamente a los equipos que yo necesite.

La manera más simple de obtener este número es a través de iTunes, conectando el equipo, luego en el menu del iPhone en Resumen está el número de serie, lo pinchas y se transforma en el famoso UDID.

Me había quedado en el pasado…. mysql

Este mes a sido un mes de aprendizaje en todo sentido. De una idea en una pizarra, nació una app de la cual debo sentirme orgulloso. Pero tuve que aprender y recordar cosas que hace mucho tiempo no utilizaba.

Entre esas cosas MYSQL y las consultas. Me había quedado en el pasado y el servidor donde estaba desarrollando las consultas me dijo “Hey! esa función es muy vieja…. “. Así que comparto con Uds, si es que aún viven en el pasado, la comparación entre mysql mysqli y PDO.

Es super importante tener en consideración ya que la versión 7 de PHP no admite mysql y por lo tanto cuando generas una conexión “a la antigua” ya no funcionará por ningún motivo. Entre PDO y mysqli ? Me quedo con el segundo. (ejemplo extraido desde php.net)

<?php
// mysqli
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedatos");
$resultado = $mysqli->query("SELECT '¡Hola, querido usuario de MySQL!' AS _message FROM DUAL");
$fila = $resultado->fetch_assoc();
echo htmlentities($fila['_message']);

// PDO
$pdo = new PDO('mysql:host=ejemplo.com;dbname=basedatos', 'usuario', 'contraseña');
$sentencia = $pdo->query("SELECT '¡Hola, querido usuario de MySQL!' AS _message FROM DUAL");
$fila = $sentencia->fetch(PDO::FETCH_ASSOC);
echo htmlentities($fila['_message']);

// mysql
$c = mysql_connect("ejemplo.com", "usuario", "contraseña");
mysql_select_db("basedatos");
$resultado = mysql_query("SELECT '¡Hola, querido usuario de MySQL!' AS _message FROM DUAL");
$fila = mysql_fetch_assoc($resultado);
echo htmlentities($fila['_message']);
?>


Review: La Momia

Hace tiempo atrás comenté el trailer de La Momia, el cual nos mostraba el reboot que Universal quería hacer de los mounstruos clasicos de antaño, el Dark Universe.

Hace algunos días fuimos al cine con mi Nenny y nos encontramos con la grata sorpresa de una película con acción, humor, suspenso y una historia que claramente conectará futuras entregas entre las cuales ya se confirma “La Novia de Frankenstein” para el 2019.

En La Momia, vemos a Tom Cruise en el papel de Nick Morton, un “sabandija” militar que busca tesoros en Asia para venderlos en el mercado negro. Para su suerte (o mala suerte) descubre la tumba de Ahmanet y la maldición cae sobre él.

Russell Crowe aparece como el Dr. Jekill, mienbro de una organización que lucha contra estas criaturas y deja ver su alter ego Mr. Hyde, en un par de escenas. Esperamos que el personaje sea desarrollado en futuras entregas y lo veamos en acción.

No puedo dejar de lado y comentar que la escena del avión, la cual apareció en los trailers (incluso una versión sin efectos de sonido que era muy cómica), me dejó con una sensación de desesperación y como si yo hubiese estado en ese avión, una escena muy bien lograda que subió la puntuación de la película.

Finalmente debo decir que es una película que perfectamente funciona para el público de la casa, no es una obra maestra, pero entretiene y mantiene muy bien el ritmo de principio a fin. Lamentablemente no tiene escenas finales (según lo que busqué por internet, una vez que terminó) aunque siempre quedé con la duda, ya que no prendieron las luces del cine al comenzar los créditos.

Si quiere ir al cine, vaya… pero si puede esperar hasta verla en la comodidad de su casa, totalmente recomendado.

 

Todos los sismos del día en Chile

API Google Maps + Web Scraping

Poco a poco mejorando el código, tomé todos los sismos del día en Chile, desde la web de Sismología.cl y puse un marcador por cada uno. Simplemente utilizando un arreglo y recorriendolo con un simple FOR.

Ahora la idea es ir por más y utilizar la magnitud de cada sismo y crear marcadores dependiendo de los valores, puede ser con colores o puede ser tamaños distintos.

Si alguien está interesado en el código, puede solicitarmelo en los comentarios.

http://eq.roison.me/sismosdiarios.php

Google Maps API + PHP Web Scraping

Hace mucho tiempo pensaba hacer algún tipo de servicio que me mostrara la información del último sismo registrado en Chile. Tratando de buscar información, nunca dí con un servicio online que me diera esa información, por lo tanto me acordé del famoso Web Scraping.

Que es el Web Scraping? Bueno como dice Wikipedia, es una técnica que se utiliza para extraer información desde sitios web, simulando la navegación en los mismos, ya sea a través de una aplicación…. o en mi caso por PHP.

Siemplemente en este caso busqué donde se publica el último sismo registrado en Chile. Para eso me basé en la información que entrega www.sismologia.cl

A través de una función de PHP (file_get_contents) ingreso a la pagina donde está el listado con el último sismo, busco los datos que están separados por columnas y esos datos los asigno a variables. Luego esas variables las utilizo para crear a través de la API de Google Maps, el mapa centrado en la coordenada del sismo y agrego una marca con algunos datos del sismo, logrando algo como esto:

Esto fue solo un ejercicio para poder aprender el uso de la API de Google Maps, creando marcadores dinámicos, que se actualiza cada vez que hago un refresco de la página. Hay cosas que mejorar en el código o ir más allá y automatizar el proceso, para que el último sismo quede registrado en una BD y luego al cargar el mapa, la marca se extraiga del último registro.

Con eso podría marcar todos los sismos del día en un mismo mapa o incluso un historico de sismos. Algo interesante para continuar aprendiendo.

Si alguien quiere el código me lo pide! Pueden ver el último sismo en este mismo sitio, o ingresando a http://eq.roison.me

Star Wars el Teaser Trailer – The Last Jedi

Impresionante, este año me quedo sin plata. El cine va a consumir todos mis recursos del item “Entretención”

InfoPath, Mayusculas <-> Minusculas

Uno de los problemas que me dió InfoPath en unos formularios que tenía aprobaciones de por medio, es que al hacer la comparación entre quien debía aprobar (buscando en Active Directory) y quien abría el formulario (utilizando la funcion userName() o nombreUsuario()), comparaba incluso las mayusculas y minusculas.

La solución más simple era transformar ambos o a mayusculas o a minusculas, así no tendría nunca el problema de meter manos al código del formulario para poder permitir estas aprobaciones.

La función que permite hacer eso es: Traducir() o Translate()

Como usarla?
Translate(string;”abcdefghijklmnopqrstuvwxyz”;”ABCDEFGHIJKLMNOPQRSTUVWXYZ”)

Simplemente el string lo puedes tomar de una función o de una variable.

 

Evento Pascua en Pokémon Go

Desde hoy hasta el 20 de Abril tendremos la posibilidad de encontrar en los huevos de 2Kms una gran variedad de personajes.

El evento denominado Eggstravaganza, además premiará con más puntos de experiencia y caramelos al abrir los huevos.

Go Pokémon Trainers!

A proposito de Thor Ragnarok…

Una de las cosas más entretenidas en las últimas entregas de trailers, es la música que utilizan… en el caso del recien lanzado Trailer de Thor Ragnarok, viene un excelente tema de Led Zeppellin: Immigrant Song.

De seguro lo habían escuchado en la gran pelicula de Jack Black: Escuela de Rock

DJ/Programador/Analista