# 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 30 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 ajenos a lo que se redacta * Ser respetuoso con otros individuos ### Páginas Las páginas son los elementos estáticos con menos flexibilidad del sitio web. #### 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 La creación y redacción de una página es determinado por acuerdo previo con el resto del personas que participan en la redacción. Para la redacción, es necesario tener en cuenta el formato y situación del fichero que representa cada página, lo que hay que incluir en su cabecera y lo acordado para el contenido. ##### Fichero Las nuevas páginas son ficheros con extensión `.md` creados en la raíz de las fuentes del sitio web. Sus nombres deberán ser cortos, de una o dos palabras y en minúscula. En el caso de haber una o más páginas que contengan algo en común como las páginas del archivo, deberán ser agrupadas en un subdirectorio nombrandolo de forma que se identifique aquello que tienen las páginas en común y siguiendo la misma regla que para los nombres de las páginas. ##### 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/). Posee el valor por defecto `en` por lo que, aunque no es obligatorio, es necesario establecer el atributo en la creación de cada página para indicar que está en español. ###### which_category Es el primer y único atributo complejo y el segundo de los opcionales, específico para las páginas de archivos. Declara la categoría de las publicaciones a listar en la misma. Su valor se corresponde con los mismos nombres de las categorías en inglés y en minúscula, quedando de la siguiente forma: * `news` * `promotions` * `tutorials` * `opinions` ###### title Es el tercer atributo básico y el segundo de los obligatorios. Declara el título de la página. Es necesario que el título tenga una relación directa con la página y contenga una o dos palabras indicando su contenido. ##### Contenido El contenido de las páginas suele mantenerse sin modificar durante bastante tiempo a excepción de las que listan publicaciones, que lo realiza de forma automática, y la que representa el equipo de redacción. Como se ha indicado anteriormente, debe estar en Markdown. ### Publicaciones Las publicaciones son los elementos estáticos con mayor flexibilidad del sitio web. Son, elementalmente, un tipo de páginas complejas con una serie de atributos específicos. #### Categorías Las categorías clasifican las publicaciones por 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. #### Redacción La creación y redacción de una publicación es determinado por cualquier persona que quiera participar en la redacción. Para la redacción, es necesario tener en cuenta el formato del fichero que representa cada publicación, lo que hay que incluir en su cabecera y cumplir los objetivos al elaborar el contenido. Por otro lado, la persona o personas encargadas de redactar el artículo deberán añadirse en el fichero de redacción usando títulos de segundo nivel para pseudónimos usados para representarse y una descripción propia como introducción. ##### Fichero Las publicaciones se crean como ficheros sueltos con extensión `.md` en el directorio `_posts`. Sus nombres deberán incluir la fecha en el formato `AAAA-mm-dd` seguido con un guión (`-`) y, finalmente, el título de la publicación en minúscula usando caracteres ASCII. ##### Cabecera Para explicar la estructura de la cabecera es necesario un ejemplo de una compleja utilizada en una publicación de prueba. ``` --- layout: post lang: es title: "Welcome to Jekyll!" date: 2021-01-03 13:31:05 -0800 categories: news --- ``` 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. Su valor, para indicar que es una publicación, debe ser `post`. ###### lang Es el segundo atributo básico y el primero de los opcionales. Declara el idioma establecido para el contenido de la publicación. 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/). Posee el valor por defecto `en` por lo que, aunque no es obligatorio, es necesario establecer el atributo en la creación de cada publicación para indicar que está en español. ###### title Es el tercer atributo básico y el segundo de los obligatorios. Declara el título de la publicación. Es necesario que el título tenga una relación directa con la publicación, contenga varias palabras, indique algo de su contenido y además intente ser llamativo. ###### date Es el primer atributo complejo y el tercero de los obligatorios. Declara la fecha de la publicación. La fecha debe seguir el formato `AAAA-mm-dd HH:MM:SS DIFERENCIA-HORARIA` 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" ``` ###### categories Es el segundo atributo complejo y el segundo de los opcionales. Declara la categoría de la publicación. Su valor se corresponde con los mismos nombres de las categorías en inglés y en minúscula, quedando de la siguiente forma: * `news` * `promotions` * `tutorials` * `opinions` Como sugiere el nombre, este atributo soporta especificar más de una categoría pero en este sitio web solo utilizaremos una por artículo en caso de así decidirlo. ##### Contenido El contenido de las publicaciones deberá seguir los objetivos marcados en el sitio web. Al final de cada publicación, deberá incluirse un pie con las personas que han participado en la redacción y un enlace de cada una hasta su sección en dicha página. La estructura del pié deberá ser de la siguiente forma: ``` Redacción: [persona1](/redaction.html#persona1), [persona2](/redaction.html#persona1) ``` ## Problemas Aquí listan los problemas pendientes en la página junto a sus posibles soluciones. ### Nombres en la lista de publicaciones El problema consiste en que, en la lista de publicaciones en la página principal, los nombres de las publicaciones aparecen en minúscula. La razón de la existencia de este problema es que la persona que desarrolló el tema que usamos en el sitio web, indicó en la plantilla que los títulos cambiasen su capitalización a minúsculas al ser listados. La solución propuesta, de forma temporal, ha sido re-escribir dicha plantilla sin dicha transformación y situarla en el directorio `_includes/` con el mismo nombre de la plantilla original, `post_list.html`. Se ha realizado un informe en el repositorio en GitHub donde se desarrolla el tema. Lo puedes visitar en [no-style-please#11](https://github.com/riggraz/no-style-please/issues/11).