viernes, 10 de enero de 2014

Un ejemplo de Qt Android Extras: usando el Text To Speech de Android

Escribo esto como recordatorio por si me vuelve a tocar hacerlo otra vez. A veces la documentación de QT no es todo lo extensa que uno querría y con los extras de Android me he tenido que pegar un buen rato. Lo que quería hacer es llamar a la clase TexToSpeech del SDK de Android desde QT y lo que tenía como referencia era la documentación de QtAndroidExtras, el ejemplo de notificaciones que proporcionan y el intento de otra persona de hacer lo mismo que yo en un foro de QT.

Parecía que era suficiente, de hecho, cambiando un poco el ejemplo de las notificaciones por el código del foro debería haber sido más que suficiente. Pero el tipo del foro no tenia un código funcional, el mismo pedía ayuda y no había respuesta. Por otro lado el código de ejemplo de QT no hace más que llamar a un método estático y yo quería crear una clase Java que heredase TextToSpeech (cosa que al final no conseguí).

Pues bien, como decía, a modo de recordatorio dejaré una serie de problemas que me he encontrado y como los he ido sorteando. El formato del siguiente guión es el de notas mentales, o si lo preferís, un diálogo conmigo mismo.

1. Me defiendo en QT pero no tengo ni idea de programar en el SDK de Android.
No  hay mucha solución a esto, o aprendes o te buscas la vida buscando ejemplos. Ya se han citado los ingredientes a utilizar.

2. Se necesita crear un objeto de una clase en cuyo constructor toma como parámetro el contexto de la actividad.
La clase que escribas debe extender QtActivity, esta proporcionará el contexto a la hora de crear la otra, en este caso TextToSpeech.

3. Pero necesito que mi clase implemente onListener y ya hereda QtActivity.
Bueno... una cosa no quita la otra:

public class TestAndroidClient extends QtActivity implements TextToSpeech.OnInitListener


4. He creado la clase java y no se dónde ponerla, de hecho creo que no se instala a través del apk
Fíjate en el ejemplo de las notificaciones y crea una estructura similar. En la raíz de tu proyecto crea un directorio llamado android-source y dentro de este otro con el nombre src. A partir de ahí tendrás los subsiguientes, por ejemplo: org/qtproject/example/nombre-de-tu-app/TuClase.java



Asegúrate de que en el .pro del proyecto están las siguientes líneas:

QT+=android-extras
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-source

En linux, una vez constrido, puedes hacer en el directorio de construcción (build-xxxx) en un terminal:

find . -name TuClase.java

y comprobar que la ruta es la correcta




5. Cuando trato de ejecutar la aplicación se cierra sin mostrar excepción y esto ocurre al llamar a mi clase.
Esto seguramente es porque no la encuentra. Comprueba que tienes creado el manifest.xml y que referencia correctamente a tu clase en un tag activity


    
        
   

6. Pero yo quiero hacer una clase que herede de TextToSpeech y que sea todo más dinámico.
Bueno pues no tengo solución para esto. De hecho, no he conseguido hacer una llamada que no sea estática a la clase Java creada. A decir verdad, tampoco he encontrado un ejemplo que lo haga.

7. Estoy intentando llamar a un método estático desde el código C++ y sigo sin conseguirlo.
Hay que fijarse en la firma de los parámetros de entrada y salida. También es importante usar el javaobject correcto desde C++ para que la función Java lo reconozca. Si tienes la siguiente función en java:

    public static void test(String msg)
    {
        System.out.println(msg );
        tts.speak(msg, TextToSpeech.QUEUE_FLUSH, null);

    }

La correspondiente llamada en C+++ será:

    QAndroidJniObject javaMessage = QAndroidJniObject::fromString(msg);
    QAndroidJniObject::callStaticMethod("org/qtproject/example/testandroidextras/TestAndroidClient",
                                              "test",
                                              "(Ljava/lang/String;)V",
                                              javaMessage.object());


Finalmente, el código fuente lo podéis encontrar en GitHub

lunes, 30 de diciembre de 2013

Un par de horas con las Google Glasses

Resulta que ha llegado a la oficina un prototipo de las famosas gafas de Google, así que me he puesto a jugar con ellas. Tengo que decir por una lado que me lo he pasado bien, como con cualquier trasto tecnológico que pasa por mis manos, pero también aviso que soy mas bien un detractor de las mismas desde antes de probarlas.

Guille Glasses vs Google Glasses

El prisma

Siempre que he visto a alguien haciendo uso de las gafas, me ha dado la impresión de que no debe ser muy cómodo sostener la mirada continuadamente sobre el prisma y ciertamente no lo es, te cansas. En su favor puedo decir que mirando durante unos pocos segundos la imagen es lo suficientemente nítida y no tienes la sensación de estar mirando un punto excesivamente cercano. Pero repito, por encima de unos 20-30 segundos empiezas a tener sensación de cansancio.

No te esperes una gran resolución ni un gran contraste. El prisma no da para más y, aunque puedes ver fotos de forma aceptable, salta a la vista que las apps de Google eligen cuidadosamente los colores a utilizar. Por ejemplo, en la aplicación de navegación veremos fondos negros, letras blancas y lineas azules para orientarnos.

Hablando con las gafas

Llegado el momento de interaccionar con ellas, habrá que hacerlo en inglés (de momento) y con un acento mínimamente aceptable. El problema se acrecienta cuando intentas una llamada o vídeo llamada y tienes que interpretar como se pronuncia en inglés el nombre de la otra persona. Por ejemplo:

- "Ok Glass"
- "Make a video call"
- "Guillermo Amat"

Pues tendrás que imaginarte como diría un estadounidense el nombre Guillermo Amat. Como comprenderás haciendo este tipo de pruebas uno se siente un poco inútil, así que me he encerrado en un despacho para no dar un espectáculo a los compañeros. Tras unas cuantas pruebas consigues decir el nombre de fulanito como si fueses guiri, aunque seguirá siendo difícil repetirlo.

Pero lo más frustrante (y divertido de paso) ha sido descubrir que no sé decir "Google", debo haberlo intentado unas cincuenta veces y lo he logrado decir bien una. No he tenido problemas con el resto de las opciones: "make a call", "get directions", "take a picture", "record a video", etc. ¡Pero no sé decir Google! ¡Es el colmo! Así que he tenido que acceder al buscador mediante el touchpad para probar a buscar cosas, y entonces la diversión ha seguido ¡No se pronunciar Sean Penn!

- "Who is Sean Penn"
Google: Who is something

- "Who is Sean Penn"
Google: Who is some pain

- "Who is Sean Penn"
Google: Who is same song

Y unos cuantos intentos más que no recuerdo. Así que cambié de actor:

- "How old is Tom Cruise"
Google: How tall is Tom Cruise. Y a continuación mostraba un listado de imágenes de Tom Cruise en las que siempre estaba al lado de alguien ¿Recochineo? Al menos esto me funcionó al siguiente intento.

De acuerdo, esto no es un punto en contra del dispositivo, ya que cuando se comercialicen en nuestro país estarán preparadas para nuestro idioma. Realmente la interacción por voz es bastante buena y si no te aclaras puedes usar el área táctil de la patilla.

El Touchpad

No hay mucho que decir aquí, en la patilla tenemos un touchpad con el que podremos navegar por todas las opciones, simplemente hay que aprenderse los gestos a utilizar.

Tal vez pienses que no es obligatorio usarlo, que realmente puedes usar el dispositivo realizando todas las acciones mediante voz, pues no es así. Te hará falta darle un toque al pad para colgar una llamada o detener un vídeo, por ejemplo. Otras acciones también lo requerirán, como la navegación por ciertos menús.

El "auricular"

Técnicamente el auricular no existe, hay un elemento que vibra en contacto con tu cabeza, aunque de todos modos si no las llevas puestas algo se oye. Al principio he tenido la sensación de que las vibraciones se me introducían por la sien pero al rato se me ha olvidado por completo. De nuevo es cuestión de adaptarse. En la práctica, cuando estés en una llamada, el sonido que percibirás será de una calidad aproximadamente similar a la de un teléfono.

La cámara 

Bueno, no es nada del otro mundo. Cumple su cometido pero si quieres sacar una buena foto no uses las gafas. Además si quieres enfocar a algo cercano tendrás que practicar un poco, la idea en la foto de abajo era sacar el portalápices y el vaso completamente centrados. En cuanto a la grabación de vídeo puede ser divertido grabar un descenso en bicicleta de montaña (por decir algo) pero deberías tener en cuenta que si te la pegas llevas 1500$ sobre las orejas.

Fotografía cortesía de las Google Glasses


Usos y aplicaciones

Hay unas cuantas aplicaciones disponibles en un app store dedicado a las gafas, todavía no muchas, pero hay para entretenerse un rato. Además, por supuesto, están preinstaladas las más importantes de Google.

Entre los usos básicos, podemos hacer fotos mediante nuestra voz ("take a picture") o guiñando el ojo derecho, grabar un vídeo, hacer una llamada, pedir indicaciones para llegar a una dirección, buscar en Google... aunque de nuevo insisto en que de momento en inglés.

Más interesante puede ser hacer una vídeo llamada, usando Hangouts, con lo que el receptor verá lo que tú estas mirando. Por otro lado tu verás la cara de esa persona en el prisma.

Desde el store podremos descargar aplicaciones deportivas (Strava), de recetas de cocina, meteorología, etc. A mi me ha parecido interesante probar World Lens porque en un móvil ya me parecía fantástica y en las gafas tendría que ser aún mejor... lamentablemente no he conseguido que me tradujera un texto en ingles. Detectaba el párrafo y hacía zoom sobre el pero no me ha salido la traducción.

Entonces, ¿por qué no soy un fan de este cacharro?

A ver... repito que me lo estoy pasando bomba con ellas pero hay una serie de aspectos que me hacen pensar que este dispositivo tiene que mejorar bastante. En realidad la mayoría ya las pensaba de antemano y el hecho de probarlas no me ha cambiado la opinión:
  1. Para empezar soy un cuatro ojos y no puedo usar mis gafas con las Google Glasses
  2. Mirar la imagen del prisma de forma continua es cansino. Hay tecnologías parecidas desde hace tiempo, por ejemplo el casco del Eurofighter. En su día estuve buscando alguna referencia sobre esto y encontré que algunos pilotos de combate desarrollan problemas en la vista por el uso continuado de este tipo de visores. Ahora este posible problema nos lo podremos encontrar todos.
  3. Requieren bastante atención, sobre todo mirando la pantalla. Para que se entienda: si vas en tu coche mirando un GPS montado en el parabrisas tendrás más información de lo que pasa delante tuyo que si miras el prisma de estas gafas. La vista tiene que centrarse en un punto muy cercano y extremo. En mi opinión no es como para andar con ellas por la calle, pero tampoco creo que lo sean los auriculares y la gente lo hace: es normal ver personas cruzar calles sin miedo a la muerte mientras escuchan su música preferida encerradas en su mundo, en fin...
  4. Tampoco iría con ellas por la calle, hoy por hoy, por razones de estética. Me sentiría raro y me daría vergüenza , pero vuelvo a poner el caso de antes: no andaría por la calle con unos auriculares que me tapasen las orejas y parte de la cara... pero la gente lo hace. Si crees que exagero, prueba lo siguiente en presencia de gente: ponte una gafas, preferiblemente sin  cristales o con unos transparentes, di "hola gafas", después di "haz una foto", ahora comienza a acariciar la patilla derecha con cariño, dale un toque seco, luego mas caricias hacia abajo, luego hacia un lado, al otro o aleatoriamente, guiña el ojo derecho, sigue acariciando con amor la patilla... Si puedes hacer esto en público (por ejemplo en un vagón del metro), entonces podrás llevar unas Google Glasses
  5. Duración de la batería (unas cuantas horas como mucho)
  6. Precio prohibitivo, si no cambia claro.
  7. Básicamente hacen lo mimo que tu teléfono. Por cierto, necesitarás enlazarlas con tu teléfono para poder hacer llamadas, o sea, no están pensadas como una alternativa real al móvil.
En resumen, no estoy afirmando rotundamente que no tengan futuro o que nunca vaya a usar algo parecido. Yo desde luego no me gastaría 1500$ en estas en particular. Lo que es innegable es que la wearable technology, o mejor dicho ropa tecnológica, está llegando para quedarse y si no es este dispositivo será otro el que se masifique.

Las gafas Recon Jet para ciclistas


En cuanto a las gafas, hay unas cuantas más de otros fabricantes, similares. Creo que vamos a ver pronto alguna de ellas especializadas en ciertas actividades, como las Recon Jet. Sí que me parece útil para un corredor visualizar su pulso, tiempo, diferencia con un oponente, velocidad, etc. y apuesto a que veremos algunas en el próximo Tour de Francia.



viernes, 29 de noviembre de 2013

Instalación de XBMC sobre OpenSuse: optimización y personalización

En el post anterior, dejamos nuestro XBMC en u punto en el que ya era utilizable. Ahora ha llegado el momento de hacer unas cuantas pruebas y de realizar un ajuste fino para optimizar el arranque. Además le daremos un pequeño toque de personalización para que nos de más impresión de estar ante un equipo HTPC.

Sobre tiempos de arranque

Las comparaciones son odiosas, y esta no va a ser una excepción. Tiempo atrás había estado haciendo unas cuantas pruebas con el equipo original y OpenElec. Como dije, OpenElec está muy optimizado y eso se nota también a la hora de iniciar nuestra máquina.

La prueba inicial, antes de embarcarme en todo esto, fue comparar tiempos de arranque con diferentes medios. Realmente tenía OpenElec instalado en una tarjeta microSD y después la cloné a una memoria USB bastante más rápida. Luego, por tener una primera referencia, comparé esos tiempos con los de arranque de la OpenSuse, que tenía instalada en el disco SATA de 3,5" de la misma máquina.

 Quiero aclarar que el tiempo que quise medir se corresponde con lo que el usuario percibiría como arranque, o sea, desde que se inicia el ordenador hasta que el sistema acepta la interacción con el usuario por ratón, teclado o lo que sea. Así que en el caso de OpenElec era desde que le daba al botón de alimentación hasta que presenta el menú inicial, mientras que para openSuse también comenzaba a contar con el botón de alimentación, me saltaba la espera de Grub pulsando intro y paraba cuando KDE mostraba el escritorio.

Aclarado esto, antes de ponernos con la faena y para tener más información y poder deducir más cosas, podemos averiguar la velocidad de nuestros discos. Para ello, ejecutaremos como root lo siguiente:

hdparm -t /dev/xxxx

donde xxxx podrá ser hda, sda...

En mi caso me dio por comparar unos cuantos medios que tenía a mi alcance pero, para no marear, sólo pondré los que he mencionado antes. Las velocidades de lectura fueron las siguientes:

  1. Tarjeta MicroSD: 12MB/s
  2. USB Kigston DataTraveler G2: 20MB/s
  3. Disco duro SATA 3,5": 120MB/s
Y después me puse a arrancar el mismo PC desde cada uno de los soportes y a tomar tiempos crono en mano:
  1. Arranque de OpenElec desde MicroSD: 40 segundos
  2. Arranque de OpenElec desde la memoria USB: 30 segundos
  3. Arranque de OpenSuse desde el disco: 42 segundos
Viendo esto, y teniendo en cuenta que iba a comprar un disco SATA de 2.5" donde iba a instalar una openSuse que no cargaría KDE, esperaba tener unos tiempos menores de 40 segundos.

 Tras llegarme todo el material, montarlo e instalar el sistema operativo, el tiempo de inicio era de unos 35 segundos. Para mejorarlo busqué algún artículo en el que se hablaba de cómo optimizar este tiempo modificando los servicios arrancados durante el inicio de la máquina. Así pues, lo siguiente que se puede hacer para comprobar nuestros avances, será instalar el paquete systemd-analyze.

El primer resultado que obtuve al ejecutar dicho comando fue el siguiente:

En Yast, en Servicios del Sistema, se puede desactivar aquello que no necesitemos. Yo quité sólo Postfix y CUPS

Como se puede ver en la primera linea ejecutada en la imagen mostrada a continuación, sólo mejoró unas décimas de segundo. Tendremos más pistas de lo que está sucediendo gracias a la segunda orden que aparece:

systemd-analyze blame

En este caso levantar la red resulta ser un proceso muy pesado.
Para evitar lo que acabamos de ver podremos conectarnos a la red mediante NetworkManager en vez de hacerlo con ifup en el arranque. Para ello lo cambiaremos otra vez en Yast, en el apartado de Ajustes de Red tal como se ve aquí:
 Ahora nos avisará de que necesitamos tener una aplicación que nos gestione la conexión. Aceptaremos.
 Revisamos los tiempos y vemos que se obtiene una mejora sustancial (ver en la imagen siguiente). Es cierto que sigue siendo necesario conectarse a la red, pero esa operación se realizará una vez cargado XBMC y no nos percataremos de ello.

Para conseguir lo que se acaba de comentar, es necesario instalar un Addon de XBMC para NetworkManager. Lo encontraremos en el listado de addons de programas de XBMC



Tras la instalación lo encontraremos en el menú programas y solo tendremos que configurar nuestra red.



Ahora vuelvo a referirme al tiempo crono en mano. Tras todos estos cambios el nuevo tiempo de arranque era de 29 segundos frente a los 35 iniciales. Había mejorado unos 6 segundos, no está mal, aunque supongo que será mejorable, así que cualquier idea será bienvenida :) Me gustaría ver esto mismo en un disco SSD pero, como ya dije, sacrifiqué tiempo por espacio.

Ocultar Grub

Al tratarse de un equipo dedicado a arrancar sólamente nuestro XBMC ¿por qué mostrar el menú de Grub? ¿Por qué perder unso valiosos segundos esperando a que el usuario haga una elección en el menú de arranque? No nos hace falta: vamos a ocultarlo.

Para hacer esto acudiremos como siempre a Yast. En Configuración del cargador de Arranque haremos clic sobre el botón Opciones del cargador de arranque
 Ahora simplemente marcaremos la opción Ocultar el menú en el arranque
 Gracias a esto nuestro sistema iniciará sin pausas nuestro XBMC, con lo que nos habremos ahorrado 8 segundos más. Ojo, este tiempo no lo estaba contabilizando en las referencias que estaba dando antes, así que en el ejemplo siguen siendo los 29 segundos que comentaba antes.

Un arranque más XBMC

No tengo nada en contra de la mascota de openSuse pero no me apetece ver el camaleón verde en los 30-40 segundos en los que carga el sistema, en todo caso se debería mostrar una imagen algo más integrada en el espíritu de nuestro media center. Afortunadamente alguien ya ha pensado en esto y tenemos un paquete que sustituirá al fondo por defecto: plymouth-branding-xbmc

Para bajarlo acudiremos a la web de búsqueda de paquetes, ya que no lo tendremos en ningún repositorio de nuestra máquina y no podremos instalarlo directamente.

Buscaremos el término xbmc


Escogeremos el paquete que nos interesa y se nos desplegarán las opciones. Si no hay versión estable le diremos que nos muestre las que no lo son y finalmente seleccionaremos 1 click install
 Después de esto nos eliminará el paquete  por defecto y nos añadirá el nuevo.
 No hay nada más que hacer, en el próximo reinicio nos encontraremos con una pantalla similar a esta:


Mi guerra con la temperatura

Ya dije en el otro post que adquirí dos nuevos ventiladores. Lo que no conté es que fue una compra posterior, después de ver como funcionaba el equipo recién montado. Con el ventilador original de la placa Zotac, llegaba facilmente a los 65 grados e, incluso, a los 70 en determinadas condiciones. Cuando la tuve montada en la caja anterior no era así, seguramente porque había más espacio interior. Tras el montaje de los dos nuevos ventiladores más silenciosos, y con mejor circulación de aire, la situación mejoro bastante (de 5 a 10 grados).

En todo caso, esto fue un problema mío que tal vez no interese. Lo que sí que puede interesar es lo siguiente. Todos estos valores los veía en un monitor de sistema de KDE ya que mi XBMC no me los mostraba en las pantallas de información en las que debe aparecer.

Si os ocurre esto podéis consultar este enlace y después poneros manos a la obra con el archivo de configuración. Básicamente, necesitáis hacer un script que devuelva el valor de la temperatura que debe ser mostrar tanto para la CPU como para la GPU.

Podéis ejecutar las pruebas que hagáis en un terminal de comandos hasta que os funcione adecuadamente:



después se debe crear el archivo XML que contenga la instrucción, que deberá estar en la ruta:

~./xbmc/userdata/advancedsettings.xml

Este es mi fichero, pero no tiene por qué ser válido para otros, como se puede ver, depende mucho del hardware que se tenga:

  

echo "$(nvidia-settings -c :0 -tq GPUCoreTemp | tail -n 1) C"
echo "$(sensors -u | tail -n64 | grep temp2_input | awk '{print $2 }' |awk '{printf("%d\n",$1 + 0.5);}') C"


Una vez hecho esto ya deberías ver la temperatura de la CPU (sólo mostrará un valor aunque tengáis varios cores)
 Y la temperatura del chip gráfico

Después de todo esto parece que nuestro equipo ya se está ganando un sitio en el salón de nuestra casa. En el próximo capítulo contaré como solucionar alguna de las carencias que sufriremos al no estar bajo la ayuda de KDE, por ejemplo, el manejo de dispositivos Bluetooth.

domingo, 17 de noviembre de 2013

Instalación de XBMC sobre OpenSuse

Como se puede ver por el título del post, he estado pegándome con la instalación de XBMC en un equipo con OpenSuse. No hay ningún misterio en ello, sólo elegir los paquetes a instalar y dejar que Yast haga todo el trabajo. Sin embargo quiero contar la experiencia porque hay unas particularidades que tal vez sean interesantes para otros, de hecho creo que lo haré en más de un artículo porque me parece que en uno sólo quedaría demasiado largo.

Antes de nada quiero decir que tal vez no debas seguir leyendo. Sí, te invito a que pares aquí. Si te gustan las soluciones fáciles te recomiendo que te compres un pincho HDMI Android, una Ouya o incluso que cojas un PC viejo o una Raspberry Pi y le pongas OpenElec. Realmente OpenELec es una de mis opciones favoritas por su simplicidad y su optimización. Si sólo quieres un equipo media center conectado a tu tele recomiendo decididamente esta opción.

El problema es que yo quiero pedirle algo más a este equipo, quiero instalarle OwnCloud para tener mi nube personal disponible allí donde esté, quiero administrarlo remotamente, encenderlo y apagarlo a distancia, descargar torrents, etc. Además, aprovechando que el equipo estará en el salón de la casa, le pondré un emulador de Amiga que, por supuesto, se manejará desde XBMC, Todo esto me hizo descartar la opción de usar cualquier dispositivo basado en Android e hizo que OpenElec no fuese lo más recomendable para mi.

Sobre el hardware


Por otro lado, habían una serie de factores que condicionaban cómo haría las cosas. En primer lugar quería reciclar un equipo que ya tenía, utilizando, cómo mínimo, la placa madre con su RAM. En cuando al disco duro hubiese sido muy recomendable usar un SSD pero el hecho de usar el equipo como servidor OwnCloud me hizo decantarme por una unidad convencional de 2,5" para tener más almacenamiento a un precio asequible.

Sin duda el mayor quebradero de cabeza fue la caja. Aclaro que en principio no me interesaba la típica caja HTPC grande, con aspecto de equipo de DVD. Quería algo pequeño que tuviese un aspecto similar a una consola Wii, algo que no cantase mucho cerca del televisor. Así que mi primera opción fue comprar una Morex T3320 pero fui victima de mi elección en cuanto al reciclaje. Hoy puedo decir que cuando compré la placa Zotac IONITX-D-E  no estuve muy acertado. El error fue que esa era una de las primera placas que incluían un Atom N330 que, si no recuerdo mal, fue el primer Atom con doble núcleo y 64 bits. El caso es que no ofrecía mucho más rendimiento que sus hermanos pequeños y, en cambio, obligaba a hacer uso de un ventilador sobre el disipador de la placa. Pues bien, esto eliminaba la mayoría de las cajas que me gustaban pues con unos 6 o 6,5 cm de altura y espacios tan reducidos no podía incluir el ventilador. Teniendo todo esto en cuenta, al final, me hice con una Intertech Mini ITX E-i5 con mayor altura y cuyo aspecto y acabado (todo aluminio) no estaba mal.



Otra de las compras fueron unos nuevos ventiladores. Ya que no podía librarme de la ventilación, el que venía de serie con la placa me parecía demasiado ruidoso. Tras las típicas búsquedas en foros, decidí comprar dos  Blacknoise uno de 60 mm para la placa y otro de 40 para la caja.



Resumiendo, los componentes son los siguientes:
  • Kingston ValueRAM 2GB DDR2 800 PC2-6400 (Reciclado)
  • Zotac IONITX-D-E ION mini-ITX Atom N330 WiFi (Reciclado)
  • Intertech Mini ITX E-i5 (69,60€)
  • Blacnoise BlackSilentFan XR1  (5,99€)
  • Blacnoise BlackSilentFan  XM1 (4,99€)
  • Toshiba MQ01ABD050 2.5" 500GB 5400RPM SATA  (43,99€)

Instalando OpenSuse y XBMC

Evidentemente, empezaremos por instalar OpenSuse. No voy a entrar mucho en detalles con esto ya que sólo hay que dejarse llevar por el asistente de instalación y todo es muy sencillo.

Seguiremos los pasos habituales de elección de idioma, zona horaria, etc. Llegado el momento aceptaremos que instale el escritorio KDE, ya que nos dará flexibilidad para instalar y configurar todos los paquetes que deseemos de un modo más agradable.


Después de esto, aceptaremos o modificaremos a nuestro antojo las particiones sugeridas, crearemos nuestro usuario y aceptaremos el resumen de la instalación, con lo que comenzará todo el proceso. Pues bien, ahora tenemos unos 30 o 40 minutos para hacer algo realmente maravilloso ¡¡¡como jugar en otro PC con un emulador de Amiga al Project X!!!



Bueno... en realidad lo que hice fue vaciar el lavavajillas y colocar vasos, platos y cubiertos en sus lugares correspondientes :(

En fin, después de este lapso tan enriquecedor, el sistema se reiniciará y vermos por primera vez nuestro escritorio.


Ahora tendremos que configurar la red, así que introduciremos las opciones que necesitemos respecto a DCHP, etc. Si usamos configuración inalámbrica es posible que quiera instalar el paquete iw, simplemente hay que decir que sí.



Una vez comprobado que tenemos conectividad y podemos salir al mundo exterior, es un buen momento para actualizar los paquetes instalados. Como se ha usado una imagen de DVD, una gran cantidad de rpms contarán con nuevas versiones con correcciones de fallos etc. Para forzar su renovación en el apartado Maquina del lanzador KDE elegiremos Añadir / quitar programas. Una vez cargada la aplicación, iremos al menú Paquete y en el submenú Todos los paquetes escogeremos Actualizar si hay una versión disponible.


En mi caso me avisó de que se instalarían casi 400 paquetes ¡con lo cuál era una gran oportunidad para jugar al Project X!



Pero... en realidad me puse a fregar todo aquello que no había cabido en el lavavajillas :(

Ahora añadiremos dos repositorios de paquetes rpm que nos serán muy útiles: el de los drivers de la tarjeta gráfica (Nvidia en mi caso) y el repositorio Packman donde encontraremos el software XBMC además de los codecs de vídeo que necesitaremos. Para hacer esto iremos al lanzador de KDE y en el apartado Máquina escogeremos Yast. Tras autenticarnos como root seleccionaremos la aplicación Repositorios de software y veremos lo siguiente:



Haremos clic sobre el botón añadir, después en la opción Repositiorios de la comunidad y por último añadiremos los correspondientes a Packman y Nvidia:


Tras hacer esto estaremos en disposición de empezar a instalar lo que nos sea necesario. Iremos de nuevo al instalador de software y buscaremos los paquetes xbmc y w32codec-all (este último son todos los codecs propietarios que no vienen por defecto en OpenSuse)

Haremos clic sobre Aceptar y probablemente nos  avise de un conflicto respecto a xbmc lo que haremos será de proveedor de la librería afectada:


Con ello empezará el proceso, que también incluirá más rpms por cuestiones de dependencias.

Primeros pasos con XBMC


Ya estamos en disposición de probar XBMC, podremos hacerlo desde el lanzador KDE en Aplicaciones, Multimedia, TV, XBMC. Si todo va bien se puede aprovechar este primer arranque para establecer el idioma y uso horario. Para ello ir a Ajustes y después a Apariencia.



Cómo hacer que nuestro ordenador arranque directamente el XBMC

Para hacer que nuestro equipo arranque con el gestor de ventanas de XBMC y por tanto que no se cargue KDE, cerraríamos sesión y en la pantalla de login de OpenSuse, haríamos clic en la rueda dentada y escogeríamos el tipo de sesión XBMC. Desde ese momento nuestro ordenador arrancará siempre directamente el XBMC. Mi consejo es dejar esto para más tarde ya que ahora nos será util disponer del escritorio KDE para poner a prueba las cosas antes. Me explico: cuando más adelante queramos disponer de un emulador en XBMC lo más lógico será tenerlo probado todo antes sobre KDE, una vez configurado todo correctamente, será la hora de pegarnos con la configuración del addon correspondiente en XBMC.




Para volver a cambiar el tipo de sesión cuando se está en XBMC sólo hay que pulsar la tecla s del teclado, opción Salir y estaremos otra vez en la pantalla de login con lo que podremos elegir el tipo sesión KDE.

Ventana o pantalla completa


De nuevo mi consejo, mientras se esté preparando todo, es trabajar en modo ventana y, como he dicho antes, sobre el escritorio KDE. Este valor se puede cambiar en Ajustes, Sistema, Hardware de vídeo.


Si te conectas a la TV por HDMI y no tienes sonido


Si vas a usar un cable HDMI entre la tele y tu HTPC, lo normal es que lo probases ahora. Una de las cosas que puede ocurrirte, como a mí, es que no tengas sonido. Si te ocurre esto, comprueba que la salida de audio es la correcta en OpenSuse

Aún así probablemente la cosa siga sin funcionar así que en un terminal ejecuta Alsamix y comprueba si tienes enmudecidos los canales denomindados s-pif, en ese caso actívalos todos.

Ahora ya deberías tener sonido en tu escritorio, pero deberías asegurarte de que en XBMC también, así que debes configurar su salida de audio en Ajustes, Sistema, Salida de Audio.




Si esperas poder manejar XBMC con el mando de tu TV y no te va


XBMC está preparado para recibir comandos CEC a través del cable HDMI, lo que permite controlarlo con el mando de la TV a la que se conecta. Yo lo comprobé tiempo atrás con mi teléfono Android, un Sony Xperia P con salida micro HDMI en el que tengo instalada la beta de XBMC (de momento no está en Google Play). Por esta razón asumí que mi PC también las recibiría ¡Error! Mi placa Zotac ignora completamente las señales CEC. Si estáis en el mismo caso podéis solucionarlo con el adpatador usb Pulse Eight (no lo he probado).

En resumen para disponer de CEC tanto la TV, como el PC deben soportarlo. En caso contrario no debemos desesperarnos, podremos usar una app de control remoto en nuestro móvil:

 

Hasta aquí, de momento

Creo que es un buen punto para dejarlo por ahora. Si todo ha ido bien, tendréis una instalación básica de XBMC con la que podréis empezar a disfrutar de un equipo multimedia en vuestra TV. Más adelante escribiré sobre como optimizar el arranque y como añadir mis addons favoritos (rom collection browser, transmission...). ¡Ah! También pienso contar como incluir Owncloud.

jueves, 31 de octubre de 2013

Me he equivocado otra vez. Me estoy volviendo loco por hacer una aplicación de escritorio con QtQuick Controls

Cuesta admitirlo pero me precipité al querer hacer un navegador de archivos con QtQuick Controls. Hablo de precipitación porque la moraleja para mi es que no están lo suficientemente maduros.

Justo hace un año hice una primera prueba con la beta de Qt 5. En ese momento sí que me di cuenta de que a la cosa le faltaba bastante cocción, lo dejé pronto. Pero con la salida de Qt 5.1 y el anuncio de la primera versión, también estable, de QtQuick Controls, me lancé, a mitades de Agosto, a crear el frontend de DFileBrowser en QML. Lo que me encontré fue lo siguiente:

 

Velocidad de desarrollo

Pronto tuve la sensación de que todo costaba más tiempo que usando widgets. Crear un ListView para ver los archivos me ha parecido un mundo. Echaba de menos esa capacidad de decir si es multiselección o no, si tiene scrollbar, etc. Todo se lo tiene que guisar uno mismo.

 

Otro ejemplo de esto fue el tener que hacer mi propio componente para seleccionar iconos, el
conocido rectángulo que trazas manteniendo apretado el botón izquierdo del ratón. Además tenía que calcular si los iconos estaban en el interior del rectángulo o dejaban de estarlo y, por supuesto, pintarlos como seleccionados según el caso.

Podría buscar mas casos pero creo que con esto es suficiente para hacerse una idea.

Cosas básicas que están pero no funcionan bien. 

Al salir Qt 5.1.1 me di cuenta que la SplitView fallaba, había dejado de funcionar. Así que metí mi primer bug en la página habilitada para tal cosa por el proyecto Qt. Lo positivo fue que en unos pocos días estaba corregido y asignado a la próxima versión del SDK (5.1.2)

Cosas que necesitaba y están por llegar. 

Ahora llegamos a lo último que descubrí, el drag and drop sólo funciona en la propia aplicación. Lo tenía implementado y me había dado cuenta de que sólo podía usarlo entre los dos navegadores que se pueden tener disponibles en DFileBrowser. Pensé que no me funcionaba con otras aplicaciones externas porque no había hecho algo bien, así que me anoté eso como un bug propio y me lo dejé para el final, pero tras un par de pruebas y rebuscar un poco por foros y listas de correo encontré que no era posible comunicarse con otros programas usando esta funcionalidad.


Moraleja

Como he dicho en un principio, pienso que me precipité. Debí darme cuenta de algunas de estas cosas antes o haberme documentado más. También es cierto que es relativamente difícil encontrar que tal cosa está disponible o no cuando das por hecho que así es por analogía con los widgets. En fin, al final el segundo punto y el tercero no dejan de ser anécdotas sabiendo que la versión 5.2 ya incluirá el drag and drop. Lo que me preocupa realmente es que continúe con la sensación de que todo es mucho más costoso y de que tienes que hacerte cosas que antes las tenías hechas y las podías incluir con una línea de código.