Migración de Outlook entre equipos

Bueno, obviamente esto viene del post en el que el otro día ocmentaba que estuve migrando mi equipo del trabajo desde XP a Vista…


Hasta ahora siempre había migrado el Outlook «a las bravas», es decir, copiaba el archivo .pst y santas pascuas. Pero haciendo esto me perdía muchas cosas, como por ejemplo la configuración de las cuentas de correo o los correos frecuentes a los que les envío entre otras. Yo tengo más de 10 cuentas de correo así que no es ninguna tontería. Esta vez decidí hacerlo más «profesional».


Primero veamos en dónde estan todos los archivos de Outlook en Windows XP. Están ubicados en dos carpetas fundamentalmente (si no los hemos cambiado):



C:Documents and Settings[usuario]Application DataMicrosoftOutlook
C:Documents and Settings[usuario]Local SettingsApplication DataMicrosoftOutlook


o análogas (pueden cambiar en castellano u otros idiomas, pero te será fácil enocntrarlas).




















































Archivo de Outlook Extensión o nombre Carpeta por defecto
Carpetas personales .pst Outlook
Firmas .rtf, .htm, y .txt Signatures
Fondos .htm Stationery
Plantillas .oft Templates
Nombre para autocompletar .nk2 Outlook
Ajustes de impresión personalizados OutlPrnt Outlook
Personaliz. barras herramientas Outcmd.dat Outlook
Grupos de enviar y recibir .srs Outlook
Diccionarios .dic Proof
Carpetas de caché .ost Outlook


Además de copiar estos archivos para llevarnos las definiciones de las cuentas debemos hacer una copia de seguridad de la siguiente clave del registro completa:



HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWindows Messaging SubsystemProfilesOutlook


Esto guardará todas las definiciones pero NO LAS CLAVES (normal). Estas tenemos que definirlas de nuevo en el nuevo equipo, un por una, así que ojo.


Otro detalle interesante: los ajustes del filtro anti-spam se guardan en un mensaje oculto dentro de la bandeja de entrada, por lo que al mover el .pst se conservan de un equipo a otro 🙂


¿Y en Windows Vista?


Vale, ahora que ya tenemos lo de XP guardadito hay que moverlo a la instalación de Vista una vez que termines de instalar Outlook.


En Vista las dos carpetas «padre» que debemos considerar para guardar los ajustes son estas:



C:Users[usuario]AppDataRoamingMicrosoftOutlook
C:Users[usuario]AppDataLocalMicrosoftOutlook




















































Archivo de Outlook Extensión o nombre Carpeta por defecto
Carpetas personales .pst LocalMicrosoftOutlook
Firmas .rtf, .htm, y .txt RoamingMicrosoftSignatures
Fondos .htm RoamingMicrosoftSignatures
Plantillas .oft RoamingMicrosoftSignatures
Nombre para autocompletar .nk2 RoamingMicrosoftOutlook
Ajustes de impresión personalizados OutlPrnt RoamingMicrosoftOutlook
Personaliz. barras herramientas Outcmd.dat RoamingMicrosoftOutlook
Grupos de enviar y recibir .srs RoamingMicrosoftOutlook
Diccionarios .dic RoamingMicrosoftProof
Carpetas de caché .ost LocalMicrosoftOutlook


Restauramos además las cuentas, las editamos para ponerles las claves y ¡Listo!.


En el caso de un perfil móvil los .PST se suelen guardar en el servidor en alguna carpeta compartida estilo \servidorcorreos$usuario, por lo que normalmente no será necesario moverlos, pero de lo demás puedes sacar mucho partido.


Espero que a más de uno esto le resulte útil.

Habilitar auto-completar en controles de Windows Forms

Se trata éste de un truco muy útil y  muy sencillo, si bien muchos programadores desconocen.


En la versión 2.0 de la plataforma .NET algunos controles para interfaz de usuario con Windows Forms (en concreto los cuadros de texto y los combos, tanto los normales como los que van dentro de los ToolStrip), permiten mostrar a los usuarios sugerencias acerca de los datos que están introduciendo de una manera muy sencilla. Esta caraterística no estaba presente en la versión 1.x de la plataforma.


Para ello basta con seleccionar el control en cuestión y ajustar sus propiedades AutoCompleteMode y AutoCompleteSource (ver figura lateral).


La primera nos sirve para indicar de qué modo se hara el auto-rellenado. Puede ser simplemente una sugerencia desplegada por debajo (estilo navegador Web), que el texto se vaya autocompletando automáticamente dentro del control o ambas cosas.


La propiedad AutoCompleteSource sirve para indicar de dónde se sacarán las sugerencias de rellenado automático. Pueden obtenerse del sistema de archivos (como en la figura), de la lista de URLs recientes, de la lista de archivos recientes, de estas dos últimas a la vez, de las URLs y el sistema de archivos al mismo tiempo, o en el caso de los combos, de los elementos que éste contiene.


En esta figura, por ejemplo, se ve el autorellenado a medida que escribimos una ruta en el disco, con las propiedades que acabamos de ver:



Lo más intresante, quizá, sea la posiblidad de rellenarlo con los valores que nosotros consideremos. Para conseguirlo debemos escoger el valor CustomSource para la propiedad AutoCompleteSource. Ahora basta con ajustar la propiedad AutoCompleteCustomSource que es una colección de cadenas de texto de tipo AutoCompleteStringCollection. Para meter nuestros propios elementos podemos escribir:

        private void Form3_Load(object sender, EventArgs e)
{
AutoCompleteStringCollection s = new AutoCompleteStringCollection();
s.Add(«Antonio»);
s.Add(«Amaya»);
s.Add(«Azuzena»);
//… rellenar con más elementos o sacarlos de una BD u otro lugar…
this.textBox1.AutoCompleteCustomSource = s;
}

Con esto conseguiremos que se sugieran nuestros propios elementos. Podemos rellenarlos manualmente en tiempo de diseño con el editor de esta propiedad que ofrece el inspector de propiedades de Visual Studio 2005.

Cómo personalizar la barra lateral de los diálogos de archivo y los comandos "Send To" en Windows Vista



Ya hace una temporada larga empecé con una serie de posts sobre Windows Vista que luego abandoné no sé muy bien porqué. He decidido que los iré retomando de vez en cuando intercalados con mis posts sobre programación porque son trucos sencillos pero que se agradecen mucho.


Por ejemplo los dos de hoy…


El primero de ellos tiene que ver con la personalización de la barra lateral de los diálogos comunes de archivos (ver figura de la izquierda). Ésta, por defecto, ofrece una serie de elementos bajo el epígrafe «Favoritos», pero generalmente no serán nuestros favoritos. Un «power-user» normalmente no guarda las cosas en el escritorio ni usa para nada la carpeta de Música o Imágenes, ¿verdad?. Así que lo mejor es cambiar esos enlaces enseguida.


En XP ya había algo similar pero eran un número limitado de iconos (5 o 6, ahora no lo recuerdo) y para personalizarlos había que tocar el registro y los cambios no eran reconocidos, por ejemplo, por los diálogos comunes de Office que eran especiales aunque parecían los mismos.


Para conseguir la personalización en Vista la cosa es mucho más sencilla y flexible. Básicamente todos los accesos directos a ubicaciones concretas de nuestros disco o de nuestra red que pongamos en la carpeta:


C:UsuariosusuarioVínculos


o análoga, se mostrarán para el usuario indicado en la barra lateral de favoritos. Esta carpeta, aunque en castellano la interfaz del explorador la muestra con este nombre, realmente los nombres reales de las carpetas en el sistema de archivos son:


C:UsersusuarioLinks


Así que tenedlo encuenta si queréis acceder de manera independiente del idioma, por ejemplo desde un programita propio.


Otra carpeta muy útil


No sé tú, pero yo utilizo muchísimo el menú «Enviar a» del explorador de Windows. Sobre todo con la excelente utilidad NotePad2, para enviar archivos de código que quiero inspeccionar con coloreado de sintaxis pero sin tener que abrir Visual Studio u otro editor pesado.


Puedes colocar cualquier programa que desees en el menú contextual de un archivo, dentro de «Enviar a» simplemente colocando un enlace en la carpeta (ruta independiente del idioma):


C:usersusuarioappdataRoamingMicrosoftWindowsSendTo


(Cuidado por que la carpeta Appdata está oculta, tendrás que habilitar el mostrar carpetas ocultas para poder verla en el explorador).


Lamentablemente, al contrario que en versiones anteriores de Windows, no es posible crear subcarpetas dentro de ésta para organizar nuestros accesos directos. Mal por Microsoft por quitar esta posibilidad. De todos modos es muy útil igualmente.


Espero que te resulten útiles. Próximamente más 🙂

Migración a Windows Vista en un dominio AD con perfiles móviles: un infierno.

Llevo usando Windows Vista en mi portatil personal desde que salió internamente la versión definitiva (RTM) del sistema. Además llevo años probando las diversas alfas y betas (incluso esa primera alfa «pirata» que se liberó sin saber bien de donde a Internet hace ya muchos años, poco después de salir XP). El caso es que estoy muy contento con el sistema. Tiene algún detalle feo (por ejemplo que los inadecuados diálogos de copiado de archivos que le han metido dan la sensación de que tardan mucho más que antes), pero la verdad es que siempre me ha gustado mucho el sistema, incluso en las betas, e incluso a pesar del «peñazo» que supone el diálogo UAC que te pregunta si quieres seguir cada dos por tres.


Bueno, el caso es que como estoy muy contento con él en mi portátil, el pasado miércoles aprovechando que era festivo en la comunidad en la que resido, decidí aprovechar que estaba de «Rodriguez» y migrar mi equipo de la oficina a Windows Vista. Supuse que sería coser y cantar. nada más lejos de la realidad.


Mi portátil es de uso personal, desvinculado con el uso empresarial que hago del equipo de la empresa. Por lo tanto éste no lo tengo agregado a ningún dominio, y cuando lo actualicé a Vista todo fué como la seda. En la oficina no ha pasado lo mismo.


Mi sorpresa fué mayúscula cuando, tras haber formateado e instalado el sistema nuevo, aunque me autenticaba perfectamente contra el Directorio Activo de la empresa, todo el tiempo me salía un mensaje diciendo que no se podía cargar mi perfil móvil. ¿?¿?


El caso es que los perfiles de Vista son completamente diferentes a los de XP y Windows Server 2003. Distintos en el sentido de que la estructura de directorios de los mismos no se parece casi en nada. Por lo tanto cuando entras en tu perfil móvil y éste se descarga desde el servidor central en el que se almacenan, al ser la estructura tan diferente no lo reconoce y te devuelve ese error. El resultado es que se genera un perfil vacío temporal que sólo dura lo que dure tu sesión. Así que todos los cambios que hagas así como tus archivos principales (documentos, escritorio, favoritos, etc…) no se conservan cuando vuelves a entrar la siguiente vez. Es decir: no funcionan los perfiles móviles. Un fiasco, vamos.


¿Se puede solucionar?


¡Claro! pero no es un camino de rosas directo. Hay un documento de 39 páginas de Microsoft, que explica las diferencias entre la estructura de los datos de un perfil en Vista y en XP, así como la forma de utilizar la característica de redirección de carpetas de una política de grupo (que viene aumentada para Vista y abarca algunas carpetas más que antes) para conseguir un «mapeado» entre unos y otros. con él se supone que conseguirás tener un perfil compartido que te funcione entre Vista y XP de modo que puedas iniciar sesión en ambos sistemas indistintamente (al fin y al cabo para eso vale un perfil móvil: para poder moverte por tu empresa e iniciar sesión en cualquier maquina).


De todos modos, si bien el documento está muy ien explicado, no es suficiente. El truco final consiste en que tendrá que tener dos perfiles: uno para XP y el otro para Vista. A la carpeta para el perfil de Vista en el servidor debes ponerle el nombre de tu usuario (como en XP), pero seguido de la extensión ‘.v2’. Es decir, en mi caso será ‘jmalarcon.v2’. Después de crear esta carpeta, copiar en la estructura adecuada lo que tenía en el perfil anterior (ayua mucho copiar un perfil vacío para empezar) e implementar todo lo que dice el .DOC anterior, tuve mi perfil funcionando en Vista.


Lo malo es que para llegar a ello tuve que leerme un documento de 39 páginas (que previamente tuve que encontrar y me llevó su tiempo), romperme los cuernos hasta poder ver cómo estaba funcionando por debajo el asunto de as ‘.v2’, y desesperarme un festivo que en condiciones normales me hubiera sobrado la mitad del día para relax en lugar de pegarme con una máquina para nada.


Es cierto que yo soy programador, no administrador de sistemas, y que no tengo los conocimientos avanzados que tiene un tio como Juansa LlópizIván González, de campusMVP (tendría que haberlos llamado, la verdad) o Dani Matey, pero creo que esta dificultad le ha pasado incluso a mucha gente que sabe más que yo, si bien reconozco que a mi me pilló de nuevo porque no me dedico a esto.


En definitiva, mi humilde opinión en este caso es que no entiendo por qué Microsoft ha sacado el sistema en estas condiciones para le empresa. Imagino que existe un buen motivo para haber cambiado tanto la estructura de los perfiles, pero desconozco porque motivo no han sacado una herramienta que implemente automáticamente todos los cambios necesarios para que todo funcione de manera transparente al usuario. o parece tan complicado automatizar, pero hacerlo a mano sí que lo es.


Imagino que este hecho habrá echado atrás de implementar Vista en muchas empresas en las que el administrador de sistemas responsable no tenga a lo mejor conocimientos muy elevados (como es mi caso) o simplemente no quiera pasar ese trabajo de averiguación. Un tirón de orejas a Microsoft desde aquí por este aparente fallo -para mi, incluso, comercial- que han tenido.


Bueno, ahora espero que alguno de los cracks que he mencionado arriba (u otro cualquiera) me saque los colores diciéndome que soy un burro y que había una forma facilísima de conseguirlo sin esfuerzo. ¡Ojalá! me alegraría poder cambiar de opinión 🙂

El evento Session_OnEnd de Global.asa no salta en ASP Clásico

Resulta que, de repente, sin razón aparente, el evento Session_OnEnd que estaba declarado en el Global.asa de una de nuestras aplicaciones escritas en ASP clásico, dejó de funcionar. Este evento se usa para realizar una serie de operaciones de «limpieza» al terminar la sesión de un usuario, y son importantes para mantener la calidad de servicio de dicha aplicación.


Tratando de investigar el tema y de depurarlo en caso de haber un error (que nunca había existido anteriormente) llegué al aconclusión de que, inexplicablemente, ese evento era el único que no saltaba jamás, pero no había motivo alguno para este comportamiento. ??????


Bueno, resulta que buscando en la Knowledge Base de Microsoft me enocntré con esto:


FIX: The Session_OnEnd() event is not raised in ASP Web applications as expected after you install Windows Server 2003 with Service Pack 2


Es decir, es un bug reconocido por Microsoft y se deriva de la instalación del Service pack 2 de Windows Server 2003. Así que ya lo sabes: si instalas el SP2 de Windows Server 2003 te dejarán de funcionar los eventos de final de sesión de ASP clásico. Así que si dependes de ellos, como es el caso, casi mejor que no instales ese SP. :-((


El parche que han preparado para corregir el problema no es público y hay que pedirlo específicamente para que te lo den.


Me puse en contacto con soporte de Microsoft para solicitarles dicho parche (ojo, si no le indicas el artículo de la KB concreto que es te pueden cobrar el soporte, esto es, 179 eurazos. Si es un Fix como este no te lo cobran). Una vez recibido con su correspondiente clave para instalarlo (lo siento, no lo puedo poner aquí para descarga, hay que pedírselo a ellos), hubo que reiniciar el servidor (una putada extra) y todo ha vuelto a la normalidad aparentemente, funcionando el evento como es de esperar.


Ahora bien, cuando te lo mandan te indican lo siguiente (copio y pego):



«Tenga en cuenta que los hotfixes no tienen soporte gratuito, se instalan bajo su propia responsabilidad. En caso que pasara cualquier cosa después de la instalación, tendrá que contratar un incidente al 902-197-198.«


Es decir, implica aflojar 179 euros por una cosa que no está bajo tu control y que es un error reconocido por ellos. Menos mal que me funcionó a la primera, si no menudo lío.


Francamente no me parece justo en absoluto y creo que en esta ocasión está más que justificado criticar a Microsoft por este asunto. Me alegro de que me haya solucionado la pega, pero la forma de proceder me parece abusiva. Deberían volcarse a ayudarte con el problema aunque tuvieras que llamar cincuenta veces. Al fin y al cabo el problema lo han provocado ellos. Cuando hay que hablar bien se habla, pero cuando hay que hablar mal de ellos también se hace. Las cosas como son.


En fin, espero que esto arroje luz sobre alguien que pueda estar teniendo el mismo problema. O te das cuenta de esto o puedes volverte loco intentando encontrar el problema.

Cómo insertar valores aleatorios en una base de datos SQL Server

Esta parece fácil pero no lo es tanto. Imagínate que tienes que meter valores aleatorios dentro de un campo de una tabla para todos los registros de ésta. Por ejemplo, le vamos a asignar un número aleatorio como pin de acceso inicial a cada usuario de nuestra base de datos y éste debe estar entre 1 y 100.000 (Vale, el ejemplo es un poco chorrada, pero se capta la idea). Queremos actualizar los miles de registros de nuestra base de datos y asegurarnos de que cada uno recibe un valor aleatorio en el campo correspondiente.


Lo primero que salta a la mente para intentar es esto:



UPDATE Usuarios Set pin = Round(((100000) * Rand() + 1


Es decir, usamos la función RAND para obtener un valor aleatorio dentro del rango especificado. Parece correcto ¿no?


Si lo ejecutamos nos llevaremos una sorpresa: todos los registros se quedan con el mismo valor. 🙁


Pero ¿no era aleatorio?. Sí. El problemilla es que RAND se evalúa sólo una vez para el proceso completo, y se inserta sólo un valor. No nos vale…


La solución correcta


Bueno, esto es lo que tuve que hacer al final:



UPDATE Usuarios Set pin = ABS(CAST(NEWID() as binary(6)) % 100000) + 1


¿jaaarl? Pues nada lo que se hace es utilizar la función NEWID que genera un nuevo valor aleatorio de tipo GUID (ya se sabe, aleatoriedad al máximo) y convertir éste a un tipo binario de 6 bytes (explicación en http://technet.microsoft.com/es-es/library/ms191530.aspx) y devolvemos el resto de dividirlo por el número objetivo, en valor absoluto. El resto siempre nos va a devolver como máximo el número objetivo menos 1 8en el peor de los casos), así que ya tenemos la prueba conseguida 🙂 Le sumamos 1 para que nunca nos de 0.


Listo. Espero que a alguien le pueda sacar de un apuro en un momento dado.

"El doctor House debería ser innecesario" o "La informática contra el doctor House"

He de confesar que soy un adicto a la serie televisiva del doctor House. Me mola que sea un genio descontrolado aunque a veces nos indigne a todos con sus salidas de tono. Y la serie engancha porque en el fondo se trata de un relato detectivesco, al fin y al cabo ¿qué más da que sea un asesino micro o macroscópico lo que perseguimos? ¿no?. Estoy deseando que empiece la cuarta temporada 🙂


A raíz de esta serie sin embargo me ha dado por pensar (que friki soy, jeje) en cómo hacemos uso de la medicina hoy en día y de cómo ésta deja de lado, al menos en lo que vemos de manera cotidiana, las ventajas que la informática podría aportarnos. Y es que si lo pensamos friamente ¿para qué deberíamos necesitar un Dr. House?


No soy médico ni entiendo de medicina, pero lo que voy a decir aplicadlo si queréis a otos ámbitos y creo que valdría igual.


Si dejamos de lado esos destellos de genialidad que marcan la diferencia en todas las disciplinas, en el 99% de los casos no deberíamos necesitar ningún genio para diagnosticar una enfermedad por rara que sea. Sólo deberíamos necesitar a alguien con buenos fundamentos asistido por la tecnología.


Desde los años 70, dentro de la disciplina de la inteligencia artifical, se está hablando de los sistemas expertos. Éstos son capaces de emular a un experto humano en diferentes ámbitos, partiendo de miles de reglas, relaciones entre éstas y un sistema de aprendizaje y error. La tecnología existe hace años y está operativa. Según esto llegar a las conclusiones a las que llega House debería ser bastante fácil para un médico asistido por un sistema experto. Sin embargo la realidad es que no se están utilizando en la medicina común. ¿Cuántos los habéis visto en las consultas de vuestros galenos? Si es así decídmelo para que cambie de doctor.


Obviamente estos expertos cibernéticos carecen de muchas cosas que tiene una persona, entre ellas el sentido común, pero serían un apoyo considerable para el trabajo de cualquiera. Serían, volviendo al doctor House, su bastón mental, para equivocarse menos y aprovechar mejor el tiempo en salvar más vidas.


¿Por qué no se están utilizando? ¿Alguna opinión?


Inferencia estadística y Data Mining


Siguiendo con el tema, no sólo se podría sacar mucho partido a los sistemas expertos. Estoy seguro de que además se podrían obtener resultados espectaculares usando algoritmos de inferencia estadística y Data Mining del mismo modo que ya se están usando con mucho éxito en los negocios. Puede que quizá el dinero prime más que la salud, o es posible que la mayoría de los investigadores médicos no estén familiarizados con estas técnicas avanzadas de informática. De ahí la importancia d elos equipos multi-disciplinares en investigación.


Voy a poner un caso práctico que a mi personalmente me impactó mucho cuando lo leí en el libro «Inteligencia Intuitiva» de Malcolm Gladwell (un libro muy recomendable). Seguro que muchos de vosotros conocéis la serie televisiva Urgencias (ER) de la que ya poco queda y que han saqueado desvergonzadamente en la versión autóctona llamada «Hospital Central».


Lo que muchos seguramente no sabréis es que ese hospital existe en realidad y es el Hospital del Condado de Cook en Chicago. Durante casi 100 años ha sido pionero en muchas cosas, como por ejemplo en abrir bancos de sangre (algo tan común hoy día), en reimplantar dedos amputados o en usar tratamientos con radiación de Cobalto. La zona en la que está era un nido de gánsteres hasta finales de los años ’80, de ahí que su sección de traumatología fuera una de las más prestigiosas del mundo. Y es que la necesidad agudiza el ingenio…


El hospital de Cook atiende a muchísima gente (unos 250.000 al año sólo en urgencias) y da cobertura a gente que no tiene seguro médico, algo que en los USA está al orden del día al no estar la salud cubierta por el Estado como en Europa y nuestro nunca bien ponderado Estado de Bienestar. La escasez de medios es tremenda y a veces les cuesta incluso caminar entre las camillas. Un problema grave que tienen es el de los pacientes con supuestos ataques cardíacos. Tienen alrededor de 30 pacientes al día en urgencias que parecen tener un ataque de corazón. Éstos requieren un protocolo largo y costoso además de una desmesurada atención de médicos, enfermeras, camas y tiempo de permanencia en el centro. esto se hace insoportable para la estructura y medios del hospital, pero por otro lado no pueden deshacerse de ellos, así que tenían que buscar alguna solución.


Si llega a urgencias un hombre de 50 años, de complexión gruesa, con dolor en el pecho, fumador y con hipertensión. Se le hacen unas pruebas y un electro-cardiograma (ECG) y da todo bien: ¿quién es el machote que lo envía casa y le dice que no pasa nada con esos antecedentes? Y más en EEUU que te denuncian a la primera de cambio. Nadie en su sano juicio. La única forma de saber de modo concluyente si alguien tiene un ataque es usando unas caras pruebas enzimáticas que tardan horas en dar resultado.


Es muy difícil acertar. De hecho se hizo un experimento en ese mismo hospital en el que con las hstorias de pacientes en la mano de las que se sabía con certeza si habían tenido o no un ataque, se le presentaban a diversos médicos con todos los antecedentes a ver qué opinaban. Resultado: no había coincidencia en casi ningún caso. Un médico podía mandar tranquilamente a casa a uno que dos días después sufría un ataque y otro lo dejaba en cuidados intensivos. Un problema peliagudo.


Tenía que haber un modo de mejorar la situación. La solución vino de la mano de un cardiólogo llamado Lee Goldman. Éste había estado trabajando en los ’70 con un grupo de matemáticos en el estudio estadístico para diferenciar partículas subatómicas. Aunque no le atraía mucho la física de partículas sí que le veía muchas aplicaciones en la medicina, y ahí es donde se junta con el estado mental que me ha llevado a escribir este artículo. Dado que poseía cientos de casos documentados de ataques al corazón utilizó mucha paciencia y trabajo matemático en obtener un algoritmo que le permitiera determinar las probabilidades de que un determinado paciente tuviese realmente un ataque y ello partiendo además de unas pocas variables. Este algoritmo se plasmó en un árbol de decisión que partía de sólo tres consideraciones sobre el paciente en lugar de las decenas que consideraba un médico normalmente, y llegaba a una conclusión acerca de si éste iba a sufir un ataque o no. Se tardaban dos minutos 🙂


Esto es lo que implementaron en el hospital de Cook. Primero en paralelo con la diagnosis normal y luego como norma única obligatoria. Un poco frío ¿no?


Los resultados fueron sencillamente espectaculares: Los médicos diagnosticaban correctamente «sólo» entre el 75% y el 89% de los casos que les llegaban. El algoritmo de Goldman lo hacía bien el 95% de las veces, pero además tardando sustancialmente menos y ahorrando muchísimo dinero. Un exitazo. desde 2001 es lo único que se aplica en esta institución. Muchas otras la han seguido. A ver cuándo lo hacen en España.


El que quiera conocer todos los detalles de esta historia le recomiendo que se compre el libro de Gladwell donde lo cuenta de forma sublime.


El caso es el siguiente: si Goldman consiguió esto con los medios limitados de su época, teniendo en cuenta que hoy en día cualquiera dispone en su casa de capacidad infinitamente mayor de tratamiento de datos (sólo hay que ver las capacidades de Data Mining que tiene SQL Server) ¿por qué no se está utilizando a destajo el Data Mining en los médicos todos los días?.


Dado que como es lógico la tendencia actual es a tener informatizada la historia clínica de todo el mundo (aún en contra, me consta, de muchos colegiados en medicina que son reacios porque tardan un poco más que en escribirlo a mano y total «¿para qué queremos esos cacharros?»), ¿por qué no aplicar constantemente y de manera controlada por algún organismo las modernas tecnologías de análisis capaces de separar el grano de la paja, de encontrar relaciones ocultas entre datos, de generar árboles de decisión en segundos a partir de millones de registros de datos? ¿no ganaríamos mucho? ¿No haría innecesario que todos quisiésemos a un Dr. House como médico de cabecera?


Ahí dejo esta reflexión, y espero que a pesar de la longitud del post haya resultado interesante. Hay veces que no puedo evitar pensar en este tipo de cosas y, como hoy, me parece adecuado compartirlas. Otras me las guardo 🙂

Buscamos un formador y un director de proyectos









 


Microsoft Certified Partner


En Krasis estamos de pesca 🙂


Estamos buscando una persona con experiencia contrastable en formación en tecnología .NET y amplios conocimientos de la misma.


Sus responsabilidades serán, tras un periodo de capacitación previa, las de actuar de mentor para empresas del sector en toda España. Además, entre sus responsabilidades estará la participación en proyectos reales de desarrollo (internos o externos), ya que no concebimos un formador/mentor de alto nivel sin el correspondiente grado de experiencia práctica.


Este puesto requiere estar formándose continuamente en las últimas tecnologías. La empresa ofrece todas las facilidades para aprender y certificarse, convertirse en MCT (Microsoft Certified Trainer) y tener relevancia en la comunidad de desarrolladores.


Además buscamos también un director de proyectos con experiencia en desarrollo de aplicaciones empresariales y SCRUM.


En ambos casos pedimos (F: formador, DP: Director de proyectos):



· Amplios conocimientos de .NET y SQL Server.
· Pasión por la informática, la típica persona que siempre quiera estar a la última y lee, se forma y practica para conseguirlo. Sin miedo a «meterle mano» a cualquier tecnología nueva.
· Sociabilidad, capacidad de relacionarse.
· Excelente capacidad de expresión oral y escrita (F)
· Experiencia de al menos 2 años en el puesto.
· Certificaciones de Microsoft en desarrollo y en especial la 70-431 (F)
· Venirse a trabajar a Vigo (España). Es una ciudad tranquila (500.000 habitantes), bañada por el Atlántico, y con precios más «normales» y mucho mejor que Madrid para vivir 😉


Sería deseable, pero no imprescindible, que además el formador:



· Haya trabajado en algún CPLS
· Sea MCT


Ofrecemos un salario competitivo, con generosa parte variable en función de resultados, un contrato de 1 año para probar y luego ya hacerlo indefinido.


¿Te identificas? ¿Quieres pegar un cambio radical?


Pues no te cortes. Escríbenos un correo con tu CV antes de que acabe Julio,  contándonos tu experiencia y expectativas, a e-Mail de Krasis (no me escribáis a mi, please).


¡Nos vemos por aquí! 🙂

El ataque de los Linuxeros asesinos

Este fin de semana celebramos la despedida de soltero de Unai, y nos juntamos un buen número de «geeks» para ello. Lo pasamos genial, la verdad… pero ocurrieron cosas la mar de raras como era de suponer.


La más extraña, quizá, fué el ataque de los pingüinos asesinos que sufrimos en el «hall» de un bonito hotel.


¿No me crees? La foto que lo demuestra es esta (pulsa para agrandarla):



Si la agrandas podrás contemplar el odio que reflejan sus miradas. No es coña. ¡Acojonan!


Y es que los Linuxeros nunca dejan de atacarnos, jejeje Y eso que a esas horas aún no habíamos tomado nada, jaja.


(Juro que esta foto la saqué yo mismo con la cámara de mi móvil, lo que no diré es donde) 😉

Obtener (bien) la lista de temas disponibles para una aplicación

Los Temas son una estupenda característica que se añadió en ASP.NET 2.o y que permite separar el aspecto de nuestra aplicación de la disposición de los elementos de las páginas ASPX. De este modo puedes cambiar todo el aspecto estético de la aplicación completa o de una parte de ella con sólo cambiar un ajuste en web.config correspondiente. Los temas son junto con las (mal traducidas) páginas principales (Master Pages) un gran paso adelante para independizar el diseño de la interfaz del desarrollo del código.


El caso es que aprovechando estas características mucha gente ha implementado portales en los que se le deja elegir al usuario qué tema quiere aplicar a la aplicación, de modo que cada uno elige la combinación de colores, etc… que más le guste. Combinándolo con la API de perfiles (Profile) se consigue almacenar la preferencia y así mejorar la experiencia del usuario. El cambio dinámico de tema, al igual que el de Master Pages, se suele hacer en el evento Pre_Init de las páginas, pues en momentos posteriores del ciclo de vida de ésta ya no es posible.


Para dar a escoger entre los distintos temas existentes a los usuarios, mucha gente opta por almacenar una lista con sus nombres en algún lado (web.config, un archivo XML, la base de datos…), cuando en realidad no es necesario en absoluto, puesto ya tenemos una lista siempre disponible. Y es que cada tema se corresponde con una subcarpeta dentro de la carpeta especial de la aplicación llamada App_Themes. Sabido esto es muy fácil obtener una lista de los temas disponibles sacando un listado de las subcarpetas de App_Themes, así:



string[] carpetas = ListaCarpetas(HttpContext.Current.Server.MapPath(@»~/App_Themes»));


El método ListaCarpetas se limita a comprobar si la ruta existe y en caso afirmativo devuelve la lista completa de subcarpetas:



private static string[] ListaCarpetas(string rutaFisica)
{
  if (!Directory.Exists(rutaFisica)) return null;

  return Directory.GetDirectories(rutaFisica);
}


Vamos que no tiene nada. Únicamente notar que GetDirectories devuelve las rutas completas de las carpetas y nosotros necesitamos sus nombres por lo que antes de utilizarlos debemos extraerlos. Luego lo vemos entero.


Obtener los temas pero esta vez TODOS los temas.


«¿Todos? ¿Qué me estás contando?» pensará alguno a estas alturas. Bueno, el verdadero «truco» viene a continuación… Resulta que aunque no es algo muy conocido, en ASP.NET es posible definir temas globales, que estarán disponibles para todas las aplicaciones aunque éstas no tengan una carpeta App_Themes.


Si colocamos carpetas que contienen temas en la ruta «%Windir%Microsoft.NETFramework[Version]ASP.NETClientFilesThemes», siendo [Version] la versión de ASP.NET actual, éstos estarán disponibles para su uso en cualqueir aplicación.


Por lo tanto para tener un verdadero listado completo de temas debemos obtener también una lista de esas carpetas. Aparte de tener que saber esto, el código no tiene demasiado truco. Si acaso poder averiguar la versión actual de ASP.NET y averiguar la ruta de la carpeta de Windows (puedes verlo en el código fuente), más abajo.


He escrito una clase sencilla llamada AppThemes que tiene un método estático llamado Disponibles, que devuelve un ArrayList con los nombres de todos los temas disponibles, tanto locales como globales. Con ella, para obtener una lista de temas disponibles y poder ofrecérselos en una lista a los usuarios, basta con escribir AppThemes.Disponibles(); y listo, así que puede resultar útil.


Puedes descargarte esta clase con un ejemplo desde aquí (ZIP, 4 kB).