Understanding the Linux Kernel: Entiende como funciona Linux o un sistema operativo

Desde aproximadamente un año, estoy dictando la materia de Sistemas Operativos en la Universidad Nacional Experimental del Tachira (UNET) y buscando como explicar el contenido prográmatico con el núcleo Linux, conseguí una recomendación de leer Understanting the Linux Kernel de O’Reilly, acto seguido, adquirí la versión digital y me puse a leerlo.

En mi opinión el libro se divide en dos partes, una sección introductoria donde explica toda la teoría de como funcionan los Sistemas Operativos, aquí veremos como es el arranque del sistema, el manejo de: procesos, memoria, dispositivos de entrada y salida; pero con gran nivel técnico y muchos ejemplos superficiales de como son implementados en Linux. Me pareció interesante porque a diferencia de otros libros de Sistemas Operativos, el contenido está dirigido a profesionales y no a estudiantes, por ello, si desconoces estos temas es mejor leer un libro académico antes de leer esta sección.

La siguiente parte (como el 75% restante del libro), deja de ser teoría general y se adentra en como Linux implementa cada una las cosas explicadas en la sección anterior, aquí leeremos sobre los algoritmos disponibles en Linux para manejo de procesadores, memoria y dispositivos de E/S. A partir de aquí el contenido se dirige a personas interesadas en el diseño de Linux o futuros colaboradores del núcleo, pues veremos secciones de código (no muchas), las diferentes estructuras y variables disponibles para utilizar cuando se desarrolla, ell autor explica muy bien a través de tablas, cada una de las estructuras disponibles con sus correspondientes atributos, los ejemplos son muy sencillos y cortos (bueno la naturaleza de un sistema operativo es así) sin rellenar con otras cosas y los conceptos pueden ser sencillos o muy complejos dependiendo de tu dominio del tema.

Portada del libro

Este libro lo recomiendo si deseas empezar a modificar (fork) el núcleo de Linux, Firefox OS o Android, si te interesa como funciona el núcleo Linux con mucho detalle pero sin la complejidad que se suele conseguir en otras fuentes, si deseas conocer con mayor profundidad como son los sistemas operativos o eres curioso. Eso si, si no tienes bases en el área evita leer este libro, pues te costará entenderlo y no le sacarás provecho al libro.

 Así que consigue este libro y comienza a estudiar sobre Linux (literalmente).

Automatiza tareas de desarrollo web con Guard

Hace tiempo en una charla de Paul Irish, ví un programa llamado Live-reload para recargar automáticamente una página en el navegador cada vez que realicemos un cambio en ella. Pero nunca había podido configurarla en Linux, luego hace unos días en una entrevista de Addi Osmani vi un comentario que me hizo volver a tratar de instalarla, su comentario fue: “Ya en el 2013 nadie debería perder tiempo en recargar manualmente el navegador”.

Así que me puse instalar el programa y descubrí Guard, una aplicación hecha en Ruby para chequear las modificaciones realizadas a archivos y realizar acciones en base a ello. Esto permite por ejemplo, que al realizar algún cambio en un archivo escrito con SASS o SCSS genere el CSS automáticamente, si modificas un archivo JS de desarrollo genere el archivo final ya comprimido, generar el archivo JS desde CoffeScript, entre otros. De esta manera automatiza gran cantidad de tareas que usualmente harías manualmente a través de comandos del Editor/IDE.

 

 Instalación

Aunque existen instaladores para MacOS y Windows los desarrolladores prefieren instalarlo a través de Ruby GEMs, el proceso es sencillo y se aplica para todos los sistemas operativos que soporten Ruby, para ello en la consola debes ejecutar los comandos:

gem install bundle #facilita el proceso

gem install guard #el programa que estamos comentado

gem install guard-livereload #extensión para actualizar el navegador

gem install guard-sass #para pre-procesado de CSS

 

Configuración

Luego te diriges a la raíz del proyecto que estás elaborando, allí ejecutas el comando:

bundle init

Nota: Si el comando falla es porque no tienes el comando gem en tu variable $PATH
Esto creará un archivo llamado Gemfile que contiene toda la información de los gems utilizados en el proyecto y las dependencias de lo mismos. Una vez creado con el comando mencionado, lo abres y agregas el siguiente contenido:

gem 'guard'

gem 'guard-livereload'

gem 'guard-sass', :require => false

Luego debes crear un archivo con el nombre Guardfile en la raíz del proyecto, en él se definirán las reglas que deben ocurrir para realizar las acciones. El siguiente ejemplo está diseñado para ser usado en un proyecto PHP con el framework Yii:

#Modulo para que al modificar un archivo SASS genere el CSS ya comprimido
guard 'sass',
:input => 'css',
:output => 'css',
:style => :compressed
#reglas para la recarga del navegador
guard 'livereload' do

#actualiza el navegador al ocurrir cambios en las vistas, modelos y controladores.
watch(%r{protected/views/.+\.php})
watch(%r{protected/views/.+/.+\.php})
watch(%r{protected/views/.+/.+/.+\.php})
watch(%r{protected/models/(.+)/(.+)\.php$})
watch(%r{protected/controllers/(.+)\.php$})

#Comprime los archivos de Javascript utilizando un script llamado compressJS ubicado en la carpeta js/
watch(%r{js/.+\.original\.js}) {`js/compressJs`}

#Una vez generado los archivos JS finales (ya comprimidos) recarga el navegador
watch(%r{js/.+\.js})

#Recarga el navegador cuando se modifica un archivo CSS
watch(%r{css/.+\.css})
end

La sintaxis es watch(%r{EXPRESION_REGULAR_DE_ARCHIVOS}) {comando a ejecutar}, con esto puedes jugar a detectar cambios en algunos archivos y realizar a través de una secuencia de comandos, tareas respecto a ese archivo modificado. También noten como por ejemplo al comprimir el archivo JS no se recarga el navegador, sino en otra regla cuando se modifica un archivo JS, es decir, algunas cosas deben hacerse a través de la definición de varias reglas.

Uso del programa

Para ejecutarlo debes iniciar guard con el comando:

bundle exec guard

A partir de ahora guard chequeará los cambios en los archivos y ejecutará las acciones configuradas. Para refrescar el navegador automáticamente, es necesario instalar LiveReload para Firefox o Chrome . Una vez instalada, ve a la pestaña donde estas visualizando el proyecto, presionas el botón de LiveReload y debería conectarse sin problemas a guard.

Botón para conectarse con Guard LiveReload

Para probarlo, edita un archivo de vista  y debería actualizarse la página sin problemas. También al editar un archivo SASS (o SCSS) debería generar el archivo CSS y a su vez recargar la página para ver la nueva apariencia, al editar los archivos de Javascript deberían comprimirse y cualquier otra acción que hayas configurado.

Ahora depende de ustedes que utilicen estas herramientas todos los días, pues mejorarán su trabajo al automatizar ciertas tareas y enfocarse en otras mas importantes. Si alguien conoce otra utilidad para Guard, no duden en dejar un comentario.