Dos semanas con mi Kindle

Así es señoras y señores, hace un poco más de dos semanas soy el feliz propietario de un Amazon Kindle y creo que ya es hora de escribir en este blog cuál ha sido mi experiencia con él.

Primero debo comentar que compré un Kindle 3g y además una funda de cuero negra con luz directamente en la página de Amazon con envío internacional. Lo único problemático fue el costo bastante saladito del envío que no incluye el costo del servicio de DHL (honorarios y aduana). Más allá de eso, recibí el paquete en cuatro días, perfectamente embalado y con el Kindle dentro. Como había leído en otros foros, al comienzo parece que tiene una imagen pegada en la pantalla, pero no, es la tinta electrónica que se ve increíblemente bien.

El Kindle no busca reemplazar a las Tablet tan de moda actualmente; no se pueden ver videos ni navegar cómodamente la web pero sí logra reemplazar muy efectivamente a los libros impresos. Es en verdad maravilloso.

Gracias a este aparatito mágico he vuelto a leer. Ya no tengo problemas con libros grandes que no puedo llevar en el colectivo o que son incómodos para leer recostado a la noche en la cama. Ahora puedo leer en cualquier momento.

Una de las primeras cosas que hice fue, obviamente, ponerlo dentro de la funda que le había comprado: me desilusioné al ver que la luz no se prendía pero sin saber qué hice se prendió. Cuando entendí lo que había pasado me enamoré: ¡la luz sólo se enciende cuando el Kindle está en modo encendido y el brazo de la lámpara se encuentra totalmente extendido! Si el dispositivo se encuentra apagado (muy raro que se apague un Kindle) o en pausa (que consume tanta energía como estando apagado ya que la tinta electrónica no necesita de energía para mostrarse, sólo para cambiar de estado)  la luz se apaga.

La lámpara no necesita pilas ni baterías sino que se alimenta de la batería del Kindle. Ésto reduce un poco la durabilidad de la batería pero igual así es es suficiente para mí en cuanro al uso moderado que le doy.  Además, cargarlo tampoco es muy difícil ya que lo hago igual a la carga de mi teléfono, conectándolo al USB de la pc o al adaptador 220 a USB que tengo gracias al mismo (el kindle no trae uno, sólo trae un cable usb-miniusb).

De día la luz puede parecer escasa y tenía miedo que no fuera suficiente para leer pero a la noche, en la total oscuridad, perdí todos los miedos, ya que es la cantidad de luz justa para leer cómodamente sin ayuda de ninguna luz externa.

La segunda característica asombrosa del modelo que compré es la conectividad 3g mundial. No tiene costo de mantenimiento, ni contratos ni nada. Simplemente la usas desde el dispositivo y listo. Como dije anteriormente, el Kindle no es una Tablet y el explorador de internet es muy limitado pero es suficiente para chequear los emails, ver algún blog u otras cosas pequeñas que se necesiten hacer cuando no hay una PC u otro dispositivo más apto cerca.

La idea de Amazon con este modelo 3g, y se nota que está pensado para eso, es poder comprar libros desde la tienda online de Amazon en cualquier momento y en cualquier lugar, y de cobrarte un pequeño fee cuando transferís libros desde la pc  (o cualquier medio que envíe emails) al Kindle utilizando la red 3g.

Una crítica no tan favorable: si quiero comprar libros fácilmente lo tengo que hacer desde Amazon; la tienda de Amazon tiene títulos excelentes pero la gran mayoría sólo en idioma inglés. Si se quieren libros en idioma español hay que bajarlos o comprarlos de otro lugar.

Por lo demás, no me puedo quejar ya que son pequeñeces como el no poder cambiar las imágenes de fondo cuando se pasa a modo standby, o no poder compartir socialmente contenido si el libro no fue comprado en Amazon (aparentemente).

Lo cierto es que las ventajas superan por mucho cualquier problema que perciba. Por ejemplo, amo el resaltar fácilmente fragmentos y poder consultarlos luego. No sé cómo pude leer antes sin el diccionario en pantalla que me dice el significado de cualquier palabra que seleccione o el navegar por internet para ver mis emails sin pagar nada cuando esté de vacaciones en cualquier parte del mundo.

Para gestionar la librería, el compañero ideal de Kindle es una aplicación disponible en Windows, Linux y Mac llamada Calibre: es fácil de usar y recupera toda la información de los libros que sea necesaria. Esto, sumado a la cantidad de libros electrónicos que se pueden encontrar en internet, y el hecho que Amazon ofrece varios títulos como Moby Dick, Pride and Prejudice o The adventures of Sherlock Holmes en forma gratuita (gracias al proyecto Gutenberg) me ha dado literatura para leer cómodamente por mucho tiempo.

Eso sí, un último comentario: el Kindle es para leer libros electrónicos. Si bien puede mostrar archivos pdf con claridad, no es lo recomendado ni está diseñado para éste propósito. Muchos libros en internet sólo vienen como pdf y eso es un problema pero espero que de a poco se solucione y aparezcan más títulos en formato mobi o epub (el primero soportado nativamente por Kindle, el segundo lo transforma fácilmente el Calibre).

En conclusión, estoy muy muy contento con mi nuevo Kindle.



Netflix en Argentina

Hace ya algunos días, se lanzó el servicio de NetFlix en la Argentina. Están dando un mes gratis, así que les sugiero que lo aprovechen. Hubo mucho revuelo en diferentes medios de difusión porque este representa el primer sistema masivo de video disponible en la Argentina (hubo y hay otros, pero este es el más “peso pesado”) para aquellos que no lo conocen, su éxito se basa en las negociaciones con diferentes productoras y distribuidoras cinematográficas así como la flexibilidad para integrarse en plataformas de video juegos (ps3, por ejemplo), reproductores de alta definición (inclusive los bluray) y televisores modernos.

Lo que quiero agregar es que tuve la oportunidad de probarlo el mismísimo primer día y me encontré con algunos detalles que son dignos de mencionar (sobre todo para la gente que está teniendo dudas o, por el contrario, planea adquirirlo)

Detalles técnicos

  • Hay montones de títulos, más de lo que se están viendo en la página actualmente disponibles
  • Muchos son HD, a pesar de que la información es “confusa” en internet y no queda claro
  • Muchos “tracks” sobre todo para las películas, vienen con 5.1, lo cual es ideal
  • Con un ancho de banda de 3megas (a pesar de lo que dice por internet) logramos ver algo que claramente es HD
  • La tecnología permite adaptarse a la velocidad real de la conexión, así que se “adapta”, puede pasar que comience “pixelado” pero termina quedando lindo
  • Como puede verse en la wiki, la tecnología que usan es de Microsoft, que ha tenido varias críticas porque “opaca” los colores de algunas imágenes (yo concuerdo, pero esto dependerá del asiduo televidente)
  • La integracion con la PlayStation 3 es excelente

Detalles para la región

  • Pocos contenidos vienen con subtítulos en español e idioma original (una combinación básica para el mercado argentino)
  • La mayoría de 5.1 en audio están preparados para português y no para español (malísimo)
  • Hemos visto casos de películas dobladas al español y con subtítulos en português (Piratas del Caribe)
  • Se pueden ver películas y series de tv, aunque no están las más nuevas, en buena calidad y “on-demand”
  • A pesar que se pueden ver muchas series de tv, hay cosas básicas que no están claras (como poder ver desde el capítulo #1, Battlestar Galactica, por dar un ejemplo, dice estar disponible toda la temporada #1 y arranca en algún capítulo intermedio)
De cualquier forma, insisto, si tiene oportunidad pruebenlo, es excelente y por el precio de $39 no podemos conseguir mucho más. Prueben y nos cuentan.

Laptop Samsung RF511

Hasta hace unos días tenía una laptop Dell Vostro 5500, con la cual he quedado más que conforme. Cuando llegó la hora de cambiarla, lamentablemente no he podido adquirir una Dell por problemas con las importaciones (investigar tema de licencias no automáticas), así que opté por una Samsung RF511 con la cual estoy escribiendo este post.

Esta laptop Samsung RF511 es una laptop muy linda, y bastante potente. Según sus especificaciones cuenta con un procesador Intel i5, 4 gigas de RAM y una placa de video NVIDIA GT540M. Esta adquisición fue influenciada principalmente por ser de las pocas laptops que se podían adquirir que tenían una placa de gráfica NVIDIA.

En windows aún no experimenté demasiado, más allá de estar varias horas desinstalando toda la basura que Samsung instala de fábrica (programas, demos, pésimos antivirus, programas que no tengo idea qué hacen, controladores que descontrolan, etc… lo cual no es solo de Samsung, todas las empresas hacen este tipo de estupideces) pero no he tenido ningún problema por ahora. Todo parece funcionar correctamente.

En linux, que es mi principal sistema operativo, específicamente la distribución Ubuntu 11.04 es donde comencé a llevarme algunas sorpresas, varias por falta de investigación y desconocimiento a la hora de decidir la compra de este equipo.

(more…)

Utilizar mockConfig en test de Grails

Necesitaba realizar test unitarios en una aplicación que estamos desarrollando y una de las clases que quería testear accedía, por medio del ConfigurationHolder a datos que debían ser cargados en el Config.groovy

Una búsqueda rápida en google arrojó varios resultados sobre como utilizar la magia del metaClass de groovy para mockear manualmente los objetos y métodos necesarios, pero hay mejores maneras de hacerlo.

Desde no se que versión de Grails existe el método mockConfig de la clase GrailsUnitTestCase de la cual deberían heredar todos nuestros test unitarios.

Lamentablemente no encontré mucha información sobre como usar este método por ningún lado. Solo había encontrado un blog llamado 418 I’m a teapot (en un artículo medio viejito) en el cual decían que no lo habían logrado hacer funcionar y por eso continuaban utilizando metaclass

Por suerte haciendo algunas pruebas descubrí una forma de hacerlo trabajar para mis necesidades. El secreto es que este método no acepta la sintaxis jerárquica (perdón, no se el nombre técnico) en el config, sino que debemos hacer todo más sencillamente.

Por ejemplo, en lugar de escribir

mockDomain("""
    grails {
        paypal {
            server = "https://www.sandbox.paypal.com/"
        }
    }
""")

lo que debemos escribir es

mockDomain("""
    grails.paypal.server = "https://www.sandbox.paypal.com/"
""")

De esta manera, y accediendo a la configuración por medio del ConfigurationHolder en mi aplicación, no he tenido mayores problemas.

Programar Groovy y Grails con gedit (Ubuntu)

Si bien he probado varios entornos de trabajo, a lo largo del tiempo, para desarrollar en Grails, siempre vuelvo a mi viejo amor: gedit (gnome-editor))

Por defecto, no tiene soporte para el lenguaje Groovy, pero es fácilmente configurable, e incluso sin necesidad de permisos de adminsitrador, permitiéndonos configurar nuestor ambiente de trabajo, sin modificar la configuración de los demás usuarios.

Para esto debemos descargar el bundle con el coloreo de sintaxis, tipos mime y otras cosas del sitio http://www.grails.org/Gedit

En esa misma página podremos encontrar instrucciones para instalarlo, que requieren de permisos de administrador. Pero combinando un post anterior en este mismo blog, sobre como hacer que gedit abra archivos tpl como si fueran archivos php y algunos otros tips más, podremos instalarlo sin necesidad de permisos especiales.

Luego de descompactar el archivo descargado, copiamos los directorios plugins, snippets y styles a la carpeta ~/.gnome2/gedit

Para arreglar el coloreo de sintaxis y enseñarle a gedit la existencia de groovy debemos crear la carpeta (si no existe) ~/.local/share/gtksourceview-2.0/language-specs y copiar en ella los dos archivos terminados en .lang que descompactamos.

Despues creamos el archivo ~/.local/share/mime/packages/Overrides.xml (y las carpetas necesarias, si no existen) y agregamos en ese archivo el contenido de los dos archivos xml que se encuentran en el bundle.

El contenido final del archivo será similar a

<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
	<mime-type type="text/x-groovy">
		<sub-class-of type="text/x-java"/>
		<comment>Groovy Source File</comment>
		<glob pattern="*.groovy"/>
	</mime-type>
	<mime-type type="text/x-groovy++">
		<sub-class-of type="text/x-groovy"/>
		<comment>Groovy++ Source File</comment>
		<glob pattern="*.gpp;*.g++"/>
	</mime-type>
	<mime-type type="text/x-gsp">
		<sub-class-of type="text/html"/>
		<comment>Grails GSP File</comment>
		<glob pattern="*.gsp"/>
	</mime-type>
</mime-info>

Finalmente, para que el sistema reconozca nuestros cambios, debemos actualizar la base de datos de tipos mime, ejecutando el comando update-mime-database ~/.local/share/mime

Con esto, al abrir el próximo archivo de groovy, deberíamos tener coloreo de sintaxis funcionando correctamente.

Se pueden seguir haciendo otras cosas como habilitar bash completion, pero lo dejaremos para otra oportunidad.

Microsoft Biztalk

Cuando me asignaron a un nuevo proyecto, utilizando la herramienta de microsoft Biztalk 2010, me encontre con la titanica tarea de instalarlo.

Inocentemente decidí instalar la versión de prueba en mi computadora, con lo cual me trajo algunos problemas de conflagración, tras lo cual decidimos instalarlo en una maquina virtual( windows server 2008)… El primer requisito con el que me encontre fue que pedia tener el service pack 2. Pasado esto instale el biztalk, visual studio 2010 y sql server 2008… con lo cual no me reconocio nada…

Decidido a buscar algo mas de información me encontré con este blog (https://sandroaspbiztalkblog.wordpress.com/2010/10/18/biztalk-2010-installation-and-configuration-enable-internet-information-services-part-1/) en el cual detalla en 8 no tan sencillos pasos como configurar e instalar todas la herramientas necesarias para poder instalar el dichoso programa.

Siguiendo paso por paso lo que dice en el blog, algunas cosas me fallaron, y otras funcionaron perfectamente, con lo cual después de un día y medio de instalaciones, configuraciones, volver atrás, repetir todo el proceso me encuentro con visual studio reconociendo y permitiéndome crear proyectos de biztalk.

Para resumir un poco, y sacando lo que no me funciono, dejo los pasos a seguir:

  1. Ir a Administrative Tools,  Server Manager. Alli ir a la parte de Roles Summary y agregar el siguiente rol: Web Server (IIS), con las funciones por default y Application Development. En la parte de seguridad agregar Basic Authentication y Windows Authentication.  En Management Tools, seleccionar IIS 6 Management Compatibility.
  2. Instalar Excel 2007 o posterior
  3. Instalar Visual Studio 2010 sin Microsoft SQL Server Express
  4. Instalar sql server 2008 sp1 o posterior con las siguientes opciones:
    1. Database Engine Services
      1. SQL Server Replication
      2. Full-Text Search
    2. Analysis Services
    3. Reporting Services
    4. Shared Features
      1. Business Intelligence Development Studio
      2. Client Tools Connectivity
      3. Integration Services
      4. Management Tools – Basic
        1. Management Tools – Complete
  5. Usar la Cuenta de windows para crear las cuentas
  6. Instalar las siguientes herramientas de sql server 2005 (http://go.microsoft.com/fwlink/?LinkId=154501): Microsoft SQL Server Native Client, Microsoft SQL Server 2005 Management Objects Collection y Microsoft SQL Server 2005 Notification Services Client Components
  7. Instalar Windows SharePoint Services 3.0 (http://www.microsoft.com/downloads/en/details.aspx?FamilyId=EF93E453-75F1-45DF-8C6F-4565E8549C2A&displaylang=en, link de 32x, si usas 64x, mas abajo encontras el link)
  8. Una vez instalado el sharepoint, ejecutar el wizard que te muestra en la ultima pantalla, en el cual vamos a crear un nuevo servidor:
    1. Elegir la opcion crear nuevo servidor e ingresar el nombre del server de base de datos y autentificación
    2. Mantener el resto de las configuraciones por default
    3. Abrir SharePoint Central Administration, y entrar a “Application Management”
    4. Hacer click en Create or extend Web application
    5. Crear una nueva aplicacion web en el puerto 90 manteniendo las opciones por default e ingresanto el usuario de windows
    6. Una ves creado el servidor hay que darle contenido con “Create Site Collection”
    7. Ponerle titulo y usuarios
  9. El paso siguiente que me da el blog, no logre hacer que funcione, asi que lo vamos a saltear
  10. Ejecutar el instalador de Biztalk (POR FIN!)
  11. Una vez instalado, ejecutar con permisos de administrador BizTalk server configuration e ingresar la autentificacion del servidor de bd
  12. En la siguiente pantalla solo deverias tener un warning con la configuracion de sharepoint, eso lo dejamos para mas adelante, asi que dale okey.
  13. Una vez finalizada la configuracion, volver a ir al server configuration, a la pestaña de sharepoint.
  14. Habilita el checkbox y elegi el servidor que habiamos creado con el sharepoint.
  15. Aplica la configuracion y…. Listo!

Una vez completado este largo proceso, entras al visual studio, ( usando el entorno de C#) y vas a poder crear un nuevo proyecto de BizTalk.

pseudo selector :first-child y :last-child

Desde que comencé a utilizar CSS y HTML Semántico para maquetar los sitios que desarrollamos, he sabido de algunos pseudo selectores CSS. Uno de los más utilizados es :hover, que permite hacer efectos de rollover (cambiar algunos atributos cuando se le pasa el mouse por arriba) sobre elementos.

Hay otros pseudo selectores más pero, honestamente, no me animaba a utilizarlos por miedo a como serían soportados en Internet Explorer. Ahora que Internet Explorer 6 quedó en el lejano pasado, y puedo tranquilamente dejar de darle soporte, comencé a experimentar con otros selectores.
Una estructura que se me presenta muy seguido es tener una lista que utilizo como menú. El código suele ser en lineas generales algo como:

<styles>
#menu { list-style: none; }
#menu li { float: left; margin-right: 10px; }
#menu li.ultimo { margin-right: 0px; }
</styles>

<ul id="menu">
    <li>Primer ítem</li>
    <li>Ítem dos</li>
    <li class="ultimo">Último ítem</li>
</ul>

Lo que no me gusta de este fragmento, es el tener que utilizar el class ultimo. Cuando el código es algo más complicado que simplemente un menú escrito estáticamente, sino que estos pueden variar en cantidad dependiendo una base de datos, el código para agregar ese class=”ultimo” no queda muy agradable y ensucia el código, por lo que sería ideal no tener que agregar lógica adicional para detectar cuando es el último item de una lista, o cualquier otro tipo de estructura.

Ahí entran dos pseudo selectores, que recién ahora comienzo a usar. Estos son :first-child y :last-child

Lamentablemente, Internet Explorer 7 y 8, solamente reconocen :first-child, por lo que debemos pensar, a la hora de maquetar, en hacerlo al revez, o sea en lugar de poner un margen a la izquierda para separar, y al ultimo quitarle el margen, tendremos que poner un margen a la izquierda y quitar el primero.

Utilizando este pseudo selector, el código html quedaría como:

<styles>
#menu { list-style: none; }
#menu li { float: left; margin-left: 10px; }
#menu li:first-child { margin-left: 0px; }
</styles>

<ul id="menu">
    <li>Primer ítem</li>
    <li>Ítem dos</li>
    <li>Último ítem</li>
</ul>

Entiendo que no hay mucho cambio, y en la mayoría de los casos hasta es irrelevante si lo hago de una forma u otra, pero me ha solucionado algunos problemas de visualización de forma muy simple, sin tener que agregar clases sin sentido (aprecio mucho el html semántico!) y sin escribir código en el servidor innecesario para detectar la primera o última iteración de un bucle.

Siempre recordar usar first-child ya que si usamos last-child será totalmente ignorado por Internet Explorer (al menos en sus versiones 7 y 8 que aún se usan y no pueden ser tan fácilmente ignoradas)

Haciendo código i18n sólido con Grails y aprovechando Spring

Hace algún tiempo estamos desarrollando una aplicación considerablemente grande, ejecutada e implementada en diferentes partes del mundo. Hasta ahora, Portugal, España, Italia, Brasil, México, próximamente UK.

Justamente por esas características necesitábamos tener los contenidos en diferentes idiomas y seleccionar aspectos del sitio en base al país de origen. En otras palabras, nos interesaba decirle a los brasileros cosas que son importantes para ellos y no cosas que sean importantes para los italianos. (por decir un ejemplo)

La solución vino de la mano de algunas herramientas que Grails, de la mano de Spring, nos da. Entre las clases están:

org.springframework.context.i18n.LocaleContextHolder as LCH
org.springframework.web.servlet.support.RequestContextUtils as RCU
org.springframework.web.context.request.RequestContextHolder as RCH

Lo más cuiroso es que, aunque estas clases parecieran ser las de Spring mismo… por detrás, hay cosas de Grails ocurriendo y, como para citar un ejemplo el

org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes()

que debería dar un org.springframework.web.context.request.RequestAttributes internamente está dando algo diferente, directamente provisto por Grails y por supuesto gracias a su magia con mucha más funcionalidad, llamado GrailsWebRequest.

A pesar de mi actitud quejosa tengo que aceptar que atar confiar en una estructura ya formada, probada y sostenida en tecnologías como Spring era mucho más confiable que terminar transfiriendo el valor “request” en todas las clases de negocio y controladores de nuestro proyecto.

Gracias Grails.

pd: Está más que claro que no es la única clase de Spring que Grails está encapsulando, así que el día de mañana, si llegasen a tener un problema de este tipo recuerden que hay luz del otro lado del puente.

Reflexiones y descubrimientos relacionados con mime-type, gedit y smarty

Siempre me molestó que para hacer que gedit reconozca un determinado tipo de archivos de una determinada manera, tenía que modificar archivos en el directorio /usr

Particularmente lo que me molestaba tener que actualizar eran los tipos MIME que identifican un determinado archivo, con un determinado tipo y gedit como nautilus utilizan para saber como abrir cada archivo, de que forma colorearlo, etc. Para modificar ese directorio se necesita permisos de administrador y siempre me pareció que debería haber una forma de hacerlo desde mi cuenta de usuario limitado.

Hoy, que estaba trabajado con PHP, queria abrir unos archivos de Smarty que tienen extensión tpl, y que se colorearan automáticamente como html, que es el lenguaje más cercano que reconoce (o al menos de los que vienen por defecto) y decidí buscar en internet una forma de hacerlo y encontré dos páginas, por un lado el blog de c3b en un artículo titulado Alternative method for opening Smarty templates with HTML syntax highlighting in gedit y también en la página de gnome bajo el nombre Modifying MIME types

Combinando el conocimiento de ambos sitios, logré que al hacer doble-click sobre un archivo tpl, se me abra automáticamente el gedit (y no firefox!) y se me coloree automáticamente la sintaxis como PHP

¿Cual fue el procedimiento? Fácil.

(more…)

Me olvidé la clave de Administrador de Windows 2008 Server. ¿Cómo la recupero?

Si, lo sabemos. Somos medio tontos y nos merecemos habernos quedado afuera del sistema. ¿Cómo es posible que se vaya de vacaciones la única persona que conoce la contraseña de Administrador y no podamos más acceder al sistema?

Por irreal que parezca esa historia, nos acaba de suceder, y estoy seguro que no somos los únicos.

Buscamos diferentes programas para poder acceder igualmente al sistema, pero con ningun hemos tenido éxito.

Por suerte seguimos buscando (no mucho) y encontramos un video en You Tube, titulado Reset domain Admin password on a Windows Server 2008 with only the official DVD install el cual muestra un procedimiento para resetear la contraseña y el único requerimiento es tener el DVD de instalación el cual por suerte teníamos.

Es un procedimiento MUY fácil de seguir y nos funcionó de maravillas.

Esperemos no tener que volver a necesitarlo, pero en cualquier caso ya lo conocemos.