Etiqueta: programación

Libro: Dive Into Python

Hay una versión del libro para python 2, cuya última edición es de 2004, y una versión centrada en python 3 con algo de contenido reescrito. El autor original Mark Pilgrim hace tiempo que desapareció de internet, pero los libros continúan siendo mantenidos aunque poco actualizados en github.

Ambas versiones de los libros tienen buenas puntuaciones en Amazon y Goodreads [v2] [v3]

Se venden como un hands-on en python, es decir poca teoría y presentar ejemplos prácticos.

La estructura de ambas versiones es la misma para todos los capítulos comienza con un ejemplo de código, y a continuación lo explica paso a paso. Durante el proceso va introduciendo nuevas funcionalidades del lenguaje. Tal y como está estructurado no es adecuado para alguien sin conocimientos de programación previos. Tampoco me parece adecuado para gente que sepa de otro lenguaje y quiera aprender python.

Algunos de los capítulos de la segunda versión se quedan antiguos y/o muy específicos como trabajar con http, xml o html. La parte de testing, tdd y refactoring es bastante limitada y no me acaba de convencer, aunque hay que reconocer que pocos libros no específicos tratan estos temas, por lo que es de agradecer que al menos los mencionen. Los primeros tres capítulos y el de expresiones regulares son casi un relleno, me parecen avanzados para alguien que no sepa python, poco útiles para quien ya controle del lenguaje. Los capítulos de Introspección, POO, Programación Funcional y Funciones dinámicas pueden aportar algún conocimiento de interés y funcionalidades del lenguaje algo menos habituales de usar.

En la versión 3 pasa más o menos lo mismo, aunque los capítulos sobre Closures & Generatos, Classes & Iteratos, Advanced Iteratos, y Special Method Names son interesantes. Esta versión tiene un poco menos de carga en la parte de Programación orientada a objetos, así que esos capítulos se pueden revisar en la versión para python 2. Los capítulos sobre migración de python 2 a python 3 sólo son de interés para quien tenga que abordar un proyecto de ese tipo.

Si estás buscando un libro para aprender python sepas o no programar previamente esta no es una buena opción. Pero si merece la pena cuando ya tengas idea del lenguaje y estés buscando aprender un poco más y conocer algunos idioms, sobre todo en modo lectura rápida. Abre cada capítulo y trata de entender el ejemplo propuesto, si no tienes dudas puedes pasar al siguiente capítulo. Si el ejemplo tiene algo que te resulta de interés lee un poco más de ese capítulo.

Libro: Think Python: How to Think Like a Computer Scientist

How to Think Like a Computer Scientist es un libro clásico entre los recomendados para comenzar a programar en python. La primera edición es de 2002, escrito por Jeffrey Elkner, Allen B. Downey y Chris Meyers bajo licencia GNU FDL. El ser tan «antiguo» y el estar publicado bajo licencia libre ha hecho que a lo largo del tiempo hayan aparecido diversas versiones del libro.

Tenemos dos versiones del libro para python 2

  • How to Think Like a Computer Scientist: Learning with Python 2nd edition, sería la última edición para python 2 del libro original, y está fechada en 2012. Las soluciones a algunos ejercicios se pueden encontrar en wikibooks (y seguramente valgan para otras versiones).
  • La primera edición (2002) de ese mismo libro la podemos encontrar en Green Tea Press la página personal (y «editorial») de Allen B. Downey uno de los autores originales
  • Y también en Green Tea Press podemos encontrar una reedición distinta del mismo libro para python, renombrada simplemente a Think Python. Revisando el github donde se mantiene el libro los últimos cambios serios parecen ser de 2015

También tenemos varias versiones del libro enfocadas a python 3.

  1. La que podríamos considerar primera, de 2012, es How to Think Like a Computer Scientist: Learning with Python 3, reeditada fundamentalmente por Peter Wentworth como libro de texto para un primer curso de programación.
  2. Otra versión sería una adaptación de la de Peter Wentworth, hecha por varios profesores de la Universidad de Groningen, para emplearla también como libro de texto para sus clases. En el prólogo declaran que su idea era cambiar la filosofía del libro, de «how to think like a computer scientist» to «how to think as a scientist with a computer», pero revisándolo en mi opinión, los cambios no son tan significativos como para conseguirlo. Está en readthedocs por lo que también se puede descargar
  3. En Green Tea Press también encontramos una versión (los últimos cambios serios en el github son de 2016). Esta sería algo así como la segunda edición de Think Python
  4. Por último, un experimento interesante. Un libro interactivo, que parece basado fundamentalmente la versión de Wentworth. Consiste en una aplicación web que permite ejecutar código en el propio navegador, depurar paso a paso a modo educativo y responder a cuestionarios

En la página de Green Tea Press hay un dos artículos explicando porqué publicar «free books», y su filosofía a la hora de escribir libros de texto. Además en el prólogo del libro se puede leer algo sobre su historia para entender los autores y los cambios a lo largo del tiempo.

Todas las versiones (inluída la interactiva) están en repositorios de código en github o launchpad, por lo que es posible colaborar en su mejora. Y están escritos en reStructuredText o Markdown y convertidos a libros con sphinx u otras herramientas.

No resulta sencillo decir «cual es mejor», cada una de las veriones tiene sus puntos fuertes y débiles:

  • Los que hemos hemos numerado como dos y como tres son los que tienen para mi un orden de capítulos más lógico. Por ejemplo trata listas, tuplas y diccionarios en capítulos contiguos mientras que en las otras versiones los diccionarios están separados del resto de tipos de datos. Pero en dos han juntado varios capítulos en uno sólo por lo que su lectura se hace algo más difícil. Además los capítulos sobre numpy, matplotlib y data handling no encajan muy bien como están escritos en un libro para principiantes. Por tanto a pesar de ser el más actualizado yo en principio descartaría esta versión.
  • El uno tiene algún material adicional respecto a los otros como capítulos sobre estructuras de datos más avanzadas (pilas, colas y árboles). Si bien creo que estos capítulos son de interés, tampoco pasa nada por prescindir de ellos en un primer contacto, porque hay otros libros más avanzados o más específicos que tratan mejor este tipo de temas.

  • El número tres (Think Python) tiene para mi otros alicientes como que algunos de los problemas y soluciones están resueltos en el github del autor. Es de los que siguen un orden más lógico, capítulos cortos, y una sección «debugging» al final de cada capítulo que explica «técnicas mentales» a la hora de depurar y construír un programa que resultan útiles. Además se puede comprar a través de Amazon, descargar gratuitamente en PDF, leer en html… Así que seguramente esta es la versión más recomendable.
  • La versión interactiva también me ha sorprendido gratamente. El texto no es tan bueno como el de Think Python, pero el poder jugar con el código mientras leemos el texto, da muchas opciones a alguien que se introduce en el lenguaje y le permite aprender sin tener que liarse con el entorno. Además la opción de debug (codelens en su terminología es especialmente útil para ver lo que pasa en el programa). Esta tambień es un opción recomendable.

Entre la opción interactiva y Think Python es difícil decidirse, si quieres avanzar rápido y tener una panorámica general, el libro seguramente es mejor, y la irrupción de cajas y botones en medio del texto menos molesta. Depende del estilo de aprendizaje de cada uno. Leer un par de capítulos de cada uno y decide tu mismo.

Si está revisión te ha ahorrado tiempo y quieres agradacerme el esfuerzo planteate donar usando el botón de la derecha, o simplemente dejar un comentario en esta entrada.

Libro: A Byte of Python de Swaroop C H

El libro «A Byte of Python» es uno de los que se suelen recomendar en las QA de como iniciarse en el desarrollo con Python. Es un libro corto, unas 120 hojas en la versión impresa que se puede ojear en apenas un par de horas. Está distribuído bajo licencia CC-by-sa 4.0 y el desarrollo se realiza en github. Al ser libre hay distintas versiones en la red, la canónica está en la página del autor y es la que se debería leer.

El libro hace un repaso básico a la sintaxis del lenguaje, sin entrar en demasiada profundidad en ningún tema y con ejemplos tipo «¡Hola mundo!». Tampoco se para demasiado en conceptos de teoría de la programación, como explicar que es una variable o un lenguaje interpretado pero si lo menciona. Eso sí, la terminología que emplea para hacer referencia a los conceptos es correcta.

Creo que es una buena guía si ya sabes algo de programación en otro lenguaje y quieres de una forma rápido poder empezar a hacer cosas con python, pero no es adecuado como primer contacto con el mundo del desarrollo.

Compilando y depurando un plugin de ejemplo para gvSIG 2.1 desde Eclipse

Joaquín del Cerro ha publicado un artículo explicando como compilar y depurar un plugin de ejemplo para gvSIG 2.1 con NeatBeans. He adaptado sus instrucciones para Eclipse que es mi IDE habitual. Este artículo no es tan detallado como el suyo así que seguramente tendrás que consultar los dos, especialmente los pasos previos que comenta Joaquín para que todo funcione.

Una vez que tenemos los «previos» realizados, creamos un nuevo workspace en eclipse, por ejemplo workspace-gvsig-landregistry.

Nos aseguramos de que tenemos instalados en eclipse:

Abrimos la perspectiva de eclipse de SVN Repository Exploring, desde Window -> Open perspective -> Other, o cualquier otro de los sitios desde los que se puede abrir.

Y añadimos el repositorio del plugin desde File -> New -> Repository Location o el icono correspondiente. Como URL usaremos:

http://devel.gvsig.org/svn/gvsig-plugintemplates/org.gvsig.landregistryviewer/trunk/org.gvsig.landregistryviewer/

Seleccionamos el repositorio que acabamos de añadir y en el menú contextual escogemos Check out as maven project

Si no tenemos el conector de maven-svn instalado, nos pedirá instalarlo. En la ventana previa al checkout nos aseguraremos de que la opción «All projects» está activada

Puede tardar un ratito en descargar, sobre todo si tiene que descargar muchas dependencias. Cuando acabe, pasamos a la perspectiva Java y ya tendremos los proyectos correspondientes al plugin configurados en el workspace.

Si no tienes la opción de Build automatically activada, haz un build all. A continuación pon un punto de ruptura para comprobar que todo funciona correctamente en el punto que indica Joaquín (método createWindow de la clase LandRegistryViewerExtension).

Tras lanzar gvSIG en modo debug,


./gvSIG --debug --pause

configuramos el debugger. En Debug Configurations, añadiremos una nueva configuración del tipo Remote Java Application

En name pondremos lo que queramos, por ejemplo org.gvsig.landregistryviewer.app, en project org.gvsig.landregistryviewer.app.mainplugin y en port 8765. Si antes de crear la configuración de debug seleccionamos el proyecto org.gvsig.landregistryviewer.app.mainplugin en el package explorer nos rellenará automáticamente name y project.

Al darle a debug debería abrirse gvSIG y pararse la ejecución en el punto que hemos marcado.

Trabajar con Word (docx) y Excel (xls y xlsx) desde Java

Iconos Word y Excel de MS OfficeEn Cartolab hemos trabajado ultimamente en procesar y generar documentos de Excel (xls y xlsx) y de Word (docx) desde Java. Tras probar algunas librerías open source las que estamos usando son:

Apache POI Spreadsheet para hojas de cálculo de Excel. Es fácil de usar y funciona bien tanto para los formatos binarios antiguos de xls (Excel 97-2007) como para xlsx (Excel 2007 OOXML). El How-To y la Quick Guide de la web son suficientes para empezar a escribir código.

Docx4j para documentos docx (OpenXML de Word 2007). La mejor forma de usarla es crear un documento vacio o con las cabeceras y pies de página desde Word o LibreOffice y definir en él los estilos. Desde nuestro código abrimos el documento y vamos añadiendo nuevos párrafos u otros elementos asignándole los estilos que hemos definido mediante el método addStyledParagraphOfText(styleID, text);. El styleID lo obtendremos consultado el fichero styles.xml que está comprimido dentro del docx. Si tenemos que hacer cosas más elaboradas el código se complica bastante pero al menos permite hacerlas. Para arrancar puedes leer como substituir placeholders por tu propio contenido, este otro artículo un poco más general y los ejemplos de código que vienen con la librería.

Para trabajar con documentos .doc de Word también probamos con Apache POI pero es complicado de usar y el resultado no es demasiado bueno. Así que por ahora no tenemos una alternativa válida para este formato.

En algún otro momento también hicimos pruebas con:

  • JasperReports que está muy bien para generar pdf pero el odt y el word lo saca maquetado en forma de tablas por lo que no nos valía.
  • iText. Que en versiones antiguas de la librería permitía sacar los resultados en rtf y era sencilla de emplear. Pero las últimas versiones se ha creado una nueva librería que no hemos probado todavía.

En esta pregunta de StackOverflow dan más alternativas. ¿Alguien usa otras librerías, preferiblemente open source y gratuitas, distintas a estas?

Libro: Beggining Ruby: From novice to proffesional de Peter Cooper

He terminado estos días de leer el libro de Peter Cooper, Beginning Ruby: From Novice to Professional (Expert’s Voice in Open Source)
, es una segunda edición del 2009 publicada por Apress. El libro se puede comprar desde la página del autor.

Tiene 658 páginas, pero entre espacios en blanco, índice de referencias, índice de contenidos y secciones prescindibles para quien ya sepa algo de programación se queda en bastantes menos. Además, es fácil de leer.

Si ruby no es el primer lenguaje que aprender mi recomendación es empezar por el apéndice A. De un vistazo rápido tienes una gran parte de la sintaxis básica del lenguaje, que ya te permite empezar a hacer alguna prueba.

A partir de ahí lo más fácil es leer el libro en orden, es fácil identificar aquellas secciones prescindibles, como la de instalar ruby en distintos sistemas operativos del capítulo 1, la introducción a ppo del 2, los operadores básicos del 3,… Sobre todo en los primeros capítulos hay cosas básicas que pueden saltarse, y a partir de la mitad del libro algunas cosas muy específicas que se pueden leer en diagonal, simplemente saber que existen y volver a ellas si en algún momento te hace falta.

Me gusta del libro que empieza despacio, siendo asequible para alguien con poca experiencia previa en programación pero avanza rápido y gradual hacia temas más avanzados cubriendo un montón de aspectos del lenguaje que pueden hacer falta. Incluye comentarios sobre estilo del código, tests automáticos (esta parte podía estar un poquito mejor) y desarrollo web, incluido un capítulo sobre rails que te da para dar los primeros pasos en ese framework.

También me gusta que hay bastantes pequeños snippets de código autoejecutables y dos capítulos enteros de aplicaciones un poco más completas, el capítulo 12 en el que desarrollas un bot con el que dialogar es una gozada.

Lo que menos me gusta es que a pesar de que cubre ruby 1.9, se nota que está escrito para la 1.8 y luego actualizado.
En definitiva un buen primer libro para quien ya sepa programar y quiera aprender como ruby puede solucionar alguna de sus necesidades

Libros de ruby para principiantes

Tras mi rápida visita a Ruby a través del Mr Neighborly’s humble little ruby book he estado buscando otros libros para principiantes que me dieran una visión más amplia del lenguaje. Recopilo algunos de los libros que se suelen recomendar con mis propias impresiones sobre lo que he leído de ellos. No he leído ninguna así que puedo equivocarme en las apreciaciones, si no estás de acuerdo deja un comentario.

Beginning Ruby: From Novice to Professional, Second Edition

.
Está reconocido como uno de los mejores libros para novatos, avanza desde las cosas más sencillas hasta cubrir hasta iniciarte en temás más complejos como ruby on rails o testing. Combina bastantes ejemplos pequeños de código con algunos más grandes.

The Ruby Programming Language

.
Considerado más bien de nivel intermedio, busca transmitir las interioridades del lenguaje, aunque se suele considerar como uno de los mejores libros para aprender. Uno de los autores del libro es Yukihiro Matsumoto el creador de Ruby.

  • Versión de Ruby empleada: 1.8 y 1.9
  • Páginas: 448
  • Año de la última edición: 2008

Programming Ruby: The Pragmatic Programmer’s Guide

Fue el primer libro en inglés publicado sobre Ruby y es probablemente el libro más referenciado. Pero se ve que también tiene unos cuantos detractores. Hay una cuarta edición del libro publicado por ahora como borrador que cubre la versión 1.9 y la 2.0. Para ruby 1.8 se puede comprar la segunda edición.

La primera edición del libro sobre ruby 1.6, de 2001 se puede consultar online en ruby-doc y en rubycentral

  • Versión de Ruby empleada:1.9 y 2.0
  • Páginas: 1000
  • Año de la última edición: 2013 (en borrador)

The Well-Grounded Rubyist

Entre nivel inicial e intermedio, parece pensado pensado para quien tiene cierta idea y quiere conocer las particularidades del lenguaje con más profundidad. Muestra un montón de pros y contras del lenguaje y sus idioms pero no llega a desarrollar un proyecto de código concreto. Es otro de los libros más mencionados.

  • Versión de Ruby empleada: 1.9
  • Páginas: 487
  • Año de la última edición: 2009


Conclusiones

Lo que yo estoy buscando es un libro fácil de leer y que tenga algún ejemplo realista de código y no pequeños snippets, por ello me he decidido darle una oportunidad al Beggining Ruby. Trataré de contar que tal está cuando lo acabé.

Referencias

Otros libros

Sobre Ruby también hay bastantes libros gratuítos:

y si lo que buscas es algún libro más avanzado, estos son los que suelen recomendar:

Libro: Mr Neighborly’s humble little ruby book

Estos días he estado leyendo el libro sobre ruby Mr Neighborly’s humble little ruby book. Aprovecho para hacer una pequeña reseña.

La razón de escoger este, es que es la primera referencia que aparece en la guía de inicio rápido de ruby on rails, y no quería invertir tiempo en buscar otra referencia. El libro se puede consultar de manera gratuita en html y pdf, aunque tiene una sección de donaciones. Está escrito en 2006 y usa ruby 1.8.5 con lo que algunas cosas pueden estar un poco desactualizadas. El pdf tiene 147 páginas pero de texto efectivo andará por las 130. Si te pasa como a mi, que algunos capítulos no te interesan mucho, se puede leer en unas 6 u 8 horas. El libro tiene un estilo desenfadado, con (malos) guiños cómicos al lector de tanto en tanto.

Entra de forma bastante rápida y práctica en temas de interés, sin perder demasiado tiempo en introducciones o aspectos muy básicos de oop o programación, habituales en este tipo de tutoriales. Desde luego es insuficiente para alguien sin experiencia previa, pero si conoces algún otro lenguaje dinámico como python, enseguida te ayuda a ver las mayores diferencias. De hecho a menudo hace comparaciones con otros lenguajes.

En el capítulo 4 hay una sección entera dedicada a la API de Windows, que para mi no tenía mayor interés, y otra sobre threads, que por ahora me llega con ojear.

El capítulo 5 está dedicado a lo que podríamos llamar networking (sockets, http, ftp, web services) y algo de base de datos. Si lo que buscas es conocimientos básicos de ruby para luego aprender rails, se puede saltar. Es mejor coger estos conceptos directamente a través de rails.

En el último capítulo habla un poco de testing lo cual está muy bien, porque tampoco es algo muy habitual.

Los dos anexos tampoco son de especial interés, y algunos de los enlaces que aparecen en ellos no funcionan.

En definitiva:

  • Se lee relativamente rápido
  • Si vienes de python te permite entender las mayores diferencias del lenguaje sin mucho problema
  • Seguramente hay cosas mejores por ahí

Primeros pasos para configurar git

Git es el sistema de control de versiones (SCV) que se está imponiendo en el mundo del software libre. Todo programador que se precie debe aprender a usar un SCV y dado que git puede operar también sobre repositorios svn te recomiendo encarecidamente que lo pruebes. Una de las ventajas de git es que es increíblemente configurable. En este artículo encontraras como realizar esa primera configuración para que sea más cómodo trabajar con git.

La configuración global de git se guarda en el home del usuario en archivo llamado .gitconfig. Además dentro de cada repositorio existe un archivo config dentro del directorio .git donde podemos usar unas configuraciones distintas a las globales o añadir parámetros nuevos. La configuración que deseemos la podemos escribir directamente en esos archivos o usar el comando git config.

Indicamos a git quien somos

git config --global user.name "Francisco Puga"
git config --global user.email "fran.puga@gmail.com"

Esto generará en el fichero .gitconfig dos nuevas líneas como las que siguen:

[user]
email = fran.puga@gmail.com
name = Francisco Puga

Si quisiéramos configurar nuestro correo electrónico para un repositorio concreto ejecutaríamos git config sin la opción de –global dentro del directorio que contiene el repositorio.

Colorear la salida

A continuación añadiremos unas líneas al fichero de configuración global (o mediante ordenes como git config –global color.ui auto) para que nos coloree la salida por pantalla

[color]
ui = auto
diff = auto
status = auto
branch = auto

Con añadir esas líneas empezaríamos a usar los colores por defecto pero estos son personalizables como se puede ver en estos enlaces.

Si tras activar los colores ves algo de basura en la salida añade a ~.bashrc la línea:
LESS=-R

Ignorar ciertos ficheros

Cuando trabajamos en un proyecto puede haber ciertos directorios, ficheros resultantes de la compilación, … que queremos que git no indexe y no nos aparezcan al hacer un estatus. Para ignorar ciertos ficheros tenemos varios métodos:

Si lo que queremos es una configuración global para todos nuestros repositorios añadiremos en el .gitconfig la directiva excludesfile con la ruta completa a un archivo de texto donde definiremos las rutas a ignorar. Por ejemplo en mi caso:

[core]
excludesfile = "/home/fpuga/.gitignore"

Y el contenido de ~.gitignore es

*.[oa]
*.lo
*.la
*.gmo
semantic.cache
*~
*.pyc

Si lo que queremos es definir un patrón de exclusión para un repositorio concreto lo haremos en el fichero .git/info/exclude.

La tercera opción es crear un fichero .gitignore dentro algún directorio de nuestro repositorios. Este fichero debería usarse no para las configuraciones personales si no para las de todo el grupo de trabajo. Es decir .gitignore es un fichero que podría subirse al repositorio de modo que todo el equipo de desarrollo comparta esa configuración. La particularidad de .gitignore es que no tiene que colocarse en la raíz del repositorio si no que puede colocarse en algún subdirectorio, así, si en el mismo repositorio tenemos varios proyectos, cada uno en un directorio podemos aplicar configuraciones distintas a cada proyecto.

Para teclear menos

Los comando de git suelen ser nombres bastante largos y en algunos hay que incluir ademas varios parámetros. Para que tengamos que teclear menos git permite configurar alias. La sección alias de mi .gitconfig es la siguiente:

[alias]
unstage = reset HEAD
st = status
rma = ls-files --deleted | xargs git rm
co = checkout
com = checkout master

5.- Programas por defecto que se usan. Se puede configurar el programa que se empleará para editar el mensaje de commit (por ejemplo emacs en lugar de vi) y el paginador que se usa para ver el log (por ejemplo most en lugar de less)

Si bien en el caso del editor es más lógico configurar la variable de entorno global EDITOR=emacs en nuestro .bash_profile, también podemos configurarlo en exlusiva para git con algo como esto

[core]
editor=emacs
pager=moss

Evitar meter las claves

Si a los repositorios git que tenemos se accede mediante ssh, cosa bastante habitual, tendremos que teclear nuestra contraseña cada vez que bajemos o subamos algo al repo. Para evitarlo podemos copiar nuestra clave pública al repositorio remoto. Haciendo esto, cuando queramos trabajar contra el repo, este automáticamente se encargará que nuestra clave privada se corresponde a la clave pública que hemos subido y nos dará acceso.

El proceso es tan sencillo como, crear una nueva clave si todavía no lo hemos hecho:

ssh-keygen -b 4096 -t rsa

Si usamos una passphrase nos la preguntarán sólo la primera vez de la sesión que la clave sea usada. Se trata de una contraseña para permitir al sistema acceder a nuestra clave privada, no tiene nada que ver con el servidor remoto.

Una vez tengamos nuestra clave ssh, debemos copiarla al servidor, para ello existe un comando especial que hace todo por nosotros

ssh-copy-id @servidor