update images with resizing & fix about links

This commit is contained in:
Gabriel Augendre 2023-05-21 11:33:01 +02:00
parent 34e5c258bc
commit f026d06899
28 changed files with 53 additions and 73 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
.hugo_build.lock
.idea
public/
resources

View file

@ -9,8 +9,8 @@ ShowWordCount: false
---
I'm Gabriel, a Go and Python software developer at [OVHcloud](https://www.ovhcloud.com/) (Lyon, France) and [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) enthusiast.
![A picture of Gabriel Augendre](39.jpg)
![His usual avatar for online profiles, the dwarf from a medieval fantasy audio story named "Le Donjon de Naheulbeuk" (French)](41.jpg)
{{< img src="39.jpg" alt="A picture of Gabriel Augendre" >}}
{{< img src="41.jpg" alt="His usual avatar for online profiles, the dwarf from a medieval fantasy audio story named 'Le Donjon de Naheulbeuk' (French)" >}}
## Where to find me {#contact}

BIN
content/posts/about-me/39.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/posts/about-me/40.jpg (Stored with Git LFS)

Binary file not shown.

BIN
content/posts/about-me/41.jpg (Stored with Git LFS)

Binary file not shown.

View file

@ -1,20 +0,0 @@
---
title: "About me"
tags: ['Gabriel Augendre', 'blog', 'homepage']
date: 2020-05-12T11:29:02+00:00
aliases: ["/about-me"]
---
I'm Gabriel, a Go and Python software developer at [OVHcloud](https://www.ovhcloud.com/) (Lyon, France) and [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) enthusiast.
![A picture of Gabriel Augendre](39.jpg)
![His usual avatar for online profiles, the dwarf from a medieval fantasy audio story named "Le Donjon de Naheulbeuk" (French)](41.jpg)
## Where to find me {#contact}
| Code | Contact |
|-----------------------------------------------|--------------------------------------------------------------------|
| [Gitea](https://git.augendre.info/gaugendre) | <a rel="me" href="https://fosstodon.org/@Crocmagnon">Mastodon</a> |
| [GitHub](https://github.com/Crocmagnon) | <a href="mailto:ga-contact@augendre.info">Email</a> |
| [GitLab](https://gitlab.com/gaugendre) | |
My resume is available as [a pdf](https://cv-gabriel.augendre.info) (in French) if you want to take a look.

View file

@ -4,12 +4,12 @@ tags: ['analytics', 'blog', 'self-hosting']
date: 2020-06-15T16:27:27+00:00
aliases: ["/adding-time-to-my-blogs-statistics"]
---
![Two Grafana graphs: one to view the raw view counts evolving, the other to display the difference between two data points](9.png)
{{< img src="9.png" alt="Two Grafana graphs: one to view the raw view counts evolving, the other to display the difference between two data points" >}}
Recently I added some statistics to my blog. I wanted to do that with minimum effort and without serving any crappy proprietary JavaScript to my users.
{{< note class="info" title="Update 2020-01-03" >}}
I now use [my own blog platform]({{< ref "blog-platform-update-quick-note/" >}}) with [Plausible Analytics]({{< ref "about-me/#analytics" >}}).
I now use [my own blog platform]({{< ref "blog-platform-update-quick-note/" >}}) with [Plausible Analytics]({{< ref "/about#analytics" >}}).
{{< /note >}}
#100DaysToOffload No. 11
@ -17,7 +17,7 @@ I now use [my own blog platform]({{< ref "blog-platform-update-quick-note/" >}})
My blog is powered by [WriteFreely](https://writefreely.org/), a free software written in Go. They already include a counter of views per page of my blog. This is nice, you can see the numbers in your admin interface so you can see which page works better than the others.
![My blog stats as displayed in WriteFreely writer interface](19.png)
{{< img src="19.png" alt="My blog stats as displayed in WriteFreely writer interface" >}}
The thing is, you don't have any notion of time. You can't differentiate a post which has made 1000 views in 3 days from another which has made 1000 views in 2 months.
@ -163,7 +163,7 @@ I made two panels on my Grafana dashboard: one to view the raw view counts evolv
Here are the two graphs in action:
![Two Grafana graphs: one to view the raw view counts evolving, the other to display the difference between two data points](9.png)
{{< img src="9.png" alt="Two Grafana graphs: one to view the raw view counts evolving, the other to display the difference between two data points" >}}
## Allowing communication between devices

View file

@ -6,7 +6,7 @@ aliases: ["/bitwarden-and-password-managers"]
---
[TL;DR](https://en.wiktionary.org/wiki/tl;dr): I use a password manager and you should too. [Bitwarden](http://bitwarden.com/) is a Free Software alternative.
![Bitwarden Logo](3.svg)
{{< img src="3.svg" alt="Bitwarden Logo" >}}
This is my 10th post of #100DaysToOffload.<!--more-->

View file

@ -14,4 +14,4 @@ The code powering this website is available at [Gitea](https://git.augendre.info
During the migration, I lost the feature that pushed every article on Mastodon. If you followed the blog using this mechanism, I encourage you to switch to the RSS feed.
If you subscribed with the RSS feed, your reader might redownload all the previous articles, if that's the case I'm really sorry but I don't know how to prevent it. If you happen to know, please [reach out to me]({{< ref "about-me" >}})!
If you subscribed with the RSS feed, your reader might redownload all the previous articles, if that's the case I'm really sorry but I don't know how to prevent it. If you happen to know, please [reach out to me]({{< ref "about" >}})!

View file

@ -9,10 +9,10 @@ In a [recent post]({{< ref "adding-time-to-my-blogs-statistics" >}}), I talked a
Today, I went another way and configured [GoAccess](http://goaccess.io/) to provide me with an HTML report with data extracted from my webserver's logs.
{{< note class="info" title="Update 2020-01-03" >}}
I now use [my own blog platform]({{< ref "blog-platform-update-quick-note/" >}}) with [Goatcounter]({{< ref "about-me/#analytics" >}}).
I now use [my own blog platform]({{< ref "blog-platform-update-quick-note/" >}}) with [Goatcounter]({{< ref "/about#analytics" >}}).
{{< /note >}}
![GoAccess Screenshot](8.png)
{{< img src="8.png" alt="GoAccess Screenshot" >}}
#100DaysToOffload No. 14<!--more-->

View file

@ -8,7 +8,7 @@ I participated in the [latest CodinGame challenge](https://www.codingame.com/mul
#100DaysToOffload No. 7
![Cover picture for CodinGame Spring Challenge 2020. There is one yellow Pacman and one blue Pacman fighting against each other](2.jpg)<!--more-->
{{< img src="2.jpg" alt="Cover picture for CodinGame Spring Challenge 2020. There is one yellow Pacman and one blue Pacman fighting against each other" >}}<!--more-->
CodinGame is a coding platform on which you can solve puzzles by writing a program in the language of your choice. They also often host contests in which your code fights against that of other developers. The most matches you win, the most points you get. And the most points you get, the higher you climb on the leaderboard. I like to participate in these challenges, so I signed up for the latest one: CodinGame Spring Challenge 2020.
@ -55,7 +55,7 @@ These two abilities can really change the course of a match so you'd better take
Of course, not seeing the whole map means you have to keep a state between each turn to remember the position of the pellets you've already seen. That way, you can go back to them later if you don't see anything anymore.
My code for this challenge is available on [Gitea](https://git.augendre.info/gaugendre/codingame/src/branch/master/challenges/2020-spring.py). It's written in Python, feel free to check it and drop me an [email]({{< ref "about-me/" >}}) or a message on [Mastodon]({{< ref "about-me/" >}}) if you have any question! It's not written in a very maintainable way since its expected life span was that of the contest, so 11 days. I could've spent more time refactoring stuff but *in this context* this would have likely been wasted time.
My code for this challenge is available on [Gitea](https://git.augendre.info/gaugendre/codingame/src/branch/master/challenges/2020-spring.py). It's written in Python, feel free to check it and drop me an [email]({{< ref "/about" >}}) or a message on [Mastodon]({{< ref "/about" >}}) if you have any question! It's not written in a very maintainable way since its expected life span was that of the contest, so 11 days. I could've spent more time refactoring stuff but *in this context* this would have likely been wasted time.
Basically, here's what I do:

View file

@ -8,7 +8,7 @@ I recently moved to a new apartment and now I have a little closet which contain
For a few weeks, it sat on the floor in this closet since I didn't have any room for it anywhere else. I wasn't satisfied, so I decided to design some small pieces to create a wall mount for the beast.
![Freebox Delta S Server](7.png)
{{< img src="7.png" alt="Freebox Delta S Server" >}}
#100DaysToOffload No. 16<!--more-->
@ -25,9 +25,9 @@ My modem has a triangular shape with a screen on one edge and ports on the oppos
Here's what they look like:
![Bottom piece](14.png)
{{< img src="14.png" alt="Bottom piece" >}}
![Top piece](15.png)
{{< img src="15.png" alt="Top piece" >}}
The piece looking like a U will be printed twice and will support the modem on the bottom and the S shape will prevent it from tumbling. The holes with two diameters are there to let a screw pass and hide its head. The other holes on the opposite side of the U are there to make room for my screwdriver when mounting them.
@ -56,9 +56,9 @@ I was a bit worried about the resistance for the bottom pieces but they seem to
Here's what it looks like once mounted and plugged:
![Large view of my closet with the modem mounted on the wall](6.jpeg)
{{< img src="6.jpeg" alt="Large view of my closet with the modem mounted on the wall" >}}
![Close view of my closet with the modem mounted on the wall](5.jpeg)
{{< img src="5.jpeg" alt="Close view of my closet with the modem mounted on the wall" >}}
I'm quite proud of this since it's one of my first "hardware" projects from start to finish and it looks quite gorgeous in that red plastic 😍

View file

@ -6,7 +6,7 @@ aliases: ["/docker-images-layers-and-cache"]
---
In this post, we'll walk through Docker image layers and the caching around them from the point of view of a Docker user. I'll assume you're already familiar with Dockerfiles and Docker concepts in general.
![Docker logo](32.png)
{{< img src="32.png" alt="Docker logo" >}}
## ✌️ The two axioms of Docker layers
There are two key concepts to understand, from which everything else is deduced. Let's call them our axioms.
@ -354,7 +354,7 @@ See how `python.tar.xz` is downloaded and then deleted all in the same step? Tha
Well that wraps it up for today! It was quite technical but I hope you learned something along the way 🙂
As always, please [contact me]({{< ref "about-me#contact" >}}) if you have comments or questions!
As always, please [contact me]({{< ref "about#contact" >}}) if you have comments or questions!
## 📚 Further reading
* [About storage drivers (Docker docs)](https://docs.docker.com/storage/storagedriver/)

View file

@ -70,7 +70,7 @@ Breaking paragraph
This should be an image:
![Image alt text](32.png)
{{< img src="32.png" alt="Image alt text" >}}
<details>
<summary>Spoiler alert!</summary>

View file

@ -6,7 +6,7 @@ aliases: ["/i-needed-a-budget-with-four-rules"]
---
In January 2020, I discovered a budget app called You Need A Budget ([YNAB](https://youneedabudget.com/)). I've been using it since then and I'm very happy with it, here's why.
![YNAB Logo](20.svg)
{{< img src="20.svg" alt="YNAB Logo" >}}
#100DaysToOffload No. 13<!--more-->
@ -65,7 +65,7 @@ They also have group video sessions very regularly to help you get started or ta
I really encourage you to take a look at [YNAB](https://www.youneedabudget.com/). If you want to use their software, they offer a 34-days trial. If you're a student, you can get a whole year for free.
If you do try it, please [drop me a line]({{< ref "about-me" >}})! I'd be more than happy to know if you find it interesting and whether it works for you or not 😊
If you do try it, please [drop me a line]({{< ref "about" >}})! I'd be more than happy to know if you find it interesting and whether it works for you or not 😊
After the trial, the service is billed $84/year (that's $7/month). It may seem steep but you should really give it a try before stopping for the price. If at the end of your trial you still don't think it's the right tool for you, then you can still take the advice they offer, read their website/blog or ask questions to the community and apply it on your own budget!

View file

@ -38,7 +38,7 @@ I already have a list of topics I'd like to share:
## Where to reach me
Up-to-date info should appear on the [About me]({{< ref "about-me" >}}) page on this site.
Up-to-date info should appear on the [About me]({{< ref "about" >}}) page on this site.
Any feedback is highly appreciated!

View file

@ -213,7 +213,7 @@ Again, this is in the spirit of minimizing the production image.
Docker multi-stage builds helped me reduce my image sizes and attack surface - sometimes by *a lot* - without compromising on features.
I hope that you enjoyed reading this article and that you found it interesting or helpful! Please feel free to [contact me]({{< ref "about-me/" >}}) if you want to comment on the subject.
I hope that you enjoyed reading this article and that you found it interesting or helpful! Please feel free to [contact me]({{< ref "/about" >}}) if you want to comment on the subject.
In a future post, I'll talk about reducing Docker images build time in a CI environment where the filesystem isn't guaranteed to stay between runs.

View file

@ -4,7 +4,7 @@ tags: ['blog', 'self-hosting']
date: 2020-11-11T07:38:24.261889+00:00
aliases: ["/migration-complete"]
---
I just moved this blog to my self-hosted server at home. Hopefully nothing is broken but if you see something strange or missing, please [contact me]({{< ref "about-me/" >}})! 😃
I just moved this blog to my self-hosted server at home. Hopefully nothing is broken but if you see something strange or missing, please [contact me]({{< ref "/about" >}})! 😃
I also hope we won't experience any major outages like power (both the server and the router are on UPS) or network. 🤔

View file

@ -9,7 +9,7 @@ I don't use Pi Hole anymore but this post should still be relevant. I've switche
{{< /note >}}
![Pi Hole logo](11.svg)
{{< img src="11.svg" alt="Pi Hole logo" >}}
As I was telling you [before](https://gabnotes.org/raspberry-pi), I own a Raspberry Pi on which I set up a [Pi Hole](https://pi-hole.net/).
@ -18,14 +18,14 @@ As they advertise it, Pi Hole is "a black hole for internet advertisement". It's
Again, I won't go into details of how to setup your own Pi Hole, there are plenty of good resources for that, starting with Pi Hole's own website. Just remember to setup your DHCP server to advertise your Pi Hole IP as the preferred DNS resolver, so that every device connected to your network can automatically benefit from it.
I won't also explain how Pi Hole blocks your ads but if you'd like me to, please [let me know]({{< ref "about-me" >}}).
I won't also explain how Pi Hole blocks your ads but if you'd like me to, please [let me know]({{< ref "about" >}}).
Today's quick post is about how great Pi Hole is, in a few bullet points:
* It's easy to set up.
* It's very low maintenance. I basically check for an update every now an then but otherwise I pretty much let it live its own life.
* You can set it up in a privacy preserving way by choosing what statistics/logs you want to collect:
![Privacy options in Pi Hole. There are five options ranging from "log every request with the client and the requested domain" to "no logs, no stats".](10.png)
{{< img src="10.png" alt="Privacy options in Pi Hole. There are five options ranging from 'log every request with the client and the requested domain' to 'no logs, no stats'." >}}
* Did I mention it blocks ads? That works everywhere and especially well coupled with other solutions such as [uBlock Origin](https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/), [Privacy Badger](https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/) or [Ghostery](https://addons.mozilla.org/en-US/firefox/addon/ghostery/) in your browser but it also in some of your smartphone apps 😁
* Since it caches the DNS responses, it also improves a tiny bit your browsing speed and prevents your FAI or another DNS server to spy on you too much. And it reduces your footprint by sending less data on the internet. That's not why I primarily use it but it's a little bonus.

View file

@ -36,7 +36,7 @@ Among them, only poetry ticks all the boxes. pip-tools and pipenv don't have fea
### Version constraints
![Poetry logo](35.svg)
{{< img src="35.svg" alt="Poetry logo" >}}
Poetry lets you specify your direct dependencies in a standard file called `pyproject.toml`. You can either edit this file manually or use the `poetry` command line tool.
@ -113,4 +113,4 @@ The setup in a Docker image is also quite straightforward if you accept to have
Poetry is very **pleasant** to work with and we feel **safer** adding dependencies, knowing that there won't be any surprise conflict after the installation. We can also easily **build and publish** packages for internal use with the same tool, it's just a new command to learn.
Anyway, I hope you learned something in this post about our experience with poetry! As always, please [contact me]({{< ref "about-me#contact" >}}) if you have comments or questions!
Anyway, I hope you learned something in this post about our experience with poetry! As always, please [contact me]({{< ref "about#contact" >}}) if you have comments or questions!

View file

@ -12,7 +12,7 @@ I bought a Raspberry Pi 3 model B+ about a year ago. I had to check the order da
Now feels a good time to talk about my experience with the little guy. This will be my #100DaysToOffload fifth post.
![Illustration of a Raspberry Pi 3 model B](13.JPG)<!--more-->
{{< img src="13.JPG" alt="Illustration of a Raspberry Pi 3 model B" >}}<!--more-->
Illustration of a Raspberry Pi 3 model B by Jose.gil on Wikipedia, CC-BY-SA.
## The Raspberry Pi

View file

@ -18,7 +18,7 @@ I'm working on a small cash register web app to help during events and reduce th
This app also has a reporting section, where I'm generating graphs using matplotlib. Some graphs are heavy to produce, but they're only a portion of the full page. In the screenshot below, I've highlighted them:
![Checkout reports](42.png)
{{< img src="42.png" alt="Checkout reports" >}}
Initially, the page took about 6 to 7 seconds to fully load. Before that, nothing was displayed on screen.

View file

@ -10,7 +10,7 @@ I don't use TrueNAS anymore but I still have this machine and I even upgraded th
A few weeks ago, I replaced my trusty [Synology DS216play]({{< ref "synology-nas-stream-and-backup/" >}}) with a more powerful station that I built myself. I hadn't built a computer in a long time and it was a lot of fun!
![TrueNAS Logo](26.svg)<!--more-->
{{< img src="26.svg" alt="TrueNAS Logo" >}}<!--more-->
## Build time!
I chose to go team red this time because I never used an AMD processor. I picked a Ryzen 5 3400G which should be more than enough for the next few years. A quick detour on the specs:
@ -40,7 +40,7 @@ The day to day management is also quite easy and after setting up some automated
I experienced some issues with my UPS though. TrueNAS allows you to monitor the state of a USB UPS and gracefully shutdown the system when it's on battery or when it reaches low battery. This is very useful to prevent data loss. It also sends you an email when something bad happens (UPS in bad state, UPS doesn't respond, etc). The state is polled every 2 seconds by default. My UPS decided it was a bit too much and the monitoring service *in the UPS* failed in the night after running a couple of hours. I woke up with an inbox full of alert emails (*one per minute* of supposed outage). The fix was relatively easy: set the polling interval to a higher value like 15 seconds, so the UPS doesn't feel DOSed. I'm not running a datacenter and my server doesn't draw too much power compared to the UPS capacity so I'm not concerned about the UPS failing within 15 seconds in case of a power outage.
## Experimentations
![FreeBSD Logo](28.png)
{{< img src="28.png" alt="FreeBSD Logo" >}}
This server will allow me to experiment more freely. I used to rent a VPS for always on services but now I can just pop them onto this machine. One detail though: FreeNAS is based on [FreeBSD](https://en.wikipedia.org/wiki/FreeBSD). FreeBSD is *not* a GNU/Linux distribution though there are some similarities. It's a system I've never administrated before and it can be a bit confusing when popping into the command line. On the other hand, if you have a pretty standard setup, you never see FreeBSD as everything can be managed through the GUI.
@ -61,9 +61,9 @@ My current setup includes:
* A VM with some Docker services:
* This blog (migrated from the VPS)
* Collabora Online server (provides online collaboration on LibreOffice/Microsoft Office documents in NextCloud)
* [Plausible Analytics]({{< ref "about-me/#analytics" >}})
* [Plausible Analytics]({{< ref "/about#analytics" >}})
The Raspberry Pi still runs Home Assistant but I disabled InfluxDB and Grafana since I didn't use them. The VPS is shut down and I plan on deleting it by the end of the month since I don't need it anymore.
## Closing thoughts
I'm really happy with this setup! I don't know yet what I'm going to do with my new NextCloud though. I tried NextCloud talk but I couldn't get it working properly for video calls. I might replace pCloud (I have a lifetime 2To plan) and use it as a backup service, who knows! If you have suggestions, please feel free to [contact me]({{< ref "about-me/" >}}). 😀
I'm really happy with this setup! I don't know yet what I'm going to do with my new NextCloud though. I tried NextCloud talk but I couldn't get it working properly for video calls. I might replace pCloud (I have a lifetime 2To plan) and use it as a backup service, who knows! If you have suggestions, please feel free to [contact me]({{< ref "/about" >}}). 😀

View file

@ -57,16 +57,16 @@ I will probably have a look at [HandBrake](https://handbrake.fr/) which I discov
The other main thing I use my NAS for is keeping backups. The configuration here is also really easy too, at least for Time Machine on macOS:
1. Enable a file-sharing service like SMB
![Screenshot of the "File Services" setting screen in Synology DSM](16.png)
{{< img src="16.png" alt="Screenshot of the 'File Services' setting screen in Synology DSM" >}}
2. Advertise Time Machine on the protocol you enabled
![Screenshot of the "File Services - Advanced" setting screen in Synology DSM](17.png)
{{< img src="17.png" alt="Screenshot of the 'File Services - Advanced' setting screen in Synology DSM" >}}
3. Configure your Mac to use your network drive as a Time Machine backup
This setup served me well for many months but it recently started to fail and I don't understand why yet. I just have a cryptic error on my Mac telling that the backup couldn't complete.
![Screenshot of the Time Machine error on macOS](18.png)
{{< img src="18.png" alt="Screenshot of the Time Machine error on macOS" >}}
I'll have to investigate this issue further, but I'm not too stressed either. All of my documents live in the cloud and my code projects are pushed on remote git repositories. The only thing I'll lose if my computer gets stolen is a bunch of stickers I really like and a few hours to set a new one up.

View file

@ -8,7 +8,7 @@ After leaving ITSF in January, I spent February at Gatewatcher. The company is i
After a month of job hunting, I'm happy to report that I'll be joining [OVHcloud](https://ovhcloud.com) in April! They have offices in Lyon so the remoteness shouldn't be an issue, though the people I'll be teaming up with are distributed in France and Canada. I've been hired as a software developer & site reliability engineer. I'll be mostly developing in Go and Python.
![OVHcloud logo on a wall, slightly blurry](45.jpg)
{{< img src="45.jpg" alt="OVHcloud logo on a wall, slightly blurry" >}}
During this month I met several other organizations. All of them had interesting projects to share and it was very rewarding to have the opportunity to discuss with them.
@ -29,5 +29,3 @@ Here are some links (in alphabetical order) so you can check their work:
Anyway, I'm really excited to start my new job! Wish me luck 😊
<!-- ![OVHcloud logo](44.png)
-->

View file

@ -6,7 +6,7 @@ aliases: ["/using-your-yubikey-with-ssh-and-achieving-multifactor-authentication
---
In my [introductory article]({{< ref "im-starting-a-blog" >}}), I teased about using SSH with a YubiKey. Here's the post that expands on the idea.
![YubiKeys](21.jpeg)
{{< img src="21.jpeg" alt="YubiKeys" >}}
As you can see, I *like* YubiKeys.
This is part of my #100DaysToOffload series, issue No. 6.<!--more-->

View file

@ -40,7 +40,7 @@ The only "cool" thing is that once it's fixed, it's fixed for all videos I play
So if by any chance a Google engineer comes across this blog post, I'd be more than happy to share my experience with them to help improve the app experience.
And if you have any suggestions to peacefully watch YouTube on the Apple TV with an AirPlay speaker, please [reach out to me]({{< ref "about-me" >}}) 😊
And if you have any suggestions to peacefully watch YouTube on the Apple TV with an AirPlay speaker, please [reach out to me]({{< ref "about" >}}) 😊
This concludes my 4th post of #100DaysToOffload.

View file

@ -0,0 +1,10 @@
{{ $src := .Get "src" }}
{{ $origImage := .Page.Resources.GetMatch $src }}
{{ if eq $origImage.MediaType.SubType "svg" }}
<img src="{{ $origImage.RelPermalink }}" alt='.Get "alt"'>
{{ else }}
{{ $image := $origImage.Resize "720x" }}
<a href="{{ $origImage.RelPermalink }}">
<img src="{{ $image.RelPermalink }}" width="{{ $image.Width }}" height="{{ $image.Height }}" alt='.Get "alt"'>
</a>
{{ end }}