Depurar scripts

04/05/2007

Tengo el escritorio lleno de scripts (tanto VBScript como JavaScripts) que automatizan infinidad de procesos. Una de las tareas más arduas a la hora de programarlos es la depuración. Hasta hoy venía usando el fantástico método de plantar MsgBox() antes y después de cada línea de código susceptible de dar un error.

Tras unas horas perdidas detrás de un problema muy bobo, Google me ha mostrado la luz:

C:\> CScript MiScript.vbs //X

Con este insignificante parámetro ( //X ) es posible ejecutar los scripts en modo debug y usar tu debugger preferido para ir trazando la ejecución, marcando puntos de interrupción, inspeccionando variables, etc. vamos, como con cualquier programa compilado.


SubmitDisabledControls en ASP.NET 2.0

14/12/2006

Llevo unos días trasteando ASP.NET 2.0 y me he encontrado con un montón de problemas, funcionamientos inesperados y quebraderos de cabeza que, si bien de uno en uno son entretenidos de solucionar, todos de golpe y a cada paso que doy se hacen un poco desesperantes. Supongo que es el precio a pagar cuando uno se mete a investigar sin haberse empapado bien las especificaciones.

El último de los problemas que he solucionado y con diferencia el que más me ha costado ha sido un proeblema con los campos desactivados de un formulario. Con frecuencia se hace necesario mostrar una serie de campos en un formulario conteniendo una serie de datos pero no permitiendo que estos datos sean modificados por el usuario. Para ello se puede desactivar el campo estableciendo su atributo disabled="disabled". Pues bien, si hacemos esto, al hacer un postback del formulario al servidor los datos contenidos en los campos desactivados no se envían. Después de mucho Googlear di con el error y este se llama, como en muchos casos, especificaciones: en efecto… el estandar propone que los valores de los campos desactivados no sea enviado de vuelta al servidor en el postback.

Sin embargo, ASP.NET 2.0 provee de un mecanismo sencillo y eficaz que fuerza al navegador a enviar este tipo de campos. Realmente lo que hace es, justo antes de hacer el postback, cuando ya el usuario no puede modificar los valores, volver a activar todos los campos, logrando así que se envíen sus valores. El mecanismo en cuestión no es más que la inclusión del atributo SubmitDisabledControls en el form correspondiente. La cosa quedaría así:

<form id="form1" runat="server" SubmitDisabledControls="True">

Es un atributo que aparece en ASP.NET 2.0. Para quienes uséis ASP.NET 1.1 o anteriores deberéis buscar una forma alternativa como, por ejemplo, preparar una función javascript que, justo antes de hacer el postback/submit, vuelva a activar los controles o, o usar la propiedad ReadOnly de los INPUT en vez de Disabled o, en vez de usar controles INPUT desactivados, usar texto plano (que no es editable), etc.

EDIT: Sigue sin funcionar adecuadamente. Solución provisional: en vez de desactivar los controles con disabled="disabled" usar onfocus="this.blur();". Dejo los comentarios activados por si algún alma caritativa quiere sacarme de la ignorancia. Gracias.


Graficas 3D

23/08/2006

No hay mucho que hacer estos días en el trabajo, así que me dedico a leer manuales, aprender e investigar acerca de cosas que puedan ser útiles. No es el caso de esta pequeña chorrada que se me ocurrió hacer en un par de horas. Se trata de un programa que genera la gráfica en 3D de una función de doble variable. El programa en sí es un ejercicio de discretización del espacio. La gráfica gira en torno a 2 ejes y es posible ajustar el rango a representar y el nivel de detalle, influyendo esto último en la densidad de muestreo de la función.

Gráfica 3D de una función de doble variable.

Está desarrollado en VB.NET 2005 usando las nuevas capacidades de generación de código “on-the-fly” del .NET Framework 2.0. Para la parte gráfica he usado OpenGL y Tao. En el próximo ratito de aburrimiento implementaré la representación de ecuaciones y alguna opción extra como seccionar una gráfica con un hiperplano arbitrario y operaciones booleanas entre ecuaciones. De momento dejo aquí el ejecutable y el código fuente por si le interesa a alguien.