Martín

R · Estadística · Miscelánea

Gateando en la web con blogdown

Martín Andrés Macías / 2018-03-01


Antes de cualquier cosa, este post está inspirado en Up and running with blogdown de Alison Presmanes Hill. Al principió lo traduje torpemente al español y luego decidí incluir cosas de mi experiencia.

1 Lea sobre blogdown

Le recomiendo que lea lo siguiente:

También existe este artículo de Eric Nantz, el creador de R-Podcast, en la sección de issues de Github rbind/support que puede ser de ayuda:

2 Advertencias, descargos de responsabilidad, etc.

Incluso con los espectaculares recursos que enumeré arriba, comenzar a usar blogdown conllevó algunos intentos, así que este post transmite lo que terminó funcionando para mí. Sin embargo, la distancia y el esfuerzo recorrido pueden variar, dependiendo del sistema operativo y su pretensión. Por mi parte: soy usuario de macOS, uso R, RStudio y Git (a través de Github)(https://github.com), y la terminal algunas veces, por lo que me estoy familizarizando con todo esto. Si no es su caso, aquí hay unos sitios para comenzar:

También tengo Xcode y Homebrew instalados- probablemente necesitará esto para descargar Hugo. Si no tiene ninguno pero está en un mac, este enlace puede ayudar:

Para más información sobre cosas de interés que se usan, podría consultar:

En este post presentaré dos formas de crear un web site desde blogdown.

3 PRIMERA FORMA

4 En GitHub

  1. Vaya a su cuenta de GitHub, y cree un nuevo repositorio (Dele check para inicializarlo con un README. Para bautizar su repositorio, considere su futuro plan de publicación:

{{% alert note %}} Puede ver algunos de los nombres de los repositorios usados por miembros de la organización rbind aquí. {{% /alert %}}

  1. Vaya a la página principal de su nuevo repositorio y, debajo del nombre del repositorio, haga clic en el botón verde Clone or download.

  2. En la sección Clone with HTTPS, haga clic en el ícono del portapapeles para copiar el URL clonado de su nuevo repositorio. Pegue este texto en la terminal en la siguiente sección.

5 En el terminal

Ahora clone su repositorio remoto y cree una copia local en su computadora para que pueda sincronizar entre las dos ubicaciones (usando el terminal o su herramienta de línea de comandos alternativa para un computador). Recuerde ubicarse en la carpeta de su elección para la clonación de su repositorio.

  1. Use cd para navegar dentro del directorio donde usted quiere que su repositorio esté

  2. Una vez esté ahí, digite: git clone [paste]. Entonces mi comando sería así:

git clone https://github.com/mamaciasq/martin.git

Y esto es lo que imprimió en mi ventana de terminal:

Cloning into 'martin'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Checking connectivity... done.
  1. Cierre el terminal, ya todo está listo.

6 En RStudio

  1. Instale blogdown desde su consola de RStudio. Si usted ya ha instalado devtools como yo lo hice, solo necesita la segunda línea de las que se listan a continuación:
if (!requireNamespace("devtools")) install.packages("devtools")
devtools::install_github("rstudio/blogdown")
  1. Instale Hugo usando la función de ayuda del paquete blogdown:
blogdown::install_hugo()
# o
library(blogdown)
install_hugo()

{{% alert note %}} Aquí es donde mis instrucciones divergen de las de Ed: él afirma que blogdown no creará un sitio web en su carpeta raíz porque el archivo README.md ya está allí. No encontré que ese fuera el caso, también lo probé con un sitio nuevo. Si una de las formas no funciona para usted, pruebe la otra. {{% /alert %}}

  1. Use los botones del menú de arriba en RStudio para seleccionar File -> New Project -> Existing Directory, luego vaya al directorio en su computadora donde esté su repositorio de GitHub y haga click en el botón Create Project.

  2. Ahora debería estar “dentro” de su proyecto en RStudio. Si está usando git para control de versiones, edite su archivo *gitignore. Este archivo debería estar visible en su panel visor de archivos en RStudio.

.Rproj.user
.Rhistory
.RData
.Ruserdata
blogdown
.DS_Store # si es un usuario de windows, use Thumbs.db
public/ # si está usando Netlify

7 Construya su sitio en RStudio

Ahora puede finalmente coonstruir su sitio usando la función blogdown::new_site(). Pero primero debería al menos pensar en los temas…

7.1 Escogiendo un tema

Hay cerca de 90 temas de Hugo. Así que volví al libro blogdown. Afortunadamente, Yihui y Amber se ofrecieron “a ahorrar algo de tiempo, enumerando algunos temas a continuación que coinciden con nuestro gusto…”. Fui a hugo-academic! Cualquiera que sea el tema que escoja, necesitará escoger alguno de los tres caminos para hacer su nuevo sitio:

  1. Si está feliz con el tema ofrecido por defecto, que es el lithium theme, puede usar:

  2. Si desea un tema distinto al predeterminado, puede especificar el tema al mismo tiempo que llama a la función new_site:

# por ejemplo, cree un sitio nuevo con el tema academic-theme
blogdown::new_site(theme = "gcushen/hugo-academic", theme_example = TRUE)
  1. Si, por el contrario, desea agregar el tema más tarde (como hice, porque no vi el ejemplo anterior hasta que fue demasiado tarde), puede hacer esto:
library(blogdown)
new_site() # el tema por defecto es lithium
# debe dejar de servir para poder usar la consola nuevamente
install_theme("gcushen/hugo-academic", theme_example = TRUE, update_config = TRUE)

{{% alert note %}} -Now is a good time to re-read about blogdown::serve_site() and how LiveReload works (and how it blocks your R console by default) +Ahora es un buen momento para re-leer sobre blogdown::serve_site() y cómo trabaja LiveReload (y cómo esto bloquea su consola de R por defecto) {{% /alert %}}

Recomiendo configurar theme_example = TRUE- algunos temas no proporcionarán un sitio de ejemplo, pero el tema académico sí y me pareció útil verlo. Siempre puede eliminar el contenido del ejemplo.

7.2 Actualizar opciones de proyecto

En su proyecto en RStudio, vaya a la barra de menús superior de RStudio y seleccione Tools -> Project Options y actualice siguiendo las instrucciones de Yihui y Amber.

7.3 Edite sus configuraciones

Lecturas relevantes:

Ahora, edite el baseurl en su archivo config.toml. El URL siempre debería terminar con un slash / . En este punto, probablemente aún no ha publicado su sitio, sin embargo puede verlo son el add-in Serve Site, o corriendo la función blogdown::serve_site. Para mí funcionarons ambos baseurl que presento a continuación:

baseurl = "https://example.com/"
baseurl = "/"

{{% alert warning %}} Asegúrese de que el baseurl = que puso, termine con un slash /! {{% /alert %}}

Continúe y edita todos los demás elementos en el archivo config.toml ahora como quiera; ¡así es como personaliza su sitio!

7.4 Addins & flujo de trabajo

Addins: utilícelos- no necesitará el paquete blogdown cargada en la consola si utiliza los Addins. Mi flujo de trabajo en RStudio en este momento (una vez más, solo lo visualizo localmente porque aún no lo hemos publicado) funciona mejor así:

  1. Abra el proyecto de RStudio para el sitio
  2. Use el complemento Serve Site (solo una vez debido a la magia de LiveReload)
  3. Vea el sitio en el panel del visor de RStudio y ábralo en una nueva ventana del navegador mientras trabaja
  4. Seleccione los archivos existentes para editar usando el panel de archivos en RStudio
  5. Después de hacer cambios, haga clic en el botón guardar (¡no knit!) - la consola se volverá a cargar, el panel del visor se actualizará, y si presiona actualizar en el navegador, su vista local también se actualizará
  6. Cuando esté satisfecho con los cambios, agregue / haga commit / haga push de los cambios a GitHub

Tener blogdown :: serve_site ejecutando localmente con LiveReload es especialmente útil ya que puede ver de inmediato si se equivocó por completo. Por ejemplo, al editar mi archivo about.md, este error apareció en mi consola después de hacer un cambio y pude corregir el error de inmediato:

Started building sites ...
ERROR 2017/06/08 16:22:34 failed to parse page metadata for home/about.md: (18, 6): missing comma
Error: Error building site: Errors reading pages: Error: failed to parse page metadata for home/about.md: (18, 6): missing comma for about.md

El flujo de trabajo anterior solo sirve para editar archivos o publicaciones existentes, pero no para crear publicaciones nuevas. Para eso, siga leyendo…

7.5 Publicación

Lecturas relevantes:

Línea de fondo:

Use el addin New Post. Pero necesita la consola para hacer esto, por lo que debe detener blogdown :: serve_site haciendo clic en el botón rojo Stop primero. El addin es una interfaz brillante que ejecuta este código en la consola: blogdown ::: new_post_addin (). Entonces, su consola necesita estar desbloqueada para que se ejecute. También necesita estar “dentro” de su proyecto de RStudio o no funcionará.

7.5.1 Borrador de posts

Lecturas relevantes:

Ya sea que haga un markdown o un R Markdown (ver más abajo), debe saber que al principio del YAML de su nuevo archivo, puede agregar draft: TRUE y podrá obtener una vista previa de su publicación usando blogdown::serve_site(), pero convenientemente su publicación no aparecerá en su sitio desplegado hasta que configure esta opción en falso. Como esto es una función integrada en Hugo, todas las publicaciones (borrador o no) terminarán en su repositorio de GitHub.

7.5.2 Nuevos posts en markdown

Escoja uno de los dos métodos:

  1. Use el addin New Post y con el botón redondo escoja Format: Markdown (recomendado)
  2. Use la consola para crear un nuevo post .md:
blogdown::new_post()
blogdown::new_post(rmd = FALSE) # false está por defecto!

Aquí están los argumentos de ?new_post:

new_post(title, kind = "default", open = interactive(), 
@@ -282,28 +279,28 @@ new_post(title, kind = "default", open = interactive(),

{{% alert note %}} Recuerde usar el addin Serve Site para que pueda ver sus cambios inmediatamente con cada guardado usando LiveReload. {{% /alert %}}

7.5.3 Nuevos posts RMarkdown

Una vez más, puede escoger mediante dos formas distintas:

  1. Use el addin New Post y con el botón redondo escoja Format: R Markdown (recomendado)
  2. Use la consola para crear un nuevo post .Rmd:
blogdown::new_post(rmd = TRUE) # false is the default!

Después de editar su post .Rmd, además de guardar los cambios en su archivo .Rmd, debe must usar blogdown::serve_site- esta es la forma en que el archivo de salida html necesita ser generado.

{{% alert warning %}} No le haga knit a sus post.Rmd- en lugar de eso, use blogdown::serve_site. Si le hace click al botón knit, haga Serve Site de nuevo para reescribir el archivo .html. {{% /alert %}}

Por último, su encabezado de YAML debe lucir similar a esto; note que algunos mas no todas las prestaciones de rmarkdown::html_document son soportadas en blogdown:

---
title: "My Awesome Post"
author: "John Doe"
date: "2017-02-14"
output:
  blogdown::html_page:
    toc: true
    toc_depth: 1
    number_sections: true
    fig_width: 6
---

{{% alert note %}} Recuerde utilizar el complemento Serve Site de nuevo para que pueda ver inmediatamente sus cambios con cada operación de guardado utilizando LiveReload y su archivo .html se imprimirá correctamente. {{% /alert %}}

7.5.4 Agregando imágenes a un post

Si desea incluir una imagen que no sea una figura creada a partir de un chunk de R, el método recomendado es:

  1. Agregar la imagen a su carpeta /static/img/, luego
  2. Hacer referencia a la imagen usando la ruta relativa del archivo de la siguiente manera:
![my-image](/img/my-image.png)

8 Publicación en Netlify

La publicación en Netlify a través de GitHub es sencilla. Yihui y Amber dan algunas instrucciones para principiantes, pero Netlify es muy fácil, le recomiendo que omita arrastrar su carpeta public y en su lugar automatice el proceso a través de GitHub.

  1. Cuando esté listo para publicar, haga commit a sus cambios y súbalos a GitHub, luego vaya en línea a Netlify.
  2. Haga clic en el botón Sign up e inscríbase usando su cuenta existente de GitHub (no es necesario crear otra cuenta)
  3. Inicie sesión y seleccione: New site from Git -> Continuous Deployment: GitHub.
  4. Desde allí, Netlify le permitirá seleccionar de sus repositorios GitHub existentes. Escogerá el repositorio con el que ha estado trabajando con blogdown, luego configurará su compilación. Esto implica especificar dos cosas importantes: el comando de compilación y el directorio de publicación (que debe ser public).

Puede verificar su versión de hugo en el terminal usando el comando hugo version. Así es como se veía mi salida, así que podría ejecutar la versión 0.20 si quisiera a través de Netlify, pero opté por 0.19 y funciona muy bien.

$ hugo version
Hugo Static Site Generator v0.20.7 darwin/amd64 BuildDate: 2017-05-08T18:37:40-07:00

Netlify publicará su sitio y le asignará un nombre de subdominio aleatorio del formulario random-word-12345.netlify.com. El mío fue particularmente desafortunado, con la palabra al azar garbage-collector-janice. Debe saber que puede cambiar esto; Cambié el mío a martin.netlify.com.

{{% alert note %}} Cada vez que cambie el nombre de su subdominio, debe actualizar baseurl en su archivo config.toml (así que cambié el mío a baseurl = “https://martin.netlify.com/”). {{% /alert %}}

En este punto, debería estar en funcionamiento con blogdown, GitHub y Netlify, pero aquí hay algunas ideas si quiere ir más lejos…

9 Yendo más lejos

9.1 CSS personalizado

Me gusta jugar con la configuración predeterminada del tema, como colores y fuentes. Cada tema de Hugo está estructurado de forma un poco diferente, pero si está interesado, puede consultar mi css personalizado para ver cómo he personalizado el tema académico, que proporciona una forma de vincular a un archivo CSS personalizado en el archivo config.toml:

# Enlaza CSS y JS personalizados
#   (relative to /static/css and /static/js respectively)
custom_css = ["blue.css"]

9.2 Formspree

Usé Formspree para hacer un formulario de contacto, que es un servicio en línea (manejado en GitHub) que le permite agregar un formulario HTML a su sitio estático. Sin registro, solo use el formulario y confirme su dirección de correo electrónico una vez. Agregué el siguiente código en mi widget de contacto:

<form action="https://formspree.io/your@email.com" method="POST">
<label for="name">Your name: </label>
<input type="text" name="name" required="required" placeholder="here"><br>
<label for="email">Your email: </label>
<input type="email" name="_replyto" required="required" placeholder="here"><br>
<label for="message">Your message:</label><br>
<textarea rows="4" name="message" id="message" required="required" class="form-control" placeholder="I can't wait to read this!"></textarea>
<input type="hidden" name="_next" value="/html/thanks.html" />
<input type="submit" value="Send" name="submit" class="btn btn-primary btn-outline">
<input type="hidden" name="_subject" value="Website message" />
<input type="text" name="_gotcha" style="display:none" />
</form>

9.3 Nombres de domimio*.rbind.io

Quizás quiera un nombre de dominio diferente que el proveído por Netlify. Yo opté por un subdominio gratuito *.rbind.io ofrecido por RStudio. Para hacer lo mismo, diríjase a la página de GitHub de soporte rbind y abra un nuevo issue. Todo lo que debe hacer es decirles cuál es su nombre de subdominio de Netlify (*.netlify.com), y qué nombre de subdominio quiere (*.rbind.io). El impresionante soporte del equipo de rbind le ayudará!

{{% alert note %}} De nuevo, necesitará actualizar el baseurl en su archivo config.toml para que refleje su nuevo nombre de subdominio (el mío es baseurl = “https://martin.rbind.io/”). {{% /alert %}}