domingo, octubre 24, 2010

Creando un archetype en Maven 2 / 3

Para empezar, un archetype de maven es una plantilla que sirve para generar proyectos muy fácilmente y empezar a trabajar rápidamente. En estas plantillas se debe generar todo lo necesario para que el proyecto funcione, por lo que incluirá tanto el pom.xml, las clases main y de test y todos los resources que hagan falta según el tipo de proyecto (persistence.xml, logback.xml, etc.).

Si bien hay muchos archetypes por internet yo soy de usar la configuración que más me gusta y siempre acabo personalizando mucho mis proyectos por lo que me he acabado haciendo uno propio con las dependencias que suelo usar en un proyecto sencillo. Esto incluye lo siguiente:

- SLF4J
- Logback
- HSQLDB como in-memory database
- Hibernate como implementación de JPA
- Spring como inyector de dependencias
- Junit 4

Para generar el tutorial he utilizado lo siguiente:
- Apache Maven: 3.0
- Java version: 1.6.0_22
- Git version: 1.7.1

Como he dicho antes hay muchos archetypes, incluso hay uno para generar archetypes (maven-archetype-archetype). El caso es que si tenemos muy claro lo que vamos a hacer e incluso ya tenemos nuestro proyecto base creado lo más sencillo es crearse un archetype a partir de este proyecto. Primero vamos a hacerlo y luego explicamos la diferencia principal con crearlo desde cero.

El proyecto base

La estructura del proyecto es la siguiente.
.
├── pom.xml
└── src
├── main
│   ├── java
│   │   └── es
│   │   └── discolo
│   │   ├── app
│   │   │   └── App.java //Símplemente hace un log Hello World
│   │   ├── dao
│   │   │   ├── FooEntityDao.java //Interfaz Dao
│   │   │   └── impl
│   │   │   └── FooEntityDaoImpl.java //Implementación de JPA para ese interfaz
│   │   └── model
│   │   └── FooEntity.java //Entity para probar la integración con JPA
│   └── resources
│   ├── applicationContext.xml //Configuración de Spring
│   ├── logback.xml //Configuración de Logback
│   └── META-INF
│   └── persistence.xml //Configuración del persistence unit asociado a HSQLDB
└── test
├── java
│   └── es
│   └── discolo
│   └── test
│   ├── AbstractTest.java //Clase abstracta que configura el contexto de tests de Spring
│   └── PersistenceTest.java //Prueba la persistencia y las inyecciones de dependencias
└── resources
├── logback-test.xml //Configuración de test de Logback
└── testContext.xml //Configuración de Spring utilizada por AbstractTest

Generando el archetype a partir del proyecto

Es tan sencillo como escribir:

discolo@granada:~/workspace/jpa-spring-archetype$ mvn archetype:create-from-project
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building jpa-spring 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.0-alpha-5:create-from-project (default-cli) @ jpa-spring >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.0-alpha-5:create-from-project (default-cli) @ jpa-spring <<< [INFO] [INFO] --- maven-archetype-plugin:2.0-alpha-5:create-from-project (default-cli) @ jpa-spring --- [INFO] Setting default groupId: es.discolo [INFO] Setting default artifactId: jpa-spring [INFO] Setting default version: 1.0-SNAPSHOT [INFO] Setting default package: es.discolo [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building jpa-spring-archetype 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ jpa-spring-archetype --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 13 resources [INFO] [INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ jpa-spring-archetype --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 2 resources [INFO] [INFO] --- maven-archetype-plugin:2.0-alpha-5:jar (default-jar) @ jpa-spring-archetype --- [INFO] [INFO] --- maven-archetype-plugin:2.0-alpha-5:add-archetype-metadata (default-add-archetype-metadata) @ jpa-spring-archetype --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.360s [INFO] Finished at: Sun Oct 24 12:35:00 CEST 2010 [INFO] Final Memory: 6M/66M [INFO] ------------------------------------------------------------------------ [INFO] Archetype created in target/generated-sources/archetype [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.555s [INFO] Finished at: Sun Oct 24 12:35:00 CEST 2010 [INFO] Final Memory: 7M/65M [INFO] ------------------------------------------------------------------------



Bien, con esto ya tenemos en target nuestro archetype generado. Vamos a ver lo que ha hecho maven dentro de target/generated-sources/archetype. Tenemos un pom.xml que corresponde al archetype, un src y un target. En el source está la configuración del archetype que incluye el proyecto modificado para adaptarse a la configuración y la estructura de la que partió al generarse. En el target tenemos el archetype listo para instalar.

Echamos un vistazo rápido al src:

src/
├── main
│   └── resources
│   ├── archetype-resources
│   │   ├── pom.xml
│   │   └── src
│   │   ├── main
│   │   │   ├── java
│   │   │   │   ├── app
│   │   │   │   │   └── App.java
│   │   │   │   ├── dao
│   │   │   │   │   ├── FooEntityDao.java
│   │   │   │   │   └── impl
│   │   │   │   │   └── FooEntityDaoImpl.java
│   │   │   │   └── model
│   │   │   │   └── FooEntity.java
│   │   │   └── resources
│   │   │   ├── applicationContext.xml
│   │   │   ├── logback.xml
│   │   │   └── META-INF
│   │   │   └── persistence.xml
│   │   └── test
│   │   ├── java
│   │   │   └── test
│   │   │   ├── AbstractTest.java
│   │   │   └── PersistenceTest.java
│   │   └── resources
│   │   ├── logback-test.xml
│   │   └── testContext.xml
│   └── META-INF
│   └── maven
│   └── archetype-metadata.xml
└── test
└── resources
└── projects
└── basic
├── archetype.properties
└── goal.txt

Vemos que ha incluido nuestro proyecto dentro de src/main/resources/archetype-resources y que en src/main/resources/META-INF/maven existe un fichero archetype-metadata.xml, este es el que dice qué ficheros incluir y cuales no. Aunque parezca que ha respetado nuestro proyecto tal cual, no es así puesto que hace falta personalizarlo para que realmente sea una plantilla. Esto se puede ver por ejemplo en el fichero pom.xml

...
${groupId}

${artifactId}

${version}
...

Se ve como se han parametrizado los atributos que dependerán de quien genere un proyecto a partir de este archetype. Otro ejemplo en la clase de AbstractTest que empieza así:
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.test;

Estas cosas son las que hacen más sencillo generar el archetype a partir de un proyecto.

Instalando el archetype

Para poder usar el archetype deberá estar instalado en nuestro repositorio con lo que ejecutamos un mvn install desde target/generated-sources/archetype:
discolo@granada:~/workspace/jpa-spring-archetype/target/generated-sources/archetype$ mvn install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building jpa-spring-archetype 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ jpa-spring-archetype ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 13 resources
[INFO]
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ jpa-spring-archetype ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-archetype-plugin:2.0-alpha-5:jar (default-jar) @ jpa-spring-archetype ---
[INFO]
[INFO] --- maven-archetype-plugin:2.0-alpha-5:add-archetype-metadata (default-add-archetype-metadata) @ jpa-spring-archetype ---
[INFO]
[INFO] --- maven-archetype-plugin:2.0-alpha-5:integration-test (default-integration-test) @ jpa-spring-archetype ---
/home/discolo/workspace/defaultJPA_bkp/target/generated-sources/archetype/target/test-classes/projects/basic/archetype.properties
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ jpa-spring-archetype ---
[INFO] Installing /home/discolo/workspace/defaultJPA_bkp/target/generated-sources/archetype/target/jpa-spring-archetype-1.0-SNAPSHOT.jar to /home/discolo/.m2/repository/es/discolo/jpa-spring-archetype/1.0-SNAPSHOT/jpa-spring-archetype-1.0-SNAPSHOT.jar
[INFO] Installing /home/discolo/workspace/defaultJPA_bkp/target/generated-sources/archetype/pom.xml to /home/rromero/.m2/repository/es/discolo/jpa-spring-archetype/1.0-SNAPSHOT/jpa-spring-archetype-1.0-SNAPSHOT.pom
[INFO]
[INFO] --- maven-archetype-plugin:2.0-alpha-5:update-local-catalog (default-update-local-catalog) @ jpa-spring-archetype ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.429s
[INFO] Finished at: Sun Oct 24 12:47:36 CEST 2010
[INFO] Final Memory: 6M/66M
[INFO] ------------------------------------------------------------------------

Usando el archetype

Finalmente vamos a generar un proyecto a partir del archetype. Si escribimos mvn archetype:generate nos aparecerán tanto los locales como los remotos, aunque podemos filtrar y mostrar únicamente los locales incluyendo el parámetro -DarchetypeCatalog=local

Nos vamos a una carpeta nueva:
mkdir /tmp/workspace
cd /tmp/workspace
mvn archetype:generate -DarchetypeCatalog=local
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.0-alpha-5:generate (default-cli) @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.0-alpha-5:generate (default-cli) @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.0-alpha-5:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype: 1: local -> jpa-spring-archetype (Archetype - jpa-spring-archetype)
Choose a number: : 1
Downloading: http://repository.jboss.com/maven2/es/discolo/archetype/jpa-spring-archetype/1.1-SNAPSHOT/maven-metadata.xml
Downloading: http://snapshots.jboss.org/maven2/es/discolo/archetype/jpa-spring-archetype/1.1-SNAPSHOT/maven-metadata.xml
Define value for property 'groupId': : com.mycorp
Define value for property 'artifactId': : prueba-archetype
Define value for property 'version': 1.0-SNAPSHOT: :
Define value for property 'package': com.mycorp: :
Confirm properties configuration:
groupId: com.mycorp
artifactId: prueba-archetype
version: 1.0-SNAPSHOT
package: com.mycorp
Y: : y
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 46.169s
[INFO] Finished at: Sun Oct 24 12:54:19 CEST 2010
[INFO] Final Memory: 7M/66M
[INFO] ------------------------------------------------------------------------

Perfecto! Con esto ya tenemos nuestro proyecto listo para echar a andar. Vamos a pasar los tests por si algo no ha ido bien.
...
Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0

12:57:13.824 [Thread-1] INFO o.hibernate.impl.SessionFactoryImpl - closing
12:57:13.824 [Thread-1] INFO o.h.c.DriverManagerConnectionProvider - cleaning up connection pool: jdbc:hsqldb:mem:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...

Pues esto es todo, espero que os ahorre algo de tiempo a la hora de empezar vuestros proyectos. El código fuente en un repositorio de git, en codaset, por si queréis consultarlo o mejorarlo.

http://codaset.com/discolo/jpa-hibernate-archetype

Saludos,
Discolo.

jueves, abril 22, 2010

VIA VT6566 en Ubuntu

Esta vez tocaba lidiar con la wifi de mi HTPC que no conseguía conectarse. La placa base es la Zotac ITX 9300 WiFi.
El WiFi que trae es el VIA VT 6566 que hasta hace poco tenías que compilarlo e instalarlo manualmente en Linux, pero aún así no conseguía conectarme, me detectaba la red pero no conseguía acceder, me pedía una y otra vez la clave.

Bien, estamos hablando de Ubuntu 9.10 con los drivers instalados manualmente. Hoy he probado con la beta2 de Ubuntu 10.04 en su LiveCD y me he dado cuenta que los drivers vienen ya instalados, pero sigo con el mismo problema de no poder conectarme.

La red WiFi está protegida con WPA y el router es un DLink DIR655 Firmware 1.32NA. En los logs del Router veía el siguiente mensaje cuando veía que no podía conectar:

Received Deauthentication

Para más detalles tenía configurada la seguridad de la siguiente forma:
Security Mode: WPA-Personal
WPA Mode: Auto (WPA or WPA2)
Cipher Type: AES and TKIP

Estaba de esa forma porque viene por defecto así, además así aumentas la compatibilidad porque utilizas WPA2 con los dispositivos más modernos y WPA con los legacy.

Claro, si le quitaba el cifrado me podía conectar, pero para probar vale, no lo voy a dejar así.

Finalmente vi que cambiando el modo a WPA2 Only y el tipo de cifrado a AES podía conectarme correctamente (menos mal).

Saludos,
Discolo

martes, abril 13, 2010

Alojando múltiples dominios en JBoss (Hosting multiple domains in JBoss)

 Esto es una situación que creo que es común, sobretodo en entornos corporativos. Voy a explicar los pasos necesarios y las fuentes utilizadas para conseguirlo (espero que se entienda xD)

Tenemos 2 instancias de Jboss y en cada máquina hay 2 interfaces: Servicio y Operación y Mantenimiento (O&M) por lo tanto, necesitábamos tener expuestos por la interfaz de servicio los WebServices que se usarán por los clientes y el resto (portal de administración, jmx-console, etc.) por el de O&M. A parte es interesante evitar modificar el máximo número de ficheros de configuración, sobretodo de las aplicaciones de Jboss.


En el enlace siguiente he visto toda la información que hace falta:

http://www.fusioncube.net/index.php/hosting-multiple-domains-with-jboss


Aquí se puede entrar en más detalle:

http://tomcat.apache.org/tomcat-5.5-doc/config/


Partimos de que JBoss AS se a arrancado en el puerto 0.0.0.0 para que escuche por todos los interfaces.


Ya que las aplicaciones Web se despliegan en la instancia de tomcat que incluye jboss (jboss-web.deployer) es ahí donde configuraremos el fichero server.xml.


Existen 3 partes importantes en este fichero:


1º Definición del Engine y del default host. El defaultHost debe ser un vhost válido definido dentro del Engine y será donde se desplegarán todas las aplicaciones que no tengan un virtual-host definido.
<Engine name="jboss.web" defaultHost="localhost">
2º Localhost. Ya existe en la configuración por defecto y le añadimos los alias para que todo lo que entre por localhost o por uno de sus alias irá a las aplicaciones que no tengan configurado un virtual-host en su jboss-web.xml (puesto que es el defaultHost).
<Host name="localhost" autoDeploy="false" deployOnStartup="false" deployXML="false"
           configClass="org.jboss.web.tomcat.security.config.JBossContextConfig" >
    <Alias>myHostname_om</Alias>
    <Alias>172.1.3.137</Alias>
    <Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"
        cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
        transactionManagerObjectName="jboss:service=TransactionManager" ></Valve> </Host>
3º Definición de cada virtual host extra. Un virtual host permite separar las aplicaciones web y aplicar distintas configuraciones. En este caso definimos uno para la lógica de servicio con 2 alias, uno para resolver por hostname y otro para resolver por IP. El name del host puede ser tanto una ip como un hostname, pero en este caso para llamar al host de una forma genérica se le ha llamado vhost_ls.
<Host name="vhost_ls" autoDeploy="false" deployOnStartup="false" deployXML="false"
           configClass="org.jboss.web.tomcat.security.config.JBossContextConfig">
    <Alias>myHostname_ls</Alias>
    <Alias>192.168.2.137</Alias>
    <Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"
        cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
        transactionManagerObjectName="jboss:service=TransactionManager" ></Valve> </Host>
Una vez configurado el vhost se modificará la configuración de cada aplicación web que queremos que vaya al vhost_ls. Editando su fichero ./WEB-INF/jboss-web.xml, añadiremos lo siguiente (funciona tanto para el hostname como la ip):

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>       
    <virtual-host>myHostname_ls</virtual-host>
    <context-root>/</context-root>
</jboss-web>


Esto es lo que yo he configurado en nuestro entorno. En teoría, quedaría mejor tener el vHost-localhost el vHost-lógicaServicio y el vHost-O&M cada uno con sus alias, incluso quitar localhost, así solo poder atacar por esos dos, poniendo como defaultHost el de O&M, pero en la práctica no he sido capaz de hacerlo funcionar, así que si alguien lo intenta y lo consigue que me avise.


Un saludo y espero que os sea de ayuda.

Discolo

miércoles, diciembre 02, 2009

Manifiesto en defensa de los derechos fundamentales en internet

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que...
1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
7.- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
10.- y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público
Actualización: 12/02 08:53 GMT por Candyman :Este manifiesto es obra de muchas manos, y propiedad de todos. Si te gusta, cópialo, pásalo, publícalo en tu weblog o haz lo que quieras con él.

sábado, noviembre 21, 2009

Eclipse y Flash en Karmic Koala

Tras actualizar sin paciencia a esta nueva versión de Ubuntu me he encontrado con un par de problemas y es que no funcionaban los botones en eclipse 3.4 y 3.5 y a veces el interfaz se comportaba de un modo extraño. La solución es la siguiente...

Ejecuto este sencillo script y sin problemas
#!/bin/sh
export GDK_NATIVE_WINDOWS=1
/eclipse

Otro tema que ha habido que resolver ha sido el Flash que no iba nada bien ya que tengo puesto la versión de Ubuntu de 64bits y al pasar de la 9.04 a la 9.10 ha dejado de funcionar bien.
Solución:

1º Desinstalar la versión actual del plugin de Flashplayer (mediante Gestor de paquetes, Terminal o como sea)

2º Descargar la versión 10 de 64bits desde la web: http://labs.adobe.com/downloads/flashplayer10.html

3º Copia el fichero 'libflashplayer.so' a /usr/lib/mozilla/plugins. Debes ser root para poder hacerlo

4º Reinicia firefox.

Saludos!

sábado, octubre 10, 2009

Estafa telefónica con los números 882

Bueno, pues el otro día recibo un toque en mi movil desde el número +88213550865 y como no me fiaba ni un pelo pero me picaba la curiosidad empecé a indagar sobre por lo menos el prefijo y descubrí que pertenece a "International Networks" una oscura numeración de carácter internacional que se emplea en telefonía vía satélite.

Es decir que por lo visto son empresas que se dedican a hacer perdidas a diestro y siniestro para ver si alguien pica y les devuelve el toque o les llama para así cobrarte un pastizal.

Aquí hay bastante información al respecto (Inglés)

Y aquí en la web que todo lo sabe de seguridad :D (Español)

Espero que esta información os sea de utilidad para evitar que caigais en la tentación de devolver la llamada a estos "listos".
Saludos.

lunes, octubre 05, 2009

El místico mundo de los HTPCs

Como aficionado a la tecnología y al cine quería añadir una entrada sobre los ordenadores de salón o Home Theatre Personal Computers.

Tiempo atrás tenía un reproductor multimedia con disco duro, estuve mirando y remirando y el HMR-351N parecía la mejor opción.




Tenía "sintozinador" de T.V. por lo que podía grabar mis programas favoritos. Podía reproducir video en Alta Definición y un montón de cosas más.
Estuve revisando varios modelos entre ellos el Popcorn Hour 110 y al final opté por comprar el HMR-351N sin disco duro, comprar un disco duro portátil de 2.5" y usarlo temporalmente porque también quería tener uno para mis cosas.

Al final me compré a parte un disco duro de 1TB de Samsung, que funciona a 5.400rpm pero con un tiempo de acceso a disco bastante aceptable, por lo que debería hacer menos ruido, consumir menos electricidad y para ver películas ser más que suficiente.

Empezaron las sorpresas con el HMR. La primera fué la pésima compatibilidad con contenido en Alta Definición. Para poder ver algo en HD tenías que hacer Streaming desde el ordenador, por lo que al ir por WIFI (en mi caso) a 720p iba muy muy justo, era un auténtico engorro y sólo podía hacerse con Windows. Pregunté al servicio técnico por si en alguna actualización futura del Firmware se pudiera cambiar y me contestaron que no, que ese chip no soportaba la decodificación de HD.

Lo peor fue que al intentar ponerle el disco duro Samsung no funcionaba bien. Se formateaba bien, se hacían las particiones y al empezar a copiar las películas se reiniciaba. ¿Posible error del disco duro? ¿Problema de compatibilidad?
Pues volví a contactar con el servicio técnico y me dijeron que sólo garantizaban la compatibilidad con el Western Digital que venden junto con el disco duro. Qué majos!

Solución... lo vendí...

Antes del verano utilicé el dinero de vender el reproductor en comprarme un HTPC que sirviera para ver todo tipo de películas y tal vez para echar algún vicio.
Lo que buscaba era:
  • Tamaño ITX
  • Core duo
  • Capacidad para disco de 3.5" (para reutilizar el Samsung)
  • BluRay
  • Teclado inalhámbrico con trackball
  • Salida HDMI
  • WiFi
  • Gráfica aceptable
Lo que finalmente monté fue una Zotac ITX con GeForce 9300 y WiFi integrado.

Además me trae salida óptica, HDMI, DVI, unos cuantos USBs y muchas cosas más.

La caja está bastante bien y es baratilla, con el tiempo han salido más y mejores, tanto estéticamente como técnicamente. Pero la elegida fué la APEX MI-008
 

Tiene una bahía de 3.5" para el disco duro y una de 5.25" para un lector normal (no slim). Además viene con una fuente de alimentación razonablemente silenciosa de 250W.

El teclado no está mal, estuve mirando varios modelos y al final me quedé con este.



El procesador que he montado ha sido el Intel Core 2 Duo 7400 que creo que le viene de sobra para lo que quiero con un disipador de perfil bajo (el que viene en la caja no cabe). Además de 4GB de RAM a 1066MHz.
Para curarme en salud le puse un ventilador lateral Noctua que no hace nada de ruido y tiene unos limitadores para controlar las revoluciones.

Estoy bastante contento con el conjunto. Tal vez la caja no fué la mejor elección. No me gusta mucho la orientación del ventilador de la fuente de alimentación hacia el mismo sitio que el disipador del procesador.
Tengo pendiente hacerle una modificación. Si le doy la vuelta, hacia arriba, y le hago unos orificios con un taladro a la caja seguro que consigo que esté más fresco el procesador. La temperatura no es un problema pero, como he dicho, la caja podría estar mejor hecha.

De momento tengo un arranque dual con Ubuntu y Windows Media Center para ver con cuál me quedo. También tengo pendiente configurarlo para utilizar el mando de la Wii como mando a distancia una vez arrancado el XBMC (de los que he probado, el mejor). Poco a poco.

Han ido saliendo placas base con el procesador Atom integrado, las famosas Zotac ION que por lo visto están dando un resultado muy bueno, consumen poco y lo reproducen todo. Como he comentado antes, han salido cajas muy buenas y bien ventiladas, con el espacio muy bien administrado. Peeeero, es muy caro estar a la última, por lo que me conformo con lo que tengo pues de momento me ha servido para todo lo que he necesitado.

Hasta aquí mi historia sobre cómo ver una peli en el salón.

domingo, octubre 04, 2009

HTC Magic, esperando al Donut

Llevo ya un tiempo con la Magic (no es blanca, lo siento por los puristas) y aún no he tenido ningún problema en cuanto a funcionamiento, batería, etc.
Durante las búsquedas por Google he recopilado un grupo de webs bastante actualizadas que incluyen noticias, aplicaciones, comentarios y demás novedades que afectan a Android, hago referencia a ellas por si alguien las ve tan útiles como me han resultado a mí.

Blog sobre Android en español
Blog sobre HTC Magic y Android
Web oficial de Android

En todas se habla de la nueva actualización, que no llega aún a las Magic de Vodafone, a ver si los cambios que incluyen son usables y merecen la pena. Parece que sí.

En cuanto a la conectividad, me sorprendió que no se pudiera enviar ficheros por Bluetooth, parece ser que has de ser root y disponer de una aplicación de pago para poder hacerlo. ¿Realmente tanto costaba ponerlo como una característica básica? ¿Tal vez la incluyan en la futura v2.0? Ni idea.

Por otro lado gusta ver que amigos y compañeros del trabajo poco a poco van eligiendo Android y que lo encuentran divertido de usar y útil. Yo he notado bastante cambio en mi día a día símplemente a la hora de visitar sitios nuevos, de orientarme tanto a pie como en coche (Maps). Salir de dudas al instante mediante la Wapedia o Google. Y muchas cosas más.




Bueno, hasta aquí mi pequeña reflexión sobre la Magic. No soy ningún experto ni pretendo serlo, símplemente un usuario más.
Saludos