Archive for the '9345' Category

Amazon Web Services User Group Buenos Aires: Reunión Mayo 2012

Saturday, May 12th, 2012

Se viene otra reunión de este grupo de usuarios. Organizada por @matiasbagini, será el miércoles 23 de Mayo, en sus oficinas de JRapid. Ver detalles y dirección en :

http://www.meetup.com/AWS-User-Group-Buenos-Aires/events/60434612/

Leo ahí:

AWS entregará U$S 20 de crédito para los asistentes al evento.

La reunión de mayo estará enfocada hacia usuarios con poca o nula experiencia en AWS que quieran comenzar a utilizar los servicios. Presentaremos una charla que responderá, entre otras, las siguientes preguntas:

* Qué es AWS?
* Cómo crear una cuenta?
* De qué trata S3 y EC2?
* Cómo es el pricing y cuáles son los diferentes tipos de instancias?
* Conviene usar servidores en USA? Europa? San Pablo?
* Qué es una AMI? cuál conviene usar? Linux o Windows?
* Cómo hosteo mi sitio web en AWS?
* Qué es CloudFront?
* Qué otros servicios ofrece AWS?

La presentación será principalmente práctica para que aquellos que lo deseen puedan irse con su cuenta creada y su primer sitio/aplicación corriendo.

Mis enlaces sobre Amazon Web Services:

http://delicious.com/ajlopez/aws

Ya asistí a la reunión anterior, espero poder asistir a ésta que viene. Tengo pendiente escribir sobre lo que estudié (en la reunión anterior me gané un libro), todavía no usé AWS directamente en un proyecto.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Programando Juegos Sociales en Línea (Parte 1) Introducción

Wednesday, July 20th, 2011

Ya saben, soy un gran fan de Farmvill. Me empuja a organizarme los días, usando los ritmos de las cosechas. Es un control de mi agenda diaria: si planto algo en mi granja, entonces reservo el tiempo para luego cosecharla. Y es un juego en línea donde uno puede jugar solo, sin molestar a otras personas. Pero hay vecinos, que son otros usuarios, registrados en la red social de Facebook.

Pero “I digress”, el tópico es la programación de este tipo de juegos, como Farmville: los problemas y desafíos de programar juegos sociales en línea. Curiosamente, los más exitosos juegos de la historia de la industria son juegos en línea, pero no los más sofisticados: en vez de juegos en tiempo real y 3D, Farmville es un jugador, con simple rendering 2D. Los desafíos en juego sociales no están en los gráficos o en la experiencia de usuario.

En esta serie, quiero enumerar los patrones y soluciones que podemos usar en juegos sociales y en línea. No soy un experto en el tema: el desarrollo de juegos no es mi parte de mi “expertise” (todavía ;-). Pero para mí, es una forma de ganar conocimiento de los problemas y posibles soluciones en este tipo de desarrollo. Me lleva a estudiar nuevas tecnologías, librerías, herramientas y conceptos.

Algunos subtemas que voy a visitar (con enlaces, ejemplos de otros, puede que algún código propio):

– Tecnologías cliente
– Tecnologías servidores
– Comunicación, mensajes
– Cloud Computing (para asegurar escalabilidad, rendimiento, disponibilidad)
– Estilos arquitectónicos y patrones a usar (mi tema preferido)
– Tipo de juegos: jugador en solitario, juego basado en turnos, tiempo real
– Tests (TDD, y otro tipo de tests)

Podría escribir dos ejemplos simples (un jugador, y otro de turnos), pero tengo que revisar mis tiempos para ver si puedo desarrollar esos entregables. Sería una buena excusa para ejercitarme en REST, Javascript, JQuery, HTML5 (y su canvas?), PHP, Azure, inteligencia artificial? 😉

Es una larga viaje, pero este es el primer paso.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Ejecutando AjSharp en Azure

Tuesday, June 14th, 2011

El code kata de este pasado fin de semana fue algo que estaba pensando desde el último año: ejecutar AjSharp (mis post en español de AjSharp) dentro de un Worker Role de Azure. Pero desde antes que pienso: un intérprete como AjSharp puede servir de lenguaje de scripting en sistemas distribuidos. Esta incursión en Azure es una prueba de concepto interesante.

La idea es: una instancia de worker role recibe un texto via una cola de mensaje. El texto contiene código AjSharp y lo ejecuta. La salida (digamos, los PrintLine) se captura como texto y se envía como mensaje a otra cola.

El resultado del ejercicio está dentro de mi AjCodeKata project: tienen que bajarse trunk\Azure\AzureAjSharp Y TAMBIEN trunk\AjLanguage (donde está el proyecto AjSharp).

La solución:

Los proyectos:

AzureAjSharp.WorkerRole: un worker role de ejemplo, con estas líneas agregadas:

CloudStorageAccount account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
Processor processor = new Processor(account);
processor.Start();

Azure.AjSharp: la librería de clases principal del proyecto. Contiene una clase Processor. Los constructores necesitan una cuenta de cloud y los nombres (opcionales, hay valores “default”): cola de requests, responses y un blob container. La cola de request contiene mensajes con código AjSharp para ejecutar (recuerden que AjSharp puede acceder a clases y objetos .NET: pueden invocar código compilado tranquilamente). La cola de response tiene el texto de salida de esas ejecuciones. El código de arriba processor.Start() inicia la lectura y ejecución de esos mensajes AjSharp.

AzureAjSharp.Console: Es el programa que lee líneas de la consola, y cuando ingresamos una línea que contiene sólo “send”, el texto ingresado se convierte en un mensaje Azure que va a la cola de requests. Este programa también va leyendo (en un Thread aparte) los mensajes que le llegan por la cola de responses, imprimiendo el resultado.

AzureLibrary: Clases auxiliares que usé en otros ejemplos de Azure.

AjSharpVS2010, AjLanguageVS2010: Implementación de AjSharp .

Cuando ejecuto el programa de consola, puedo enviar código AjSharp para ejecutar en un worker role, y recibir el resultado:

Vean que uso clases .NET como DirectoryInfo.

Y hay más: AjSharp soporta el Include(“nombredearchivoaserincluido”); donde el archivo contiene más código AjSharp. Modifiqué el lanzamiento de la máquina AjSharp para que tenga una versión cambiada de Include: ahora busca el contenido en un blob. Eso permite incluir y reusar código que no quepa en un mensaje, desde un blob container

Un gráfico:

Entonces, subí algo de código (los archivos originales están en el directorio Examples del proyecto Azure.AjSharp) en el contenedor blob llamado ajsfiles (para esta prueba en mi DevStorage):

(Estoy usando Neudesic Azure Storage Explorer, pero podría usar también CloudBerry Explorer for Azure Storage: soporta el manejo de carpetas en árbol).

Esta es el resultado de la ejecución de código con include de HelloWorld.ajs, y ForOneToTen.ajs:

Próximos pasos:

– Escribir más código utilitario en AjSharp, para ser incluido en otros programas, como: utilitarios de manejo de File y Directory, download y upload de blobs, envío y recepción de mensajes en cola, mensajes a todos los worker role intances, bajada y carga de assemblies, objetos a compartir entre request y request de AjSharp, etc. El cielo es el límite! 😉

Entonces, podemos (nosotros o un programa) enviar tareas dinámicamente y recibir resultados. Algo para tener: Guids para identificar tareas y sus resultados; una interfaz web; resultados almacenados como blobs; cache (y flush) de los archivos incluidos, etc…

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez




				

Azure: Una aplicación simple usando Tables

Wednesday, February 9th, 2011

Continuando con mis ejemplos de Azure, esta vez escribí una simple aplicación web CRUD, usando Tables, con Tables, usando Azure Storage Client.

Es una aplicación de ASP.NET clásico, con esta vista para CustomerList.aspx:

Pueden bajarse la solución desde mi AjCodeKatas Google project. El código está en:

http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/Azure/AzureCustomers

Si quieren pueden bajarse directamente la versión “congelada” desde: AzureCustomers.zip.

La simple entidad Customer:

public class Customer : TableServiceEntity
{
    public Customer()
        : this(Guid.NewGuid().ToString())
    {
    }
    public Customer(string id)
        : base(id, string.Empty)
    {
    }
    public string Name { get; set; }
    public string Address { get; set; }
    public string Notes { get; set; }
}

Estoy usando la PartitionKey como clave primaria, llenándola con un Guid. La RowKey es el string vacío. En una aplicación menos simple, podría grabar las facturas de un cliente usando la misma Partition Key, identificando cada factura con un RowKey distinto.

Un DataContext está a cargo de exponer un IQueryable de Customers:

public class DataContext : TableServiceContext
{
    public const string CustomerTableName = "Customers";
    public DataContext(string baseAddress, StorageCredentials credentials)
        : base(baseAddress, credentials)
    {
        this.IgnoreResourceNotFoundException = true;
    }
    public DataContext(CloudStorageAccount storageAccount)
        : base(storageAccount.TableEndpoint.AbsoluteUri, storageAccount.Credentials)
    {
        this.IgnoreResourceNotFoundException = true;
    }       
    public IQueryable<Customer> Customers
    {
        get
        {
            return this.CreateQuery<Customer>(CustomerTableName);
        }
    }
}

Noten el IgnoreNotFoundException: si está en verdadero, puedo recuperar un cliente inexistente sin levantar una excepción, y retornar un valor null.

Hay un servicio para acceder y manejar los Customers:

public class CustomerServices
{
    private DataContext context;
    public CustomerServices(DataContext context)
    {
        this.context = context;
    }
    public Customer GetCustomerById(string id)
    {
        return this.context.Customers.Where(c => c.PartitionKey == id).SingleOrDefault();
    }
    public IEnumerable<Customer> GetCustomerList()
    {
        return this.context.Customers.ToList().OrderBy(c => c.Name);
    }
    public void AddCustomer(Customer customer)
    {
        this.context.AddObject(DataContext.CustomerTableName, customer);
        this.context.SaveChanges();
    }
    public void UpdateCustomer(Customer customer)
    {
        this.context.AttachTo(DataContext.CustomerTableName, customer, "*");
        this.context.UpdateObject(customer);
        this.context.SaveChanges();
    }
    public void DeleteCustomerById(string id)
    {
        Customer c = this.GetCustomerById(id);
        this.context.DeleteObject(c);
        this.context.SaveChanges();
    }
}

Noten el uso de Attach con ETag (tercer parámetro) de “*” (any). De esta forma, podemos actualizar el cliente adosando el “creado en memoria” al contexto de datos, sin recuperalo desde la base de datos. Esta forma de hacerlo es viable si tengo todos los datos del cliente, y no me importa sobreescribir cambios posibles que se hubieran hecho en el storage. En muchas aplicaciones uno cambia solamente parte del estado, ante una operación (por ejemplo, cambio de domiciolio). Entonces se recupera el objeto, se cambia parte del estado y se lo graba.

Usando el servico para recuperar los clientes:

CloudStorageAccount storage = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
CustomerServices services = new CustomerServices(new DataContext(storage));
this.grdCustomerList.DataSource = services.GetCustomerList();
this.grdCustomerList.DataBind();

Nota: ésta es una aplicación de ejemplo, simple y directa. Una aplicación real debería separar el modelo de vista del modelo de negocio, y posiblemente, usar ASP.NET MVC en la presentación. Escribiré este ejemplo usando MVC. En otra serie (fuera de ésta relacionado con Azura), quiero escribir una aplicación ASP.NET MVC usando TDD.

Próximos pasos en Azure: una aplicación distribuida que calcule un fractar, un web crawler distribuido, un algoritmo genético usando Worker Roles.

Nos leemos!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Programando con Windows Azure en Buenos Aires

Thursday, February 3rd, 2011

Gracias a la gente del MUG (Microsoft User Group) de Argentina, el martes 15 y el jueves 17 de Febrero estaré dando un curso gratuito de programación en Windows Azure. Son dos horas el martes y dos horas más el jueves, de 19 a 21hs.

Detalles e inscripción (hay que registrarse) en:

Seminario Gratuito – Programando en Windows Azure

Los temas a dar:

– Cloud Computing en general, IaaS , PaaS, SaaS
– Windows Azure
– Conceptos del HyperVisor, Fabric
– Service Model
– Web Roles
– Worker Roles
– Azure Storage: Blobs, Queues, Tables
– Patrones
– Ejemplos

Voy a mostrar ejemplos, algunos ya publicados acá en posts sobre Azure, y otros nuevos. Azure me parece un tema muy interesante, que permite comenzar a implementar aplicaciones distribuidas, más allá de tener las ventajas del Cloud Computing (escalabilidad, disponibilidad…) Habrán notado que desde hace años aparecen por este blog posts relacionados con aplicaciones distribuidas. Y los que me escucharon en alguna charla (como las de Maratón 2.0) saben que me decanto por explotar el tema de distribución para implementar temas nuevos, como la convergencia de inteligencia artifical y web semántica, y más.

Espero que los que puedan venir encuentren interesante el seminario. Como siempre, quedará publicado por acá el material presentado.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Resultado de la ALT.NET Hispano VAN de Programando en Azure

Wednesday, February 2nd, 2011

Ya había adelantado esta reunión virtual en:

ALT.NET Hispano VAN Programando en Azure

Gracias a la gente de la comunidad ALT.NET Hispano, pude participar el sábado pasado presentando Programando en Windows Azure. Pueden bajarse la presentación desde mi Skydrive en AzureProgramming201101.pptx. La presentación se basa en slides traducidos de varias presentaciones del Azure Training Kit (el lunes 31 de Enero fue publicada una nueva versión). Les recomiendo bajarse ese material, porque ahí encontraran ejemplos (la gente de Microsoft los llama “hands-on labs”), explicados, y con instrucciones para reproducirlos paso a paso.

La reunión fue grabada, y pueden ver el video en:

Programando con Windows Azure – ALT.NET Hispano Wiki

Estuvimos viendo conceptos generales de Azure, y luego, usando Visual Studio 2010, el Azure SDK:

Windows Azure SDK and Windows Azure Tools for Microsoft Visual Studio (November 2010)

Esa versión SDK 1.3 es para VS2010, y me bajé el archivo VSCloudService.exe (no importa si es 32 o 64 bits) que contiene el SDK y las tools para Visual Studio, no hace falta bajarse el SDK aparte, viene dentro de este archivo. Si tienen que usar Visual Studio 2008, tienen que buscar el SDK 1.2, que fue la última versión que tiene soporte para esa IDE. Lamentablemente, no pueden convivir en la misma máquina el SDK 1.2 y el 1.3.

Y el Azure Storage Explorer, de Neudesic, a bajar desde Codeplex:

Azure Storage Explorer

Durante la charla, me concentré en explicar, para quien es nuevo en Azure, dos grandes temas:

Azure Compute, con Web Roles y Worker Roles.

Azure Storage: con Tables, Queues y Blobs.

Los ejemplos de la charla (con tablas, uso de colas, y blobs) pueden bajarlo del Google code project AjCodeKatas, pueden bajarlos desde:

http://ajcodekatas.googlecode.com/svn/trunk/Azure

Los que no tienen SVN pueden ver la versión “congelada” a estos días:

AjCodeKatasAzure.zip

Ejemplos reducidos de Azure Training Kit que tratan esos temas (si no quieren bajarse TODO el kit), en AzureLabs.zip.

Ya escribí en anteriores posts sobre algunos ejemplos presentados. Tengo que publicar sobre el ejemplo de generación de fractal usando un cliente WinForms local y worker roles que hacen el trabajo (incluido en los ejemplos presentados):

Bibliografía usada:

Programming Windows Azure, Sriram Krisham; O’Reilly
Azure in Action, Chris Hay, Brian H. Prince; Manning
Introducing Windows Azure, Henri Li; Apress

Enlaces que fui usando, los coleccioné en:

http://delicious.com/ajlopez/azure
http://delicious.com/ajlopez/azure+tutorial
http://delicious.com/ajlopez/azure+video
http://delicious.com/ajlopez/azure+storage

Algunos enlaces a destacar:

http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-azure-storage-abstractions-and-their-scalability-targets.aspx
http://blogs.msdn.com/b/windowsazurestorage/archive/2010/12/30/windows-azure-storage-architecture-overview.aspx
http://www.microsoftpdc.com/2009/SVC08
http://code.msdn.microsoft.com/windowsazuresamples
http://blogs.msdn.com/b/olavt/archive/2009/03/12/using-windows-azure-blob-storage-to-store-aerial-images.aspx

Próximos pasos: escribir sobre el ejemplo de Azure Fractal, y escribir un ejemplo de Web Crawler usando Tables, Queues, Web Role y Worker Roles.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

ALT.NET Hispano VAN Programando en Azure

Friday, January 7th, 2011

Gracias a la gente de la comunidad ALT.NET Hispano, el próximo sábado 29 de Enero, a las 18hs (GMT) (15hs acá en Argentina), participaré de una VAN (desconferencia virtual), tratando el de Programar en Azure.

Presentaré los temas:

– Conceptos de Windows Azure y Cloud Computing

– Web Roles

– Worker Roles

– Azure Storage: Blobs, Queues, Tables

– Patrones

– Ejemplos

Tratando de dar una visión de cómo se puede programar y aprovechar la plataforma Azure para nuestras aplicaciones en la nube. Ya estoy publicando código y ejemplos en este blog. Lo que presente quedará en la página de la comunidad y en este blog.

Mis enlaces sobre el tema:

http://delicious.com/ajlopez/azure

Para participar, entrar al enlace http://snipr.com/virtualaltnet

Recuerdo lo que el Microsoft MVP @jorgegamba escribió sobre estas reuniones:

Hay que aclarar que no se requiere ningún tipo de registro, simplemente acudir el día y la hora indicados a la dirección Web http://snipr.com/virtualaltnet, eso sí, deberán tener instalado el programa cliente de Live Meeting; hay más instrucciones sobre cómo hacer esto y otras indicaciones en la página Descripción de Reuniones.

Para los que no puedan asistir, quedará publicado un video en el sitio de la comunidad.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Azure: Multithreads en Worker Role, un ejemplo

Tuesday, December 14th, 2010

En mi anterior post, implementé un simple worker role, consumiendo y produciendo números desde y en una cola. Ahora, una nueva aplicación:

El worker role implementa la generación de una secuencia Collatz. Para conocer sobre esta secuencia, problema:

http://mathworld.wolfram.com/CollatzProblem.html
http://en.wikipedia.org/wiki/Collatz_conjecture
http://www.ericr.nl/wondrous/

Pueden bajar la solución desde AjCodeKatas Google project. El código está en la rama:

http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/Azure/AzureCollatz

La página inicial es simple, sin validaciones:

El rango de números es enviada a la cola:

protected void btnProcess_Click(object sender, EventArgs e)
{
    int from = Convert.ToInt32(txtFromNumber.Text);
    int to = Convert.ToInt32(txtToNumber.Text);
    for (int k=from; k<=to; k++) 
    {
        CloudQueueMessage msg = new CloudQueueMessage(k.ToString());
        WebRole.Instance.NumbersQueue.AddMessage(msg);
    }
}

El worker role toma cada mensaje, y calcula la secuencia Collatz del número recibido en cada mensaje:

Agregué una clase en Azure.Library: un MessageProcessor que consumen mensajes de una cola, en su propio thread:

public MessageProcessor(CloudQueue queue, Func<CloudQueueMessage, bool> process)
{
    this.queue = queue;
    this.process = process;
}
public void Start()
{
    Thread thread = new Thread(new ThreadStart(this.Run));
    thread.Start();
}
public void Run()
{
    while (true)
    {
        try
        {
            CloudQueueMessage msg = this.queue.GetMessage();
            if (this.ProcessMessage(msg))
                this.queue.DeleteMessage(msg);
        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex.Message, "Error");
        }
    }
}
public virtual bool ProcessMessage(CloudQueueMessage msg)
{
    if (msg != null && this.process != null)
        return this.process(msg);
    Trace.WriteLine("Working", "Information");
    Thread.Sleep(10000);
    return false;
}

El worker role, en vez de atender un mensaje a la vez, lanza un número fijo (12) de MessageProcessor. De esta manera, cada instancia de Azure que tengamos disponible se dedica a procesar varios mensajes, en paralelo. No sería necesario para este simple ejemplo. Pero es una “prueba de concepto” para ir viendo de usar esta idea de múltiples threads. Parte del método Run en el worker role:

QueueUtilities qutil = new QueueUtilities(account);
CloudQueue queue = qutil.CreateQueueIfNotExists("numbers");
CloudQueueClient qclient = account.CreateCloudQueueClient();
for (int k=0; k<11; k++) 
{
    CloudQueue q = qclient.GetQueueReference("numbers");
    MessageProcessor p = new MessageProcessor(q, this.ProcessMessage);
    p.Start();
}
MessageProcessor processor = new MessageProcessor(queue, this.ProcessMessage);
processor.Run();

El método ProcessMessage se encarga del trabajo real:

private bool ProcessMessage(CloudQueueMessage msg)
{
    int number = Convert.ToInt32(msg.AsString);
    List<int> numbers = new List<int>() { number };
    while (number > 1)
    {
        if ((number % 2) == 0)
        {
            number = number / 2;
            numbers.Add(number);
        }
        else
        {
            number = number * 3 + 1;
            numbers.Add(number);
        }
    }
    StringBuilder builder = new StringBuilder();
    builder.Append("Result:");
    foreach (int n in numbers)
    {
        builder.Append(" ");
        builder.Append(n);
    }
    Trace.WriteLine(builder.ToString(), "Information");
    return true;
}

Próximos pasos: más aplicaciones distribuidas (algoritmo genético, web crawler, etc…). También podría mejorar el ejemplo para conseguir ver los resultados en una página web, o lanzar y consultar resultados de forma remota, desde un WinForm, por ejemplo.

Nos leemos!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Azure: una aplicación simple

Friday, December 10th, 2010

Despues de un tiempo sin postear sobre el tema, vuelvo a programar en Azure. Veamos un ejemplo simple: una aplicación con un web role, un worker role:

Pueden bajar el código que está contenido enmi AjCodeKatas Google project. El código está en:

http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/Azure/AzureNumbers

En la página inicial, podemos ingresar un número a procesar:

Si enviamos el número 10, este datos es enviado a una cola:

protected void btnProcess_Click(object sender, EventArgs e)
{
    int number = Convert.ToInt32(txtNumber.Text);
    CloudQueueMessage msg = new CloudQueueMessage(number.ToString());
    WebRole.NumbersQueue.AddMessage(msg);
}

El worker role es el encargado de leer esa cola. Decrementa el número, y si el resultado es mayor que cero, lo reinyecta en la cola:

        public override void Run()
        {
            // This is a sample worker implementation. Replace with your logic.
            Trace.WriteLine("NumberWorkerRole entry point called", "Information");
            CloudStorageAccount account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
            QueueUtilities qutil = new QueueUtilities(account);
            CloudQueue queue = qutil.CreateQueueIfNotExists("numbers");
            while (true)
            {
                CloudQueueMessage msg = queue.GetMessage();
                if (msg != null)
                {
                    int number = Convert.ToInt32(msg.AsString);
                    Trace.WriteLine(string.Format("Processing number: {0}", number), "Information");
                    number--;
                    if (number > 0)
                    {
                        CloudQueueMessage newmsg = new CloudQueueMessage(number.ToString());
                        queue.AddMessage(newmsg);
                    }
                    queue.DeleteMessage(msg);
                }
                else
                {
                    Thread.Sleep(10000);
                    Trace.WriteLine("Working", "Information");
                }
            }
        }

Pueden ver la salidad desde el Development Fabric UI:

Estoy usando un código que estoy armaando, AzureLibrary, para crear una cola:

        public CloudQueue CreateQueueIfNotExists(string queuename)
        {
            CloudQueueClient queueStorage = this.account.CreateCloudQueueClient();
            CloudQueue queue = queueStorage.GetQueueReference(queuename);
            
            Trace.WriteLine("Creating queue...", "Information");
            Boolean queuecreated = false;
            while (queuecreated == false)
            {
                try
                {
                    queue.CreateIfNotExist();
                    queuecreated = true;
                }
                catch (StorageClientException e)
                {
                    if (e.ErrorCode == StorageErrorCode.TransportError)
                    {
                        Trace.TraceError(string.Format("Connect failure! The most likely reason is that the local " +
                            "Development Storage tool is not running or your storage account configuration is incorrect. " +
                            "Message: '{0}'", e.Message));
                        System.Threading.Thread.Sleep(5000);
                    }
                    else
                    {
                        throw;
                    }
                }
            }
            return queue;
        }

Tome esa forma de crear una cola de código que venía en los ejemplos de Azure SDK.

Próximos pasos para explorar:

– Agregar instrumentación al worker role

– Usar más instancias, e ir generando más mensajes en el proceso

– Agregar soporte de múltiples threads dentro del worker role

– Algún ejemplo usando Azure Storage (table, blob)

Y algunos pasos más grandes:

– Inyectar y ejecutar código AjSharp (o AjTalk) en los worker roles

– Implementar una aplicación distribuida (algoritmo genético distribuido, cálculo de fractar o ray tracer, web crawler, simulación con Montecarlo, etc…)

Nos leemos!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Videos de OpenApp y Maratón 2.0

Wednesday, November 17th, 2010

En las reuniones organizadas por Telefónica Negocios, Red Valleys, Globant, Nec, se presentó el OpenApp Challenge (tengo que postear sobre mi visita en Tandil). Hoy, tengo estos videos para compartir. Primero, Matias Fernandez de Angelis, de Teléfonica Negocios, sobre OpenApp, SaaS y Cloud Computing, en Córdoba (creo):

[View:http://www.youtube.com/watch?v=iMsqQCzVFfY]

Y luego, un fragmento del bueno de Juan Ladetto (@gringotuc) en la reunión de Tucuman:

[View:http://www.youtube.com/watch?v=Xsk_F26ucdM]

Mis anteriores post sobre el tema:

Presentando en Maratón 2.0 La Plata
Presentando en Maratón 2.0 Tandil
Presentación de OpenApp Challenge de Telefónica Negocios

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez