<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <generator uri="https://astro.build/">Astro</generator>
  <link href="https://ledermann.dev/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://ledermann.dev/" rel="alternate" type="text/html"/>
  <updated>2021-10-17T00:00:00.000Z</updated>
  <id>https://ledermann.dev/feed.xml</id>
  <title type="html">Georg Ledermann, Full Stack Developer</title>
  <author><name>Georg Ledermann</name></author>
  <entry xml:lang="en">
      <title type="html">Coding time visualization</title>
      <link href="https://ledermann.dev/blog/2021/10/17/coding-time-visualization/" rel="alternate" type="text/html" title="Coding time visualization"/>
      <published>2021-10-17T00:00:00.000Z</published>
      <updated>2021-10-17T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2021/10/17/coding-time-visualization</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="JavaScript"/>
      <category term="Tailwind CSS"/>
      <category term="nginx"/>
      <summary type="html">The language chart on my homepage is not a wish list. It comes straight out of WakaTime and shows what my editor really saw last week.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.BmFfBm6F.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.BmFfBm6F.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
  <entry xml:lang="de">
      <title type="html">Photovoltaik-Dashboard als Web-Applikation</title>
      <link href="https://ledermann.dev/blog/2021/02/03/photovoltaik-dashboard-als-web-applikation/" rel="alternate" type="text/html" title="Photovoltaik-Dashboard als Web-Applikation"/>
      <published>2021-02-03T00:00:00.000Z</published>
      <updated>2021-02-03T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2021/02/03/photovoltaik-dashboard-als-web-applikation</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="Ruby on Rails"/>
      <category term="InfluxDB"/>
      <category term="Raspberry Pi"/>
      <category term="SENEC"/>
      <category term="SOLECTRUS"/>
      <summary type="html">Meine Solaranlage sammelt im Minutentakt Hunderte Messwerte, aber die Hersteller-App machte zu wenig daraus. Also habe ich mein eigenes Echtzeit-Dashboard dafür gebaut.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.D-kUuCHz.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.D-kUuCHz.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
  <entry xml:lang="en">
      <title type="html">Progressive image loading with BlurHash</title>
      <link href="https://ledermann.dev/blog/2020/08/01/progressive-image-loading-with-blurhash/" rel="alternate" type="text/html" title="Progressive image loading with BlurHash"/>
      <published>2020-08-01T00:00:00.000Z</published>
      <updated>2020-08-01T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2020/08/01/progressive-image-loading-with-blurhash</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="Ruby on Rails"/>
      <category term="Active Storage"/>
      <category term="Vue.js"/>
      <summary type="html">A whole photo, squeezed into a few dozen characters that render instantly as a blurred preview. Rails does the encoding, Vue.js the decoding.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.BuaC31Mx.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.BuaC31Mx.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
  <entry xml:lang="en">
      <title type="html">Building Docker images, the performant way</title>
      <link href="https://ledermann.dev/blog/2020/01/29/building-docker-images-the-performant-way/" rel="alternate" type="text/html" title="Building Docker images, the performant way"/>
      <published>2020-01-29T00:00:00.000Z</published>
      <updated>2020-01-29T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2020/01/29/building-docker-images-the-performant-way</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="Docker"/>
      <category term="Ruby on Rails"/>
      <summary type="html">Two to three times faster CI builds, and the trick is not clever caching. It is baking every dependency into a prepared base image once.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.DG8Pmt5P.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.DG8Pmt5P.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
  <entry xml:lang="en">
      <title type="html">Using UltraHook to receive webhooks at development</title>
      <link href="https://ledermann.dev/blog/2019/03/17/using-ultrahook-to-receive-webhooks-at-development/" rel="alternate" type="text/html" title="Using UltraHook to receive webhooks at development"/>
      <published>2019-03-17T00:00:00.000Z</published>
      <updated>2019-03-17T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2019/03/17/using-ultrahook-to-receive-webhooks-at-development</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="Ruby on Rails"/>
      <category term="Stripe"/>
      <category term="UltraHook"/>
      <summary type="html">Testing webhooks locally is tricky: the sender cannot reach your laptop behind a firewall. UltraHook provides a free tunnel for incoming POST requests, so you can debug them on your own machine.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.6K2C9I3v.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.6K2C9I3v.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
  <entry xml:lang="en">
      <title type="html">Updating Docker services with Portainer webhooks</title>
      <link href="https://ledermann.dev/blog/2018/09/17/updating-docker-services-with-portainer-webhooks/" rel="alternate" type="text/html" title="Updating Docker services with Portainer webhooks"/>
      <published>2018-09-17T00:00:00.000Z</published>
      <updated>2018-09-17T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2018/09/17/updating-docker-services-with-portainer-webhooks</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="Docker"/>
      <category term="Portainer"/>
      <category term="Deployment"/>
      <category term="CI/CD"/>
      <summary type="html">Deploying a new Docker image by hand means logging in, pulling, restarting. With a Portainer webhook, every successful CI build deploys itself.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.CREniODN.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.CREniODN.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
  <entry xml:lang="en">
      <title type="html">Swagger with Rails: Know your options</title>
      <link href="https://ledermann.dev/blog/2018/06/21/swagger-with-rails-know-your-options/" rel="alternate" type="text/html" title="Swagger with Rails: Know your options"/>
      <published>2018-06-21T00:00:00.000Z</published>
      <updated>2018-06-21T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2018/06/21/swagger-with-rails-know-your-options</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="Ruby on Rails"/>
      <category term="API"/>
      <summary type="html">Hand-written API docs are already wrong by the time you merge. Three Rails gems generate them from the source instead, and they disagree about how.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.CH61IQwt.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.CH61IQwt.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
  <entry xml:lang="en">
      <title type="html">Exif analyzer for Active Storage</title>
      <link href="https://ledermann.dev/blog/2018/05/15/exif-analyzer-for-active-storage/" rel="alternate" type="text/html" title="Exif analyzer for Active Storage"/>
      <published>2018-05-15T00:00:00.000Z</published>
      <updated>2018-05-15T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2018/05/15/exif-analyzer-for-active-storage</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="Ruby on Rails"/>
      <category term="Active Storage"/>
      <summary type="html">Most photos your users upload know exactly where they were taken. Active Storage throws that away, so I wrote a small analyzer that keeps it.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.-h_yo337.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.-h_yo337.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
  <entry xml:lang="en">
      <title type="html">Dockerize and configure a JavaScript single-page application</title>
      <link href="https://ledermann.dev/blog/2018/04/27/dockerize-and-configure-javascript-single-page-application/" rel="alternate" type="text/html" title="Dockerize and configure a JavaScript single-page application"/>
      <published>2018-04-27T00:00:00.000Z</published>
      <updated>2018-04-27T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2018/04/27/dockerize-and-configure-javascript-single-page-application</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="JavaScript"/>
      <category term="Docker"/>
      <category term="nginx"/>
      <summary type="html">Packing a compiled single-page app into a Docker image is easy. The harder part is making one image behave differently in staging and production without rebuilding it.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.oyUi-h8G.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.oyUi-h8G.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
  <entry xml:lang="en">
      <title type="html">Dockerize Rails, the lean way</title>
      <link href="https://ledermann.dev/blog/2018/04/19/dockerize-rails-the-lean-way/" rel="alternate" type="text/html" title="Dockerize Rails, the lean way"/>
      <published>2018-04-19T00:00:00.000Z</published>
      <updated>2018-04-19T00:00:00.000Z</updated>
      <id>https://ledermann.dev/blog/2018/04/19/dockerize-rails-the-lean-way</id>
      <author><name>Georg Ledermann</name></author>
      <category term="blog"/>
      <category term="Docker"/>
      <category term="Ruby on Rails"/>
      <summary type="html">My Rails Docker image started at 1.6 GB. With an Alpine base and multi-stage builds I got it down to 329 MB.</summary>
      <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ledermann.dev/_astro/feature.CwhudxQd.jpg"/>
      <media:content medium="image" url="https://ledermann.dev/_astro/feature.CwhudxQd.jpg" xmlns:media="http://search.yahoo.com/mrss/"/>
    </entry>
</feed>
