Hace algo más de un mes decidí dar el salto a un móvil con sistema operativo Android y he de decir que  a día de hoy estoy más que satisfecho. En mi caso el elegido ha sido un HTC Desire, hermano gemelo del Nexus One de Google, y toda una preciosidad en todos los sentidos.

Una de las ventajas más destacadas de este tipo de móviles es la enorme cantidad de aplicaciones que tienes disponibles para descargar, de forma gratuita y en el tiempo que tardas en hacer un click en el Android Market.

Y como viene siendo habitual en muchos blogs, yo tampoco quiero ser menos y voy a publicar mi lista de aplicaciones Android recomendadas, que no digo que sean las mejores, pero sí las más interesantes en mi caso particular. Las separo en categorías:

Aplicaciones Android de Productividad

Mi mala memoria me obliga a disponer de utilidades que me permitan hacer anotaciones rápidas y mantener una lista de tareas pendientes. Si sois como yo, éstas dos aplicaciones cubren sobradamente ambas necesidades:.

  • Astrid Task/ToDo List. La lista de tareas más completa y versátil. Prioridades, etiquetas, avisos, alarmas…
  • Note Everything. Notas de texto, voz, y dibujadas sobre la pantalla.

Aplicaciones Android de Referencia

Para poder buscar en cualquier lugar y de cualquier forma: por texto, por voz, por sonidos, por imágenes, por posición…

  • Búsqueda por voz. Permite realizar búsquedas por voz en Google, con una precisión espectacular.
  • Google Goggles. Permite realizar una búsqueda en Google a partir de una foto tomada con el móvil. También permite fotografiar un texto y traducirlo a cualquier idioma sin tener que teclearlo.
  • Wapedia. Permite realizar búsquedas en Wikipedia u otras Wikis alternativas.
  • Traductor de Google. Traduce textos entre más de 50 idiomas. Con síntesis de voz incluida.
  • Bliquo / Qype / Places Directoy. Búsqueda de puntos de interés cercanos a tu ubicación actual (bares, restaurantes, cines, monumentos, …).
  • Layar / Wikitude. Aplicaciones de realidad aumentada. Por decirlo de alguna forma, muestran información en tiempo real sobre la imagen que está tomando la cámara del móvil en cada momento.
  • Shazam. Búsqueda del título y álbum de cualquier canción que esté sonando [fuera del móvil].

Aplicaciones Android para Gestión de Ficheros y Aplicaciones

Necesarias para gestionar las aplicaciones y los ficheros almacenados en el móvil.

  • ES File Explorer. El mejor administrador de archivos que he encontrado para Android. Proporciona todas las opciones básicas para explorar y gestionar los ficheros contenidos en la memoria principal y en la SD, así como también en otros PCs de la red, servidores FTP y dispositivos bluetooth, descomprime ficheros zip, y otras muchas funciones.
  • ES Task Manager. Un administrador de tareas para detener las tareas en segundo plano que ya no son necesarias. No es el mejor ni el más famoso pero se integra bien con ES File Explorer y cumple su función básica.
  • Barcode Scanner. Lector de códigos de barras y códigos QR para buscar y descargar aplicaciones. Imprescindible.
  • Dropbox. Aplicación oficial del conocido servicio del mismo nombre que ayuda a sincronizar cualquier carpeta con tu disco virtual en internet. Fantástico cuando necesitas acceder a determinados ficheros desde varios PCs y dispositivos.

Aplicaciones Android para Comunicación y Redes Sociales.

No soy una persona que utilice demasiado las aplicaciones de mensajería instantánea y las redes sociales de moda, pero aún así es cierto que en ocasiones hago algún uso de ellas.

  • Facebook for Android. Aplicación oficial de Facebook para Android.
  • Tuenti Móvil. Aplicación oficial de Tuenti para Android.
  • Peep. Ésta es la aplicación para Twitter que incluye HTC en sus móviles. No es pública, por lo que dudo que se pueda instalar en otras marcas. Para el uso que hago de este servicio me basta con esta aplicación, pero si haces un uso más intensivo de Twitter puede que te interesen algunas de estas otras dos: Twicca y Seesmic.
  • Flickr. Para el servicio Flickr también me conformo con la integración que hace HTC en sus móviles. ¿Me recomendáis alguna opción mejor?
  • Meebo IM. Éste es un cliente de mensajería instantanes capaz de conectar con los servicios más populares en este campo: MSN Messenger, Yahoo Messenger, Google Talk, Jabber, ICQ, e incluso Facebook.
  • WordPress. Aplicación oficial de WordPress para gestionar blogs construidos con esta plataforma. No es nada espectacular, pero funciona. ¿Alguna alternativa mejor?

Aplicaciones Android para Reproducir Música y Video.

  • Reproductor de Música. Pues como reproductor de música también continúo utilizando el reproductor por defecto que integra HTC con su interfaz Sense. Pero eso sí, como de esto sí hago un uso más frecuente estoy evaluando otros reproductores multimedia como Meridian (por ahora el mejor, con búsqueda de letras, edición etiquetas, …), Zimly, MixZing, doubleTwist, o incluso la versión de RealPlayer para Android.
  • Reproductor de Video. Todos los anteriores son capaces de reproducir tanto música como video. Pero ninguno de ellos es capaz de reproducir contenidos en formato Divx o Xvid. Para poder hacer esto último, para mí la opción es clara: RockPlayer. La versión gratuita muestra una “R” roja en la esquina superior izquierda que no impide para nada ver la reproducción. De cualquier forma, si estáis dispuestos a pagar por ella os aseguro que vale todos y cada uno de los 9.99 dólares que cuesta. Reproduce con fluidez videos en formato Divx/XVid sin tener que convertirlos a otro formato ni resolución.
  • Descarga de Música. Para descargar música directamente al móvil está disponible la aplicación Music Junk. No se trata de ninguna aplicación P2P (no permitidas por la mayoría de las operadoras de telefonía), sino que busca los ficheros de música en descarga directa en diversos sitios de internet. Funciona bastante mejor de lo que suena.
  • Ringdroid. Permite recortar y editar cualquier fichero de música, por lo que resulta ideal para crear tus propios tonos de llama.

Mapas y Navegadores GPS para Android

  • Mapas. En este apartado la solución por excelencia viene de serie con el sistema operativo Android, y es que Google Maps dificilmente podrá ser superado por cualquier otra aplicación de terceros. Al margen de esto, para complementar Google Maps, también está disponible una versión para Android del espectacular Google Earth, que al menos en el HTC Desire funciona con bastante fluidez.
  • Navegación GPS. Hasta hace bastante poco, para disfrutar de algún buen navegador GPS en un móvil Android había que recurrir a alguna aplicación de pago como Copilot o Sygic. Sin embargo, con la última actualización de Google Maps se añadió Google Maps Navigation, un navegador GPS gratuito que cubre bastante bien las funciones básicas de este tipo de aplicaciones. Además tiene la ventaja (o el inconveniente si no tienes contratada una tarifa plana de datos) de tomar los mapas directamente de internet, con lo que siempre estarán lo más actualizado posible.

Navegadores Web para Android

Navegadores para Android existen varios: Dolphin, Skyfire, Opera Mini, y alguno más menos popular. Sin embargo, ninguno de ellos ha conseguido convencerme lo suficiente como para dejar de utilizar el navegador por defecto de Android, ni siquiera Opera Mini con su fama de rápido (que lo es), pero que en mi opinión tiene algunas carencias que lo descartan, como por ejemplo el no aceptar gestos en pantalla para hacer zoom, o su curiosa [y desafortunada] forma de mostrar ciertas [muchas] páginas web. Eso sí, habrá que estar atentos a la evolución de estos navegadores.

Visores de Documentos para Android

Por la salud de mis ojos, intento siempre no tener que leer ningún documento en la pantalla de mi móvil, pero cuando he tenido que hacer alguna consulta rápida me ha bastado con el visor de PDFs por defecto del sistema (también existe una versión de Adobe Reader para Android) y la aplicación QuickOffice para visualizar documentos Word, Excel y Powerpoint.

De cualquier forma, si te gusta leer en tu móvil te recomiendo la aplicación Aldiko Book Reader para descargar y leer libros electrónicos en formato ePub.

Otras aplicaciones para Android

Ya esto queda a la imaginación y las necesidades de cada uno, hay miles de aplicaciones para elegir. En mi caso utilizo también por ejemplo la aplicación BBVAMovil para consultar los cajeros y oficinas BBVA más cercanos a mi ubicación actual, o como curiosidad para echar un rato la aplicación Google Sky Map para ver información sobre las estrellas, galaxias y constelaciones a las que apuntas con la cámara del móvil, espectacular en mi humilde opinión.

Espero que esta lista de aplicaciones os sirva a muchos de vosotros para completar vuestras colecciones particulares.

http://es.androlib.com/android.application.com-taptu-wapedia-android-xwt.aspxWapedia
, , , ,

A través del blog de Jorge Serrano me entero de un libro gratuito en pdf sobre ADO.NET Entity Framework, la nueva tecnología de acceso a datos que, junto a LINQ, quiere institucionalizar Microsoft como parte de sus servicios de datos dentro del .NET Framework.

ADO.NET Entity Framework es la propuesta de Microsoft dentro del campo de los ORM (object-relational mapping) y se incluyó como parte del .NET Framework 3.5 SP1. Aunque su uso no está todavía demasiado extendido la experiencia con otras tecnologías de este tipo (y más cuando vienen de la mano de Microsoft) nos dice que acabará convirtiéndose en poco tiempo en un marco de trabajo de referencia dentro del mundillo .NET. Por tanto, nunca está de más aprender un poco sobre su filosofía, funcionamiento y forma de trabajo.

El autor del libro es Zeeshan Hirani, y podemos descargarlo de forma gratuita accediendo a su blog o mediante los siguientes enlaces directos:

Espero que os sea de utilidad. Saludos.

, , , , ,

La empresa Red Gate, muy conocida por ser la desarrolladora de uno de los mejores profilers para .NET (ANTS Profiler) y también por ser la actual dueña del famosísimo .NET Reflector, está ofreciendo de forma gratuita el libro Illustrated C# 2008, de Daniel Solis.

Entre los contenidos de este libro podemos encontrar una completa referencia técnica del lenguaje C#, que abarca desde los conceptos más básicos hasta temas más avanzados como LINQ o el desarrollo de aplicaciones multihilo y programación asíncrona.

Para descargar gratis el libro en formato PDF podéis acceder a la oferta de Red Gate o utilizar el siguiente enlace directo [descarga gratuita].

Un libro más para la colección.

, , , , ,

Scott Guthrie, responsable en Microsoft de tecnologías como ASP.NET y Silverlight, acaba de publicar en su blog un documento sobre ASP.NET MVC al que puede resultar interesante echar un vistazo.

Se trata del primer capítulo del libro Professional ASP.NET MVC 1.0, publicado recientemente por la editorial Wrox, donde a modo de tutorial paso a paso se detalla la construcción de una aplicación web completa (llamada NerdDinner) utilizando esta tecnología.

El contenido de este “capítulo” de 185 páginas es realmente completo, comentando todo el proceso de construcción de la aplicación, desde la creación del proyecto en Visual Studio, pasando por la creación del modelo, la base de datos, los controladores y vistas, las master pages, los procesos de autenticación y autorización, las partes AJAX, … hasta las pruebas unitarias y el despliegue de la aplicación.

Encontraréis más información y los enlaces de descarga en la entrada de su blog. Si queréis descargar directamente el PDF podéis hacerlo desde estos enlaces: Libro y Código fuente y Pruebas Unitarias.

Edito 06/05/2009: A partir de ahora el libro también puede consultarse de forma online en la siguiente dirección [Libro Online: Professional ASP.NET MVC 1.0].

, , , , , ,

Ya hemos hablado alguna vez de estructuras de datos en C#. Hoy le toca el turno a un libro gratuito en PDF que trata este mismo tema. El libro en cuestión se llama Data Structures and Algorithms y como su propio nombre indica consta de dos partes principales, en la primera de ellas se discuten multitud de estructuras de datos habituales [y no tan habituales] y se propone una implementación en pseudocódigo para cada una de ellas, y en la segunda se describen varios tipos de algoritmos básicos que pueden resultar interesantes en algunos ámbitos.

Las estruturas de datos tratadas son las siguientes: lista enlazada (linked list), árbol binario de búsqueda (binary search tree), montículo (heap), cola (queue), conjunto (set) y árbol AVL (AVL tree). Además de las estructuras básicas también se describen muchas de sus variantes (como por ejemplo listas doblemente enlazadas, conjuntos ordenados, colas de prioridad…) y las operaciones habituales sobre estas estructuras (inserción, borrado, búsqueda, recorrido…).

Por otro lado, los tipos de algoritmos descritos son éstos: algoritmos de ordenación, algortimos de búsqueda, algoritmos numéricos (test de primalidad, conversiones de base, …) y algoritmos sobre cadenas de caracteres.

En general, me parece un libro bastante bien estructurado con un contenido bien planteado y, aunque se olvida de algunas estructuras de datos y algunos algoritmos básicos bastante habituales, puede servir como referencia a la hora de hacer memoria sobre todos aquellos temas clásicos de algoritmia que aprendimos durante nuestros años de facultad.

, , , , ,

Para comenzar con las entradas sobre inteligencia artificial hoy os paso el enlace a un libro gratuito sobre inteligencia artificial en java. Este libro nos llega de la mano de Mark Watson y trata el tema desde un punto de vista completamente práctico, presentando las distintas herramientas java y recursos disponibles en el ámbito de cada uno de los conceptos tratados.

Los contenidos del libro son los siguientes:

  1. Técnicas de búsqueda
  2. Razonamiento automático con PowerLoom
  3. Web semántica con RDF, SPARQL, Sesame, OWL…
  4. Sistemas expertos con Drools
  5. Algoritmos genéticos
  6. Redes neuronales
  7. Aprendizaje automático con Weka
  8. Procesamiento de lenguaje natural con WordNet, JAWS…
  9. Extracción de información con Open Calais, Lucene…

El libro [en inglés] se encuentra en formato PDF y se distribuye gratis, bajo licencia Creative Commons, desde la siguiente web:

Mark Watson’s Open Content Free Books

Sin duda, un buen recurso al que merece la pena echar un vistazo y tenerlo como buen punto de partida en el uso de algunas herramientas java relacionadas con la inteligencia artificial.

, , , , ,

Esta entrada forma parte de una serie de artículos dedicados al proyecto FKScript, construcción de un compilador y una máquina virtual para un lenguaje de script con C# y ANTLR, entre los cuales podrás encontrar una descripción detallada de cada módulo, documentación técnica, ejemplos y tutoriales de uso que pueden ser de tu interés. No olvides consultar la página principal de FKScript para más información.

Información Proyecto FKScript

Esta página contiene información sobre el documento “Proyecto FKScript – Implementación mediante ANTLR y C# de un compilador y una máquina virtual para un lenguaje de script sencillo“. Puede visitar la página del proyecto para más información.

Introducción al documento

Mis primeros pasos en el mundo de las herramientas de generación de compiladores fueron con Flex y Bison (versiones GNU de Lex y Yacc). Estas herramientas, aunque potentes, resultaban algo tediosas de utilizar tanto por sus características intrínsecas como por el código generado, en lenguaje C. A pesar de todo, mis primeros trabajos con estas herramientas me proporcionaron enormes conocimientos sobre este bonito campo del desarrollo de software, aunque eso sí, pasando por muchas dificultades durante el aprendizaje debido a la falta de documentación en español sobre la generación de procesadores de lenguaje y sobre las herramientas concretas utilizadas en el proceso.

Más tarde, mis comienzos con ANTLR (allá por la versión 2.7) no fueron mejores. Me fascinaba un artilugio que unificara en una sola herramienta todos los procesos de generación de un compilador: el análisis léxico y análisis sintáctico mediante autómatas LL, la generación y recorrido de árboles de sintaxis abstracta (AST) para el análisis semántico, y la generación de código tradicional o mediante plantillas (templates), todo con una sintaxis común y con una integración total entre todos los módulos sin tener que recurrir a herramientas de terceros o desarrolladas ad hoc. Sin embargo, la curva de aprendizaje para ANTLR resultó más pronunciada de lo esperado, ya no por la falta de documentación técnica de referencia (extensa pero en inglés) sino por la falta de documentación práctica, es decir, documentación sobre cómo enfocar el desarrollo de un traductor o compilador con esta nueva herramienta.

Por aquel entonces un compañero de promoción realizó como proyecto fin de carrera un fantástico estudio de la versión 2.7.2 de ANTLR (ANTLR v2), abordando el tema desde un punto de vista completamente práctico, es decir, desarrollando desde cero un compilador para un lenguaje relativamente sencillo aunque bastante completo. Este trabajo resultó ser un recurso inmejorable de información útil sobre ANTLR 2.

Sin embargo, con la llegada de ANTLR v3 todo volvió a cambiar. La documentación de la versión anterior había quedado obsoleta ya que los cambios entre una versión y otra son notables, la documentación pública y gratuita de la versión 3 brillaba por su ausencia (aunque poco a poco se va incrementando en forma de wiki, por supuesto en inglés) y el único documento estructurado con información sobre la herramienta era el libro “The Definitive ANTLR Reference: Building Domain-Specific Languages” del propio autor de ANTLR, Terence Parr. Y por supuesto que recomiendo adquirir el libro a todo aquel que esté realmente interesado en conocer a fondo ANTLR, pero no deja de ser una fuente de información que no está al alcance de todos de forma gratuita como cabría esperar de una herramienta de código libre como es ANTLR (licencia BSD).

Y aquí es precisamente donde pensé que podría aportar mi granito de arena a todo este asunto. Aprovechando un proyecto personal en el que hacía uso de ANTLR v3 para generar el procesador de un pequeño lenguaje de script decidí escribir un pequeño documento sobre el desarrollo de un compilador para un lenguaje aún más pequeño. Un lenguaje sin complicaciones innecesarias, lo más básico posible para no perdernos en explicaciones. Un documento para comenzar a conocer ANTLR 3 y saber cómo empezar a aplicarlo al desarrollo de un compilador y una máquina virtual sencillos utilizando como lenguaje base C#. En definitiva, algo que asiente las bases necesarias para, a partir de ahí, poder seguir profundizando en el tema todo lo que se desee.

Y así nace este documento que aún no sé cómo llamar: libro de ANTLR 3, manual de ANTLR 3, tutorial de ANTLR 3, guía práctica de ANTLR 3… quizá documentación práctica de iniciación a ANTLR 3 con C#.

¿A quiénes está dirigido este tutorial? Pues en principio a cualquiera que quiera conocer los entresijos básicos de un sistema como el que se pretende construir, y que desee utilizar como herramientas de apoyo ANTLR 3 y C#. Sin embargo, aunque al principio del documento se intenta describir una foto del proceso general que siguen estos sistemas, ayudará mucho conocer al menos unos principios básicos de construcción de compiladores y máquinas virtuales. En cuanto a ANTLR v3, en este manual no se describen sus características generales por lo que se recomienda consultar documentación adicional si aún no se ha tenido ningún contacto con la herramienta. Serán de mucha utilidad conocimientos previos sobre otras herramientas de generación de compiladores (como Flex/Bison, Lex/Yacc, JavaCC…), ya que aunque sus principios no coincidan con los de ANTLR, sí que compartirán muchos conceptos comunes.

¿Qué pretendemos construir? Los requerimientos a grandes rasgos del lenguaje de script y la máquina virtual que pretendemos implementar durante esta guía son los siguientes:

  • El programa principal se escribirá en un solo fichero y estará formado por una sola función principal, es decir, no será necesario la implementación de llamadas a funciones internas (aunque no se descarta su inclusión en futuras versiones).
  • Las variables del lenguaje tendrán un tipo declarado de forma explícita y se deberá comprobar en tiempo de compilación que han sido declaradas y que sus tipos concuerdan dentro de una expresión o una asignación. •
  • Deberán existir los siguientes tipos de datos: entero, real, lógico y cadena.
  • El lenguaje deberá proporcionar las instrucciones clásicas: asignaciones, condicionales y bucles.
  • El lenguaje deberá proporcionar las expresiones aritméticas y lógicas básicas.
  • La máquina virtual se debe poder integrar fácilmente con cualquier aplicación que exponga una API, y desde el programa script se podrá interactuar con esta aplicación mediante llamadas a las funciones de esta API.

El sistema se escribirá completamente en C# y estará formado por los siguientes módulos:

  1. Un compilador que transformará el código script a un lenguaje intermedio.
  2. Un ensamblador que generará el fichero binario ejecutable a partir del código intermedio.
  3. Una máquina virtual capaz de ejecutar el fichero generado por el ensamblador.

ANTLR será usado para construir el compilador, que estará formado a su vez por los analizadores léxico y sintáctico, un analizador semántico para el cálculo y comprobación de tipos, y un generador de código a partir del árbol de sintaxis abstracta (AST) construido durante las fases anteriores. Por su parte, tanto el ensamblador como la máquina virtual se escribirán sin utilizar ninguna herramienta de apoyo, dado que son relativamente sencillos de implementar.

Descarga

El documento puede ser libremente descargado y distribuido bajo los términos de la licencia Creative Commons que se expone en el siguiente apartado.

Enlace de descarga: Libro Proyecto FKScript (v0.1) (Formato PDF – 285 Kb)

Licencia

Este trabajo y su código fuente asociado se distribuyen bajo una licencia de Creative Commons.

Tabla de Contenidos

  1. Introducción al Proyecto
  2. Introducción ANTLR
  3. Proceso General FKScript
  4. Análisis Léxico y Sintáctico de FKScript
    1. Análisis léxico
    2. Análisis sintáctico
    3. Recuento y reporte de errores
    4. Construcción del AST
    5. Construcción de la tabla de símbolos
    6. Finalizando el analizador léxico-sintáctico
  5. Análisis Semántico de FKScript
    1. Tareas del análisis semántico
    2. Enriqueciendo los nodos del árbol AST
    3. Implementación del analizador en ANTLR v3
    4. Cálculo y chequeo de tipos
    5. Programa principal
  6. Generación de Código de FKScript
    1. Máquina virtual FKVM
    2. Primeros pasos
    3. Generación de código para literales e identificadores
    4. Generación de código para expresiones aritméticas
    5. Generación de código para expresiones lógicas
    6. Generación de código para asignaciones
    7. Generación de código para instrucciones condicionales y bucles
    8. Generación de código para el programa principal FKIL
    9. Programa principal
  7. Ensamblador de código FKIL (FKASM)
    1. Tareas del ensamblador
    2. Estructuras de datos
    3. Inicialización del ensamblador
    4. Primera pasada del ensamblador
      1. Procesamiento de directivas
      2. Procesamiento de etiquetas
      3. Procesamiento de instrucciones
    5. Segunda pasada del ensamblador
  8. Máquina Virtual de FKScript (FKVM)
    1. Estructura de la máquina virtual
      1. Segmento de código
      2. Registro contador de programa
      3. Pila
      4. Memoria dinámica
      5. Tabla de funciones API
    2. Carga de un programa
    3. Ejecución de un programa
    4. Ejecución de instrucciones
      1. Instrucciones PUSH
      2. Instrucciones LOAD
      3. Instrucciones STORE
      4. Instrucciones aritméticas
      5. Instrucciones de comparación
      6. Instrucciones de salto condicional
      7. Instrucciones de llamada a función externa
    5. Integración con otras aplicaciones
      1. Registro de funciones API
      2. Definición de la API de la aplicación externa
  9. ANEXO I: Especificación del lenguaje FKScript
  10. ANEXO II: Especificación del lenguaje FKIL

Esta entrada forma parte de una serie de artículos dedicados al proyecto FKScript, construcción de un compilador y una máquina virtual para un lenguaje de script con C# y ANTLR, entre los cuales podrás encontrar una descripción detallada de cada módulo, documentación técnica, ejemplos y tutoriales de uso que pueden ser de tu interés. No olvides consultar la página principal de FKScript para más información.

, , , , , , , , , ,