<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog</title>
    <link>https://albertogrespan.com/</link>
    <description>Recent content on Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 31 Aug 2021 22:52:50 -0400</lastBuildDate>
    <atom:link href="https://albertogrespan.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>UniFi Network Controller Install in a Raspberry Pi</title>
      <link>https://albertogrespan.com/blog/unifi-network-controller-install-in-a-raspberry-pi/</link>
      <pubDate>Tue, 31 Aug 2021 22:52:50 -0400</pubDate>
      <guid>https://albertogrespan.com/blog/unifi-network-controller-install-in-a-raspberry-pi/</guid>
      <description>&lt;p&gt;Simple and direct instructions on how to install the UniFi Network Controller in&#xA;a Raspberry Pi. I&amp;rsquo;ve only tested this in Raspberry Pi OS, but it should also&#xA;work in Ubuntu.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not going to show how to install Raspberry Pi OS. I assume at this point you&#xA;have a fresh installation of the OS. See the official website for &lt;a href=&#34;https://www.raspberrypi.org/software/&#34;&gt;installation&#xA;instructions&lt;/a&gt;, and &lt;a href=&#34;https://www.raspberrypi.org/documentation/computers/remote-access.html#remote-access&#34;&gt;remote access&lt;/a&gt; to the&#xA;Raspberry Pi.&lt;/p&gt;&#xA;&lt;h2 id=&#34;rename-hostname&#34;&gt;Rename hostname&lt;/h2&gt;&#xA;&lt;p&gt;We want to ensure the Raspberry Pi has the correct Hostname. In my case I have&#xA;dnsmasq in my network and I reach hosts by their hostnames. You can check the&#xA;following post on &lt;a href=&#34;https://www.ctrl.blog/entry/homenet-domain-name.html&#34;&gt;domain names for home networks&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Klipper on an Ender 3</title>
      <link>https://albertogrespan.com/blog/3d-printing/klipper-on-an-ender-3/</link>
      <pubDate>Mon, 11 Jan 2021 00:35:47 -0400</pubDate>
      <guid>https://albertogrespan.com/blog/3d-printing/klipper-on-an-ender-3/</guid>
      <description>&lt;p&gt;This post will take you through the process of getting &lt;a href=&#34;https://www.klipper3d.org&#34;&gt;Klipper&lt;/a&gt; up and&#xA;running from my experience of doing so on an Ender 3 Pro with some mods. I&amp;rsquo;m&#xA;going to try to keep this post as up to date as possible while I learn/use new&#xA;things.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-klipper&#34;&gt;Whats Klipper?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://www.klipper3d.org&#34;&gt;Klipper&lt;/a&gt; is a 3d-Printer firmware. It combines the power of a general&#xA;purpose computer with one or more micro-controllers.&lt;/em&gt; — Klipper Website&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flashing QMK on a WhiteFox Mechanical Keyboard</title>
      <link>https://albertogrespan.com/blog/mk/flashing-qmk-on-a-whitefox/</link>
      <pubDate>Wed, 05 Feb 2020 23:08:54 -0400</pubDate>
      <guid>https://albertogrespan.com/blog/mk/flashing-qmk-on-a-whitefox/</guid>
      <description>&lt;p&gt;Awhile back I had this itch of wanting to try a different firmware for my then&#xA;recent mechanical keyboard. By that time I was also completely new to the&#xA;mechanical keyboard world. To get some new layout for the keyboard I had to jump&#xA;into a website, select my keyboard layout and start putting things together, it&#xA;was very straight forward. Some time after I started wondering if I could put a&#xA;different firmware on the keyboard. I found &lt;a href=&#34;https://github.com/tmk/tmk_keyboard&#34;&gt;TMK&lt;/a&gt; and the fork with wider&#xA;adoption &lt;a href=&#34;https://qmk.fm&#34;&gt;QMK&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lessons From 3D Printing</title>
      <link>https://albertogrespan.com/blog/3d-printing/lessons-from-3d-printing/</link>
      <pubDate>Sat, 16 Nov 2019 18:08:43 -0400</pubDate>
      <guid>https://albertogrespan.com/blog/3d-printing/lessons-from-3d-printing/</guid>
      <description>&lt;p&gt;This post talks about my experiences with 3D printing while using and Ender 3&#xA;Pro, what I&amp;rsquo;ve learned, misses and recommendations. My intention with this post&#xA;will be to keep it up to date with my latest findings.&lt;/p&gt;&#xA;&lt;h2 id=&#34;calibration&#34;&gt;Calibration&lt;/h2&gt;&#xA;&lt;p&gt;Calibration is important no matter what; to get good prints you&amp;rsquo;ll have to&#xA;calibrate: Extruder steps (e-steps), flow rate multiplier, and PID.&lt;/p&gt;&#xA;&lt;h3 id=&#34;extruder-steps-e-steps&#34;&gt;Extruder steps &amp;ldquo;e-steps&amp;rdquo;&lt;/h3&gt;&#xA;&lt;p&gt;Depending on your printer setup, if it&amp;rsquo;s bowden or direct you&amp;rsquo;ll calibrate your&#xA;e-steps differently. In any bowden setup it&amp;rsquo;s recommended that you calibrate the&#xA;extruder through free air, this means that you&amp;rsquo;ll need to detach the tube&#xA;closest the hotend, extrude and measure the distance of the filament, repeat the&#xA;process multiple times until satisfied. Doing the calibration this way will&#xA;ensure a proper calibration of the extruder motor in isolation. For direct&#xA;setups the process is going directly through the nozzle.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hello, Hugo</title>
      <link>https://albertogrespan.com/blog/hello-hugo/</link>
      <pubDate>Sun, 13 Aug 2017 10:00:11 -0400</pubDate>
      <guid>https://albertogrespan.com/blog/hello-hugo/</guid>
      <description>&lt;p&gt;Today I&amp;rsquo;m writing my first blog post generated by &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt;. Hugo is static&#xA;site generator written in &lt;a href=&#34;https://golang.org&#34;&gt;Go&lt;/a&gt;. A couple of months ago (maybe more) I decided&#xA;to move my personal blog from &lt;a href=&#34;https://jekyllrb.com&#34;&gt;Jekyll&lt;/a&gt; to Hugo out of curiosity. Yes,&#xA;Hugo is indeed much faster and has a lot of great features, but it lacks some&#xA;things that Jekyll provided (at least for me), such as ad hoc &lt;a href=&#34;http://sass-lang.com&#34;&gt;Sass&lt;/a&gt;&#xA;integration, syntax highlighting with &lt;a href=&#34;http://rouge.jneen.net&#34;&gt;Rouge&lt;/a&gt;, and automatic deploys to&#xA;&lt;a href=&#34;https://pages.github.com&#34;&gt;GitHub Pages&lt;/a&gt;, either way I decided to dig into Hugo, read the&#xA;documentation on some of the core parts, and used the migration tool to move my&#xA;posts. It all went very well, the migration was seamless until I tried adapting&#xA;my Jekyll layout into Hugo.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dockerfile for Ruby applications</title>
      <link>https://albertogrespan.com/blog/dockerfile-for-ruby-applications/</link>
      <pubDate>Sat, 18 Jul 2015 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/dockerfile-for-ruby-applications/</guid>
      <description>&lt;p&gt;There are different ways you can deploy your Ruby applications in a Docker&#xA;container. You can either choose one of the many existing Ruby images on the&#xA;&lt;a href=&#34;https://registry.hub.docker.com/search?q=ruby&amp;amp;searchfield=&#34;&gt;public docker registry&lt;/a&gt;, use it as your base and adapt it&#xA;to your needs or&amp;hellip; build your own Ruby base image from scratch based on your&#xA;favorite OS and then build your application image on top of it.&lt;/p&gt;&#xA;&lt;p&gt;In this post we are going through the whole process of building the Ruby image&#xA;from scratch based on the official Ubuntu 14.04 container. We will also create&#xA;an onbuild image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introduction to HTTP testing in Go</title>
      <link>https://albertogrespan.com/blog/introduction-to-http-testing-in-go/</link>
      <pubDate>Sat, 13 Jun 2015 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/introduction-to-http-testing-in-go/</guid>
      <description>&lt;p&gt;This post will be focused on a very basic introduction to HTTP testing in Go.&#xA;Our goal will be to test a handler named &lt;code&gt;helloHandler&lt;/code&gt; that responds with a&#xA;custom header and a &lt;code&gt;Hello World!&lt;/code&gt; body using only Go build-in Packages.&lt;/p&gt;&#xA;&lt;h2 id=&#34;creating-the-hellohandler&#34;&gt;Creating the helloHandler&lt;/h2&gt;&#xA;&lt;p&gt;Creating our simple HTTP handler for our desired endpoint should be something&#xA;like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// main.go&#xA;package main&#xA;&#xA;import (&#xA;    &amp;quot;log&amp;quot;&#xA;    &amp;quot;net/http&amp;quot;&#xA;)&#xA;&#xA;func helloHandler(w http.ResponseWriter, r *http.Request) {&#xA;    w.Header().Set(&amp;quot;X-Hello-World-Type&amp;quot;, &amp;quot;hello.v1&amp;quot;)&#xA;    w.Write([]byte(&amp;quot;Hello World!&amp;quot;))&#xA;}&#xA;&#xA;func main() {&#xA;    http.HandleFunc(&amp;quot;/&amp;quot;, helloHandler)&#xA;&#xA;    log.Fatal(http.ListenAndServe(&amp;quot;:3000&amp;quot;, nil))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s see how our simple &lt;code&gt;helloHandler&lt;/code&gt; works by using &lt;a href=&#34;http://curl.haxx.se/&#34;&gt;cURL&lt;/a&gt; on&#xA;&lt;code&gt;localhost:3000/&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>My most used git aliases</title>
      <link>https://albertogrespan.com/blog/my-most-used-git-aliases/</link>
      <pubDate>Mon, 30 Mar 2015 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/my-most-used-git-aliases/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;tl;dr short description of my most used git aliases.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;In this post I&amp;rsquo;ll be talking about my most used git aliases in no particular&#xA;order. I&amp;rsquo;m going to throw all of my &lt;code&gt;.gitconfig&lt;/code&gt; in here and that&amp;rsquo;s all.&lt;/p&gt;&#xA;&lt;p&gt;I believe git is one of the greatest pieces of software ever made. It&amp;rsquo;s a&#xA;functional tool that &lt;em&gt;just works&lt;/em&gt;. If you use git on daily basis I bet you type&#xA;&lt;code&gt;git&lt;/code&gt; at least a hundreds of times a day. Aliases are a way to mitigate some&#xA;large, repeated or painful to type commands, they can be added globally (hole&#xA;system) or locally (one repo only). I&amp;rsquo;ll use alias globally on the post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating DigitalOcean images with Packer</title>
      <link>https://albertogrespan.com/blog/creating-digitalocean-images-with-packer/</link>
      <pubDate>Tue, 17 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/creating-digitalocean-images-with-packer/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; create a simple DigitalOcean Ubuntu 14.04 image that uses shell a&#xA;provisioner to install Docker.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;This post will guide you through the steps needed to create a simple&#xA;DigitalOcean Ubuntu 14.04 image with the latest Docker and Kernel installed.&#xA;This is in a way like creating our own &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-docker-application&#34;&gt;DigitalOcean Docker&#xA;application&lt;/a&gt; image.  We&amp;rsquo;ll use a shell script as provisioner for&#xA;this Packer template.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;notes:&lt;/strong&gt; we assume that Packer is already installed on the system, refer to&#xA;the installation docs &lt;a href=&#34;https://packer.io/docs/installation.html&#34;&gt;here&lt;/a&gt;. You could use CentOS or any other&#xA;distro available at DigitalOcean in the same way. The script will need some&#xA;package manager adaptation and that&amp;rsquo;s all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rack middleware</title>
      <link>https://albertogrespan.com/blog/rack-middleware/</link>
      <pubDate>Sat, 31 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/rack-middleware/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;tl;dr we are creating two Rack middlewares, one that adds a custom header to&#xA;all responses and one that adds a new route with a custom response.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;As explained in a previous post about &lt;a href=&#34;http://albertogrespan.com/blog/rack-basics/&#34;&gt;Rack basics&lt;/a&gt;, Rack is found&#xA;on the most popular Ruby web frameworks, as it&amp;rsquo;s an adaptable interface for&#xA;developing web applications. In this post we are going to create two simple&#xA;middlewares. The first one will add a custom header to all responses, the second&#xA;one will add a custom route that responds to &lt;code&gt;/ping&lt;/code&gt; and to glue it all together&#xA;we are using &lt;code&gt;Rack::Builder&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extending Doorkeeper models in Rails</title>
      <link>https://albertogrespan.com/blog/extending-doorkeeper-models-in-rails/</link>
      <pubDate>Thu, 15 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/extending-doorkeeper-models-in-rails/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;tl;dr use &lt;code&gt;class_eval&lt;/code&gt; to extend Doorkeeper models functionality in runtime.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;A few weeks ago at work, we were extending our very basic OAuth2 provider by&#xA;adding the possibility to either login with Google OAuth2 or with our own. With&#xA;that we also did a role based level of authorization, nothing complex&amp;hellip; but, as&#xA;we are using Doorkeeper for the OAuth2 we needed new validations, associations&#xA;and a couple of new methods in one of their models to fulfill our needs. To&#xA;achieve this we used &lt;code&gt;class_eval&lt;/code&gt; inside a Rails initializer that allowed us to&#xA;extend the model in runtime without touching the code inside the gem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a DSL in Ruby</title>
      <link>https://albertogrespan.com/blog/writing-a-dsl-in-ruby/</link>
      <pubDate>Mon, 29 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/writing-a-dsl-in-ruby/</guid>
      <description>&lt;p&gt;A Domain Specific Language or DSL is a mini language focused in solving a&#xA;particular type of problem. That said, it&amp;rsquo;s not a general purpose language like&#xA;Ruby. Writing a DSL can help us improve the code base by making it more&#xA;readable.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve used Rails, you&amp;rsquo;ve used and seen tons of DSLs. &lt;em&gt;e.g&lt;/em&gt; inside&#xA;migrations, configuration files etc&amp;hellip; DSLs in Ruby are a common thing and we&#xA;are making a simple but useful example in this post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rack basics</title>
      <link>https://albertogrespan.com/blog/rack-basics/</link>
      <pubDate>Sun, 30 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/rack-basics/</guid>
      <description>&lt;p&gt;If you like programming in Ruby it&amp;rsquo;s plausible that you&amp;rsquo;ve used or heard about&#xA;Rack&amp;hellip; After all Sinatra, Grape and Rails use Rack as a common interface.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-rack-and-how-does-it-work&#34;&gt;What&amp;rsquo;s Rack and how does it work&lt;/h2&gt;&#xA;&lt;p&gt;According to &lt;a href=&#34;http://en.wikipedia.org/wiki/Rack_%28web_server_interface%29&#34;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Rack provides a minimal, modular and adaptable interface for developing Web&#xA;applications in Ruby. By wrapping HTTP requests and responses in the simplest&#xA;way possible, it unifies and distills the API for Web servers, Web frameworks,&#xA;and software in between (the so-called middleware) into a single method call.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Error: client and server don&#39;t have same version</title>
      <link>https://albertogrespan.com/blog/error-client-and-server-dont-have-same-version/</link>
      <pubDate>Sat, 08 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/error-client-and-server-dont-have-same-version/</guid>
      <description>&lt;p&gt;When using Docker through Boot2docker there is a possibility you&amp;rsquo;ve seen:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Error: client and server don&amp;rsquo;t have same version (client : X, server: X)&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;This error occurs because the version of Docker installed on the Boot2docker&#xA;image and the version of Docker installed on the host machine (your mac) are not&#xA;the same.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ docker version&#xA;Client version: 1.3.0&#xA;Client API version: 1.15&#xA;Go version (client): go1.3.3&#xA;Git commit (client): c78088f&#xA;OS/Arch (client): darwin/amd64&#xA;2014/11/03 13:21:38 Error response from daemon: client and server don&#39;t have same version (client : 1.15, server: 1.14)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Or&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging your vimrc</title>
      <link>https://albertogrespan.com/blog/debugging-your-vimrc/</link>
      <pubDate>Sun, 02 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/debugging-your-vimrc/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; this is a short guide on how to debug your &lt;code&gt;.vimrc&lt;/code&gt; and hopefully it&#xA;will help you find what&amp;rsquo;s making Vim slower or inconsistent.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;A few days ago I added a bunch of new settings to my &lt;code&gt;.vimrc&lt;/code&gt; that made my&#xA;motion sluggish. This was happening in MacVim and in Vim and it was making me&#xA;mad because apart from being slow, Vim was using a lot of CPU and with large&#xA;files it was unbearable. After being fed up with this I hopped on IRC and joined&#xA;the &lt;strong&gt;#vim&lt;/strong&gt; channel to ask knowledgeable people how can I debug my Vim&#xA;configuration. A kind user named &lt;strong&gt;watabou&lt;/strong&gt; (I believe) first pointed me to&#xA;&lt;a href=&#34;https://github.com/dahu/bisectly&#34;&gt;Bisectly&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CSV file reading in Ruby</title>
      <link>https://albertogrespan.com/blog/csv-file-reading-in-ruby/</link>
      <pubDate>Sun, 26 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/csv-file-reading-in-ruby/</guid>
      <description>&lt;p&gt;In the recent days I&amp;rsquo;ve started using CSV files more and more for data&#xA;manipulation, specifically for database seeding. CSV is a super easy to use and&#xA;it doesn&amp;rsquo;t require a complex text editor&amp;hellip; Google Spreadsheets or VIM will work&#xA;great.&lt;/p&gt;&#xA;&lt;p&gt;This post I will show how to read data from &lt;code&gt;.csv&lt;/code&gt; file and dumping it in a Ruby&#xA;Array of Hashes. It will also show how to seed a Rails database.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Diagnosing the network with Ping, Traceroute and MTR</title>
      <link>https://albertogrespan.com/blog/diagnosing-the-network-with-ping-traceroute-and-mtr/</link>
      <pubDate>Sun, 12 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/diagnosing-the-network-with-ping-traceroute-and-mtr/</guid>
      <description>&lt;p&gt;When you deal with a really bad internet connection everyday, as I do, you&#xA;probably diagnose the network more frequently than usual and after that you&#xA;call your ISP and explain to a person (that may think you are crazy) how you&#xA;are having packet loss in a hop that belongs to them. Yes, you have to do this&#xA;as many times as you can, until you get someone at the other end of the phone&#xA;call that understand what&amp;rsquo;s happening and sends someone to solve the issue, if&#xA;possible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing platform specific gems with Bundler</title>
      <link>https://albertogrespan.com/blog/installing-platform-specific-gems-with-bundler/</link>
      <pubDate>Fri, 10 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/installing-platform-specific-gems-with-bundler/</guid>
      <description>&lt;p&gt;Sometimes we&amp;rsquo;ll need to install specific gems to make our project compatible in&#xA;different platforms such as MRI, Rubinius, a particular Ruby version, JRuby,&#xA;windows, etc&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;As you may know, dependency management in Ruby is done through&#xA;&lt;a href=&#34;http://bundler.io/&#34;&gt;Bundler&lt;/a&gt; Gemfile. Bundler comes with a handy CLI command that can&#xA;help us gather some information about our current platform and help us see a&#xA;bigger picture of what&amp;rsquo;s going on with our project Gemfile e.g:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploying Jekyll with Mina and rbenv</title>
      <link>https://albertogrespan.com/blog/deploying-jekyll-with-mina-and-rbenv/</link>
      <pubDate>Sun, 05 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/deploying-jekyll-with-mina-and-rbenv/</guid>
      <description>&lt;p&gt;The purpose of this post is to show how to deploy a &lt;a href=&#34;http://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt; site using&#xA;&lt;a href=&#34;http://nadarei.co/mina/&#34;&gt;Mina&lt;/a&gt; and it will not show how to serve the site with NGINX or Apache or&#xA;install any dependencies like Ruby or rbenv on the server.&lt;/p&gt;&#xA;&lt;p&gt;Even though we are not focusing in the things we mentioned above we&amp;rsquo;ll need a&#xA;running machine them installed:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ruby managed from rbenv&lt;/li&gt;&#xA;&lt;li&gt;NGINX or Apache&lt;/li&gt;&#xA;&lt;li&gt;If deploying from a private repo a new ssh keypair&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installing-mina&#34;&gt;Installing Mina&lt;/h2&gt;&#xA;&lt;p&gt;As Mina is just a gem we will use the &lt;code&gt;gem&lt;/code&gt; command to install it or just add&#xA;it to your Gemfile and &lt;code&gt;bundle&lt;/code&gt; it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing Go on OS X</title>
      <link>https://albertogrespan.com/blog/installing-golang-on-os-x/</link>
      <pubDate>Sun, 24 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/installing-golang-on-os-x/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; this are my notes for installing Go (Golang) on OS X using hombrew,&#xA;adding command completions on ZSH, a single GOPATH and all around clean install.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Today we&amp;rsquo;ll install the Go programming language and dependencies using OS X&#xA;&lt;a href=&#34;http://brew.sh/&#34;&gt;Homebrew&lt;/a&gt;. Keep in mind that this is an specific OS X installation. If&#xA;you need to install Go on Ubuntu you can follow &lt;a href=&#34;https://code.google.com/p/go-wiki/wiki/Ubuntu&#34;&gt;this guide&lt;/a&gt;, after&#xA;that you can just go on with this tutorial.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Delete stopped &amp; untagged docker images</title>
      <link>https://albertogrespan.com/blog/delete-stopped-and-untagged-docker-images/</link>
      <pubDate>Mon, 09 Jun 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/delete-stopped-and-untagged-docker-images/</guid>
      <description>&lt;p&gt;If you want or need first stop the containers&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ docker stop $(docker ps -a -q)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Delete all stopped containers&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ docker rm $(docker ps -a -q)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Delete all untagged images (TAG: &lt;code&gt;&amp;lt;none&amp;gt;&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ docker rmi $(docker images | awk &#39;/^&amp;lt;none&amp;gt;/ { print $3 }&#39;)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Installing Ruby the right way on OS X using rbenv</title>
      <link>https://albertogrespan.com/blog/installing-ruby-the-right-way-on-os-x-using-rbenv/</link>
      <pubDate>Tue, 13 May 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/installing-ruby-the-right-way-on-os-x-using-rbenv/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; there are millions of posts about installing Ruby using rbenv in OS X.&#xA;Most of them miss the point about installing LibYAML and Readline on your&#xA;system, but they also miss some of the best rbenv plugins that will help your&#xA;workflow tremendously. In this post I&amp;rsquo;ll handle it.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;I know that Ruby is not the easiest language to install, there are many details&#xA;and decisions to handle before installing it. I believe everyone has the same&#xA;questions at some point &lt;em&gt;e.g.&lt;/em&gt; Is RVM better than rbenv, or chruby? Do I install&#xA;Ruby directly without a version manager? and so on&amp;hellip; I do believe the answers&#xA;to those questions are a personal decision, a bit of research will be implied,&#xA;but you will find your answers. For me there is no &amp;ldquo;perfect&amp;rdquo; tool, so, if you&#xA;are currently using RVM or chruby and you like them and they work well for you,&#xA;just keep using them until you find something you dislike.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Always prune remote-tracking branches</title>
      <link>https://albertogrespan.com/blog/always-prune-remote-tracking-branches/</link>
      <pubDate>Sun, 20 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/always-prune-remote-tracking-branches/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; after version 1.8.5 of git, you can now configure it to&#xA;automatically prune remote-tracking branches with every fetch/pull.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Before Git version 1.8.5 if you wanted to prune remote-tracking branches you&#xA;where forced to use/remember the &lt;code&gt;git fetch --prune&lt;/code&gt; command, even if your&#xA;workflow didn&amp;rsquo;t involve fetching directly with the &lt;code&gt;fetch&lt;/code&gt; command. For that&#xA;reason if you find yourself pulling and then using an alias or just typing &lt;code&gt;git fetch --prune&lt;/code&gt; every once in a while, this new Git configuration is perfect for&#xA;you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rake tasks &amp; Jekyll posts</title>
      <link>https://albertogrespan.com/blog/rake-tasks-and-jekyll-posts/</link>
      <pubDate>Sun, 23 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/rake-tasks-and-jekyll-posts/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; use Rake tasks to create drafts/posts in Jekyll.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Creating a draft or a new post is a repetitive task. If you are like me and&#xA;often forget about things you probably need some automation in your life; if you&#xA;don&amp;rsquo;t, you can use this and start forgetting.&lt;/p&gt;&#xA;&lt;p&gt;In this post I&amp;rsquo;ll be talking about some Rake tasks I use that help me create and&#xA;publish drafts for my Jekyll blog.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Heroku scheduler and Rails rake tasks</title>
      <link>https://albertogrespan.com/blog/heroku-scheduler-and-rails-rake-tasks/</link>
      <pubDate>Fri, 07 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/heroku-scheduler-and-rails-rake-tasks/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; we are using the heroku scheduler with Rails and Rake to keep our&#xA;dyno awake; this will also work for any custom short periodical task.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;heroku-scheduler&#34;&gt;Heroku scheduler&lt;/h2&gt;&#xA;&lt;p&gt;The Heroku scheduler is a &amp;ldquo;free&amp;rdquo; application add-on that helps you run short&#xA;tasks every 10, 60 or 3600 minutes. You can use it as much as you want per&#xA;month, but &lt;em&gt;AFAIK&lt;/em&gt; it uses minutes from your dynos. That said, be careful if you&#xA;are on a tight budget.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Commit subdirectoy application to Heroku</title>
      <link>https://albertogrespan.com/blog/commit-subdirectoy-app-to-heroku/</link>
      <pubDate>Sun, 27 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/commit-subdirectoy-app-to-heroku/</guid>
      <description>&lt;p&gt;Directory structure:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.&#xA;├── LICENSE&#xA;├── README.md&#xA;├── express&#xA;│   ├── Procfile&#xA;│   ├── README.md&#xA;│   ├── app.js&#xA;│   ├── models&#xA;│   │   └── user.js&#xA;│   ├── ormConfig.js&#xA;│   ├── package.json&#xA;│   └── seeds.js&#xA;└── railsapi&#xA;    ├── Gemfile&#xA;    ├── Gemfile.lock&#xA;    ├── Procfile&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you want to commit any of the projects &lt;code&gt;express&lt;/code&gt; or &lt;code&gt;railsapi&lt;/code&gt; to Heroku you&#xA;can use this command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ git subtree push --prefix railsapi heroku master&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Command or control enter in bootstrap forms</title>
      <link>https://albertogrespan.com/blog/command-or-control-enter-in-bootstrap-forms/</link>
      <pubDate>Sat, 13 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/command-or-control-enter-in-bootstrap-forms/</guid>
      <description>&lt;p&gt;Using command enter to submit:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$(document).on(&#39;keydown&#39;, &#39;.controls &amp;gt; .text, .controls &amp;gt; .string&#39;, function(event) {&#xA;  if(event.keyCode == 13 &amp;amp;&amp;amp; (event.metaKey || event.ctrlKey)) {&#xA;    $(&#39;input.btn.submit-helper&#39;).click();&#xA;  }&#xA;});&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add a helper class to your submit button to identify it.&lt;/li&gt;&#xA;&lt;li&gt;If you want to target normal inputs use .text and to target textareas use&#xA;.string or use both.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>jQuery scrollTo with pushState</title>
      <link>https://albertogrespan.com/blog/jQuery-scrollTo-with-pushState/</link>
      <pubDate>Sat, 13 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/jQuery-scrollTo-with-pushState/</guid>
      <description>&lt;p&gt;pushState:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$(document).ready(function() {&#xA;  $(&#39;.nav-scroller &amp;gt; li &amp;gt; a&#39;).click(function(){&#xA;    var myUri = $(this).attr(&#39;href&#39;);&#xA;      $(&#39;html,body&#39;).animate({&#xA;         scrollTop: $(&#39;#&#39; + $(this).prop(&#39;class&#39;)).offset().top&#xA;      }, 500);&#xA;      history.pushState(&#39;&#39;, document.title, myUri);&#xA;      return false;&#xA;  });&#xA;});&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Every navigation anchor element needs a unique class name.&lt;/li&gt;&#xA;&lt;li&gt;The target elements needs the same unique class name but as id.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>ScrollTo Top using jQuery and Font Awesome icon</title>
      <link>https://albertogrespan.com/blog/scrollTo-Top-using-jQuery/</link>
      <pubDate>Sat, 13 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/scrollTo-Top-using-jQuery/</guid>
      <description>&lt;p&gt;Scrolling JavaScript:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$(function() {&#xA;  var viewPortWidth = $(window).width();&#xA;&#xA;  $(window).scroll(function(event) {&#xA;    event.preventDefault();&#xA;    if (viewPortWidth &amp;gt; 480) {&#xA;      if ($(this).scrollTop() &amp;gt; 180) {&#xA;        $(&#39;.scrollTo-top&#39;).fadeIn();&#xA;      } else {&#xA;        $(&#39;.scrollTo-top&#39;).fadeOut();&#xA;      }&#xA;    }&#xA;  });&#xA;&#xA;  $(&#39;.scrollTo-top&#39;).click(function(event) {&#xA;    $(&#39;html, body&#39;).animate({scrollTop : 0 }, 600);&#xA;    event.preventDefault();&#xA;  });&#xA;});&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Add the Font Awesome Angle Double Up icon.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;scrollTo-top&amp;quot; style=&amp;quot;display: inline;&amp;quot;&amp;gt;&#xA;  &amp;lt;i class=&amp;quot;fa fa-angle-double-up&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&#xA;&amp;lt;/a&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The scss style for the scrollTo-Top button using a Font Awesome icon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Send emails in the background using sucker punch</title>
      <link>https://albertogrespan.com/blog/send-emails-in-the-background-using-sucker-punch/</link>
      <pubDate>Sat, 13 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/send-emails-in-the-background-using-sucker-punch/</guid>
      <description>&lt;h2 id=&#34;sucker-punch-gem&#34;&gt;Sucker punch gem&lt;/h2&gt;&#xA;&lt;p&gt;This gem was created by &lt;a href=&#34;https://twitter.com/brandonhilkert&#34;&gt;@brandonhilkert&lt;/a&gt;&#xA;with a very specific use case in mind. I&amp;rsquo;m not sure what the use case was, but,&#xA;I believe it&amp;rsquo;s something like; taking advantage of &lt;a href=&#34;http://heroku.com&#34;&gt;Heroku&lt;/a&gt;&#xA;web dynos, without needing to pay extra for a worker dyno (this is what I&amp;rsquo;m&#xA;using it for). If It&amp;rsquo;s not; I&amp;rsquo;m leaning towards simplicity. At this point with&#xA;&lt;a href=&#34;https://github.com/brandonhilkert/sucker_punch&#34;&gt;sucker_punch&lt;/a&gt; in it&amp;rsquo;s &lt;strong&gt;version&#xA;1.0.1&lt;/strong&gt; became dead simple to install and use, no configuration needed. I&amp;rsquo;m&#xA;really grateful that this gem was created.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running multiple domains or subdomains in NGINX using Server Blocks in Ubuntu</title>
      <link>https://albertogrespan.com/blog/running-multiple-domains-or-subdomains-in-nginx-with-server-blocks/</link>
      <pubDate>Tue, 04 Dec 2012 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/running-multiple-domains-or-subdomains-in-nginx-with-server-blocks/</guid>
      <description>&lt;p&gt;Have you ever wonder; how can I have multiple domains or subdomains pointing to&#xA;different projects but all of them are in just one server? well&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;This will be a very simple tutorial for doing that, with NGINX.&lt;/p&gt;&#xA;&lt;h3 id=&#34;tutorial-tasks&#34;&gt;tutorial tasks:&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Creating or pointing domains/subdomains to the server&amp;rsquo;s IP address&lt;/li&gt;&#xA;&lt;li&gt;Setup NGINX&lt;/li&gt;&#xA;&lt;li&gt;Create a directory to keep the project&lt;/li&gt;&#xA;&lt;li&gt;Change folder permissions&lt;/li&gt;&#xA;&lt;li&gt;Create a simple html page to display&lt;/li&gt;&#xA;&lt;li&gt;Create a new Server Block with your domain or subdomain&lt;/li&gt;&#xA;&lt;li&gt;Setup and link the Server Block&lt;/li&gt;&#xA;&lt;li&gt;Restart NGINX&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;1-creating-or-pointing-domainssubdomains-to-the-servers-ip-address&#34;&gt;1. Creating or pointing domains/subdomains to the server&amp;rsquo;s ip address&lt;/h3&gt;&#xA;&lt;p&gt;Go to your domain register or to the DNS where your domain records are stored&#xA;and point them to your server ip address (you can do this with a subdomain too).&#xA;If you are trying this locally modify the &lt;code&gt;/etc/hosts&lt;/code&gt; files and create a new&#xA;record.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The UNIX Operating System</title>
      <link>https://albertogrespan.com/blog/the-unix-operating-system/</link>
      <pubDate>Sun, 23 Sep 2012 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/the-unix-operating-system/</guid>
      <description>&lt;h2 id=&#34;the-unix-system-making-computers-more-productive&#34;&gt;&amp;ldquo;The UNIX System: Making Computers More Productive&amp;rdquo;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;If you work on a Unix-like operating system this video is a must watch! no&#xA;excuses!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/tc4ROCJYbm0&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&amp;ldquo;This film &amp;ldquo;The UNIX System: Making Computers More Productive&amp;rdquo;, is one of two&#xA;that Bell Labs made in 1982 about UNIX&amp;rsquo;s significance, impact and usability.&#xA;Even 10 years after its first installation, it&amp;rsquo;s still an introduction to the&#xA;system. The other film, &amp;ldquo;The UNIX System: Making Computers Easier to Use&amp;rdquo;, is&#xA;roughly the same, only a little shorter. The former film was geared towards&#xA;software developers and computer science students, the latter towards&#xA;programmers specifically.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I did this site using Jekyll and GitHub pages</title>
      <link>https://albertogrespan.com/blog/jekyll-github-pages-blog-tutorial/</link>
      <pubDate>Fri, 10 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/blog/jekyll-github-pages-blog-tutorial/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt;: This post is deprecated by newer versions of Jekyll. You can&#xA;probably summarize all this post with a &lt;code&gt;jekyll new&lt;/code&gt; command.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;so-how-i-did-this-jekyll-site&#34;&gt;So, How I did this Jekyll site?&lt;/h2&gt;&#xA;&lt;p&gt;This site is runing on &lt;a href=&#34;http://pages.github.com/&#34;&gt;GitHub Pages&lt;/a&gt; and is using &lt;a href=&#34;http://github.com/mojombo/jekyll/&#34;&gt;Jekyll&lt;/a&gt; for&#xA;the layouts and blog posts. In this post I will guide you through the steps for&#xA;you to build your own site using Jekyll.&lt;/p&gt;&#xA;&lt;h3 id=&#34;lets-start-from-the-beginning-whats-jekyll&#34;&gt;Let&amp;rsquo;s start from the beginning what&amp;rsquo;s Jekyll?&lt;/h3&gt;&#xA;&lt;p&gt;&amp;ldquo;Jekyll is a simple, blog aware, static site generator. It takes a template&#xA;directory (representing the raw form of a website), runs it through Textile or&#xA;Markdown and Liquid converters, and spits out a complete, static website&#xA;suitable for serving with Apache or your favorite web server&amp;rdquo; and it was made by&#xA;Tom Preston-Werner, Nick Quaranto, and many awesome contributors! THANKS!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reliability Engineer - Résumé</title>
      <link>https://albertogrespan.com/resume/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://albertogrespan.com/resume/</guid>
      <description>&lt;h1 id=&#34;alberto-grespan&#34;&gt;&lt;a href=&#34;https://albertogrespan.com&#34;&gt;Alberto Grespan&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;em&gt;Senior Software Engineer&lt;/em&gt; - Caracas, Venezuela&lt;br&gt;&#xA;&lt;a href=&#34;mailto:alberto@albertogrespan.com&#34;&gt;alberto@albertogrespan.com&lt;/a&gt; -&#xA;&lt;a href=&#34;https://github.com/albertogg&#34;&gt;github.com/albertogg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;skills&#34;&gt;Skills&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Languages and APIs: Ruby, JRuby, Go, Python, TypeScript, Rust, Java; Ruby&#xA;Grape, Akka, Rails, FastAPI.&lt;/li&gt;&#xA;&lt;li&gt;Infrastructure and delivery: AWS (ECS, EKS), Nomad, Vault, Terraform,&#xA;CloudFormation, Ansible, GitHub Actions, Bitbucket Pipelines, GitLab, AWS&#xA;CodePipeline.&lt;/li&gt;&#xA;&lt;li&gt;Databases and open source: MySQL, PostgreSQL, VoltDB; &lt;a href=&#34;https://github.com/full360/voltdb-client-jruby&#34;&gt;VoltDB client for&#xA;JRuby&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;professional-experience&#34;&gt;Professional Experience&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Senior Software Engineer at &lt;a href=&#34;https://www.omniarcs.com&#34;&gt;Omni Arcs&lt;/a&gt;,&lt;/strong&gt; July 2023 - Present&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Built infrastructure for an agent-based AI platform on Kubernetes and&#xA;Cloudflare Workers.&lt;/li&gt;&#xA;&lt;li&gt;Developed backend services in Python, TypeScript, Rust, and Go.&lt;/li&gt;&#xA;&lt;li&gt;Automated end-to-end deployments with GitHub Actions CI/CD pipelines.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reliability Engineer at &lt;a href=&#34;https://www.microfocus.com&#34;&gt;Micro Focus&lt;/a&gt;,&lt;/strong&gt; June 2021 - July 2023&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
