Mostrando entradas con la etiqueta libros. Mostrar todas las entradas
Mostrando entradas con la etiqueta libros. Mostrar todas las entradas

25 abril 2026

Análisis del libro "Unity 6 Editor Tools Essentials - Vol.1" de Harrison Ferrone

La editorial Jettelly es muy joven, pero está sacando cosas muy interesantes. Empezaron con libros sobre shading en Unity y Godot, y poco a poco han ido ampliando el espectro de temas. La espera hasta que finalmente sacaron este libro se hizo larga. Aunque ofrecen comprarlo anticipadamente con descuento, mientras se van completando los capítulos, no tengo la paciencia suficiente para leer los libros a trozos. Por eso, aunque pierda el descuento, prefiero esperar a que los terminen. En este caso, tenía muchas ganas porque en mis proyectos me he encontrado en innumerables ocasiones con la necesidad de desarrollar inspectores personalizados para facilitarme la edición de mis componentes. Con el tiempo, he ido aprendiendo a hacerlo pero la documentación de Unity no es la más clara del mundo al respecto, y el cambio tecnológico a UI Toolkit no ha ayudado a clarificar las cosas. Aun así, tenía muchas dudas de si estaba haciendo las cosas de manera correcta y, en todo caso, del motivo de tener que hacerlas así.

Afortunadamente, este libro me ha aclarado muchas de las dudas que tenía. Sigue una estructura incremental, empezando por las personalizaciones de editor más sencillas, los Property Drawers y los Decorator Drawers, para luego ir avanzando en complejidad mientras se apoya en los conceptos anteriores. El proceso es tan gradual y claro que no cuesta entender los nuevos conceptos que va explicando. Es cierto, que yo ya tenía cierto conocimiento previo, de mis cacharreos anteriores con el UI Toolkit, pero eso me ha servido para ver que el autor no ha adoptado atajos, sino que ha explicado las cosas desde el principio sin saltarse nada.

Al final, el libro recorre los siguientes temas:

  • Property Drawers y Decorator Drawers
  • Attribute Drawers
  • Inspectores personalizados.
  • Editores personalizados
  • Diseño de interfaces con el UI Builder.
  • Creación de interfaces para editar ScriptableObjects.

Los ejemplos que va planteando son muy sencillos, con una funcionalidad muy limitada, pero más que suficientes para centrarse en aprender a usar el UI Toolkit de Unity sin despistarse con otras materias. El código utilizado es también claro y está bien estructurado.

Se agradece también que el maquetado del libro es agradable a la vista y facilita la lectura del texto. No sé cómo será la versión impresa, porque lo he leído en digital, pero al menos en esta última las ilustraciones son en color, lo cual viene muy bien para distinguir los detalles de los interfaces que se están explicando.

Al final, este libro ha sido tan clarificador que quiero usarlo para darle una vuelta a los editores personalizados que ya había hecho. Estoy seguro de poder simplificarlos con lo aprendido aquí. Por otro lado, me ha servido para perderle el miedo a hacer interfaces personalizados; tarea que hacía hasta ahora cuando la necesidad no me daba otra alternativa, pero que sin duda en el futuro afrontaré con bastante más tranquilidad.

La editorial promete que sacarán un segundo volumen del libro. Espero que así sea, y pronto.

14 diciembre 2025

Análisis del libro "Game Design Workshop" de Tracy Fullerton

Portada del libroHay muchas maneras de entrar en el desarrollo de videojuegos. Todos lo hacemos desde nuestro placer por jugar, pero unos tenemos un trasfondo técnico y entramos directamente a programar con un engine, otros se meten después de hacer sus pinitos en el mundo del modding o de la creación de niveles para un juego específico y otros incluso se meten desde el mundo de los juegos físicos en tablero. 

Este libro es para todos ellos porque parte del concepto más abstracto de lo que llamamos juego y, si bien lo acaba concretando en un videojuego, se centra en el proceso creativo de generar ideas, encontrar las más prometedoras, probarlas con un prototipo que no tiene por qué ser como su forma final, iniciar un proceso iterativo de refinado hasta dar con algo genuinamente divertido por su concepto en sí (y no por su implementación) y, sólo entonces, empezar su desarrollo. Y es que el libro no empieza a tratar lo que conocemos por desarrollo hasta su tercer tercio, e incluso entonces no trata la parte técnica del desarrollo, en este libro no se ve ni una línea de código, sino su parte de planificación y gestión de la labor de un grupos de personas.

El libro adopta el punto de vista del diseñador de videojuegos. Si bien es un rol muy específico dentro de un grupo de desarrollo de videojuegos, se trata del que tiene un papel más transversal, como el libro se encarga de explicar, y por tanto cuenta con más visibilidad de todo el proceso, de ahí su importancia.

Los dos primeros tercios del libro se encargan de explicar el rol del diseñador de videojuegos; qué entendemos por juego; cuales son sus elementos fundamentales; qué elementos los enriquecen para darles el carácter que queremos; cuales son las dinámicas de juego más habituales según ese carácter; cómo podemos mantener el interés de los jugadores conforme pasa el tiempo; y cómo podemos mantener el juego equilibrado para evitar la frustración del jugador o, peor, su aburrimiento. Luego pasa a cómo filtrar y refinar las ideas de juegos que tengamos, dándole muchísima importancia (y capítulos) al proceso de prototipado y prueba de esos prototipos con jugadores reales (al margen del diseñador). Prueba del enfoque eminentemente "meta" del libro es la insistencia del libro en que los prototipos probados empiecen siendo físicos, en papel y cartón incluso, desde mucho antes de hacer el primer prototipo digital. Ese enfoque de evitar los prototipos digitales, hasta muy avanzado el proceso, puede resultar chocante para los que disfrutamos escribiendo líneas de código, pero el autor se encarga de razonar dicho enfoque de una manera muy convincente y realmente refrescante.

El último tercio es el que trata el desarrollo propiamente dicho, pero con un enfoque "alejado del teclado". Aquí, el libro trata de ponerte en la piel de un gestor de equipo que tiene que coordinar a multiples especialistas para dar forma a un juego que se pueda vender. Todo el libro tiene un enfoque muy realista, pero aquí es donde más se nota. El autor hace un esfuerzo notable en transmitirte el día a día de un estudio de desarrollo de videojuegos, tanto en sus labores internas cotidianas de creación del juego, como en sus interacciones con actores externos clave para su prueba, financiación y distribución, como son los testers o las casas publicadoras (publishers). Para ello, te explica cómo estructurar los equipos de desarrollo, qué roles son los habituales y cómo se puede relacionar entre sí de una manera eficiente y sana. Luego te explica cómo pueden ayudar las metodologías ágiles a humanizar el desarrollo y mejorar su producto. Me ha gustado mucho cómo te explica el funcionamiento del mercado del videojuego y te mentaliza sobre cómo aproximarte a una publicadora para que esta elija tu juego para financiarlo. Llega incluso a hablar sobre cómo suelen ser los contratos típicos entre publicadoras y equipos de desarrollo, para que entiendas cómo funciona el sistema de pago por hitos durante el desarrollo, y luego el posterior de royalties tras la publicación del juego. Es un interesantísimo baño de realidad, que sirve para desmitificar el mundo del desarrollo del videojuego, pero al mismo tiempo da una medida del enorme esfuerzo que hay detrás de un juego que consigue venderse.

Todo lo anterior ya tiene un valor enorme, pero además el libro está aderezado con los testimonios de muchos diseñadores de juegos. Te encontrarás con que más de uno habrá hecho juegos que hayas disfrutado. En esos testimonios, cada uno de ellos te cuenta cómo se introdujo en el mundillo del diseño y desarrollos de videojuegos, que es lo que les atrae de él y cual es el proceso creativo que siguen a la hora de darle forma a un juego. Leerlos, humaniza el papel del diseñador, pone rostro a las personas que están detrás de los juegos que más has disfrutado y te permite conocer el camino vital que han seguido hasta llegar al punto de poder crear los juegos que les han hecho famosos. Muchos de esos caminos vitales no han sido fáciles. Más de uno llega al punto de recomendarte que no te metas en el mundillo si tienes vocación o pasión clara, ya que no es una profesión fácil ni que te haga rico. Pero todos ellos confirman que si realmente quieres hacer juegos, y estás dispuesto a hacer el esfuerzo y los sacrificios, se trata de una profesión que puede llenarte plenamente.

Por tanto, si no sólo te gustan los juegos, sino como se hace, este es tu libro. Es un refrescante baño de realidad, que desmitifica, humaniza y reivindica el esfuerzo creativo que hay detrás de lo que disfrutas en to PC o consola. Un  libro realmente recomendable.

23 junio 2025

Análisis del libro "Agile Game Development: Build, Play, Repeat"

Portada del libro

Las técnicas de desarrollo ágiles (Agile Development) están revolucionando la forma de crear software, permitiendo mejorar el trabajo colaborativo y la adaptación al cambio de los equipos de desarrollo, que pasan a adaptarse mucho mejor a los constantes cambios del mercado y a iniciar círculos virtuosos de mejora continua.

En lugar de planear todo el proyecto desde el principio (como en métodos tradicionales de desarrollo en cascada), las técnicas ágiles dividen el trabajo en pequeñas partes llamadas "iteraciones" o "sprints" (normalmente de 1 a 4 semanas). Al final de cada sprint, se entrega una parte funcional del producto. Esta naturaleza iterativa del trabajo busca establecer canales de comunicación constante entre el equipo de desarrollo y sus clientes, capacitar al equipo de desarrollo para responder rápidamente a los cambios en las necesidades de sus clientes, ofrecer entregas frecuentes del software desarrollado para que los clientes empiecen a obtener valor desde el principio y puedan alertar cuanto antes en caso de que el software no responda a sus expectativas. Todo esto se consigue impulsando la autoorganización del equipo de desarrollo y mejorando su motivación.

Partiendo de esos principios generales del desarrollo ágil, hay metodologías que los aterrizan a mecanismos de trabajo concretos y cotidianos. Hay tenemos, por ejemplo, a Scrum que propone los ciclos cortos, antes mencionados, y un abanico de roles y de reuniones periódicas para que todos los implicados en el proyecto (no sólo los desarrolladores) puedan conocer el estado de este e influir en su evolución. También es habitual mezclar con lo anterior las técnicas Kanban, con sus tableros con columnas, para ayudar a visualizar el flujo de trabajo y evitar cuellos de botella; o incluir también las técnicas de Extreme Programming (XP) para mejorar la calidad del código, usando prácticas como la programación en parejas y pruebas automatizadas.

El mundo del desarrollo de los videojuegos no es ajeno a todas estas técnicas. De hecho, la naturaleza extremadamente creativa de los videojuegos y lo cambiante de los gustos de sus consumidores hace muy recomendable huir del encorsetado desarrollo en cascada y acudir a las técnicas ágiles anteriores.

El libro "Agile Game Development: Build, Play, Repeat", de Clinton Keith, me ha parecido la obra ideal tanto para iniciarse como para profundizar en este tema.

Se trata de una obra muy madura, escrita por un profesional de Scrum, que antes lo fue del desarrollo, trabajando primero en desarrollos "clásicos" (para los sistemas de control de cazas estadounidenses) y luego en desarrolladoras de videojuegos de primera línea. Toda esa experiencia previa asoma constantemente con ejemplos reales realmente enriquecedores y divertidos que permiten contextualizar la teoría en la que se quedan muchas obras similares. Otros libros se limitan a explicarte en qué consiste Scrum, pero este parte primero de los problemas que suponía para la industria del videojuego el desarrollo en cascada, y los ejemplos y anécdotas que utiliza para ello son realmente entretenidos, esclarecedores y profundamente humanos (consuela saber que "en todos lados cuecen habas").

Partiendo de esas problemáticas, el autor explica con muchísimo detalle los principios del desarrollo ágil y cómo los aterriza al día a día la metodología Scrum. En los primeros capítulos (aproximadamente el primer tercio del libro), la descripción de las tareas de la metodología son similares a las que se realizan con Scrum en el desarrollo de aplicaciones más genéricas. De hecho, como yo ya había leído otros libros sobre Scrum, mi primera impresión en esos capítulos fue "pues esto del Scrum parece aplicarse exactamente igual en los videojuegos que en las aplicaciones generales". Esto no es una crítica, muy al contrario, creo que ese primer tercio es valioso para los que quieran iniciarse en Scrum ya que los ejemplos que se van poniendo son del mundo de los videojuegos, muy visuales, sencillos de entender y muy divertidos, pero al mismo tiempo perfectamente extrapolables al desarrollo general. 

Los dos tercios restantes es donde, afortunadamente, el libro se despega de otras obras más genéricas sobre Scrum y profundiza en las peculiaridades que obliga el desarrollo de videojuegos. Detalla los casos en los que la aplicación literal de Scrum no funcionaría en un grupo de desarrollo de videojuegos y qué aproximaciones ha conocido él para resolver esas problemáticas. El resultado es, no sólo un manual práctico de referencia sobre cómo dirigir un equipo desarrollador de videojuegos, sino también un testimonio de las grandezas y miserias de este segmento de mercado.

Por tanto, creo que esta obra es imprescindible para todos aquellos que quieran madurar, dando el salto desde el desarrollo en solitario por afición, al desarrollo en equipo con fines comerciales. Desarrollar no es sólo programar, sino entregar algo funcional a nuestros clientes y que estos puedan disfrutarlo. Este libro te enseñará como lograrlo. 

30 enero 2025

"Game Development Patterns with Godot 4" por Henrique Campos

Hace tanto que se desarrollan aplicaciones y videojuegos que será difícil que, cuando lo hagas tú, te encuentres con una situación que no haya resuelto otro desarrollador antes. Con el tiempo, eso ha dado lugar a un conjunto de soluciones generales consideradas como las mejores prácticas a la hora de solucionar problemas comunes. Es lo que se conoce como patrones de diseño; un conjunto de "recetas" o "plantillas" que los desarrolladores pueden seguir para estructurar su código a la hora de implementar las soluciones a determinadas problemáticas.

Es una materia que se estudia en cualquier carrera de relacionada con la programación, siendo el libro "Design Patterns, Elements of Reusable Object-Oriented Software", de Gamma, Helm, Johnson y Vlissides (el célebre Grupo de los Cuatro) el libro, ya clásico, que inició esta rama de estudio. 

Sin embargo, contados de manera académica, los patrones de diseño pueden ser arduos de entender y no siempre queda clara cual es su aplicación. Es precisamente aquí donde brilla la obra "Game Development Patterns with Godot 4" de Henrique Campos.

Campos elige con bastante acierto 9 de los 23 patrones de diseño enunciados por el Grupo de los Cuatro y los explica de una manera clara, sencilla y rica en ejemplos aplicados al desarrollo de juegos. Los patrones elegidos por Campos me parecen los más útiles y los que tienen aplicación más inmediata en cualquier juego. No he echado de menos ninguno de los otros patrones de diseño restantes porque siempre me parecieron demasiado abstractos y esotéricos.

De manera muy original, Campos plantea sus ejemplos a partir de diálogos o comunicaciones entre el diseñador de un juego ficticio y su programador. En esas comunicaciones, el diseñador demanda funcionalidades enfocadas a enriquecer aspectos concretos de un juego, mientras que el programador recibe esas demandas y las tiene que encajar con su objetivo de crear un código escalable y fácil de mantener. En cada uno de esos ejemplos, se explica un patrón de diseño concreto como la mejor solución para encajar la demanda del diseñador con el objetivo de programador.

Siguiendo ese esquema, el autor explica el patrón singleton, el del observador, la factoría, las máquinas de estados, el patrón comando, el de estrategia, los decoradores, los localizadores de servicios y las colas de eventos. Todo ello en un orden creciente de complejidad y apoyándose en lo anterior. Por el camino, explica también de manera sencilla pero efectiva principios básicos del desarrollo como los de la programación orientada a objetos o los principios SOLID.

La implementación de los ejemplos se hace en GDScript, con Godot 4. He de reconocer que al principio me acerqué al libro con desconfianza porque no creía que GDScript fuera un lenguaje lo suficientemente rico como para ilustrar estos patrones (reconozco que desarrollo en Godot C#). Sin embargo, el código de campos es muy expresivo y el GDScript es tan conciso que al final los ejemplos se leen como si fueran pseudocódigo. Al final no he echado de menos al C#, porque el código de GDScript conseguía transmitir en unas pocas líneas la idea de los ejemplos lo que los hacía muy fáciles de leer y comprender.

Por tanto, creo que es un libro muy recomendable que hace ameno y divertido una materia que suele repeler por el tratamiento excesivamente académico que ha recibido en otras obras anteriores. Si le das una oportunidad, creo que lo disfrutarás y que te ayudará considerablemente a mejorar la calidad de tu código. 

01 septiembre 2024

"Creating an RTS Game in Unity 2023" por Bruno Cicanci

Portada del libro
En todo aprendizaje hay un punto en el que sobrepasas el nivel inicial y a partir de ahí te adentras en el intermedio. Aún hay muchas cosas que ignoras, pero te encuentras con que la bibliografía existente se reduce drásticamente. Hay muchos libros para introducirte en el mundo del desarrollo de juegos, pero no tantos para el nivel medio-avanzado.

Empecé este libro porque el índice prometía tratar temas no habituales en los libros sobre Unity como, por ejemplo la creación de niveles, la creación de herramientas mediante la extensión del editor, la selección múltiple de unidades, formaciones, gestión de recursos, niebla de guerra o personalización de las compilaciones. Sin embargo, tenía mis reticencias, habida cuenta de mis experiencias pasadas con libros de PacktPub.

Afortunadamente, este libro ha demostrado estar por encima de la media respecto a otros de la misma editorial. Efectivamente, trata esos temas y más de una manera concienzuda y clara, usando un código fuente expresivo y de calidad. He percibido que el autor es un buen desarrollador y sabe lo que se hace. Gracias a ello, he aprendido unas cuantas cosas nuevas por el camino. Cosas que desconocía y que a partir de ahora enriquecerán mi manera de desarrollar en Unity. A estas alturas no es poco.

Para ilustrarlo todo, el libro desarrolla un juego de estrategia en tiempo real, a lo War of Warcraft, con perspectiva cenital. Como te puedes imaginar, es todo con recursos gratuitas y en modo maqueta, pero he de reconocer que toca muchos de las facetas que habría que tener en cuenta en un juego de esa temática.

Por poner un punto negativo, había una de las funcionalidades en la que tenía un especial interés, la niebla de guerra, y me ha decepcionado que uno de los elementos que utiliza para implementarla fuese de tipo legacy. Es imposible asegurar que un libro técnico siga actualizado pasados unos años, pero de ahí a reconocer tú mismo, en tu libro, que vas a utilizar una funcionalidad legacy... me parece muy feo.Todo lo que se explica en un libro técnico debería estar vigente en el momento de su elaboración.

Salvando ese pequeño detalle, lo cierto es que es un libro recomendable y del que se puede aprender bastante. Muy recomendado.

08 mayo 2024

"Programming Game AI by Example" por Mat Buckland

No es fácil encontrar buenos libros sobre inteligencia artificial (IA) aplicada a juegos. La mayoría no pasan del nivel introductorio y cuando llegan a explicar el algoritmo A*, lo consideran ya material avanzado y lo dejan ahí.

En mi opinión, la gran joya en esta materia es el "AI for Games" de Ian Millington, que combina unos contenidos vastísimos con unas explicaciones claras, detalladas y realmente pertinentes para el desarrollo de juegos. Desde que lo leí no me había encontrado con otra obra que se le pudiera comparar hasta que me topé con este al que le dedicamos el artículo. No en vano, el libro de Buckland fue una de las referencias de Millington.

Es cierto que "Programming AI by Example" no alcanza en amplitud de contenidos a "AI for Games", pero sí es cierto que los que trata lo hace con gran profundidad y claridad. También hay que reconocerle que trata varios temas ausentes de la obra de Millington, como la integración de sistemas de scripting en nuestros juegos (para simplificar el diseño de los algoritmos de IA) y el capítulo sobre agentes guiados por objetivos.

El libro está lleno de buenas figuras ilustrativas que permiten seguir las explicaciones. 

A diferencia de Millington, las implementaciones no las ilustra en pseudocódigo, sino en C++; lo que para mi gusto es un punto negativo porque no se trata precisamente del lenguaje más intuitivo del mundo. También es cierto que el libro acumula ya algunos años y, cuando se publicó por primera vez, la única alternativa para crear juegos era C++. En todo caso, las explicaciones son lo suficientemente extensas y claras como para que el entendimiento pleno del código no sea imprescindible.

Me ha llamado también la atención la insistencia en mostrar diagramas de UML de las jerarquías de clases de las diferentes implementaciones. Entiendo por qué lo hace y tampoco es que sobren, pero es algo que me ha hecho sonreír por lo pasado de moda que está. Ya no se suelen ver diagramas de UML en los libros.

A pesar de todas esas señales del tiempo transcurrido desde la publicación del libro, el campo de la IA para juegos no ha avanzado tanto como para dejar desfasado su contenido. Estos siguen estando vigentes. Si acaso, se echan en falta algunas herramientas que han surgido posteriormente como los árboles de comportamiento o el aprendizaje neuronal.

Conclusión: el libro me ha parecido excelente. Recomiendo que lo leas lectura  antes del de Millington. De esa manera, se puede potenciar su utilidad como pieza introductoria para facilitar la comprensión posterior del Millington y ampliar con este lo que deja pendiente el de Buckland. Con esta aproximación creo que cubrirás lo mejor que se ha escrito hasta el momento en el campo de la IA para juegos.

07 enero 2024

"Artificial Intelligence in Games" por Paul Roberts

El mejor libro, con diferencia, que he leído hasta ahora sobre cómo desarrollar inteligencia artificial para juegos es "AI for Games" de Ian Millington. El problema es que no hay muchos libros en el mercado que traten de manera práctica la rama de la IA orientada a videojuegos. Los que hay o son muy teóricos o de quedan en un par de tópicos sobre búsquedas de caminos y uso de máquinas de estados. Por eso, cuando encontré este libro de Paul Roberts lo leí con avidez.

Afortunadamente, tiene un enfoque práctico e introductorio. A alguien que se quisiera introducir en el mundo del AI para juegos le recomendaría que lo leyese antes del de Millington, ya que este de Roberts no llega a tanta profundidad, pero está escrito en un lenguaje más llano. Es ideal para un primer contacto con las diversas vertientes de la IA usada en juegos, para luego profundizar con el Millington.

Los temas que trata son variados e interesantes: inteligencia de movimientos (steering behaviours), análisis de terrenos con mapas de influencia, búsqueda de caminos, estructuras de decisión, lógica difura, Minimax, algoritmos genéticos y redes neuronales. A diferencia del Millington, con este de Roberts no acabarás con los conocimientos suficientes para ponerte a implementar tu propia versión, pero sí te habrás hecho una idea de los conceptos principales lo que te simplificará mucho las cosas al emprender la lectura de textos más detallados.

La versión digital de Kindle tiene algunos defectos que en algunos momentos me han dificultado el avance, principalmente que las fórmulas no están bien formateadas y han perdido la mayor parte de los operadores en la conversión a digital. Así que es muy difícil hacerse una idea de la fórmula sólo con lo que viene en ella. Por suerte, las fórmulas no son abundantes ni complejas, por lo que al final acabas averiguando lo que quieren decir, aunque tienes que darle varias vueltas. La verdad es que no entiendo por qué no ha hecho como con los diagramas, que son dibujos hechos a manos y digitalizados, pero que al menos se entienden. Si hubiera hecho lo mismo con las fórmulas no habría habido problema.

Pero más que la teoría, cuya profundidad ya he dicho que es bastante escasa, donde brilla realmente el libro es con la parte práctica. El autor ha desarrollado en Unity una serie de minijuegos para probar en ellos los conceptos del libro. Así que, después de la parte teórica de cada capítulo, hay otra parte en la que te guía, paso a paso, a modo de tutorial, para implementar esos conceptos para crear una AI que se enfrente a nosotros en el minijuego. Hay que reconocer que el autor se ha esforzado por crear unos minijuegos complejos, bien presentados y muy adecuados como plataforma de pruebas de los conceptos teóricos. Creo que esto es el principal valor del libro. Hay otros que explican mejor y más a fondo los diferentes conceptos, pero se quedan en la teoría. Tener la oportunidad de cacharrear y probar estos conceptos directamente en un juego es algo que sólo me ha ofrecido este libro por el momento.

Así que es un libro que recomiendo. Reconociendo sus limitaciones y defectos, creo que es un libro que aporta valor dentro del escueto ecosistema de libros sobre inteligencia artificial para juegos. 

24 diciembre 2023

"Godot 4 Game Development Cookbook" por Jeff Johnson

Este libro formaba parte de un paquete que sacó hace algún tiempo Humble Bundle, con libros para desarrollar juegos con Unity y con Godot.

El libro ofrece una serie de tutoriales sobre casos de uso específicos de Godot. Hay que reconocer que el índice es sugerente y cubre temas de nivel intermedios, ideales si tienes ya cierta experiencia con otros engines y acabas de terminar los tutoriales iniciales de Godot.

Hay una introducción a las funcionalidades avanzadas recién introducidas en GDScript 2.0. Se explica cómo introducir niebla volumétrica en los escenarios, sistemas de partículas decals, búsqueda de caminos, modelos deformables, tiles, emisores de sonido y se ofrece una aproximación inicial a las funcionalidades multijugador de Godot.

Ofrece también recetas sobre shaders, pero son tas superficiales y el tema tan extenso que esas recetas me han parecido prácticamente inútiles.

Las diferentes recetas siguen una estructura común. Primero se ofrece una descripción muy resumida de lo que se quiere conseguir con la receta. Luego hay una sección "How to do it" donde se enumeran los pasos a realizar a través del editor de Godot. Por últimos hay una sección de "How it works..." que se supone que debería explicar con profundidad los pasos que se han realizado en la sección anterior.

La selección de temáticas para las recetas me parece muy adecuada y sugerente. La descripción de las tareas a realizar es clara y no he tenido problemas para seguirlas. Aunque en alguna faltaba alguna cosilla para que funcionase y he tenido que completarla de mi cosecha. En general, he disfrutado las siguientes prácticas porque me han permitido descubrir lo lejos que puede llegar Godot. 

Sin embargo, donde el libro hace aguas es en las secciones "How it works...". Vale que la sección "How to do it" se limite a enumerar pasos, pero en la de "How it works" se supone que es donde debería explicar con detalle por qué se han llevado a cabo los pasos anteriores y así profundizar en las funcionalidades del engine. En vez de eso, lo que hace el autor es volver a contar las tareas realizadas, pero de manera literaria en vez de enumerada. Vamos, que la sección "How it works" no aporta absolutamente a la de "How to do it". Si más o menos has ido entendiendo los pasos de la sección "How to do it" te puedes ahorrar la de "How it works" porque no te va a aportar nada. Eso limita enormemente el valor aportado por el libro. Mi consejo, si lees este libro, es que consultes la documentación de Godot de los diferentes componentes conforme vayas avanzando por los pasos de los diferentes tutoriales. Así podrás suplir parcialmente la falta de explicaciones del autor.

En mi opinión, se trata de un nuevo ejemplo de la nula labor editorial de Packt. Creo que el problema del libro no es que su autor desconozca el tema sino de que la editorial no repasó el libro y no le alertó de que estaba enfocando mal las secciones "How it works". Packt sigue siendo una máquina de sacar libros donde prima sobre todo la cantidad sobre la calidad.

No me arrepiento de haber leído este libro. Realmente me ha permitido cacharrear con Godot y convencerme de que es un engine viable para hacer juegos de todo tipo. Tampoco es que haya muchos libros sobre Godot 4 en el mercado. La mayoría son de hecho los de Packt, así que hay poca alternativa. Lo que pasa es que no me parece que el libro valga su precio completo. Rebajado, o incluido en un paquete como los de Humble Bundle, puede ser, pero no creo que merezca la pena el precio habitual que tiene. Antes que eso hay múltiples tutoriales en Youtube mucho mejores y más asequibles.  

11 noviembre 2023

"Godot 4 Game Development Projects" por Chris Bradfield

Ya he dicho en alguna ocasión que no me gustan los libros de la editorial Packt, Siempre me ha parecido que priman la cantidad sobre la calidad. La culpa no suele ser de los autores, que en Packt los hay malos y también buenos, sino de que la editorial no hace su trabajo de pulir los contenidos para que cumplan un estándar mínimo de calidad antes de llegar al público. Por eso, hay demasiados libros de Packt que desprenden un tufillo a tutorial recién copia-pegado de Internet, con incoherencias, repeticiones y fallos de contenido y formato. La mayor parte de las veces, si la editorial hubiera ejercido de tal y hubiese guiado mínimamente a los autores, el resultado podría haber sido mucho más decente. Hay cosas que puedes admitirle a un libro autoeditado, pero cuando hay detrás una editorial que te pone los libros al mismo precio que un O'Reilly creo que el nivel de exigencia tiene que ser mayor. En la parte positiva de la balanza, y por lo que creo que aún salvan el negocio, está que esa enorme cantidad de publicaciones que sacan abarca temas muy novedosos y variados que otras editoriales tardarán al menos un año y medio más en cubrir y con mucha menor cantidad de libros. No es raro que busques un libro sobre un tema candente y que la única editorial con libros sobre el tema sea Packt. Otra cosa es su novel de calidad, como ya he dicho. Por eso suelo evitar los libros de Packt, a no ser que me encuentre un pack de sus libros a buen precio. En este caso, el libro que le da nombre a este artículo estaba incluido en un pack de libros de desarrollo de videojuegos que se lanzó a través de Humble Bundle. Por casi 20€ me compre un par de decenas de libros de Packt, así que por ese preció sí que me mereció la pena.

Sobre la base de lo anterior, este libro tiene a su favor que hay muy pocas obras que hablen sobre el desarrollo de juegos con Godot y menos sobre su recién estrenada versión 4, la cual incorpora suficientes novedades como para hacerla muy diferente de las versiones anteriores.

Se estructura en una serie de proyectos que hacen de tutoriales. Hay tres proyectos 2D, de dificultad creciente, y dos proyectos 3D. Esa estructura hace que el libro sea práctico y entretenido, pero no profundiza en las particularidades de diseño y enfoque que hacen tan especiales a Godot frente a, por ejemplo, Unreal o Unity. Aún así, si los tutoriales de la documentación oficial de Godot te han sabido a poco, este libro puede ser una buena continuación de ellos ya que tanto por forma como por contenido se parece mucho a ellos, pero los lleva un par de pasos más allá. De hecho, me gustó mucho el último capítulo en el que habla sobre cómo crear niveles proceduralmente en tiempo real.

Los tutoriales son detallados y claros de seguir. El código que utiliza es GDScript y diría que es un código limpio y bien estructurado. Creo que en general, la manera de trabajar con Godot que se ve en el libro no está lejos de las buenas prácticas oficiales. Así que es una buena obra introductoria a Godot.

En el plano negativo está el típico descuido de un libro de Packt. Al menos en la versión digital, que es la que yo he leído, las primeras líneas de los listados de código están cortadas a la izquierda. Es como si hubieran cortado todo lo que estuviera a la izquierda del primer o segundo nivel de indentado. Eso hace que el cuerpo de muchas funciones se salve pero que tengas que adivinar el nombre de la función y de las variables globales a partir del fragmento incompleto que te sale. A mi me ha resultado muy molesto. No tengo ni idea de cómo ha podido pasar el libro el filtro de calidad así, suponiendo que en Packt lo hagan.

¿Me ha merecido la pena? Teniendo en cuenta que compré el libro en un pack y por tanto me salió a un precio irrisorio, que no hay muchos libros de Godot (y menos de Godot 4) y de que ya me había terminado los tutoriales oficiales de Godot, pues sí que me mereció la pena. Tener todos los tutoriales recogidos en un libro es muy cómodo, aunque puedes encontrar otros igual de buenos a poco que indagues por internet. Si me lo hubiese comprado por el precio al que está en Amazon, o en el misma Packt, ya no sé si me habría merecido la pena.

30 octubre 2023

Robust Python: Write Clean and Maintainable Code by Patrick Viafore


Cuando no te ganas la vida con la programación sino que simplemente eres un aficionado al que le gusta programar, lo difícil no es aprender múltiples lenguajes sino mantenerlos vivos sin que se te olviden. Cuando sólo puedes dedicar un rato al día, te centras en un proyecto con un determinado lenguaje y el resto de ellos se van oxidando. Es cierto que hay libros con los que repasar, pero con el tiempo superas el nivel básico y ya no te vale cualquier libro para mantener fresco un lenguaje. Yo me temo que he llegado a ese punto con Python y andaba un poco desesperado por encontrar un libro que realmente me aportase algo nuevo. Hasta que tuve la fortuna de adquirir este libro en un pack (bendito Humble Bundle).

"Robust Python: Write Clean and Maintainable Code" de Patrick Viafore no es un libro para novatos, ni siquiera para desarrolladores intermedios, sino más bien para desarrolladores experimentados que son los que más apreciarán las propuestas de este libro para desarrollar aplicaciones complejas que puedan ser mantenibles con el paso del tiempo.

El libro empieza explicando el sistema de tipado opcional de Python y lo lleva mucho más lejos que los tutoriales de Internet hasta un nivel de sofisticación nada habitual. ¿Sabías que puedes definir interfaces en Python? ¿sabías que puedes definir tus propios tipos? Dataclasses, Enums y otros tipos se exponen aquí con funcionalidades interesantísimas que ni se vislumbran en los textos introductorios.

Después de eso, se profundiza en algunos de los principios SOLID y en arquitecturas, como la de eventos, para cumplirlos. Todo ello, siguiendo unos ejemplos sencillos y amenos de entender.

Finalmente se trata extensamente, el ecosistema de Python para hacer pruebas automatizadas, explicando múltiples estrategias.

El libro me ha gustado mucho. Va al grano, es ameno y realmente aporta herramientas nuevas que no suelen aparecer en el resto de libros de este nivel. En resumen: una muy buena compra si lo que quieres es pulir tu Python para empezar a ser experto.

19 octubre 2023

Game AI Pro 360 - Guide to Tactics and Strategy


Hay gran cantidad de libros relativos a la Inteligencia Artificial (IA), pero la mayoría o son muy académicos, o asumen un enfoque meramente divulgativo o se centran en temas más aplicados como el machine learning y el análisis de datos. La bibliografía sobre IA enfocada a los videojuegos es muy escasa, sobre todo si la buscas en formato digital (en mi caso Kindle).

Sin embargo, uno de los grandes autores en este campo es Steve Ravin, no tanto por sus aportaciones propias sino por su labor compendiando las de otros en sus obras. Suya es la serie de libros AI Game Programming Wisdom de la que este es uno de sus últimos exponentes. Como los anteriores, cada capítulo de este libro es un artículo de un autor diferente, desarrollando un concepto relativo a la IA en videojuegos. A diferencia de los libros anteriores, que tenía artículos que cubrían áreas de lo más variopintas, en este todos los artículos se centran en la faceta del análisis y la toma de decisiones tácticas y estratégicas.

El valor principal del libro es que los autores de los distintos capítulos son profesionales especializados en este campo que realizan su labor en reputados estudios de videojuegos. Así que los problemas, matices y enfoques que proponen están respaldados por su gran experiencia. La solvencia de los autores se nota también en el aire académico que desprende cada una de sus páginas. 

Sin embargo, el principal handicap del libro es precisamente ese: la procedencia laboral de sus autores. Al venir de grandes estudios deben estar sujetos a clausulas de confidencialidad y supongo que esa es la razón por la que no entran al detalle sobre las implementaciones concretas, dado que podrían comprometer la propiedad intelectual de sus empresas. Esos autores pueden explicar los conceptos generales adoptados en sus juegos, pero no pueden desvelar el detalle de cómo los han puesto en práctica sin comprometer el core de esos juegos.

Por eso, el libro se mueve en un nivel muy conceptual en el que plantean cosas realmente muy interesantes, pero que se queda muy corto a la hora de explicar cómo lo han implementado. Los fragmentos de código brillan por su ausencia y cuando aparecen no pasan de mero pseudocódigo que en realidad no acaba de explicar por completo los conceptos planteados. Ha habido capítulos completos en los que he perdido el hilo a las pocas páginas y no he sabido completar los huecos que iban dejando los autores. En otros sí que he entendido todo lo que planteaban, pero me quedaba con las ganas de un ejemplo de implementación real.

Probablemente me falte el nivel que tienen los autores, pero mi conclusión es que desde luego no es un libro para introducirse en el género de la IA para videojuegos. Para ello, antes que este libro recomiendo el de AI for Games de Ian Millington. Este último libro, sí que va desde un nivel de iniciación a uno medio-alto y con todo lujo de detalles. Pensaba que este libro ya me dejaba preparado para otros, ya de nivel intermedio, pero se ve que no para este de Steve Ravin.

¿Lamento haberlo leído? No. Cuando he conseguido cogerle el hilo a los capítulos los he disfrutado y he sacado un par de ideas que aunque no sepa aún cómo implementarlas sí que me han resultado lo suficientemente sugerentes para intentarlo a la primer oportunidad.

Veredicto del libro: no sirve para iniciarse, pero es una lectura interesante para que te vayan sonando los conceptos que mueven la IA de los grandes videojuegos.

19 febrero 2023

Introduction to Game Design, Prototyping, and Development: From Concept to Playable Game with Unity and C#

Introduction to Game Design, Prototyping, and Development: From Concept to Playable Game with Unity and C# de Jeremy Gibson Bond es un buen libro para iniciarse en el desarrollo de juegos. A diferencia de otros que se centran en cómo desarrollar en Unity, Bond pone en práctica su experiencia como profesor universitario adoptando un enfoque global que abarca tanto conceptos teóricos como prácticos y técnicos. Es cierto que su estructura ordenada y formal huele a libro de texto, pero este es de los buenos, de los que de verdad te aportan conocimientos que no se evaporarán cuando pasen un par de años y cinco versiones del engine de turno.

La primera parte del libro se centra en aspectos teóricos empezando a un gran nivel de abstracción y bajando poco a poco al detalle. De hecho comienza describiendo lo que se entiende por un juego y cuales son los elementos y la estructura que los caracterizan. Fíjate que he dicho juego, no juego de ordenador. Tan generales son los conceptos de esta parte, que el autor anima a ponerlos en práctica en una mesa con lápiz y papel. Se nota también que Bond es un gran fan de los juegos de mesa y rol, empezando por D&D, por las numerosas referencias a ellos y a sus mecánicas. El objetivo de esta parte es que el lector sea capaz de modelar el juego en su cabeza, centrándose en elaborar las mecánicas que lo hagan atractivo de jugar. En esta parte me ha resultado especialmente sugerente la estructuración por capas de los distintos tipos de juego que hay dentro de un mismo juego: está el juego que prentendían diseñar sus creadores al fijar sus reglas, el juego que surge en la mesa según  lo juegan los jugadores y finalmente el juego que surge cuando la gente lo hace suyo y empieza a modificarlo y a hacerlo evolucionar al margen de los creadores originales (cualquier aficionado a los mods disfrutará con esta formulación teórica).

La segunda parte se zambulle en el diseño de un juego. Partiendo de los conceptos teóricos se trata de dar forma a las piezas que conformarán el juego, primero con prototipos en papel jugados por sucesivos grupos de testers. Aquí me resultó muy interesante la parte en la que te enseña las formas sutiles que tienen los juegos para guiar al jugador hacia donde quiere el diseñador. En esta parte hay sitio incluso para un breve baño de Agile y Scrum. 

Creo que estas dos primeras partes serán las que más gusten a los que ya tengan cierta experiencia con Unity.

La tercera parte se encarga de llevar los prototipos en papel a prototipos técnicos, más cercanos a la forma final del juego. Aquí es donde empieza con los conceptos básicos de Unity. Empieza desde cero, incluso desde cómo ordenar el layout de paneles del editor de Unity y luego va avanzando por la programación en C# para Unity. Los que ya sepan de C# y hayan hecho sus pinitos de Unity probablemente pasen rápido las hojas de esta parte, aunque no recomiendo saltárselas del todo porque hay algunos trucos interesantes. Yo mismo he aprendido un par de cosillas a pesar de tener ya bastante experiencia programando tanto en otros lenguajes, como en C# para Unity.

La cuarta parte se centra en desarrollar una serie de prototipos que cubren algunos de los tipos básicos de juegos. Son como minitutoriales, cubriendo cada uno de ellos un tipo diferente de juegos. Los que estén empezando con Unity encontrarán aquí una excelente manera de soltarse aprendiendo además buenas prácticas.

Se trata por tanto de un libro muy completo, bien estructurado y tremendamente didáctico, con un montón de enlaces y referencias a otros libros con los que continuar al terminar este. Lo recomiendo tanto a los que ya sepan de Unity y quieran empezar con el diseño de juegos, como a aquellos que estén empezando y quieran coger confianza con Unity empezando desde cero. 


20 abril 2020

"Bitcoin for the befuddled" por Conrad Barsky y Chris Wilmer

Bitcoin es uno de los temas más candentes hoy en día. Ha pasado de una rareza técnica a un salto evolutivo para el mundo de las finanzas y un tema de discusión recurrente para los políticos. Pero es difícil entender en qué consiste Bitcoin. Sus conceptos son tan nuevos y sus fundamentos tan matemáticos y técnicos que la media de la gente lo pasa mal intentando entender cómo funciona Bitcoin.

El principal punto a favor de este libro es que intenta hacer honor a su título. Se puede leer este libro sin ningún tipo de bagaje técnico, ya que explica las cosas para gente normal usando ejemplos y conceptos cotidianos. Incluso usando comics y esquemas desenfadados el autor consigue hacer fáciles conceptos realmente complejos que otros libros intentarían explicar a base de fórmulas matemáticas.

Es cierto que sólo leyendo este libro no vas a desarrollar la próxima app basada en Bitcoin ni a convertirse en el próximo multimillonario digital, pero al menos perderás el miedo al Bitcoin y comenzarás a entender de qué va todo esto y cómo puede cambiar tu vida en el futuro. Es una lectura muy ligera que se puede terminar en un fin de semana.

Por eso, este libro está bastante recomendado para todos aquellos que quieran aprender rapidamente lo más básico de Bitcoin, tanto si lo único que se quiere es entender lo que se dice en los medios sobre las cryptodivisas como si se plantea como un primer paso de otros muchos para profundizar en este tema.

28 marzo 2016

The Hacker's Playbook

Cuando leo libros técnicos me suelo encontrar tres clases de libros: aquellos que no te aportan nada nuevo, aquellos que son una mina de conocimientos y aquellos que aunque sólo arañan la superficie de los temas te aportan enlaces y referencias para seguir investigando. Creo que The Hacker's Playbook: Practical Guide to Penetration Testing"de Peter Kim se encuadra en la tercera categoría: su sola lectura no te convierte en un maestro del pentesting pero el estudio de todos los enlaces, referencias y recursos apuntados en el libro si que pueden ser un paso adelante muy grande para obtener dicha maestría.

El libro trata muchos temas aunque no profundamente: escaneos (web y de red), exploiting, elevación de privilegios, ataques de red (en redes cableadas e inalámbricas), ingeniería social, evasión de antivirus, password cracking, etc. Me parece que como texto introductorio está bien y me parece buena idea que se enfoque principalmente al uso de herramientas u "open source" o que al menos cuenten con una versión gratuita, sin embargo donde este libro sobresale es al enumerar recursos de la web donde profundizar en las materias tratadas. Hay una gran riqueza de enlaces y referencias a lo largo del libro, apuntando a cursos, tutoriales y, siendo esto muy importante, sitios donde practicar pentesting sin acabar con los GEOS llamando a tu puerta.

El texto está bien escrito y las explicaciones son concisas y fáciles de entender. El contenido está hábilmente estructurado y cubre casi todas las áreas del pentesting.

Teniendo en cuenta que no es un libro caro, su compra merece la pena y lo recomiendo para lectores con niveles introductorios y medios que quieran un rápido repaso del estado del arte del pentesting actual.

12 enero 2016

Functional Python Programming

Siempre quise saber de qué iba eso de la programación funcional, pero no me apetecía aprender un nuevo lenguaje para comprenderlo, al menos no por ahora. Por eso, cuando encontré un libro que trataba el tema desde el punto de vista de Python (Functional Python Programming de Steven Lott), no dudé en leérmelo.

Tras su lectura me di cuenta de que he estado usando un montón de principios de programación funcional sin ni siquiera saberlo: utilizar funciones cortas, no alterar estados externos desde el interior de las funciones, usar iteradores donde fuera posible, etc. Eso no significa que no aprendiese nada, por ejemplo me gustó bastante la parte que describía las posibilidades de la librería itertools, la cual no había utilizado hasta el momento.

También es cierto que incluye algunos consejos que no voy a seguir, como el de encadenar funciones. Al libro le gusta mucho el encadenamiento de funcione (pasar la llamada a una función como parámetro a otra), pero al hacerlo se crean líneas de código extremadamente largas y difíciles de leer que me parecen poco "pythonicas". Además, al libro le gusta mucho la recursión y ese es un concepto con el que no me siento cómodo y tampoco es que entendiese muy bien los ejemplos que aparecían en el libro sobre tail-optimization.

Con todo el libro es extenso, sistemático e incluye un montón de ejemplos por lo que creo que merece la pena leerlo aunque sea para quedarse con conceptos sueltos útiles para mejorar globalmente nuestro estilo de programación.

12 julio 2015

Effective Python

Cuando aprendes un lenguaje hay un punto en el que los libros para novatos no te aportan ya nada nuevo, es un punto en el que puedes desarrollar casi cualquier cosa con lo que ya sabes pero ese nivel de conocimiento ya no es suficiente porque quieres ser dominar el lenguaje y mejorar tus habilidades un poquito más cada día.

"Effective Python" es la clase de libro que leer cuando llegas a ese punto. No es un libro para empezar en Python sino para desarrolladores que quieran ser realmente "pythonicos".

Escrito por un ingeniero de Google, cubre muchas áreas del desarrollo como funciones, clases, metaclases, concurrencia, colaboration, o puesta en producción del código, todo ello a partir de muchas recetas y ejemplos. Se puede leer este libro secuencialmente o no. Tiene muchas semejanzas con libros como "Python Cookbook".  Algunos temas pueden ser conocidos, otros serán interesantes y nuevos. Al final este libro se convertirá en una referencia cuando nos topemos con situaciones como las descritas en este libro.

En mi opinión, el dinero invertido para obtener este libro está bien invertido. Me sirvió para conocer muchos ejemplos y trucos sobre temas y posibilidades realmente útiles para mis desarrollos y muchos meses después de leerlo sigo volviendo a este libro en busca de referencias.

14 marzo 2015

Clean Code

A lo largo de la vida no hay muchos libros que cambien realmente tu manera de pensar y hacer las cosas. En mi caso puedo contar con los dedos de una mano los libros de ese tipo que me he encontrado: "Computer Networking: a Top Down Approach" de Kurose y Ross, "Security Engineering: A Guide to Building Dependable Distributed systems" de Ross J. Anderson, y el libro del que trata este artículo "Clean Code: a Handbook of agile Software Craftmanship" de Robert C. Martin.

Supe de este libro en una de las conferencias de la PyConEs de 2013. En aquella conferencia hablaron de como hacer código sostenible en el tiempo. El tema me interesaba porque estaba preocupado por un fenómeno que todo programados se encuentra tarde o temprano: incluso con Python, cuando tu código crece se hace más difícil de mantener. Había programado aplicaciones que me resultaban difíciles de entender cuando tenía que revisarlas apenas unos meses después. Muchos años antes me había pasado a Python para evitar ese mismo problema en Java y Perl. En la conferencia aseguraban que los principios explicados en el libro ayudaban a prevenir ese problema. Esa es la razón por la que lo leí y he de admitir que tenían razón.

La lectura de este libro puede ser chocante. Hay tantas prácticas que sumimos correctas pero que sin embargo está terriblemente equivocadas que lo normal es leer por primera vez ciertos pasajes con una mezcla de sorpresa e incredulidad. Cosas como afirmar que los comentarios en el código son un reconocimiento de tu fracaso para hacer comprensible tu código suenan extrañas la primera vez que se leen pero luego se acaba comprendiendo que el autor está en lo cierto.

Los ejemplos del libro no están en Python sino en Java, sin embargo no creo que ningún programador de Python tenga problema alguno en comprender los conceptos que allí se explican. Algunos de los conceptos son un poco "javeros" pero muchos otros son útiles para desarrolladores en Python. Algunos de los conceptos principales son:

  • Los nombres de tus funciones deberían explicar claramente lo que hace la función. No se permiten abreviaturas en dichos nombres.
  • Una función sólo debería hacer una única cosa. Una función sólo debería tener un propósito. Por supuesto, una función puede tener muchos pasos pero el conjunto de ellos debería estar enfocado a conseguir el objetivo de la función y cada paso debería implementarse en su propia función. Una consecuencia de este enfoque es que es más fácil desarrollar tests unitarios para este tipo de funciones.
  • Las funciones deberían ser cortas: 2 líneas es estupendo, 5 está bien, 10 regular y 15 es muy pobre.
  • Los comentarios de código debería utilizarse únicamente para explicar decisiones de diseño pero nunca para explicar lo que hace el código.
  • No se deben mezclar niveles de abstracción en la misma función, lo que significa que no se debe llamar directamente a la API de Python mientras que otros pasos de la función llaman a tus propias funciones. En vez de eso es mejor meter tu llamada a la API dentro de una de tus propias funciones.
  • Ordena el código de manera que se pueda leer el conjunto de las implementaciones desde arriba en sentido descendente.
  • Hay que reducir todo lo pasible la cantidad de argumentos que se pasan a las funciones. Funciones con 1 argumento están bien, con 2 regular y con 3 probablemente deberías darle otra vuelta.
  • No te repitas (DRY, Don't Repeat Yourself, aunque este concepto ya lo conocía antes de leer este libro).
  • Las clases deberían ser pequeñas.
  • Las clases sólo deberían tener una razón para cambiar (Principio de Responsabilidad Única). En mi opinión este principio es una extensión lógica del de "un único propósito" de las funciones.
  • Idealmente, los atributos de las clases deberían ser utilizados por todos los métodos de la clase. Si nos encontramos atributos que sólo utilicen un pequeño subconjunto de métodos, deberíamos preguntarnos si esos atributos y esos métodos podrían ir en una clase separada.
  • Las clases deberían estar abiertas a extensiones pero cerradas para modificaciones. Eso significa que deberíamos incorporar nuevas funcionalidades heredando las clases existentes no modificándolas. De esa manera se reduce el riesgo de romper las programas cuando incluimos nuevas funcionalidades.
  • Haz TDD o condénate a ti mismo al infierno de meter modificaciones en tu código con la incertidumbre de si no romperás algo sin darte cuenta.
Hay muchos más conceptos, todos completamente explicados con ejemplos, pero estos que he explicado son los que tengo en la cabeza cuando escribo código.

Para probar si los principios de este libro estaban en lo cierto, desarrollé una aplicación llamada Geolocate, siguiendo estos conceptos y los de TDD. Al principio fue difícil cambiar mis hábitos a la horas de escribir código, pero conforme mi código fue creciendo me fui dando cuenta resultaba mucho más fácil encontrar errores y corregirlos de lo que me había resultado en proyectos anteriores. Además, cuando mi aplicación adquirió un tamaño respetable, la dejé aparte durante cinco meses para ver cómo de fácil resultaba retomar el desarrollo después de que pasase tanto tiempo. Fue asombroso. Aunque en mis anteriores proyectos habría necesitado varios días para comprender del todo un código tan grande, esta vez comprendí el funcionamiento del código en apenas una hora.

Mi conclusión es que este libro es imprescindible, dado que te permite mejorar dramáticamente la calidad de tu código y tu paz mental a la hora de mantenerlo después.

29 julio 2012

Programming in Python 3: A Complete Introduction to the Python Language

 Python es un lenguaje tremendamente sencillo de aprender. Con experiencia en otro lenguaje de programación de alto nivel es posible aprender sus bases en apenas una tarde y hacer proyectos medianamente complejos en no más de un fin de semana.

Sin embargo esta sencillez es un arma de doble filo. Es fácil pensar quedarse en lo rudimentos y no avanzar más allá contentándose con utilizarlo como un mero lenguaje de script. Pero lo cierto es que python es un lenguaje completo multiparadigma Turing-completo que permite hacer cualquier cosa que haga otro lenguaje de programación. Todo ello con una claridez, sencillez, eficacia y rapidez de desarrollo de la que carecen la mayor parte de los otros lenguajes.

El título del libro hace referencia a Python 3, la nueva generación de este lenguaje que ha supuesto un salto evolutivo de tal nivel que ha sido imposible asegurar la retrocompatibilidad completa con las anteriores versiones. Sin embargo, lo cierto es que el código expuesto en el libro supone una verdadera guía de estilo que, de seguirse al desarrollar código en Python 2.7, debería asegurar la fácil compatibilidad de dicho código a la hora de portarlo a Python 3. El contenido es muy completo, abarca desde los rudimentos (flujos de control, tratamiento de cadenas, acceso a ficheros) hasta técnicas avanzadas (decoradores, gestores de contexto, functores, clases abstractas, metaclases y un gratificante etcétera) que descubrirán al lector nuevos y poderosos recursos de programación para hacer que traducir los conceptos de nuestra mente en codigo fuente sea prácticamente inmediato. Todos los conceptos están ilustrados con código limpio, bien comentado y perfectamente entendible.

En resumen, un gran libro tanto para principiantes que quieran empezar desde cero como para programadores que quieran profundizar en este lenguaje y sacarle todo el jugo. Todo ello sin contar con que una vez finalizado, el libro supone una referencia valiosísima en la estanteria de cualquier programador.

30 abril 2012

Practical Lock Picking

La ingeniería de seguridad abarca muchas disciplinas. Una de las principales es la de la seguridad física y dentro de la misma uno de los pilares básicos desde hace siglos han sido las cerraduras. Conocer como funcionan y los métodos y material usado para forzarlas debería formar parte de los conocimientos de cualquier ingeniero de seguridad. Demasiadas veces, la tarjeta de acceso al mega CPD se guarda en un cajón de oficina con una simple cerradura waffer.

Practical Lock Picking está escrito por un cerrajero profesional de una manera clara, sencilla y directa. Se centra en dos tipos principales de cerraduras: la de pines y la waffer. En la práctica esto cubre el 90% de las puertas y cajones hoy día. El método que sigue el autor es empezar describiendo el proceso de fabricación de cada una de las cerraduras, para enumerar los defectos habituales en dichos procesos de fabricación que se pueden aprovechar para forzar su apertura. Luego pasa a describir los métodos y herramientas usados para forzar las cerraduras. Todo ello acompañado por abundantes diagramas que detallan muy visualmente cada uno de los pasos.

El autor es un profesional, pero en ningún momento pierde de vista que se dirige a un público que tiene poca o ninguna idea inicial de la materia tratada, así que las explicaciones son muy detalladas, no asumen ningún conocimiento previo y además hace un verdadero esfuerzo en ponerse en el lugar de alguien que se enfrenta a una cerradura por primera vez. En ese sentido también ofrece consejos sobre como reunir un paquete de herramientas y de cerraduras de prueba que sirvan para empezar a practicar a un coste bajo y con una dificultad progresiva que evite que nos desanimemos ante cerraduras prematuramente difíciles.

El resultado es bastante redondo y creo que convierte a este libro en un must have dentro de la biblioteca de cualquier ingeniero de seguridad.

05 marzo 2012

Linux Firewalls

Linux Firewalls: Attack Detection and Response with iptables, psad, and fwsnort es una obra interesante que trata las posibilidades de configuración de iptables para dotarle de características UTM mediante su integración con firmas de ataque de Snort así como con extensiones concretas de iptables para la correlación de logs y la generación de bloqueo y apertura en tiempo real.

El libro cuenta con multitud de ejemplos reales y trata las configuraciones con gran detalle. No he probado las configuraciones propuestas en laboratorio por lo que no puedo dar fe del nivel de actualidad de las configuraciones propuestas, pero dada la rápida evolución de estas herramientas es de esperar que esta parte del libro vaya perdiendo valor a lo largo de los próximos meses debido a su gradual obsolescencia.

En mi humilde opinión, las herramientas presentadas son útiles a nivel personal o para pequeñas empresas que sólo se puedan permitir opciones open source gratuitas. A un nivel corporativo más serio, me parece que las soluciones propuestas están poco integradas, son de mantenimiento complejo a poco que la red sea más o menos amplia y heterogénea y además hoy en día hay opciones comerciales que superan ampliamente las capacidades presentadas por un coste prácticamente irrisorio para la mayor parte de las empresas.

Sí resulta mucho más jugosa la revisión que hace el autor de diversos ataques de red, explicados con todo lujo de detalle pero de una manera amena y fácilmente comprensible. Aún así, la mayor parte de estos ataques son de dominio público desde hace bastante tiempo por lo que los lectores con cierta experiencia tampoco descubrirán nada nuevo.

En definitiva: un libro correcto pero sólo realmente útil para los que estén dando sus primeros pasos en el mundo de la seguridad.