lunes, 15 de octubre de 2007

XML en SQL Server 2005: Métodos del tipo XML

El tipo de datos XML de SQL Server 2005 posee un conjunto de métodos que son utilizados para las operaciones de búsqueda y actualización de contenido XML.
Los métodos del tipo de dato XML son:

  • query(): Ejecuta una expresión XPath o Xquery y retorna el XML resultante

  • value(): Ejecuta una expresión XPath o Xquery y retorna el valor de un único resultado. Este valor puede ser transformado a otro tipo de datos.

  • exist(): Ejecuta una expresión XPath o Xquery y retorna si el resultado es distito de vacio (true) o no (false).

  • modify(): Permite modificar un documento o fragmento XML.

  • nodes(): Ejecuta una expresión XPath o Xquery y retorna el XML resultante.

lunes, 8 de octubre de 2007

Operadores C#: as e is

Hace un tiempo me encontre en muchos trozos de codigo con expresiones en c# que contenian el operador as, operador que no conocia y por ende me vi en la obligacion de investigar su proposito.
Para poder explicar el operador as es recomendable primero conocer el operador is. Este es un operador binario que retorna un booleano y se utiliza de la siguiente manera:

bool retorno = objeto is Clase_X

Si el objeto no tiene el valor null y además es posible obtener este objeto como una instancia de la Clase_X (mediante polimorfismo) sin producirse una Excepcion, entonces el valor devuelto es true, en cualquier otro caso el retorno sera false.
Conociendo este operador se puede comprender de manera simple el operador as.
La forma de utilizar el operador as es la siguiente:

Clase_X MiClase = objeto as Clase_X;

Esta expresion es equivalente a lo siguiente:

Clase_X Miclase;
if( objeto is Clase_X ){
Miclase = (Clase_X)objeto;
} else {
MiClase = null;
}

Se entiende?, la idea principal es tener un operador que realiza cast, pero en caso de no ser posible el cast requerido devuelva el valor null y no lance una CastException como lo haria una expresion como la siguiente.

Clase_X Miclase = (Clase_X)objeto;

Espero sea de utilidad a más de alguien.

viernes, 5 de octubre de 2007

XML en SQL Server 2005: Tipo de Dato XML

SQL Server 2005 posee un nuevo tipo de datos que permite representar un documento XML. Con este tipo de datos se puede utilizar para definir el tipo de dato almacenado en una columna de una tabla, para definir el tipo de una variable declarada, para definir parámetros de procedimientos almacenados, entre otras cosas.

El tipo de datos XML permite almacenar tanto documentos como fragmentos XML.

Algunos de los beneficios de utilizar el tipo de datos XML son:

  • Está completamente integrado al motor de SQL Server 2005.

  • Los datos contenidos en este tipo son manipulados nativamente como XML en el motor de datos.

  • Ofrece soporte para operaciones de selección, inserción, modificación y eliminación a nivel de nodos.

  • Permite mejorar el rendimiento de las operaciones indexando los campos XML de una tabla

  • Se preserva por completo el orden y la estructura del documento


Este tipo de almacenamiento presenta algunas desventajas con respecto al almacenamiento como texto de documentos XML. Algunas de ellas son:

  • Se pierden comentarios, espacios y tabulaciones en el contenido del documento

  • La jerarquía contenida está limitada a 128 niveles

  • El contenido total del tipo XML no puede superar los 2GB de tamaño

jueves, 4 de octubre de 2007

Almacenamiento Aislado en .NET

Esta clase permite definir la creación y utilización de archivos y directorios en entornos aislados.
Los entornos aislados son útiles cuando se necesita acceder a datos contenidos en archivos (por ejemplo configuraciones) y se quiere evitar que el assembly pueda ser explotado con fines maleficos (por ejemplo, acceder a otros recursos dentro del sistema de archivos).

Antes de utilizar almacenamiento aislado es necesario definir el alcance de dicho almacenamiento, es decir, quien y desde donde podrá acceder a los datos ahí almacenados. Los métodos de almacenamiento son:

Assembly/Machine: Corresponde a información del Assembly a nivel de máquina, por ejemplo, archivos de configuración que tendrá una aplicación comúnes para todos los usuarios de una máquina.
Asssembly/User: Datos del assembly a nivel de usuario, sólo cuando el usuario en cuestión ejecute el assembly dado se podrá acceder a los datos almacenados.
Domain/Machine: Similar a Assembly/Machine, pero a nivel de dominio de apicación (AppDomain).
Domain/User: Similar a Assembly/User, pero a nivel de dominio de apicación (AppDomain).

A continuación ejemplos de como crear almacenamientos aislados.

// nivel Assembly/Machine
IsolatedStorageFile machineStorage = IsolatedStorageFile.GetMachineStoreForAssembly();

// nivel Assembly/User
IsolatedStorageFile userStorage = IsolatedStorageFile.GetUserStoreForAssembly();

// nivel Domain/Machine
IsolatedStorageFile machineDomainStorage = IsolatedStorageFile.GetMachineStoreForDomain();

// nivel Domain/User
IsolatedStorageFile userDomainStorage = IsolatedStorageFile.GetUserStoreForDomain();

Con la clase IsolatedStorageFileStream es posible crear archivos en un almacenamiento aislado. IsolatedStorageFileStream deriva de la clase FileStream, por lo que su comportamiento es muy similar a cualquier Stream de datos.

A continuación, un ejemplo del uso de IsolatedStorageFileStream:

IsolatedStorageFile almacen = IsolatedStorageFile.GetUserStoreForAssembly();

IsolatedStorageFileStream configuracion = new IsolatedStorageFileStream("Configuracion.dat", FileMode.Create, almacen);

StreamWriter sw = new StreamWriter(configuracion)
sw.WriteLine("Nombre = francisco");
sw.Close();
configuracion.Close();

miércoles, 3 de octubre de 2007

String v/s StringBuilder

Un objeto de tipo String permite Almacenar una cadena de texto o cadena de caracteres. De la misma manera un objeto de tipo StringBuilder almacena una cadena de caracteres o texto.

Existe una gran diferencia entre ambas implementaciones: String es inmutable, mientras que StringBuilder permite mutaciones.

¿Qué significa realmente esto?
Bueno tal como lo dice el concepto, String es inmutable, por ende no puede cambiar. Esto significa que no es posible agregar contenido a un String ya definido.
¿Cómo dice?, ¿Entonces qué diablos hace el siguiente código?

string miString = "Hola";
miString = miString + " Mundo";

Bueno, la primera línea crea un objeto de tipo String inicializándolo en un valor de texto "Hola", luego, en la segunda línea, lo que efectivamente se realiza es:

  • Crear un nuevo objeto String, que tendrá como valor el valor del objeto miString concatenado con el valor " Mundo".

  • Asignar a miString este nuevo objeto creado.


En resumen, un String no es mutable y cada vez que se "modifica" su valor, realmente lo que se hace es crear un nuevo objeto String y asignarlo a la variable "modificada".

Esta acción puede traer serios problemas de eficiencia y seguridad, ya que eventualmente podría acarrear problemas de desborde de memoria (sobretodo en witios web) lo que implica una serie de riesgos en cuanto a seguridad.

En la otra esquina tenemos la clase StringBuilder, la que mencione es mutable y por ende, puede variar su contenido. Un objeto de tipo StringBuilder permite agregar, eliminar, sustituir e insertar datos sin crear una nueva instancia de la clase, lo que significa un ahorro e recursos comparado con un objeto String.

La manera de trabajo de StringBuilder es la siguiente:

  • maneja un buffer que permite agregar datos directamente si el dato agregado es menor al espacio libre en el buffer.

  • Si el dato es mayor que el buffer, entonces se solicita un nuevo buffer con tamaño mayor, se copian los datos actuales, y finalmente se agregan los nuevos datos.


Al comparar ambos tipos de datos, es posible identificar las siguientes características.

  • Si la cantidad y tamaño de datos a agregar a un string es constante y conocida, entonces es más eficiente utilizar un objeto de tipo String.

  • Si la cantidad y tamaño de datos a agregar a un string es variable y/o desconocida, entonces una intancia de StringBuilder presenta mayores beneficios que una instancia de String.

martes, 2 de octubre de 2007

1, 2, 3 | Mi Sitio Web

Hace un par de meses, Microsoft lanzó un sencillo Sistema de Gestión de Contenidos (CMS) basado en ASP.NET 2.0.

Este CMS en sí es bastante sencillo y permite, de una manera simple, crear un sitio Web dinámico con funcionalidades básicas para las personas que no posean un gran nivel de experticia en cuanto a la creación de páginas Web. La administración es vía web y no se requiere de programación para utilizarlo.

En el siguiente enlace, hay una guía para comenzar a utilizar este CMS desde cero.





Saludos.

Volviendo a las pistas

Luego de varios meses de inactividad, este blog vive nuevamente....

chachannnnnn

lunes, 12 de marzo de 2007

Problemillas con proyecto SVN

En estos dias me encuentro finiquitando un proyecto para ACA (Academia de Ciencias Aeronauticas) de la UTFSM. El proyecto consiste en crear un repositorio para documentos. Opté por utilizar SubVersion para este objetivo ya que me parece la herramienta indicada para manejar versiones de documentos. Además el cliente TortoiseSVN permite lanzar automáticamente la herramienta de control de cambios de MS Word para comparar versiones de un archivo, que es lo que más me pidieron en la ACA.

Me pidieron que el miercoles les haga una presentacion de la utilizacion del sistema con TortoiseSVN para finalizar con el proyecto y bueno.... Hoy vine a la U a verificar la correctitud del sistema y CHANANAAAAAAAAAAA
NO FUNCIONABA NADA!!!!!!!!....
partir casi desde cero con el sistema....

basicamente me tope con dos problemas....

El primero fue un fantasma que movio las rutas de los archivos de usuarios y autorizacion para los repositorios (nadie fue jajajaja) por lo que no tomo mucho tiempo el arreglarlo...

El segundo fue un cacho( en buen chileno). No dejaba hacer commit de nada en el repositorio. Bueno luego de googlear y SUBgooglear (termino utilizado desde hoy para visitar las paginas que google esconde y que muchas veces (como mi caso de hoy) son de utilidad) encontre la respuesta....

El problema radica que el laboratorio de computacion ahora utiliza un proxy, por lo que estaban bloqueados ciertos accesos de SVN (MKACTIVITY por ejemplo). La solucion la encontre en:

http://wiki.dreamhost.com/index.php?title=Talk:Subversion&redirect=no#Subversion_access_troubles

donde explican como resolver este problema (una simple linea y listo).

Ahora a hacer la clase de capacitacion y a cobrar los morlacos.

martes, 27 de febrero de 2007

La sentencia Using

La mayoría de los programas escritos en C# contienen al menos, aunque no es requisito, una sentencia using.

Sabemos que con esta sentencia utilizamos un namespace determinado y con esto acortamos notoriamente los nombres de las clases y tipos que utilizaremos en nuestro código.

La manera de utilizar la sentencia using para importar un namespace es la siguiente.

using MiNamespace1;
using MiNamespace2;

Con esto se importan todas las classes de los namespaces referenciados.

¿Que pasa si tanto MiNamespace1 como MiNamespace2 contienen una clase llamada MiClase?
Esto crearía un conflicto de nombres, ya que el compilador no sabría a qué clase nos referimos cuando utilizamos MiClase (si a MiNamespace1.MiClase o MiNamespace2.MiClase).
Para solucionar este conflicto es posible crear un alias para cada espacio de nombres importado. Podemos definir un alias para el using de la siguiente manera.

using Alias = MiNamespace1;


De esta manera ahora para referirnos a MiNamespace1.MiClase lo hacemos como Alias.MiClase (el ejemplo no es el mejor
para notar lo útil que puede ser esta sentencia, pero imaginate que tengas que utilizar namespaces como los siguientes).

using Alias1 = Empresa.Departamento.Proyecto.Modulo1;
using Alias2 = Empresa.Departamento.Proyecto.Modulo2;

Aquí sí que acorta notoriamente la codificación de los nombres de las clases.

*************************************

Pero si creias que la sentencia using se utiliza únicamente para importar namespaces estas muy equivocado.
Tambien tiene la función de definir bloques que utilizan un recurso determinado. Un recurso es una clase que implementa
la interfaz IDisposable, es decir, contiene un método para definir cuando el recurso ya no está siendo utilizado.

El Bloque using tiene como finalidad utilizar un recurso definido durante el alcance del bloque y
luego liberar el recurso llamando al método Dispose().

El siguiente es un ejemplo práctico de un bloque using.

using (Recurso r = new Recurso())
{
// utilización de recurso r.
}

Lo cual es equivalente a lo siguiente:

Recurso r = new Recurso(); // u otra asignacion.
try {
// utilización de recurso r.
}
finally
{

// Liberación del recurso -> r.Dispose();
r.Dispose();
}


Claro, existe una diferencia entre utilizar un bloque using y un bloque try/finally. En el primero el recurso
utilizado es sólo de lectura, mientras que es modificable en un bloque try/finally.

Es posible, también, definir varias instancias de un mismo recurso al inicializar un bloque using, de la siguiente manera:

using(Recurso r1=X, r2=Y, r3=Z){
...
}

Sentencia que es equivalente a:

using(Recurso r1=x ){
using(Recurso r2=Y){
using(Recurso r3=Z){
...
}
}
}

y a:

try
{
Recurso r1=X, r2=Y, r3=Z;
...
}
finally

{
r1.Dispose();
r2.Dispose();
r3.Dispose();
}

Aplicaciones para esta sentencia son, por ejemplo, conexiones a bases de datos, creacion de una lista de objetos, entre otras.

lunes, 26 de febrero de 2007

Code Snippets

La utilizacion de Code Snippets es una practica que disminuye notoriamente los tiempos de codificación de proyectos, sobre todo con muchas acciones repetitivas a lo largo del código.

El siguiente artículo presenta una manera sencilla de crear tus propios Code Snippets y añadirlos a Visual Studio 2005.

El artículo lo puedes encontrar aqui

sábado, 24 de febrero de 2007

Reflexión con C#

Reflexión es la capacidad de algunos lenguajes de acceder a su estructura mediante su metadata. Los lenguajes de .NEt Framework 2.0 proveen esta funcionalidad mediante el assembly System.Reflection.

Utilizando reflexión podemos consultar por los tipos contenidos en un assembly, sus miembros, propiedades y métodos, asi como sus permisos de acceso, entre otras características.

Este pequeño artículo muestra ejemplos de cómo utilizar reflexión con C#.

El artículo se encuentra aqui

martes, 13 de febrero de 2007

Tipos de datos Nullables.

Una de las novedades del .Net Framework 2.0 son los tipos de datos Nullables.

Este nuevo tipo de datos permite asignar valores nulos a tipos de datos por valor (ValueType), cosa que no era posible antes de la creación de este tipo de datos.

El siguiente artículo es una ayuda a la utilización de los tipos Nullables.

Lo pueden encontrar aqui

Concurso Microsoft Expression

Este Post es para invitarlos a probar el nuevo Microsoft Expression, una
herramienta orientada a sacar el mayor provecho a WPF (Windows
Presentation Foundation) que es la nueva apuesta de Microsoft en el
área gráfica.
La invitación es también para participar en un concurso a nivel
latinoamericano para desarrolladores y diseñadores que quieran
sacarle provecho a esta herramienta que nos presenta Microsoft.

Los premios van desde reproductores Zune para los 10 finalistas hasta
un viaje a Las Vegas (para participar en un evento de Microsoft para
diseñadores) + U$1,000

¿Quiénes pueden participar?
Diseñadores y desarrolladores web con residencia en Latinoamerica.

¿Cuáles son los requisitos?
Leer y aceptar los términos y condiciones del concurso que se
encuentran en el sitio web: www.expressionawardslatam2007.com
¿Cómo participo?
Visite el Sitio Web www.expressionawardslatam2007.com y complete la
forma de registro.

¿Quiénes integran el jurado?
El Jurado estará integrado por 10 reconocidos diseñadores Web
latinoamericanos, visite el sitio www.expressionawardslatam2007.com
para conocerlos.

¿Cuándo puedo inscribir mis trabajos?
Ya mismo puedes inscribir tus trabajos y serán recibidos hasta Marzo
del 2007.

Mas informaciones en el sitio oficial del concurso.
www.expressionawardslatam2007.com

Saludos

miércoles, 7 de febrero de 2007

Aquellos prodigios de la programacion.....

Muchas veces me he encontrado con gente que dice frases como:

"Programar es simple, yo aprendi en 1 mes pascal, C, Java, C++, PHP, C#, Visual Basic, etc". En fin, cualquier lenguaje de programacion sirve para aparentar frente a tus amigos que sabes programar y aprendiste en un periodo muy corto de tiempo.

Un dia viajando por el ciberespacio me encontre con un articulo del señor Peter Norvig (Director of Research at Google Inc) que habla justamente sobre este fenomeno, el aprender programacion en un par de dias, incluso horas!!!!

Espero les guste y a mas de algun especimen que se jacta de sus aptitudes programaticas los haga recapacitar un poco sobre la complejidad de la programación y de manejar un lenguaje específico.

El artículo lo pueden encontrar aqui

para los poco gringos en español aqui

viernes, 2 de febrero de 2007

Evitando Cross-Site Scripting

Hace algun tiempo, Microsoft liberón una librería llamada Microsoft Anti Cross-Site Scripting, cuyo objetivo es brindar una manera simple de disminuir el riesgo de un ataque de estas caracteristicas a un sitio web.

La utilización de esta librería es simple e intuitiva. El siguiente articulo es una guía básica de uso de AntiXss para proyectos ASP.NET.

Agradecimientos a Yair Peña, un compañero de trabajo que nos enseñó esta librería y como sacarle provecho en nuestras aplicaciones.


El artículo lo puedes encontrar aqui

jueves, 1 de febrero de 2007

Articulo de Introducción a SandCastle

Oscar Angulo, un compañero de trabajo nos presentó una herramienta de manejo de documentación en proyectos en Visual Studio.

La herramienta se llama SandCastle y realmente significa un aporte a la documentación de clases y elementos de un proyecto. Esta herramienta genera documentación al estilo MSDN y es muy simple de utilizar.

El siguiente artículo es una pequeña introducción a las características de SandCastle y contiene un ejemplo básico de generación de documentación para una clase.

El artículo lo podeis encontrar aqui

Articulo de Introducción a SandCastle

Oscar Angulo, un compañero de trabajo nos presentó una herramienta de manejo de documentación en proyectos en Visual Studio.

La herramienta se llama SandCastle y realmente significa un aporte a la documentación de clases y elementos de un proyecto. Esta herramienta genera documentación al estilo MSDN y es muy simple de utilizar.

El siguiente artículo es una pequeña introducción a las características de SandCastle y contiene un ejemplo básico de generación de documentación para una clase.

miércoles, 31 de enero de 2007

Tests Unitarios con NUnit.

NUnit es un framework para realizar tests unitarios en .NET.

Los test unitarios son la base del Test-Driven Development, una práctica que ha tomado cada vez más relevancia debido a que apoya las metodologías ágiles como XP.

El siguiente articulo es un acercamiento básico a las características de NUnit.

El artículo lo pueden encontrar aqui

martes, 30 de enero de 2007

Preparando el CU.NET


Por ahora estoy preparando otro artículo que espero sea de utilidad para más de algún desarrollador, es sobre documentación de codigo utilizando una herramienta que provee Microsoft para Visual Studio 2005.

Pero eso tomará unos días más, ya que estoy con harta pega en mi trabajo y además estoy preparando el CU.NET que tendré que dictar en la UTFSM durante el primer semestre. Espero no sea complicado resumir la materia de las 2 primeras estrellas en tan sólo 6 clases (6 largas clases) y que mis compañeros de Universidad que tomen el curso puedan aprender algo más del .NET Framework 2.0 que es lo que trata el curso.

Espero durante el año estemos capacitados para dictar algun cursillo o alguna charla respecto al Framework 3.0 que trae bastantes cosillas interesantes.

Pero cada cosa a su tiempo, por ahora preparando el CU.NET y terminando el artículo que espero publicar durante los proximos días


Saludos.

Articulo de introducción a NHibernate

Bueno, espero este sea el primer articulo de muchos con los que espero ser de ayuda para más de alguien en esto de las tecnologías emergentes.
Este primer artículo es una introducción a NHibernate, pero qué diablos es NHibernate, sin duda más de alguno ha escuchado hablar de Hibernate, si no lo ha escuchado entonces se lo cuento en pocas palabras.
Hibernate es un Framework de mapeo Objeto-Relacional implementado para la plataforma Java. El mapeo objeto relacional pretende abstraer al desarrollador del acceso a datos (sí, separación por capas).
NHibernate es la implementación del modelo de Hibernate para la plataforma .NET, funciona de lujo aún cuando todavía no se explotan todas las posibilidades del .NET Framework 2.0.
La página oficial del proyecto NHibernate es la siguiente:
Bueno, espero les agrade el documento y cuando conozca más sobre este framework escribiré algo más detallado para ir profundizando el tema.
El articulo lo pueden encontrar aquí
Saludos.