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.
Analisis de la herramienta Mantis Bug Tracker
Actualmente me encuentro haciendo algunas modificaciones de esta herramienta. Para los que no la conocen esta herramienta permite la comunicacion de errores entre cliente y proveedor, manteniendo una bitacora o un historial de las incidencias. Gracias a este tipo de herramientas podemos estar informados constantemente del estatus de nuestro software.
Esto se logra mediante la administracion de nuestros clientes(notificadores o informadores) y desarrolladores, en el cual nuestros clientes nos publican sus problemas de nuestro producto y nosotros administramos nuestros desarrolladores para su pronta solucion, estos ultimos publican o envian sus soluciones a nuestros clientes.
Ademas de ser de las herramientas unicas en su estilo, esta herramienta puede ser complementada con el CVS, ayudando al equipo de desarrollo en el momento de notificar sus cambios cuando se realice la accion de "commit" del CVS, con la adicion de #issue y el numero de la incidencia en la seccion de comentarios para ser asociada la incidencia correspondiente a la herramienta Mantis.
Por ultimo cabe mencionar que esta herramienta ha sido desarrolada en php y puede conectarse a distintos tipos de servidores y configurada para soportar las suscripciones de tipo RSS, ademas de tener licencia de tipo GPL(GNU General Public License) y puede ser descargada desde su sitio oficial.
Analisis de herramientas de Red-gate software
Hace tiempo lei en un post de un software que le permitia a las actuales versiones de SQL Server tener la capacidad de intelligense, por lo que me di a la tarea de probar dichos productos y me tope con una amplia gama de productos muy interesantes de la compania Red-Gate Software.
Entre los productos que me llamaron mas la atencion fue SQL Compare, el cual permite comprarar dos esquemas de bases de datos y obtener las diferencias, y aun mejor, los scripts para igualarlas, solventando asi el problema de esquemas diferentes para un software en produccion y otro de desarrollo.
Investigando sobre los tipos nulos
Hace un par de dias tuve la oportunidad de asistir a la Gira Ineta 2006, donde los expositores estuvieron a la altura del evento. Entre ellos se encontraba Guillermo Som("El Guille") quien entre algunos puntos, toco el tema de los tipos nulos.
Explico como declarar un tipo nulo en vb con la siguiente sentencia
Dim i as Nullable(of integer)
y en C#
int? i
Donde al declararla de la siguiente forma esta variable de tipo entera se ha convertido por medio de boxing a una variable de tipo nulo, esto con el afan de reducir el desajuste de impedancias entre las columnas de las tablas y las variables.
Trabajando poco con las variables de este tipo me he dado cuenta que no es posible convertir a una clase o una cadena a este tipo de variables. Leyendo un poco la documentacion del MSDN explica que solo es aplicable a variables de tipo valor y no de tipo referencia, por lo que suena logico… las variables de tipo valor contienen o almacenan el dato en si, cuando las de tipo referencia hacen referencia a hacia el valor dado.
Seguire investigando mas sobre el tema, creo que la solucion se podria encontrar en hacer referencia a un objeto nulo, o pudiese ser que pueda ser mas logica, que la variable al ser declarada se le asigne una referencia nula.