Desarrollo de Software

Articulos generales sobre desarrollo de software

WCF: Comparacion de BasicHttpBinding y WSHttpBinding

Microsoft .NET Framework

Microsoft .NET Framework

Estoy experimentando con diferentes settings para configurar unos WCF Services y me tope con este articulo…definitivamente interesante para cualquiera que trabaje con Windows Communication Foundation.

El articulo habla sobre las diferencias de seguridad, confiabilidad y estabilidad del binding WSHttpBinding contra el BasicHttpBinding.

WCF : BasicHttpBinding compared to WSHttpBinding at SOAP packet level

E-book (libro) gratis de C#

Ebook gratis de C# - Illustrated C# 2008

Ebook gratis de C# - Illustrated C# 2008

La compañia RedGate, que creó los increíbles productos SQL Compare y SQL Prompt, entre otros, publicó esta semana un ebook (o libro electronico) de C# llamado Illustrated C# 2008, que está enfocado a desarrolladores completamente nuevos o que tienen un background de C++ o VB y que quieren migrar a C#.

RedGate es la misma compañía que ahora es dueña del .NET Reflector, creado originalmente por Lutz Roeder.

El autor del ebook es Daniel Solis.

Pagina del Ebook Ilustrated C# 2008

Link directo a bajar el Ebook Ilustrated C# 2008

Shortcuts de Windows que todo desarrollador deberia saber

Shortcuts de Windows que todo desarrollador debería de conocer

Shortcuts de Windows que todo desarrollador debería de conocer

Los siguientes son varios shortcuts de Windows que he aprendido desde que empece a desarrollar software, y que definitivamente es útil conocer. Se pueden usar en el dialog de Run, de Windows (Start -> Run)

Dicen que una pequeña parte del proceso de volverte un mejor desarrollador es ser agil con el teclado, y no tener que tomar el mouse cada 30 segundos, por lo cual eventualmente vas conociendo estos atajos y acostumbrandote a usarlos en lugar del mouse.

Hay muchos más, pero estos son tal vez los más usados por desarrolladores:

msconfig — dialogo para analizar configuración de inicio de Windows
LogFiles — Folder con log de servidores de Windows (IIS, FTP, etc)
inetmgr — Consola de Administración de IIS
regedit — Registry de Windows
eventvwr — Event Viewer
Assembly — .NET GAC (Global Assembly Cache)
services.msc — Configuración de Servicios de Windows
appwiz.cpl — Add/Remove Programs
control userpasswords2 — Configuración avanzada de Usuarios de Windows
control printers — Acceso a Impresoras del sistema
mstsc — Remote Desktop
fsmgmt.msc — Administración de folders compartidos de Windows
shutdown -a — Abortar shutdown de Windows en proceso.
diskmgmgt.msc — Manejo de Discos Duros de Windows

Curiosamente, había dejado listo este post listo para publicarlo otro día. Hoy instalé un nuevo disco duro que compré (interno, SATA II, 320 GB), y a pesar de que al iniciar Windows salió el Tooltip en la Taskbar de que se estaban instalando los drivers para el disco, este nunca apareció listado en My Computer. Se podía ver desde el Device Manager, e indicaba que tenía funcionamiento correcto, pero aún asi no había manera de hacer que se viera en My Computer.

En el párrafo anterior digo curiosamente porque fue ese ultimo, el diskmgmt.msc el que me ayudó a poder Inicializar el disco duro (ni siquiera sabía que se tenía que hacer esto, nunca tuve que hacerlo antes cuando instalaba discos duros internos, pero siempre habían sido IDE, este es el primer disco SATA que instalo yo mismo). Utilizando diskmgmgt.msc se puede: Inicializar el disco, Crear particiones lógicas, Formatear las particiones.

Entre desarrollo y helpdesk de familia y amigos, esos son los que más uso yo. Si alguien tiene alguna sugerencia de algun otro shortcut importante que no haya mencionado, por favor dejenlo en los comments.

Que significa sargeable en SQL

Al estar leyendo foros de SQL sobre maneras de optimizar queries, me tope con una sugerencia de un DBA experto en la cual le sugeria a otro DBA el hacer que su query fuera sargeable. Nunca antes habia escuchado el termino, y al parecer no es tan conocido.

Despues de leer un poco sobre el termino, me di cuenta que deberia ser conocimiento basico de SQL para cualquier desarrollador.

Que la clausula de WHERe de un Query de SQL sea Sargeable significa que contenga una constante contra la cual comparar directamente el valor del campo de una tabla y el beneficio de que sea sargeable es que el Engine de SQL pueda utilizar cualquier index que exista sobre el campo, que resulta en un index seek en lugar de un table scan (que es más costoso en performance).

Para que este un poco mas claro: Un index esta creado únicamente sobre el VALOR del campo. Si nuestra clausula de WHERE encierra el campo indexado en una funcion (como por ejemplo SUBSTRING o CONVERT), cualquier posibilidad de usar el index esta eliminada, porque el Engine de SQL debe procesar cada row a traves de la funcion para determinar si cumple o no la constante contra la cual se esta comparando.

Un ejemplo muy sencillo seria el siguiente:

WHERE SUBSTRING(Apellido, 1, 4,) = 'Rodr'

La clausula de arriba no es Sargeable, porque el hecho de que exista un SUBSTRING contra nuestro campo, obliga al Engine a procesar cada campo.

En cambio, la clausula de abajo utiliza directamente el campo y se compara contra una constante, por lo cual se puede utilizar el index de nuestro campo.

WHERE Apellido LIKE 'Rodr%'

Otro ejemplo, que normalmente engañaría a varios de nosotros, seria un query para sacar todos los registros insertados en una tabla el dia de hoy, basándonos en el campo FechaHoraInsercion, que tiene tanto la Fecha como la Hora en que fue insertado el registro.

Una de las maneras mas comunes de hacer este query es el parsear el valor de FechaHoraInsercion y hacer la comparacion en una sola clausula, como por ejemplo:


SELECT NumeroCliente, Nombre, Apellido
FROM Clientes
WHERE
CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, FechaHoraInsercion))) = CONVERT(DATETIME, FLOOR(CONVERT(FLOAT,getDate())))

A pesar de que existe un índice sobre el campo FechaHoraInsercion, de nuevo, no podría ser usado porque el valor del campo en los indices es constante, y aquí tiene que ser pasado por 2 funciones CONVERT y una FLOOR.

La manera mas óptima de hacer este query (y que fuera sargeable) seria:

SELECT NumeroCliente, Nombre, Apellido
FROM Clientes
WHERE
FechaHoraInsercion >= DateAdd(Day, DateDiff(Day, 0, GetDate()), 0)
AND FechaHoraInsercion < DateAdd(Day, DateDiff(Day, 0, GetDate()), 1) [/sourcecode] A pesar de tener 2 clausulas de WHERE en lugar de solo 1, el hecho de que el engine pueda calcular el valor de la constante del lado derecho de la expresion  y simplemente compararlo contra los valores almacenados en el index de FechaHoraInsercion ya resulta en una búsqueda mas óptima. Espero que les sirva.

1 4 5 6 7 8  Scroll to top