Pagina nueva de Developers Dominicanos

Hoy estamos estrenando pagina nueva!!!!......

http://developers.do

Por fin luego de mucho hablar/decir/hacer ya decidi hacerla con tumblr, vi que estaba ya integrado con muchas de las cosas que necesitaba: Flikr, FB, twitter y realmente no necesito mas trabajo ahora mismo, queria algo facil pero que estuviera a la altura del grupo.

Asi que US$49 mas tarde (un template premium) y aqui estamos. Se que inmediatamente vendra "Cuando tendremos un forum fuera de FB", denme un chance y les posteo mis ideas sobre eso en breve.

Estamos aceptando contribuciones para el blog inmediatamente, basicamente estoy buscando contenido como esto:

  • Ruby On Rails vs. Asp.net MVC - Una comparacion tecnica entre ambos frameworks 
  • La vida del programador dominicano 
  • Como usar HTML5 hoy en dia 
  • Crear aplicaciones mobile con jQuery-mobile 
  • Usar CI con TeamCity para simplificarnos la vida 
  • Porque todavia se usa COBOL en RD? 
  • Etc,,,

Nada de temas religiosos de que mi lenguaje es mil veces mejor que el tuyo, si quieres hacer una comparacion haz algo que sea justo y demuestralo.

Para contribuir solo debes mandarme tu post/articulo a: hminaya@gmail.com, debes tener en cuenta lo siguiente:

  • Hazlo preferiblemente en NOTEPAD o algun otro IDE que no vaya a agregar tags. Ni intentes hacerlo en Word. 
  • Puedes incluir tags de HTML, pero usa solo lo basico. (links, estilo, h1, tablas, etc). 
  • Manda una foto tuya 2 x 2 o algun avatar que te represente, mandame tu url de twitter/blog/etc., la idea es que vas a aparecer como autor, te vas a llevar todo el credito y seras millonario pronto.

NOTA: Si aun ves la version vieja de la pag (la q solo habla del CodeJam) es porque los DNS no han refrescado completamente aun, hice el cambio hace un par de horas. Read More!

Usar GIT en Ubuntu 11.04




Uno de los puntos que mas trabajo le dio a todos los equipos fue la integración con GitHub.com, muchos estaban acostumbrados a utilizar otros manejadores para el control de versiones como SVN o TFS que son mucho mas "simples" y fáciles de usar/implementar.

Originalmente Git fue creado por Linus Torvald para manejar los trabajos que estaban haciendo en el kernel de linux. Hoy en dia es una de las plataformas mas utilizadas, especialmente para el manejo de proyectos Open Source.

En realidad es bien facil de utilizar, a continuacion les mostrare como hacerlo en Ubuntu 11.04.

Al abrir la terminar y ejecutar el comando "Git" vemos la siguiente pantalla, indicándonos que no se encuentra instalado.

En la misma nos muestra el comando que debemos ejecutar para su instalación: "sudo apt-get install git", al ejecutar dicho comando Ubuntu bajara los archivos correspondientes y procederá a instalar el mismo.



Una vez terminada la instalación ya tenemos disponible git vía el terminal. El próximo paso seria crear un directorio para almacenar nuestro repositorio. En este caso voy a crear un directorio llamado DevDomWeb, donde estaré almacenando la pagina de Developers Dominicanos.

Luego de crear el directorio debemos entrar e "inicializarlo" utilizando el comando "init".

Finalmente debemos hacer un "pull" para traer los archivos desde el repositorio de GitHub.com a nuestra pc.


Una vez veamos esta confirmación ya tenemos los archivos en nuestra carpeta, en este caso voy a utilizar MonoDevelop para abrir el proyecto y hacer un ligero cambio.


Antes de poder subir los cambios al servidor debemos configurar una variable para que se quede grabado el lugar donde vamos a publicar los cambios.


Finalmente estamos listos para publicar los cambios, en realidad son 3 pasos:

  1. git add * ==> Indica cuales archivos vamos a incluir
  2. git commit -m 'Mensaje' ==> Nos permite asociar un mensaje con el cambio
  3. git push ==> envia los cambios al servidor origen que definimos anteriormente.

Por ultimo vemos esta confirmación y ya esta todo listo!.


Read More!

Resultados del Developers Dominicanos Code Jam 2011



Primero que nada quiero agradecer a todos nuestros patrocinadores, a los jueces y sobre todo a los equipos que mostraron su dedicación y esfuerzo para participar en este proyecto de la comunidad de Developers Dominicanos.


¿Cual fue la idea?
El Code Jam fue concebido para ser una competencia diferente, donde se midieran habilidades inusuales para una competencia de desarrollo. No quería ver quien hacia la serie de fibonacci primero en C++ o quien podía hacer un algoritmo para sortear un millón de valores.

Queríamos algo mas semejante a la vida real, una muestra de lo difícil que es muchas veces nuestro trabajo día a día como developers, donde tenemos que analizar lo que realmente quieren y necesitan los usuarios finales, seleccionar cual es la mejor herramienta para completar el trabajo y finalmente cumplir con el mismo bajo una presión de tiempo muchas veces ilógica. Y con un toque de duelo, al permitir que usaran diferentes tecnologías/plataformas.




Por este motivo presentamos un caso de estudio tan inusual. La verdad que lo iba a poner mucho mas difícil, pero a ultima hora me compadecí y espere por lo menos haberle entregado algo con lo que puedan trabajar.


Criterios
Las palabras imparcial y developer rara vez van juntas en la misma oración, y mucho mas cuando en la competencia estábamos permitiendo que usen cualquier lenguaje/plataforma, algo no muy usual en este tipo de concursos.

Luego de consultar y estudiar otras competencias, con muchísimos mas participantes que la nuestra y mas alcance arribe a un set de criterios que me parecieron brindar una plataforma neutral e imparcial donde se pudieran medir todos los equipos independientemente de la plataforma/lenguaje utilizado para arribar a la solución final.

Los criterios utilizados fueron los siguientes:
  • KISS: Simplicidad - Simple para usar (usuario final), instalar (SysAdmin) y darle mantenimiento (codigo fuente)
  • Solución propuesta: ¿Logro resolver adecuadamente el problema de negocios que fue planteado? (Impacto, Efectividad)
  • Innovación: ¿Que tan innovadora fue la solución planteada?
  • Performance: Una sola palabra: speeeeeeed.....
  • Bonus: A discreción del juez





Otro punto que jugo un factor crucial fue el trabajo en equipo, el mínimo de miembros que se permitía para los equipos era 2, esto fue "By Design", ya que en la vida real rara vez trabajamos solos y cualquier fallo por un miembro del equipo nos afecta a todos.


Equipos
Cuando se cerraron las inscripciones tuvimos alrededor de 20 equipos inscritos, mostrando un gran interés con esta iniciativa que se organizo en pocos días y con poquísimos recursos. Este es el primer gran reto de la comunidad de DevDom y esperamos salir fortalecidos del mismo.

Al concluir la fecha limite para la entrega de proyectos solo 3 equipos lograron terminar su proyecto a tiempo y entregarlo. Estos equipos fueron:


No hay equipos perdedores en este proceso, todos son ganadores, han demostrado su profesionalismo y dedicación al cumplir la meta y colaborar para crear los proyectos que fueron entregados.


Resultados
Como podrás ver no incluí los resultados en este post, solo quería asegurarme que "leyeran la propuesta completa" y no solo miraran el precio al final. Pueden ver los resultados finales aqui.


Read More!

Caso de Uso del Developers Dominicanos Code Jam 2011



Sres...


Primero quiero agradecerles a todas las personas que se registraron para el CodeJam, es la primera vez que se hace un concurso con esta aceptación en el país. Hemos logrado mucho en poco tiempo y cada uno de ustedes como miembros del grupo ha jugado un Rol instrumental en el mismo.

Adicionalmente quiero agradecer a todos los patrocinadores, sin su colaboración esto no hubiese sido posible.



Ok, ya el caso de uso está publicado @ http://developers.do/. Como podrán ver no es su típico “UserCase”. Trate de hacer algo diferente, que tuviese un aspecto de Social Media y que a la vez fuese divertido. De seguro habrán algunos que no le guste o que tengan sus críticas, traten de mantenerlas constructivas, pero son bienvenidas.

Les deseo la mejor de suerte a todos, recuerden leer bien y respetar todas las reglas. Hagamos de este proceso un modelo a seguir para otros, aún no hemos terminado esta versión del CodeJam y ya se está planificando el próximo.



Que gane el mejor equipo!!!!!!


Read More!

Performance del Chakra, nuevo engine de JavaScript del Internet Explorer 9


Sputnik es una serie de tests de JavaScript que contiene mas de 5,000 casos de pruebas. Verifica que tan conforme es la implementación de JavaScript de un browser a la especificación ECMA-262 (versión 5).

Actualmente Sputnik esta disponible en Google Labs, mediante el cual usted puede correr estas pruebas en su browser actual y ver el desempeño.

Motivado por el Lanzamiento de Internet Explorer 9 decidí hacer mis propias comparaciones y que mejor herramienta utilizar que una de la competencia de Microsoft.

Primero quería ver cual era el desempeño de Chrome, lo probé con las versiones (11 & 12), en ambas obtuve el mismo resultado. Me sorprendí mucho al ver que el browser parecía atascarse cuando se estaban realizando las pruebas, pero las instrucciones de la misma lo advertían.




Luego segui con Firefox (4) & Opera (11.01) y obtuve los siguientes resultados:


Por ultimo probé con Internet Explorer 9. Las versiones anteriores de IE fueron muy criticadas por la poca compatibilidad que tenían con los standards, asi que estaba muy ansioso de ver cual era el resultado.


Los resultados hablan por si solo, Microsoft ha hecho un trabajo muy bueno de guiarse de los standards para el nuevo engine de JavaScript del IE (Chakra), realmente fue el que menos fallos obtuvo en las pruebas y el que menos tiempo duro. Read More!

Lanzamiento Virtual de IE9 via Microsoft Café TV


Acompáñanos en el Lanzamiento Virtual de Internet Explorer 9 de Microsoft Café TV, donde estaremos compartiendo con expertos de toda la región las mejores demostraciones de esta nueva tecnología. El contenido será para personas entusiastas de Internet, padres de familia preocupados por la seguridad de sus hijos, desarrolladores de software, diseñadores Web, profesionales de TI, estudiantes y profesores. No te lo pierdas, en celebración tendremos 9 Retos Geek!!!!

Horario:
2pm Centroamérica
3pm Perú y Ecuador
4pm Puerto Rico, República Dominicana, Bolivia y Paraguay

Solo deben entrar al siguiente url: http://www.ustream.tv/channel/Microsoft-Cafe Read More!

Inicio de un proyecto Open Source




Todo proyecto tiene un inicio, con estos pasos inicia el Website para el grupo Developers Dominicanos. He decidido crearlo como un proyecto Open Source para cumplir con una de las principales metas del grupo, compartir el conocimiento. Tenemos muchos usuarios avanzados que no necesitan de esto, pero hay muchos newbies registrados que si les va a encantar.

Espero con esto no solo mostrarle tecnología, si no todo el proceso desde planteamiento del problema, selección de las herramientas adecuadas y el proceso final de obtener un resultado.

Siendo un grupo de desarrolladores quedaría muy mal si obviamos totalmente la programación y usamos un CMS: DotNetNuke, Joomla, etc. Quedaría peor aun si hacemos algo supercomplejo que tenga un montón de código para resolver un problema simple (KISS).

Primero analicemos la necesitad actual, tenemos un CodeJam para el mes de Abril:
  • Tenemos menos de una semana antes de que inicien las inscripciones.
  • Necesitamos publicar las reglas & especificaciones. 
  • Necesitamos poder recibir las inscripciones de los participantes.
  • Necesitamos poder mostrar el listado de grupos que están inscritos.
  • Debemos poder mostrar los logos de los patrocinadores, sin ellos no tuviéramos nada.
  • No tenemos fondos y los recursos con los que contamos son voluntarios.

Casi nada!...

Ya tenemos el problema & necesidades planteadas, tenemos una meta que debemos cumplir y entendemos cual es el problema de negocio. Lo que sigue es seleccionar las herramientas adecuadas para poder cumplir con este reto en el tiempo y con los recursos que tenemos.

Repositorio
Ya que vamos a hacer un proyecto OpenSource debemos elegir donde colocar el código fuente y como compartirlo. Tenemos varias alternativas CodePlex (TFS), Assembla (SVN), GitHub (Git), etc. Particularmente yo tengo mas experiencia con TFS y me gusta mas SVN, pero es un error seleccionar una tecnología solamente porque es la que mas sabes user, debes usar la mejor herramienta para el trabajo. En este caso debemos seleccionar Git, es un manejador de control de versiones muy bueno, existen plugins & tools para todas las plataformas y GitHub.com es lo mejor para "Social Coding".

Tecnología/Plataformas
Lo primero que le viene a la mente a un developer en este caso es hacer:

  • Una app web, 
  • Tener una base de datos 
  • Crear formularios para hacer el registro, aprobar los equipos, abrir & cerrar el proceso de inscripción.
  • Un reporte con los equipos registrados

Aquí hay varios problemas, primero no tenemos recursos para un hosting con base de datos, segundo me parece mucho código para tan poca cosa, fácilmente duramos mas de una semana. Hay otro problema aquí, cultural, en el grupo hay de todos tipos de desarrolladores: COBOL, java, PHP, .Net, y al hacerlo de esa forma nos estaríamos casando con una sola tecnología en una etapa donde el grupo apenas esta comenzando.

Que hacer?, fácil, vamos a usar lo mas neutral y hacerlo lo mas sencillo posible. Primero para la pagina vamos a usar solo HTML, CSS, JavaScript y jQuery, por lo pronto no necesitamos PHP, JSP ni ASP.Net

De ahí nació la primera versión de la pagina, tiene un estilo muy simple donde simplemente se fue colocando la información general del Code Jam.


Pero como grabamos el registro? Fácil, usemos Google Docs, tienen una plataforma donde se puede crear un Formulario, publicarlo y almacenar las respuestas. Podemos colocar un link desde la pagina hacia el formulario. Me permite también decidir cuando hacer el formulario publico y cuando cerrarlo.

Y como mostramos los equipos registrados? Inicialmente pensé que iba a tener que actualizar la pagina manualmente cada día, pero es un trabajo tedioso e innecesario. Luego pense en utilizar el API de Google Docs para acceder a la info del spreadsheet y mostrarlo en la pagina, pero como?...


La respuesta natural era utilizar jQuery y/o JavaScript. Realmente fue mucho mas fácil decirlo que hacerlo, primero el API de Google Docs te permite interactuar de diferentes maneras con los diferentes tipos de documentos, pero es un pobre en soporte para JavaScript, expone el documento en formato TXT, CSV, HTML, RSS y un par mas, pero no en JSON que es lo que se pudiera leer mas fácil desde jQuery.

Luego de tratar de diferentes formas y pasar mas trabajo que un chele colorao encontre un ejemplo que se asemejaba un poco a lo que yo necesitaba. Lo tome como base y lo pude integrar a la pagina, el resultado fue algo simple, mostraba un listado de todos los equipos que hayan llenado el formulario.





Finalmente para que sea un verdadero proyecto OpenSource debo publicar todo el código fuente. El codigo fuente esta publicado en https://github.com/hminaya/DevDomWeb, pueden analizarlo, criticarlo, mejorarlo y aprender de el.

Espero les sirva para algo!... Read More!

Argumentos en las Funciones de JavaScript

Todos los argumentos en las funciones de JavaScript son opcionales, el compilador espera que nosotros manejemos la lógica dentro de nuestro código para determinar si se están pasando todos los parámetros requeridos.

Esto es muy útil a la hora de crear librerías y utilitarios en JavaScript, ya que el usuario final puede pasarle solos los parámetros que necesita y el developer debe poderlo manejar correctamente.

Aquí les dejo una pequeña prueba de esto, donde tenemos una función con 3 parámetros y la invocamos con 2 y 4 parámetros.

Read More!

Ejemplo sencillo de Node.js



Node.js es un framework basado en el engine V8 de JavaScript para plataformas basadas en Unix con el cual podras escribir programas altamente escalables, como webservers. Los programas para node.js son escritos en JavaScript, pero no son para ser ejecutados en el browser, sino del lado del servidor.

Por ejemplo, el Hello World clasico se escribe de la siguiente manera:


var http = require('http');
 
http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8000);
 
console.log('Server running at http://127.0.0.1:8000/');

Read More!

5 Herramientas Esenciales para un Web Developer


#5 - IE, Chrome Beta, Chrome Canary, Firefox, Opera, Safari


Ok, bien, no son herramients per se, pero la lección es la misma. Si eres desarrollador web debes tener instalada en tu pc/laptop los browsers mas usados. Recuerda que estas haciendo aplicaciones para un publico diverso y debes poder ver como se comporta tu aplicación en cada uno.

Adicionalmente cada uno tiene sus propias "Developer Tools" que le pueden ser muy útil. Una buena opción siempre es tener instalada la versión estable y la versión beta de cada browser, en el caso de google lanzan una versión beta/dev cada par de semanas.

#4 - Colorzilla @ http://www.colorzilla.com/firefox/



#3 - Resolution Test @ http://bit.ly/6y7lX8



#2 - Yahoo! YSlow @ http://developer.yahoo.com/yslow/



#1 - Firebug


En mi opinión Firebug es la mejor herramienta para el desarrollador web. Lo que yo pudiera decir sobre esta herramienta jamas pudiera hacerle justicia, la mejor forma de entender todo lo que hace es usarla, asi que descarguenla y mantengala cerca. Read More!

Llenar un DropDown con jQuery 1.5.1



Una tarea muy común en desarrollo web es llenar un dropdown, una forma muy eficiente de hacerlo es con jQuery, de esta forma puede llenarlo sin hacer postBack al servidor. Aqui un ejemplo que habla por si solo:

Primero iniciamos con un dropdown vacio:



Hay muchas otras cosas que puede hacer con este código, y puede ser optimizado mucho mas. Por ejemplo en mis proyectos yo lo tengo dentro de una función helper donde solo le paso el id del dropdown, el URL y se llena el dropdown.

Una ventaja de las ventajas que tiene aprender a hacer esto con jQuery es que funciona igual con asp.net, php, ROR, etc, ya que solo estas interactuando con el HTML que se genera en la pagina. Read More!

Patrón - Singleton {JavaScript}


Siguiendo con el mismo tema que mi post anterior sobre el Patrón Constructor aquí les dejo otro patrón que resulta muy útil para agrupar funciones y variables dentro de una especie de namespace, se llama Singleton.

Hay diferentes formas de implementarlo, pero la mas sencilla es esta:



Lo bueno aquí es que en tu código HTML vas a poder llamar tus funciones de esta forma:

   1:  Util.FormatNumber(123);


en vez de:

   1:  FormatNumber(123);


así se mantiene el código muchísimo mas organizado y reutilizable. En realidad hay mas razones para hacerlo de esta forma, pero las dejare para otro post.... Read More!

Patrón - Constructor {JavaScript}



Que es un patrón????

Básicamente un patrón es una solución reutilizable para resolver un problema especifico en el diseño de software...

Debido a la naturaleza del lenguaje, en JavaScript se utilizan muchos patrones diferentes. Uno sencillo y muy comun es el patrón Constructor (Constructor Pattern). La mejor forma de entenderlo es viendolo:

Read More!

Obtener el valor de un parametro del QueryString con JavaScript

Cuando programamos web normalmente pasamos muchos parámetros por el QueryString, casi todos los lenguajes (vb.net, c#, jsp, php, etc) tienen funciones para obtener estos valores. Pero JavaScript no tiene una función, así que debemos recurrir a algunos trucos para sacar estos valores.

   1:  function GetQueryStringByName(name) {
   2:      name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
   3:      var regexS = "[\\?&]" + name + "=([^&#]*)";
   4:      var regex = new RegExp(regexS);
   5:      var results = regex.exec(window.location.href);
   6:      if (results == null)
   7:          return "";
   8:      else
   9:          return decodeURIComponent(results[1].replace(/\+/g, " "))
  10:  }


Esta es una función que incluyo en mis proyectos donde se usan algunos RegEx para obtener el valor de un parametro con el nombre: Read More!

Intellisense para jQuery 1.5 con Visual Studio 2010



Si quieres intellisense para jQuery 1.5 solo debes tener incluido el archivo vsdoc. El mejor ahora mismo es el de Damian Edwards, lo puedes bajar aqui.

Recuerda que debes tener una referencia al archivo dentro de la pagina que estas usando actualmente para poder ver el Intellisene. Una forma practica de hacer es:

   1:  <% if (1 == 0)
   2:     { %>
   3:       <script src="../../Content/JavaScript/jquery-1.5-vsdoc.js" 
   4:  type="text/javascript"></script>
   5:  <% } %>


De esta forma tienes la referencia al archivo, pero no saldra al hacer el render de la pagina.

Para que funcione bien debes tener instalado tambien la extensión del JScript Editor de VS2010. Read More!

Ejecutar JavaScript & jQuery al cargar el DOM

Algo muy sencillo, si quieres ejecutar alguna función o algo de código cuando se termine de cargar el DOM, utilizando jQuery tienes varias opciones:

La mas larga:
   1:   $(document).ready(function() {
   2:   
   3:    /// Aqui va tu codigo
   4:   
   5:   });


La forma mas corta:
   1:  $(function(){
   2:   
   3:    /// Aqui va tu codigo
   4:   
   5:  });
Read More!

Crear un Website Multi-Idiomas en ASP.Net MVC 2

Una tecnica muy util cuando estamos trabajando con ASP.Net MVC para manejar el texto que se muestra es utilizar el ModelMetaData y DataAnnotations, tiene muchas ventajas ya que nos permite contener toda esta logica en una capa y no debe repetirse lo mismo en cada View, de esta forma estamos aplicando el principio DRY (Don't Repeat Yourself).


   1:  [MetadataType(typeof(EmpleadoMetaData))]
   2:  public partial class Empleado
   3:   {
   4:       public string NombreEmpleado {get; set;}
   5:   
   6:   } 
   7:  class EmpleadoMetaData
   8:  {
   9:      [Required(ErrorMessage = ("El nombre es un campo requerido"))]
  10:      [DisplayName("Nombre del Empleado:")]
  11:      public string NombreEmpleado {get; set;}
  12:  }



Pero en la versión 2 de MVC no cuenta con una técnica out-of-the-box para localizar esta información, de modo de que cuando queremos trabajar con un website en varios idiomas se hace un poco cuesta arriba.

La mejor solución que le he podido encontrar a esto es crear tu propio atributo. La idea es poder heredar del DisplayNameAttribute que se utiliza y pasarle la cultura del usuario que esta actualmente loggeado en la aplicación.

La clase que vamos a crear se llama LocalizedDisplayNameAttribute y el codigo que vamos a usar es:


   1:      public class LocalizedDisplayNameAttribute : DisplayNameAttribute
   2:      {
   3:          string dNameKey;
   4:   
   5:          public LocalizedDisplayNameAttribute(string displayNameKey)
   6:              : base(displayNameKey)
   7:          {
   8:              dNameKey = displayNameKey;
   9:          }
  10:   
  11:          public override string DisplayName
  12:          {
  13:              get
  14:              {
  15:                  return Lookup(dNameKey);
  16:              }
  17:          }
  18:          
  19:   
  20:          static string Lookup(string key)
  21:          {
  22:              try
  23:              {
  24:                  LocalResourceRepository _RepLocal;
  25:                  _RepLocal = new LocalResourceRepository();
  26:   
  27:                  String cul = System.Web.HttpContext.Current.Session["CultureName"].ToString();
  28:   
  29:                  return _RepLocal.GetValue(key, cul);
  30:              }
  31:              catch(Exception ex)
  32:              {
  33:                  //throw new Exception(ex.ToString());
  34:                  return key; // fallback
  35:              }
  36:          }
  37:   
  38:   
  39:   
  40:      }

Si se fijan es tan facil como sobreescribir la propiedad DisplayName y colocar nuestra propia logica de como buscar el texto del campo. En este caso estoy utilizando un Repositorio a traves del cual le pasamos el Key & la Cultura, lo hago de esta forma para almacenar todo esto en una base de datos y poder actualizarlo sin tener que tocar los fuentes de mi website. Read More!

Hello Project Natal, Adios Nintendo Wii

Just look at this: Read More!

What does DNN have to do with WebForms vs. MVC?


Recently everyone out there has been voicing their opinion about how MVC or WebForms is better/easier/faster than the other. In fact a lot of A+ developers have gotten into the action, particularly on the side of MVC.

The other day ScottGU also had his say in the matter.

Well, Recently Shawn Walker had a great (depending on who you ask) blog post about why DotNetNuke will be kept with WebForms for the time being instead of migrating to MVC. It is definetly worth reading, please go ahead. Read More!

Foto del nuevo Apple Tablet

Read More!

ASP.NET MVC 2 Beta Source Code



En el dia de hoy Phil Haack, Program Manager del equipo de ASP.NET MVC publico el codigo fuente del Beta 2 de ASP.NET MVC en CodePlex.

Adicionalmente publicaron los Futures, los cuales son una serie de funcionalidades que aun no llegan a ser parde del producto pero que estan siendo consideradas. Read More!

Generar la base de datos a partir de un Modelo del Entity Framework

Uno de los features mas esperado de la proxima versión del Entity Framework es poder crear el Modelo primero. Con el Visual Studio 2010 Beta 2 tenemos un nuevo CTP que introduce este cambio. Esto nos permite crear nuestro modelo de objetos y luego a partir de este generar automaticamente la base de datos!.

Les mostrare una breve introducción de sobre las pasos a realizar.

1) Debemos agregar un nuevo modelo de datos del Entity Framework



2) Hay que seleccionar la opción Empty Model



3) Aqui procedemos a agregar todas nuestras entidades y sus asociaciones





4) Luego debemos seleccionar la opción "Generate Database from Model". Lo cual traera correra un Wizard donde seleccionaremos la conexion a la BD y producira un archivo DDL para la creacion de los objetos.





5) Finalmente corremos nuestro Script conectados a nuestro servidor de BD y veran como tenemos todos nuestros objetos creados.





Esta es una buena forma de poder comenzar el desarrollo creando nuestro modelo de objetos, en vez de la vieja practica de comenzar con el diseño de la base de datos. Read More!

Ejemplo de como Utilizar el ModelMetadata de MVC 2

Cuando estamos creando un View en MVC, generalmente usamos una serie de filas como esta:

   1:  <p>
   2:      <label for="NombreEmpleado">NombreEmpleado:</label>
   3:      <%= Html.TextBox("NombreEmpleado")%>
   4:      <%= Html.ValidationMessage("NombreEmpleado", "*") %>
   5:  </p>


Para presentar las diferentes propiedades de un objeto, incluso, mucha gente simplemente las deja asi mismo como las genera la herramienta de "AddView" de Visual Studio.

El problema esta en que si se fijan el valor que sale puesto en el label es exactamente el nombre que le pusimos a la propiedad del objeto, sin espacios y sin formato alguno. Generalmente es el nombre del campo de la Base de Datos, especialmente si utilizamos LINQ2SQL o Entity Framework para generar las clases.

Lo que siempre terminamos haciendo es ir y manualmente cambiar el contenido del label para que se vea mas presentable nuestro formulario:

   1:  <label for="NombreEmpleado">Nombre del Empleado:</label>


Pero esto se vuelve una tarea muy repetitiva y muy aburrida luego de que tengamos que cambiar la misma propiedad una y otra vez en varios sitios.

Como ya mencione en mi post anterior sobre los DataAnnotations en MVC 2, ya existe una manera en la que podemos incluir metaData que esta relacionada a nuestros objetos en una capa separada, la cual es luego utilizada por el motor de MVC.

Tomaremos este caso sencillo, en el cual queremos que nuestros objetos tengan los nombres apropiados en todos los lados que se esten utilizando, pero no queremos tener que digitarlos una y otra vez.

Primero, debemos crearle una clase parcial con la metaData que este asociada a nuestros objetos y utilizar la propiedad DisplayName:

   1:  [MetadataType(typeof(EmpleadoMetaData))]
   2:  public partial class Empleado
   3:   {
   4:       public string NombreEmpleado {get; set;}
   5:   
   6:   } 
   7:  class EmpleadoMetaData
   8:  {
   9:      [Required(ErrorMessage = ("El nombre es un campo requerido"))]
  10:      [DisplayName("Nombre del Empleado:")]
  11:      public string NombreEmpleado {get; set;}
  12:  }


Luego, en nuestros views debemos asegurarnos que en vez de utilizar:

   1:  <label for="NombreEmpleado">NombreEmpleado:</label>


usemos:

   1:  <%= Html.LabelFor(t => t.NombreEmpleado) %>


Y listo, como podran ver, al utilizar el helper de HTML.LabelFor, se busca la metaData que tiene asociada ese objeto y se presenta en nuestro View el texto que queremos, y ahora lo tenemos todo concentrado en una capa separada, donde podemos modificarlo facilmente sin mucho esfuerzo. Read More!

IntelliSense para JavaScript y jQuery en VS2010 Beta2

Si por alguna razon en VS2010 siente que le falta algo muy importante cuando esta escribiendo codigo JavaScript o jQuery, no se preocupe, no esta solo.

Visual Studio 2010 Beta 2 tiene un bug en donde en algunas instalaciones se "desparace" el IntelliSense para JavaScript, ya sea parcialmente o por completo. Tiene que ver con un bug en el proceso donde se importan los settings de una versión anterior.

Para arreglarlo es bien facil, solo tiene que ir a Tools --> Import and Export Settings y darle a la opción que dice "Reset all settings". No saquen backup!, deben eliminarlas y seleccionar nuevamente cual es su ambiente preferido para el codigo.



Gracias a Rick Strahl por este tip. Read More!

jQuery event binding en ASP.NET MVC

A veces son las cosas pequeñas que nos trancan el juego y nos hacen perder mucho tiempo cuando estamos desarrollando, especialmente cuando estamos usando algo que es relativamente nuevo, para el cual no hay mucha documentación disponible.

Hoy me tope con un caso muy sencillo en una aplicación asp.net mvc en donde yo estaba generando un textbox de la siguiente manera:


   1:  <%= Html.TextBox("Ejemplo")%>


A esto le queria agregar una llamada a una funcion de JavaScript, pero no tenia claro donde deberia ponerle el onkeyup="SumaEjemplo()" para que el html que fuera generado quedara de la siguiente manera:


   1:  <input type="text" id="Ejemplo" onkeyup="SumaEjemplo()" />


Al final decidi no perder mucho tiempo y fui a stackOverflow, donde en minutos obtuve mi respuesta.

Debi haberlo puesto asi:


   1:  <%= Html.TextBox("Ejemplo",string.Empty,new{onkeyup="SumaEjemplo()"})%>


Pero al final tampoco esa era la forma mas idonea de hacerlo, lo que se debio usar fue una llamado con jQuery y usar el event binding de la siguiente manera:


   1:  $(function(){
   2:      $("#Ejemplo").onkeyup(SumaEjemplo);
   3:  });
   4:   
   5:  function SumaEjemplo(eventInstance){
   6:      // handle onkeyup event
   7:  }



!!!.. Read More!

ASP.NET MVC 2 - DataAnnotations

Una de las nuevas funcionalidades que tiene el Preview 2 del ASP.NET MVC 2 es la implementación de DataAnnotations (System.ComponentModel.DataAnnotations).

DataAnnotations nos permite escribir nuestras validaciones en un solo lugar, en nuestra clase de validación, de esta forma nos apegamos al concepto DRY (Dont-Repeat-YourSelf), ya que de lo contrario hubiesemos tenido que tener logica de validación mezclada tanto en la capa de presentación (nuestros Views & codigo jQuery/Ajax) y dentro de nuestros objetos de negocio.

Vamos a ver como funciona todo esto. Lo primero que debemos tener es un modelo, para esto vamos a usar algo bien simple, una clase de Empleado:Esta primera clase la pudieron haber creado con el modelo u ORM que usan habitualmente: LINQ2SQL, Entity Framework, nHibernate, lo unico que debe tenerse en cuenta es que debe ser una clase parcial ya que en el proximo paso vamos a tener que extenderla.


   1:  public partial class Empleado
   2:  {
   3:      public string Nombre {get; set;}
   4:      
   5:      public int DepartamentoId {get; set;}
   6:  }



En el proximo paso lo que vamos a hacer es crear una clase nueva donde se van a guardar todas las reglas para las validaciones sobre las propiedades y atributos de nuestras clases.



   1:  [MetadataType(typeof(EmpleadoMetaData))]
   2:  public partial class Empleado
   3:  {
   4:  public string Nombre {get; set;}
   5:   
   6:  public int DepartamentoId {get; set;}
   7:  }
   8:   
   9:  class EmpleadoMetaData
  10:  {
  11:  [Required(ErrorMessage = ("El nombre es un campo requerido"))]
  12:  public string Nombre {get; set;}
  13:   
  14:  [Required(ErrorMessage = ("Debe especificar un departamento"))]
  15:  public int DepartamentoId {get; set;}
  16:  }



Lo que hemos hecho aqui es crear una clase nueva para poder tener toda nuestra logica de validacion separada y en un solo sitio y luego utilizando el atributo MetadataType hemos asociado ambas clases.

El proximo paso es incluir los archivos necesarios para que nuestras vistas generen la logica de validación necesaria del lado del cliente.

En el codigo de la vista (preferiblemente en el MasterPage) incluyan estas declaraciones:


   1:  <script type="text/javascript" src="../../Scripts/jquery-1.3.2.min.js">script>
   2:  <script type="text/javascript" src="../../Scripts/jquery.validate.min.js">script>
   3:  <script type="text/javascript" src="../../Scripts/MicrosoftMvcJQueryValidation.js">script>



El ultimo paso es especificarle al view que genere la logica de jQuery, esto lo hacemos con solo una linea de codigo adicional!!!:



   1:  <% Html.EnableClientValidation(); %> 



Listo. Con esto ya tenemos validación del lado del cliente generada automaticamente con la libreria jQuery, y para aquellos usuarios curiosos que apagan el JavaScript aun permanece la validación del lado del servidor. Read More!

Cómo aprovechar las nuevas carácteristicas y herramientas de Windows 7 para lograr aplicaciones más seguras


 


En el dia de hoy salio publicado mi nuevo ScreenCast en el MSDN Media Center, hecho para la campaña de Windows 7x7, que soporta el lanzamiento de Windows 7. El tema que toque es uno que he trabajado durante muchos años, la seguridad en el desarrollo de Software.


Pueden ver el ScreenCast en linea aqui.

Read More!

Anteproyectos Imagine Cup 2009‏


En el dia de hoy comenzo el proceso de evaluación para los proyectos participantes en el Imagine Cup 2009 en lo que Microsoft denomina Multi Country Américas. Hoy a nosotros los jurados nos llegaron por email 15 anteproyectos para ser evaluados.

Espero ver muchas ideas interesantes este año al igual que en años anteriores, suerte a todos!!!...

Enlaces Relacionados:
Read More!

Small Basic




Se acuerdan de QBasic?, GWBasic?. Bueno, no es lo mismo pero las personas de Microsoft Labs nos pusieron un juguete nuevo para nosotros, se trata de SmallBasic, es un lenguaje de programación basado en el .Net Framework con su propio IDE.

Es bien sencillo, tiene solo 15 palabras claves y el IDE cuenta con un Intellisense muy chulo. Si tienen tiempo extra para jugar bajenselo y delen una vuelta, se los recomiendo.

Pueden descargarlo aqui.

Read More!

Internet Explorer 8 RC1



Hoy Microsoft lanzo una nueva versión del Internet Explorer 8, esta vez el Release Candidate 1. Puede descargarlo aqui.

Segun Microsoft es una versión casi final y habrá muy pocos cambios entre esta y la versión RTM.
Read More!