domingo, 30 de octubre de 2011

Tutorial KINECT Hello World en la PC


Hola, en este artículo vamos a explicar y a demostrar conceptos básicos acerca del dispositivo de interfaz natural de usuario o NUI (Natural User Interface) , Microsoft KINECT y explicar brevemente como conectar, inicializar y mostrar las diferentes cámaras y funciones de reconocimiento de gestos a través de este dispositivo con el SDK oficial liberado hace ya unos meses por Microsoft.
Como la mayoría sabemos KINECT es un dispositivo que fue creado por Microsoft en un principio para el entretenimiento a través de la consola XBOX 360, pero este a su vez ha sido un tema a fondo para el uso en diversos aspectos como la investigación académica, la ciencia, para fines empresariales, para nuevas tendencias, etc…
Dejando a un lado la diversión y colocando temas muy serios en cuanto a revolucionar nuestro estilo de vida de cómo interactuar con los sistemas bajo un esquema donde la persona es el ratón o el teclado…
Pero bien basta de charlar y vamos al código, a lo que en verdad quiero demostrarles.
Primero debemos de tener a la mano todo para comenzar:

Hardware:
  • Sensor Microsoft KINECT.
  • Cable conversor de puerto KINECT a USB. (este cable esta incluido cuando compras el KINECT aparte, para la versión que viene con el Xbox 360 no viene con esta extensión, pero se puede conseguir fácilmente en una tienda Microsoft Store o en tiendas electrónicas, Amazon, etc.)
  • PC con 2.66 GHZ de procesador o mucho más rápido con 2Gb de memoria RAM si tienes más, excelente.
  • Microsoft Windows 7 en sus diferentes versiones compatible con tarjetas gráficas con Direct X 9.0c
Software:
Teniendo estos requisitos básicos procedemos primero con la instalación del Microsoft KINECT SDK tal y como se muestra en la siguiente imagen.

 
Ahora bien iniciamos Visual Studio 2010 y creamos un nuevo proyecto de aplicación Windows WPF, yo lo llame HelloWorldKinect, pueden colocarle el nombre que deseen.


Una vez creado el proyecto en el diseñador nos situamos en el codigo XAML y colocamos dos controles de tipo imagen, para este ejemplo solo coloque uno grande que abarque toda la ventana de nombre depthImagen para la camara de profundidad  y uno pequeño en la parte superior derecha que me mostrara el contenido de la camara de video de nombre videoImage tal como se muestra en la figura.

 En la pestaña de Explorador de Soluciones, hacemos clic derecho en la carpeta References y le damos a la opción Add References y agregamos la referencia Microsoft.Research.Kinect tal como se muestra en las imágenes. Esta parte es importante ya que sin las referencias no podemos iniciar los controles para poder trabajar con nuestro dispositivo KINECT.

 
Si estas en el diseñador solo debes de presionar F7 y estarás en el Code Behind del formulario, nos situamos en la parte superior del código ahora bien debemos de hacer la referencia en el código colocando la siguiente línea tal y como se muestra en la imagen.



 
Debemos de crear una variable de tipo Runtime (esta variable es en si el dispositivo como tal para poder manejar sus diferentes streams y funciones que nos ofrece la SDK de KINECT) tal y como muestra la imagen.

 
Luego de esto debemos de crear dos eventos ruteados, uno de nombre Loaded y otro Unloaded (esto es porque estos métodos deben de asegurarnos tanto el cargar todo en memoria como el otro para cerrar el dispositivo).

 Así como también debemos de crear dos eventos ruteados para crear y abrir las cámaras del dispositivo como se muestra en la imagen.

Bien ahora en el evento Loaded debemos de inicializar el dispositivo y posteriormente se deben de crear dos rutinas para abrir el dispositivo para poder mostrar los streams de profundidad y el otro de RGB, dándole como variables el tipo de stream, la resolución y el tipo de imagen del stream.
En el evento Unloaded con solo colocar la siguiente rutina este se encargara de cerrar el dispositivo una vez terminada la aplicación.




Como último código propuesto vamos a los dos métodos VideoFrameReady y DepthFrameReady  crearemos una variable de tipo PlanarImage asignándole lo que nos trae el resultado del evento que siempre está en ejecución mostrando la imagen y después una variable de tipo BitmapSource en la que crearemos a partir del stream correspondiente, pasándole como parámetros, el ancho, el alto, los DPI de cada imagen (por defecto son 96), el formato de sus pixeles en lo que la diferencia de que una es RGB o BGR32 para el video y para profundidad daré una paleta de colores gris de 16 bits o Gray16 correspondiente en cada método, luego los bits en memoria a partir de la variable image y por ultimo asignamos todo al control de tipo imagen que habíamos preparado y definido en el diseño de la interfaz.  


Bien nuestro código está listo, ahora solo corremos la aplicación F5 y como buena recompensa nuestro Hello World en KINECT.


Es de resaltar que estos códigos prácticamente son preestablecidos y son primordiales para iniciar el dispositivo y trabajar en conjunto con él para cualquier fin, ya vendrá de parte de Microsoft el ofrecer otras alternativas o mediante otras versiones nuevas de esta SDK muchas más opciones para programar y trabajar con este dispositivo, es de constar también que esta SDK es de solo desarrollo e investigación ya que no está no fue liberada bajo un perfil comercial o para un fin de lucro, ya veremos en las siguientes versiones.


En mi siguiente entrega les explicare mediante una aplicación definiendo a fondo el uso de las funciones Skeletons a través de sus Joints (coyunturas), y el uso de patrones para reconocer gestos, estos son en sí combinados con profundidad para el diseño de aplicaciones bien interesantes para el uso común, diversión, investigación y afines.

Aca les dejo un enlace para descargar el codigo fuente y el proyecto como tal
http://www.megaupload.com/?d=6QX8U3Y8

Enjoy... Salu2... :D

miércoles, 17 de agosto de 2011

Sigue tus intereses, descubre el mundo. Twitter

Diferencias entre programadores Junior, Semi Senior y Senior

¿Cuáles son las principales diferencias entre un programador junior, un semi senior y un senior?

Durante las últimas semanas recibí algunas consultas sobre este tema, lo que me motivó a escribir este artículo.

No es un tema de simple respuesta. Incluso buscando en Google no se encuentran respuestas maravillosas sobre el asunto.

Lo que sucede en realidad es que las diferencias entre los distintos “niveles” dependen de las necesidades y la cultura de cada organización y de cada equipo. En distintos entornos lo que diferencia a un senior de un junior puede variar.
En algunas organizaciones la diferencia solo está dada por la cantidad de años de experiencia laboral que la persona tenga, en otros casos depende del grado de conocimiento técnico y en otros está asociado a la capacidad de la persona de gestionar proactivamente su trabajo.

Lo que no tiene cuestionamientos es que se trata de una temática sumamente sensible. Habitualmente la remuneración del ingeniero de software se asocia a su nivel de seniority, así que seré lo más cuidadoso posible al presentar mis reflexiones al respecto.

En este artículo comparto algunos de los criterios que pueden ayudar a definir el nivel de seniority de una persona. Cada uno de los indicadores puede tener más o menos importancia de acuerdo a cada organización (al final del artículo incluiré una encuesta para conocer tu opinión).

Si el lector es el Gerente del equipo, le aconsejo que asigne una ponderación a cada uno de los indicadores antes de aplicarlos.
Si en cambio es un programador, mi sugerencia es que apunte a dominar todos y cada uno de los aspectos aprovechando las oportunidades que se le presenten para su desarrollo.
Si el lector es el Gerente de Recursos Humanos, mi consejo es que desarrolle un plan de carrera claro para que cada integrante de la empresa sepa qué aspectos debe desarrollar para poder aspirar al siguiente nivel de responsabilidades (y salarial, por supuesto).

Experiencia laboral

Cantidad de años de experiencia laboral en informática.
No cuentan los trabajos prácticos realizados durante sus estudios. Tampoco suma si la persona trabajó 2 años atendiendo una agencia de viajes.

Junior: Menos de 2 años de experiencia.
Semi Senior: De 2 a 6 años de experiencia.
Senior: Más de 6 años de experiencia.

Conocimientos técnicos

Principalmente referido a las herramientas, tecnologías, lenguajes de programación, paradigmas de programación, base de datos, arquitecturas, etc. que deba utilizar para cumplir sus labores.

Junior: Para desempeñarse suele requerir acompañamiento. El código que genera puede presentar mayor cantidad de bugs de lo esperado. Probablemente no maneja todas las herramientas que se necesitan para la tarea.
Semi Senior: Técnicamente autosuficiente. Puede desarrollar funcionalidades más complejas y ejecutar proyectos de mayor envergadura. Pero no es un crack y todavía comete errores “evitables”.
Senior: Es referente técnico dentro del equipo. Su conocimiento le permite colaborar en definiciones arquitectónicas y desarrollar los proyectos más desafiantes. Su código funciona, es bueno y fácil de mantener.

Conocimientos funcionales

Relacionado a los procesos, metodologías, estándares, circuitos requeridos para cumplir sus labores.

Junior: Para desempeñarse suele requerir cierto nivel de acompañamiento. No conoce todos los procesos, ni los estándares. No es experto en los temas propios del negocio.
Semi Senior: Maneja los circuitos lo suficiente como para desempeñarse. Respeta los estándares y metodologías. Conoce buena parte de los procesos del negocio.
Senior: Ayuda a definir procesos, metodologías, estándares y circuitos. Por supuesto cumple los existentes.

Proactividad

Indicando si la persona espera a que le asignen sus tarea o si por el contrario toma una actitud de mayor iniciativa.

Junior: Necesita que frecuentemente le definan su trabajo. Está a la espera del siguiente pedido. Cuando tiene tiempo libre no sabe con qué seguir. Depende de otros para avanzar con sus tareas.
Semi Senior: Se preocupa por aprovechar mejor su tiempo. Pide nuevas asignaciones cuando tiene tiempo disponible y es autosuficiente para llevar adelante una gran parte de sus tareas.
Senior: No solamente recibe requerimientos, sino que los busca y genera. En muchas oportunidades es él quien le genera asignaciones nuevas a su superior.

Seguimiento requerido

Atención que requiere de su superior inmediato.

Junior: Requiere seguimiento diario a nivel detallado.
Semi Senior: Requiere seguimiento semanal y a nivel general.
Senior: Proactivamente reporta el estado y avance de sus tareas.

Indicadores de productividad

Indicadores varios relacionados con el trabajo que realiza

Junior: Calidad: Baja/Media - Productividad: Baja/Media - Innovación: Poca o Nula
Semi Senior: Calidad: Media - Productividad: Media - Innovación: Poca
Senior: Calidad: Alta - Productividad: Alta - Innovación: Alta

Cumplimiento de fechas

Cumplimiento de las fechas de entrega pautadas. Se aplica a las tareas de análisis, desarrollos, documentación, reporting, etc.

Junior: La mayoría de las veces no cumple con sus estimaciones.
Semi Senior: A veces cumple, a veces no.
Senior: Siempre cumple. Cuando surge un desvío (inevitablemente) lo informa adecuadamente y con anticipación.

Respuesta bajo presión

Referido a situaciones extremas… no a la corrida semanal para cumplir con la fecha de entrega del siguiente release en producción.

Junior: Le pueden pasar alguna de las siguientes cosas:
- Se bloquea
- Se angustia
- Se confunde
- Se estresa
El resultado de su trabajo en una situación de presión no es bueno.

Semi Senior: Le pueden pasar alguna de las siguientes cosas:
- Se enoja
- Se defiende
- Se distancia (se borra)
- Se resigna
El resultado de su trabajo en una situación de presión a pesar de todo, es bueno.

Senior: Le pueden pasar alguna de las siguientes cosas:
- Se entusiasma
- Se compromete
- Se hace cargo
- Se inspira
El resultado de su trabajo en una situación de presión puede llegar a ser asombroso.

Relación interpersonal

(Gracias a Javier Scavino por mencionar este aspecto).

Más allá de los conocimientos y capacidades de una persona, la habilidad de comunicarse con su entorno es fundamental para su desarrollo profesional.

Junior: Puede tener dificultades para transmitir sus ideas con claridad. No logra arribar a conclusiones concretables. No siempre sabe interactuar con otras personas de forma colaborativa y profesional.
Semi Senior: Se hace entender pero no logra ganarse la simpatía ni despierta la vocación de sus colaboradores para acompañarlo en sus sugerencias. Se permite escuchar otros puntos de vista pero sigue intentando que sean sus ideas (buenas y malas) las que prevalecen.
Senior: Es bueno comunicando, pero principalmente escuchando. Puede participar en desiciones de alto nivel y colaborar si es necesario en actividades más operativas privilegiando el resultado y la calidad de las relaciones por sobre su autoría en las ideas.

Vale la pena mencionar que la misma persona puede tener características de Senior en un aspecto y de Junior en otro.

Me interesaría saber cuáles de estos criterios te parecen los más importantes a la hora de determinar el nivel de seniority de un desarrollador. En la siguiente encuesta podrás marcar hasta 3 opciones.

PHPLinq!!… una mejor forma de utilizar los datos



Language-Integrated Query (LINQ) es un conjunto de características presentado en Visual Studio 2008 y 2010 que agrega capacidades de consulta eficaces a la sintaxis de los lenguajes C# y Visual Basic. LINQ incluye patrones estándar y de fácil aprendizaje para consultar y actualizar datos, y su tecnología se puede extender para utilizar potencialmente cualquier tipo de almacén de datos.

Tradicionalmente, las consultas con datos se expresan como cadenas sencillas, sin comprobación de tipos en tiempo de compilación ni compatibilidad con IntelliSense. Además, es necesario aprender un lenguaje de consultas diferente para cada tipo de origen de datos: bases de datos SQL, documentos XML, servicios Web diversos, etc. LINQ convierte una consulta en una construcción de lenguaje de primera clase en C# y Visual Basic. Las consultas se escriben para colecciones de objetos fuertemente tipadas, utilizando palabras clave del lenguaje y operadores con los que se está familiarizado. La ilustración siguiente muestra una consulta LINQ parcialmente completada en una base de datos SQL Server en C#, con comprobación de tipos completa y compatibilidad con IntelliSense.

Ahora bien PHPLinq nos ofrece la oportunidad de ahorrar código PHP para nuestros ciclos o bucles de lenguaje como un while o un foreach. Es difícil contarlo con palabras, voy a comentarlo mejor con un ejemplo.

Ejemplo:

Digamos que tenemos una matriz de cadenas y deseamos seleccionar sólo las cadenas cuya longitud es < 5. Con PHPLinq la manera de lograr esto sería el siguiente:

$nombres = array(“John”, “Peter”, “Joe”, “Patrick”, “Donald”, “Eric”);

$resultado = from($nombre‘)->in($nombres)

->where($nombre => strlen($nombre) < 5)

->select($nombre);

Lo ves familiar a SQL verdad? No escribirá un bucle más de esta serie, el control de la cadena de longitud, y añadiendo una variable temporal todo solucionado. Se entiende fácilmente con el ejemplo.

De todos modos acá les muestro como es la arquitectura de capas de esta librería de datos muy potente para mostrar los forma mas sencilla y dinámica.

jLight - Hablar con el DOM utilizando Silverlight y jQuery.



Con mayor frecuencia se ejecuta en un navegador web y, a menudo como un control. En muchos casos es necesario comunicarse con el navegador para obtener información sobre los cuadros de texto, eventos o detalles sobre el mismo navegador. Para ello puede utilizar JavaScript de Silverlight. Aunque Silverlight funciona de la misma en todos los navegadores, JavaScript no y no pasará mucho tiempo antes de que surjan problemas. Para superar las diferencias en el navegador me gusta usar jQuery . La única desventaja de esto es que existe un código mucho más necesario que se suele utilizar cuando se escribe en jQuery JavaScript.

Últimamente, he tenido que coger los cambios es el navegador de la barra de desplazamiento y actuar a la nueva posición. También tuve que mover la barra de desplazamiento cuando el usuario arrastra todo en la aplicación Silverlight. Con jQuery se cacahuetes para obtener y establecer los atributos correctos, pero me di cuenta que tenía que escribir una gran cantidad de código en el lado de Silverlight. Con una refactorización pocos que tenía un separan las tuberías en una nueva clase y podría llamar a sólo unos pocos métodos en que para obtener la misma cosa por hacer. La idea de jLight nació.

jLight vs jQuery

El objetivo principal de jLight es tomar la facilidad de uso de jQuery y lo pongo en Silverlight para controlar la interacción DOM. Por ejemplo, para cambiar el color del texto de un DIV al rojo, en jQuery que iba a escribir:

jQuery("div").css("color","red");

En jLight lo mismo se ve así:

jQuery.Select("div").Css("color","red");


Otro ejemplo. Para cambiar el desplazamiento en los últimos SPAN se podría escribir esto en jQuery:

jQuery("span:last").offset({left : 10, top : 100});


En este jLight haría lo mismo:

jQuery.Select("span:last").Offset(new {left = 10, top = 100 });


Callbacks

Nada especial hasta ahora. Para conseguir lo mismo hizo con el "normal" HtmlPage.Window.Eval , no requieren demasiado esfuerzo. Sin embargo, en el hilo de un controlador de eventos desde el navegador es una historia completamente diferente. Normalmente es necesario registrarse ScriptMembers , ScriptableTypes o escribir algo de código en JavaScript. jLight se encarga de la instalación de cañerías y le proporcionará una interfaz sencilla en la misma forma que jQuery.

Si usted desea para controlar el evento de desplazamiento del cuerpo de su página HTML, que tendrá que enlazar el evento usando jQuery y tienen una función de llamada a una función social en Silverlight. En el siguiente ejemplo supongo que hay un método "SomeMethod", y es registrado como un ScriptableObject como "RegisteredFromSilverlight" de Silverlight.

jQuery("body:first").scroll(function()
{

var sl = document.getElementbyId("SilverlightControl");
sl.content.RegisteredFromSilverlight.SomeMethod($(this));

});


El uso de Silverlight jLight el código sería aún más simple. El registro de RegisteredFromSilverlight como ScriptableObject se puede omitir. Además de eso, usted no tiene que escribir JavaScript o evaluar cadenas con JavaScript.

jQuery.Select("body:first").scroll(SomeMethod);


Lambdas

El uso de un lambda de Silverlight puede hacer que sea aún más simple. Cada uno es el equivalente de jQuery foreach en C #. Se llama a una función para cada elemento que se encuentra por jQuery. En este ejemplo, todos los elementos de entrada del tipo de texto seleccionado. El método FromObject se utiliza para crear un jQueryObject de un objeto que contiene un ScriptObject. El método de Val de jQuery se utiliza para obtener el valor de los elementos de entrada.

jQuery.Select("input:text").Each((element, index) =>{

textBox1.Text += jQueryObject.FromObject(element).Val();

return null;

});


Ajax

Una cosa jQuery es a menudo utilizado para realizar llamadas Ajax es. La realización de llamadas a los servicios a los servicios externos se puede hacer de Silverlight, pero tan fácil como usar jQuery. Como ejemplo me gustaría mostrar cómo jLight hace esto. A continuación se muestra el código subyacente de todo. Busca mi nombre en Twitter y muestra el resultado. Este ejemplo se puede encontrar en el origen del proyecto. El método GetJson pasa un Silverlight JsonValue a una devolución de llamada. Esta devolución de llamada ejecuta objetos Twit y los agrega a un control ListBox denominado TwitList.

public partial class DemoPage2 : UserControl

{

public DemoPage2()

{

InitializeComponent();

jQuery.Load();

}

private void CallButton_Click(object sender, RoutedEventArgs e)

{

jQuery.GetJson("http://search.twitter.com/search.json?lang=en&q=sorskoot", Done);

}

private void Done(JsonValue arg)

{

var tweets = new List();

foreach (JsonObject result in arg["results"])

{

tweets.Add(new Twit()

{

Text = (string)result["text"],

Image = (string)result["profile_image_url"],

User = (string)result["from_user"]

}

);

}

TwitList.ItemsSource = tweets;

}

}

public class Twit()

{

public string User { get; set; }

public string Image { get; set; }

public string Text { get; set; }

}


jLight se puede encontrar en:

http://adf.ly/2MYSJ

Kinect SDK Beta 1 Disponible desde ya!...



El interés en el Kinect para Windows Software Development Kit (SDK) beta, lanzado el 16 de junio de 2011, ha sido fuerte, y estamos encantados de ver que tantos desarrolladores e innovadores que están experimentando con la interfaz de usuario natural (NUI) las aplicaciones tienen aprovechado el SDK para explorar el potencial del sensor Kinect.

En apoyo de nuestro compromiso de alentar a los investigadores y entusiastas en su exploración de las interesantes posibilidades de que el sensor Kinect, hemos lanzado una versión actualizada del SDK. La comunidad nos ha dado una respuesta muy buena, y esta versión soluciona algunos de los temas principales que nos han dicho sobre.

Antes de resumir los cambios, vamos a recapitular rápidamente las principales características de la Kinect para Windows SDK beta. Esta beta no comercial SDK permite el seguimiento de movimiento humano, reconocimiento de voz, y la detección de profundidad en los ordenadores, permitiendo a los desarrolladores a crear aplicaciones innovadoras naturales interfaz de usuario. El SDK incluye controladores y API rica para flujos de sensor de primas y las interfaces naturales de usuario, así como documentos de instalación y los materiales de recursos.

Por lo tanto, lo que está en la actualización?

Mejoras en los controladores: fija la estabilidad para evitar accidentes, incluyendo aquellas que aparecen cuando un equipo entra en modo de suspensión
Mejoras de tiempo de ejecución: el perfeccionamiento de una serie de APIs, las mejoras en sellado de tiempo, y la eliminación de las no funcionales API para aliviar la confusión (que serán reinsertados, siempre y cuando la función esté disponible en futuras versiones)

La actualización también incluye muchas mejoras en la documentación, incluidas las aclaraciones y la supresión de la información relativa a los componentes no funcionales. Además, los ejemplos de SDK se han mejorado.

Si usted es un investigador académico o un entusiasta que quiere aprovechar los últimos avances en la experimentación natural de la interfaz de usuario, le invitamos a conocer más y descargar el SDK para Windows Kinect beta de refresco. Tenemos la intención de liberar la siguiente actualización de la Kinect para Windows SDK beta a finales de este año (aún con una licencia no comercial).

Háganos saber lo que piensa, como demuestra esta actualización, nos hemos comprometido a utilizar su información para que el SDK mejor posible!

-Tony Hey, vicepresidente corporativo de Microsoft Conexiones de Investigación

Aca les dejo un video cortesia del canal 9 de Microsoft en una entrevista a Rob Relyea por Dan Fernandez:




Apple logra bloquear las ventas del Samsung Galaxy Tab 10.1 en Europa



Apple ha logrado bloquear las ventas de momento por un minimo de 4 semanas en Europa como medida cautelar previa al juicio que se les avecina por violación de patentes en el diseño de dicha tablet.

Bien es sabido que los smarthphones y tablets de Samsung se parecen mucho a los homónimos de Apple, siendo en las proporciones donde más similitudes existen (Si… Apple tiene patentadas las proporciones….)

Ya se verá cómo termina esto… seguramente con el pago de las patentes o vaya usted a saber, pero por lo visto Samsung piensa contratacar a Apple investigando a fondo sus productos respecto a tecnologías de telecomunicación de las que sospechan que podrían estar usando sus patentes. Guerra de patentes, vaya... :O

A modo de curiosidad, les dejo aquí un emulador web de la Samsung Galaxy Tab 10.1

martes, 25 de enero de 2011

Web Camps de Microsoft para este año...





Los Web Camps de Microsoft de 1 solo dia son una versión más pequeña de los eventos más grandes que son normalmente de 2 días.

Estos Web Camps te permiten
aprender y construir sitios web con ASP.NET, MVC, WebMatrix, OData y mucho más. Estos eventos cubrirá 1 de los 3 temas e incluirá presentaciones y el manejo del desarrollo de estas tecnologias. Más eventos vienen y se añadirá a la lista de abajo tan pronto como las fechas se confirman.

Esta es la
lista de los países adicional que será el anfitrión de los campos de Web de este año: Argentina, Bélgica, Brasil, Canadá, Chile, Finlandia, Indonesia, Israel, Países Bajos, Nueva Zelanda, Noruega, Portugal, España, Tailandia, Turquía, Emiratos Árabes Unidos, el Reino Unido y los EE.UU. Este y Central.

para mas informacion siguelos en Twitter @Webcamps

Ciudad Pais
Fecha Tecnologia Link Registro
Caracas Venezuela 25-Jan-11 ASP.Net MVC Register Here
Maracaibo Venezuela 26-Jan-11 ASP.Net MVC Register Here
Porlamar Venezuela 28-Jan-11 ASP.Net MVC Register Here
Tunis Tunisia 1-Feb-11 ASP.Net MVC Register Here
Istanbul Turkey 1-Feb-11 WebMatrix Register Here
Montreal Canada 5-Feb-11 ASP.Net MVC Register Here
Calgary Canada 5-Feb-11 ASP.Net MVC Register Here
Jeddah Saudi Arabia 15-Feb-11 WebMatrix Register Here
Jeddah Saudi Arabia 16-Feb-11 WebMatrix Register Here
Toronto Canada 19-Feb-11 ASP.Net MVC Register Here
Riyadh Saudi Arabia 22-Feb-11 WebMatrix Register Here
Riyadh Saudi Arabia 23-Feb-11 WebMatrix Register Here
Mountain View, CA USA 26-Feb-11 ASP.Net MVC Register Here
Des Moines, IA USA 17-Mar-11 WebMatrix Register Here
Bad Homburg Germany 23-Mar-11 WebMatrix Register Here
Redmond USA 25-Mar-11 ASP.Net MVC Register Here
Ottawa Canada 26-Mar-11 ASP.Net MVC Register Here
Munich Germany 31-Mar-11 WebMatrix Register Here
Moulineaux France 5-Apr-11 TBA Register Here
Nashville, TN USA 27-Apr-11 WebMatrix Register Here
Columbus, OH USA 29-Apr-11 WebMatrix Register Here
Dallas, TX USA 16-May-11 WebMatrix Register Here
Moulineaux France 17-May-11 TBA Register Here
Little Rock, AR USA 18-May-11 WebMatrix Register Here
St. Louis, MO USA 20-May-11 WebMatrix Register Here
Minneapolis, MN USA 24-May-11 WebMatrix Register Here
Milwaukee, WI USA 25-May-11 WebMatrix Register Here
Southfield, MI USA 2-Jun-11 WebMatrix Register Here
Tulsa, OK USA 2-Jun-11 WebMatrix Register Here
Irvine, CA USA 10-Jun-11 ASP.NET MVC Muy Pronto
Moulineaux France 14-Jun-11 TBA Register Here











Por otro lado Proximamente se celebrara en un WebCamps en Porlamar donde estare presente y mi compañero de trabajo @ernesth tendra una gran y exelente ponencia sobre Jquery donde veremos el poder de esta tecnologia en la web....vamos ernesto esperamos una gran charla y buena vibra con este gran tema...

Nos vemos en el WebCamps el 28 de enero muchachos... :D