Bajo un océano de bits, mes III

Por Javier Albizu, 4 Abril, 2018
¿Recuerdas que el mes pasado te dije que no quería meterme con Vim o Emacs por el tema de la curva de aprendizaje y tal?
… pues al final me he terminado metido con Vim y… bueno... no es para tanto1 (dice mientras tensa la soga que cuelga del techo). Pero bueno, por el momento me sobran unos cuantos puntos de cordura. Además, ¿qué diablos? si uno quiere ir de tipo duro tiene que apechugar con lo que va asociado.
Y, oye, no te voy a mentir, aunque aún no les he echado un ojo a todos los módulos que aparecen listados por ahí abajo, meterme con eso ha sido una de las cosas más entretenidas que he hecho durante las últimas semanas (así que te puedes hacer una idea de cómo han sido el resto de cosas). Porque ha sido un mes durillo.
Era un tema que tenía pendiente desde hace mucho (los enlaces con el curso de Vim que dan comienzo a la retahíla de cosas relacionadas los tenía perdidos por el disco duro desde hace unos cuatro años) y me dije, hoy es un día tan bueno como cualquier otro para que me encierren. Una vez dicho eso los miré durante diez minutos, no les volví a hacer caso (aunque los sigo considerando material pendiente) y me dediqué a surfear por la red en busca de recomendaciones.

Más allá de eso la cosa no ha avanzado demasiado porque en marzo se han solapado aún más cosas de las habituales. Terminar con el puñetero libro que empecé el mes pasado ha sido un dolor y no me ha terminado de dejar las cosas todo lo claras que me habría gustado. Una parte muy importante de la culpa ha sido mía, pero la cabeza no me daba para más y por eso me ha dado por lanzarme a los brazos de Vim algo que, técnicamente, también encajaba como parte del reto.

¿Y qué ha tenido de complicado el mes? Preguntaréis.
Por un lago tocaba trabajar durante más horas y en jornada partida (algo cíclico y que ya sabía con antelación) pero, añadido a esto, y también por motivos laborales, me he sacado una certificación de ISTQB2. Si sumamos el curso, el estudio para el examen, la jornada partida, los tres retos presentes, el quedar con la gente y el rato dedicado a hacer el vago mi tiempo se ha visto muy comprometido. Pero más allá del tema meramente organizativo tenía la cabeza a cada momento diciéndome lo que aún no había hecho.

Volviendo al tema de la certificación, y agarrándome a los detalles de matiz, en ocasiones he asumido que el tiempo que le dedicaba también contaban como parte de este reto. Quizás aún no vaya a dar uso a ese conocimiento, pero tengo claro que más adelante me puede venir bien. Porque, a pesar de tratarse del nivel de certificación más básica, el tiempo dedicado al curso no ha sido un desperdicio y me ha permitido abrir los ojos a otros temas también relacionados con esta labor; La toma de requisitos para un programa. Al mismo tiempo también me ha metido el miedo en el cuerpo descubriéndome conceptos como la “Complejidad ciclomática”, la “Explosión combinatoria” o el TDD (algo de lo que también he encontrado una charla por parte de Brian Provinciano) que también enlazo por ahí abajo.
Tengo intención de integrar todas las cosas que utilizo en el día dentro de la gestión de proyectos de software para este reto. Tengo claro que tanto ISTQB como ITIL3 están orientadas a la gestión de equipos de distintos tamaños, que sólo tengo la certificación más básica en ambas… y que estoy totalmente sólo en esto, pero eso no tiene que impedirme el ser metódico. Es más, uno de los grandes problemas que estoy teniendo con esto es que no tengo una manera de “cuantificar” mi avance. Con el dibujo o la escritura es muy sencillo pero con la programación aún estoy lejos de ver cualquier resultado.
Utilizando la jerga del trabajo, me voy a tener que ir cambiando de gorras cada dos por tres. Hacerme las preguntas que me tendrían difíciles que me tendrían que hacer los distintos gestores, porque aquí soy “Negocio”, “Gestor de proyecto”, “Analista”, “Tester”, Diseñador” y “Desarrollador”. La esquizofrenia está servida. Así pues, toda ayuda que puedan darme las herramientas o las técnicas de trabajo espero que aporten en aquellos aspectos en los que me encuentro más flojo.
Gracias al curso de ISTQB he descubierto una herramienta (que no deja de ser una hoja de cálculo glorificada) para la toma de requerimientos en un proyecto de software; Testlink (también en el mismo bloque de enlaces), y cuando yo como “Gestor” me pregunte a mí mismo como “Negocio” cada detalle de lo que luego, y ya como “Desarrollador” debo convertir en código espero que su estructura me ayude a ser lo más concreto posible.

De todas formas, la opción final por Vim no se ha debido en exclusiva a mi rebote con el tema del VSCode. Como ya decía, quiero montar mi entorno de desarrollo desde el nivel más bajo que pueda. Quiero quitar de mi cabeza el pensamiento mágico, el decir “seguro que hay un programa que hace esto” y tratar de profundizar en cada paso. Al final todo es código. Código escrito por otros.
Por supuesto, tengo que marcarme unos límites. Con mi nivel de conocimiento actual soy incapaz de comprender el 99,9% de las líneas de código que leo y soy consciente de que el montarme este entorno sólo me aporta una falsa sensación de control. Cuando tenga una mejor comprensión de todo seguramente haga el camino inverso y me pase algún IDE tocho pero, por el momento, con lo que tengo me basta y me sobra para continuar avanzando.

Aún no he empezado a hacerme las preguntas en serio acerca de los detalles técnicos o funcionales del juego, ni he elegido una biblioteca de funciones con las que implementarlos, pero es que de estoy último hay para aburrir4, y lo uno es algo dependiente de lo otro. Existe una infinidad de maneras de hacer cualquier cosa, y cada uno de los pasos que intervienen tienen su aquel5.

Una vez que terminé con el libro que tenía en curso la impresión acerca de lo que eran los objetos6 se confirmó pero, aún así, sigo sin tener clara en la cabeza cómo se estructuran, y eso es algo que me va a costar. Me da la impresión de que nunca voy a poder afirmar sin sentir que estoy mintiendo que “sé” programar. Porque para mí “saber” algo implica no depender de otros elementos. Implica no tener que consultar, y eso en la programación es algo imposible. Y no sólo eso, la cantidad de cosas a consultar para cualquier nimiedad es abrumadora.

Como decía, acabé el libro y tocaba decidir por dónde continuar. Al final opté los cursos de SDL de Lazyfoo porque… foo7(jijiji), y porque en una de sus lecciones se trata el tema de la creación de un editor de mapas. Y ahí seguimos… perdidísimos.
Para pintar una puñetera ventana en pantalla con una imagen de fondo y otra en primer plano con SDL usamos más de media docena de funciones y el archivito de marras ya ocupa casi doscientas cincuenta líneas. Pero ese es el menor de los problemas.
He tratado de mirar qué narices hacen esas funciones8 y no he sido capaz de acercarme a saber dónde narices estaban dentro del código de SDL. Sólo he llegado hasta los archivos de cabeceras (que tampoco he sabido interpretar), o a cómo se invocan dentro de sus APIs9. Pero bueno, no hay problema, tengo tiempo. A fin de cuentas SDL sólo tiene ¡¡¡QUINIENTAS TREINTA Y SEIS!!! de esas.
El tema de las APIs y los objetos ya lo he manejado en otros leguajes de scripting, pero nunca he tenido que crear cosas demasiado complejas y, en el caso concreto de Powershell, el entorno que proporciona Microsoft y la cantidad de información existente en la red facilita bastante la cosa, pero aquí, por más libros o webs que se hayan cruzado en mi camino, navego totalmente a ciegas.
A este paso dudo que para dentro de dos años sea capaz de hacer que nada se mueva en la pantalla. Porque esa es otra, todo el tema gráfico lo tengo abandonadísimo. Esta semana santa traté de recuperar el lápiz sin erótico resultado, tanto es así que terminé recurriendo a copiar… a medias lo que tenéis por aquí.

Lo que dan de sí unas horas

Sigo sin ser capaz de formar imágenes mentales. Para mí las formas no son imágenes sino descripciones verbales. Entiendo los conceptos de las formas, pero en mi cabeza sólo están sus definiciones. Sólo pienso con palabras, no con representaciones gráficas. Cuando leo un libro no soy capaz de formar algo visual en mi cabeza a partir de las descripciones, sólo son elementos sueltos. Tanto es así que, desde que supe de su existencia, en más de una ocasión me he preguntado si tengo afantasía9. No sé lo que quiero ver plasmado, sólo lo que quiero que sienta quien lo ve. No soy capaz de ver las líneas hasta que ya están en el papel e, incluso llegado ese momento, no soy capaz de concretar lo que falla o lo que quería dibujar. Sólo sé que está mal.
Y no quiero copiar, pero no sé dibujar algo que no sea genérico sin hacerlo. Parece que los del gusto y el olfato no son mis únicos sentidos atrofiados.
Cuando escribo me pasa algo similar. Sé todo lo que pasa por el interior de mis personajes, se lo que quiero contar con la historia, lo que me gustaría transmitir, pero no tengo ni idea de qué aspecto tienen, cómo les gusta vestirse o de qué tono es su piel.

Pero me estoy desviando. Estaba con mi evocador canto a la programación.
Mirando un poco por encima, SFML tiene menos objetos y estos no son funciones sino clases11. Apenas llegan a cien… pero no tengo ni idea de si esto es bueno o malo. Si esto limita sus posibilidades o internamente cuántas funciones habrá definidas dentro de cada clase.
No sé si será más sencillo de aprender o más complicado. Lo que sí que sé es que he encontrado más libros en los que se habla de SFML que de SDL
Pero bueno, dejaré esa decisión para cuando termine con Lazyfoo.

Una idea que me lleva dando vueltas por la cabeza desde hace mucho es la de hacer un clon de mi añorado TRAZ12 para ir calentando, pero aún estoy muy lejos de hacer siquiera un clon del Muro para Spectrum.
Encontrar cualquier información sobre desarrollo de juegos en Linux13 está complicado. O los recursos son demasiado genéricos, demasiado avanzados. Por el contrario, y aunque usen bibliotecas multi plataforma como SFML para Windows la cosa es bastante más asequible. Tanto es así que los libros que he comprado están todos centrados en Visual Studio y Windows.
Así pues, aunque dicen que “Hey, las bibliotecas también funcionan en Linux”, el código de los ejemplos peta porque el VS añade unas cabeceras para precompilar, y las rutas donde se encuentran los fuentes están configurados en el IDE y no en los propios archivos.
En fin, yo no desisto.

También he seguido viendo vídeos de las GDC14, un batiburrillo un tanto anárquico de temas muy interesantes… no siempre tan bien explicados como me gustaría, pero de lo que siempre se sacan ideas.
Y hablando de sacar ideas, también he conocido el canal de José Altozano (aka Dayo o DayoScript)15, quien ha venido a cubrir el hueco de mis añorados Bukku qui16 como mi crítico de vídeo juegos de cabecera.
El visionado de su canal ha consumido gran parte de mi tiempo de la semana santa y como sucediese con los Bukku, me estoy viendo todos los vídeos que ha subido de manera secuencial desde el principio. No coincido con gran parte de sus gustos, inquietudes y opiniones, pero me ha resultado una sorpresa de lo más agradable, ha conseguido que me plantee alguna que otra cosa para este proyecto, y su evolución a lo largo del tiempo es palpable.
Supongo que me ganó con su entrevista en el AMA de Vodafone, donde hablaba de temas que me resultan tan cercanos como la inseguridad y la autoría.

Y bueno, creo que eso viene a ser más o menos todo. Te dejo, que me quedan muchas cosas para hacer en lo que queda del día.

Enlaces:

1. Vim
- Curso de Vim en Bitelia 1
- Curso de Vim en Bitelia 2
- Curso de Vim en Bitelia 3
- Curso de Vim en Bitelia 4
- Curso de Vim en Bitelia 5
- Curso de Vim en Bitelia 6
- Curso de Vim en Bitelia 7
- Curso de Vim en Bitelia 8
- Curso de Vim en Bitelia 9
- Curso de Vim en Bitelia 10
- Curso de Vim en Bitelia 11
- Curso de Vim en Bitelia 12
- Curso de Vim en Bitelia 13
- Curso de Vim en Bitelia 14
- Curso de Vim en Bitelia 15
- Curso de Vim en Bitelia 16
- Aspecto terminal
- Compilar en Vim
- Módulos de Vim
- switch.vim
- DidYouMean
- vim-template
- vim-run
- ctrlp.vim
- vim-fswitch
- vim-protodef
- ctrlsf.vim
- vim-easymotion
- vim-localvimrc
- minibufexpl.vim
- vim-snipmate
- Vundle.vim
- clickable.vim
- incsearch.vim
- vim-visualMarks/a>
-
vim-highlighturl
- auto-pairs
- vim-mercenary
- vim-easy-align
- Ctrl-p
- vim-signature
- vim-lawrencium
- tagbar
- vim-randomtag
- ack.vim
- ctrlp-locate
- ranger.vim
- vim-puppet
- nerdtree
- gundo.vim
- vim-expand-region
- rainbow_levels.vim
- vim-commentary
- vim-dispatch
- vim-fugitive
- vim-pathogen
- vim-surround
- quick-scope
- vim-airline
- TaskList.vim
- YankRing.vim
- pylint.vim
- Syntastic
- YouCompleteMe
- vimwiki

2. ISTQB
- International Software Testing Qualifications Board (ISTQB)
- Testlink
- Complejidad ciclomática
- Explosiones combinatoria
- TDD (Test driven development)
Más de Brian Provinciano
- Su web
- Su charla sobre como diseñó sus pruebas
- El script con el que grababa y "rejugaba" las partidas de prueba
- Y la transcripción de la charla

3. ITIL

4. Bibliotecas de funciones
Bennugd
- Bennugd
- Getting Your Feet Wet in SDL, The Pong Clone!

SDL
- SDL
- Estructura y funciones de la API de SDL 2
- Libro Sdl Game Development
- Making A Game with C++ And SDL2 (Videos)
Lets Make a Game in C++ and SDL
- Lets Make a Game in C++ and SDL I (Video)
- Lets Make a Game in C++ and SDL II (Video)
- Lets Make a Game in C++ and SDL III (Video)
RPG con SDL
- RPG con SDL (Video)
- RPG con SDL
Desarrollando para SDL / Linux
- Steam Dev Days 2014 - Game Development with SDL 2.0 (Video)
- Steam Dev Days 2014 - Getting Started with Linux Game Development (Video)
LazyFoo SDL
- Tutorial LazyFoo SDL
- LazyFoo SDL Editor de mapas I
- LazyFoo SDL Editor de niveles

SFML
- SFML
- Tutoriales para SFML
- Estructura y funciones de la API de SFML
- SFML Game Development By Example
- Beginning C++ Game Programmingi
- Mastering SFML Game Development
- Game Physics Cookbook
- Gamecodeschool - Sfml-projects
- Gamecodeschool - Making games where do I start/
- Gamecodeschool - Building your first sfml game project
- Gamecodeschool - Building a simple game engine in C++/

OpenGL
- Opengl GLUT
- LazyFoo OpenGL
- Curso Udemy Modern OpenGL C++ 3D Game Tutorial Series & 3D Rendering

Xlib
- Xlib

Allegro Framework
- Web de Allegro
- Wiki de Allegro
- Allegro Wikipedia
- Buckys C++ Programming Tutorials
- Action Arcade Adventure Set (Libro 1994)

PyGame
- PyGame
- Wiki PyGame
- Invent Your Own Computer Games with Python
- Invent Your Own Computer Games with Python (PDF)

PySDL2
- PySDL2
- Documentación PySDL2
- Invent Your Own Computer Games with Python para PySDL2
- Invent Your Own Computer Games with Python para PySDL2 (Github)
- Hilo Reddit Python para crear juegos

Recursos para Python
- Awesome Python
- Awesome Python - Game Development
- Learning Python Application Development

5. Lo que cuesta pintar cualquier cosa en pantalla
6. Programación orientada a objetos
7. Foo
8. Funciones
9. Application programming interface (API)
10. Afantasía
11. Clases

12.Traz
- Ficha en Lemon64
- El único vídeo que he encontrado sin que nadie hable

13. Desarrollar juegos en Linux
- Desarrollo para SteamOS
- Video Game Programming - comprehensive foundations
- Curso de algoritmos en Khan Academy
- Creating a Basic Game Engine
- Game From Scratch C++ Edition
- Learning to game dev on linux resolutiion is a zelda like in the making

Crear el motor
- Crear editor de niveles
- Blog de Thimbleweed Park (254 entradas)/a>
-
Planet X3 (8 Bit Guy)

Making a Game Boy game in 2017: A "Sheep It Up!"
- Parte I
- Parte II
- Y en castellano

14. Más charlas del GDC
- Math for Game Programmers: Building a Better Jump
- 8 Bit & '8 Bitish' Graphics-Outside the Box
- Tech Toolbox for Game Programmers
- Physics for Game Programmers: Understanding Constraints
- The GDC 2015 Live 2D Animation Demo

15. DayoScript (José Altozano)
- Dayo en Yutube
- En Eurogamer
- Entrevista en AMA (Ask me Anything) de Vodafone

16. Bukku qui

El contenido de este campo se mantiene privado y no se mostrará públicamente.

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.