<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jin Y. Cho on Jin Y.C</title><link>https://redzhift.github.io/</link><description>Recent content in Jin Y. Cho on Jin Y.C</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 26 Jun 2026 10:52:38 -0700</lastBuildDate><atom:link href="https://redzhift.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>About</title><link>https://redzhift.github.io/docs/about/</link><pubDate>Fri, 30 Sep 2022 05:33:22 +0100</pubDate><guid>https://redzhift.github.io/docs/about/</guid><description>&lt;p&gt;I&amp;rsquo;m &lt;strong&gt;Jin&lt;/strong&gt;, a technical writer and trainer with 5+ years experience developing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Documentation strategy&lt;/li&gt;
&lt;li&gt;Knowledge bases&lt;/li&gt;
&lt;li&gt;User and software guides&lt;/li&gt;
&lt;li&gt;Process documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Contact: redzhift@tuta.io&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;nav&gt;
	&lt;div class="nav nav-tabs" id="nav-tab" role="tablist"&gt;

		
		
		
		

		

		&lt;a class="nav-link active"
		 id="aedfbcTab" data-bs-toggle="tab" data-bs-target="#aedfbc"
		 type="button" role="tab" aria-controls="aedfbc" aria-selected="true"&gt;Work examples&lt;/a&gt;

		

		&lt;a class="nav-link "
		 id="cbfaedTab" data-bs-toggle="tab" data-bs-target="#cbfaed"
		 type="button" role="tab" aria-controls="cbfaed" aria-selected="true"&gt;My sites&lt;/a&gt;

		

		&lt;a class="nav-link "
		 id="eabfdcTab" data-bs-toggle="tab" data-bs-target="#eabfdc"
		 type="button" role="tab" aria-controls="eabfdc" aria-selected="true"&gt;Currently learning...&lt;/a&gt;

		

	&lt;/div&gt;
&lt;/nav&gt;

&lt;div class="tab-content" id="nav-tab-content"&gt;

	






&lt;div class="tab-pane fade show active" id="aedfbc" role="tabpanel" aria-labelledby="nav-1"&gt;

	&lt;div class="row flex-xl-wrap pb-4"&gt;
&lt;div id="list-item" class="col-md-4 col-12 py-2"&gt;
 &lt;a class="text-decoration-none text-reset" href="../user-guides"&gt;
 &lt;div class="card h-100 features feature-full-bg rounded p-4 position-relative overflow-hidden border-1"&gt;
 &lt;span class="h1 icon-color"&gt;
 &lt;i class="material-icons align-middle"&gt;docs&lt;/i&gt;
 &lt;/span&gt;
 &lt;div class="card-body p-0 content"&gt;
 &lt;p class="fs-5 fw-semibold card-title mb-1"&gt;User guides&lt;/p&gt;
 &lt;p class="para card-text mb-0"&gt;How to maintain your Endeavour OS system in the Linux CLI.&lt;/p&gt;</description></item><item><title>Overview</title><link>https://redzhift.github.io/docs/installation-guide/overview/</link><pubDate>Wed, 24 Jun 2026 12:30:11 -0700</pubDate><guid>https://redzhift.github.io/docs/installation-guide/overview/</guid><description>&lt;h2 id="contents"&gt;Contents &lt;a href="#contents" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This is a guide to installing &lt;strong&gt;Linux Mint&lt;/strong&gt; on your computer using a &lt;strong&gt;Ventoy liveboot USB&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://redzhift.github.io/docs/installation-guide/initial-prep/"&gt;Initial prep &amp;amp; backup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://redzhift.github.io/docs/installation-guide/verify-iso/"&gt;Verify files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://redzhift.github.io/docs/installation-guide/create-ventoy-liveboot/"&gt;Set up Ventoy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://redzhift.github.io/docs/installation-guide/install-from-live-session/"&gt;Install from live session&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="alert alert-info d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 &lt;span class="material-icons size-20 me-2"&gt;
 info
 &lt;/span&gt;&lt;/div&gt;
 &lt;div class="w-100"&gt;
&lt;p&gt;&lt;a href="mint"&gt;&lt;strong&gt;Linux Mint&lt;/strong&gt;&lt;/a&gt; is a free, open-source operating system designed to work &amp;ldquo;out of the box.&amp;rdquo; It is a popular alternative for those accustomed to a traditional desktop OS like Windows, offering a simple transition and access to the apps that most people need.&lt;/p&gt;</description></item><item><title>Initial Prep</title><link>https://redzhift.github.io/docs/installation-guide/initial-prep/</link><pubDate>Tue, 23 Jun 2026 15:58:58 -0700</pubDate><guid>https://redzhift.github.io/docs/installation-guide/initial-prep/</guid><description>&lt;div class="alert alert-success d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 &lt;/div&gt;
 &lt;div class="w-100"&gt;
&lt;p&gt;It is recommended to have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;USB drive (3.0, at least 8 GB)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;External HDD or SSD device&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PC specs (RAM size, GPU model)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;First, back up your files onto an &lt;strong&gt;external HDD/SSD&lt;/strong&gt;. This setup lets you access and recover the files separately if needed.&lt;/p&gt;
&lt;h2 id="download-files"&gt;Download files &lt;a href="#download-files" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;You can download from any mirror listed on the download sites.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.iso&lt;/code&gt; downloads may take several minutes. Make sure that the download finishes completely before attempting verification.&lt;/p&gt;</description></item><item><title>Verify file integrity</title><link>https://redzhift.github.io/docs/installation-guide/verify-iso/</link><pubDate>Tue, 23 Jun 2026 16:10:36 -0700</pubDate><guid>https://redzhift.github.io/docs/installation-guide/verify-iso/</guid><description>&lt;div class="alert alert-danger d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 
 &lt;span class="material-icons size-20 me-2"&gt;
 report
 &lt;/span&gt;&lt;/div&gt;
 
 &lt;div class="w-100"&gt;&lt;strong&gt;You MUST pass this verification step before installation. Otherwise, you run a significant risk of bricking your computer and/or compromising its security.&lt;/strong&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;p&gt;Before using the installation file (&lt;code&gt;.iso&lt;/code&gt;), we need to make sure that it is safe to use. A safe file is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;From a &lt;strong&gt;verified source&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Is &lt;strong&gt;not corrupted&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Has &lt;strong&gt;not been tampered with&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This verification process is done by comparing &lt;strong&gt;checksums&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="alert alert-info d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 
 &lt;span class="material-icons size-20 me-2"&gt;
 info
 &lt;/span&gt;&lt;/div&gt;
 
 &lt;div class="w-100"&gt;&lt;strong&gt;Checksums&lt;/strong&gt;, or hashes, are the &lt;strong&gt;digital fingerprint&lt;/strong&gt; of a file. Any modification or inconsistency creates a different output than the expected hash.&lt;/div&gt;
 &lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="check-installation-iso-checksum"&gt;Check installation &lt;code&gt;.iso&lt;/code&gt; checksum &lt;a href="#check-installation-iso-checksum" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Open the &lt;a href="https://emn178.github.io/online-tools/sha256_checksum.html" rel="external" target="_blank"&gt;emn178 SHA256 checksum tool&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Create Ventoy Liveboot</title><link>https://redzhift.github.io/docs/installation-guide/create-ventoy-liveboot/</link><pubDate>Tue, 23 Jun 2026 16:10:55 -0700</pubDate><guid>https://redzhift.github.io/docs/installation-guide/create-ventoy-liveboot/</guid><description>&lt;h2 id="overview"&gt;Overview &lt;a href="#overview" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A &lt;strong&gt;liveboot USB&lt;/strong&gt; contains a full operating system, which lets you use &amp;rsquo;live session&amp;rsquo; without installing the OS first.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;live session&lt;/strong&gt; is required to safely install Linux Mint.&lt;/p&gt;
&lt;div class="alert alert-success d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 &lt;span class="material-icons size-20 me-2"&gt;
 check_circle
 &lt;/span&gt;&lt;/div&gt;
 &lt;div class="w-100"&gt;
&lt;p&gt;In this guide, &lt;strong&gt;Ventoy&lt;/strong&gt; software is used for a more streamlined liveboot experience. This tools lets you select from &lt;strong&gt;multiple boot options&lt;/strong&gt;, so you can install multiple Linux distros to try out on one USB stick.&lt;/p&gt;</description></item><item><title>Install from live session</title><link>https://redzhift.github.io/docs/installation-guide/install-from-live-session/</link><pubDate>Tue, 23 Jun 2026 16:11:03 -0700</pubDate><guid>https://redzhift.github.io/docs/installation-guide/install-from-live-session/</guid><description>&lt;h2 id="overview"&gt;Overview &lt;a href="#overview" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;With your &lt;strong&gt;liveboot USB&lt;/strong&gt; set up, you can prepare to boot into a &lt;strong&gt;live session&lt;/strong&gt; of Linux Mint.&lt;/p&gt;
&lt;p&gt;First, you need to set your computer system to recognize that it should boot from a different device at startup (your &lt;strong&gt;Ventoy&lt;/strong&gt; device). This option is changed in your computer’s &lt;code&gt;BIOS MENU&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;

&lt;nav&gt;
	&lt;div class="nav nav-tabs" id="nav-tab" role="tablist"&gt;

		
		
		
		

		

		&lt;a class="nav-link active"
		 id="cdbeafTab" data-bs-toggle="tab" data-bs-target="#cdbeaf"
		 type="button" role="tab" aria-controls="cdbeaf" aria-selected="true"&gt;Disable secure boot in BIOS&lt;/a&gt;

		

		&lt;a class="nav-link "
		 id="acfdebTab" data-bs-toggle="tab" data-bs-target="#acfdeb"
		 type="button" role="tab" aria-controls="acfdeb" aria-selected="true"&gt;Change default boot order&lt;/a&gt;

		

	&lt;/div&gt;
&lt;/nav&gt;

&lt;div class="tab-content" id="nav-tab-content"&gt;

	







&lt;div class="tab-pane fade show active" id="cdbeaf" role="tabpanel" aria-labelledby="nav-1"&gt;

	&lt;h2 id="disable-secure-boot-in-bios-menu"&gt;Disable secure boot in &lt;code&gt;BIOS MENU&lt;/code&gt; &lt;a href="#disable-secure-boot-in-bios-menu" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Reboot your computer with the &lt;strong&gt;Ventoy USB&lt;/strong&gt; still inserted.&lt;/p&gt;</description></item><item><title>Change default kernel</title><link>https://redzhift.github.io/docs/user-guides/user-config/change-default-kernel/</link><pubDate>Mon, 08 Jun 2026 16:58:36 -0700</pubDate><guid>https://redzhift.github.io/docs/user-guides/user-config/change-default-kernel/</guid><description>&lt;hr&gt;

&lt;div class="alert alert-info d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 
 &lt;span class="material-icons size-20 me-2"&gt;
 info
 &lt;/span&gt;&lt;/div&gt;
 
 &lt;div class="w-100"&gt;&lt;strong&gt;Note&lt;/strong&gt;: This guide is for systems using the default &lt;code&gt;systemd-boot&lt;/code&gt; UEFI boot manager in Endeavour OS.&lt;/div&gt;
 &lt;/div&gt;
&lt;p&gt;Your system can have multiple kernels (or versions) of Linux. The default kernel is usually set to the newest one, but can be adjusted to user preference.&lt;/p&gt;
&lt;p&gt;First, you need to identify and adjust the kernel &lt;code&gt;ids&lt;/code&gt; used in the &lt;code&gt;boot loader&lt;/code&gt; config file.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="find-the-kernel-id"&gt;Find the kernel &lt;code&gt;id&lt;/code&gt; &lt;a href="#find-the-kernel-id" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;nav&gt;
	&lt;div class="nav nav-tabs" id="nav-tab" role="tablist"&gt;

		
		
		
		

		

		&lt;a class="nav-link active"
		 id="edafbcTab" data-bs-toggle="tab" data-bs-target="#edafbc"
		 type="button" role="tab" aria-controls="edafbc" aria-selected="true"&gt;Use `bootctl` to view kernel info&lt;/a&gt;

		

		&lt;a class="nav-link "
		 id="deabcfTab" data-bs-toggle="tab" data-bs-target="#deabcf"
		 type="button" role="tab" aria-controls="deabcf" aria-selected="true"&gt;Use `cat` to view current default&lt;/a&gt;

		

	&lt;/div&gt;
&lt;/nav&gt;

&lt;div class="tab-content" id="nav-tab-content"&gt;

	






&lt;div class="tab-pane fade show active" id="edafbc" role="tabpanel" aria-labelledby="nav-1"&gt;

	&lt;h4 id="find-kernel-id-with-bootctl"&gt;Find kernel &lt;code&gt;id&lt;/code&gt; with &lt;code&gt;bootctl&lt;/code&gt; &lt;a href="#find-kernel-id-with-bootctl" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Change to the root user with &lt;code&gt;sudo -s&lt;/code&gt; and enter your password.&lt;/p&gt;</description></item><item><title>Downgrade with eos-shifttime</title><link>https://redzhift.github.io/docs/user-guides/user-config/downgrade-to-specific-date/</link><pubDate>Wed, 13 May 2026 14:09:31 -0700</pubDate><guid>https://redzhift.github.io/docs/user-guides/user-config/downgrade-to-specific-date/</guid><description>&lt;hr&gt;

&lt;div class="alert alert-warning d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 
 &lt;span class="material-icons size-20 me-2"&gt;
 warning
 &lt;/span&gt;&lt;/div&gt;
 
 &lt;div class="w-100"&gt;Using &lt;code&gt;eos-shifttime&lt;/code&gt; does not revert AUR packages. The downgrade only applies to official Arch packages from the archive repositories.&lt;/div&gt;
 &lt;/div&gt;
&lt;p&gt;The &lt;code&gt;eos-shifttime&lt;/code&gt; application can revert system packages to their state at a specified date.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open a terminal window and run &lt;code&gt;eos-shifttime&lt;/code&gt; with root permissions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the date to revert to on the GUI window, then click &lt;strong&gt;Revert&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reboot&lt;/strong&gt; to apply the changes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;





 



 
 
 &lt;img src="https://redzhift.github.io/images/eos-shifttime.png" alt="A GUI window for the eos-shifttime tool displaying a monthly calendar. The selected date is January 2, 2026." width="652" height="543" loading="lazy"&gt;
 
 
&lt;/p&gt;</description></item><item><title>Install new theme in Typora</title><link>https://redzhift.github.io/docs/user-guides/user-config/install-new-theme-in-typora/</link><pubDate>Thu, 25 Jun 2026 10:37:17 -0700</pubDate><guid>https://redzhift.github.io/docs/user-guides/user-config/install-new-theme-in-typora/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;Typora&lt;/strong&gt; is a minimalist text editor that renders markdown and code in real-time. The software comes with several default themes that can be applied through the &lt;strong&gt;Themes&lt;/strong&gt; option menu.&lt;/p&gt;
&lt;p&gt;First, find which custom theme you&amp;rsquo;d like to install from the &lt;a href="https://theme.typora.io/" rel="external" target="_blank"&gt;Typora themes page&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Update packages</title><link>https://redzhift.github.io/docs/user-guides/system-maintenance/update-packages/</link><pubDate>Tue, 12 May 2026 14:09:31 -0700</pubDate><guid>https://redzhift.github.io/docs/user-guides/system-maintenance/update-packages/</guid><description>&lt;p&gt;There are 3 commands used to update &lt;strong&gt;Endeavour OS&lt;/strong&gt; systems:&lt;/p&gt;

&lt;nav&gt;
	&lt;div class="nav nav-tabs" id="nav-tab" role="tablist"&gt;

		
		
		
		

		

		&lt;a class="nav-link active"
		 id="feacbdTab" data-bs-toggle="tab" data-bs-target="#feacbd"
		 type="button" role="tab" aria-controls="feacbd" aria-selected="true"&gt;pacman -Syu&lt;/a&gt;

		

		&lt;a class="nav-link "
		 id="adbfecTab" data-bs-toggle="tab" data-bs-target="#adbfec"
		 type="button" role="tab" aria-controls="adbfec" aria-selected="true"&gt;yay&lt;/a&gt;

		

		&lt;a class="nav-link "
		 id="fecbdaTab" data-bs-toggle="tab" data-bs-target="#fecbda"
		 type="button" role="tab" aria-controls="fecbda" aria-selected="true"&gt;eos-update&lt;/a&gt;

		

	&lt;/div&gt;
&lt;/nav&gt;

&lt;div class="tab-content" id="nav-tab-content"&gt;

	






&lt;div class="tab-pane fade show active" id="feacbd" role="tabpanel" aria-labelledby="nav-1"&gt;

	&lt;p&gt;&lt;code&gt;pacman&lt;/code&gt; is the package manager used to install and update programs in Arch Linux.&lt;/p&gt;
&lt;p&gt;To perform a full system update and refresh, run:&lt;/p&gt;



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="902b365" class="language-sh "&gt;
 &lt;code&gt;$ sudo pacman -Syu&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;
&lt;div class="alert alert-info d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 &lt;span class="material-icons size-20 me-2"&gt;
 info
 &lt;/span&gt;&lt;/div&gt;
 &lt;div class="w-100"&gt;Some commands require prepending &lt;code&gt;sudo&lt;/code&gt; to them as they require &lt;code&gt;super user&lt;/code&gt; (or root) permissions to run.&lt;/div&gt;
 &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Example terminal output&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Re-rank mirrors</title><link>https://redzhift.github.io/docs/user-guides/system-maintenance/rerank-mirrors/</link><pubDate>Fri, 12 Jun 2026 18:00:22 -0700</pubDate><guid>https://redzhift.github.io/docs/user-guides/system-maintenance/rerank-mirrors/</guid><description>&lt;p&gt;&lt;strong&gt;Mirrors&lt;/strong&gt; are servers located around the world that store copies of software packages. When upgrading packages, your EndeavourOS system utilizes multiple mirrors, which are noted in a &lt;code&gt;mirrorlist&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A well-maintained &lt;code&gt;mirrorlist&lt;/code&gt; ensures the &lt;code&gt;pacman&lt;/code&gt; package manager can access up-to-date package files when performing system updates. Outdated mirrors can prevent &lt;code&gt;pacman&lt;/code&gt; from updating &lt;strong&gt;core packages&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;

&lt;nav&gt;
	&lt;div class="nav nav-tabs" id="nav-tab" role="tablist"&gt;

		
		
		
		

		

		&lt;a class="nav-link active"
		 id="cbaedfTab" data-bs-toggle="tab" data-bs-target="#cbaedf"
		 type="button" role="tab" aria-controls="cbaedf" aria-selected="true"&gt;Re-rank Arch mirrors&lt;/a&gt;

		

		&lt;a class="nav-link "
		 id="adbfecTab" data-bs-toggle="tab" data-bs-target="#adbfec"
		 type="button" role="tab" aria-controls="adbfec" aria-selected="true"&gt;Re-rank EndeavourOS mirrors&lt;/a&gt;

		

		&lt;a class="nav-link "
		 id="cafdebTab" data-bs-toggle="tab" data-bs-target="#cafdeb"
		 type="button" role="tab" aria-controls="cafdeb" aria-selected="true"&gt;Common issues&lt;/a&gt;

		

	&lt;/div&gt;
&lt;/nav&gt;

&lt;div class="tab-content" id="nav-tab-content"&gt;

	






&lt;div class="tab-pane fade show active" id="cbaedf" role="tabpanel" aria-labelledby="nav-1"&gt;

	&lt;p&gt;Update the Arch &lt;code&gt;mirrorlist&lt;/code&gt; by running:&lt;/p&gt;</description></item><item><title>Why do I get errors when I try to update?</title><link>https://redzhift.github.io/docs/user-guides/faqs/getting-update-errors/</link><pubDate>Fri, 12 Jun 2026 18:00:22 -0700</pubDate><guid>https://redzhift.github.io/docs/user-guides/faqs/getting-update-errors/</guid><description>&lt;p&gt;Outdated package databases will cause errors when &lt;code&gt;pacman&lt;/code&gt; tries to retrieve the latest package files.&lt;/p&gt;
&lt;p&gt;This can be prevented through regular mirror maintenance.&lt;/p&gt;
&lt;p&gt;See: &lt;a href="https://redzhift.github.io/docs/user-guides/system-maintenance/rerank-mirrors/"&gt;Update mirrors guide&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Error: failed to commit transaction (conflicting files)&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Running a &lt;code&gt;sudo pacman -Syu&lt;/code&gt; update may fail and display the following errors:&lt;/p&gt;



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="2af6cbd" class="language-sh "&gt;
 &lt;code&gt; error: failed to commit transaction (conflicting files)
 &amp;lt;example&amp;gt;: /example exists in filesystem (owned by filesystem)
 &amp;lt;example&amp;gt;: /lib/systemd/system/example.service exists in filesystem&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;
&lt;p&gt;These issues can be resolved with manual intervention. Uninstall and remove the package from the system, then reinstall/update with these two commands:&lt;/p&gt;</description></item><item><title>Are there mirror management alternatives?</title><link>https://redzhift.github.io/docs/user-guides/faqs/mirror-alternatives/</link><pubDate>Fri, 12 Jun 2026 18:00:22 -0700</pubDate><guid>https://redzhift.github.io/docs/user-guides/faqs/mirror-alternatives/</guid><description>&lt;p&gt;Popular alternatives to mirror management are listed on the &lt;a href="https://wiki.archlinux.org/title/Mirrors" rel="external" target="_blank"&gt;Arch mirrors wiki&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;. Some programs can automate mirror management when configured properly.&lt;/p&gt;
&lt;p&gt;One such example is &lt;code&gt;ghostmirror&lt;/code&gt;, which:&lt;/p&gt;</description></item><item><title>What is the AUR?</title><link>https://redzhift.github.io/docs/user-guides/faqs/what-is-aur/</link><pubDate>Fri, 12 Jun 2026 18:00:22 -0700</pubDate><guid>https://redzhift.github.io/docs/user-guides/faqs/what-is-aur/</guid><description>&lt;p&gt;The &lt;strong&gt;Arch User Repository&lt;/strong&gt; (known as &lt;strong&gt;AUR&lt;/strong&gt;) is a large library of community user-produced packages for Arch Linux.&lt;/p&gt;
&lt;p&gt;Popular and well-maintained packages are voted on by the community to include in the official Arch &lt;code&gt;extra&lt;/code&gt; repository.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;To download and install AUR packages&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Clone the &lt;code&gt;git&lt;/code&gt; repository listed on the package&amp;rsquo;s AUR page:&lt;/p&gt;



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="6a1139a" class="language-sh "&gt;
 &lt;code&gt; git clone https://aur.archlinux.org/&amp;lt;pkg&amp;gt;.git&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change into the package directory:&lt;/p&gt;



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="979430f" class="language-sh "&gt;
 &lt;code&gt;cd &amp;lt;pkg&amp;gt;&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build and install the package with:&lt;/p&gt;</description></item><item><title>Game Psychology Research [PDF]</title><link>https://redzhift.github.io/docs/research/game-psychology-research/</link><pubDate>Sat, 21 Jan 2023 16:13:15 +0000</pubDate><guid>https://redzhift.github.io/docs/research/game-psychology-research/</guid><description>&lt;div class="alert alert-info d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 
 &lt;span class="material-icons size-20 me-2"&gt;
 info
 &lt;/span&gt;&lt;/div&gt;
 
 &lt;div class="w-100"&gt;&lt;strong&gt;Issues viewing the PDF?&lt;/strong&gt; Click the download button to open the document in a separate browser tab.&lt;/div&gt;
 &lt;/div&gt;
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'&gt;&lt;/script&gt;
&lt;style&gt;
 #embed-pdf-container {
 position: relative;
 width: 90%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 #overlayText a {
 position: relative;
 top: 10px;
 right: 4px;
 color: #000;
 margin: auto;
 background-color: #eeeeee;
 padding: 0.3em 1em;
 border: solid 2px;
 border-radius: 12px;
 border-color: #00000030;
 text-decoration: none;
 }
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style&gt;&lt;div class="embed-pdf-container" id="embed-pdf-container-9a247291"&gt;
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-9a247291"&gt;
 &lt;div class="pdf-loading" id="pdf-loading-9a247291"&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div id="overlayText"&gt;
 &lt;a href="https://redzhift.github.io/pdfs/2020_game-psychology-research.pdf" aria-label="Download" download&gt;
 &lt;svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18"&gt;
 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" /&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
 &lt;/div&gt;
 &lt;canvas class="pdf-canvas" id="pdf-canvas-9a247291"&gt;&lt;/canvas&gt;
&lt;/div&gt;

&lt;div class="pdf-paginator" id="pdf-paginator-9a247291"&gt;
 &lt;button id="pdf-prev-9a247291"&gt;Previous&lt;/button&gt;
 &lt;button id="pdf-next-9a247291"&gt;Next&lt;/button&gt; &amp;nbsp; &amp;nbsp;
 &lt;span&gt;
 &lt;span class="pdf-pagenum" id="pdf-pagenum-9a247291"&gt;&lt;/span&gt; / &lt;span class="pdf-pagecount" id="pdf-pagecount-9a247291"&gt;&lt;/span&gt;
 &lt;/span&gt;
 &lt;a class="pdf-source" id="pdf-source-9a247291" href="https://redzhift.github.io/pdfs/2020_game-psychology-research.pdf"&gt;[pdf]&lt;/a&gt;
&lt;/div&gt;

&lt;noscript&gt;
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-9a247291" href="https://redzhift.github.io/pdfs/2020_game-psychology-research.pdf"&gt;here&lt;/a&gt;.
&lt;/noscript&gt;

&lt;script type="text/javascript"&gt;
 (function(){
 var url = '\/pdfs\/2020_game-psychology-research.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/redzhift.github.io\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-9a247291'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-9a247291"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-9a247291');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-9a247291').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-9a247291').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum &gt;= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-9a247291').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-9a247291').textContent = numPages;

 
 if(pageNum &gt; numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script&gt;</description></item><item><title>Crime policy analysis [PDF]</title><link>https://redzhift.github.io/docs/research/crime-policy-analysis/</link><pubDate>Sat, 21 Jan 2023 16:13:15 +0000</pubDate><guid>https://redzhift.github.io/docs/research/crime-policy-analysis/</guid><description>&lt;div class="alert alert-info d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 
 &lt;span class="material-icons size-20 me-2"&gt;
 info
 &lt;/span&gt;&lt;/div&gt;
 
 &lt;div class="w-100"&gt;&lt;strong&gt;Issues viewing the PDF?&lt;/strong&gt; Click the download button to open the document in a separate browser tab.&lt;/div&gt;
 &lt;/div&gt;
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'&gt;&lt;/script&gt;
&lt;style&gt;
 #embed-pdf-container {
 position: relative;
 width: 90%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 #overlayText a {
 position: relative;
 top: 10px;
 right: 4px;
 color: #000;
 margin: auto;
 background-color: #eeeeee;
 padding: 0.3em 1em;
 border: solid 2px;
 border-radius: 12px;
 border-color: #00000030;
 text-decoration: none;
 }
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style&gt;&lt;div class="embed-pdf-container" id="embed-pdf-container-38893b06"&gt;
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-38893b06"&gt;
 &lt;div class="pdf-loading" id="pdf-loading-38893b06"&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div id="overlayText"&gt;
 &lt;a href="https://redzhift.github.io/pdfs/2022_crime-policy-analysis.pdf" aria-label="Download" download&gt;
 &lt;svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18"&gt;
 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" /&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
 &lt;/div&gt;
 &lt;canvas class="pdf-canvas" id="pdf-canvas-38893b06"&gt;&lt;/canvas&gt;
&lt;/div&gt;

&lt;div class="pdf-paginator" id="pdf-paginator-38893b06"&gt;
 &lt;button id="pdf-prev-38893b06"&gt;Previous&lt;/button&gt;
 &lt;button id="pdf-next-38893b06"&gt;Next&lt;/button&gt; &amp;nbsp; &amp;nbsp;
 &lt;span&gt;
 &lt;span class="pdf-pagenum" id="pdf-pagenum-38893b06"&gt;&lt;/span&gt; / &lt;span class="pdf-pagecount" id="pdf-pagecount-38893b06"&gt;&lt;/span&gt;
 &lt;/span&gt;
 &lt;a class="pdf-source" id="pdf-source-38893b06" href="https://redzhift.github.io/pdfs/2022_crime-policy-analysis.pdf"&gt;[pdf]&lt;/a&gt;
&lt;/div&gt;

&lt;noscript&gt;
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-38893b06" href="https://redzhift.github.io/pdfs/2022_crime-policy-analysis.pdf"&gt;here&lt;/a&gt;.
&lt;/noscript&gt;

&lt;script type="text/javascript"&gt;
 (function(){
 var url = '\/pdfs\/2022_crime-policy-analysis.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/redzhift.github.io\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-38893b06'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-38893b06"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-38893b06');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-38893b06').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-38893b06').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum &gt;= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-38893b06').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-38893b06').textContent = numPages;

 
 if(pageNum &gt; numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script&gt;</description></item><item><title>Facial recognition software</title><link>https://redzhift.github.io/docs/articles/facial-recognition/</link><pubDate>Sat, 21 Jan 2023 16:13:15 +0000</pubDate><guid>https://redzhift.github.io/docs/articles/facial-recognition/</guid><description>&lt;!--------------------------------------------&gt;
&lt;!-- image links --&gt;
&lt;!-- article links --&gt;
&lt;!--------------------------------------------&gt;
&lt;p&gt;&lt;em&gt;Journalism article originally written in 2019 → edited June 2026.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction &lt;a href="#introduction" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The first facial recognition systems of the 1960s were useless on their own. They required a human touch to identify and locate the parts of a face: ears, left and right eyes, nose and mouth.&lt;/p&gt;
&lt;p&gt;





 



 
 
 &lt;img src="https://redzhift.github.io/face-detection-recognition_48650194460097517.png" alt="Various facial recognition points used in a security camera product by Rhombus." width="1344" height="621" loading="lazy"&gt;
 
 

&lt;em&gt;Various facial recognition points used in a security camera product by &lt;a href="https://www.rhombussystems.com/blog/rhombus-product-insight-%E2%80%93-face-detection-how-our-security-camera-system-captures-the-best-face/" rel="external" target="_blank"&gt;Rhombus&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Facial recognition software [PDF]</title><link>https://redzhift.github.io/docs/articles/facial-recognition-pdf/</link><pubDate>Sat, 21 Jan 2023 16:13:15 +0000</pubDate><guid>https://redzhift.github.io/docs/articles/facial-recognition-pdf/</guid><description>&lt;div class="alert alert-info d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 
 &lt;span class="material-icons size-20 me-2"&gt;
 info
 &lt;/span&gt;&lt;/div&gt;
 
 &lt;div class="w-100"&gt;&lt;strong&gt;Issues viewing the PDF?&lt;/strong&gt; Click the download button to open the document in a separate browser tab.&lt;/div&gt;
 &lt;/div&gt;
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'&gt;&lt;/script&gt;
&lt;style&gt;
 #embed-pdf-container {
 position: relative;
 width: 90%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 #overlayText a {
 position: relative;
 top: 10px;
 right: 4px;
 color: #000;
 margin: auto;
 background-color: #eeeeee;
 padding: 0.3em 1em;
 border: solid 2px;
 border-radius: 12px;
 border-color: #00000030;
 text-decoration: none;
 }
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style&gt;&lt;div class="embed-pdf-container" id="embed-pdf-container-c022b615"&gt;
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-c022b615"&gt;
 &lt;div class="pdf-loading" id="pdf-loading-c022b615"&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div id="overlayText"&gt;
 &lt;a href="https://redzhift.github.io/pdfs/2019_facial-recognition-privacy.pdf" aria-label="Download" download&gt;
 &lt;svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18"&gt;
 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" /&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
 &lt;/div&gt;
 &lt;canvas class="pdf-canvas" id="pdf-canvas-c022b615"&gt;&lt;/canvas&gt;
&lt;/div&gt;

&lt;div class="pdf-paginator" id="pdf-paginator-c022b615"&gt;
 &lt;button id="pdf-prev-c022b615"&gt;Previous&lt;/button&gt;
 &lt;button id="pdf-next-c022b615"&gt;Next&lt;/button&gt; &amp;nbsp; &amp;nbsp;
 &lt;span&gt;
 &lt;span class="pdf-pagenum" id="pdf-pagenum-c022b615"&gt;&lt;/span&gt; / &lt;span class="pdf-pagecount" id="pdf-pagecount-c022b615"&gt;&lt;/span&gt;
 &lt;/span&gt;
 &lt;a class="pdf-source" id="pdf-source-c022b615" href="https://redzhift.github.io/pdfs/2019_facial-recognition-privacy.pdf"&gt;[pdf]&lt;/a&gt;
&lt;/div&gt;

&lt;noscript&gt;
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-c022b615" href="https://redzhift.github.io/pdfs/2019_facial-recognition-privacy.pdf"&gt;here&lt;/a&gt;.
&lt;/noscript&gt;

&lt;script type="text/javascript"&gt;
 (function(){
 var url = '\/pdfs\/2019_facial-recognition-privacy.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/redzhift.github.io\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-c022b615'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-c022b615"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-c022b615');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-c022b615').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-c022b615').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum &gt;= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-c022b615').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-c022b615').textContent = numPages;

 
 if(pageNum &gt; numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script&gt;</description></item><item><title>Boston's affordable housing crisis, 2020 [PDF]</title><link>https://redzhift.github.io/docs/articles/affordable-housing-crisis/</link><pubDate>Sat, 21 Jan 2023 16:13:15 +0000</pubDate><guid>https://redzhift.github.io/docs/articles/affordable-housing-crisis/</guid><description>&lt;div class="alert alert-info d-flex" role="alert"&gt;
 &lt;div class="flex-shrink-1 alert-icon"&gt;
 
 &lt;span class="material-icons size-20 me-2"&gt;
 info
 &lt;/span&gt;&lt;/div&gt;
 
 &lt;div class="w-100"&gt;&lt;strong&gt;Issues viewing the PDF?&lt;/strong&gt; Click the download button to open the document in a separate browser tab.&lt;/div&gt;
 &lt;/div&gt;
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'&gt;&lt;/script&gt;
&lt;style&gt;
 #embed-pdf-container {
 position: relative;
 width: 90%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 #overlayText a {
 position: relative;
 top: 10px;
 right: 4px;
 color: #000;
 margin: auto;
 background-color: #eeeeee;
 padding: 0.3em 1em;
 border: solid 2px;
 border-radius: 12px;
 border-color: #00000030;
 text-decoration: none;
 }
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style&gt;&lt;div class="embed-pdf-container" id="embed-pdf-container-4d47c676"&gt;
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-4d47c676"&gt;
 &lt;div class="pdf-loading" id="pdf-loading-4d47c676"&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div id="overlayText"&gt;
 &lt;a href="https://redzhift.github.io/pdfs/2020_affordable-housing-crisis.pdf" aria-label="Download" download&gt;
 &lt;svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18"&gt;
 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" /&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
 &lt;/div&gt;
 &lt;canvas class="pdf-canvas" id="pdf-canvas-4d47c676"&gt;&lt;/canvas&gt;
&lt;/div&gt;

&lt;div class="pdf-paginator" id="pdf-paginator-4d47c676"&gt;
 &lt;button id="pdf-prev-4d47c676"&gt;Previous&lt;/button&gt;
 &lt;button id="pdf-next-4d47c676"&gt;Next&lt;/button&gt; &amp;nbsp; &amp;nbsp;
 &lt;span&gt;
 &lt;span class="pdf-pagenum" id="pdf-pagenum-4d47c676"&gt;&lt;/span&gt; / &lt;span class="pdf-pagecount" id="pdf-pagecount-4d47c676"&gt;&lt;/span&gt;
 &lt;/span&gt;
 &lt;a class="pdf-source" id="pdf-source-4d47c676" href="https://redzhift.github.io/pdfs/2020_affordable-housing-crisis.pdf"&gt;[pdf]&lt;/a&gt;
&lt;/div&gt;

&lt;noscript&gt;
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-4d47c676" href="https://redzhift.github.io/pdfs/2020_affordable-housing-crisis.pdf"&gt;here&lt;/a&gt;.
&lt;/noscript&gt;

&lt;script type="text/javascript"&gt;
 (function(){
 var url = '\/pdfs\/2020_affordable-housing-crisis.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/redzhift.github.io\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-4d47c676'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-4d47c676"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-4d47c676');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-4d47c676').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-4d47c676').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum &gt;= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-4d47c676').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-4d47c676').textContent = numPages;

 
 if(pageNum &gt; numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script&gt;</description></item></channel></rss>