# Web Este proyecto consiste en un sitio web estático desarrollado con [Jekyll]() con el tema [no-style-please](https://riggraz.dev/no-style-please/) a modo de blog para redactar sobre el Software Libre y de Código Abierto. ## Estructura El sitio web consta de una página inicial declarada solo con la cabecera como fichero `index.md` en [Markdown](https://daringfireball.net/projects/markdown/) y especificada en formato [YAML](https://yaml.org/) y situada en `_data/menu.yml` a modo de lista. En la misma, se declara los enlaces a las distintas publicaciones y resto de páginas del sitio. Adicionalmente, existe una página de redacción declarada en el fichero `redaction.md` donde se especifican las personas que redactan los artículos. Las publicaciones, están escritas en Markdown, adjuntando una cabecera adicional descrita más adelante, y situadas en `_posts/`. Por defecto, en la página inicial no se listan todas las publicaciones, sino que tienen un máximo definido y pasando al archivo cuando sobre pasa el límite. El archivo es un conjunto de ficheros en Markdown que constan de una única cabecera y están situados en `archive/`. Existe uno general y otro por cada categoría. Las configuraciones generales del sitio se declaran en el fichero `_config.yml`, y el fichero Gemfile indica las dependencias de [Ruby](https://www.ruby-lang.org/) que necesita el sitio. ## Funcionamiento La web es actualizada cada 5 minutos usando un script en la [crontab](https://pubs.opengroup.org/onlinepubs/007908775/xcu/crontab.html) del usuario donde estáá instalado Jekyll. El script actualiza la copia del repositorio local, descarga o instala las dependencias de Ruby correspondientes y genera compila el sitio desde los ficheros fuente. El script es el fichero `update.sh`. ## Participación Cualquier persona puede participar en la redacción de artículos de este sitio web siguiendo las directrices especificadas posteriormente. ### Objetivos Si bien la descripción del sitio web ya da indicios de lo que se comenta, es conveniente aclarar cuales son los objetivos a cumplir al elaborar artículos. Así como se mencionan, son objetivos, no reglas estrictas, dado que pueden existir casos en los que sea imposible evitar alguna, pero se aspirará a ello en la medida de lo posible. Estos son: * Redactar exclusivamente de Software Libre y de Código Abierto * Utilizar una expresión natural y neutral * Ser neutral en asuntos agenos a lo que se redacta * Ser respetuoso con otros individuos ### Categorías Las categorías clasifican los artículos tema. Existen 4 categorías iniciales: * Noticias * Promociones * Tutoriales * Opiniones Para añadir nuevas categorías hay que llegar a un acuerdo entre todas y cada una de las personas que participan en la redacción. Una vez acordada, la categoría simplemente se empezará a utilizar en los nuevos artículos. Adicionalmente, tras la creación de una categoría, es necesario añadir el listado de artículos a la página principal y crear su fichero de archivo. ### Páginas Las páginas son los elementos estáticos con menos flexibilidad de la web. Para su creación y redacción se necesita acuerdo previo con el resto del personas que participan en la redacción y su contenido suele mantenerse sin modificar durante bastante tiempo a excepción de las que listan publicaciones y la que representa el equipo de redacción. #### Tipos Actualmente, el sitio web cuenta con 3 tipos de páginas, declaradas en base a las plantillas del tema: * Básico * Complejo * Inicio * Archivo La diferencia principal entre cada tipo radica en la declaración de sus cabeceras donde las básicas cuentan con un número limitado y permanente de atributos y las complejas lo varían. El tipo "Inicio" está reservado para la página de inicio del sitio web mientras del resto se pueden crear tantos como se necesiten. #### Redacción Para la redacción de páginas nuevas es necesario tener en cuenta lo que hay que incluir en su cabecera y lo acordado para el contenido. ##### Cacebera Para explicar la estructura de la cabecera es necesario un ejemplo de una compleja utilizada en una página de archivo de categoría. ``` --- layout: archive lang: es which_category: news title: Publicaciones de noticias --- ``` Cada uno de los elementos previos a los dos puntos entre el bloque de tres guiones (`---`) es un atributo de la cabecera, junto a su correspondiente valor a la derecha de los dos puntos. ###### layout Es el primer atributo básico y obligatorio de toda cabecera. Declara el tipo de página. Las complejas tienen nombres propios como la actual y las simples se declaran como `page`. Los valores posibles son los siguientes: * `page` * `home` * `archive` ###### lang Es el segundo atributo básico y el primero de los opcionales. Declara el idioma establecido para el contenido de la página. Su valor es el mismo que lleva el atributo 'lang' asociado a la etiqueta 'HTML' al crear páginas en [HTML](https://www.w3.org/html/). ##### Contenido ### Publicaciones #### Cabecera ##### Fecha La fecha debe seguir el formato %Y-%m-%d %H:%M:%S %z en cada publicación. Una buena forma de obtenerla es especificándola como entrada al programa `date` de la siguiente forma. `date +"%Y-%m-%d %H:%M:%S %z"`