jueves, enero 28, 2010

Steve Jobs y su iPad

Han pasado ya 24 horas desde que el iPad fue presentado y las reacciones a favor o en contra no han hecho más que agravarse. Yo soy de los que se sienten decepcionados. No se si el culpable fui yo o fue Steve Jobs pero yo esperaba más. Esa es la palabra "más". Nos habían prometido algo increible, lo mejor hasta la fecha, y nos encontramos con el iPad.

Cuando acabó la presentación sólo podía pensar una cosa: "nos están tomando por tontos". Por lo noche le di otra vuelta de tuerca: "quizás este enfocado a un mercado minoritario, como lo está el Macbook Air". Pero esta mañana me he dado cuenta de que estaba equivocado. Como dijo Steve Jobs el iPad ha venido a ocupar el hueco entre los ordenadores y los móviles. Ha venido a competir contra los netbooks... y tendré que creermelo.

Hace unos minutos leí el post escrito por Gimente en su blog. Os recomiendo que lo leáis porque así me ahorro escribir aquí mucho de lo que él ya dice en su blog.

Empecemos a analizar que es el iPad:
  • Un dispositivo muchísimo más portatil que un sobremesa, más portatil que un laptop pero menos que un móvil.
  • No cabe en un bolsillo.
  • No utiliza stylus sino que usamos el dedo para utilizarlo (existen stylus especiales en vez del dedo pero son del mismo grosor que este).
  • No tiene cámara integrada.
  • Una pantalla de un tamaño óptimo para la mayoría de aplicaciones que usamos en un ordenador convencional.
  • No tiene teclado físico (aunque tiene un gadget para suplir este deficit).
  • No tiene puerto USB.
  • No usa tinta electrónica sino una pantalla LCD.
  • No soporta multitarea (esto significa que sólo podemos estar ejecutando una aplicación)
Y ahora pensemos como se comporta en los diferentes escenarios para los que la gente cree que puede servir:
  • Para profesionales de la medicina sería perfecto para visualizar información (i.e. expedientes con textos e imagenes) pero que ocurre si dicho profesional quiere hacer una anotación? no dispone de un stylus convencional y no creo que ningún médico se ponga a escribir con el dedo, haciendo trazos de 1 cm de gordos, delante de un paciente.
  • Para comercionales puede ser un acierto. Llega a las oficinas del cliente, enciende el iPad sin tener que esperar, muestra su catálogo vía 3G o WiFi, usa una aplicación coorporativa diseñada para el iPad y queda como Dios.
  • Igual que lo anterior es aplicable a otro tipo de profesional, como un ortodoncista que en la reunión inicial quiere mostrar (y sorprender) al cliente mostrandole como le quedarán los dientes. No tiene que girar su monitor, sólo necesita mirar el iPad junto a él. Pero volvemos a lo mismo de antes, sólo sirve para mostrar información y usar aplicaciones que requieran introducir pocos datos. Es incomodísimo escribir una página en un dispositivo de ese tipo.
  • Como videoconsola he llegado a leer que va a arrasar con las Nintento DS y PSP. Me parece una tontería. El iPad no es tan portátil como estas videoconsolas y tampoco puede competir con las Xbox o PS3, está en el medio, es decir, es un dispositivo con el que además de otras cosas podremos jugar pero nadie se comprará el iPad para jugar.
  • Como lector de libros tampoco sirve porque su pantalla LCD cansa la vista de forma que en leer un libro de 500 páginas nos podemos dejar media dioptría... en leer 20 de esos libros nos hemos quedado ciegos. Otra vez a la de siempre, un dispotivo en el que además de otras cosas podemos leer libros.
  • Para uso doméstico, para sustituir los netbooks, ya tiene un problema de salida: la cámara. Como vamos a hacer videoconferencia con Skype si no tiene cámara. Tampoco tiene puerto USB así que nos olvidamos de pincharle un pendrive y ver las fotos o la pelicula que allí teníamos. Lo que nos venden desde Apple es muy bonito: tenemos un iPad por casa que usan todos los miembros de la familia y lo usamos de comodín. Si queremos oir música cojemos el iPad. Que queremos ver las fotos de las vacaciones... el iPad. Ver una peli tumbados en la cama, leer un libro, conectarnos rápidamente a internet para consultar Wikipedia... el iPad. Y es verdad, para eso si que sirve, es algo que podemos usar para todo pero que a su vez no es perfecto en ninguna de esas cosas. Que ocurre si queremos escribir una carta? pues que preferimos encender el sobremesa y escribir con un teclado de verdad o que ocurre si queremos leer durante 2 horas? pues que preferimos un libro de papel o la tinta electrónica... y así con todo.
Al igual que los netbooks no sustituían nada (sólo complementaban) el iPad no es un gadget a comprar en lugar de otro. Es un dispositivo que compraremos una vez tengamos un iPhone, un Macbook y un iMac, entonces, cuando tengamos todos los segmentos cubiertos será cuando podamos pensar que el iPad nos facilitaría la vida en muchos momentos. Si cometemos el error de comprar el iPad pensando que así no necesitamos el iMac veremos que nos quedamos cojos en determinadas ocasiones.

Por otro lado y conociendo a Apple me huelo que van a hacer como hicieron con el iPhone. Lanzar una versión como globo sonda y un año o dos después lanzar el dispositivo con el que dejarnos con la boca abierta. Digo esto porque al igual que ocurría con el primero iPhone todo el mundo está diciendo las cosas que le faltan para ser perfecto y eso me hace retroceder 3 años atrás.

Por último, y a modo de opinión personal, antes que vayáis acomprar un iPad echarle un ojo a esta maravilla.

lunes, enero 11, 2010

Usando Cobertura con TestNG

Como podemos leer su web, Cobertura es una herramienta que mide el porcentaje de líneas de código accedidas por los test. Esto no significa que un código este bien o mal testeado, lo que nos dice es que líneas de código ni siquiera están siendo testeadas.

Por internet podemos encontrar muchos ejemplos de como usar Cobertura con JUnit pero no hay tantos ejemplos de como usar Cobertura con Ant y TestNG (otro framework para testing muy extendido).

En resumen tenemos que hacer tres tareas: instrumentar las clases, correr los tests y generar el informe con los resultados. Vamos a ver un ejemplo:

<target name="instrument" depends="buildtest">
<taskdef resource="tasks.properties" classpathref="cobertura.classpath"/>

<mkdir dir="${deployCobertura.dir}" />

<delete file="cobertura.ser"/>
<delete dir="${deployCobertura.dir}/instrument" />

<cobertura-instrument todir="${deployCobertura.dir}/instrument" datafile="${deployCobertura.dir}/cobertura.ser">
<ignore regex="org.apache.log4j.*" />

<fileset dir="${test.dir}">
<include name="**/*.class" />
<exclude name="**/*Test.class" />
<exclude name="**/*Test$*.class" />
</fileset>
</cobertura-instrument>
</target>

<target name="coverage" depends="instrument">
<taskdef resource="tasks.properties" classpathref="cobertura.classpath"/>
<taskdef resource="testngtasks" classpath="${testng.jar}" />

<path id="test.path">
<path refid="cobertura.classpath" />
<path path="${deployCobertura.dir}/instrument" />
<path path="${test.dir}" />

<fileset dir="${lib.dir}/test">
<include name="*..jar"/>
</fileset>

<path path="${bootstrap.dir}" />
<path refid="build.classpath" />
</path>

<testng outputdir="${basedir}/test-report">
<sysproperty key="net.sourceforge.cobertura.datafile" file="${deployCobertura.dir}/cobertura.ser" />

<classpath refid="test.path" />

<xmlfileset dir="${test.dir}" includes="*Test.xml" />
</testng>
</target>

<target name="coverageAndReport" depends="coverage" description="Run cobertura and generate the report">
<taskdef resource="tasks.properties" classpathref="cobertura.classpath"/>

<cobertura-report format="html" datafile="${deployCobertura.dir}/cobertura.ser" destdir="${deployCobertura.dir}/html">
<fileset dir="${src.action.dir}">
<include name="**/*.java" />
<exclude name="**/*Stub.java" />
<exclude name="**/*Test.java" />
<exclude name="**/*Test$.java" />
</fileset>
</cobertura-report>
</target>

miércoles, enero 06, 2010

Cómo elegir el zoom óptimo en Google Maps

Cuando estamos trabajando con Google Maps usando el objeto GClientGeocoder y más concretamente su función getLocations nos encontramos con el problema del Zoom. Esta función nos devuelve las coordenadas en las que se encuentra una dirección pero no nos dice el zoom idóneo para mostrar el mapa. Necesitamos un zoom diferente si estamos buscando un país como España o una calle como la Gran Vía de Madrid.

Si buscáis por internet veréis que hay gente que utiliza el campo Accuracy para tratar de calcular el zoom. Esto es un error. Viene a ser como mezclar churras con merinas.

Aunque en la documentación no aparezca, el objecto JSON que devuelve la función trae un atributo ExtendedData que es el que usaremos para calcular el mejor zoom.

function _getOptimumZoomForGMap(placemark, objMap){
var optimumZoom;
var bounds = placemark.ExtendedData ? placemark.ExtendedData.LatLonBox : undefined;
if (bounds) {
var llbounds = new GLatLngBounds(
new GLatLng(bounds.south, bounds.west),
new GLatLng(bounds.north, bounds.east));
optimumZoom = objMap.getBoundsZoomLevel(llbounds);
}

return optimumZoom;
}

martes, enero 05, 2010

Un Mundo sin Fin

Un Mundo sin fin es la segunda parte de la famosa novela Los pilares de la tierra. Está escrita por el mismo autor, Ken Follet, y a lo largo de sus más de 1.100 páginas podremos leer las aventuras y desventuras de los ciudadanos de una ciudad llamada Kingsbridge, sí, la misma que en la primera parte. De hecho los protagonistas son descendientes de Jack Builder y su cuadrilla.

¿Qué me gusta de este libro? Pues que es fácil de leer, es interesante, te haces una idea (espero que real) de como era la vida en la Edad Media y por supuesto, a los que nos gusto Los pilares de la tierra teniamos ganas de más y este libro nos lo da.

¿Y qué es lo que no me gusta del libro? Pues que viene a ser lo mismo que la primera parte pero peor. De nuevo tenemos adversidades que cuando logran superar aparece otra desgracia. Que los protagonistas se comportan en parte como los de la primera parte. Qué la gran baza de la Peste no se describe tanto como me habría gustado, se malgastan muchas páginas explicando como la monja-médico-feminista cura de forma innovadora a los pacientes y se enfrenta a los estándares establecidos en vez de describir como afectó la Peste a Europa y que consecuencias tuvo.

Sinceramente, es un libro que me ha gustado bastante pero que no se si recomendaría. Si no habéis leído Los pilares de la tierra leed ese libro primero. Si habeís leído Los pilares... pues os aviso que son muchas páginas, que os va a entretener, que os va a gustar pero que al final notaréis que no os ha llenado como Los pilares de la tierra.

lunes, enero 04, 2010

Feliz Año 2010

Con un par de días de retraso, debido a que he estado de vacaciones por España sin ordenador, os deseo a todos mis lectores un Feliz Año Nuevo.