Bienvenido tutorialdecodeigniter.com

Para todos aquellas personas que programan o quieren aprender PHP ya esta online tutorialdecodeigniter.com. Este blog pertenece a mi gran compañero Ing. Diego Angelini y tiene como finalidad guiar a aquellos desarrolladores que trabajan o se inician es este framework.

tutorialdecodeigniter.com

tutorialdecodeigniter.com

En el mismo podrán encontrar información acerca de CodeIgniter, artículos sobre php y todo sobre su popular framework.

Personalmente me pone muy feliz que colegas de mi ciudad se inicien en este tipo de enprendimientos!… Kapocha muchos éxitos con el blog y sabes que estoy siempre presente para colaborar!

Anuncios

ASP.NET MVC 3: ViewBag

Siguiendo con las característiscas de ASP.NET MVC 3 hoy vamos a hablar del objeto ViewBag.

En las versiones de ASP.NET MVC 1ASP.NET MVC 2 podíamos pasar datos directamente a la vista sin necesidad de un modelo por medio del diccionario ViewData. En ASP.NET MVC 3 se mejoro este mecanismo, introduciendo el objeto dinámico ViewBag. Ambos objetos son una propiedad que ofrecen los controladores.

A la propiedad ViewBag podemos asignarles propiedades dinamicamente en el controlador y consumirlas desde la vista de una manera muy simple y prolija.

Veamos un ejemplo de cómo trabaja el ViewData y luego comparémoslo con el ViewBag. Para esto vamos a definir en el método de acción Index del controlador Home una instancia de la clase Usuario. Esta clase tendra el siguiente formato:

1: public class Usuario 
2: {
3:     public string Nombre { get ; set ; }
4:     public int Edad { get ; set ; }
5: }

A la instancia creada la vamos a asignar a una nueva entrada del diccionario ViewData llamada “Usuario”:

1: public ActionResult Index()
2: {
3:     Usuario usuario = new Usuario() { Nombre = "Sebis" , Edad = 20 };
4:     ViewData["Usuario"] = usuario;
5:
6:     return View();
7: }

Desde la vista lo consumimos de la siguiente forma:

1: <h2>Index</h2> 
3:  @{
4:     var usuario = (Usuario)ViewData["Usuario"];
5:  }@
6:
9: Bienvenido  @usuario.Nombre ! Su edad es  @usuario.Edad años.

Ahora veamos el mismo ejemplo utilizando el objeto ViewBag. Para esto vamos a crear una propiedad llamada “Usuario” y vamos a asignarle nuestra instancia de la clase Usuario:

1: public ActionResult Index()
2: {
3:     Usuario usuario = new Usuario () { Nombre = "Sebis" , Edad = 20 };
4:     ViewBag.Usuario = usuario;
5:
6:     return View();
7: }

Lo siguiente sera consumirlo desde la vista:

1: <h2> Index</h2> 
2:
3: Bienvenido  @ViewBag.Usuario.Nombre ! Su edad es  @ViewBag.Usuario.Edad años.

En ambos casos obtendremos el mismo resultado:

Ejecutando el ejemplo

Ejecutando el ejemplo

Como podemos ver el uso de ViewBag nos proporciona un  código mucho más simple y prolijo. También nos evita realizar el casting de los object proporcionados en cada una de las entradas del ViewData. Finalmente tambien podemos decir que es mucho más simple acceder a las propiedades del objeto ViewBag que estar dependiento de los magic string de cada entrada creada en el diccionario ViewData.

Espero que les sea de utilidad!

ASP.NET MVC 3: Global Action Filters

Una de las características que trae ASP.NET MVC 3 son los Global Action Filters. Los Action Filters nos permiten ejecutar lógica antes o después de ejecutar un método de acción. Si bien esta caracteristica viene en la versión de MVC 2, para la versión de MVC 3 se trabajo en filtros de acción globales para que se ejecuten en todos los métodos de acción (es decir que va a aplicar a todos los controladores de una aplicación).

Una de las ventajas de esto es que nos evita tener que estar especificando los atributos acción por acción.

Lo primero que vamos hacer es crear un Action Filter, para ello lo que debemos hacer generar una clase que herede de HandleLoggingAttribute. Para este ejemplo, nuestro filtro será responsable de ir loggenado los accesos a las distintos métodos de acción utilizando la librería Log4net:

 

1: public class HandleLoggingAttribute : ActionFilterAttribute
2: {
4:     public override void OnActionExecuted(ActionExecutedContext context)
5:     {
6:         base .OnActionExecuted(context);
8:         LogAcces(context);
9:     }
10:
11:     private void LogAcces(ActionExecutedContext context)
12:     {
13:         ILog log = LogManager .GetLogger("log4Net");
14:         log.Debug(string.Format("Accediendo: acción {0} del controlador {1}", 
15:                                 context.ActionDescriptor.ActionName,
16:                                 context.Controller.ToString()));
17:     }
18: }

 

Como vemos, nuestra intensión es loggear solamente el acceso a los métodos de acción, por lo tanto solo sobre-escribimos el método OnActionExecuted() que es el que se ejecuta antes de el método de acción.

Creado nuestro filtro, solo nos queda registrarlo, para ello dentro del archivo Global.asax en el método Application_Start() escribimos lo siguiente:

 

1:         protected void Application_Start()
2:         {
3:             AreaRegistration .RegisterAllAreas();
4:
5:             // Registramos nuestro action filter.
6:             GlobalFilters .Filters.Add(new HandleLoggingAttribute ());
7:
8:             RegisterGlobalFilters(GlobalFilters .Filters);
9:             RegisterRoutes(RouteTable .Routes);
10:             RegisterLog();
11:         }

 

Ejecutamos y vamos a ver que en nuestro archivo de log va a ir quedando el registro de los accesos a cada uno de los métodos de acción a los cuales se van a ir invocando:

Log de acceso a los métodos de acción

Log de acceso a los métodos de acción

Espero que les sirva!

Expression Blend 4 – Creando diccionario de estilos

En este post vamos a ver como podemos generar estilos personalizados de nuestros controles y agruparlos en un único lugar (una especie de Theme de nuestros controles) para nuestras aplicaciones WPF y porque no Silverlight.

Para este ejemplo vamos a trabajar con los controles de una aplicación WPF y la técnica que vamos a utilizar es la de los diccionarios de recursos que nos ofrece este tipo de aplicaciones.

El primer paso será crear una aplicación WPF y a continuación abrirla con Expression Blend, en mi caso la versión 4 (recuerden que no es necesario trabajar con EB para poder crear nuestros diccionarios de recursos, podemos hacerlo directamente en Visual Studio, pero por comodidad voy a trabajar con dicha herramienta).

Abierto el proyecto, desde la pestaña Projects hacemos click derecho en el proyecto y agregamos un nuevo item (“Add new item…“) del tipo Resource Dictionary , al cual llamaremos SkyResourceDictionary.xaml y en el cual estará contenido las definiciones de los estilos.

Creando nuestro diccionario de recursos

Creando nuestro diccionario de recursos

Vamos a definir los estilos de los controles, para esto abrimos el archivo MainWindow.xaml y agregamos un botón, seleccionamos el mismo y vamos a la siguiente opción del menú “Object/Edit Style/Create Empty…“. Se nos abrirá una ventana como la siguiente, y es aquí donde vamos a tener que hacer las configuraciones más importantes:

Creando un estilo

Creando un estilo

Detengamonos a observar un poco los campos de esta ventana:

  • Name (Key): aquí es donde especificamos si queremos que el estilo se aplique a todos los elementos de ese tipo (Apply to All), en este caso sería a todos los Button o si preferimos especificar un “nombre” y que solamente se aplique a todos aquellos objetos a los que les definamos dicho estilo. En este ejemplo elegiremos la segunda opción y llamaremos al estilo EstiloBoton.
  • Define in: en nuestro caso nos interesa que la definición del estilo esté dentro de nuestro diccionario de recursos, por lo tanto elegiremos la opción Resource dictionary y seleccionamos nuestro archivo anteriormente creado.

Aceptamos y vamos a ver que solo aparece nuestro botón, es aquí donde definimos todas las cuestiones estéticas:

Aplicando los estilos a nuestro control

Aplicando los estilos a nuestro control

Y una vez terminado pulsamos sobre el siguiente boton ubicado en la pestaña Objects and Timeline:

Finalizando la edición

Finalizando la edición

De esta forma volvemos al formulario sobre el que estábamos trabajando inicialmente. Ya tenemos definido nuestro primer estilo y agregado a nuestro diccionario de recursos! (ahora podemos ir haciendo lo mismo para los demás controles).

Para aplicar estilos sobre nuevos controles simplemente hacemos click derecho sobre el control y vamos a la opción “Edit Template/Apply Resource/” y elegimos el estilo que deseamos aplicarle, en nuestro caso si lo hariamos sobre un control Button elegiríamos EstiloBoton.

Para saber que grupo de estilos esta asociado a nuestra aplicación, podemos ir a la pestaña Properties y expandir el archivo App.xaml (que contiene las definiciones de configuración de nuestra aplicación), en el mismo podemos observar, en el caso de que exista, el diccionario de recursos asociado mirando la referencia Linked To.

Archivos de recursos asociado a la aplicación

Archivos de recursos asociado a la aplicación

Espero que les sea de utilidad!

Code4Blog, extensión de Visual Studio para bloggers

Hace unos días mi gran compañero@maxilovera me comento sobre una extensión de Visual Studio 2010 que le puede ser muy útil a las personas que escriben blogs. La extensión en cuestión es Code4Blog, y básicamente lo que nos permite es generar HTML del código que escribimos.

Para decargar e instalar la extensión hacemos click en el menú “Tools\Extension Manager…” y dentro de la ventana que se nos abre buscamos esta extensión y la instalamos:

Instalando Code4Blog

Instalando Code4Blog

Otra forma de instalar es descargarla desde el sitio oficial del proyecto en Codeplex.

Para usarla, seleccionamos la parte del código que nos interesa, damos click derecho y ejecutamos la siguiente opción del menú: “Tools/Save Code as HTML“. Esto hará que se nos abra una nueva pestaña (generalmente llamada Code4blog.htm) con el HTML generado a partir del código seleccionado. Finalmente copiamos y pegamos en nuestro blog!

Le dejo un ejemplo:

1: namespace  ConsoleApplication1
2: {
3:     class  Program 
4:     {
5:         static  void  Main(string [] args)
6:         {
7:             Console .WriteLine("Hola mundo!" );
8:         }
9:     }
10: }

Para personalizar el HTML generado podemos ir a “Tools/Options” y buscar la pestaña correspondiente a Code4Blog en donde vamos a poder setear distintas configuraciones como por ejemplo ancho y larga del contenedor de código, tamaño y fuente del texto, si queremos visualizar el borde o número de línea entre otras configuraciones.

Aclaro que para versiones de VS 2010 que no estén en ingles he tenido problemas para utilizar esta extensión.

Espero que les sea de utilidad!

Introducción a F#

A mediados de 2010 año tuve la suerte de participar de una charla organizada por Gustavo Villavicencio sobre programación funcional, tema realmente interesante y del que no conocía demasiado. En esa ocasión vimos una introducción al tema y en la práctica trabajamos con el lenguaje Haskell.

Todo esto me despertó el interés por F#, lenguaje de .NET que si bien no es totalmente funcional, tiene algunas características del mismo (este es basicamente una implementación del lenguaje OCaml, influido por Haskell y por supuesto por C#).

Antes de comenzar con algo de práctica, les dejo la definición de Wikipedia:

F# (pronunciado F Sharp) es un lenguaje de programación multiparadigma, para la plataforma .NET, que conjunta la programación funcional con las disciplinas imperativaorientada a objetos.

Una de las características importantes es que es un lenguaje de programación multiparadigma, es decir que no es un lenguaje funcional puro, por lo que aquellos amantes de la programación funcional abstenerse de las críticas al ver los ejemplos a continuación :).

Otra característica es que continuamente utiliza la inferencia de tipos, es decir, que por ejemplo no necesitamos definir el tipo de dato de los parámetros de una función ni su valor de retorno. Sin embargo, aunque no tengamos que definir los tipos y por momentos pareciese un lenguaje dinámico, es un lenguaje fuertemente tipado.

Basta de teoría, vamos a la práctica. Algo bastante práctico que nos ofrece VS 2010 es trabajar con un archivo de script (sobre todo para hacer pruebas). Para eso dentro del menú vamos a “Archivo/Nuevo Archivo” y elegimos la opción Archivo de Script de F#.

Creando archivo de script

Creando archivo de script

Una vez creado el archivo, vamos a ver que nos van a aparecer dos pestañas, una donde vamos a escribir nuestras líneas de código (es decir nuestro script que en mi caso lo llame EjemploFSharp.fsx) y la otra pestaña llamada F#Interactive que nos permite ejecutar desde la línea de comando (esto gracias a un intérprete que corre por debajo y nos permite ir ejecutando diferentes porciones de código).

Pestañas con las cuales vamos a trabajar

Pestañas con las cuales vamos a trabajar

A comenzar a escribir líneas!… para definir “cosas” se utiliza la palabra reservada let, por ejemplo vamos a definir una función matemática para el cálculo del cuadrado:

let cuadrado x = x * x

Sencillo, no?… para poder trabajar por medio del intérprete, seleccionamos la función que escribimos y pulsamos ALT+Enter, en la consola vamos a ver lo siguiente:

val cuadrado : int -> int

Lo primero que podemos ver es como infirió el tipo de datos (tanto el parámetro de la función, como el valor que retorna, ambos integer) sin necesidad de especificarlo. Para ejecutar nuestra función escribimos el nombre de la misma, el parámetro, dos punto y coma al final y y presionamos ENTER:

> cuadrado 3;;
val it : int = 9

Veremos debajo el resultado obtenido y el tipo de dato del mismo, en nuestro caso, el número entero 9.

Otra forma de definir una función es asignándole un nombre y luego declararla utilizando una expresión lambda, por ejemplo vamos a crear la función suma:

let suma = fun x y -> x + y

En este caso estamos enlazando el identificador suma a la expresión lambda fun x y -> x + y . La función recibe dos parámetros, x e y y retorna la suma de los mismo. Si evaluamos nuestra función obtenemos lo siguiente:

val suma : int -> int -> int

Ejecutamos  y obtenemos como resultado un entero con el valor de la suma:

> suma 2 3;;
val it : int = 5

Otra de las cuestiones a tener en cuenta es los siguiente, supongamos por ejemplo que definimos una lista con los elementos del 1 al 10:

let lista = [1..10]

Esta lista es inmutable, es decir que no se le puede modificar el valor. No debemos confundirlo con una variable (que de paso no son bien vistas en programación funcional), sino que es un símbolo. Si queremos definir una variable debemos utilizar la palabra mutable, por ejemplo:

let mutable cadena = "Ya llega el 2011"

Si evaluamos su contenido nuevamente podemos ver como infiere el tipo de la variable como string:

val mutable cadena : string = "Ya llega el 2011"

Bien, una cosa muy interesante, es que podemos pasar como atributos de una función otra función, por ejemplo:

let aplicarFuncion = fun fn valor -> fn valor

El este caso vamos a aplicar la función cuadrado a el valor 3:

> aplicarFuncion cuadrado 3;;
val it : int = 9

Otra cosa que podemos hacer es retornar una función como resultado, por ejemplo:

let existeItem item =
    let functionARetornar = fun lst ->
                            List.exists (fun a -> a = item) lst

    functionARetornar

Invocamos a nuestra función y luego volvemos a invocar la función resultado:

let a = existeItem 5;;
val a : (int list -> bool)

> a [1..10];;
val it : bool = true

Por último vamos a ver un ejemplo de como trabajar con listas. En nuestro caso vamos a definir un función que sume los cuadrados de cada uno de los elementos de la lista:

let sumaCuadrados lista =  lista                          
                           |> Seq.map cuadrado                          
                           |> Seq.sum

Simple, no?!… como podemos ver por cada items aplicamos la función cuadro y finalmente sumamos el resultado de esta nueva lista. El operador |> lo que hace es tomar cada elemento de la lista y aplicarle la función que definamos a la derecha. En este caso aplica la función cuandrado y al resultado de aplicar esto se le suma todos los elementos.

Ejecutamos y vemos el resultado obtenido:

> sumaCuadrados [1..5];;
val it : int = 55

Bueno, espero que les sea útil y en los próximos posts vamos a seguir viendo otras características de F#.