Bueno, esto es de estas cosas que crees que a ti no te van a pasar pero luego resulta que sí, que te pasan :-)
Y es que un cliente nuestro ha encontrado la aguja en el pajar. Una aplicación que teníamos producía un error inexplicable en un par de clientes de este cliente, y no sabíamos de qué era. Viendo el registro de errores pudimos llegar a dar con el problema.
Resulta que cuando el idioma del navegador del usuario es Búlgaro (bgt-BG) o Eslovaco (sk-SK) y tienes el cambio automático de cultura activado, el control RangeValidator puede romper si estás validando fechas. Sí, es que la aplicación que habíamos hecho está internacionalizada y nuestro cliente tiene clientes en todas partes de europa, así que...
Al producirse el error la página incluso deja de cargar, ya que rompe durante la asignación de los valores máximo y mínimo si éstos se establecen mediante código (como es normal cuando se trata de fechas).
El problema es que en estos países el formato de fechas es raro de narices (algo así, "11. 4. 2008 r.", fíjate enlos espacios tras los puntos) y el validador se vuelve loc y no es capaz de interpretarlas. Sin embargo la clase DateTime con su método Parse sí que es capaz por lo que hace sospechar del modo en el que está implementado el validador :-(
Lo curioso del tema es que este error estaba ya controlado por Microsoft en ASP.NET 1.1 (http://support.microsoft.com/kb/937096/en-us), pero por lo que se ve no se solucionó del todo en las otras versiones. Ahora funciona con el húngaro pero no con el búlgaro ni el esloveno.
La única forma que he encontrado a bote pronto para solucionarlo es asignar las fechas en la carga a las propiedades de rango usando el formato habitual en castellano (dd/mm/aaaa), que es reconiocido sin problemas aunque el local sea uno de los conflictivos.
Ya he notificado el bug a Microsoft, así que a ver si lo solucionan definitivamente para un próximo Service Pack o para un parche específico.
ACTUALIZACIÓN (7-Mayo-2008):
Hoy me han escrito desde el equipo de desarrollo de ASP.NET para decirme que ya tienen el bug corregido y que será incluido en el Service Pack 1 de .NET Framework 3.5 (que incluye también a .NET 2.0).
Recientemente instalé el nuevo Service Pack 1 para .NET 2.0 (y .NET 3.5) en un servidor de producción. De repente la aplicación empezó a producir resultados inexplicables en unas rejillas de la aplicación de un cliente. De hecho desaparecían multitud de registros de éstas, aunque las consultas de las que dependían se seguían realizando sin problemas. Era un problema bastante raro y pensamos en un bug del SP1.
El caso es que fué una combinación de un error nuestro y un cambio de comportamiento en el SP1 de .NET 2.0. Lo explico porque puede interesarle a bastante gente.
De hecho este problema tiene mucho que ver con otro que ya ocmenté en este blog hace unos meses sobre el formato de fechas en los campos enlazados de una rejilla. En ese post además mostraba el código fuente de .NET que involucraba a este problema.
En el SP1 han cambiado ligeramente el comportamiento del enlazado a datos de campos DataBound en rejillas.
El caso es que el programador de nuestra aplicaicón había puesto en la rejilla un formato erróneo en dos campos almacenados como cadenas en la BD, colocando esto en la propiedad DataFormatString:
"{0:d}"
Esto es un formato no válido para un dato de tipo String, que es lo que se guarda en la base de datos. El formato “D” usado aquí es sólo aplicable a Enteros (lo pone bien claro la documentación de .NET), y el correcto sería por ejemplo “F”. Por lo tanto el problema se solucionaba cambiando la cadena de formato de la rejilla a, por ejemplo:
"{0:F2}"
De este modo se formatea como un número decimal en coma flotante con dos decimales, que es lo que nos interesaba.
En la versión anterior previa al SP1, de hecho no se estaba aplicando el formato en absoluto y por eso no rompía (consulta el código del post relacionado que menciono arriba) ya que la propiedad HtmlEncode es true por defecto. En el SP1 han cambiado este código y ahora sí que se aplica antes del formato de cadena.
De hecho han introducido una propiedad nueva llamada HtmlEncodeFormatString que por defecto vale true y que nos ayuda a controlar este aspecto.
Espero que esto le pueda ayudar a más gente.
Saludos
JM.
Interesante noticia la aparecida hoy en los medios americanos respecto a este anuncio del gigante de los buscadores. Se trata de App Engine (ver el motor del grafiquito adjunto, se han roto la cabeza con el logo), un nuevo servicio a través del cual Google ofrece a los desarrolladores su infraestructura de red y de servidores para albergar aplicaciones Web. Y lo mejor es que es completamente gratuita.
De momento se lo darán sólo a los 10.000 primeros que lo soliciten. También tendrá algunas limitaciones, pero vamos, que si mi aplicación Web las alcanzara creo que me daría exactamente igual pagarles un pasta por dejarlo ahí: 10 GB de transferencia diaria, y 500 MB de almacenamiento (esto último es quizá un poco escueto si quieres guardar contenidos). Con esa transferencia se estima que podrías servir alrededor de 5 millones de páginas vistas diarias. Ahí es nada. A partir de ese lïmite empezarán a cobrar.
Podrás utilizar BigTable, el sistema de almacenamiento distribuido de Google (usado por ejemplo por Google Maps), y su sistema de archivos propietario GFS. Con ello obtienes también el uso de la infraestructura de red y de servidores redundantes propia de Google (la más grande del mundo).
El único problemilla es que, de momento, sólo se permiten aplicaciones escritas en Phyton. Y desde luego dudo que nunca se vea soporte para .NET, pero cualquiera sabe. :-(
Microsoft: toma nota y danos algo similar a los desarrolladores Web de .NET :-)
Esto lo he leído hoy en Engadget y he flipado bastante. Reproduzco:
"Muchos usuarios han tenido problemas usando las tarjetas de sonido de Creative en Vista, y un habilidoso programador, Daniel Kawakami, se las arregló para escribir sus propios drivers. Resulta que el software proporcionado por Daniel es aún mejor que el del fabricante, y por eso sus programas llegaron a hacerse muy populares.
El problema empieza cuando Daniel pide donaciones para poder dedicarle más tiempo a la programación, y Creative no toma las cosas bien, por lo que procede a amenazarlo públicamente en los foros.
La respuesta de Daniel es simple y clara: no producirá más controladores, pero se siente molesto porque dice que Creative simplemente podía haberle enviado un email. A nosotros nos parece que Creative debería invertir más tiempo contratando a Daniel para que haga lo que ellos no pueden, y menos tiempo amenazándolo."
Yo me pregunto: ¿realmente Creative no es capaz de hacer drivers mejores? ¿No tiene dinero para fichar a Daniel? o, como bien sugiere un lector en el post original, ¿no será que directamente no les interesa crear buenos drivers para sistemas nuevos de modo que tengas que actualizar el hardware y así su negocio vaya mejor, y por eso le dan caña al bueno de Daniel?.
A mi por ejemplo me pasó con una webcam Logitech carísima que me compré. A los pocos meses salió Vista y esta gente no ha sacado drivers. pasaron los meses y siguen sin sacar drivers y por lo visto no tienen intención de hacerlo tampoco. Resultado: me gasté un pastón (era de las cámaras más caras en el momento), la usé tres o cuatro meses y al final para poder tener webcam en Vista tuve que comrparme otra nueva (por supuesto no Logitech, claro).
En fin...
Pues ahora, justo al volver de comer, me he encontrado con un correo muy atento de la gente de Microsoft en el que me comunicaban que por cuarto año consecutivo he sido reconocido de nuevo como Most valuable Professional (MVP) por Microsoft Corporation.
Así que ya me ha alegrado la tarde :-)
Otro año más dando guerra como MVP por estos pagos. Espero que os pueda aportar mucho a todos desde el Blog, charlas, artículos, cursos y todas estas cosas en las que siempre estoy metido.
Un saludo.
Hoy, casi de casualidad, he encontrado este estupendo post de Laurence Moroney sobre cómo montar unas plantillas en Visual Studio que nos permitan desarrollar con Silverlight usando lenguajes dinámicos como Ruby, Python o JavaScript dinámico.
Espero que os sirva :-)
Hace poco comentaba en este blog que estaba disponible un parche que mejoraba Visual Studio 2008 para el desarrollo Web, y sobre todo aceleraba el ya de por si rápido diseñador Web.
En esa ocasión sólo estaba disponible en inglés. Ahora ya está disponible en castellano y otros idiomas también.
Estos retrasos en tener en otros idiomas las cosas es lo que hacen que me suela instalar todo en inglés. No deja de ser otra forma de colonialismo de los USA ;-)
¡Hala! Que te sea útil.
PowerCommands es un complemento para Visual Studio 2008 que incorpora al entorno una colección de utilidades relacionadas con la ventana de explorador de soluciones, para facilitarnos un poquito la vida a los programadores:

Puedes cerrar de golpe el árbol de proyectos completo (algo muy útil en proyectos grandes donde normalmente hay que ir uno a uno y es morirse. No sé como esto no lo tiene por defecto el entorno), Copiar una clase y pegarla en otro proyecto, copiar y pegar todas las referencias entre proyectos, abrir la carpeta contenedora, abrir una línea de comandos en esa carpeta, quitar y reordenar los using de un módulo, etc...
Puedes descargarlo (y también su código fuente) desde la página de MSDN Code gallery.
Como seguramente sabrás si eres asiduo lector o lectora de este blog, hace un par de semanas participé como ponente en el lanzamiento de Visual Studio 2008, durante los TechDays, The Evolution Show, en Madrid.
Como parte de ese evento, aparte de la consabida ponencia, participé en una sesión de Ask The Experts (ATE) el segundo día por la tarde, enla que tuve oportunidad de conversar con mucha gente (antes,durante y después) sobre todo tipo de cuestiones técnicas relacionadas con el desarrollo Web. El ATE es, básicamente, una lotería. LLegas, y la gente que está allí te empieza a preguntar lo que se le ocurra, así que nunca sabes por dónde te van a salir. En esta ocasión la cosa fue estupenda, y los asistentes hicieron muchas preguntas interesantes. ¡Gracias a todos los que asistísteis! :-)
Los buenos chicos de Microsoft grabaron todo el ATE para compartirlo en su página Comando Tomate, la última ida de olla de esos cracks que trabajan en DPE de Microsoft Ibérica.
Creo que a muchos de los que visitáis asiduamente este blog os pueden interesar algunas de las preguntas que contesté allí, así que os dejo los correspondientes vídeos (necesitarás Silverlight 1.0 para poder verlos).
· En el primero de ellos hablo sobre cómo construir aplicaciones Web en varias capas usando controles ObjectDataSource. También sobre qué es Expression Web y cómo encaja dentro de Visual Studio 2005/2008. Finalmente también contesto a la preocupación de uno de los asistentes sobre cómo proteger el código de nuestros desarrollos con ofuscadores:
· En el segundo vídeo me meto en harina con un tema peliagudo que me lanza un asistente algo despistado. Me pregunta sobre cómo manejar consultas con miles de registros en la interfaz de usuario, algo que considero muy interesante. El problema es que el buen hombre estaba todo el rato pensando en aplicaciones de escritorio (Windows Forms) y mi charla era de desarrollo Web, por lo que todo lo que le comentaba no le convencía y negaba con la cabeza continuamente, lo que me estaba poniendo un poco frenético, la verdad. Al final se dió cuenta de que estábamos hablando de cosas diferentes. No obstante el tema era de mucho interés y creo que lo que cuento puede interesar a muchos (siempre pensando en desarrollo web, claro). También hablo de cómo encapsular capacidades AJAX en controles de usuario para reutilizar en las páginas:
· Por fin, en el último vídeo del ATE hablo sobre el trabajo en equipo con Expression Web y Visual Studio, y sobre cómo es la mejor forma de utilizar DataSets tipados y LINQ To SQL en aplicaciones con requisitos cambiantes:
¡Espero que os guste! :-)
Leo estos días el último incidente en el que un producto de consumo infecta a los pobres compradores que se lo llevan para casa. Se trata de un marco digital de 10,4 pulgadas que se vendía a través de la marca Best Buy pero era realmente de la marca Insignia. El caso es que el marquito llevaba un virus metido de fábrica que, al conetcarlo al ordenador con el cable USB, infectaba al equipo del sufrido propietario.
Al parecer, según dicen la nota de prensa que han sacado, el virus era bastante antiguo y cualquier antivirus más o menos actualizado lo debería pillar y borrarlo, pero claro, eso no quita que sea un peligro enorme. Se han infectado un número indeterminado de clientes, pero no todos los marcos tenían el virus. Han retirado el producto del mercado, pero el que se lo haya llevado para casita que se aguante ;-(
Al menos no han tenido las santas narices de decir que la culpa es de Windows por que tiene muchos virus orientados hacia él, como hicieron los de Apple hace un año cuando les pasó lo mismo con el iPod. Según Greg Joswiak, vicepresidente de Apple:
"As you might imagine, we are upset at Windows for not being more hardy against such viruses, and even more upset with ourselves for not catching it."
Con un par. Sí señor. Puedes ver las declaraciones completas en el artículo de Computer World original.
Esto pasa hasta en las mejores familias, pues no hace mucho le ocurrió nada menos que a Seagate que envió al mercado, infectados de fábrica, "un número indeterminado" de discos Maxtor de 500 GB con un troyano que se dedicaba a robar claves de juesgos on-line.
En fin, también en la vida digital hay que tener cuidado con quién metes en casa, jeje
|
|
Copyright © 2008 José Manuel Alarcón Aguín. All rights reserved.
|
|