Introducción a Microsoft Enterprise Library

by ryudice on August 30, 2010

Enterprise Library es un conjunto de bloques de aplicaciones desarrollados por Microsoft para el .net framework. Un bloque de aplicación es código que puede ser reutilizable entre varios proyectos, generalmente en una aplicación siempre existe código que puede ser útil en otras aplicaciones como son en el caso de :

  • Logeo de errores
  • Cache de datos
  • Inyección de dependencias
  • Validación

Microsoft ha creado bloques de aplicaciones para estas áreas y como resultado ha nacido Microsoft Enterprise Library, basándose en las mejores practicas de la industria y la misma experiencia que tiene Microsoft.

Es necesario saber al menos del conocimiento que existe esta librería, hay muchas alternativas a cada uno de los bloques de aplicación que contiene el Enterprise Library, por ejemplo, para logeo podemos utilizar NLog o log4net, para inyección de dependencias podemos usar structuremap, o ninject, sin embargo la ventaja de usar el EntLib es que todo viene en un solo paquete, al final es decisión de ustedes si lo quieren usar o no.

Les dejo el link del enterprise library, en ese mismo sitio pueden encontrar laboratorios prácticos de como utilizar cada uno de los bloques, son bastante buenos lo único malo es que solo están en ingles.

Por cierto, la ultima versión al momento de este post es la 5.0 para el framework 3.5.

Sitio official de Microsoft EntLib en codeplex.

{ 0 comments }

Ausencia

by ryudice on July 27, 2010

Solo quería informarles que no he podido postear (y probablemente no pueda por una semana mas) debido a que a todas mis computadoras se han arruinado y lo único que me queda es mi iPhone. De un solo quiero decirles que las fuentes de laptop genéricas(no originales) arruinan los motherboard así que no las usen, y tampoco maltraten el disco duro de su computadora de escritorio porque el mío se canso de tanto maltrato. Voy a estar mas activo en twitter durante este tiempo así que me pueden seguir en twitter para updates, mi usuario es ryudice. Bueno me despido ya que no es tan agradable escribir textos largos en un teléfono celular.

{ 0 comments }

Relájate en el trabajo usando MoodTurn.com

by ryudice on July 21, 2010

image

Si necesitan relajarse en su trabajo o concentrarse mejor les recomiendo esta aplicación web llamada MoodTurn.com. MoodTurn es una pagina donde pueden escuchar música de ambiente, ustedes pueden seleccionar si quieren sentir que están en la selva, en el mar o en el bosque, todos los sonidos son relajantes. La pagina rota continuamente la musica por lo que pueden ingresar a cualquier hora.

Ir a MoodTurn.com

{ 0 comments }

Como son las entrevistas en Google?

by ryudice on July 18, 2010

Si quieren saber como es el proceso de entrevistas para ser contratado en google les recomiendo este post, esta en ingles pero lo pueden traducir con google translate y si saben ingles aun mejor.

En general el proceso consta de alrededor de 5 entrevistas segun esta persona, he leido otros posts sobre entrevistas de google y todos concuerdan en la cantidad de entrevistas que tienen que pasar antes de ser contratados( si es que los contratan). En el post el autor menciona algunos recursos interesantes sobre que necesitan si quieren trabajar en google, obviamente no son recursos oficiales pero tambien si ven los comentarios un ex-empleado de google da unos cuantos tips.

{ 0 comments }

Hace dos dias paso algo para lo que no estaba preparado, el hosting tuvo un problema y perdio la base de datos del blog, no tenia respaldos, ya que yo no creia en los respaldo porque nunca habia estado en una situacion como esta, nunca se me ha arruinado un disco, nunca habia perdido informacion, hasta hace 2 dias…

Entre al blog y vi que tiraba un error de que no podia abrir la base de datos, no me asuste porque ya me habia pasado y lo solucione facilmente, pero esta ves entre al panel de control del hosting y veo que en el tamanio de la base de datos aparecia “0.0MB”, todavia no me habia asustado porque pense “quizas no sirve el panel de control”, luego para verificar decidi abrir la base de datos en phpMyAdmin,  y hoy si me asuste, todas las tablas tenian cero filas, trate de buscar algun respaldo que me acordaba haber hecho hace mucho pero no tuve exito. La verdad me resigne y dije que desde entonces no iba a subestimar la importancia de los respaldos.

Afortunadamente, me comunique con el hosting y tenian el respaldo del dia anterior guardado, al final todo regreso a la normalidad, pero lo mas importante es que aprendi una leccion: Hay que hacer respaldos.

Inmediatamente el blog estaba arriba, instale el plugin WP-DBManager y programe respaldos automaticos cada 3 dias de la base de datos, lo bueno de este plugin en especial es que tiene la opcion de enviarte el respaldo a tu correo electronico, asi en caso de que agarren fuego los centros de computo del hosting, yo voy a tener el respaldo en mi correo :) .

{ 0 comments }

Mi mama siempre me dice que paso demasiado tiempo en la computadora y que hay que tomar un descanso cada hora, el problema es que nunca me acuerdo que tengo que descansar de tan concentrado que estoy. Esta pequeña aplicación te recuerda que tienes que tomar un descanso, según el tiempo que ustedes configuren, es sencilla y funcional y para aquellos que se preocupan por su salud les servirá para acordarse de levantarse para ir a tomar un café y relajarse un rato.

Descargar Big Stretch

{ 0 comments }

ASP.NET MVC + ExtJS

by ryudice on June 3, 2010

Si no han oido de ExtJS, es un framework para RIAs (Rich Internet Application) basado en javascript, otros framework de RIA son Flex y Silverlight, los cuales estan basados en plataformas completamente diferentes ala de ExtJS, ya que ExtJS no requiere que se instale ningun plugin adicional a diferencia de Silverlight y Flex, ya que ExtJS lo unico que necesita es javascript.

ExtJS esta compuesto por varios componentes programados en javascript, similar al modelo de ASP.NET normal, por ejemplo, incluye un componente para Grids, uno para ventanas, formularios, etc., pero lo que convierte a ExtJS en  un framework RIA es que todo lo hace a traves de JSON y AJAX, por lo que tener que refrescar la pagina es raro en aplicaciones hechas completamente en ExtJS, es como cargar una aplicacion de escritorio en el navegador.

ASP.NET MVC Y ExtJS

He estado utilizando ExtJS para un proyecto en la universidad y decidi utilizar ASP.NET MVC como tecnologia de servidor y descrubri que ExtJS y ASP.NET MVC se integran increiblemente bien, desarrollar las aplicaciones es mucho mas sencillo.

La curva de aprendizaje de ExtJS puede ser un poco inclinada (dificil) si no estan familiriazados con javascript pero una ves se acostumbren se van a dar cuenta porque los desarrolladores de ExtJS decidieron usar javascript.

Llenando un grid de ExtJS con datos de un controlador de ASP.NET MVC

Vamos a crear un grid sencillo y le vamos a cargar datos desde un controlador de ASP.NET MVC para que vean lo sencillo que es.

En ExtJS todo el acceso a datos se hace por medio de objetos de tipo Store, en nuestro caso vamos a usar un JsonStore, ya que nuestro controlador retornara datos serializados en formato JSON.

Descargando ExtJs y agregando referencias

La libreria la pueden descargar de www.extjs.com, luego copien los archivos que se muestran en la imagen a un nuevo directorio llamado extjs dentro de la carpeta “Scripts” de la aplicacion.

image

La estructura dentro de la aplicacion debe quedarles asi:

image

Ahora agreguen estas referencias al master page o ala pagina donde quieran usar la libreria:

<script src="/Scripts/extjs/adapter/ext/ext-base.js" type="text/javascript"></script>
<script src="/Scripts/extjs/ext-all.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="/Scripts/extjs/resources/css/ext-all.css" />

Este es el codigo del controlador que vamos a utilizar, cree una clase de nombre Empleado que vamos a retornar,y tambien cree un metodo para generar empleados y asi poder retornar la lista de empleados.

    [HandleError]
    public class EmpleadoController : Controller
    {
        public ActionResult Index()
        {
            var empleados = GenerarEmpleados(25).ToList();
 
            if (Request.IsAjaxRequest())
            {
                return Json(new {data = empleados, total = empleados.Count},JsonRequestBehavior.AllowGet);
            }
 
            return View();
        }
 
 
        private IEnumerable<empleado> GenerarEmpleados(int cantidad)
        {
            var nombres = new []{&quot;Roberto&quot;, &quot;Javier&quot;, &quot;Ernesto&quot;, &quot;Diego&quot;, &quot;Julio&quot;, &quot;Carlos&quot;};
            var apellidos = new[] {&quot;Gonzalez&quot;, &quot;Martinez&quot;, &quot;Zepeda&quot;, &quot;Perez&quot;, &quot;Calderon&quot;};
            var cargos = new[] {&quot;Gerente de operaciones&quot;, &quot;Programador&quot;, &quot;Administrador&quot;, &quot;DBA&quot;, &quot;Coordinador&quot;};
            var random = new Random();
            for (int i = 0; i &lt; cantidad; i++)
            {
                yield return new Empleado
                                 {
                                     Apellido = apellidos[random.Next(0, 4)],
                                     Nombre = nombres[random.Next(0, 4)],
                                     Cargo = cargos[random.Next(0, 4)],
                                     Sueldo = random.Next(100, 5000),
 
                                 };
 
            }
 
 
        }
    }
 
    public class Empleado
    {
        public string Nombre { get; set; }
        public string Apellido { get; set; }
        public decimal Sueldo { get; set; }
        public string Cargo { get; set; }
    }

 

Vamos a usar el mismo metodo “Index” para retornar nuestros datos, la unica diferencia es que si la peticion fue hecha a traves de AJAX, como es en el caso de ExtJS, entonces vamos a retornar JSON, de otra manera vamos a retornar la pagina para ser visualizada en el navegador, asi nos ahorramos estar creando nuevas acciones en el controlador.

Es hora de escribir un poco de javascript, primero vamos a crear un JsonStore de ExtJS, el JsonStore es como un Datasource que vamos a utilizar para cargar el Json que retornara nuestro metodo Index:

    var empleadosStore = new Ext.data.JsonStore(
    {
        url: &quot;/Empleado&quot;,
        fields: [&quot;Apellido&quot;,&quot;Nombre&quot;,&quot;Cargo&quot;,&quot;Sueldo&quot;],
        root: 'data'
    });
 
    var grid = new Ext.grid.GridPanel({
        title: 'empleados',
        store: empleadosStore,
        height: 400,
        colModel: new Ext.grid.ColumnModel({
            columns: [{ header: 'Nombre', dataIndex: 'Nombre' },
        { header: 'Apellidos', dataIndex: 'Apellido' },
        { header: 'Cargo', dataIndex: 'Cargo' },
        { header: 'Sueldo', dataIndex: 'Sueldo', renderer: Ext.util.Format.usMoney}]
        })
    });
 
    Ext.onReady(function(){
        grid.render('empleados_grid');
        empleadosStore.load();
    });

 

Explicacion

Primero creamos un JsonStore, este es parecido a los objetos datasource asp.net, cualquier acceso a datos se tiene que hacer por medio de un objeto Store, en nuestro caso usamos un JsonStore ya que la informacion que accesamos esta en formato Json. Como parametros del constructor del JsonStore le mandamos un Hash con las propiedades que le queremos asignar. Especificamos que la URL para cargar los datos es “/Empleado”, la cual es la URL de la accion Index d emi controlador, recuerden que si la accion detecta en la peticion es AJAX regresa un arreglo JSON, el JsonStore hace todas sus peticiones por medio de AJAX. Pueden ver en firebug lo que retorna la accion:

image

En la propiedad “fields” especificamos las propiedades de mis objetos JSON, y la propiedad “root” sirve para especificar la propiedad del resultado de JSON que contiene mi lista de datos, en nuestro caso, el objeto JSON que regresamos contiene dos propiedades, una llamada  “data” que contiene mis objetos, y otra llamada “total” que contiene la cantidad de objetos regresados.

Despues de crear el store ahora creamos un objeto de tipo “GridPanel” que vamos a utilizar para cargar nuestros datos. Asi como el objeto Store, al GridPanel tambien podemos enviarle las propiedades en un hash en el constructor, las propiedades mas importantes son “store” que especificar el DataStore de donde vamos a cargar los datos y la propiedad colModel donde especificamos las columnas del grid.

Al crear nuestras columnas la propiedad “dataIndex” especifica la propiedad del objeto que queremos mostrar.

Una ves tenemos creado el grid, tenemos que especificar el id de un div a donde vamos a renderizar el grid:

    Ext.onReady(function(){
        grid.render('empleados_grid');
        empleadosStore.load();
    });

 

El metodo onReady nos sirve para definicar una funcion que se va ejecutar al temrinarse de cargar el documento.

El metodo “load” de nuestro dataStore sirve para hacer la peticion y cargar la informacion.

Resultado final

image

Por alguna razon el css que traen las aplicacion MVC distorsiona el disenio del grid, si lo quitan se van a ver bien.

{ 0 comments }

Supongo que ya les ha pasado que ni se dan cuenta y de repente su disco duro ya esta lleno, a mi me pasa seguido porque desafortunadamente soy muy desordenado, pero he encontrado una herramienta que aunque no me evita el desorden por lo menos me ayuda a ordenarlo, se llama GetFolderSize, hay otras herramientas como estas, son comunes, pero lo que destaca a esta es que es gratis.

GetFolderSize escanea todas las carpetas del disco, y archivos, y muestra cuanto ocupa cada una, en porcentaje y en bytes, y hace mas facil identificar en donde estan los archivos que mas espacio nos consumen.

image

{ 0 comments }

Marihuana digital

by ryudice on May 17, 2010

Estoy conciente que este post esta muy afuera dle contexto del blog pero me parecio un tema interesante para compartir.

IDoser es un programa que por medio de sonidos intenta simular en el cerebro el mismo tipo de estado que causa la marihuana.

El cerebro humano genera diferente tipos de ondas en ciertas frecuencias dependiendo del estado en el que se encuentra, estas ondas se conocen como brainwaves en ingles, por ejemplo, cuando estamos alerta generamos ondas beta, cuando estamos relajados generamos ondas alpha, estas ondas alpha estan asociados con la meditacion. El programa lo que hace es que usando sonidos hacer que el cerebro genere las mismas ondas que genera cuando estamos bajo efectos de la marihuana.

No solo trae marihuana, trae varias drogas, a mi la verdad no me funciono mucho pero esta tambien Neuroprogrammer, otro programa parecido el cual a mi me funciono mejor.

{ 1 comment }

Usando el nuevo tipo dynamic en C# 4.0

by ryudice on April 25, 2010

Una de las nuevas funcionalidades de la nueva version de C# 4.0 que viene con el framework 4.0 son los tipos “dinamicos” los cuales se declaran usando la palabra “dynamic”.

La palabra “dynamic” tiene una funcionalidad muy similar a la palabra “var”, que se incluyo a apartir de C# 3.0, ya que el tipo de la variable es inferido al momento de compilar el programa, la diferencia y gran ventaja de la palabra dynamic es que la resolucion de los metodos de cualquier variable declarada como dynamic se realiza en el momento de ejecucion, no en momento de compilacion. Por ejemplo:

Digamos que yo estoy tratando de llamar un metodo que no existe de mi clase string:

var persona=new Persona(); 
persona.Suicidarse(); //este metodo no existe, tira error al momento de compilar

El codigo anterior no compila. Ahora usando la palabra dynamic:

dynamic persona=new Persona(); 
persona.Suicidarse();

Esto si compila, sin embargo tira un error al momento en el que se ejecuta el codigo.

Ventajas

Para que nos puede servir la palabra dynamic? bueno pues la razon principal de su inclusion en este framework es gracias al DLR(Dynamic Language Runtime), el DLR es lo que nos permite ejecutar scripts de lenguajes interpretado en .NET como python y ruby, como ya sabran estos lenguajes son de tipado dinamico entonces para poder interactuar con objetos de estos dos lenguajes de script era necesario tener la palabra dynamic.

Aparte de esto, con la palabra dynamic nos evitamos tener que usar reflection en algunos casos. Por ejemplo, si estamos usando variable de tipo object, tenemos que usar reflection para acceder a sus metodos o propiedades, ahora solo podemos usar la palabra dynamic y llamamos a los metodos sin recibir errores al compilar porque el metodo no existe.

Aplicacion de ejemplo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
namespace Demostraciones.Dynamic
{
    class Program
    {
        static void Main(string[] args)
        {
            ParametroDinamico(new { Nombre="Roberto", Apellido="Yudice" });
            ParametroNoDinamico(new { Nombre="Roberto", Apellido="Yudice" });
        }
 
        static void ParametroDinamico(dynamic parametro)
        {
            Console.WriteLine("Ejecutando metodo dinamico");
            Console.WriteLine(parametro.Nombre);
            Console.WriteLine(parametro.Apellido);
        }
 
        static void ParametroNoDinamico(object parametro)
        {
            Console.WriteLine("Ejecutando metodo con Reflection");
            var propertyInfo = parametro.GetType().GetProperty("Nombre");
            var value = propertyInfo.GetValue(parametro,null);
            Console.WriteLine(value.ToString());
            propertyInfo = parametro.GetType().GetProperty("Apellido");
            value = propertyInfo.GetValue(parametro,null);
            Console.WriteLine(value.ToString());
        }
    }
}

 

Como podran ver me ahorro una buena parte de codigo usando la palabra dynamic.

{ 1 comment }

Get Adobe Flash playerPlugin by wpburn.com wordpress themes

PensandoEnCodigo is Digg proof thanks to caching by WP Super Cache