Propiedades extendidas

Me resulta muy interesante esta funcionalidad de SQL Server, donde como su nombre lo dice se pueden agregar propiedades a los objetos de la base de datos. Estas propiedades son administradas mediante un asistente o bien mediante procedimientos almacenados con los cuales se pueden agregar(sp_addextendedproperty),  eliminar(sp_dropextendedproperty) y/o actualizar(sp_updateextendedproperty) una propiedad extendida.

Para obtener la informacion de la propiedad basta con ejecutar una funcion(fn_listextendedpropert).  Creo que vale la pena ver mas a detalle esta caracteristica tan poco conocida y ver las posibles soluciones que nos pueda ofrecer, ya sea como descripcion de las columnas, o bien como gestor de errores para violacion de claves, o datos adicionales a la creacion de la tabla, en fin la idea es agregar o extender algun dato para un objeto.

Dibujar sobre un formulario web

Cuando recien me titule, intentando buscar algun empleo me tope con una empresa donde solicitaban desarrolladores que supieran realizar graficas sobre un formulario web.  Espero que con este post alguien tenga las nociones basicas y pueda enfrentar ese tipo de requerimientos.

Manos a la obra, en realidad el proceso es algo sencillo pues consiste en serializar el objeto en el formulario, para eso son necesarios varios requisitos.

1. Indicar que todo el contenido de formulario sera de tipo imagen

Response.ContentType = «image/jpeg»;

2. Tener un objeto de tipo System.Drawing.Bitmap, sobre el cual poder dibujar.

Bitmap imagen = new Bitmap(ancho, alto);

3. Se obtendra una referencia de tipo System.Drawing.Graphics con el metodo FromImage pasando como argumento  el objeto Bitmap creado con anterioridad. Con esta referencia obtenida se pueden explotar una serie de metodos para dibujar un sin fin de formas, ya solo es cuestion de usar la imaginacion y algunas tecnicas de ilusion optica.

Graphics grafico = Graphics.FromImage(imagen);

4. Por ultimo y la parte mas importante es el serializar el objeto Bitmap en el formulario de la pagina, esto lo realizaremos con el metodo Save del objeto, utilizando como stream del formulario e indicando el tipo de formato al cual sera serializado.

imagen.Save(this.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

Espero que con estos pasos basicos puedan servirles para realizar imagenes dinamicamente para sus aplicaciones, recordemos que esta no es la unica solucion para graficar en una pagina web, y el escoger esta tecnica depende tanto del presupuesto como de los requerimientos del cliente.

Clases expuestas por un servicio web

Basicamente la problematica que tuve fue al momento de tratar de exponer algunas clases que tenia declaradas en una libreria biblioteca, el problema se presentaba cuando el nivel de anidamiento de las clases era, si mas no lo recuerdo, mayor a dos niveles, complicando el trabajo para el XmlSerializer, y dificultando el consumo del cliente. Para solucionar este problema solo basto con agregar al metodo del sevicio web el atributo de XmlInclude, esto simplifica el trabajo para XmlSerializer al momento de crear el wsdl por parte del cliente que lo comsume. Asi que como recomendación sugiero que si en su framework se expondran clases por medio de un servicio web y quieren conservar la seguridad de su codigo, apliquen este atributo.

Primeros pasos con WPF

He comenzado a ver los cursos que Microsoft «regala» acerca del .Net Framework 3.0 y aunque mi ingles no es tan basto como quisiera, he comprendido en parte el tema. En este post utilize el codigo de ejemplo del sitio para compartir el poder que actualmente tiene XML y lo que puede lograrse con unas cuantas lineas de codigo, porque en realidad no se usa mas que XAML , RSS y XPath para lograr algo sorprendente.

<StackPanel xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’>
<StackPanel.Resources>
<XmlDataProvider x:Key=»Electrocucarcha» Source=»http://electrocucaracha.wordpress.com/feed/» />

<DataTemplate x:Key=»Articulo»>
<TextBlock Text=»{Binding XPath=title}»/>
</DataTemplate>
</StackPanel.Resources>

<Label FontSize=»24″ FontWeight=»Bold» Content=»{Binding Source={StaticResource Electrocucarcha}, XPath=/rss/channel/title}»/>
<Label FontSize=»18″ FontStyle=»Italic» Content=»{Binding Source={StaticResource Electrocucarcha}, XPath=/rss/channel/description}»/>
<DockPanel DataContext=»{Binding Source={StaticResource Electrocucarcha}, XPath=/rss/channel/item}» Height=»500″>
<ListBox IsSynchronizedWithCurrentItem=»True» ItemTemplate=»{StaticResource Articulo}» ItemsSource=»{Binding}» DockPanel.Dock=»Left» Width=»300″/>
<Frame Source=»{Binding XPath=link}» DockPanel.Dock=»Right» />
</DockPanel>
</StackPanel>

Analizando Windows Presentation Foundation

Bueno, hace un rato que no he hecho algun post, pero he estado algo ocupado. En cuanto a mis pocos tiempos libres que he tenido, he estado investigando un poco de la nueva tecnologia que nos presenta Microsoft en su framework 3.0, y aunque no me parece que el numero sea de lo mas acertado, es tema de discusion pero no queda mas remedio que aceptarlo.

En cuanto a WPF trae buenos deseos para este año que comienza, mencionare brevemente algunas de las caracteristicas que en mi experiencia pueden ser beneficas.

1. Diseño previo de interfaces:

Esto ayuda en lo absoluto a la persona que elabora los requerimientos hacia el cliente(SRS) en cuanto a que el diseñador puede elaborar rapidamente un bosquejo de los nuevos requerimientos de la aplicacion sin la necesidad de abrir Visual Studio. Aun no entiendo porque los analisitas o diseñadores crean diseños solo para mostrar pantallazos en el documento de diseño, pero lo importante aqui es convencer al cliente con algo tangible del trabajo que se elaborara.

2. Estandarizacion de tamaño y forma de los controles:

En ocaciones se desea mantenter un estandar de los controles en toda la aplicacion o aplicaciones, en ocaciones resulta mas que hecho un sueño guajiro de los que nos gusta mantener las cosas en orden, y creamos documentacion para que el equipo de trabajo mantenga este orden y cuando no se tiene una persona encargada del diseño de las interfaces de usuario, se crean aplicaciones que no ayudan en lo absoluto a la experiencia del usuario. Con WPF es muy facil lograr esta estandarizacion debido a que permite el declarar estilos a nivel aplicacion que podran ser modificados localmente en las excepciones necesarias. Quisiera hacer la analogia con Machine.config y Web.config.

3.Aplicaciones Windows diseñadas en capas:

Creo que ahora vemos algo mas claro de un diseño en capas agilizado el proceso de desarrollo, el fin de Microsoft es separar y unir, separar en cuanto a que los diseñadores y los programadores a lo suyo, cada quien haga lo que les corresponde, y unir me refiero a que el trabajo que cada quien realiza sea el mismo, que no sea necesario hacer modificaciones o retrabajo.

4.Una experiencia de usuario mas amena:

Supongo que con la facilidad que inplicara el desarrollar las interfaces el usuario se acostumbrara a ver aplicaciones con grandes diseños y sera mucho mas exigente por lo que sera necesario ponerse las pilas y dominar pronto esta tecnologia, cada vez los usuarios son mucho mas exigentes y si la competencia pudo hacer la aplicacion de tal forma te lo pediran.

Habra muchos beneficios en esta tecnologia por lo que vale la pena investigar un poco mas acerca de ella. No se si alguien pueda contestar mi duda pero tengo curiosidad por conocer la contraparte de java, en cuanto a que tecnologia aplican o aplicaran para contrarestar este avance de .NET.

En cuanto a informacion Microsoft provee cursos gratis durante un año acerca de el framework 3.o, los invito a que les den una revisada

Introduciendome al mundo de .Net Remoting

Para mi suena novedoso el tema, y muy apasionante.  Basicamente se puede considerar el hecho de crear instacias de clases en un servidor para centralizar procesos y estados de los objetos para centralizar a un grupo de clientes. Estas clases son publicadas en un servidor.  Hablando de terminos de seguridad, puede ser controlados de dos formas, una en cuanto a la configuracion del servidor y otra mediante la propia clase.

En cuanto a protocolos de trasferencia existe la posibilidad de realizarlo mediante tcp y http, y pueden ser serializados mediante xml o cualquier formato binario.  Igual que de manera local los objetos pueden ser pasados por referencia o un proxy, o por valor y ser cargados por parte del cliente.

Habra que dedicar mas tiempo en conocer y analizar las posibidades del uso de esta rama,
y sobretodo los escenarios en los que pueden ser aplicables.  En lo personal considero emocionante y revolucionario este tema.

Problemas con el Windows Genuine Advantage

Hace un par de meses me fui victima de las actualizaciones de Microsoft, debido a que inocentemente instale esta tan controversial actualizacion, provocandome molestosos avisos en mi maquina recorandome de algo nada novedoso para mi.

Mi problema en su momento fue solucionado por la reinstalacion del sistema operativo, hasta hace un par de semanas que sin mi autorizacion fueron descargadas las actualizaciones pertinentes al mes de Agosto, y entre estas nuevamente aparecio mi problema: «Windows Genuine Advantage».

Pero esta vez no me di por vencido y busque soluciones para tan grave problema, encontrandome en un principio con varios foros donde la solucion encontrada era sustituir «LegitCheckControl.dll» del System32 por alguno de alguna maquina que tuviera licencia, cosa que en mi caso no fue la solucion. Mas tarde y buscando en otro puñado de foros me entrontre que la posible solucion seria con «WGAKILL_12-08-06.rar» via torrent, gracias al Opera que tiene incorporado soporte para descargas via torrent, logre bajarlo y al parecer soluciona el problema de los incomodos mensajes, esperemos que no tenga repercuciones.

Usando la sentencia «using» dentro de un bloque de codigo

A lo mejor esto puede ser muy comun para los que ya llevan rato programando en C#, y el uso de esta sentencia ya sea bastante familiar; pero en mi caso siempre me causo mucho interes y algo de dificultad para encontrar su uso dentro de una sentencia.

Al estar leyendo un libro muy bueno del Dr. Ian Marteens, "La Cara Oculta de C# donde explica el uso y la equivalencia de la sentencia.

Cuando tenemos un caso como el siguiente:

<Clase que contenga metodo Dispose()> NombreInstancia = new <Clase>

try{

//realizar acciones

}

finally{

NombreInstancia.Dispose();

}

Podremos sustituirla por la siguiente instruccion:

using(<Clase que contenga metodo Dispose()> NombreInstancia = new <Clase>){

//realizar acciones

}

La unica restriccion de esta sentencia es que la clase instanciada implemente la interfaz IDisposable. En mi opinion es una alternativa muy valida para reducir un par de lineas, considerando que el ciclo de vida de la instancia sera muy corto y conociendo de antemano lo que implica.

Proyecto de personalizacion de controles(analisis)

Comenzare explicando el objetivo de crear controles personalizados y como le fue dando forma a este proyecto de personalizar controles. 

Todo comienza con el tema de la seguridad informatica, tomare la analogia del cerrojo de cualquier puerta;  si este cerrojo puede ser abierto con mas de un tipo de llave diferente quiere decir que no es seguro; esta misma seguridad puede aplicarse a las aplicaciones, si por cualquier entrada de datos puede aceptar mas de un tipo de dato quiere decir que no es seguro o es suceptible a ataques.  Y para hacer mas segura nuestra aplicacion debemos restringuir, discriminar o limitar los datos a ingresar, de tal forma que las vulnerabilidades solo queden a al descubierto de un pequeño grupo de expertos, no es una solucion conformista pero por el momento es la mas adecuada.

Partiremos de un control que nos permita ingresar solo datos de tipo numerico. Para crear este control es necesario heredar de otro control mas generico y donde esta clase hija sera la discriminadora de caracteres.  Para hacer mas versatil esta clase hija agregaremos una propiedad que nos permita definir el uso de un punto para el uso de enteros o decimales, al agregar esta propiedad veremos la necesidad de crear un atributo para el diseñador de formularios para determinar el orden en que seran serializados o deserealizados los componentes.