Microsoft da la espalda a VB.Net

El 11 de marzo se publicó una entrada en el blog de Visual Basic de Microsoft, la primera entrada desde noviembre de 2018 en un blog que había estado bastante surtido hasta octubre de 2017. El título de la entrada es Visual Basic support planned for .NET 5.0. Es una entrada sin firma (aparece .NET Team como autor, mientras que las anteriores, salvo pocas excepciones, iban firmadas por sus autores) y viene a ser la sentencia de muerte de Visual Basic por parte de Microsoft. La entrada dice que van a hacer Visual Basic compatible con .NET 5.0 (la siguiente versión de la rama de .NET Core que va ahora por la 3.1). Ésa es la zanahoria que nos dan, después de meses (por no decir años) de sentirnos ninguneados y olvidados frente a C#.

El palo viene luego: Going forward, we do not plan to evolve Visual Basic as a language. No van a seguir desarrollando Visual Basic. No van a incluir las futuras mejoras de .NET Core. No es que me sorprenda. Llevábamos bastante tiempo con Visual Basic desaparecido del mapa y no tenemos la suerte de que haya un pequeño grupo de desarrollo que pueda ir a lo suyo, como pasa con F#. Tampoco es novedad que Microsoft deje en la estacada a sus clientes. Pasó con VisualFox Pro, por ejemplo. O con Windows Phone. O con las aplicaciones de tienda de Windows 8. Otrora una de las joyas de la corona de Microsoft, hoy Visual Basic es considerado aburrido, viejo y obsoleto por el equipo de desarrollo de .NET y el mensaje es claro: migrad a C#, dinosaurios.

Leí la noticia con resignación. Ya bastante me cuesta tener que dar explicaciones por usar Visual Basic cada vez que lo menciono. Hasta mis compañeros de departamento se han pasado a C# en el último proyecto. El día que tenga que pasarme a C# para ganarme los garbanzos, pues lo haré. O a lo que sea. Programar es mi trabajo. No tiene por qué ser mi afición.

Sin embargo, ayer leí también la contestación de Anthony D. Green, 5 entradas donde se explaya a gusto que ustedes pueden leer aquí: la primera, la segunda, la tercera, la cuarta y la quinta, y que agradezco de corazón. Me ha recordado que Visual Basic es un lenguaje de código abierto desde 2014 que irá donde su comunidad decida que vaya. Me ha explicado algo que debía ser totalmente evidente, que desarrolladores ajenos a un lenguaje de programación no deberían condicionar el futuro de ese lenguaje; que no tengo por qué dar explicaciones ni disculparme por usar las herramientas que uso y porque me guste el lenguaje de programación que me gusta. Cuenta anécdotas y experiencias vividas en su tiempo trabajando en Microsoft y termina con una carta abierta a Nadella.

La lectura ha cambiado mi resignación por cabreo y rebeldía. Quiero seguir programando en VB.Net. Quiero que mi trabajo siga siendo una afición. Quiero disfrutar mucho más de su sintaxis, de imprimirme el código y leerlo en voz alta y del placer de programar, en definitiva. Y si tengo que dejarlo, quizás pueda aprovechar y quitarme esa espinita clavada que es mi otro amor, Pascal, y aprender de una vez Delphi.

SAP Business One B1WS: editar oferta de ventas

Una breve entrada sobre SAP Business One:

Intento editar una oferta de ventas vía B1WS. Al obtener la misma mediante el consabido método de GetByParams, me da error al procesar el xml. Un error de conversión de algún campo de fecha/hora. Empezamos bien.

Ataco directamente el DiServer para conseguir la oferta en bruto, en texto plano, y busco los campos fecha/hora a ver cuál es el causante. Verán, SAP B1 guarda el tiempo como entero corto, en forma HHMM: 935, 1250, 1800… que son devueltos por correctamente formateados como 9:35:00, etc. Pero hay un campo de la oferta de ventas (y del resto de documentos de márketing), UpdateTS, que guarda HHMMSS: 125015. Y me encuentro con que el DiServer lo devuelve formateado, bajo el nombre de UpdateTime de la forma 1250:15:00. Ferpecto:

El maldito


Imagino que al que hizo la función que formatea los campos de hora para los servicios del DiServer le dirían que todos iban en forma HHMM o que los campos UpdateTS de los documentos de márketing son posteriores a dicha función y nadie se acordó de cambiarla/comprobarla.

Como el campo es irrelevante en la actualización (no necesito su valor y es algo que rellena el propio SAP), la solución es simple: editar manualmente el wsdl generado, buscar el campo de marras y cambiar el tipo de time a string.

Imagino que para la 9.3 lo habrán corregido, pero en la 9.2 parche 10, así están las cosas.

2020-04-14: pues no, no lo han actualizado. Entre el parche 10 de la 9.2 y el parche 13 de la 9.3 me he encontrado con un montón de cambios en la estructura de los documentos de márketing expuestos por Di Api/Di Server, pero el maldito UpdateTime sigue dando guerra.

EF: usando campos no mapeados en consultas

Tengo un vicio confesable (creo) en programación: las enumeraciones. Siempre que puedo, las uso. Cuando, aprovechando unas semanas de verano con poca carga de trabajo, intenté mapear parte de la base de datos de SAP Business One con Entity Framework (lo que tuvo su complicación, que no es lo que se dice muy relacional), me pregunté si podía utilizar enumeraciones para los campos de estado de documentos, que tan pronto pueden ser O/C como P/R/L/C o cualquier otra forma super-intuitiva.

No me refiero sólo a tener una propiedad de sólo lectura no mapeada para obtener un valor comprensible con los datos ya cargados, o sea, esto:

    <Column("Status")>
    Public Property EstadoSAP As String
    <NotMapped>
    Public ReadOnly Property EstadoEnumerado As EWORSAPStatus
        Get
            Return Convierteme(Me.EstadoSAP)
        End Get
    End Property

Sigue leyendo

ASP MVC: autenticación por formularios

Este año pasado he dado mis primeros pasitos con ASP MVC, siendo también mi primera incursión en programación web. Lo primero que a lo que tuve que enfrentarme (tras pasar por varios tutoriales y leerme un par de libros) fue la gestión del usuario. La aplicación MVC compartía componentes con otras (WCF y Windows Forms) y la gestión del usuario y sus permisos se hacía ya con una implementación de IPrincipal. Una búsqueda por Internet me llevó a que debía usar para esto la vieja autenticación por formularios.

Para ello, primero debía crear mi nuevo proyecto MVC sin autenticación. Creé, a continuación, otro con autenticación para coger todo lo que pudiera del código y ahorrarme trabajo: casi todo el diseño e la vista de login, la vista parcial de _LoginPartial, su implementación en la cabecera… Todo lo que me pudiera suponer un ahorro de trabajo.

Sigue leyendo

Dos semanas con W10 Mobile

Así, sin darme cuenta, ya llevo dos semanas con W10 Mobile. El resultado ha sido interesante y agradable, hasta el punto que, de momento, no veo razones para volverme a Windows Phone 8.1. Bueno, siendo sincero, haberlas haylas, pero las razones para quedarme en W10 lo equilibran.

A saber:

  • La batería me dura lo mismo o más. Había leído muchos comentarios avisando de lo contrario y esto ha sido toda una sorpresa. En modo nocturno me gasta menos que WP8, así que llego a los dos días completos entre cargas o más con un uso ligero y día y medio con un uso normal (normal para mí, esto es, algo de mensajería, mucha recepción de correos, algo de navegación vía wi-fi y echar algún vicio).
  • Sin quejas sobre la cámara, otro tema habitual. No era capaz de sacar una foto que no apareciera movida antes y sigo sin ser capaz de hacerlo ahora.
  • Facebook Messenger es una patata, pesado en abrir, voraz de recursos si se queda abierto y sin posibilidad de notificaciones en la pantalla de bloqueo.
  • Me estoy pegando con Cortana y con el teclado más que antes. No sé si es por el reseteo del teléfono o porque es inferior a WP8, la verdad.
  • Y esto probando el modo de cuatro columnas, que para la pantalla de un Lumia 640XL es una muy buena opción.

Y otras cositas de aquí y de allá. Seguimos con las quejas de la falta de aplicaciones, pero, la verdad, salvo que necesitemos algo en las notificaciones o información extra en la Tile, sigo pensando que es mejor tirar de web. Y el futuro parece ahora que no pasa por las tiendas de aplicaciones y las app limitadas y que podemos usar sólo cuando el dueño quiera, sino en los bots (tampoco lo veo, la verdad).

Actualizando a Windows 10 Mobile

Tras Windows 7 y Windows 8, Windows 10 ha sido un poco como una vuelta al pasado. A los tiempos de 2000, XP y Vista, cuando la combinación de la versión inicial del SO y los drivers nos dejaba con un ordenador inestable y dado a hacer cosas raras y no nos quedaba más remedio que esperar a los futuros Service Packs. La primera versión de Windows 10 utilizable «en producción» fue realmente la actualización de noviembre de 2015.

El desarrollo de la versión para móviles ha ido más lento, con promesas incumplidas y un sistema en eterna beta que ha terminado cansando a los defensores de Windows Phone 7/8, hasta el punto que pocos son ya los que se atrevan a recomendar la plataforma de Microsoft. Con el lanzamiento de la Anniversary Update este verano parece que las cosas van avanzando y ya se ven algunas (tímidas y escépticas) opiniones positivas.

Aprovechando los últimos días de vacaciones y espoleado por estas opiniones, decidí actualizar mi móvil, un Lumia 640 XL, a Windows 10. Instalé la aplicación Upgrade Advisor, me ofreció la Anniversary Update y actualicé. Antes hice copia de seguridad de todo, of course.

La actualización no dio problemas, pero luego el teléfono iba a tirones. No sé si por problemas por la actualización o porque estaba instalando actualizaciones de las aplicaciones o porque necesitaba tiempo para asentarse, tampoco le di opción. Había leído en varios sitios que aconsejaban realizar un hard reset (restaurar a valores de fábrica) tras la actualización y así lo hice. Un coñazo, hablando mal y pronto, igual de doloroso que hacerlo en un ordenador: horas de instalar aplicaciones, configurar y dejarlo todo al gusto. Por delante tengo un par de semanas de pruebas, a ver si me quedo en W10 o me vuelvo a la 8.1

De momento lo que me he encontrado es lo siguiente:

  • Es estable y funcional. Es decir, no tenemos ya una beta entre manos. Tiene detalles muy interesantes, como un centro de notificaciones muy completo (que requiere configurarlo con calma para que no nos agobie), un cliente VPN en condiciones, linterna de serie… Visualmente habrá a quién le guste y habrá quien prefiera WP8.1, pero las carpetas-tiles tienen una peor visibilidad y presentan un error si metemos un grupo de contactos en una carpeta: saldrán cuadros negros. Y ahora puedo tener hasta cuatro columnas de ancho normal en pantalla.
  • Tiene algunas carencias absurdas. La aplicación Gestures Beta no funciona (aunque en la tienda diga que sí). W10 trae ahora de serie el dar la vuelta para silenciar la llamada, pero hemos perdido el descolgar automáticamente al llevárnoslo a la oreja o la activación automática del altavoz. También ha desaparecido la aplicación de la radio. Sí, esa simple y funcional. Ya sabíamos que Microsoft quita funcionalidades cuando mete otras, pero esto ya es estúpido.
  • Adiós a las aplicaciones de Here, aunque eso ya lo sabíamos.
  • Facebook es cada vez más celoso de la privacidad… de la suya, no de la nuestra. Su nueva aplicación, que sustituye a la desarrollada por Microsoft, ya no se sincroniza con la aplicación de Contactos. Por fortuna, aún tengo la de Microsoft, ya veremos lo que dura.
  • Contactos permite ligar tanto cuentas de correo como aplicaciones sociales. No sé qué tal funcionará esto último, porque ni uso Twitter, ni VK ni no sé qué red china, que son las aplicaciones que aparecen. De paso, hemos perdido la sincronización con LinkedIn.
  • Hablando de Contactos, la aplicación trae ahora sincronización con la aplicación de chat grupal GroupMe (de Skype, no la conocía). ¿Un intento de resucitar las Salas tan cómodas de Windows Phone 8?
  • La sincronización de notificaciones del teléfono al ordenador me ha sorprendido. Que me llegue un aviso con el último whatsapp al ordenador cuando el teléfono está cargándose allá lejos está muy bien. Me permite decidir si moverme del sillón o no.

En general me gusta W10 Mobile. Recupera ideas de teléfono social que aparecieron en WP7 y 8 y desaparecieron en 8.1 (no creo, sin embargo, que se desarrollen plenamente, porque requiere de terceros que hagan su parte, y no veo yo a Facebook o a Google interesados en facilitar la vida a los usuarios en nada que no sea dentro de su propia red).

Ahora, a probarlo un par de semanas, en el día a día, a ver qué tal responde.

La semana de Windows 10

Semana de histerismo en el trabajo con los últimos días para actualizar los equipos a Windows 10. Al trabajo esperado se ha juntado que dos equipos comprados de segunda mano actualizados desde 7 venían sin activar y tuve que formatear, volver a 7, activar su licencia por teléfono y actualizar a 10. Luego, intenta actualizar los equipos molestando lo menos posible a los usuarios. En algunos casos, el proceso se eternizaba o se quedaba en un punto, sin pasar de él. De rebote, descubrí que parando el servicio de Windows Update tal problema no se presentaba, así que los últimos han ido más rápido. Los equipos «limpios» no han dado problema, sólo trabajo: aplicaciones, fuentes, configuración…

Las actualizaciones han sido más tranquilas, salvo por unos pocos casos. Portátiles, la madre que los trajo. He tenido de todo, y casi todo en Dell: desde flashear la BIOS para poder sacar vídeo a actualizar a 10 como intento desesperado de devolver la vida a un portátil que venía con Vista pero cuyo disco de drivers no traía los drivers del equipo. Problemas con Thunderbird porque en 7 estaban indexados los mensajes por Windows Search y en 10, con Cortana, se queda el cliente de correo tostado a la mínima (revisar la configuración, eliminar del indexado, listo) y poco más, como el intento de meterte Edge hasta en la sopa (no, gracias, deja de abrir los pdf). La actualización nos ha servido para unificar sistemas, que siempre se agradece de cara al soporte a usuarios.

No todo ha sido perfecto y atrás me quedan, descontando algunos portátiles, tres equipos que no puedo actualizar. A saber:

Un equipo de facturación que tiene dos impresoras térmicas. Una no la reconoce, la otra sí. Pero el programa del transportista de la segunda impresora está hecho en Visual FoxPro para Windows 95/98 y no ha habido forma de hacerlo funcionar, así que el equipo se ha quedado con su Windows 7.

Un equipo de fábrica con un venerable XP conectado a una impresora Zebra de etiquetas. Es un Celeron con bastante mili a sus espaldas y es un equipo crítico, así que he dicho «uhm» y me he alejado en silencio, procurando no molestarlo. No me gustaba el ratio riesgo/beneficio.

Y un ordenador crítico de contabilidad. Realmente son dos, uno con XP y otro con 7 y uno de los dos lo tengo que dejar. Cortesía de las páginas de organismos oficiales, que sólo funcionan con ciertas combinaciones de Internet Explorer, Windows y Java.

En fin, hacía mucho tiempo que no tenía tanto trabajo de sistemas y no lo echaba de menos. A ver si la semana que viene puedo seguir programando, que tengo mucho que hacer sobre SAP.

Adiós, mi viejo ordenador

En primavera de 2007 me compré un ordenador. Un sobremesa Packard Bell bastante descompensado, con un Pentium D Presler cuando pegaba fuerte el Core Duo, con dos gigas de RAM (cosa harto rara entonces) y una GeForce de gama baja. La parte interesante estaba en el monitor, un 22» realmente bueno. Combinado, el precio estaba bien, incluyendo el precio de la GeForce 8600 que le metí al poco (cuando salieron al mercado). Un espécimen de gran superficie que no casaba bien junto ni de casualidad: el ordenador no podía ni reproducir un dvd a pantalla completa, cosas de la gráfica de serie y los primeros drivers Nvida para Vista.

Pero era un pedazo de pantalla y, por aquel entonces, salía más a cuenta comprar un ordenador en el hipermercado que en las tiendas de la zona. Además, mi pliego de condiciones para comprar el ordenador se reducía a «ver anime». El sobremesa viejo, un P IV Willamette de segunda hornada (socket 478), ya no podía con los mp4 que sacaban los fansubs. Lo compré, dejé Vista aparcado, instalé XP y a disfrutar. Bueno, XP, Debian, 2003 Server… En aquel entonces, usaba yo más Debian que otra cosa. Luego, con la salida del Service Pack 1 para Vista, me obligué a usarlo un par de semanas y ya me enamoré de él y caí en las garras de la pérfida Spectra para siempre. Pasó de Vista a 7 y de 7 a 8 y ahora a 10.

Con el tiempo, la pantalla murió (ahora tengo una de 23» de peor calidad, cosas del seguro). Y la gráfica. Y luego repescó otra y… Y en el trabajo estrené un i5 y empecé a ver que el de casa se me había quedado viejo. Esta primavera lo he sustituido por un AMD A10-7870k, por cuestión de precio. Comprado a piezas y montado en una torre recauchutada.

Y ahora al venerable anciano le espera una segunda actividad. Monta desde hace unos años una GT530 y le he puesto un SSD de 120GB como unidad primaria. Arranca como nunca y creo que tiene por delante dos o tres años más de servicio. Lo que no está mal para una torre que compré ya obsoleta.

¡Aparecen móviles en mi red!

Me aparecen teléfonos móviles en Red, en Windows 8.1 y 10. Desde hace tiempo. Al principio no le presté mucha atención, pues venían bastantes amigos a casa y les dábamos acceso a la wifi. Pero llevamos varias semanas de enclaustramiento monacal y los teléfonos siguen apareciendo. Sin embargo, al consultar el router, no aparecen ni en las direcciones dadas por DHCP ni en la tabla ARP. ¿De dónde salen?

Una búsqueda por Google del problema me ha dado a encontrar la solución por casualidad. Por casualidad, digo, porque estaba escondida entre las muchas páginas que visité y no he sido capaz de volver a encontrarla, así que me disculparéis que no ponga la fuente.

La solución ha sido desactivar el WPS del router. Tan simple como eso.

Nos vemos.

Excepción no controlada en GesFicCom

Como necesitamos trabajar con el Instituto Nacional de Toxicología, debemos utilizar su programa GesFicCom para crear y editar las fichas que debemos mandarles. Hoy hemos tenido un error curioso. O no tan curioso, sino chapucero. Una excepción no controlada al abrir una ficha creada hace un tiempo. Pum. Llamada a soporte que se traduce en «Con Windows 8 da problemas, use Windows 7». Dejando de lado tener un programa para plataforma Windows con problemas con un SO que lleva tres años en el mercado, que dé una excepción sin controlar al abrir una ficha ya es de chapuza extrema.

Lo bueno es que, como es una excepción no controlada, puedo obtener bastante información del error y buscarme las habichuelas, ya que el soporte técnico no está por la labor. Encuentro que el error se produce al intentar mostrar una imagen, lo que apunta a imagen corrupta o inexistente. Como tengo una ficha que abre sin problema y van en xml, abro ambas con un editor de texto y comparo.

El problema resulta ser tonto con ganas. Entre ambas fichas se ha cambiado el logo de la empresa en el programa. La ficha antigua indica el nombre de archivo de logo antiguo, que ya no existe en el equipo y pum. Editado a mano el xml, solucionado el problema. En cuanto a lo de no poner un mísero control de errores en la carga de una imagen… pfffff.