jueves, 24 de julio de 2008

Primer encuentro de Desarrolladores .NET de Jujuy: Confirmado

El día 22 de agosto en el auditorio de la UCSE - DASS (Lavalle 333 - San Salvador de Jujuy) de 17 a 21 hs. realizaremos el Primer Encuentro de Desarrolladores .NET de Jujuy.
Este es un encuentro gratuito organizado en conjunto por las Células Académicas Jujuy ASP NET y THE ASP-BERRIES.
Los temas a tratar y los oradores son:


  • Diego Ortega (Líder THE ASP-BERRIES) y Octavio Daniel Coro (Profesor THE ASP-BERRIES) - AJAX: Fundamentos teóricos e introducción. La necesidad de incorporar la tecnología al desarrollo de Páginas Web para una mejor interacción con el usuario. Herramientas disponibles para ASP.NET. Ejemplos prácticos. Modalidad: PPT + demo. 45 min.

  • Guillermo Bellmann (Líder Jujuy ASP NET) - LINQ: Evolución del acceso a datos. Integración en el lenguaje. Simplificando y unificando el acceso a cualquier tipo de datos. Modalidad: PPT + demo. 45 min.

  • Federico Medrano (Vicelíder Jujuy ASP NET) y Lucas Bolívar (Miembro Jujuy ASP NET) - ASP.NET MVC: Implementación del patrón de diseño para ASP.NET. Descripción y esquema de funcionamiento. Ventajas aportadas. Integrando el framework MVC al desarrollo en Visual Studio 2008. Modalidad: PPT + demo. 45 min.

  • Antonio Jarma (Vicelíder THE ASP-BERRIES) - Reflection: Fundamentos teóricos e importancia. Potencialidad de Reflection en el desarrolo de aplicaciones. Aplicación del mismo en la plataforma .NET. Ejemplos prácticos y desarrollo de herramientas. Modalidad: PPT + demo. 45 min.

  • Elvio Velázquez (Miembro THE ASP-BERRIES) - Interfaces personalizadas con Web Parts, conceptos desarrollo y configuración, comunicacion y persistencia. Ejemplos Prácticos. Modalidad: PPT + demo. 45 min.



Todos los que quieran participar están invitados, el link para inscribirse es el siguiente:
http://msevents.microsoft.com/CUI/InviteOnly.aspx?EventID=96-91-12-BF-BE-0F-70-14-A4-86-D0-5C-78-39-28-90&Culture=es-AR
Va a haber regalos y sorteos.
Los esperamos!!

jueves, 17 de julio de 2008

Primer encuentro de Desarrolladores .NET de Jujuy

El día 22 de agosto vamos a realizar un pequeño encuentro junto con los chicos de THE ASP-BERRIES.
Los temas que vamos a tratar son: AJAX, LINQ, Reflection, WebParts y ASP.NET MVC.
Al detalle de las charlas y el link para inscribirse los publico en breve.
Los esperamos!

Ya somos célula activa!

Hola a todos.
El martes 15 de julio me comunicaron que ya estamos en estado de Célula Activa!!
Felicidades a todos los miembros del equipo por el laburo que se viene haciendo.
Espero que se siga con estas ganas!

domingo, 6 de julio de 2008

Hojas de Estilo Dinámicas

Veamos un ejemplo de cómo el usuario final puede cambiar la hoja de estilo en tiempo de ejecución.

La idea es que la persona que está navegando en nuestro sitio pueda cambiar la presentación, al menos algunos aspectos de ella: colores o tamaño de letras (se puede hacer más pero este ejemplo solo muestra esa parte).

Esta es la página que tiene tres áreas o contenedores donde pondremos lo que deseamos motrar.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CSSStyleChangeDemo._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>CSS Style Sheet Change Demo</title>
<link id="cssLink" runat="server" href="Stylesheet1.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div style="float:right">
Estilos Disponibles
&nbsp;
<asp:DropDownList ID="ddlStyles" runat="server" AutoPostBack="True"
onselectedindexchanged="ddlStyles_SelectedIndexChanged">
<asp:ListItem Value="Stylesheet1.css">Verde y Azul</asp:ListItem>
<asp:ListItem Value="Stylesheet2.css">Suave</asp:ListItem>
</asp:DropDownList>
</div>
<div>
<div class="arriba">
Esto esta en el contenedor cuya clase es arriba
</div>
<div class="izquierda">
Esto esta en el contenedor cuya clase es izquierda
</div>
<div class="derecha">
Esto esta en el contenedor cuya clase es derecha
</div>
</div>
</form>
</body>
</html>


Observen que hay un drop down list, en el que se cuenta con dos entradas para poder selecciónar las hojas de estilo.

Es importante destacar que al link para referenciar la hoja de estilo le pusimos un id y le decimos que se ejecuta en el lado del servidor. Esto se conoce como convertir un control HTML en un control HTML de lado del servidor, nos permite manipular las propiedades del control cuando se procesa la página.

Bién ahora veamos el código asociado a la página:


using System;

namespace CSSStyleChangeDemo
{
public partial class _Default : System.Web.UI.Page
{
/// <summary>
/// Se dispara antes de renderizar la página
/// </summary>
/// <param name="sender">Objeto que ejecuta el evento</param>
/// <param name="e">Argumentos del evento</param>
protected void Page_Prerender(object sender, EventArgs e)
{
if (Session["CSSStyle"] == null)
{
Session["CSSStyle"] = cssLink.Href;
}
else
{
cssLink.Href = (string) Session["CSSStyle"];
}
}

/// <summary>
/// Se dispara cuando se carga la página
/// </summary>
/// <param name="sender">Objeto que ejecuta el evento</param>
/// <param name="e">Argumentos del evento</param>
protected void Page_Load(object sender, EventArgs e)
{

}

/// <summary>
/// Se dispara cuando se cambia la selección en el drop down list
/// </summary>
/// <param name="sender">Objeto que ejecuta el evento</param>
/// <param name="e">Argumentos del evento</param>
protected void ddlStyles_SelectedIndexChanged(object sender, EventArgs e)
{
if (ddlStyles.SelectedIndex != -1)
{
string cssFile = ddlStyles.SelectedValue;
Session["CSSStyle"] = cssFile;
}
}
}
}
En este caso es necesario atrapar el evento Prerender de la página, es en ese momento en el que se debe ajustar los valores de hojas de estilo (incluso master page).

Tengan en cuenta que utilizamos una variable de "session" para guardar el nombre de la hoja de estilo que está vigente. En realidad esto tendría que estar en algún lugar por cada persona que visita el sitio, de esa forma "recordaríamos" como lo quiere ver cada visitante, eso se puede hacer con una Cookie, pero es tema de otra publicación.

Bueno, los estilos son los siguientes:

Stylesheet1.css

body
{
}
.arriba {
left: 0px;
width: 100%;
height: 80px;
font-size: 14px;
text-align: center;
background: Green;
}
.izquierda {
float: left;
left: 0;
width: 30%;
min-height: 500px;
font-size: 10px;
background: Blue;
color: White;
}
.derecha {
float: right;
width: 68%;
min-height: 500px;
font-size: 12px;
background: White;
border-left-style: double;
border-left: 2px;
}

Stylesheet2.css

body
{
}
.arriba {
left: 0px;
width: 100%;
height: 80px;
font-size: 14px;
text-align: center;
background: Gray;
}
.izquierda {
float: left;
left: 0;
width: 30%;
min-height: 500px;
font-size: 10px;
background: Silver;
color: White;
}
.derecha {
float: right;
width: 68%;
min-height: 500px;
font-size: 12px;
background: Silver;
border-left-style: solid;
border-left: 2px;
}

Bueno espero que les sirva, al menos pueden comenzar con estas pocas líneas y armar un sitio totalmente configurable por el visitante.

Nota: estoy utilizando el Source Code Formatter que hicieron Guille y Fede (ta espectacular !!!)

miércoles, 2 de julio de 2008

Definiciones para el Proyecto

Después de pensar, discutir y jugar con el prototipo del proyecto ya tenemos algunas definiciones.



Definiciones


No perdemos de vista los objetivos Aprender, Practicar y Comunicar. En base a ello definimos que este motor de blog no es para competir con los ya existentes, en consecuencia las caracteríscitas básicas que esperamos del proyecto son las siguientes:


  1. Presentación configurable o parametrizable. Con esto lo que pretendemos es que el administrador (dueño) del blog pueda configurar la presentación del mismo, para una segunda etapa estamos pensando en permitir que los lectores del blog puedan organizar ciertos componentes que el dueño pone a su disposición. Para realizar esto vamos a utilizar hojas de estilo, skins, themes, master pages y webparts.

  2. Satisfacción del usuario final. Esta definición impone la utilización de la última tecnología disponible con lo que nos referimos a AJAX y Silverlight. De hecho las herramientas (lenguajes de desarrollo) son diferentes, sin embargo existe un grado de compatibilidad en la arquitectura que se utiliza; en la medida que se pueda incorporaremos ambas tecnologías.

  3. Persistencia en un motor de base de datos. Obviamente uno de Microsoft, en relación con esta definición, pretendemos utilizar LINQ. También se está manejando la idea de contar con diferentes proveedores de datos, de ese modo podremos organizar la persistencia de diferentes maneras.

  4. Redes sociales. Con esto apuntamos a la web semántica y toda la interacción entre aplicaciones que existe actualmente; con esta definición nos vamos a meter en WebServices tanto para proveerlos como para consumirlos.




Especificaciones Generales de Desarrollo


Obviamente el motor de un blog se ejecuta en un servidor web, en consecuencia los diferentes componentes deben probarse en esas condiciones; esto implica que los desarrolladores deben instalar Internet Information Server - IIS, mejor si podemos probarlo en diferentes versiones; habilitar un directorio virtual apuntando al directorio donde se encuentra el sitio (local) donde ejecutamos la aplicación. Más adelante veremos la manera de contar con un lugar en algun servidor de la Web.


Respetar las capas de desarrollo, se debe lograr que sean diferentes capas las que realicen o logren los objetivos del desarrollo. La cantidad de capas por lo menos deben ser tres: Presentacion (View), Lógica (Control) y Model (Modelo de Datos). Pueden haber más capas, por ejemplo el modelo de datos puede implementar una capa de clases de negocio, la que utiliza otra capa de acceso a datos la que a su vez puede utilizar otras de acuerdo al tipo de persistencia que realice. El esquema de codificación que nos facilita ASP NET ya ofrece dos niveles el de la página o control de la web y el de código asociado, sin embargo se debe estar atentos a las posibilidades de encapsular propiedades y comportamiento común ya sea en controles de usuario y/o clase utilitarias.


La presentación se debe lograr siempre por medio de estilos o skins, lo que nos permitirá camnbiarlos sin tener que alterar el resto de las capas. Del mismo modo la lógica de control no debe interferir con los mecanismos de persistencia ni con las condiciones de presentación.


Si hace falta se crean tantos proyectos como sean necesarios, algunos serán para testear aspectos del desarrollo o para aprender algún concepto, otros serán componentes o módulos de la aplicación.


La codificación debe ser documentada, es obligatorio utilizar el documentador en línea que nos facilita el Visual Studio, es muy facil darle a las tres barras (///) en la línea anterior de cada método o propiedad e incorporar los comentarios correspondientes. La compilación se realizara en el mayor nivel de control, de manera que luego se puede revisar que falta.


El seguimiento del código se hace de a poco, no es bueno esconderse durante tres semanas escribiendo código y luego subirlo al servidor de versiones arruinando lo que hicieron todos los demás. La modalidad de trabajo es concentrarse en una o dos partes concretas, codificar y compilar hasta que no de errores y subir al servidior de manera que se genere un "code set" controlable; de este modo el resto de los desarrolladores pueden actualizar lo que están haciendo con esa pequeña porción y además controlar que no interfiera con su parte de trabajo.


Para minimizar los conflictos de versionado se debe aclarár quiénes trabajan con que aspectos del desarrollo, a veces es inevitable trabajar sobre una misma clases, implementando diferentes comportamientos de manera que en realidad no hay conflicto; para evitar esta situación es importante mantener las porciones de código donde están, no es bueno reorganizar el codigo porque nos gusta que los metodos estén despues de las propiedades o al reves; si esta situación se realiza es porque hace falta hacerlo corrigiendo alguna situación caso contrario no se hace.


Siempre es bueno hacer una copia de seguridad de lo que tenemos en nuestro equipo antes de bajarse (update) el último conjunto de código. Por supuesto antes de subir (commit) se debe hacer un update para estar seguros que lo que vamos a subir se hace sobre el último conjunto de cambios, de otro modo el conflito se puede producir en el servidor y será un laborioso resolverlo. Hacerlo en nuestro equipo es mucho más facil dado que podemos tomar deciciones cuando el programa de versionado no sabe que hacer.



Filosofía de Desarrollo


Desde el punto de vista del desarrollo de software, la simplicidad no es lo contrario de la complejidad.

Las porciones de código simples son faciles de entender, mantener, extender y reutilizar; y entre todas completan una aplicación compleja, en consecuencia para realizar este proyecto que es del tipo EEP - Eaten an Elephant by Parts, vamos a utilizar la filosofía KISS - Keep It Simple and Stupid.