<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jesse</title>
    <description>The latest articles on DEV Community by Jesse (@jldohmann).</description>
    <link>https://dev.to/jldohmann</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F15237%2F322b3230-bf3a-49c6-8170-64390ed1b663.jpg</url>
      <title>DEV Community: Jesse</title>
      <link>https://dev.to/jldohmann</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jldohmann"/>
    <language>en</language>
    <item>
      <title>Most Esoteric Language You've Used</title>
      <dc:creator>Jesse</dc:creator>
      <pubDate>Mon, 29 Jun 2020 23:32:58 +0000</pubDate>
      <link>https://dev.to/jldohmann/most-esoteric-language-you-ve-used-56m4</link>
      <guid>https://dev.to/jldohmann/most-esoteric-language-you-ve-used-56m4</guid>
      <description>&lt;p&gt;Title pretty much sums it up. &lt;/p&gt;

&lt;p&gt;I work using a kind of unusual proprietary language (in the sense that it has a niche audience), and am wondering what the strangest language y'all have used is. 😄&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Butch: What's in a Name?</title>
      <dc:creator>Jesse</dc:creator>
      <pubDate>Thu, 25 Jun 2020 23:26:37 +0000</pubDate>
      <link>https://dev.to/jldohmann/butch-what-s-in-a-name-18e7</link>
      <guid>https://dev.to/jldohmann/butch-what-s-in-a-name-18e7</guid>
      <description>&lt;p&gt;I'm Jesse, and I'm a butch lesbian. I'm also a software developer, and used to do technical writing. I'm also a great cook (cilantro rules btw), a cat whisperer 🐱, and I enjoy decaf coffee . I also enjoy caffeinated coffee. ☕ I don't enjoy spiders but understand they're ecologically important. Mosquitoes, too, maybe, but I still hate them. 😒&lt;/p&gt;

&lt;p&gt;Basically, I'm a person with varied interests, pet peeves and desires and not a stereotypical trope that you often see of people like me on TV and in film.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'm proud of...
&lt;/h2&gt;

&lt;p&gt;Finding the courage to embrace butchness even with an audience. &lt;em&gt;All&lt;/em&gt; of my colleagues witnessed my transformation, &lt;em&gt;even if I didn't want them to&lt;/em&gt;. Arguably, they'll continue to as I figure out what's right for me in my evolving understanding of myself. &lt;/p&gt;

&lt;p&gt;The continuous integration of gender...&lt;br&gt;
&lt;a href="https://youtu.be/ObpcGNCU944"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wWGGodE3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i3.ytimg.com/vi/ObpcGNCU944/hqdefault.jpg" alt="Ba Dum Tss"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Equality in tech looks like...
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Accountability for researchers and practitioners for the development of facial recognition software that is used to racially profile and target Black people.&lt;/li&gt;
&lt;li&gt;The end of collaborating with agencies like ICE who forcibly tear families apart and keep children in cages.&lt;/li&gt;
&lt;li&gt;Removing stigma against talking about discrepancies in pay, removing pay discrimination entirely.&lt;/li&gt;
&lt;li&gt;An end to gatekeeping practices that prevent newcomers from entering the field, more diverse hiring practices, etc. &lt;/li&gt;
&lt;li&gt;And surely more that I can't think of at the moment. There's a lot of work to be done, that we can all help with together! 😄&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think many people more qualified than me, a white butch lesbian, have spoken about what needs to change in tech and why. I just try to listen, and do what I can from where I'm at!&lt;/p&gt;

&lt;h2&gt;
  
  
  I find support in...
&lt;/h2&gt;

&lt;p&gt;My wonderful partner, who supports me wholeheartedly in everything I try to do. She's my biggest supporter and my best friend. &lt;/p&gt;

&lt;p&gt;My several other best friends who I've lived with, cried with, argued with, cared for, and who've cared for me.&lt;/p&gt;

&lt;p&gt;My co-workers who I joke with everyday on Rocketchat and on zoom before meetings are supposed to start! They keep me grounded, even during a release cycle. 🔁&lt;/p&gt;

&lt;h3&gt;
  
  
  If you're interested in learning more about butchness, what it means as a gender, or what it means for lesbian culture...
&lt;/h3&gt;

&lt;p&gt;Leslie Feinberg's &lt;a href="https://www.lesliefeinberg.net/"&gt;&lt;em&gt;Stone Butch Blues&lt;/em&gt;&lt;/a&gt; moved me in a very profound way, and I don't think any review I write would be adequate. &lt;a href="https://www.goodreads.com/book/show/139569.Stone_Butch_Blues"&gt;Goodreads has some though&lt;/a&gt;, from people who can articulate a lot better than myself.&lt;/p&gt;

&lt;p&gt;I can't recommend the zine &lt;a href="https://www.butchisnotadirtyword.com/"&gt;&lt;em&gt;Butch is Not a Dirty Word&lt;/em&gt;&lt;/a&gt; enough. It's a collection of stories from butches all over the world about what butch means to them.&lt;/p&gt;

&lt;p&gt;I also recommend the book &lt;a href="https://www.goodreads.com/book/show/451044.Odd_Girls_and_Twilight_Lovers"&gt;&lt;em&gt;Odd Girls and Twilight Lovers&lt;/em&gt;&lt;/a&gt;, which talks about lesbian life in 20th century US.&lt;/p&gt;

&lt;h3&gt;
  
  
  Oh, and also...
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://blacklivesmatters.carrd.co/"&gt;Black lives matter&lt;/a&gt;. All Black lives matter.&lt;/p&gt;

</description>
      <category>devpride</category>
    </item>
    <item>
      <title>The Ultimate ad-blocker: Configuring Pi-Hole with Unbound DNS</title>
      <dc:creator>Jesse</dc:creator>
      <pubDate>Sun, 01 Mar 2020 21:31:29 +0000</pubDate>
      <link>https://dev.to/jldohmann/the-ultimate-ad-blocker-configuring-pi-hole-with-unbound-dns-20eo</link>
      <guid>https://dev.to/jldohmann/the-ultimate-ad-blocker-configuring-pi-hole-with-unbound-dns-20eo</guid>
      <description>&lt;h2&gt;
  
  
  Ads: hate 'em
&lt;/h2&gt;

&lt;p&gt;If you're like me, you hate ads disrupting your internet experience and slowing down your machine. This is especially true with news sources and other traffic-heavy sites.&lt;/p&gt;

&lt;p&gt;Like many, I have an adblocker installed on all browsers to help reduce visual clutter, but there are a few inconveniences with it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sites know when you have an adblocker enabled for a couple reasons, one of which is because a lot of the time they hide images behind the advertisements, so when the ad is removed the image is now unhidden, which tells the site the user has an adblocker.&lt;/li&gt;
&lt;li&gt;Adblockers are cosmetic and do not prevent ads from entering the network, so it still slows down browsing, sometimes considerably in my experience.&lt;/li&gt;
&lt;li&gt;Adblockers are single-machine only! I want to protect all my devices simultaneously with the same whitelists/blacklists.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Enter: Pi-hole to the rescue!&lt;/p&gt;

&lt;h2&gt;
  
  
  Pi-hole: what's that?
&lt;/h2&gt;

&lt;p&gt;From the GitHub project &lt;a href="https://github.com/pi-hole/pi-hole/blob/master/README.md" rel="noopener noreferrer"&gt;README&lt;/a&gt;, &lt;em&gt;Pi-hole is a DNS sinkhole that protects your devices from unwanted content, without installing any client-side software.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4e5jcjg78zxe8ajuus1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4e5jcjg78zxe8ajuus1l.png" alt="PiHole Architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It works at the network-level to prevent advertisements coming in to any device that is connected to that network. &lt;/p&gt;

&lt;p&gt;I like to think of it in terms of a bait and switch: ad sites are baited by the request made from the DNS but a switch in IP addresses has been made between the IP address of the ad site, and the one that your computer ends up seeing when you receive the response.&lt;/p&gt;

&lt;p&gt;So what ends up happening is that your computer just sees a blank page, and the advertisement is sent to some proverbial sinkhole!&lt;/p&gt;

&lt;p&gt;I mostly followed the normal installation process, with a few caveats:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I manually downloaded the installer before running&lt;/li&gt;
&lt;li&gt;I used Unbound DNS instead of Google, Cloudflare, or the other options you can select during setup (and made some specific configuration changes)&lt;/li&gt;
&lt;li&gt;I used an existing Nginx webserver instead of Lighttpd&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You don't have to do these things, but if you're interested how/why I did them, keep reading!&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up Pi-hole
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fec32tha6zankec278t0b.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fec32tha6zankec278t0b.PNG" alt="PiHole Install Art"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I won't go into how to set up a Raspberry Pi and get a static IP address here, but there many helpful articles that can guide you thru it! I am using a RPi 3 Model A+ that just sits on my desk, but you can use any Linux machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F209ymalhsl6i7pbv4pnj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F209ymalhsl6i7pbv4pnj.jpg" alt="Raspberry Pi 3 on my desk"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like I said, I didn't do much the first time around when I set up Pi-hole, other than manually downloading the installer:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

wget &lt;span class="nt"&gt;-O&lt;/span&gt; basic-install.sh https://install.pi-hole.net


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then running it in my &lt;code&gt;home&lt;/code&gt; directory:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;bash basic-install.sh


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This will take you thru the setup. I selected to have the web interface and server (admin portal) on, running in anonymous mode (to get aggregated anonymous statistics), and initially selected Google as the upstream DNS server.&lt;/p&gt;

&lt;p&gt;This last selection will be changed after Unbound is installed and configured.&lt;/p&gt;

&lt;p&gt;Once Pi-hole is set up, mosey over to &lt;code&gt;/etc/pihole&lt;/code&gt; and create a &lt;code&gt;whitelist.txt&lt;/code&gt; file. Initially, I just pasted &lt;a href="https://raw.githubusercontent.com/raghavdua1995/DNSlock-PiHole-whitelist/master/whitelist.list" rel="noopener noreferrer"&gt;this list&lt;/a&gt; of domains into the file, and saved it. (If you're using a RPi, you may need to &lt;code&gt;sudo write&lt;/code&gt; to the file.)&lt;/p&gt;

&lt;p&gt;I did a similar thing for the blocklist, using this &lt;a href="https://firebog.net/" rel="noopener noreferrer"&gt;aggregated list&lt;/a&gt; from Reddit.&lt;/p&gt;

&lt;p&gt;The blocklist is updated at 5:00am CST by changing the Pi-hole cron job located in &lt;code&gt;/etc/cron.d/pihole&lt;/code&gt;, and the whitelist is updated at 5:05am CST, setup in the system crontab located in &lt;code&gt;/etc/crontab&lt;/code&gt;. The blocklist is provided for you, I just changed the times it pulls the new ad sources. The whitelist is what is added manually by you; those sources are pulled from &lt;a href="https://github.com/anudeepND/whitelist" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Lastly, I edited &lt;code&gt;/etc/pihole/pihole-FTL.conf&lt;/code&gt; to disable long term data storage in SQLite by setting:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

MAXDBDAYS=0


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;So all stats are wiped every morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the DNS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quickly: what is DNS
&lt;/h3&gt;

&lt;p&gt;I did not know much about network programming before deep-diving into setting this up with a housemate; I didn't even know what a DNS really &lt;em&gt;was&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;All I knew is that I use HTTP to access websites, which have a domain name (like &lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt;). I also knew that my own computer had a unique identifier in the form of an IP address that gave the green light to these websites so I could access content.&lt;/p&gt;

&lt;p&gt;DNS stands for Domain Name System, and what I was missing was that websites have their &lt;em&gt;own&lt;/em&gt; IP addresses, and DNS is the process of translating the domain names into those IP addresses. The way a red light turns to green, so to speak.&lt;/p&gt;

&lt;p&gt;The DNS servers used on your computer are probably specified by your ISP (internet service provider), but you don't have to use them. How you can change them, and why you'd want to, are good questions to ask, but I won't detail them here!&lt;/p&gt;

&lt;p&gt;Anyway, there are two types: &lt;em&gt;recursive&lt;/em&gt; DNS servers and &lt;em&gt;authoritative&lt;/em&gt; DNS servers. Briefly, authoritative servers can satisfy queries from their own data without needing to query another source. Google Cloud DNS is an example of this. DNS Recursive servers are like a middleman: on behalf of the client, they resolve any query by traversing the path of the domain across the Internet to deliver the answer to the question. They can cache the results to make it faster the next time around.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8lcc4rb8p6419ts35h8k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8lcc4rb8p6419ts35h8k.png" alt="How DNS Works"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Unbound
&lt;/h3&gt;

&lt;p&gt;Unbound has a really nice &lt;a href="https://www.nlnetlabs.nl/projects/unbound/about/" rel="noopener noreferrer"&gt;about page&lt;/a&gt; that goes in-depth about the product. Concisely, Unbound is a recursive DNS that focuses on security and privacy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.pi-hole.net/guides/unbound/#configure-unbound" rel="noopener noreferrer"&gt;You can configure Unbound using this short guide&lt;/a&gt;, and then you can re-run your Pi-hole installation script to re-select the upstream DNS provider.&lt;/p&gt;

&lt;p&gt;The last thing I did was update the configuration file located in &lt;code&gt;/etc/unbound/unbound.conf.d/pi-hole.conf&lt;/code&gt; to do a couple of things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only let Unbound query authoritative servers (not other recursive servers). This is to prevent leaking queries to a middle man. To do this, remove these lines:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

forward-zone:
  name: "."
  forward-addr: 8.8.8.8
  forward-addr: 8.8.4.4


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Adding caching, which is explained &lt;a href="https://github.com/pi-hole/docs/issues/207" rel="noopener noreferrer"&gt;here in this GitHub issue&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are other optimizations that can be made, but they are dependent on your network environment. These are things like number of threads, message cache size, and a few others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Nginx
&lt;/h2&gt;

&lt;p&gt;I had already created a webserver to use as a testing ground for my webpages, so I wanted to use the same server, just a different port.&lt;/p&gt;

&lt;p&gt;To do this, I had to install &lt;code&gt;php-fpm&lt;/code&gt; and then alter the Nginx configuration file at &lt;code&gt;/etc/nginx/site-enabled/default&lt;/code&gt; to parse PHP:&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;server {&lt;br&gt;
    listen 80 default_server;&lt;br&gt;
    listen [::]:80 default_server;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root /var/www/html;
index index.html index.htm index.nginx-debian.html index.php;

server_name _;

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404
    try_files $uri $uri/ =404;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}

location ~ /\.ht {
    deny all;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Conclusions&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;Pi-hole is a great out of the box piece of software to take control of your browsing experience, but it is a bit fickle to configure everything to satisfy your particular tastes.&lt;/p&gt;

&lt;p&gt;Unfortunately, Pi-hole does block some normal websites. There is no way around it from what I can tell: there are always going to be some false positives. You'll need to keep manually updating the whitelist to deal with these as they come.&lt;/p&gt;

&lt;p&gt;Some browsers respond better to Pi-hole than others: Chrome seems to only partially use Pi-hole, because it is given an inconsistent response time. Firefox and Safari are roughly consistent. If you use Chrome, its best to have a backup server of Cloudflare or Google, in addition to Unbound.&lt;/p&gt;

&lt;p&gt;This setup has had me jump down more rabbit holes than I anticipated, and I learned a lot because of it. If you take the time to do the same, I believe you can learn something about network programming too! Hopefully I'll also be able to see your writeups when you're finished 😎&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>dns</category>
      <category>server</category>
      <category>network</category>
    </item>
  </channel>
</rss>
