CSS.3 – HTML.5 & Modernizr

A estas alturas nadie puede negar que Microsoft está haciendo una apuesta en firme para dar soporte a los estándares web y un buen ejemplo de esto es en los nuevos proyectos web MVC 3 tenemos la posibilidad de crear aplicaciones con HTML 5 y CSS 3. Pero una cosa que puede que haya pasado más desapercibido es la librería script Modernizr que viene incluido con los ficheros scripts del proyecto. La versión que viene incluida es la 1.7 pero actualmente ya tenemos disponible la versión 2.0.4.

¿Qué es Modernizr?

Modernizr es una librería javascript open-source que nos permite detectar que características de HTML5 o CSS3 que son soportadas por el navegador. De esta manera podemos crear paginas con las últimas funcionalidades que nos brindan estos nuevos estándares sin preocuparnos si el navegador lo soporta o no, porque esta librería nos avisará y nos brindará la posibilidad de utilizar otras librerías para simular esta funcionalidad. Continúa leyendo CSS.3 – HTML.5 & Modernizr

Evento inaugural de catdotNet !!!

Sábado 2 de julio jornada inaugural de catdotNet

Este próximo sábado en la ciudad condal, en el Cybernàrium de Barcelona Activa, diversos grupos de usuarios .NET catalanes inician juntos un nuevo proyecto destinado a ayudarnos en el difícil proceso de mejorar como profesionales. No dejes escapar esta fecha tan destacada i aprovecha para conocer de primera mano todo lo que te propone el nuevo catdotNet, a la vez que tienes la oportunidad de aprender de profesionales con gran experiencia sobre tecnologías .NET Regístrate ahora mismo aquí per poder disfrutar de una mañana intensa con una agenda en este primer encuentro realmente de lujo:

Gestión de dependencias con NuGet

NuGet es un proyecto Open Source el cual facilita la gestión de dependencias de proyectos con librerías de terceros. Aprende como crear tus propios paquetes y repositorios de librerías para desarrollos internos y todas las posibilidades de gestión de dependencias de terceros para proyectos. Con José Miguel Torres, co-fundador de CatDotNet, R&D+i Manger en MRW y MVP en movilidad.

ASP.NET MVC 3 en la práctica

Sesión eminentemente práctica en la que veremos las características más importantes de ASP.NET MVC 3 como el motor de vistas Razor, el soporte para aplicar dependency injection, validaciones remotas, etc.

Continúa leyendo Evento inaugural de catdotNet !!!

CodeBars con ASP.NET MVC

Hace tiempo que quiero pasar todos los artículos que tengo en geeks.ms a mi`página personal http://mrubino.net , pero pasar tantos articulos de varios años no es nada fácil y por más inri tengo el problema que he perdido la mayoría del material que se encontraba en el anterior server.

Por eso he decidido ir pasando los artículos más vistos y si puedo rehacer los ejemplos para que estén disponibles desde mi nuevo site.

Para empezar he recuperado uno de los artículos más vistos que es como crear una imagen dinámicamente con un Handler para ASP.NET Web forms y mostrar un código de barras con la información que pasa el usuario como parámetros.

Estos artículos los puedes repasar en Geeks: http://geeks.ms/blogs/mrubino/archive/2008/12/04/asp-net-codebars.aspx y en mi site http://mrubino.net/2008/12/asp-net-codebars .

Pero estos ejemplos no sirven para la gente que utiliza ASP.NET MVC porque ya no es necesario los Handlers para tratar las imagen y en su defecto podemos crear un controlador que devuelva directamente la imagen dinámica.

Pero mejor hacer un nuevo ejemplo para ver más claro como funcionaría un controlador que nos devuelva la imagen dinámica. Continúa leyendo CodeBars con ASP.NET MVC

VS2010 – Soporte HTML5, CSS3

Pues eso que Visual Studio no se quiere quedar atras en esta frenética carrera por los nuevos estandares y ya tenemos disponible para descargar la primera revisión de los estandares web para Visual Studio 2010 y Visual Studio Expres 2010 SP1 .

En esta primera versión de la actualización, el equipo de VS se ha centrado en actualizar el soporte a HTML5 , agregar soporte a CSS 3 y añadir nuevas API para el intellisense de JavaScript. El plan es hacer una versión cada 3 meses para mantener Visual Studio actualizado con los cambios realizados por el W3C.

Más información en el blog de Scott Hanselman o desde el blog de VS y la actualización desde MSDN .

 

Cross-Posting : http://mrubino.net 

 

 

Material [Webcast] La web desde cero I – JavaScript

8c6e7655-3d3e-4cad-8fdd-1e4dfcc785f2

 

Ya tenéis disponible el webcast que hicimos con la gente de http://secondnug.com para dar soporte a temas que normalmente suelen estar en todos los foros de programación web.

En esta ocasión hemos empezado con lo más básico, pero imprescindible a la hora de hacer páginas web interactivas "JavaScript".

WebCast: https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-AR&EventID=1032486642&CountryCode=AR

Espero veros en la próxima que ampliaremos el tema atacando de cara a JQuery y AJAX.

CrossPosting: http://mrubino.net

Pluralize Visual Studio 2010

Una cosa buena de las que tiene EF 4 es la posibilidad de elegir pluralizar o no las entidades a la hora de materializar las entidades.

ThePluralizeorSingula

  • Generación de la entidad CON Pluralize:

Pluralize2

  • Generación de la entidad SIN Pluralize:

Pluralize1

Cuando trabajas con Linq2Sql la tarea de definir si pluralizar o no tus entidades no es tan fácil y además tienes que buscar la configuración en las propiedades de Visual Studio.

En el menú de Visual Studio : Tools –> Options –> Data Base Tools –> O/R Designer –> «True»

Esto en mi opinión es un error, porque depende de la configuración del IDE la generación de las entidades y si diferentes componentes de un equipo de desarrollo tiene diferentes configuraciones, puede causar más de un dolor de cabeza y doy fe XD.

Por eso cuidado al generar vuestras entidades y si puede ser que siempre lo haga la misma persona pare evitar incompatibilidades entre formatos.

Cross-Posting: http://mrubino.net/

Error en IIS BadImageFormatException

Subiendo una aplicación web al servidor me encontré con un error muy raro y que hasta el momento no me había pasado nunca.

Error System.BadImageFormatException !!!

La página del error en el IIS es:

 

La aplicación hasta ese momento estaba funcionando y después de añadirle un nuevo ensamblado  Masivos.Application.Interfaces dejó de funcionar. Lo curioso es que en el servidor de desarrollo funcionaba perfectamente, pero en el servidor de Pre no había manera que funcionara.

Lo primero que tenemos que saber es que la máquina de desarrollo estaba corriendo en un Windows7  32bits y el servidor de Pre en un Windows Server 2008 R2 64 bits.

La configuración de la solución

Lo primero que hay que mirar es la configuración de la solución.

 

A simple vista se ve algo raro, justamente el proyecto que está fallando esta compilando siempre en x86 y eso no es lo correcto, la compilación tendría que ser igual que el resto de proyectos de librerías para Any CPU. Lo peor de todo es que al intentar modificar esta configuración no aparece la opción y solo permite compilar para x86.

El porqué de todo esto

El error está bastante claro: Una DLL o aplicación ejecutable se carga como un ensamblado de 64 bits, pero contiene características o recursos de 32 bits. Por ejemplo, usa la interoperabilidad COM o llama a métodos en una biblioteca de vínculos dinámicos de 32 bits.  http://msdn.microsoft.com/es-es/library/system.badimageformatexception.aspx.

Mis intentos para solucionar el problema pasaron por:

1.       intentar obligar al pool de aplicaciones del IIS en que la solución corriera en x86. FAIL !!

2.       Intentar por todos los medios que el proyecto de Interfaces se compilara en Any CPU. FAIL!!

 

La Solución

 

Lo que me mosqueaba era porque motivo un proyecto de librería no me dejaba poder establecer la compilación en Any CPU y la respuesta surgió cuando el que creó el proyecto comento que en principio seleccionó la plantilla de consola y luego modifico el proyecto a librerías.   Argggg !!!!!

 

 Visual Studio cuando crea un proyecto de consola siempre lo configura como x86 y la única manera de poder cambiar esto es modificando a mano la configuración del proyecto. Pues la solución rápida fue crear un nuevo proyecto directamente de librería y copiar todos los ficheros al nuevo proyecto.  Una vez todos los ensamblados compilados en 64bits el deploy funcionó y todos felices.

Experiencias del día a día de un desarrollador 😉

 

¡Enhorabuena MVP de Microsoft 2011!

MVP

Despues de tantos años participando en las comunidades intentando compartir mi granito de arena me ha llegado el famoso email de Microsoft .

Enhorabuena. Nos complace presentarle el programa de nombramiento MVP de Microsoft® de 2011. Este nombramiento se concede a los líderes excepcionales de la comunidad técnica que comparten de forma activa su experiencia de alta calidad y de la vida real con otras personas. Le agradecemos especialmente la contribución que ha realizado en las comunidades técnicas en el área de ASP.NET a lo largo del pasado año.

Para mí es un placer recibir este reconocimiento por parte de Microsoft y no hace más que animarme a continuar con mi empeño de poder compartir mis experiencias y aprender de tantas otras de mis pares.

No se si es una promesa o una amenaza pero seguiré intentando aportar todo lo que pueda como lo he estado haciendo todos estos años.

Muchas gracias a todos los que me habéis apoyado durante todo este tiempo y a todos los MVP’s nuevos y a los que habéis renovado para este año.

Gracias a Todos !!

 CrossPosting: http://mrubino.net

 

MongoDB con Norm

Últimamente se ha puesto de moda las bases de datos NoSql y realmente es una buena alternativa si no necesitas una base de datos relacional y es mucho más potente que utilizar por ejemplo un fichero XML.

 MongoDB es una base de datos documental no existe el concepto de tabla, solo contamos con colecciones de objetos en formato JSon y de código abierto. Una solución escalable y de alto rendimiento que nos permite trabajar con índices, replicación y alta disponibilidad. MongoDB está realizado en C++ pero su cliente soporta múltiples Drivers de lenguajes de programación, tanto por mongodb.org como por la comunidad de desarrolladores. Para .Net tiene drivers para C# y F#.

Para mis ejemplo utilizaré Norm un driver para C# que facilita la interacción con las colecciones, la serialización/deserialización de objetos JSOn como documentos «BSON» a tipos .NET y la utilización de LinQ-To-Mongo. Otra de las utilidades que he utilizado es mongoVUE para administrar nuestras bases de datos de una forma gráfica.

 

Con esta utilidad podéis ver los datos en formato árbol o en JSon.

 

 

La Instalación

La instalación es muy simple:

  1. Crear los directorios «C:MongoDBdata» y «C:MongoDBlogs»
  2. Copiar los ficheros de la instalación MongoDB
  3. En el directorio «C:MongoDBbin» ejecutar: «mongod –dbpath C:MongoDBdata –directoryperdb –install –logpath C:MongoDBlogslog.txt» “En Windows 7, ejecutar el CMD como administrador para no tener problemas”
  4. Arrancar el servicio de MongoDB

El Modelo

Una de las ventajas de Norm es que podemos utilizar nuestras entidades sin necesidad de realizar grandes cambios, el único requerimiento es utilizar el objeto ObjectId para que MongoDb lo utilice como identificador de los registros.

 [DataContract]
    public class Persona
    {
        public ObjectId Id { get; set; }
        [DataMember]
        public string Nombre { get; set; }
        [DataMember]
        public string Apellidos { get; set; }
        [DataMember]
        public DateTime Fecha { get; set; }
        [DataMember]
        public string Poblacion { get; set; }
        [DataMember]
        public int Hermanos { get; set; }
        [DataMember]
        public List Aficiones { get; set; }

    }
    [DataContract]
    public class Aficion
    {
         [DataMember]
        public string Nombre { get; set; }
         [DataMember]
        public string Descripcion { get; set; }
    }

La Conexión

Para conectar con nuestra base de datos tenemos que especificar el nombre de la base de datos, el servidor el puerto y un string con las opciones.

private Mongo mongo;
public RepositoyNomgoDB()
{
   mongo = new Mongo("EjMongoDB", "localhost", "27017", string.Empty);
}

Las Consultas

Para todas nuestras consultas podemos utilizar objetos anónimos o consultas LinQ. Lo primero que tenemos que hacer e obtener la colección que queremos utilizar, como si fuera una tabla de una base de datos relacional.

var collection = (MongoCollection)mongo<Personas>.GetCollection("Personas");

Una vez que tenemos la colección podemos utilizar las típicas sentencias CRUD.

 collection.Insert(persona);
 collection.Delete(persona);
 collection.Save(persona);
 collection.UpdateOne(persona.Id, persona);

Ahora ya podemos realizar nuestras consultas utilizando la forma que nos sea más cómoda;

Buscar un Resultado:

//NoRM anonymous objects:
var persona = mongo.GetCollection<Personas>("Personas")
                             .FindOne(new { Nombre = "Marc" });
//NoRM Linq:
var personalinQ = mongo.GetCollection<Personas>("Personas")
                                                 .AsQueryable()
                                  .Where(per => per.Nombre == "Marc"
                                && per.Apellidos == "Rubiño").ToList();

Buscar Varios Resultados o paginar los resultados:

//NoRM anonymous objects:
var persona = mongo.GetCollection<Personas>("Personas").Find(new { },
                                new { Fecha = OrderBy.Descending }, 2, 1)
                                 .ToList();
//NoRM Linq:
var persona = mongo.GetCollection<Personas>("Personas").AsQueryable()
                                 .OrderByDescending(per => per.Fecha)
                                  .Skip(1)
                                  .Take(2).ToList();

Operadores Condicionales:

 //Mayor que
var persona = mongo.GetCollection<Personas>("Personas").AsQueryable()
                            .Where(per => per.Hermanos > 3).ToList();
//Igual o Mayor
var persona = mongo.GetCollection<Personas>("Personas").AsQueryable()
                             .Where(per => per.Hermanos >= 3).ToList();
//Diferente
var persona = mongo.GetCollection<Personas>("Personas").AsQueryable()
                              .Where(per => per.Hermanos != 3).ToList();
//En
var persona = mongo.GetCollection<Personas>("Personas").Find(
                   new { Aficiones = Q.In("Futbol", "Música") }).ToList();
//NO En
var persona = mongo.GetCollection<Personas>("Personas").Find(
             new { Aficiones = Q.NotIn("Futbol", "Música") }).ToList();
//Existe
var persona = mongo.GetCollection<Personas>("Personas").Find(
                           new { Apellidos = Q.Exists(true) }).ToList();
//OR
var persona = mongo.GetCollection<Personas>("Personas")
                             .Find(Q.Or(new { Nombre = "Marc" },
                             new { Aficiones = "Futbol" })).ToList();

Distinto y Count:

//Count
 var persona = mongo.GetCollection<Personas>("Personas")
                        .Count(new { Poblacion = "Cambrils" });
//Distinct
var persona = mongo.GetCollection<Personas>("Personas")
                                 .Distinct("Aficiones");

Con expresiones Regulares:

//Empieza por Ma
 var persona = mongo.GetCollection<Personas>("Personas").AsQueryable()
                         .Where(per => Regex.IsMatch(per.Nombre, "^Ma"))
                          .ToList();

Ya podemos añadir y obtener los registros desde nuestra base de datos NoSql de Personas

 

Espero que en la próxima entrega pueda hacer un ejemplo más específico para una aplicación ASP.NET.

CrossPosting: http://mrubino.net