Diario del Desarrollador.

martes, mayo 09, 2006

FxCop

FxCop es una herramienta que permite examinar código .NET compilado (.dll, .exe) y comprobarlo contra una serie de reglas, Las reglas van desde el estilo de los nombres (el CamelCase, el uso de palabras compuestas) a errores de programación. El informe final muestra el cumplimiento o no de las reglas seleccionadas, y si no se cumplen da la razón concreta y por qué debería cumplirla, de manera que se pueda decidir sobre si se debe modificar el código antes de entregarlo al usuario final.
Además la herramienta es extensible, es decir, podemos crear nuestras propias reglas y verificar si se cumplen o no en las aplicaciones que desarrollemos. Esto es muy útil en el caso de equipos de desarrollo donde se establecen determinados estándares de codificación que todos los programadores tienen que seguir.

lunes, abril 17, 2006

Mac OS X para hardware Intel...


Para muchos de los usuarios de Macintosh y de Windows XP, el anuncio por parte de Apple de una línea nueva de sistema operativo para procesadores Intel (para añadir a la línea actual basada en procesadores IBM/Freescale PowerPC) ha tenido una gran importancia. Si Windows XP es un sistema operativo maduro, estable, potente, amigable y bonito, Mac OS X no tiene nada que envidiarle puesto que la clásica estabilidad de Unix (núcleo de origen BSD de nombre Darwin) se recubre de una interfaz más bonita y amigable, si cabe, que la de Windows XP, quedándose rezagado exclusivamente en el número de aplicaciones existentes, particularmente en el ámbito de los juegos pero, si hablamos de las grandes aplicaciones para uso doméstico y profesional (Microsoft Office, programas de Adobe, edición de sonido y de vídeo, programación web, diseño gráfico, etc...) no hay diferencias como para preferir un sistema operativo al otro.......

Aquí mas detalles

viernes, abril 07, 2006

WinXP corriendo en Mac?

Apple presenta un parche que permite usar Windows en los Macs

Apple Computer, el fabricante de los ordenadores Macintosh y de los reproductores de música iPod, presentó el miércoles un parche de software que permite por primera vez el uso del sistema operativo de Microsoft Windows en sus ordenadores, una maniobra que podría reportarle millones de nuevos compradores......

Aquí dan mas detalles
De aquí se puede bajar el parche

lunes, abril 03, 2006

Encadenamiento de String.

Si no has manejado correctamente, el encadenamiento de String, puede disminuir considerablemente el rendimiento de tu aplicación. Se puede concatenar String de dos maneras. Primero, usando String y agregando un nuevo string a un string existente. Sin embargo, esta operación es realmente costosa (especialmente si usted está concatenando string dentro de un ciclo). Cuando se agrega un string a un string existente, el Framework copia ambos datos, el existente y el nuevo a la memoria, borrando el string existente, y leyendo los datos en un nuevo string. Esta operación puede ser muy desperdiciadora de tiempo y costosa dentro de secuencias de encadenamiento muy largas. La segunda y mejor manera para encadenar las secuencias es utilizando la clase StringBuilder.

‘Encadenamiento Usando una Clase String

Response.Write("<b>Clase String</b>")
Dim str As String = ""
Dim startTime As DateTime = DateTime.Now
Response.Write(("<br>Tiempo Inicio:" + startTime.ToString()))
Dim i As Integer
For i = 0 To 99999
str += i.ToString()
Next i
Dim EndTime As DateTime = DateTime.Now
Response.Write(("<br>Tiempo Termino:" + EndTime.ToString()))
Response.Write(("<br># Encadenaciones: " + i.ToString))

Resultados: Llevó 4 minutos y 24 segundos para terminar 100.000 encadenaciones

Clase String
Tiempo Inicio: 03-04-2006 14:21:24
Tiempo Término: 03-04-2006 14:25:22
# Encadenaciones: 100000


‘Encadenación Usando StringBuilder

Response.Write("<b>Clase StringBuilder</b>")
Dim strbuilder As New StringBuilder()
Dim startTime As DateTime = DateTime.Now
Response.Write(("<br> Tiempo Inicio:" + startTime.ToString()))
Dim i As Integer
For i = 0 To 99999
strbuilder.Append(i.ToString())
Next i
Dim EndTime As DateTime = DateTime.Now
Response.Write(("<br> Tiempo Termino:" + EndTime.ToString()))
Response.Write(("<br># Encadenaciones: " + i.ToString))

Resultados: Tomó menos que un segundo para terminar 100.000 Encadenamientos.

Clase StringBuilder
Tiempo Inicio: 03-04-2006 14:55:33
Tiempo Termino: 03-04-2006 14:55:33
# Encadenaciones: 100000


La clase StringBuilder deriva de System.Text

Copia y pega el código para probar…

domingo, abril 02, 2006

HE REGRESADO!!!!

Por fin podre retomar este espacio
Lo mantendre actualizado con notas y pruebas...

jueves, julio 14, 2005

Trabajando con Fechas en .NET

A través del tiempo uno como Desarrollador de Aplicaciones se enfrenta tarde o temprano al trabajo con variables del tipo Fecha ( Date ). Si sólo las utilizamos como una simple visualización de la fecha actual, que se extrae del sistema, podemos formatearla y presentarla en el formato que nos haya sido pedido, español dd-mm-aaaa ó inglés mm-dd-aaaa, que son las mas utilizadas en Chile. Con lo cual el trabajo sobre ellas, es más bien simple.

Algo similar ocurre cuando esa fecha es necesaria que quede registrada en el almacén de datos, para lo cual a veces sólo interesa saber la fecha y hora en que se insertó un nuevo registro, con lo cual nos apoyamos de la funcion de GetDate() que provee SQL Server, por ejemplo. Una vez más, el trabajo con fechas es trivial.

Sin embargo, en más de una ocasión necesitaremos trabajar un poco con esas fechas, por ejemplo en el siguiente escenario :

A partir de una Fecha que es ingresada por el usuario se requiere hacer algunos cálculos, digamos saber si esta dentro de un rango de Fechas, sumarle días a dicha Fecha o enviarla hacia la Base de Datos.

El problema surge sólo cuando los formatos de fechas configurados en nuestra Base de Datos y nuestro IIS no son iguales ó, cuando en el ambiente de Desarrollo son de un formato y cuando los llevamos a Producción tienen otro.

Opciones,

1) podría ser contar con el útil IF "desarrollo" THEN formato1 ELSEIF "Produccion" THEN formato 2 END IF, lo cual nos saca del paso, pero no es lo mas... académico.

2) solicitar a la gente encargada que homologue el formato en todos nuestros ambientes, con lo cual no tendremos problemas hasta... que alguien lo cambie por "error"

3) optar por tratar de independizarse del formato de fechas que es lo que trataremos de hacer

Utilizando rutinas propias del .NET

'# Fechas
‘# declaración de variable a utilizar de tipo Date
Dim Fecha_Cierre As Date = Now
‘# declaración de Zona Horaria del “Servidor”

Dim Zona_Horaria_Local As TimeZone = TimeZone.CurrentTimeZone

‘# declaración de variable a utilizar de tipo Date que contiene la Fecha en “Formato UTC” hora universal coordinada

‘# se utilizará para todo lo que sea “Cálculos”
Dim utc_Fecha_Cierre As Date = Zona_Horaria_Local.ToUniversalTime(Fecha_Cierre)

‘# declaración de variable a utilizar para Despliegue en la Aplicación
'# o cualquier otro uso
Dim str_Fecha_Ampliada As String = utc_Fecha_Cierre.Day.ToString & "-" & _utc_Fecha_Cierre.Month.ToString & "-" & _utc_Fecha_Cierre.Year.ToString
'# ^ Fechas


alguien me podrá decir, buuuu cual es la gracia, es similar a utilizar Now.Day.

Dim str_Fecha_Ampliada As String = NOW.Day.ToString & "-" & NOW.Month.ToString & "-" & NOW.Year.ToString

y menos trabajo, la respuesta es SÍ condicionada, si sólo trabajamos en ambientes con formato definido y que no variará, pero si no es el caso o alguna vez se enfrentarán a cambios de ese estilo, Yo prefiero independizarme del formato.

martes, julio 12, 2005

Pasar credenciales a un Web Service

La semana pasada me quebré la cabeza tratando de pasarle las credenciales de mi aplicación Smart Client a los Web Service que ocupa, lo que pasa es que la conexión a la base de datos es integrada y esto lo hace en el web service, cada vez que se quería conectar utilizaba el usuario DOMINIO\ASPNET, que estaba definido en el IIS para el acceso anónimo, si le quitaba esta opción me decía "Acceso Denegado".

Bueno el tema es que encontré la solución ..
Por cada una de las llamadas que tengas a las funciones del Web Service hay que darle una credencial de autentificación. Así por ejemplo:

Dim WS As New WSFramework.WSFunciones
WS.Credentials = System.Net.CredentialCache.DefaultCredentials

En el web.config del Web Service agregar:

identity impersonate="true"

Luego en el IIS, hacer clic derecho sobre el Web Service , seleccionar propiedades y ve a la pestaña Seguridad de Directorios da clic en Modificar, deshabilita el check de "Acceso Anónimo", solo tiene que quedar habilitado el ultimo checkbox de la opción "Autenticación de Windows Integrada".


La propiedad DefaultCredentials de la clase CredentialCache contiene las credenciales de sistema del contexto actual de seguridad. Para aplicaciones de cliente, estas credenciales representan el nombre de usuario, la contraseña y el dominio del usuario que inicia la sesión actual. Las credenciales de cliente no se pasan automáticamente. Para pasar el contexto de Windows de seguridad del cliente a un servicio Web, debe establecer la propiedad Credentials del proxy de servicios Web a CredentialCache.DefaultCredentials.

Eso;)

NET Remoting frente a los Servicios Web ASP.NET

Este artículo compara el rendimiento de los Servicios Web vs Remoting:

Ver Aka

Si se fijan en las gráficas los servicios web se pueden comparar con todas las alternativas de remoting, excepto con binario sobre TCP donde el rendimiento mejora respecto a los servicios web. Esto significa que la diferencia más importante entre los dos es el consumo de ancho de banda, y no el procesamiento en el servidor. De hecho el serializador XML que utiliza .NET es muy óptimo y se basa en la creación en tiempo de ejecución de código compilado, sin embargo el consumo de ancho de banda es mayor porque los mensajes XML ocupan más espacio que los binarios.