Geeky

Empaquetando WorldWide Telescope y compartiendo el soporte para ficheros FITS de Herschel

Aquí no hay nada que retomar, porque ya en su momento corregí el mal uso que se hacía de ficheros FITS (por ejemplo los de Herschel) que tenían una cabecera auxiliar (extension header) en vez de tener todos los metadatos en la cabecera primaria.

Después de insistir mucho para que se aceptase el Pull request en GitHub (https://github.com/WorldWideTelescope/wwt-windows-client/pull/83), resulta que la American Astronomical Society (AAS) no piensa lanzar ni una sola versión más de la versión de escritorio, así que nadie podrá disfrutar de mi arreglo. Me propongo enmendar este problema y permitir que todo el mundo pueda  crear capas y composiciones con ficheros FITS de Herschel y los datos que ya están presentes en WWT.

En la imagen de abajo, WWT en modo depuración en mi máquina con un fichero FITS de Herschel .

WWT_1

Las cabeceras del fichero FITS son las siguientes:

Principal:

SIMPLE = T / Java FITS: Mon Jan 18 10:18:51 CET 2016 
BITPIX = 32 
NAXIS = 0 / Dimensionality 
EXTEND = T / May contain datasets 
TIMESYS = 'UTC ' / All dates are in UTC time 
LONGSTRN= 'OGIP 1.0' / The OGIP long string convention may be used. 
COMMENT This FITS file may contain long string keyword values that are 
COMMENT continued over multiple keywords. This convention uses the '&' 
COMMENT character at the end of a string which is then continued 
COMMENT on subsequent keywords whose name = 'CONTINUE'. 
---------------Herschel FITS Data Generator--------------- 
This product is generated by Herschel software. 
HCSS____= 5 / HCSS Fits Product Version 
-------------- Herschel Structure Data-------------------- 
Following fields are private to the structure of the 
Java object this HDU is representing. 
CLASS___= 'herschel.ia.dataset.image.RgbSimpleImage' / java representation 
INFO____= 'Browse Product' 
-------------- Herschel Parameter Data-------------------- 
All actual parameter names are converted to FITS compliant 
conventions. Note that the HIERARCH comments contain the 
appropriate key mapping 
TYPE = 'BROWSE ' / Product Type Identification 
CREATOR = 'SPG v14.0.1' / Generator of this product 
DATE = '2016-01-12T21:08:09.152000' / Creation date of this product 
DESC = 'Browse Product' / Name of this product 
INSTRUME= 'SPIRE ' / Instrument attached to this product 
MODELNAM= 'FLIGHT ' / Model name attached to this product 
DATE-OBS= '2009-06-25T01:55:39.000000' / Start date of this product 
DATE_OBS= '2009-06-25T01:55:39.000000' / Start date of this product 
DATE-END= '2009-06-25T02:57:23.000000' / End date of this product 
FORMATV = '1.0 ' / Version of product format 
TELESCOP= 'Herschel Space Observatory' / Name of telescope 
OBJECT = 'M66 ' / Target name 
OBSERVER= 'copspire' / Observer name 
PROPOSAL= 'Calibration_copspire_15' / Proposal name 
OBS_ID = 1342179029 / [] Observation identifier 
ODNUMBER= 42 / [] Operational day number 
AOT = 'Photometer' / AOT Identifier 
AOR = 'Calibration_H_COP_SJL_OD42_01_1-SPhoto-20x20rep4_AB&' 
CONTINUE '' / & 
COMMENT AOR Label as entered in HSpot 
CUSMODE = 'SpirePhotoLargeScan' / CUS observation mode 
INSTMODE= 'POF5 ' / Instrument Mode 
OBS_MODE= 'Large Map' / Observation mode name 
POINTMOD= 'Cross_scan' / Pointing mode 
MISSIONC= 'MC_H11_P7_S10_COP' / Mission configuration 
EQUINOX = 2000.0 / [] Equinox of celestial coordinate system 
RADESYS = 'ICRS ' / Coordinate reference frame for the RA and DEC 
RA = 170.06281229854167 / [deg] Actual Right Ascension of pointing 
RA_NOM = 170.062625 / [deg] Requested Right Ascension of pointing 
DEC = 12.993779663437786 / [deg] Actual Declination of pointing 
DEC_NOM = 12.991555555555555 / [deg] Requested Declination of pointing 
POSANGLE= 290.6511889657665 / [deg] Spacecraft pointing Position angle 
PMRA = 0.0 / [arcsec a-1] Target's proper motion RA (arcs& 
COMMENT ec/yr) as given by the observer 
PMDEC = 0.0 / [arcsec a-1] Target's proper motion Dec (arc& 
COMMENT sec/yr) as given by the observer 
ORIGIN = 'Herschel Science Centre' / Site that created the product 
HIERARCH key.TYPE='type' 
HIERARCH key.CREATOR='creator' 
HIERARCH key.DATE='creationDate' 
HIERARCH key.DESC='description' 
HIERARCH key.INSTRUME='instrument' 
HIERARCH key.MODELNAM='modelName' 
HIERARCH key.DATE-OBS='startDate' 
HIERARCH key.DATE-END='endDate' 
HIERARCH key.FORMATV='formatVersion' 
HIERARCH key.TELESCOP='telescope' 
HIERARCH key.OBJECT='object' 
HIERARCH key.OBSERVER='observer' 
HIERARCH key.PROPOSAL='proposal' 
HIERARCH key.OBS_ID='obsid' 
HIERARCH key.ODNUMBER='odNumber' 
HIERARCH key.AOT='aot' 
HIERARCH key.AOR='aorLabel' 
HIERARCH key.CUSMODE='cusMode' 
HIERARCH key.INSTMODE='instMode' 
HIERARCH key.OBS_MODE='obsMode' 
HIERARCH key.POINTMOD='pointingMode' 
HIERARCH key.MISSIONC='missionConfig' 
HIERARCH key.EQUINOX='equinox' 
HIERARCH key.RADESYS='raDeSys' 
HIERARCH key.RA='ra' 
HIERARCH key.RA_NOM='raNominal' 
HIERARCH key.DEC='dec' 
HIERARCH key.DEC_NOM='decNominal' 
HIERARCH key.POSANGLE='posAngle' 
HIERARCH key.PMRA='pmRA' 
HIERARCH key.PMDEC='pmDEC' 
HIERARCH key.ORIGIN='origin' 
-----------------Dataset Children------------------------- 
Below you will find all HDU locations that are children of 
this composite dataset. 
DSETS___= 3 / Number of datasets 
DS_0 = 1 / HDU of Child Dataset 
DS_1 = 2 / HDU of Child Dataset 
DS_2 = 3 / HDU of Child Dataset END

Nos fijamos en el atributo OBJECT, que nos indica que el objeto es la galaxia M66. Todos estos valores, por lo general, no los usa ninguno de los programas que saben leer FITS “estándar”, los valores “útiles” están en la cabecera auxiliar (XTENSION):

XTENSION= 'IMAGE ' / Java FITS: Mon Jan 18 10:18:51 CET 2016
BITPIX = 8
NAXIS = 2 / Dimensionality
NAXIS1 = 453
NAXIS2 = 478
PCOUNT = 0 / No extra parameters
GCOUNT = 1 / One group
LONGSTRN= 'OGIP 1.0' / The OGIP long string convention may be used.
COMMENT This FITS file may contain long string keyword values that are
COMMENT continued over multiple keywords. This convention uses the '&'
COMMENT character at the end of a string which is then continued
COMMENT on subsequent keywords whose name = 'CONTINUE'.
-------------- Herschel Structure Data--------------------
Following fields are private to the structure of the
Java object this HDU is representing.
EXTNAME = 'red ' / name of this HDU
CLASS___= 'herschel.ia.dataset.ArrayDataset' / java representation
DATA____= 'herschel.ia.numeric.Byte2d' / java Data
-------------- Herschel Parameter Data--------------------
All actual parameter names are converted to FITS compliant
conventions. Note that the HIERARCH comments contain the
appropriate key mapping
CRPIX1 = 227.0 / [] WCS: Reference pixel position axis 1, uni&
COMMENT t=Scalar
CRPIX2 = 240.0 / [] WCS: Reference pixel position axis 2, uni&
COMMENT t=Scalar
CRVAL1 = 170.06281229854167 / [] WCS: First coordinate of reference pixel
CRVAL2 = 12.993779663437786 / [] WCS: Second coordinate of reference pixel
CDELT1 = -0.001666666666667 / [] WCS: Pixel scale axis 1, unit=Angle
CDELT2 = 0.001666666666667 / [] WCS: Pixel scale axis 2, unit=Angle
CTYPE1 = 'RA---TAN' / WCS: Projection type axis 1, default="LINEAR"
CTYPE2 = 'DEC--TAN' / WCS: Projection type axis 2, default="LINEAR"
EQUINOX = 2000.0 / [] WCS: Equinox, unit=Duration
CROTA2 = 0.0 / [] The Rotation angle
HIERARCH key.CRPIX1='crpix1'
HIERARCH key.CRPIX2='crpix2'
HIERARCH key.CRVAL1='crval1'
HIERARCH key.CRVAL2='crval2'
HIERARCH key.CDELT1='cdelt1'
HIERARCH key.CDELT2='cdelt2'
HIERARCH key.CTYPE1='ctype1'
HIERARCH key.CTYPE2='ctype2'
HIERARCH key.EQUINOX='equinox'
HIERARCH key.CROTA2='crota2'

Estos son los que permiten dibujar la imagen. Hablando de imágenes, una para aliviar tantos bloques ASCII:

WWT_2

Comprobamos que la imagen se dibuja en el lugar correcto del cielo, y la retícula nos da la información de los datos de Spitzer que hay justo debajo en la estructura de capas de WWT. Es, después de todo, la galaxia M66.

Después de la teoría viene la práctica, y como prometí que íbamos a empaquetar el software para que todo el mundo pudiese realizar esta composición, vamos a hacerlo utilizando el sistema de distribución que viene incluido en la solución que está en GitHub (https://github.com/WorldWideTelescope/wwt-windows-client).

Para ello, lo primero que hay que hacer es descargar una extensión de Visual Studio, porque la versión 2017 ya no lo incluye dentro de las características estándar. Esta extensión se encuentra en:

https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2017InstallerProjects

Una vez instalada, el proyecto WorldWide Telescope es accesible y se pueden realizar los siguientes pasos:

  • Como indica el ReadMe.txt dentro del proyecto Setup1, descomprimir el fichero datafiles.zip.
  • Establecer la configuración en “Release”.
  • Compilar el proyecto Worldwide Telescope.

Ya tenemos un ejecutable de conveniencia y un instalador MSI para distribuir la aplicación:

WWT_4

Esta versión del instalador la puedes encontrar en mi OneDrive:

https://1drv.ms/u/s!AoCZ8E1PIRqs4thFkZWBy7o-40i8GA

Si no queremos complicarnos con tipos de proyecto obsoletos y extensiones, también se puede crear muy fácilmente un instalador de tipo ClickOnce (para entendernos, como que el usa Google Chrome):

  • Botón derecho sobre la solución WWTExplorer.
  • Publicar (o Publish).
  • Escoger una ubicación en el disco duro local.
  • Instalación desde CD-ROM o DVD-ROM.
  • La aplicación no buscará actualizaciones.
  • Pulsar en Finalizar (Finish).
WWT_3

Puedes encontrar la versión ClickOnce del instalador comprimida en OneDrive:

https://1drv.ms/u/s!AoCZ8E1PIRqs4thEE5UboqZVuIgkOg

 

Anuncios

Retomando Dark Influence (II – Android)

Era el turno de la aplicación de Android, que daba un curioso mensaje sobre que la keystore en formato JKS ya no se recomendaba y que era aconsejable migrarla a PKCS12. Como no quería hacerlo de modo manual, empecé a seguir el tutorial que aparece aquí para preparar la app para su publicación:

https://docs.microsoft.com/en-us/xamarin/android/deploy-test/release-prep/?tabs=vswin

Lo primero que encontré fue un bug de Xamarin, en el que aunque establezcas el icono de la aplicación aquí:

DarkInfluence2_1

Seguirá devolviendo un error de compilación:

Severity Code Description Project File Line Suppression State
Error No resource found that matches the given name (at 'icon' with value '@mipmap/Icon'). DarkInfluence.Droid C:\Users\teles\Source\Workspaces\VampirOnline\Droid\obj\Release\android\manifest\AndroidManifest.xml 6

Que se resuelve editando manualmente el fichero AssemblyInfo.cs y añadiendo la siguiente línea:

[assembly: Application(Icon = "@mipmap/icon")]

Por supuesto si es ese icono el que queremos configurar como icono de la aplicación.

Una vez archivada la app, podemos firmarla mediante un asistente que generará una keystore apropiada. Para ello hay que pulsar en Distribuir (Distribute … en la imagen).

DarkInfluence2_2

Durante el asistente hay que seguir el tutorial enlazado al principio de este artículo y crear una nueva keystore. Una vez realizado esto podemos seguir intentando desplegar la app en el emulador de Android. El error sobre la migración de keystore ya no aparece pero un nuevo problema se presenta:

1>Build succeeded.
1>Unexpected install output: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl840508115.tmp/base.apk: Attempt to get length of null array]
1>
1> at Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(String output, String packageName) in E:\A\_work\25\s\External\androidtools\Mono.AndroidTools\Internal\AdbOutputParsing.cs:line 337
1> at Mono.AndroidTools.AndroidDevice.<>c__DisplayClass94_0.<InstallPackage>b__0(Task`1 t) in E:\A\_work\25\s\External\androidtools\Mono.AndroidTools\AndroidDevice.cs:line 746
1> at System.Threading.Tasks.ContinuationTaskFromResultTask`1.InnerInvoke()
1> at System.Threading.Tasks.Task.Execute()
1>
1>Deploy failed

Al parecer está causado por APK antiguos firmados con otro certificado. Visual Studio/Xamarin no los borrará y recreará, lo que provocará el error:

Output file 'bin\Debug\\DarkInfluence.Droid-armeabi-v7a-Signed.apk' exists

Parecía algo que se podía solucionar borrando manualmente los de todas las arquitecturas que haya. Seguía fallando con el mismo error INSTALL_PARSE_FAILED_NO_CERTIFICATES. Sospechando un bug en Xamarin, hice una búsqueda en Internet, donde encontré un informe de error de Visual Studio que se ajustaba a este mensaje:

https://developercommunity.visualstudio.com/content/problem/209865/cannot-deploy-xamarin-forms-app-error-install-pars.html

Parece que si versiones más modernas de Java (como 9 o 10) están instaladas como en mi caso, es necesario desinstalarlas para que el mecanismo de firmado de APK, basado en Java, funcione correctamente. Esto en realidad es un bug de Xamarin o el SDK de Android ya que la versión de Java seleccionada en Visual Studio es 1.8.0_172 y algún ejecutable se estaba localizando en el PATH.

Continuará…

Retomando Dark Influence (I)

Animado por el hecho de que Visual Studio 2017 se actualizaba a la versión 15.7.2, le di una segunda oportunidad al proyecto. De manera inesperada, simplemente con actualizar, el proyecto UWP volvía a funcionar, sin mostrar el error debido a dependencias de .NET Standard.

En otro ordenador donde tengo también configurada la conexión con TFS, y que está menos actualizado, los proyectos inicialmente no estaban disponibles, siendo necesaria la instalación de algunos SDKs de Windows bastante antiguos. Para ello sólo hay que pulsar con el botón derecho en los proyectos UWP que aparecen como “(no disponible)” y seleccionar “Descargar actualización”. Ojo, puede que estuvieran ya instalados, pero tuve que moverlos a otra unidad hace un par de semanas porque C: se estaba quedando sin espacio y quizá el instalador de Visual Studio no se fiaba de la integridad de la instalación de los SDKs.

Una vez hecho esto, los proyectos UWP ya aparecen cargados, pero los proyectos Xamarin de Android e iOS siguen siendo “incompatibles”.

DarkInfluence1

En esta ocasión, simplemente con hacer click derecho y seleccionar “Volver a cargar el proyecto”, el proyecto pasa a cargarse y estar disponible.

Ahora llega la prueba de fuego, ejecutar la versión UWP. Como dispositivo de despliegue selecciono “Equipo local”.

DarkInfluence2

La aplicación UWP se ejecuta correctamente y muestra su (sencillísima) interfaz de usuario:

DarkInfluence3

Todo esto simplemente actualizando Visual Studio. La solución y los proyectos relacionados no se han modificado ni una sola línea. Para terminar compruebo que los paquetes Nuget están actualizados. No es así, hay 7 actualizaciones que aplico con cierto miedo.

PM> Get-Package -updates

Id Versions Description ProjectName 
-- -------- ----------- ----------- 
Microsoft.NETCore.UniversalWindo... {6.1.4} Provides a set of packages that can be use... DarkInfluence.Windows.Test 
Microsoft.ApplicationInsights {2.6.4} Application Insights Base API. This packag... DarkInfluence.Windows 
Microsoft.ApplicationInsights.Pe... {1.2.3} This channel provides a peristant channel ... DarkInfluence.Windows 
Microsoft.ApplicationInsights.Wi... {1.1.1} Application Insights for .Net Windows appl... DarkInfluence.Windows 
Microsoft.NETCore.UniversalWindo... {6.1.4} Provides a set of packages that can be use... DarkInfluence.Windows 
NUnit {3.10.1} NUnit is a unit-testing framework for all ... DarkInfluence.UITests 
Xamarin.UITest {2.2.4} UI Automation Framework for testing Androi... DarkInfluence.UITests 
No hay actualizaciones de paquete disponibles en el origen del paquete actual del proyecto 'DarkInfluence.Droid'.
Xamarin.TestCloud.Agent {0.21.5} Xamarin Test Cloud Agent DarkInfluence.iOS

Hay un aviso con respecto a Insights:

U1608: Se detectó una versión del paquete fuera de la restricción de dependencia: Microsoft.ApplicationInsights.WindowsApps 1.1.1 requiere Microsoft.ApplicationInsights (= 1.2.3), pero la versión Microsoft.ApplicationInsights 2.6.4 ya se resolvió.

Compruebo para terminar esta puesta a punto que la aplicación sigue ejecutando con la misma configuración que antes y así es, aunque el compilar nos vuelve a mostrar el aviso anterior sobre Microsoft.ApplicationInsights.WindowsApps.

En la siguiente entrada, comprobaré el estado de la aplicación Xamarin para Android cuyas dependencias (el JDK instalado, versiones de Xamarin, API destino de la imagen de dispositivo en el emulador, etc.) la hacen especialmente interesante. Espero que este artículo te haya resultado útil.

Retomar antiguos proyectos software “caseros”

Suele ser muy complicado por dos razones. O bien las dependencias han desaparecido (a veces ocurre en Maven), o bien algunos IDE como Visual Studio tienen demasiada influencia en la gestión de configuración del proyecto y una actualización del IDE te deja el proyecto en un estado inconsistente. Ojo que esto no sólo pasa en VS, sino que Android Studio a través de Gradle hace lo mismo. Una actualización de Android Studio fuerza a actualizar Gradle que aplica nuevas reglas y el proyecto ya no compila sin haber cambiado ni una sola versión de las dependencias.

Voy a listar el estado actual los proyectos caseros en los que estoy trabajando e iré escribiendo futuros posts sobre cómo hice para resolver todos los problemas que me he ido encontrando.

First (mi antiguo TFC):

Este lo tengo reciente. Hoy mismo he instalado NetBeans 9.0 Beta y he intentado compilar mediante Maven el código del proyecto, que llegaba a ejecutar en NetBeans 8.2, recién desinstalado.

  • Error: Un paquete perteneciente a Image I/O (para manejar ficheros TIFF) ya no está en ninguno de los repositorios configurados de Maven.
  • Causa: Borrar el antiguo repositorio (C:\usuario\.netbeans o quizá C:\usuario\.m2, ya investigaré) con las dependencias descargadas de los repositorios de Maven.
  • Plan de acción: Usar referencias locales para todas las bibliotecas que falten.

Cableman (una aplicación de Xamarin Forms y UrhoSharp):

El mayor problema es que no recuerdo el estado anterior (es posible que sólo funcionase en un dispositivo real Android y en Windows UWP). Pero no hay framework más acoplado que Xamarin a las versiones de Visual Studio. Tras dos actualizaciones de versión (de 15.5 a 15.7), ya no funciona en Android (emulador) ni en Windows UWP.

  • Error: En Android da un error de runtime porque las rutas de Assets están mal. En UWP la actualización de Visual Studio ha introducido una dependencia de .NET  Standard, incompatible con la estrategia actual de compartición de código, que es mediante proyecto compartido, valga la redundancia.
  • Causa: Desconocida, updates de Xamarin o Visual Studio.
  • Plan de acción: El plan de acción de actualizar la estrategia de compartición de código de proyecto compartido a .NET Standard no ha tenido éxito porque UrhoSharp no funciona cuando se comparte el código de la lógica por .NET Standard.

Dark Influence (otra aplicación de Xamarin Forms):

Esta aplicación, sencillísima, funcionaba correctamente en Windows, Windows 10 Mobile, Android e iOS. De momento es un botón que hace un random en un array, aunque hay bastante lógica ya escrita y compartida mediante (otra vez) un proyecto compartido.

  • Error: Esto provoca errores en los proyectos específicos de plataforma porque Xamarin Forms aparentemente ha introducido una dependencia de .NET Standard.
  • Causa: Desconocida, updates de Xamarin o Visual Studio.
  • Plan de acción: Migrar a .NET Standard, ya que este proyecto no usa UrhoSharp.

Herschel Quick Look (un port de la versión de iOS a UWP usando WinObjC)

Todo compila bien, pero los XIB con delegates aparentemente no los soporta la herramienta de WinObjC xib2nib.

  • Error: Pantalla principal de la aplicación en blanco, con muchos nodos del XIB apareciendo como unhandled en la ejecución de xib2nib.
  • Causa: Desconocida por el momento. Quizá el delegate que se encarga de pintar la pantalla.
  • Plan de acción: Utilizando la herramienta nib2objc que convierte los ficheros de interfaz de XCode a ficheros de código en Objective C, tengo un fichero .m equivalente para la pantalla principal. No tengo muy claro cómo integrar ese fichero con el delegate que pinta todo lo demás.

 

Suelen decir que explicar un problema te ayuda a entenderlo, así que vamos a intentar entender todas estas cosas por aquí próximamente.

Sherlock Holmes and the Devil’s Daughter (no arranca)

Sí, parece que las compañías cada vez se arreglan para introducir bugs más raros, y cuando encima tienes varias capas añadidas (como Steam, la Game Bar de Windows y el DVR de Nvidia) que parece que se están peleando por dibujar cosas extrañas encima de tu juego, pues el caos es tremendo.

En realidad lo que me pasó es que configuré el sonido de Windows para que pasase de los auriculares a los altavoces integrados en el monitor. A partir de ese momento el juego no funcionaba: arrancaba, mostraba una pantalla en blanco, luego una en negro y no se podía continuar. No lo pude arreglar por los medios habituales, a pesar de que desactivé todos los overlays y reinstalé el juego desde cero.

Fue volver a configurar los auriculares como dispositivo predeterminado y arrancar el juego instantáneamente. Lo que no tengo claro es si tienes que mantener el dispositivo de sonido que utilizabas cuando lo instalaste o cuando jugaste por primera vez. Espero que sirva de ayuda.

Hacer funcionar Aliens Vs Predator: Gold Edition en Windows 8

Después de tantas reviews de juegos que no dieron ni un solo problema al instalarse o ejecutarse, llegó el momento de instalar este juegazo de Rebellion del año 1999 que no he tenido la oportunidad de pasarme (sí, sí, ya sé que el modo campaña es un asco, pero manejar el alien es taaaaan divertido).

El caso es que todo va súper bien desde el primer fotograma de la primera intro hasta la última selección del último menú que no te esperas el aviso de Windows cuando se cierra inesperadamente la aplicación. Es el típico diálogo de Windows (Windows está buscando una solución…) así que me ahorro el pantallazo. Rebuscando un poco en el log de eventos saqué un par de datos más:

Nombre de la aplicación con errores: avp.exe, versión: 0.0.0.0, marca de tiempo: 0x39255626
Nombre del módulo con errores: apphelp.dll, versión: 6.2.9200.16420, marca de tiempo: 0x505aa904
Código de excepción: 0xc0000409

Esto del apphelp.dll me daba muy mala espina, porque es la DLL principal de los parches de compatibilidad que Windows aplica a programas antiguos… Que el propio parche estuviera fallando y, además, con el código 0xc0000409 que significa “Error desconocido de software” pintaba bastante mal.

Me empecé a armar con dos de mis herramientas preferidas contra los juegos antiguos que se niegan a funcionar:

– Application Verifier (viene con el SDK de Windows)

– Application Compatibility Toolkit (antes era una herramienta suelta y ahora viene integrada con el ADK de Windows)

El caso es que al abrir el Compatibility Administrator (32 bit) que incluye la segunda vi que, efectivamente, Windows tenía un parche para el juego que no estaba dando muy buen resultado:

image

En ese momento pensé, seguro que alguien ha sido más listo que yo en algún otro momento espaciotemporal, es decir, busqué en Google.

Resumen: Rebellion liberó el código fuente en el año 2000 (¡estamos hablando de un  juego de Windows 98 y DirectX 6!) y un amable compañero de las redes creó un lanzador (AvPx.exe) que no solo arregla el problema del cierre inesperado sino que además te permite cargar la banda sonora como OGGs ripeados, originalmente venía en CD aparte y las versiones modernas de Windows, quiero decir, de DirectX, ya no lo permiten. Para no duplicar el contenido de Internet innecesariamente, pongo un enlace:

http://homepage.eircom.net/~duncandsl/avp/

Espero que sirva de ayuda.

Windows 8 tiene un pico de actividad cada 30 minutos (resuelto por fin)

Lo primero que hay que decir es que el ordenador del que hablo es un HTPC + NAS, con un procesador Atom D510 y 2 GB de RAM. Es, por tanto, un sistema de muy baja potencia, ya que todo el trabajo duro durante sus horas de servicio lo hacen la tarjeta RAID hardware para manejar el acceso a los discos y la GPU GeForce GT220 para procesar los vídeos almacenados.

Desde que instalé Windows 8 (diseñado para tablets y equipos móviles, no lo olvidemos) se nota la diferencia y el equipo va muchísimo más rápido, salvo momentos, cada aproximadamente media hora, en el que los vídeos se paralizan durante unos segundos.

Investigué los logs de eventos y sólo encontré eventos periódicos referidos a un fallo de comunicación con el disco registrado por la controladora RAID. Profundicé en esto siguiendo los pasos descritos en este artículo (referidos a discos SSD, de los cuales mi equipo tiene uno para Windows):

http://www.happysysadm.com/2012/12/intel-g530-nas-performance-part-3.HTML

El paso relevante (el tercero en el artículo) era comprobar el modo en el que se utilizaba Serial ATA en el equipo. Si se emula el comportamiento de IDE, pueden existir problemas de rendimiento. Por lo tanto, pasé a utilizar el modo AHCI y el nuevo driver storahci incluido con Windows.

Sin embargo esto no solucionó los problemas de congelación en los vídeos. Pasé al inicio otra vez, revisar los logs de eventos.

En el log de eventos, en este segundo vistazo, ¡¡descubrí cambios en el modo de arranque del BITS (Background Intelligent Transfer System), cada media hora!! Los había visto antes, pero no les presté atención.

Algo (desconocido por el momento y así se quedará mientras siga funcionando) comprueba actualizaciones cada media hora usando BITS. Posibles candidatos son:

  • Windows Update
  • Microsoft Security Essentials
  • Smartscreen
  • Windows Store

Este cambio de modo de arranque y el propio arranque y la parada del servicio de BITS eran suficientes en esta máquina tan justa de recursos para bloquear la reproducción de vídeo.

LA SOLUCIÓN: Establecer el modo de arranque del servicio de BITS en Automático. Esto ha resuelto el problema.

Espero que sirva de ayuda.

No instalar los drivers Sierra Wireless del Escritorio Movistar 8.8 en Windows 8

Al parecer, a algún programador de Movistar/Indra se le ha ocurrido la genial idea de forzar la instalación de drivers sin firmar mediante código.

Esto provoca que Windows detenga la ejecución de los drivers y toda su cadena de filtros hasta… (redoble de tambores) el host de USB. Efectivamente bloquea el uso de todos los puertos USB.

Solución:
1) Borrar dispositivo del Administrador de dispositivos (marcar la opción borrar drivers). El dispositivo de Sierra aparece bajo Modems.
2) Desinstalar los controladores en desinstalar programas, aparece con el nombre Sierra Wireless Drivers.
3) Eliminar del Registro la limitación de filtros (LowerFilters/UpperFilters) que dejan estos drivers incompatibles.
Para ello seguir este tutorial: http://answers.microsoft.com/en-us/windows/forum/windows_7-hardware/error-code-52-usb-ports-not-recognizing-connected/2379017c-d513-478c-a184-0d1b7cd408b2

Espero que sirva de ayuda para este desastre provocado por la incompetencia de la empresa más grande de España.

Instalación SharePoint 2013 preview Standalone (problemas)

Al instalar esta beta se presentan una serie de problemas, que se pueden resolver así:

1) No se instala SQL Server 2008 Native Client. Solución (http://blogs.technet.com/b/tothesharepoint/archive/2012/08/20/workaround-sharepoint-2013-preview-prerequisite-installer-doesn-t-install-the-microsoft-sql-server-2008-r2-sp1-native-client.aspx)
2) Error creando la base de datos de configuración con una cuenta no de dominio. Solución: (http://shareddev.blogspot.com.es/2012/07/sharepoint-2013-preview-deployment.html)
3) Error arrancando el servicio de búsqueda en el paso 9 de PS-CONFIG. Solución: (http://social.technet.microsoft.com/Forums/en-US/sharepointitpropreview/thread/62704a0b-abf6-4b59-a7d5-c68d1e652fc2)

Tan simple como eso :D.

Utilísimos programas para buscar funcionalidades en el Ribbon

Office Labs, la división de Microsoft Research dedicada a ampliar la experiencia con los programas de la suite ofimática de Microsoft, desarrolló un complemento para Office llamado Search Commands, que se puede descargar desde http://www.microsoft.com/en-us/download/details.aspx?id=28559 . Con él, basta con escribir el nombre de la funcionalidad que buscamos, para que nos indique cómo acceder hasta ella. Lamentablemente, necesita que el idioma de instalación de Office sea inglés, por lo que sólo podremos hacer uso de su magnífica funcionalidad en ese caso.

Una alternativa es Ribbon Search, que tiene la misma funcionalidad, pero que en vez de mostrar el botón con el que ejecutar la orden que buscábamos, lo que muestra es la navegación que hay que realizar por la cinta de opciones para llegar a ella. Ribbon Search se puede descargar de http://www.easy2sync.com/en/produkte/RibbonSearch.php y es totalmente gratuito para uso personal. Es una aplicación independiente que se ejecuta junto a Office. Cuando detecta que algunas de las aplicaciones en uso dispone de la cinta de opciones, se muestra como una ventana flotante justo por encima de ella, hacia la parte derecha de la pantalla. Una vez más, sólo buscará funcionalidades si las aplicaciones de Office han sido instaladas en inglés.