aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAriel Costas <94913521+arielcostas@users.noreply.github.com>2023-11-25 22:44:05 +0100
committerAriel Costas <94913521+arielcostas@users.noreply.github.com>2023-11-25 22:44:05 +0100
commit8b0edfffade23dad7ead437ee5d845860cdb1ee7 (patch)
tree0c13b75a1130ebcf3ee6440d4e679b4f4a9a7792
parenta82f0919d535ba5d86abfbe653bad8ba0fdcf51f (diff)
Implement blog page, add a few links
-rw-r--r--assets/css/base.scss9
-rw-r--r--assets/css/fonts.scss8
-rw-r--r--assets/css/partials/article.scss22
-rw-r--r--assets/css/root.scss4
-rw-r--r--content/_index.md3
-rw-r--r--content/blog/_index.md4
-rw-r--r--content/blog/cosas-de-c-que-echo-de-menos-en-otros-lenguajes.md39
-rw-r--r--content/blog/post-1.md6
-rw-r--r--content/blog/post-2.md6
-rw-r--r--content/info.md4
-rw-r--r--hugo.yaml7
-rw-r--r--layouts/_default/single.html10
-rw-r--r--layouts/blog/list.html1
-rw-r--r--layouts/home/list.html17
-rw-r--r--static/fonts/rubik.ttfbin0 -> 356080 bytes
15 files changed, 120 insertions, 20 deletions
diff --git a/assets/css/base.scss b/assets/css/base.scss
index eaa64bc..189acc1 100644
--- a/assets/css/base.scss
+++ b/assets/css/base.scss
@@ -4,6 +4,7 @@
@import "markup/render-heading.scss";
@import "partials/header.scss";
+@import "partials/article.scss";
@import "partials/footer.scss";
html,
@@ -19,6 +20,13 @@ body {
flex-direction: column;
}
+h1, h2, h3, h4, h5, h6 {
+ font-family: var(--font-heading);
+ line-height: 1.25;
+ margin-top: 0;
+ margin-bottom: 0.6em;
+}
+
h1 {
font-weight: 900;
}
@@ -34,6 +42,7 @@ a {
main {
max-width: 80ch;
+ width: 100%;
margin: 0 auto;
padding: 1rem;
diff --git a/assets/css/fonts.scss b/assets/css/fonts.scss
index c771f4b..a07f8f7 100644
--- a/assets/css/fonts.scss
+++ b/assets/css/fonts.scss
@@ -12,4 +12,12 @@
font-weight: 100 900;
font-display: swap;
src: url('/fonts/aleo-italic.ttf') format('truetype-variations');
+}
+
+@font-face {
+ font-family: 'Rubik';
+ font-style: normal;
+ font-weight: 100 900;
+ font-display: swap;
+ src: url('/fonts/rubik.ttf') format('truetype-variations');
} \ No newline at end of file
diff --git a/assets/css/partials/article.scss b/assets/css/partials/article.scss
new file mode 100644
index 0000000..c35669e
--- /dev/null
+++ b/assets/css/partials/article.scss
@@ -0,0 +1,22 @@
+article {
+ max-width: 70ch;
+ margin: 0 auto;
+ font-size: 1.25rem;
+
+ >* {
+ margin-top: 0;
+ margin-bottom: 1.75rem;
+ }
+
+ h1 {
+ font-size: 3.5rem;
+ line-height: 1;
+ margin-bottom: 1rem;
+ }
+
+ p.meta {
+ display: block;
+ font-size: 0.85rem;
+ margin-bottom: 1rem;
+ }
+} \ No newline at end of file
diff --git a/assets/css/root.scss b/assets/css/root.scss
index 88d8614..9ffc849 100644
--- a/assets/css/root.scss
+++ b/assets/css/root.scss
@@ -1,9 +1,11 @@
:root {
font-size: 16px;
font-weight: 400;
- font-family: 'Aleo', consolas;
+ font-family: 'Rubik', sans-serif;
line-height: 1.5;
+ --font-heading: 'Aleo', "Roboto Slab", sans-serif;
+
--accent-1: hsl(152, 90%, 20%);
--accent-2: hsl(152, 90%, 30%);
--accent-3: hsl(152, 90%, 40%);
diff --git a/content/_index.md b/content/_index.md
index 4455680..a48df89 100644
--- a/content/_index.md
+++ b/content/_index.md
@@ -1,5 +1,6 @@
---
title: "Inicio"
+type: "home"
---
Te doy la bienvenida a mi web. Aquí encontrarás información sobre mí, mis proyectos y mis intereses.
@@ -7,4 +8,4 @@ Esta web está creada con el generador [Hugo](https://gohugo.io/) y un tema crea
## ¿Quién soy?
-Soy un joven de 20 años de Galicia que estudió un ciclo superior y ahora trabaja de programador. Me gusta mucho la informática y la tecnología en general, y me encanta aprender cosas nuevas. \ No newline at end of file
+Soy un joven de 20 años de Galicia que estudió un ciclo superior y ahora trabaja de programador. Me gusta la tecnología en general, y me encanta aprender cosas nuevas.
diff --git a/content/blog/_index.md b/content/blog/_index.md
index e942349..58a82de 100644
--- a/content/blog/_index.md
+++ b/content/blog/_index.md
@@ -1,4 +1,6 @@
---
title: "Blog"
weight: 2
---- \ No newline at end of file
+---
+
+En este blog encontrarás artículos sobre desarrollo, tecnología y otras temáticas que pueda querer compartir. Disclaimer de siempre: las opiniones son mías, y no representan a ninguna empresa o institución. \ No newline at end of file
diff --git a/content/blog/cosas-de-c-que-echo-de-menos-en-otros-lenguajes.md b/content/blog/cosas-de-c-que-echo-de-menos-en-otros-lenguajes.md
new file mode 100644
index 0000000..a27f2e0
--- /dev/null
+++ b/content/blog/cosas-de-c-que-echo-de-menos-en-otros-lenguajes.md
@@ -0,0 +1,39 @@
+---
+title: "Cosas de C# que echo de menos en otros lenguajes"
+date: 2023-09-28
+---
+
+Desde comienzos de este año he estado trabajando con .NET y C#, con una experiencia genial en casi todos los aspectos del ecosistema (con excepciones como MAUI). Sin embargo, también he tenido que trabajar (generalmente por obligación) con otros lenguajes como Java, Python o (recientemente) PHP. Estos lenguajes no son necesariamente malos, aunque tengan sus… digamos… _peculiaridades_. Sin embargo, siempre echo de menos ciertas cosas que en C# doy por asumidas.
+
+## nameof
+
+La expresión `nameof` de C# devuelve el nombre de un símbolo (variable, clase, propiedad, método…) que tiene en el código, como una string. Así, por ejemplo, podemos hacer referencia al nombre de una propiedad «en código», en lugar de ir _hard-coded_ como una cadena de texto directamente. Por ejemplo:
+
+```csharp
+private static int _dia = 2;
+
+public static void Main()
+{
+ Console.WriteLine(nameof(_dia));
+}
+```
+
+Este código imprimirá por consola _\_dia_ tal cual. No el valor, sino el nombre. Ahora bien ¿qué utilidad tiene esto? Para refactor, por ejemplo, es muy útil. Cuando vas a cambiar el nombre a una variable o una propiedad, se actualizará también en el _parámetro_ del nameof, de forma que no tendrás que buscar manualmente dónde se hace referencia a ese campo, útil cuando llamas a código que usa _reflection_, por ejemplo. Además, el IDE y el compilador sabrán a qué estás haciendo referencia, con lo que si un día te cargas la propiedad accidentalmente, el compilador te avisará de que estás pidiendo el nombre de una propiedad inexistente; evitando que ese fallo ocurra en tiempo de ejecución.
+
+## get; set;
+
+Salvo que uses los `record` en Java (solo disponibles desde Java 14) o algo similar, escribir clases para guardar datos es una tarea repetitiva: crear la clase, crear todas las propiedades como `private` y generar los getters y setters, quedándote con una clase de más de 100 líneas de código autogenerado, con el IDE quejándose de un montón de métodos no usados, y de código que tendrás que modificar si cambias una propiedad.
+
+Ahora bien, en C# no ocurre tal desgracia, ya que existen las [propiedades auto-implementadas](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties): puedo declarar una cadena de texto como `public string Nombre { get; set; }`, lo cual hará que sea accesible públicamente, aunque por detrás esté generando el campo donde realmente se almacena, de modo que hay encapsulamiento. Si hace falta que una propiedad nunca cambie, puedes hacer que solo tenga un getter. Si quieres hacer que solo pueda ser modificada desde la propia clase, puedes usar `private set`.
+
+Evitas generar decenas de líneas de código _plantilla_ que luego tendrás que modificar si las propiedades cambian, y que suponen cientos de líneas en un proyecto porque sí. Java dispone de Lombok, sí, pero es una biblioteca más que toca añadir. PHP no tiene tal cosa ni siquiera, siguen chapados a la antigua.
+
+## Todo en uno
+
+Esta cuestión ya es un tanto más «filosófica», pero me gusta que .NET sea un ecosistema completo: casi todo lo que puedes necesitar está desarrollado y se actualiza cada año. El SDK base de .NET trae herramientas más que de sobra para crear aplicaciones de consola. Y con paquetes como `Microsoft.Extensions.Configuration` o `Microsoft.Extensions.Hosting` puedes evitar reinventar la rueda, en estos casos en el procesado de configuraciones y la creación de procesos de fondo.
+
+Si necesitas crear una aplicación web, puedes utilizar ASP.NET Core con tan solo instalar el SDK de .NET, pudiendo añadirle Entity Framework Core para conectarte a la base de datos, y paquetes como Identity para gestionar **TODO** lo relacionado con la identidad de usuarios, permisos, autenticación con redes sociales, MFA…
+
+Comparo esto con Symfony, que incluye su sistema de identidad también, pero no permite de serie la gestión dinámica de los roles (se declaran en tiempo de desarrollo, y no de ejecución), aparte de no permitir de serie la autenticación con proveedores externos (como Entra ID, Google Workspace o similares) ni tampoco la autenticación por factor doble con TOTP. Para esto último, hay que utilizar un paquete de terceros (scheb/2fa) que no compatible con la versión 6 del framework.
+
+La ventaja de tener «todo en uno» es que la aplicación se actualiza casi siempre al completo: pasar de .NET 7 a .NET 8 será cambiar las versiones de ciertos paquetes en el `.csproj` e instalar el SDK nuevo en tu máquina. Como mucho, ajustar el IDE, pero sin más. No tendrás que preocuparte de cosas como «es que Django no es compatible con la 3.11» o «es que Symfony rompe con la 8.2», o tener que saltar de Java 8 a 11, u 11 a 17 de golpe.
diff --git a/content/blog/post-1.md b/content/blog/post-1.md
deleted file mode 100644
index 72c41de..0000000
--- a/content/blog/post-1.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: post 1
-date: 2023-11-10
----
-
-Això es el post 1. A veure si funciona.
diff --git a/content/blog/post-2.md b/content/blog/post-2.md
deleted file mode 100644
index cc645d5..0000000
--- a/content/blog/post-2.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: post 2
-date: 2023-11-10
----
-
-Aquest es el post 2. Si no funciona, em pegaré un tret a la boca.
diff --git a/content/info.md b/content/info.md
index e48722a..2a4f2c9 100644
--- a/content/info.md
+++ b/content/info.md
@@ -3,6 +3,4 @@ title: "Info"
weight: 1
---
-Información sobre mí, mis proyectos y mis intereses.
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, nisl quis tincidunt aliquam, nunc nisl ultrices nunc, quis ultricies nis luctus eu. Nu nc sit amet nisl euismod, aliquam nisl quis, aliquam nisl. Sed euismod, nisl quis tincidunt aliquam, nunc nisl ultrices nunc, quis ultricies nis luctus eu. Nu nc sit amet nisl euismod, aliquam nisl quis, aliquam nisl. \ No newline at end of file
+Hola mundo que tal \ No newline at end of file
diff --git a/hugo.yaml b/hugo.yaml
index 7231a57..bf7940c 100644
--- a/hugo.yaml
+++ b/hugo.yaml
@@ -4,4 +4,9 @@ title: Ariel Costas
outputs:
home: ["HTML", "AMP"]
- posts: ["HTML", "RSS", "markdown"] \ No newline at end of file
+ posts: ["HTML", "RSS", "markdown"]
+
+markup:
+ goldmark:
+ renderer:
+ unsafe: true \ No newline at end of file
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index c1339be..a8257e9 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -1,3 +1,11 @@
{{ define "main" }}
+<article>
+ <h1>{{ .Title }}</h1>
+ <p class="meta">
+ {{ if gt .Date.Unix 0 }}
+ <time datetime="{{ .Date.Format "2006-01-02T15:04:05-07:00" }}">{{ .Date.Format "January 2, 2006" }}</time>
+ {{ end }}
+ </p>
{{ .Content }}
-{{ end }}
+</article>
+{{ end }} \ No newline at end of file
diff --git a/layouts/blog/list.html b/layouts/blog/list.html
index 2cf4b0b..627dd4a 100644
--- a/layouts/blog/list.html
+++ b/layouts/blog/list.html
@@ -4,6 +4,7 @@
<ul>
{{ range .Pages.ByLastmod }}
<li>
+ <time datetime="{{ .Date.Format "2006-01-02T15:04:05-07:00" }}">{{ .Date.Format "2006-01-02" }}</time>
<a href="{{ .Permalink }}">{{ .Page.Title }}</a>
</li>
{{ end }}
diff --git a/layouts/home/list.html b/layouts/home/list.html
new file mode 100644
index 0000000..95f13a6
--- /dev/null
+++ b/layouts/home/list.html
@@ -0,0 +1,17 @@
+{{ define "main" }}
+{{- .Content }}
+
+{{ with .Site.GetPage "section" "blog" }}
+<h2 id="{{ .RelPermalink }}">
+ <a class="anchor" href="{{ .RelPermalink | safeURL }}">#</a>
+ Últimas entradas
+</h2>
+
+<ul>
+ {{ range .Pages }}
+
+ <li>{{ .PublishDate.Format "02/01" }} <a href="{{ .Permalink }}">{{ .Title }}</a></li>
+ {{ end }}
+</ul>
+{{ end }}
+{{ end}} \ No newline at end of file
diff --git a/static/fonts/rubik.ttf b/static/fonts/rubik.ttf
new file mode 100644
index 0000000..bbab349
--- /dev/null
+++ b/static/fonts/rubik.ttf
Binary files differ