SQL Server dispone de una versión embebida que es tan interesante como desconocida y poco utilizada. Se trata de SQL Server Compact Edition. La mayor parte de la gente la desecha como opción porque la asocia con crear aplicaciones para dispositivos móviles (como PDAs o teléfonos), pero lo cierto es que tiene una cantidad espectacular de aplicaciones en entornos de escritorio.
Para empezar esta versión ligera de SQL Server es gratuita y compatible con su hermano mayor, con multitud de características avanzadas como SGBD. No necesita tener instalado un servicio permanentemente en ejecución en el sistema y es extremadamente ligera (tanto que puedes usarla en un teléfono, así que eso lo dice todo). Una de las características más interesantes es la de todas las opciones de sincronización que ofrece, que nos permiten replicar y mantener en sincronismo datos entre sistemas homogéneos, por lo que la hace ideal para aplicaciones que deban trabajar conectadas de forma no permanente y para almacenamiento local.
Se le puede sacar partido para multitud de casos. Por ejemplo, imagínate una aplicación de TPV (ventas por terminal) que se usa en una red de tiendas y que almacena sus datos en una base de datos central. ¿Qué pasa cuando falla la conexión a Internet? ¿Te vas a quedar sin poder facturar?. Obviamente no. Pues en este caso SQL Server Compact es un gran aliado ya que te permitiría implementar en tu TPV de manera sencilla una solución de almacenamiento local sin instalación compatible con SQL Server que funcionase cuando no hay conexión y que sincronizase de manera automática los datos cuando vuelva a haber conectividad.
En general cualquier situación que requiera un almacenamiento avanzado, incluso con simultaneidad de acceso por parte de varios usaurios, pero que no justifique el hecho de instalar un SQL Server completo es el lugar apropiado para usar SQL Server Compact.
Y la aparición del Service Pack 1 para este entorno con la inclusión de soporte para Entity Framework o posibilidad de usarla en entornos de 64 bits la hacen más potente todavía.
Total, que el hecho de que esta BD sea tan infrautilizada nos ha llevado a sacar desde Krasis Press un nuevo libro específicamente dedicado al tema (y el más grande que hemos hecho hasta el momento, con bastante más de 400 páginas). Su autor, José Miguel Torres, es un gran experto en este campo con muchos años de experiencia real en este tipo de aplicaciones de Smart Client comentados. Además el libro se ha concebido como una referencia completa que inluye todo lo que necesitas para dominar el entorno: desde su puesta en marcha y utilización, hasta su despliegue en entornos de producción, pasando por utilización, el lenguaje SQL, su acceso con ADO.NET 3.5, entornos de sincronización y todo tipo de conceptos sobre arquitectura de aplicaciones. Incluye por supuesto las novedades del SP1 aparecido esta misma semana. ¡Más fresco imposible! :-)
Desde mi punto de vista un "must have" que todo programador de .NET debería conocer.
En la página del libro en Krasis Press tenéis toda la información, incluyendo un completo índice e introducción y el código fuente de ejemplo completo. Si lo compras te lo enviamos a casa por mensajero gratuitamente (dentro de la península) :-)
Desde ayer los suscriptores de MSDN y Technet ya puede descargarse la versión definitiva de SQL Server 2008.
Se trata de una gran noticia :-)
Si eres suscriptor, ahí te dejo los enlaces:
Las versiones en otros idiomas distintos al inglés se irán colocando en las próximas semanas.
Hay veces que necesitaremos usar programáticamente un ScriptManager dentro de una página, por ejemplo para añadir dinámicamente referencias a Scripts o a servicios Web o WCF. Para ello deberemos automatizar el control ScriptManager que toda página AJAX debe tener, pero ¿qué pasa si no existe ese control?
Para asegurarnos de que el control está añadido a la página y que podemos utilizarlo podemos emplear el método estático GetCurrent de la clase ScriptManager para verificar su existencia, así:
public static bool IsScriptManagerPresent(Page p)
{
ScriptManager Smgr = ScriptManager.GetCurrent(p);
return (Smgr != null);
}
Con esta sencilla función podremos averiguar si hay un Scriptmanager presente o no.
Es interesante notar que este método funciona y devuelve el valor correcto incluso cuando el ScriptManager no está presente en la página actual sino en la página plantilla (Master Page) que la contiene. No obstante es importante darse cuenta de que en ese caso devovlerá true incluso si la Master Page tiene un ScriptManager aunque no tengamos un ScriptManagerProxy (SMP) en la nuestra, por lo que si obtuviésemos una referencia al ScriptManager estaríamos trabajando directamente con el de la MP aún sin un SMP.
A ver, una rapidita que me voy de fin de semana :-)
A lo mejor alguna vez usando una herramienta de monitorización de red (o un simple netstat) has observado que tu ordenador está haciendo peticiones a una URL "sospechosa" como esta: http://sqm.msn.com/sqm/wmp/sqmserver.dll
"¡Diosss! ¡Es cierto, Microsoft nos espía!" habrá pensado más de uno, jajaja
Bueno, realmente es una forma de espiarte anónimamente, pero es una para la que tú explícitamente has dado permiso.
Se trata ni más ni menos del "Programa de mejora de la experiencia del cliente de Microsoft" y que has aceptado como una opción cuando instalabas Visual Studio, SQL Server u otros productos abarcados por la iniciativa. Este programa recopila información anónima sobre el uso de los productos, su rendimiento, etc... para ayudar a microsoft en su mejora contínua, así que no debe preocuparte: no es spyware :-)
¿Cómo me lo quito de encima?
Bueno, cada programa tiene su sitio para desconectarlo. Por ejemplo en Visual Studio 2008 vete a "Help·Customer Feedback Options" (o similar en catellano) y verás aparecer este diálogo:

Desde el mismo se explica en qué consiste el progrma y se da la opción de desactivarlo.
En mi anterior post comentaba los peligros de usar alegremente los controles UpdatePanel de AJAX y mostraba con la excelente herramienta Fiddler cómo eran las peticiones que se enviaban y recibían.
Alguien me ha preguntado cómo hago para poder utilizar Fiddler con el servidor Web de desarrollo que viene con Visual Studio (conocido comunmente como Cassini), ya que por mucho que actives Fiddler por defecto no captura las peticiones hechas a dicho servidor.
El servidor de desarrollo sólo admite peticiones locales y accedemos a ése a través de una URL del tipo:
http://locahost:3572/miapp
Eligiendo un puerto aleatorio de cada vez.
Cuando lanzas Fiddler éste se coloca como proxy de Internet Explorer interceptando todas las llamadas que hace éste a las páginas Web. Lo que ocurre es que IE cuando detecta que una llamada se va a hacer en local (contra localhost vamos) automáticamente hace caso omiso de los posibles proxy que hubiera y lanza la petición directamente, de ahí que Fiddler no funcione.
Podemos solucionar este problema de una manera sencilla usando el siguiente truco.
Modificación al vuelo de la URL en Fiddler
La herramienta Fiddler nos permite responder a diferentes eventos mientras realiza una petición, los cuales podemos interceptar con código de Script. Se puede ver el ´codigo por defecto de estos eventos usando el menú "Rules" de fiddler, así:

Uno de estos eventos se produce justo antes de lanzar la petición desde el proxy y se llama "OnBeforeRequest". Por lo tanto podemos modificar la URL local para que IE piense que es externa, y volver a modificarla en el evento mencionado antes de que el proxy lance la petición. La manera más fácil es añadir a la palabra 'localhost' un punto justo al final. Así IE no la reconocerá como la URL local y la petición pasará a través de Fiddler. En el evento OnBeforeRequest sólo tenemos que añadir los siguiente al principio: if (oSession.host.substr(0, 10)=="localhost.")
{
oSession.host=oSession.host.replace("localhost.", "127.0.0.1");
}
Esto hace que cuando Fiddler detecta una petición a cualquier url que empiece por "localhost." la transforma en una llamada a la misma URL dentro de "127.0.0.1", que es equivalente.
Obviamente podríamos usar cualquier otro añadido a la URL local para cambiar la petición. Incluso en lugar de un simple punto añadir un subdominio especial del estilo ".local", para que fueran URLs del estilo "localhost.local" o algo así, cambiando por tanto el pequeño código de intercepción en el evento, pero el punto es el camino más rápido y va de maravilla.
Así que ya sabes, haz ese retoque en el evento, y a partir de entonces lanza tu aplicación y justo tras haber lanzado Fiddler añádele un punto a localhost al final para que Fiddler entre en acción y puedas analizar con detalle todo el trasiego de información entre cliente y servidor que produce tu aplicación, incluyendo peticiones AJAX encualquier puerto :-)
Las tecnologías de Microsoft han adolecido tradicionalmente de un problema que es a la vez, paradójicamente, su mayor ventaja: la sencillez aparente de uso. Pienso que la clave del éxito de Windows, Office y otros muchos productos de la casa de Redmond ha sido y es su sencillez de uso. Pero esta misma sencillez de uso se convierte también un arma de doble filo: hace que la gente se quede en la superficie de las cosas, sin comprender bien las consecuencias de lo que hacen. Ha pasado toda la vida con las versiones de servidor de Windows, y ha pasado y pasa con las herramientas de desarrollo. Al ser fáciles de configurar y utilizar la gente enseguida "controla" la tecnología correspondiente, lo cual es un error grave.
En este caso me estoy refiriendo en concreto a la tecnología ASP.NET AJAX que tanto facilita el desarrollo de aplicaciones de interfaz avanzada para la Web. Desde mi punto de vista el Update Panel es una obra de arte que debería llevar un premio al diseño de componentes y arquitecturas. Antes de su existencia la creación de aplicaciones AJAX era compleja, a pesar de los diversos frameworks para ello que existían. El uso de los Update Panel convierte en algo realmente sencillo el crear aplicaciones Web con capacidad de respuesta rápida y sin refresco de página. Una maravilla vamos.
Lo cierto es que su sencillez ha hecho que la gran mayoría de los que los utilizan lo hagan sin un buen criterio. Todo el mundo "sabe" hacer aplicaciones AJAX hoy en día. Los lamentos vienen después cuando las aplicaciones deben escalar y ser eficientes, como en casi todos los casos en los que se ve a diferencia entre un buen y un mal programador.
Veamos qué pasa cuando colocas un Update Panel en una página ASPX para hacer algo tan tonto como actualizar la hora actual en una etiqueta. En una página vacía colocas un ScriptManager, un Update Panel y dentro de éste una etiqueta y un botón. al pulsar el botón asignas en un evento de servidor la hora actual a la etiqueta, así: protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToShortTimeString();
}
Una chorrada total. Vale ahora ejecutas y voilá!, mágicamente el Update Panel hace su trabajo y ves aparecer la hora en la eiqueta sin hacer un postback tradicional al servidor ysin que la página ni siquiere parpadee.
Estupendo. Pero vamos a analizar qué pasa entre bambalinas y más en concreto qué información se envía y se recibe a y desde el servidor. Para ello he utilizado a mi fiel amigo Fiddler, el analizador de tráfico que más me gusta. El resultado de la petición de ida y vuelta del Update Panel es el que se puede ver en esta figura:

En la parte de arriba podemos ver la petición que se envía y en la de abajo la respuesta recibida. ¡En total 889 caracteres (casi 1 KB) para realmente obtener una información (la hora) que ocupa solamente 8 caracteres!
Impresionante. Ahora imagínate esta situación en una página compleja en la que el avezado programador se ha dedicado a dejar caer UpdatePanels por doquier (cosa muy común y una mala práctica). Ahí es nada.
Existen formas mucho más eficientes de conseguir lo mismo eficientemente usando el mucho más amplio framework de ASP.NET AJAX, tal y como se explica en nuestro curso de ASP.NET AJAX.
La conclusión es que hay que utilizar las tecnologías con cabeza y comprendiendo lo que se hace. Lo fácil de usar es un arma de doble filo.
Hace un rato, al llegar a casa y quitar de suspensión mi portátil, me encuentro con que me saltan actualizaciones del Sistema Operativo, lo cual me pareció raro porque aún ayer o anteayer tuve que instalar unas cuantas. "Será importante", me dije.
Tengo la buena costumbre de repasarlas siempre antes de que admitir que se instalen, y así me voy enterando de qué me instalan los chicos de Redmond todos los meses. El caso es que la primera de las actualizaciones (KB955020) de hoy ocupaba bastante (56,3 MB) y según indicaba era para actualizar los diccionarios de inglés y alemán (mi sistema de casa está en castellano).
Primera noticia que tengo de que Windows (y no Word u Outlook) incorpora "de serie" un diccionario. Oye, y además resulta que la actualización es considerada importante y me dice que seguramente tengo que reiniciar el equipo:

El caso es que claro, me voy a la KB a ver qué tipo de actualización es esta, porque no me gusta nada reinicair mi equipo y descargarme casi 60MB por una chorrada, y cual sería mi sorpresa cuando veo esto (pulsa la imagen para ir al original):

¿Comorrrrrl? Que mi Windows no va a reconocer en inglés y alemán palabras tan útiles como "Friendster," "Klum," "Nazr," "Obama," o "Racicot". Diosss, me tengo que bajar cuanto antes esta actualización ;-)
¡Hombre, por Dios!, menuda tomadura de pelo, no me fastidies. Imagino que tiene que haber sido un despiste, porque sino no se entiende tamaño desatino. En fin, ya sabes, desmarca la descarga de esa actualización y ahorrarás ancho de banda, tiempo, un reinicio y contribuirás a que Internet vaya un poquito más rápido. Lástima que en el ordenador de la oficina no pueda evitar que se instale (por eso esta mañana tuve que reiniciarlo, en fin).
No digas que no te lo avisé, jeje
Este es un truco muy sencillo pero que puede resultar realmente útil.
Cuando estamos navegando por Internet en busca de información hay veces que nos interesa guardar ciertos contenidos pero:
· A lo mejor no nos permite guardarlos a disco.
· Está deshabilitado copiar y pegar mediante JavaScript (fácil de solucionar, pero un "peñazo")
· La información no nos interesa exactamente cómo está, sino que queremos quitar cosas o añadir algunos comentarios propios que los complementen.
· La página tiene muchas otras cosas alrededor que nos sobran.
· Etc...
Para estos casos hay un snippet de JavaScript puede sernos de gran utilidad. Al utilizarlo lo que conseguimos es que cualquier página que estemos visualizando se convierta en editable, de forma que podamos modificarla a voluntad antes de copiarla (o cortarla) para almacenar el contenido. Así podremos quitar lo que no nos guste, redimensionar gráficos, mover partes de un lado a otro, añadir comentarios, etc... Realmente útil.
Para tenerlo a mano siempre haz lo siguiente:
-
navega a cualquier página. Por ejemplo: about:blank (que es una página en blanco).
-
Agrega esa página a tus favoritos, por ejemplo en la sección de "Vínculos" para que esté siempre a mano en la barra de herramientas
-
Edita el favorito con el botón derecho·Propiedades. En la URL sustituye tu página por el siguiente texto:
javascript:document.body.contentEditable='true'; document.designMode='on'; void 0
¡Listo! Ahora a disfrutar y a editar a tu gusto las páginas :-)
Por cierto, esto funciona tanto en Internet Explorer como en Firefox.
Ya está disponible para que veas on-line la grabación del Webcast que hizimos anteayer Luis Miguel Blanco y yo sobre el uso de rejillas en Windows Forms (él) y en Web (yo).
Puedes verlo pulsando sobre esta imagen:

También te puedes descargar el código de ejemplo desde aquí. En el caso de mi ponencia para la Web tienes disponibles versiones de los ejemplos tanto en VB como en C#. Espero que te resulten útiles.
Y recuerda: si esto te gusta ni te imaginas lo que te pueden gustar y lo que puedes aprender con nuestros cursos on-line de campusMVP :-)
Pues nada, hoy toca cuña publicitaria, pero creo que os va a interesar :-)
Y es que hoy hemos lanzado nuestro nuevo catálogo de cursos de campusMVP. Y esto es sólo el principio, pues a lo largo del verano lo ampliaremos y además iremos lanzando muchas cosas nuevas que estamos seguros de que te van a encantar.
Hemos hecho caso a todo lo que nos han dicho los alumnos últimamente y encontrarás muchas novedades: cursos más baratos, más tiempo para hacerlos, descuentos para desempleados, posibilidad de pagar todos los cursos con tarjeta y cursos gratuitos para que pruebes como se siente un alumno de campusMVP.
Cuantos más cursos elijas más descuentos puedes obtener. Y también tenemos soluciones específicas para las empresas. Nunca fue tan fácil construirte una formación a la carta.
Consulta nuestra nueva oferta formativa y aprovecha el verano para aprender. Échale un vistazo también a la nueva colección de cursos 'Al día en un día', que te permitirá controlar los fundamentos de las últimas tecnologías en unas horas de formación rápida, y a un precio muy asequible.
Finalmente lanzamos una nueva convocatoria de nuestros cursos de formación oficial Microsoft. Comienzan el día 15 de Julio y tenemos varias novedades. A nuestro exitoso curso 70-536 que hemos reformado y mejorado, se le unen la nueva certificación en desarrollo web para Visual Studio 2008, así como un curso oficial de desarrollo de aplicaciones seguras y el curso oficial de Transact SQL para SQL Server 2005-2008.
No te quedes sin plaza y apúntate cuanto antes. ¡Comenzamos el día 15!.
Apúntate a nuestro boletín para estar al tanto de todas las novedades y recibir trucos de programación, noticias y nuestras clásicas secciones de "Gambadas" y "Frikadas", jeje
Pues nada, ahí queda eso :-)
|
|
Copyright © 2008 José Manuel Alarcón Aguín. All rights reserved.
|
|