jueves 17 de septiembre de 2009

Ejemplo de trabajo con imágenes en Visual Basic .NET

No tengo ganas de escribir mucho pero en PAV 1 andamos con estas cosas:
Se trata de un formulario que carga distintas imágenes del disco local y las muestra en el form, luego se puede navegar entre las imágenes cargadas gracias a los eventos clic sobre las imágenes, después de programar bastante tiempo en PHP y en local sobre Java me llevo una gran sorpresa al ver la facilidad con la que Visual Basic .NET y todos sus amigos .NET tienen para el diseño de este tipo de aplicaciones(pero me quedo con lo que es gratis, todavía no lo se explicar pero después de investigar tanto y leer tantas cosas sobre las tecnologías gratuitas Visual Basic me parece que solamente tiene una forma de hacer las cosas y una sola forma de ejecutarse):

Una imagen vale mas que mil palabras (pero depuse nunca vienen mal unas líneas de código)
appvisuales

En este ejemplo hay varios componentes que deben ser agregados y correctamente nombrados:
Un botón que para este ejemplo se llama Button3
Un OpenFileDialog llamado ofd
Un TextBox llamado txt
Y cuatro PictureBox llamados picBLOB, picBLOB2, picBLOB3 y picBLOB4

Código Fuente:
Imports System.IO
Imports System.Drawing.Imaging

Public Class Form1
    Dim conta As Integer = 0
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
    Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ofd.FileOk
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If conta = 0 Then
            ofd.ShowDialog()
            txt.Text = ofd.FileName
            picBLOB.Image = Image.FromFile(txt.Text)
            picBLOB.BringToFront()
        End If
        If conta = 1 Then
            ofd.ShowDialog()
            txt.Text = ofd.FileName
            picBLOB2.Image = Image.FromFile(txt.Text)
            picBLOB2.Visible = True
            picBLOB2.BringToFront()
        End If
        If conta = 2 Then
            ofd.ShowDialog()
            txt.Text = ofd.FileName
            picBLOB3.Image = Image.FromFile(txt.Text)
            picBLOB3.Visible = True
            picBLOB3.BringToFront()
        End If
        If conta = 3 Then
            ofd.ShowDialog()
            txt.Text = ofd.FileName
            picBLOB4.Image = Image.FromFile(txt.Text)
            picBLOB4.Visible = True
            picBLOB4.BringToFront()
        End If
        If conta = 3 Then
            conta = -1
        End If
        conta = conta + 1
    End Sub

    Private Sub picBLOB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picBLOB.Click
        picBLOB.Visible = True
        picBLOB.BringToFront()
        conta = 0
    End Sub

    Private Sub picBLOB2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picBLOB2.Click
        picBLOB2.Visible = True
        picBLOB2.BringToFront()
        conta = 1
    End Sub

    Private Sub picBLOB3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picBLOB3.Click
        picBLOB3.Visible = True
        picBLOB3.BringToFront()
        conta = 2
    End Sub

    Private Sub picBLOB4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picBLOB4.Click
        picBLOB4.Visible = True
        picBLOB4.BringToFront()
        conta = 3
    End Sub

End Class

miércoles 16 de septiembre de 2009

Creación de Aplicaciones en Facebook

La red de redes se esta convirtiendo en un espacio tan atractivo para los usuarios como para los desarrolladores web

Ayer se conoció la noticia de que Facebook había logrado flujo positivo en sus cuentas, es decir que los ingresos superaban los gastos de mantener ese enorme monstruo en línea. Además se dio a conocer que la red llego a los 300 millones de usuarios.

A que desarrollador le gustaría acceder a 300 millones de usuarios? bueno aunque sea a la mitad de ellos, o por lo menos el 00, 01 %....

Bueno la posibilidad esta presente, como dicen todas las reviews de Facebook que podemos encontrar por allí: Facebook es de especial interés por que permite una plataforma sobre la que terceros desarrollan aplicaciones accediendo a la propagación viral propia de la red social.

Ahora como crear una aplicación ya es un tema un poco mas complicado para una nota de prensa pero como el titulo es ese vamos a ver como hacemos una aplicación básica que no tiene ningún comportamiento propio pero que hace uso de varias funciones del API para acceder a informacion de los contactos y que además realiza publicaciones en el muro del usuario:

Facebook permite trabajar en múltiples entornos a los que hay que agregarles determinadas bibliotecas provistas por el mismo Facebook. Puntualmente programo en php así que voy a utilizar el API para php.

Para empezar hay que estar inscripto en Facebook y acceder a la pagina de Creadores en la dirección: http://www.facebook.com/developers/ de allí hay un botón que permite crear nuestra aplicación. Como configurarla lo pueden obtener de cualquier blog dedicado a programación que seguramente posteo el tema recientemente, para estos ejemplos debe ser un iframe y además es necesario copiar las API Key y Application Secret de tu nueva aplicación, después se deben bajar la librería de PHP y subirla a su servidor en donde alojaran la aplicación.

Deben insertar en su php el archivo facebook.php y a continuación pedir el ID del usuario que esta iniciando sesión en nuestra app:

$appapikey = '------------------------------------------------------';

$appsecret = '+++++++++++++++++++++++++++++++';

$facebook = new Facebook($appapikey, $appsecret);

$user_id = $facebook-> require_login();

Luego de eso podemos acceder a una funcion del objeto facebook que nos devolverá las ID de todos los amigos de nuestro usuario:

$friends_ids = $facebook-> api_client-> friends_get();

Si por ejemplo nuestra aplicación trabaja con datos guardados en una base de datos podemos utilizar el ID de usuario para relacionar los distintos inicios de sesión, así cuando un usuario deje por ejemplo un mensaje este podrá visualizarse solamente a sus amigos.

Para hacer estas primeras acciones no hizo falta mas que el usuario inicie sesión en la aplicación pero si queremos acceder a otros permisos como por ejemplo la publicación en el muro del usuario de un enlace debemos pedir por medio del API que el usuario confirme el acceso a su muro, esto se hace preguntando por la propiedad y redirigiendo a la pagina en cuestión si no esta disponible:

// extraemos si tiene permisos sobre 'share_item'

$hasPermission = $facebook-> api_client-> call_method("facebook.users.hasAppPermission", array(

'uid' => $user_id,

'ext_perm' => 'share_item'

));

if ( !$hasPermission )

{

// Si no los tiene redirigimos a la página para solicitarlos

header( "location: http://www.facebook.com/authorize.php?api_key=".$appapikey."& v=1.0& ext_perm=share_item& next=[url luego de aceptar]& next_cancel=[url si no acepta]");

}

else

{

// si tiene permisos no hacemos nada y continuamos nuestra app

}

Nótese que uno de los parametros enviados a authorize.php es la appikey, eso quizas sea un problema a solucionar, no me parece mostrarlo así nomas, es casi como el add de fotolog.

Ahora que tenemos los permisos de publicar en el muro podemos escribir un mensaje en el:

//Publica su lugar en el muro

$message = 'Estuvo jugando en la aplicación de juan perez';

$attachment = array('name' => 'Puntaje de '.$user_id, 'href' => 'http://apps.facebook.com/aplicaciondejuanperez/', 'caption' => '{*actor*} publico '.$user_id, 'description' => $algunavariableenphpquedescribaalgo, 'properties' => array('category' => array('text' => $tagdelaapp, 'href' => 'http://apps.facebook.com/aplicaciondejuanperez/'), 'ratings' => '5 estrellas, obvio'), 'media' => array(array('type' => 'image', 'src' => 'http://www.imageshack.us/smile.jpg', 'href' => 'http://apps.facebook.com/aplicaciondejuanperez/')), 'latitude' => '41.4', 'longitude' => '2.19');

$action_links = array(array('text' => 'Perfil de la Aplicacion', 'href' => 'http://www.facebook.com/apps/application.php?id=9282948372984374832'));

try { $facebook-> api_client-> stream_publish($message, $attachment, $action_links); } Catch (Exception $e) { }

//Termina de publicar

Que cosas interesantes hay aquí:

Tenemos un mensaje principal, luego construimos una variable bastante grande en donde como pueden ver se pueden editar todo lo que esta entre comillas simples o es variable php, importante aclaración: en anteúltimo renglón hay un id=muchosnumeros esa es la ID visible de la aplicación, es el acceso al perfil de la misma. Y lo otro importante es poner la llamada al API de php entre bloques try catch por que si no tenemos permisos o hemos sobrepasado el máximo permitido nos dará un error en tiempo de ejecución que no podremos sortear, salvo que pongamos try catch.

Bueno espero haberlos ilustrado un poco, muy poco. Pero para empezar a jugar es suficiente.

Les dejo mi aplicación para que vean cual es el verdadero potencial de las aplicaciones de Facebook, se trata de un mapa de Google Maps donde los usuarios pueden dejar un marcador y darle una descripción, sus amigos pueden ver los marcadores en cuestión.

Mi servidor envía aproximadamente 20kb por cada usuario que agrega un lugar, increíble no?

http://apps.facebook.com/mapasatelitalonda/