domingo, 30 de enero de 2011

jQuery deshabilita el hotlinking



A partir de mañana 31 de enero de 2011 jQuery dejará de soportar el hotlinking a sus archivos. Por tal razón todos los que usemos la dirección directa a jquery.com para obtener la librería nos veremos afectados.

Lo que necesitamos revisar es que no incluyamos los archivos de la siguiente manera:

<script type="text/javascript" 
   src="http://www.jquery.com/...">
</script>

Para garantizar que nuestras páginas no se verán afectadas por este cambio, debemos cerciorarnos de que estemos utilizando una copia local de jquery o que utilicemos uno de los diferentes CDN's que nos proporcionan ya sea google, microsoft o el mismo jquery.

Aquí esta la lista de los CDN's(Content Delivery Network) que podemos utilizar:

Google Ajax API CDN
https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js

Microsoft CDN
http://ajax.microsoft.com/ajax/jquery/jquery-1.4.4.min.js

jQuery CDN (via Media Temple)
http://code.jquery.com/jquery-1.4.4.min.js

jueves, 13 de enero de 2011

Crear un script PHP que envie Notificaciones Push utilizando Notifo

Hoy estuve trabajando en un mini proyecto para poder mandar notificaciones push a nuestro iphone utilizando php y alguna aplicación para el iPhone. De esta manera podemos mandar alertas de nuestros servidores o de nuestras aplicaciones web directamente a nuestro smartphone.

Esta idea surgió ya que necesitaba mandar alertas al smartphone cuando algún cliente registrará un ticket con alguna solicitud de servicio y debido a que el iPhone es el smartphone mas utilizado en mi lugar de trabajo decidí utilizar algo que funcionará en él.

Despues de realizar una búsqueda exhaustiva en google, encontré 3 aplicaciones para realizar esta tarea, estas fueron: pushme.to, boxcar y notifo.

La primera aplicación que probé fue la de pushme.to y la verdad resultó ser la mas sencilla aunque no me convencía del todo ya que para utilizarla debíamos ademas de tenerla la aplicación instalada en nuestro iPhone y haber creado una cuenta, necesitábamos extraer una url utilizada en un iframe que pushme.to utiliza para poder embeber su widget en alguna pagina que queramos. No voy a explicar como se utiliza ya que eso lo podemos encontrar en la siguiente dirección si asi lo queremos:
www.barattalo.it


La segunda aplicación que utilice fue boxcar. Esta aplicación cuenta con un api que explica como enviar notificaciones push, sin embargo en la sección de foros de ayuda de la página encontré una clase en php que simplificaba aun mas las cosas. Con la ayuda obtenida ahí pude hacer funcionar el envío de notificaciones, lo único necesario fue modificar la clase con los datos de mi cuenta, instalar la aplicación en mi iPhone y por último activar el servicio growl desde la aplicación. En general la aplicación trabaja bastante bien y no es nada difícil configurarla, el motivo por el cual no me decidí a utilizarla fue que no pude hacer funcionar que al momento de desbloquear el iPhone y "ver" la notificación no era posible abrir una página web. Aqui les dejo los links por si quieren echarle un vistazo:
boxcar.io
boxcar PHP class

Por último decidí probar la api de notifo. Esta aplicación cuenta con una api muy bien explicada ademas de contar con dos formas de utilizar sus servicios. La primera opción es crear una cuanta de usuario, la cual solo permite enviar notificaciones a ti mismo y otra que te permite crear una cuenta para servicio, con un límite de 10,000 notificaciones al mes gratis.

Para el ejemplo propuesto aquí utilizaremos la cuenta de usuario, para ello es necesario crear una cuenta en notifo.com.


Las credenciales que utilizaremos para autentificarnos desde nuestra aplicación será nuestro nombre de usuario y nuestra "API Secret" que podremos encontrar en la sección Settings.

El link de descarga de las librerías para utilizar la api las podemos encontrar aquí. Cuenta con librerias para PHP, Python, .NET, ColdFusion y Ruby.

A continuación les dejo el código del script que envía la notificación...

<?php
/* incluye el archivo Notifo_API */
require("Notifo_API.php");

/* crea un nuevo objeto "notifo" */
$notifo = new Notifo_API("nombreDeUsuario", "apiSecret");

/* establece los parámetros de la notificación */
$params = array("to"=>"nombreDeUsuario", 
"label"=>"NotificaciónPHP", 
"title"=>"Titulo del Mensaje",
"msg"=>"Aquí va el mensaje de prueba de la notificación.",
"uri"=>"http://www.google.com");

/* envía la notificación! */
$response = $notifo->send_notification($params);

/* hacer uso de la respuesta */
print_r($response);
/* ... */

?>

y de la clase que hace uso de la api:

<?php

class Notifo_API {

const API_ROOT = 'https://api.notifo.com/';
const API_VER = 'v1';

protected $apiUsername;
protected $apiSecret;

/**
* class constructor
*/
function __construct($apiUsername, $apiSecret) {
$this->apiUsername = $apiUsername;
$this->apiSecret = $apiSecret;
}

function set_apiusername($val) {
$this->apiUsername = $val;
}

function set_apisecret($val) {
$this->apiSecret = $val;
}

/**
* function: sendNotification
* @param: $params - an associative array of parameters to send to the Notifo API.
* These can be any of the following:
* to, msg, label, title, uri
* See https://api.notifo.com/ for more information
*/
function sendNotification($params) {
$validFields = array('to', 'msg', 'label', 'title', 'uri');
$params = array_intersect_key($params, array_flip($validFields));
return $this->sendRequest('send_notification', 'POST', $params);
} /* end function sendNotification */

function sendMessage($params) {
$validFields = array('to','msg');
$params = array_intersect_key($params, array_flip($validFields));
return $this->sendRequest('send_message', 'POST', $params);
}

/**
* function: subscribeUser
* @param: $username - the username to subscribe to your Notifo service
* See https://api.notifo.com/ for more information
*/
function subscribeUser($username) {
return $this->sendRequest('subscribe_user', 'POST', array('username' => $username));
} /* end function subscribeUser */


/**
* helper function to send the requests
* @param $method - name of remote method to call
* @param $type - HTTP method (GET, POST, etc)
* @param $data - array with arguments for remote method
*/
function sendRequest($method, $type, $data) {

$url = self::API_ROOT.self::API_VER.'/'.$method;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if ($type == "POST") {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($ch, CURLOPT_USERPWD, $this->apiUsername.':'.$this->apiSecret);
curl_setopt($ch, CURLOPT_HEADER, false);

/*
* if you are on a shared host or do not have access to install
* the root CA certificates on your server, uncomment the next
* two lines or the curl_exec call may fail with null
*/
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

$result = curl_exec($ch);
$result = json_decode($result, true);
return $result;
} /* end function sendRequest */

// for backwards compatibility
function send_notification($params) { return json_encode($this->sendNotification($params)); }
function send_message($params) { return json_encode($this->sendMessage($params)); }
function subscribe_user($username) { return json_encode($this->subscribeUser($username)); }
function send_request($url, $type, $data) { return json_encode($this->sendRequest($method, $type, $data)); }

} /* end class Notifo_API */

?>


Link de descarga de la aplicacion notifo.

Ejemplo de la notificación push:

lunes, 3 de enero de 2011

Crear URLs mas profesionales para nuestras Aplicaciones Web

Quiero compartir algo que no se si sea de mucha utilidad pero si que da una mejor presentación a nuestras aplicaciones web.

Para este ejemplo usaremos php pero es posible realizarlo con cualquier otro lenguaje de programación para desarrollar en la web.

El objetivo de este post es ocultar la tecnología que utilizamos al usuario final. En lugar de utilizar una url así:

www.dominio.com/ejemplo.php

cambiarla por una url asi:

www.dominio.com/ejemplo/

Aunque es posible realizar ésto de varias formas, para mi la manera mas sencilla, ya sea por no tener acceso a la configuración del servidor donde hospedamos la aplicación o por que no queremos batallar con dicha configuración, es la siguiente:

Si partimos de que tenemos nuestro proyecto en nuestro servidor local (yo utilizo xampp) llamado "ejemplo", con el archivo "ejemplo.php". La dirección url quedaría de la siguiente manera:

http://localhost/ejemplo/ejemplo.php


Lo que tenemos que hacer para lograr "ocultar" la extensión del archivo es simple. Primero creamos una carpeta en el lugar donde se encuentra el archivo ejemplo.php con el nombre "ejemplo" y despues metemos dentro de ésta carpeta el archivo ejemplo.php. Para finalizar, es necesario cambiar el nombre del archivo ejemplo.php por index.php, de esta manera podemos realizar lo siguiente para acceder a éste archivo:

http://localhost/ejemplo/ejemplo/


De esta manera evitamos mostrarle al usuario final la tecnología utilizada y al mismo tiempo damos mayor presentación a nuestras aplicaciones.

Primer post del año!

Después de casi dos años sin publicar nada debido a falta de tiempo, ahora que salí de la facultad he decidido volver a las andadas del blogger!

Aquí publicaré noticias acerca de temas variados como código PHP, noticias acerca del iPhone y cualquier otra cosa que crea relevante.