1 Enlaces de utilidad general

1.1 Editores/IDEs, tipos de letra, esquemas de colores.

  1. Lite-xl.
  2. VSCode. Si te gusta la privacidad deberías echar un vistazo a vscodium.
  3. SublimeText.
  4. Code::Blocks.
  5. Geany.
  6. Gnome Builder.
  7. GNU Emacs.
    • Existen distribuciones de Emacs que facilitan su configuración, las dos más conocidas son Spacemacs y Doom-Emacs.
    • Aquí tienes unos tutoriales para principiantes: 1, 2 y 3.
    • Y aquí un listado de usuarios famosos en el ámbito de la informática que usan Emacs.
  8. Vi es, junto a Emacs, otro clásico editor de textos de los S.O. de la familia UNIX. Con el tiempo han ido apareciendo versiones mejoradas del mismo como Vim y Neovim.
  9. Cuida tus ojos, para programar es mejor emplear tipos de letra mono-espaciados en lugar de proporcionales.
    • Usa un tamaño de letra apropiado, evita tamaños muy pequeños.

    • Aquí tienes ejemplos de tipos de letra apropiados para programar.

    • Y aquí algunos criterios para elegir un tipo de letra mono-espaciado.

    • Elige un esquema de color que no te produzca fatiga visual. Dos de los esquemas de colores que más tratan de conseguir esto son:

      1. Solarized.

      2. Modus Themes.

  10. Unicode y UTF-8/16/32. Aquí, aquí y aquí tienes más información. La página web del proyecto. Si vas a usar Unicode desde programas consulta estas bibliotecas.

1.2 Herramientas y recursos:

  1. The Impact of AI on Computer Science Education. No dejes de leer este artículo.
  2. Distcc. Distcc en la wikipedia. Ejemplo de programación distribuída.
  3. Ninja. Ejemplo de programación paralela. Make. Recuerda que con la opción -j permite ejecutar procesos en paralelo.
  4. GNU Parallel es una Herramienta que te permite ejecutar trabajos en paralelo.
  5. Git. Libro Pro Git. Gitmagic. Gitready. Gitflow: A successful Git branching model. Tutorial sobre Gitflow. How to Write a Git Commit Message.
  6. Learn X in Y minutes.
  7. Uncrustify: Source Code Beautifier.
  8. What Every Computer Scientist Should Know About Floating-Point Arithmetic.
  9. What Every Programmer Should Know About Memory.
  10. Es bueno y aconsejable que uses un depurador a nivel de código fuente como lldb o gdb, así como herramientas sobre ellos, tales como gdbgui y rr.
  11. Nemiver es un interfaz gráfico sobre gdb. Aquí tienes su manual.
  12. Y aquí tienes una lista de otros frontales sobre gdb. El propio gdb tiene un interfaz en modo texto basado en la biblioteca curses, gdb -tui tu-programa.
  13. En relación con la depuración a nivel de código fuente existen un par de términos curiosos:
    1. Heisenbug.
    2. Rubber duck debugging.
  14. ¿Has llegado hasta aquí? ¿Te aburres?, juega un poco entonces o piensa como resolverías un cubo de Rubik de estas dimensiones.
  15. En alguna de las clases hemos hablado sobre los includes gratuitos y lo que suponen. En el código fuente del núcleo Linux se han propuesto eliminarlos.

2 Enlaces relacionados con programación concurrente.

2.1 Generales

2.2 Lenguaje C++

  1. Sobre el uso de C++/Stl en el desarrollo de juegos…pero echa un vistazo sobre el minuto 14:00, aparece algo que hemos visto en clase, algo que también menciona el propio Linus Torvalds en esta entrevista. También relacionado con consolas/videojuegos y reducción de costes. Y en este otro vídeo puedes ver por qué los desarrolladores p.e. de videojuegos suelen evitar usar STL (minuto 13 en adelante).
  2. El uso de excepciones en C++ es algo muy útil pero en arquitecturas actuales puede tener costes temporales muy altos.
  3. How to make C++ run FASTER (with std::async).
  4. Consulta el apartado de concurrencia y paralelismo en C++ dentro de las Cpp Core Guidelines.
  5. En uno de los temas hablamos sobre el uso/significado de volatile en Java. Te recomiendo que veas este video sobre el uso de volatile en C++.
  6. C++ on Mars: Incorporating C++ into Mars Rover Flight Software. Destacar los minutos 4:27 (tests), 40:38 (caracteristicas no-usadas de C++), 1:09:00 (valgrind/purify) y 1:10:07 (equipos de desarrollo y test separados). Además en este vídeo se habla sobre VxWorks del cual hemos hablado en relación a la inversión de prioridades de los procesos.
  7. ¿Y si pudiéramos ejecutar código en tiempo de compilación?…El caso es que se puede y de varias maneras, una de ellas es constexpr. Las capacidades de constexpr van ampliándose con el tiempo, mira en este vídeo lo que se puede lograr hoy en día.

2.3 Lenguaje Rust

  1. En esta serie de tutoriales sobre como escribir un Sistema Operativo en Rust puedes ver algunos de los conceptos de bajo nivel que hemos estado viendo en la asignatura. Hablando de SO escritos en Rust puedes ver uno bastante avanzado en Redox OS.
  2. En esta otra charla puedes ver explicados (min. 21:00) los conceptos de propiedad (ownership) y préstamo (borrow) que emplea el lenguaje Rust para aplicarlos al acceso concurrente a datos.
  3. Rust live-coding: concurrent data structures (más de 6h!).
  4. Concurrencia en Go, rust y python.
  5. Rust Concurrency Explained. Charla impartida por Alex Crichton, uno de los desarrolladores de Rust.
  6. A stack-less Rust coroutine library under 100 LoC.
  7. En el libro “The Rust Programming Language” tienes un capítulo al final sobre como crear un servidor web multi-hilo.
  8. Implementing truly safe semaphores in rust.

2.4 Lenguaje Python

  1. Echa un vistazo a este video sobre la migración de un programador de Python a Rust. Alrededor del minuto 2:15 puedes ver una explicación de las pegas que Python tiene con multithreading. Parece que algunas de ellas tienen que ver con el mutex global del intérprete.
  2. En relación con este mutex global consulta este enlace y este otro.

2.5 Lenguaje D

  1. En su canal de YouTube Ki Rill ofrece una serie de tutoriales para aprender D.
  2. Libro Programming in D, disponible en distintos formatos.
  3. En la charla “Helpful D Techniques”, Ali Çehreli habla sobre técnicas que emplea en programación concurrente al usar el lenguaje D.
  4. En esta otra charla, Ali Çehreli presenta las características de D de manera resumida y clara.