When to use React’s built-in state management or a state management library

When writing data in React, state must be passed from the top downwards, with methods passed down if you need to change data above a component. This approach can become difficult when you need to pass data several components down, often through components that don’t need them. This post contains my thoughts on state management and state management libraries in React. React’s built-in state management is often all you need Before using a statement management library you should carefully consider whether you need one....

October 17, 2020 · 3 min · Catgirl

How to setup a private Tor Bridge with OBFS4Proxy

The Tor Network is a powerful tool for browsing the internet anonymously and evading online censorship and web filters. Unfortunately some organizations have developed technology that makes it difficult to access the Tor Network. This tutorial explains how to create your own private Tor Bridge to bypass these restrictions. This tutorial focuses on configuring a tor bridge server, it does not explain the basics of running a Linux Server and it assumes that you have basic Linux shell knowledge....

May 19, 2020 · 8 min · Catgirl

How to read encrypted Google Chrome cookies in C#

Recently at work I needed to write a few bots/scrapers for websites that do not have an official API or bot support. Emulating browser-based logins without triggering anti-bot checks is challenging, to get around this issue, we login from a web browser on the Windows Server and copy its cookies from the SQLite Database storing them. This blog post explains how to read encrypted Google Chrome cookies in C# programs....

April 18, 2020 · 5 min · Catgirl

Easily paginating your EntityFramework Core Queries with C# Generics

Recently I had the challenge of paginating a web application I wrote as the tables displaying data were getting quite long and I needed a way to display things more cleanly. This post details how I solved the problem using C# Generics. It includes plenty of code snippets so you can follow along in your own application. The code shown in this post was written for my client Universal Layer and is released by them under a BSD 3-Clause License....

April 8, 2020 · 6 min · Catgirl

How to use Tor as your System DNS Resolver

Recently I posted criticism of Mozilla’s new DNS over HTTPS feature given they disabled they primary security functionality of it. The user isn’t even warned and can be secretly spied on. This blog post details how to use Tor as your System DNS resolver and has instructions for each operating system plus instructions for disabling Firefox’s dangerous DNS over HTTPS implementation. If you’d like to read why Firefox’s implementation of DNS over HTTPS is harmful, you may read my previous blog post....

April 2, 2020 · 5 min · Catgirl

How to automate your own backups with rclone and crontab on any Unix/Linux based computer

I’ve been migrating away from Google’s cloud based software. I have concerns related to the security of my data as well as want access to my documents when the Google Cloud or my internet connection is having issues. I was able to download all of my data from Google Drive easily although this creates a new problem. I’m now responsible again for my own backups. Without a backups solution you risk losing your important documents....

February 21, 2020 · 4 min · Catgirl

How to use Wasabi Object Storage with Mastodon's Amazon S3 Adapter

Wasabi is a cost effective alternative to Amazon S3. With it you can use existing tools built for Amazon S3 at low cost. Wasabi is great for instance owners like me who don’t have a small fortune to spent on cloud services. This blog post discusses the configuration I used for LGBTQIA.is using Mastodon v3.0.1 Catgirl Edition (the S3 Adapter is to the best of my knowledge identical to that of Vanilla Mastodon) to use Wasabi Object Storage....

January 9, 2020 · 2 min · Catgirl

What is Zsh and why you should use it instead of Bash

Zsh (short for Z-Shell) is, in technical terms, a UNIX Command Interpreter (often nicknamed shell by the community) , and in more simple terms a command prompt for UNIX and Linux based computer systems. Yesterday, Software Engineer Ali Spittel announced on Twitter that Apple’s macOS Operating System will be changing its default shell to Zsh from Bash. https://twitter.com/ASpittel/status/1135718054556569600 I have been a long-term Zsh user, and I learned about Zsh from Thoughtbot’s laptop-setup-script on GitHub about a year or two ago....

June 5, 2019 · 5 min · Catgirl

Crystal Lang: Mapping JSON files in under a second

Logo of the Crystal Language Crystal’s performance is useful in IO intense tasks such as mapping JSON files into an object. Recently I worked on a project with my friend David Colombo. David needed to take JSON files, map the data onto an object, and insert it into a SQLite Database. This post describes mapping JSON files in Crystal. Background Previously, David had created a parser in NodeJS that reads through the JSON files containing structured data and inserts the data into an SQLite database....

June 1, 2019 · 7 min · Catgirl

Crystal Lang: Macros and how they're useful

Logo of Crystal Language The Crystal Programming Language includes a feature called Macros. Crystal’s Documentation states: “Macros are methods that receive AST nodes at compile-time and produce code that is pasted into a program.”. To simplify this means you can write code that writes more code. This post is a deep-dive into how to write macros and why they’re useful. What’s an Abstract Syntax Tree (AST)? To understand how Macros work, you should be familiar with the concept of an Abstract Syntax Tree....

May 25, 2019 · 5 min · Catgirl