lunes, abril 17, 2006

Nueva serie terminada

Y ya está actualizada también la descarga de XSight RT:
  • Recuerde que este es un proyecto para .NET v2.0, con Visual Studio 2005.
  • De momento, seguirá viendo en la lista de ficheros una descarga titulada "Anvil/Hammer". Se trata de una versión obsoleta del editor de código utilizado en XSight RT y en las pruebas de Freya. La versión más reciente ya se incluye con el nuevo XSight RT, como parte de la misma solución, para no complicarle la vida con instalaciones en la GAC.
  • El ejecutable (la aplicación RayEd) busca el fichero de ayuda en el mismo directorio ejecutable. En la descarga he quitado las copias de xsight.chm de los directorios donde se generan las versiones debug y release de RayEd, para ahorrar espacio. Si quiere poder usar la ayuda (contiene información sobre el lenguaje de escenas) tiene que volver a copiar el fichero en las ubicaciones correspondientes.
Quiero publicar el código de XSight RT, más adelante, al menos cuando haya reescrito el compilador de escenas. Este utiliza ahora un motor LALR... con lo que estoy matando gorriones a cañonazos. Por supuesto, acepto cualquier sugerencia o idea al respecto. Creo que ya lo he dicho, pero es probable que haga una versión nativa del motor con Visual C++, para practicar un poco mi C++ y que no se oxide demasiado.



Ya he actualizado la zona de descargas con el manual y los ejercicios de la serie A. Ambas descargas aparecen en un mismo fichero (ADO.NET Serie A): ¡cuidado, que tiene 6 megas y poco! No he actualizado todavía la nueva descarga de XSight RT, porque tengo que unir dos descargas en una... y por ahorrarme cuatro duros en la base de datos, ahora tengo que lidiar con un fichero XML de porquería.

El aviso por email puede que le llegue con desfase: como los servidores de correo están tan sensibles con el asunto del spamming, tengo que enviar los correos en grupos muy pequeños. Por cierto, la IP fija que me asignó Auna y que ahora administra Ono aparece directamente en los bloques de direcciones de la lista negra de varias compañías anti-spam. Pero eso a Auna, y ahora a Ono, le trae sin cuidado. ¿Da la impresión de que me estoy hartando de mi proveedor de acceso?



Series A y D¡Terminada la serie A del curso de ADO.NET! Es un poco tarde y dudo que pueda levantarme... iba a escribir "mañana", pero es "hoy"... a una hora decente. Por eso escribo esta nota:
  • Quienes ya habéis comprado la serie D: Mañana en cuanto esté en pie, paso los ficheros (ejercicios y manual) al formato de descargas y envío el aviso. Si alguien ha perdido los datos de la zona de descargas de cursos, que me dé un toque por correo electrónico. Si tiene el curso en formato CD, los datos aparecen en la etiqueta azul que va pegada dentro de la caja.
  • Importante: durante toda esta semana, hasta el sábado 22 de abril a las 23:59 horas (hay que ponerse solemne), se podrá seguir adquiriendo la serie D y recibir gratuitamente las series A, B, C... todo por el precio actual. A partir de ese momento, como advertí en su momento, las series A y D se comercializarán conjuntamente... y el precio cambiará. Por ejemplo, la opción de compra que ahora sale por 108 euros, con los gastos de envío incluídos, pasará a costar 129 euros.

... y prometo ponerme al día con el correo atrasado esta semana. Esto de probar un curso a distancia lleva más trabajo de lo que parece.

lunes, abril 10, 2006

Signos vitales

... sigo vivo, aunque no lo parezca. Me he encerrado durante toda la semana pasada para adelantar los cursos a distancia e ir preparando lo que va a hacer IntSight a lo largo del año. Me iré poniendo al día esta semana con el correo electrónico (mil perdones por las demoras), las páginas y el resto de la "interfaz de usuario".

Noticias:

  • ¡Seminarios presenciales! Entre hoy y mañana publicaré fecha y condiciones. Quiero empezar el sábado 22, si es posible, y repetir el 29. Tengo pensado un temario al estilo "guerrilla course": ritmo rápido presencial + material abundante para llevar a casa + soporte docente posterior.
  • Hay ya una beta 4 de la serie A de curso de ADO.NET v1.1. Las versiones para la v2.0 están muy adelantadas, porque he ido retocándolas en paralelo.
  • Si ya usted tiene la serie D, recuerde que no tiene que pagar nada por las series A, B y C... y tampoco por la actualización a la 2.0.
  • Lo que sí voy a retocar son los precios para nuevas compras... pero prometo no hacerlo "a traición", sino esperar a que la gente regrese de las vacaciones de Semana Santa y dar algo de plazo para compras de última hora.

Estoy muy contento con el comportamiento de VS2k5. Ya me ha llegado el paquete de la MSDN Pro. Digo que me da gusto porque, entre otras cosas, he podido bajarme la versión Pro de Visual Studio 2003 (¡estaba trabajando con Visual C# 2003 Estándar!) y utilizarla para compilar el código fuente de POV Ray (con Visual C++, pero sigo prefiriendo C++ Builder, no se preocupe...). Vienen, efectivamente, las Office Tools, y el Virtual PC 2004, para instalar varios sistemas operativos en un mismo ordenador. Indagando sobre el enlace a datos para los cursos a distancia, he encontrado información útil, y da gusto usar el nuevo sistema de transacciones... aunque necesito hacer más pruebas.

martes, abril 04, 2006

Transacciones

Estoy ahora con la serie C del curso de ADO.NET: hay novedades suficientes en la 2.0 como para redactar directamente esta parte para la nueva versión. Voy a mantener el material original, centrado en los adaptadores de datos, porque sigo creyendo que es esencial dominar el funcionamiento de SqlDataAdapter para trabajar bien con los nuevos table adapters. Pero es en esta serie donde voy a incluir el nuevo sistema de adaptadores de tablas, por lo que tendré que añadir unos cuantos ejercicios más.

Hay otra novedad indispensable en ADO.NET: el nuevo espacio de nombres System.Transactions. Es probable que el soporte para transacciones en ADO.NET 1.0 haya sido tan malo (sí, era muy malo) porque ya estaba entre los planes la adición de esta funcionalidad. La idea es muy sencilla: ¿quiere iniciar una transacción? Cree un objeto de la clase TransactionScope con la ayuda de una instrucción using. Todo el código que se ejecute mientras el objeto creado está vivo, estará "protegido" por la transacción. No hace falta que ese código se ejecute dentro del mismo método. La transacción se convierte en una especie de atributo global del proceso, durante todo el tiempo en que está activa. Cuando quiera confirmar la transacción, llame al método Commit de la instancia creada. Si por el contrario, abandona la sección protegida sin confirmar, los efectos de las operaciones realizadas se cancelan de forma automática.

¿A qué se parece este sistema? Efectivamente, ¡se parece a las transacciones "declarativas" de COM+! Naturalmente, la implementación de esta funcionalidad en .NET 2.0 es mucho más fácil que la implementación en COM+. En COM+ se utiliza una técnica compleja que intercepta llamadas en tiempo de ejecución. System.Transactions, por el contrario, al estar contenido dentro de la plataforma, es mucho más eficiente, sobre todo cuando no hay que lidiar con transacciones distribuidas entre distintos administradores de recursos.

Puede que, si no conoce COM+, no comprenda el motivo de mi entusiasmo. Intentaré explicarlo en dos párrafos: En cierto sentido, el manejo de transacciones se parece al manejo de excepciones. ¿En qué sentido? ¡En que no se puede encapsular! Ambas son tareas que se deben distribuir a lo largo y ancho del código fuente. Esta es una consecuencia indeseada asociada al concepto de composición modular. Suponga que escribimos un método para hallar la raíz cuadrada. Exigimos que nos proporcionen un valor positivo. ¿Qué hacer si alguien, deliberadamente o por error, nos pasa un número negativo? Cualquier cosa que hagamos es mala... ¡porque, al tratarse de un método sumamente reutilizable, no sabemos dónde ni cómo se va a usar! Lo único sensato: disparar una excepción, y dejar la responsabilidad de su manejo a quien ensamble el método en un sistema más complejo. El, o ella, sabrán mejor que nosotros cuál será la mejor política.

¿Y qué ocurre con las transacciones? Usted escribe una rutina para cargar un importe a una tarjeta de crédito. ¿Debe encerrarla en una transacción? Puede que la rutina termine usándose por separado; puede que la rutina forme parte, finalmente, de una operación mucho más compleja. Y, lo más complicado y a la vez real, puede que ocurran las dos cosas, y que la rutina sea utilizada en los contextos más diversos. Tiene sentido hablar del éxito local del cargo en tarjeta. Si esta operación falla, y en el contexto que se ejecuta no existe una alternativa (como el pago por transferencia), la operación debe fallar. Pero si triunfa, esto no significa que el proceso que la engloba haya también triunfado. En todos caso, se tratará de un voto a favor de una de las partes del sistema.

Por este motivo son importantes sistemas como COM+ y el nuevo sistema en .NET: permiten "componer" operaciones que trabajan con transacciones. Y esto significa que es mucho más sencillo crear módulos verdaderamente reutilizables.

lunes, abril 03, 2006

Mr. Hejlsberg

"When you don't code, you tend to become one of those architects who thinks everything is possible"

Anders Hejlsberg