<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Thoughts on Software Development and other Topics on Bas-Man's Musings</title><link>https://bas-man.dev/</link><description>Recent content in Thoughts on Software Development and other Topics on Bas-Man's Musings</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 06 Mar 2026 15:30:00 +0900</lastBuildDate><atom:link href="https://bas-man.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>C++ | Sites</title><link>https://bas-man.dev/cheatsheets/cpp/sites/</link><pubDate>Tue, 30 Nov 2021 12:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/cpp/sites/</guid><description/></item><item><title>GitHub Projects</title><link>https://bas-man.dev/projects/github/</link><pubDate>Wed, 20 Jan 2021 15:00:00 +0900</pubDate><guid>https://bas-man.dev/projects/github/</guid><description>A list of some my current GitHub projects</description></item><item><title>Ansible | Sites</title><link>https://bas-man.dev/cheatsheets/ansible/sites/</link><pubDate>Fri, 10 Jul 2020 00:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/ansible/sites/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.ansible.com"&gt;Ansible Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://galaxy.ansible.com"&gt;Galaxy Ansible&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://galaxy.ansible.com/geerlingguy"&gt;Geerlingguy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.risingstack.com/getting-started-with-ansible-infrastructure-automation/"&gt;Getting started with Ansible&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>CI | Sites</title><link>https://bas-man.dev/cheatsheets/ci/sites/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/ci/sites/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://circleci.com/signup/"&gt;CircleCi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://travis-ci.com"&gt;Travis CI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>General | Sites</title><link>https://bas-man.dev/cheatsheets/general/sites/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/general/sites/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code-maven.com"&gt;Code-Marven&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tanaikech.github.io"&gt;TANAIKE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JSON
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://jsongrid.com"&gt;jsongrid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jsonformatter.org"&gt;jsonformatter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jsoncrack.com"&gt;jsoncrack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Perl | Sites</title><link>https://bas-man.dev/cheatsheets/perl/sites/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/perl/sites/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.perl.com/"&gt;Perl.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.perl.org/"&gt;Perl.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://perlmaven.com"&gt;Perl Marven&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.perlmonks.org"&gt;Perl Monks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cpan.org"&gt;CPan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metacpan.org"&gt;MetaCpan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://prepan.org"&gt;PrePan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.perlmodules.net"&gt;PerlModules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cpan.rocks"&gt;CPAN Rocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.perl.com/article/how-to-upload-a-script-to-cpan/"&gt;How to upload to CPAN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://perlmaven.com/how-to-add-link-to-version-control-system-of-a-cpan-distributions"&gt;Add Version Control to CPAN Module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Python | Sites</title><link>https://bas-man.dev/cheatsheets/python/sites/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/python/sites/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://realpython.com"&gt;Real Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.miguelgrinberg.com"&gt;Miguel Grinberg&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Seems to have lots of good flask content.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.miguelgrinberg.com/post/the-ultimate-guide-to-python-decorators-part-i-function-registration"&gt;Decorators Part I&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>C++ | Articles</title><link>https://bas-man.dev/cheatsheets/cpp/articles/</link><pubDate>Tue, 30 Nov 2021 12:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/cpp/articles/</guid><description/></item><item><title>Self hosted LINE Notify From Email</title><link>https://bas-man.dev/projects/line-notify-from-email/</link><pubDate>Wed, 20 Jan 2021 15:00:00 +0900</pubDate><guid>https://bas-man.dev/projects/line-notify-from-email/</guid><description>&lt;p&gt;This project is made of a few different components.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Python module and scripts&lt;/li&gt;
&lt;li&gt;Docker configuration.&lt;/li&gt;
&lt;li&gt;Exim or Postfix configuration within docker.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The basic idea is to be able to accept an email, process it and trigger a LINE message Notification. So I am looking to replace Zapier in a very small way.&lt;/p&gt;</description></item><item><title>Ansible | Articles</title><link>https://bas-man.dev/cheatsheets/ansible/articles/</link><pubDate>Fri, 10 Jul 2020 00:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/ansible/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://geektechstuff.com/2019/06/25/installing-ansible-raspberry-pi/"&gt;Installing Ansible / Raspberry Pi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://geektechstuff.com/2019/06/27/ansible-setting-up-ssh-raspberry-pi/"&gt;Setting up SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://geektechstuff.com/2019/06/28/ansible-looking-at-basic-security-raspberry-pi/"&gt;Looking at basic security&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Articles</title><link>https://bas-man.dev/cheatsheets/html/articles/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/html/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/joshbuchea/HEAD"&gt;Header Contents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Articles</title><link>https://bas-man.dev/cheatsheets/sphinx/articles/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/sphinx/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dont-be-afraid-to-commit.readthedocs.io/en/latest/prerequisites.html"&gt;Don&amp;rsquo;t be afraid to commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.readthedocs.io/en/stable/intro/getting-started-with-sphinx.html"&gt;Getting started with Sphinx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>CI | Articles</title><link>https://bas-man.dev/cheatsheets/ci/articles/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/ci/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.python-guide.org/scenarios/ci/"&gt;CI: Hitchhicker&amp;rsquo;s guide to Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>General | Articles</title><link>https://bas-man.dev/cheatsheets/general/articles/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/general/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/mjuraj/i-made-over-1-000-code-reviews-this-is-what-i-learned-4e9e?utm_source=digest_mailer&amp;amp;utm_medium=email&amp;amp;utm_campaign=digest_email"&gt;Code Pull Request Reviews&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rosettacode.org/wiki/Rosetta_Code"&gt;Rosettacode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Git | Articles</title><link>https://bas-man.dev/cheatsheets/git/articles/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/git/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.andrewhoog.com/post/howto-setup-a-private-git-server-on-ubuntu-18.04/"&gt;Private Git server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>LaTeX | Articles</title><link>https://bas-man.dev/cheatsheets/latex/articles/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/latex/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.preining.info/blog/2014/12/writing-japanese-in-latex-part-1-introduction/"&gt;Writing Japanese with LaTeX Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.preining.info/blog/2014/12/writing-japanese-in-latex-part-2-characters-and-encodings/"&gt;Writing Japanese with LaTex Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.preining.info/blog/2014/12/writing-japanese-in-latex-part-3-simple-documents/"&gt;Writing Japanese with LaTeX Part 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Perl | Articles</title><link>https://bas-man.dev/cheatsheets/perl/articles/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/perl/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.perl.com/article/creating-ip-address-tools-from-scratch/"&gt;Creating IP address tools from scratch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.perl.com/article/how-to-write-your-first-article-for-perl-com/"&gt;Write your first article for Perl.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.perl.com/pub/2004/05/07/testing.html/"&gt;Building Tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.perl.com/article/how-to-upload-a-script-to-cpan/"&gt;Adding module to CPAN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Python | Articles</title><link>https://bas-man.dev/cheatsheets/python/articles/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/python/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.marsja.se/your-guide-to-reading-excel-xlsx-files-in-python/?amp"&gt;Excel Spreadsheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://alxmjo.com/2017/05/30/how-to-schedule-posts-with-jekyll/"&gt;Schedule Posts in Jekyll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dampfkraft.com/code/how-to-deprecate-a-pypi-package.html"&gt;Deprecating a Package&lt;/a&gt; Reference: &lt;a href="https://pycoders.com/issues/421"&gt;Pycoder&amp;rsquo;s Weekly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rednafi.github.io/digressions/python/2020/05/13/python-decorators.html"&gt;Untangling Decorators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@jsarafajr/google-apps-script-without-pain-or-success-story-of-atlassian-cloud-for-gmail-6cd99ba40de0"&gt;Google Script&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://book.pythontips.com/en/latest/"&gt;Python Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://martinheinz.dev"&gt;Martin Heinz&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://martinheinz.dev/blog/14"&gt;Ultimate Python Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ttl255.com/working-with-ip-addresses-in-python-ipaddress-library-part-1/"&gt;Working with IP Addresses in Python Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ttl255.com/working-with-ip-addresses-in-python-ipaddress-library-part-2/"&gt;Working with IP Addresses in Python Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Martin Thoma
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/python-in-plain-english/unit-testing-in-python-tox-and-nox-833e4bbce729"&gt;Unit Testing / Tox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://towardsdatascience.com/ci-pipelines-for-python-projects-9ac2830d2e38"&gt;CI Pipeline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://python-3-for-scientists.readthedocs.io/en/latest/python3_advanced.html"&gt;Useful Python 3 features - Advanced&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://python-dependency-injector.ets-labs.org/tutorials/asyncio-daemon.html"&gt;asyncio Daemon Monitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jwodder.github.io/kbits/posts/pypkg-mistakes/"&gt;Common Python Packaging Mistakes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Rust | Articles</title><link>https://bas-man.dev/cheatsheets/rust/articles/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/rust/articles/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://stevedonovan.github.io/rust-gentle-intro/readme.html"&gt;Rust Gentle Intro&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.tutorialspoint.com/rust/index.htm"&gt;Tutorial Spot: Rust&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://hackr.io/tutorials/learn-rust"&gt;Learn Rust&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://learning-rust.github.io"&gt;Learning Rust: Github&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://tourofrust.com"&gt;Tour of Rust&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Builder Pattern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://users.rust-lang.org/t/the-best-way-to-return-a-value-from-a-builder/24573"&gt;Rust-Lang-Org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/rust/comments/4ijqcy/developer_consensus_on_result_in_builder_patterns/?utm_source=share&amp;amp;utm_medium=ios_app&amp;amp;utm_name=iossmf"&gt;Reddit Result in Builder&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://is.gd/mgI7Af"&gt;Related Playground&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Auto generate a static website after a remote push to the server.</title><link>https://bas-man.dev/cheatsheets/git/snippets/post-receive-hook/</link><pubDate>Tue, 22 Jun 2021 13:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/git/snippets/post-receive-hook/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DOMAIN&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;domain-name&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;GIT_REPO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/repos/&lt;span class="o"&gt;[&lt;/span&gt;repo-name&lt;span class="o"&gt;]&lt;/span&gt;.repo.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WORKING_DIRECTORY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/tmp/&lt;span class="nv"&gt;$DOMAIN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PUBLIC_WWW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/www/&lt;span class="nv"&gt;$DOMAIN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;BACKUP_WWW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/tmp/&lt;span class="nv"&gt;$DOMAIN&lt;/span&gt;-backup
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; -e
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf &lt;span class="nv"&gt;$WORKING_DIRECTORY&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rsync -aqz &lt;span class="nv"&gt;$PUBLIC_WWW&lt;/span&gt;/ &lt;span class="nv"&gt;$BACKUP_WWW&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;trap&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;echo &amp;#39;A problem occurred. Reverting to backup.&amp;#39;; rsync -aqz --del &lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_WWW&lt;/span&gt;&lt;span class="s2"&gt;/ &lt;/span&gt;&lt;span class="nv"&gt;$PUBLIC_WWW&lt;/span&gt;&lt;span class="s2"&gt;; r
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;m -rf &lt;/span&gt;&lt;span class="nv"&gt;$WORKING_DIRECTORY&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; EXIT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone &lt;span class="nv"&gt;$GIT_REPO&lt;/span&gt; &lt;span class="nv"&gt;$WORKING_DIRECTORY&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/&lt;span class="o"&gt;[&lt;/span&gt;them&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="nv"&gt;$WORKING_DIRECTORY&lt;/span&gt;/themes/beautifulhugo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# The following section should be changed to use rsync so that it nicely updates&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# the directory instead of making it blank.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf &lt;span class="nv"&gt;$PUBLIC_WWW&lt;/span&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo -s &lt;span class="nv"&gt;$WORKING_DIRECTORY&lt;/span&gt; -d &lt;span class="nv"&gt;$PUBLIC_WWW&lt;/span&gt; -b &lt;span class="s2"&gt;&amp;#34;http://&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf &lt;span class="nv"&gt;$WORKING_DIRECTORY&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Get MetaCPAN to reference GitHub for Source and Issue Tracking</title><link>https://bas-man.dev/cheatsheets/perl/snippets/metacpan-meta-data-for-github/</link><pubDate>Mon, 14 Dec 2020 13:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/perl/snippets/metacpan-meta-data-for-github/</guid><description>Get MetaCPAN to reference Github for Source and Issues</description></item><item><title>Merge a hot fix from Master back into Dev branch</title><link>https://bas-man.dev/cheatsheets/git/snippets/merge-hotfix/</link><pubDate>Mon, 14 Dec 2020 13:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/git/snippets/merge-hotfix/</guid><description>How to Merge a Hotfix from Master back in to Dev</description></item><item><title>Overloading the &lt;&lt; operator.</title><link>https://bas-man.dev/cheatsheets/cpp/snippets/overload-cout-operator/</link><pubDate>Mon, 14 Dec 2020 13:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/cpp/snippets/overload-cout-operator/</guid><description>How to overload the &amp;laquo; operator</description></item><item><title>Prevent CPAN-Testers from testing under certain OS</title><link>https://bas-man.dev/cheatsheets/git/snippets/prevent-cpantesters-from-testing-set-os/</link><pubDate>Mon, 14 Dec 2020 13:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/git/snippets/prevent-cpantesters-from-testing-set-os/</guid><description>How to exclude some OS from being tested in the cpantester network.</description></item><item><title>Python | Modules</title><link>https://bas-man.dev/cheatsheets/python/modules/</link><pubDate>Fri, 10 Jul 2020 22:22:41 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/python/modules/</guid><description>&lt;p&gt;This is a list of modules that I am interested in using.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pendulum.eustace.io"&gt;Pendulm&lt;/a&gt;
An alternative to the datetime module&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/pyfakefs/"&gt;pyfakefs&lt;/a&gt;
Mock your file system calls.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/inflect/"&gt;inflect&lt;/a&gt;
Automatically plurualise words&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/Deprecated/"&gt;Deprecated&lt;/a&gt;
Deprecate code in Python.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/netaddr/"&gt;netaddr&lt;/a&gt;
Layer 3 handling for IP Addresses&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/simplegmail/#marking-messages"&gt;simplegmail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/mkdocstrings/"&gt;mkdocstrings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How to change your git commit date after the facts</title><link>https://bas-man.dev/cheatsheets/git/snippets/change-commit-date/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/git/snippets/change-commit-date/</guid><description>How to change your git commit date after the fact</description></item><item><title>Adding feature required Tag to Rust Documentation</title><link>https://bas-man.dev/cheatsheets/rust/snippets/rustdoc-require-feature/</link><pubDate>Sat, 13 Nov 2021 14:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/rust/snippets/rustdoc-require-feature/</guid><description>&lt;p&gt;I had a lot of trouble understanding this. Thus I am documenting it here for myself.
All credit goes to the original &lt;a href="https://stackoverflow.com/users/2733851/mcarton"&gt;&lt;code&gt;StackOverFlow&lt;/code&gt; author&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add one of the following to the root of your crate. Usually &lt;em&gt;lib.rs&lt;/em&gt;&lt;br&gt;
1.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#![feature(doc_cfg)]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is less than ideal as it will cause compile errors when used with &lt;code&gt;stable&lt;/code&gt;&lt;br&gt;
2.
It is better to use:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#![cfg_attr(docsrs, feature(doc_cfg))]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This allows this to be conditionally compiled and does not give any errors.&lt;/p&gt;</description></item><item><title>Auto convert one error to another</title><link>https://bas-man.dev/cheatsheets/rust/snippets/from-trait-convert-errors/</link><pubDate>Sun, 07 Nov 2021 12:30:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/rust/snippets/from-trait-convert-errors/</guid><description>&lt;p&gt;Automatically convert one error to another.&lt;/p&gt;</description></item><item><title>Display Trait</title><link>https://bas-man.dev/cheatsheets/rust/snippets/display-trait/</link><pubDate>Sun, 07 Nov 2021 12:30:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/rust/snippets/display-trait/</guid><description>&lt;p&gt;Define a display trait for a struct or enum&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;impl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;::&lt;span class="n"&gt;fmt&lt;/span&gt;::&lt;span class="n"&gt;Display&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MechanismError&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nc"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;::&lt;span class="n"&gt;fmt&lt;/span&gt;::&lt;span class="n"&gt;Formatter&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;&amp;#39;_&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt; &lt;span class="nc"&gt;std&lt;/span&gt;::&lt;span class="n"&gt;fmt&lt;/span&gt;::&lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MechanismError&lt;/span&gt;::&lt;span class="n"&gt;NotValidMechanismFormat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mesg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;write!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{} does not conform to any Mechanism format.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mesg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MechanismError&lt;/span&gt;::&lt;span class="n"&gt;NotIP4Network&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mesg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;write!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Was given ip4:{}. This is not an ip4 network.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mesg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MechanismError&lt;/span&gt;::&lt;span class="n"&gt;NotIP6Network&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mesg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;write!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Was given ip6:{}. This is not an ip6 network.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mesg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MechanismError&lt;/span&gt;::&lt;span class="n"&gt;NotValidIPNetwork&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mesg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;write!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;{}.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mesg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MechanismError&lt;/span&gt;::&lt;span class="n"&gt;NotIpNetworkMechanism&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;write!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Attempt to access TXT as IP.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MechanismError&lt;/span&gt;::&lt;span class="n"&gt;NotStringMechanism&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;write!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Attempt to access IP as TXT.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="reference"&gt;Reference:&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://loige.co/how-to-to-string-in-rust/"&gt;How to &lt;code&gt;to_string()&lt;/code&gt; in Rust&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Enum to Encapulate Errors</title><link>https://bas-man.dev/cheatsheets/rust/snippets/enum-as-error/</link><pubDate>Sun, 07 Nov 2021 12:30:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/rust/snippets/enum-as-error/</guid><description>&lt;p&gt;Creating a enum to encapsulate Errors.&lt;/p&gt;</description></item><item><title>Using trust-dns-resolver to do mx lookups</title><link>https://bas-man.dev/cheatsheets/rust/snippets/trust-dns-resolver-mx/</link><pubDate>Thu, 25 Mar 2021 16:30:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/rust/snippets/trust-dns-resolver-mx/</guid><description>Using trust-dns-resolver to do mx lookups</description></item><item><title>Using trust-dns-resolver to do soa lookups</title><link>https://bas-man.dev/cheatsheets/rust/snippets/trust-dns-resolver-soa/</link><pubDate>Thu, 25 Mar 2021 16:30:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/rust/snippets/trust-dns-resolver-soa/</guid><description>Using trust-dns-resolver to do soa lookups</description></item><item><title>Return a dictionary of Regex Matches</title><link>https://bas-man.dev/cheatsheets/python/snippets/multiple-group-regex/</link><pubDate>Tue, 12 Jan 2021 16:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/python/snippets/multiple-group-regex/</guid><description>A GitHub gist showing how to return a dict of regex matches</description></item><item><title>Decoding Email Header and Contents</title><link>https://bas-man.dev/cheatsheets/python/snippets/email-header-subject/</link><pubDate>Thu, 15 Oct 2020 09:59:45 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/python/snippets/email-header-subject/</guid><description>&lt;script src="https://gist.github.com/Bas-Man/7c7a6c9a7c141033063efc879d5be46e.js"&gt;&lt;/script&gt;

&lt;p&gt;Using &lt;code&gt;email.parser&lt;/code&gt; and &lt;code&gt;email.policy&lt;/code&gt; along with &lt;code&gt;policy.default&lt;/code&gt; means that
you do not need to worry about character encoding as the modules will take care
of it automatically.&lt;/p&gt;
&lt;p&gt;I forget where I saw it but I believe that policy.default will become the real
default in the future.&lt;br&gt;
Current &lt;code&gt;policy.compat32&lt;/code&gt; is the module default.&lt;/p&gt;</description></item><item><title>Different String Padding Approaches</title><link>https://bas-man.dev/cheatsheets/python/snippets/padding-numbers/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/python/snippets/padding-numbers/</guid><description>How to pad numbers in Python.</description></item><item><title>Generate QR Codes</title><link>https://bas-man.dev/cheatsheets/python/snippets/qr-code/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/python/snippets/qr-code/</guid><description>Generate QR codes</description></item><item><title>Mock Python version for Testing</title><link>https://bas-man.dev/cheatsheets/python/snippets/mock-python-version/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/python/snippets/mock-python-version/</guid><description>&lt;script src="https://gist.github.com/Bas-Man/bd3425dd09585398da7e7970f62b67e7.js"&gt;&lt;/script&gt;</description></item><item><title>Rust | Crates</title><link>https://bas-man.dev/cheatsheets/rust/crates/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/rust/crates/</guid><description>A list of useful and interesting Rust Crates</description></item><item><title>Fix fonts for terminal in VS Code Editor</title><link>https://bas-man.dev/cheatsheets/general/snippets/vs-code-terminal/</link><pubDate>Tue, 07 Dec 2021 12:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/general/snippets/vs-code-terminal/</guid><description>&lt;p&gt;I use zsh as my default shell. So I needed to add the following to my &lt;code&gt;settings.json&lt;/code&gt; file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;terminal.integrated.defaultProfile.osx&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;zsh&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For the fonts terminal profile says that I used &lt;code&gt;MesloLGS NF&lt;/code&gt; as my font. I added the following also to my &lt;code&gt;settings.json&lt;/code&gt; file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;terminal.integrated.fontFamily&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MesloLGS NF&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As result my VSCode terminal window now matches my default terminal.&lt;/p&gt;</description></item><item><title>Verify IMAP and submission port</title><link>https://bas-man.dev/cheatsheets/general/snippets/verify-imap-submission/</link><pubDate>Fri, 30 Jul 2021 23:00:00 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/general/snippets/verify-imap-submission/</guid><description>&lt;p&gt;These hints were taken from &lt;a href="https://support.plesk.com/hc/en-us/articles/213961665-How-to-verify-that-SSL-for-IMAP-POP3-SMTP-works-and-a-proper-SSL-certificate-is-in-use"&gt;Support Plesk&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="imap-via-ssl-using-port-993"&gt;IMAP via SSL using port 993&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl s_client -showcerts -connect mail.example.com:993 -servername mail.example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="smtp-via-tlsstarttls-using-port-25-or-587"&gt;SMTP via TLS/StartTLS using port 25 or 587&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl s_client -starttls smtp -showcerts -connect mail.example.com:25 -servername mail.example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Davis Ashura</title><link>https://bas-man.dev/reading/authors/davis-ashura/</link><pubDate>Mon, 07 Oct 2024 14:00:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/davis-ashura/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/121471-the-castes-and-the-outcastes"&gt;The Castes and the Outcastes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/296147-instrument-of-omens"&gt;Instrument of Omens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/367656-the-eternal-ephemera"&gt;The Eternal Ephemera&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/227995-the-chronicles-of-william-wilde"&gt;The Chronicles of William Wilde&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Jim Butcher</title><link>https://bas-man.dev/reading/authors/jim-butcher/</link><pubDate>Wed, 18 Sep 2024 11:55:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/jim-butcher/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/40346-the-dresden-files"&gt;The Dresden Files&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>A. F. Kay</title><link>https://bas-man.dev/reading/authors/a-f-kay/</link><pubDate>Mon, 07 Oct 2024 14:00:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/a-f-kay/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/280137-divine-apostasy"&gt;Devine Apostasy&lt;/a&gt;
This is actually a really good series.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>David Gemmell</title><link>https://bas-man.dev/reading/authors/david-gemmell/</link><pubDate>Wed, 18 Sep 2024 11:55:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/david-gemmell/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/53254-jon-shannow"&gt;Jon Shannow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/40522-the-drenai-saga"&gt;The Drenia Saga&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Robert Jordan</title><link>https://bas-man.dev/reading/authors/robert-jordan/</link><pubDate>Wed, 18 Sep 2024 11:55:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/robert-jordan/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/search?q=The&amp;#43;Wheel&amp;#43;of&amp;#43;time&amp;amp;qid=zZPn6OwQig"&gt;The Wheel of Time&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="stand-alone"&gt;Stand alone&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/book/show/187065.New_Spring"&gt;New Spring&lt;/a&gt;
This is a prequel to &lt;em&gt;The Wheel of Time&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Kel Kade</title><link>https://bas-man.dev/reading/authors/kel-kade/</link><pubDate>Wed, 18 Sep 2024 11:55:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/kel-kade/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/172856-king-s-dark-tidings"&gt;King&amp;rsquo;s Dark Tidings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Sarah Lin</title><link>https://bas-man.dev/reading/authors/sarah-lin/</link><pubDate>Mon, 07 Oct 2024 14:00:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/sarah-lin/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/287542-street-cultivation"&gt;Street Cultivation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/306753-the-weirkey-chronicles"&gt;The Weirkey Chronicles&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Currently only up to book 5 in the series.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Bryce O'Connor</title><link>https://bas-man.dev/reading/authors/bryce-oconnor/</link><pubDate>Wed, 18 Sep 2024 11:55:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/bryce-oconnor/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/302625-warformed-stormweaver"&gt;Warformed: Stormweaver&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>R. A. Salvatore</title><link>https://bas-man.dev/reading/authors/r-a-salvatore/</link><pubDate>Wed, 18 Sep 2024 11:55:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/r-a-salvatore/</guid><description>&lt;p&gt;R. A. Salvatore has long been one of the fantasy authors that I check
when a new book is released.&lt;/p&gt;
&lt;p&gt;I have many of his books.&lt;/p&gt;</description></item><item><title>Brandon Sanderson</title><link>https://bas-man.dev/reading/authors/brandon-sanderson/</link><pubDate>Wed, 18 Sep 2024 11:55:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/brandon-sanderson/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/49075-the-stormlight-archive"&gt;Stormlight Archive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/search?q=The&amp;#43;Wheel&amp;#43;of&amp;#43;time&amp;amp;qid=zZPn7OwQig"&gt;The Wheel of Time&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/123080-legion"&gt;Legion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="stand-alone"&gt;Stand alone&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/book/show/31176804-snapshot"&gt;Snapshot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/book/show/13578175-the-emperor-s-soul"&gt;The Emperor&amp;rsquo;s Soul&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Will Wight</title><link>https://bas-man.dev/reading/authors/will-wight/</link><pubDate>Wed, 18 Sep 2024 11:55:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/will-wight/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/192821-cradle"&gt;Cradle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/108461-traveler-s-gate"&gt;Traveler&amp;rsquo;s Gate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Zogarth</title><link>https://bas-man.dev/reading/authors/zogarth/</link><pubDate>Tue, 17 Sep 2024 11:55:00 +0900</pubDate><guid>https://bas-man.dev/reading/authors/zogarth/</guid><description>&lt;h2 id="series"&gt;Series&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.goodreads.com/series/339304-the-primal-hunter"&gt;The Primal Hunter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Build a robots.txt file from a data file</title><link>https://bas-man.dev/post/hugo/build-robots-txt-from-data-file/</link><pubDate>Fri, 06 Mar 2026 15:30:00 +0900</pubDate><guid>https://bas-man.dev/post/hugo/build-robots-txt-from-data-file/</guid><description>&lt;p&gt;Recently, I was reviewing how I generating my blog. I have noticed that my site
seems to get a lot of bot traffic. I would rather not see this traffic so I
thought I should investigate how I might limit them to reduce the
amount of traffic. So, a bit of searching and thinking and this is what I have
decided for now.&lt;/p&gt;</description></item><item><title>Custom Corporate Holidays with holidays package</title><link>https://bas-man.dev/post/python/custom-corporate-holidays-checker-with-holidays-package/</link><pubDate>Fri, 09 May 2025 16:00:00 +0900</pubDate><guid>https://bas-man.dev/post/python/custom-corporate-holidays-checker-with-holidays-package/</guid><description>&lt;p&gt;I am currently working on a newish personal project. My plan is to create a Python version of a &lt;code&gt;Google Script&lt;/code&gt; app
that I am running. I wanted to find a way to determine if a given date is a national holiday. This requires taking into account that National Holidays that fall on a Sunday are moved to the following Monday or to
Tuesday if Monday is already a National Holiday. I also needed to support adding Company holidays. This is important as
it impacts some calculations. Enter the Python package: &lt;a href="https://pypi.org/project/holidays/"&gt;holidays&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Decon-Spf Version 0.2.6</title><link>https://bas-man.dev/post/rust/decon-spf-0-2-6/</link><pubDate>Tue, 19 Dec 2023 14:50:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/decon-spf-0-2-6/</guid><description>&lt;h2 id="releasing-version-026-of-decon_spf"&gt;Releasing Version 0.2.6 of decon_spf&lt;/h2&gt;</description></item><item><title>A guide for using CMake Generators to support other IDEs.</title><link>https://bas-man.dev/post/cmake/use-cmake-generator/</link><pubDate>Thu, 23 Dec 2021 10:30:00 +0900</pubDate><guid>https://bas-man.dev/post/cmake/use-cmake-generator/</guid><description>&lt;p&gt;Some times we might be working in a team, and that team has members who prefer
to use different IDEs or who develop on different platforms. In these cases we
can leverage &lt;em&gt;CMake&lt;/em&gt;&amp;rsquo;s generators.&lt;br&gt;
This is a short guide on using a &lt;em&gt;generator&lt;/em&gt; for &lt;strong&gt;Xcode&lt;/strong&gt; and adding a second
test file to break up testing.&lt;/p&gt;</description></item><item><title>A barebones C++ library template using CMake and Google Test</title><link>https://bas-man.dev/post/cmake/cplusplus-library-template/</link><pubDate>Thu, 09 Dec 2021 12:30:00 +0900</pubDate><guid>https://bas-man.dev/post/cmake/cplusplus-library-template/</guid><description>&lt;h1 id="objective"&gt;Objective&lt;/h1&gt;
&lt;p&gt;This is a &lt;strong&gt;BAREBONES&lt;/strong&gt; &lt;em&gt;C++&lt;/em&gt; template with &lt;em&gt;Google Test&lt;/em&gt; support using &lt;em&gt;CMake&lt;/em&gt;. It is setup to allow for the building of a &lt;em&gt;static&lt;/em&gt; library using &lt;strong&gt;TDD&lt;/strong&gt; principles; but could be adapted for building a small program. This is in no way the ideal solution.&lt;/p&gt;
&lt;p&gt;This template was created to allow for programming under &lt;em&gt;Mac OS&lt;/em&gt;. But the files should work under other systems.&lt;/p&gt;</description></item><item><title>Decon-Spf Version 0.2.1 Released</title><link>https://bas-man.dev/post/rust/decon-spf-0-2-1/</link><pubDate>Fri, 05 Nov 2021 12:32:02 +0900</pubDate><guid>https://bas-man.dev/post/rust/decon-spf-0-2-1/</guid><description>&lt;p&gt;I am happy to announce that I have released &lt;em&gt;decon-spf&lt;/em&gt; version &lt;em&gt;0.2.1&lt;/em&gt;
This release contains a number of improvements and a new feature.&lt;/p&gt;</description></item><item><title>Configure Router Credentials</title><link>https://bas-man.dev/cheatsheets/router/rtx1200/configure-router-credentials/</link><pubDate>Mon, 19 Jul 2021 10:17:14 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/router/rtx1200/configure-router-credentials/</guid><description/></item><item><title>Configure Filters for RTX1200 Router</title><link>https://bas-man.dev/cheatsheets/router/rtx1200/configure-filters/</link><pubDate>Mon, 19 Jul 2021 10:13:06 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/router/rtx1200/configure-filters/</guid><description/></item><item><title>Configure DHCP service on an RTX1200 Router</title><link>https://bas-man.dev/cheatsheets/router/rtx1200/configure-dhcp/</link><pubDate>Mon, 19 Jul 2021 10:12:41 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/router/rtx1200/configure-dhcp/</guid><description/></item><item><title>Configure PPPOE</title><link>https://bas-man.dev/cheatsheets/router/rtx1200/configure-pppoe/</link><pubDate>Mon, 19 Jul 2021 10:12:14 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/router/rtx1200/configure-pppoe/</guid><description/></item><item><title>Configure Syslog for an RTX1200 Router</title><link>https://bas-man.dev/cheatsheets/router/rtx1200/configure-syslog/</link><pubDate>Mon, 19 Jul 2021 09:59:02 +0900</pubDate><guid>https://bas-man.dev/cheatsheets/router/rtx1200/configure-syslog/</guid><description/></item><item><title>Install &amp; Configure Certbot</title><link>https://bas-man.dev/post/docker/letsencrypt/install-configure-certbot/</link><pubDate>Tue, 06 Jul 2021 23:50:00 +0900</pubDate><guid>https://bas-man.dev/post/docker/letsencrypt/install-configure-certbot/</guid><description>&lt;p&gt;I have been playing with a few things of late. Mostly related to moving my site off &lt;strong&gt;GitHub&lt;/strong&gt; and using my own domain. As part of that I am just toying with &lt;strong&gt;Let&amp;rsquo;s Encrypt&lt;/strong&gt;.
I have been doing this during my trial period with &lt;a href="https://linode.com"&gt;Linode&lt;/a&gt;.&lt;br&gt;
Today I will document how I set up &lt;strong&gt;Let&amp;rsquo;s Encrypt&lt;/strong&gt; using &lt;strong&gt;DNS&lt;/strong&gt; as the preferred &lt;strong&gt;Challenge&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Moving Site from GitHub</title><link>https://bas-man.dev/post/hugo/moving-site-from-github.io/</link><pubDate>Tue, 29 Jun 2021 13:50:00 +0900</pubDate><guid>https://bas-man.dev/post/hugo/moving-site-from-github.io/</guid><description>&lt;p&gt;Hi All,&lt;/p&gt;
&lt;p&gt;So yesterday I decided to move my site from &lt;strong&gt;github.io&lt;/strong&gt; to one of my personal domains. I am not sure why I decided this. I mean Github provides a great free service. And I had lots of automation in place. In this article I will just cover how i went about updating all pages with redirects from &lt;strong&gt;github&lt;/strong&gt; to the new domain.&lt;!---more--&gt;&lt;/p&gt;
&lt;h2 id="the-goal"&gt;The Goal&lt;/h2&gt;
&lt;p&gt;My goal was to leave my old site up on &lt;strong&gt;GitHub&lt;/strong&gt; for a few weeks to give &lt;strong&gt;Google&lt;/strong&gt; some time to update its indexing. With all old pages being able to redirect to their new counterparts. This requires that I have redirects in place for each page. I will then remove the github site repo.&lt;/p&gt;</description></item><item><title>Push to GitHub Triggers Push to Remote</title><link>https://bas-man.dev/post/git/push-to-github-triggers-push-to-remote/</link><pubDate>Thu, 24 Jun 2021 14:50:00 +0900</pubDate><guid>https://bas-man.dev/post/git/push-to-github-triggers-push-to-remote/</guid><description>&lt;p&gt;Hi. Today I would like to go over how I changed things up a bit and am now able to push my site updates to GitHub, which then pushes the updates to the live production server. This should allow me to add checks within GitHub to ensure my site it updated only if everything is correct. Though I won&amp;rsquo;t go into that here today. I will be focusing on the GitHub Action.&lt;!---more--&gt;&lt;/p&gt;</description></item><item><title>Auto Update Site from a Git Push</title><link>https://bas-man.dev/post/git/auto-update-site-from-git-push/</link><pubDate>Tue, 22 Jun 2021 14:40:00 +0900</pubDate><guid>https://bas-man.dev/post/git/auto-update-site-from-git-push/</guid><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;For a little while now I have been thinking about moving my personal blog to a self-hosted service. One of the options I have been considering is &lt;a href="https://www.linode.com"&gt;Linode&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As part of this idea. I wanted to see how I might be able to automate some of the processes. This is just a write up on one of my ideas so far.&lt;/p&gt;</description></item><item><title>Published My First Crate: decon-spf</title><link>https://bas-man.dev/post/rust/published-my-first-crate/</link><pubDate>Tue, 15 Jun 2021 17:00:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/published-my-first-crate/</guid><description>&lt;p&gt;Today I published my first &lt;strong&gt;rust&lt;/strong&gt; crate.&lt;/p&gt;</description></item><item><title>Rust: Add an Example Program to your Library Crate</title><link>https://bas-man.dev/post/rust/library-with-example-program/</link><pubDate>Sun, 13 Jun 2021 16:45:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/library-with-example-program/</guid><description>&lt;p&gt;Recently I decided that I might actually publish my little rust crate. To that end I started looking into some of the things that are needed and what can be done. I have published a &lt;strong&gt;perl&lt;/strong&gt; module in the past. And as a rule for myself, I like to provide an example program that uses a &lt;em&gt;module&lt;/em&gt; or &lt;em&gt;library&lt;/em&gt;. That is what I will look at today.&lt;/p&gt;</description></item><item><title>Rust: Lazy Static Regex</title><link>https://bas-man.dev/post/rust/lazy-static-regex/</link><pubDate>Fri, 11 Jun 2021 14:00:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/lazy-static-regex/</guid><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Today I will finally go over how I used the &lt;a href=""&gt;lazy_static&lt;/a&gt; crate to help the compiler keep regex optimised.&lt;/p&gt;</description></item><item><title>Hugo Custom Info Boxes</title><link>https://bas-man.dev/post/hugo/custom-infobox/</link><pubDate>Sat, 05 Jun 2021 22:30:00 +0900</pubDate><guid>https://bas-man.dev/post/hugo/custom-infobox/</guid><description>&lt;p&gt;The other day I got my regular summary from &lt;strong&gt;GoHugo&lt;/strong&gt; a &lt;a href="https://discourse.gohugo.io"&gt;discourse&lt;/a&gt; site where I am a member. This lead me to an interesting blog, which then lead me to an article on how to add &lt;em&gt;custom info boxes&lt;/em&gt; to your site if it is not provided by your theme.&lt;/p&gt;</description></item><item><title>Swift: Deconstruct SPF</title><link>https://bas-man.dev/post/swift/swift-spf-documenting-package/</link><pubDate>Wed, 02 Jun 2021 18:00:00 +0900</pubDate><guid>https://bas-man.dev/post/swift/swift-spf-documenting-package/</guid><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have been working on this project on and off for a bit now. So I thought it was time to go over how we might be able to not only internally document our code, but also to document it at the package level.&lt;/p&gt;</description></item><item><title>Swift: Deconstruct SPF: asMechanism with Qualifier</title><link>https://bas-man.dev/post/swift/swift-spf-asmechanism-using-qualifier/</link><pubDate>Thu, 27 May 2021 12:00:00 +0900</pubDate><guid>https://bas-man.dev/post/swift/swift-spf-asmechanism-using-qualifier/</guid><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;In this article, I will walk through how I re-implemented the &lt;code&gt;enum&lt;/code&gt; for &lt;code&gt;Qualifier&lt;/code&gt; and &lt;code&gt;MechanismKind&lt;/code&gt;. I will also deliver a working &lt;code&gt;asMechanism()&lt;/code&gt; function. The diff is &lt;a href="https://github.com/Bas-Man/swift-decon-spf/compare/Initial-asMechanism...QualifierSuppportAsMechanism"&gt;here&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Swift: Deconstruct SPF - Qualifier and MechanismKind</title><link>https://bas-man.dev/post/swift/swift-spf-qualifier-mechanismkind/</link><pubDate>Thu, 27 May 2021 08:50:00 +0900</pubDate><guid>https://bas-man.dev/post/swift/swift-spf-qualifier-mechanismkind/</guid><description>&lt;p&gt;In this article I will be looking at defining the &lt;strong&gt;enums&lt;/strong&gt; for &lt;code&gt;Qualifier&lt;/code&gt; and &lt;code&gt;MechanismKind&lt;/code&gt;. I will also be adding tests to ensure that the functions work as expected. Further I will implement a simple &lt;code&gt;asMechanism()&lt;/code&gt; as a proof of concept.&lt;/p&gt;</description></item><item><title>Swift: Deconstruct SPF: Strings and SubStrings</title><link>https://bas-man.dev/post/swift/swift-spf-generic-string-function/</link><pubDate>Sat, 22 May 2021 00:30:00 +0900</pubDate><guid>https://bas-man.dev/post/swift/swift-spf-generic-string-function/</guid><description>&lt;p&gt;I have been working on my SPF project in &lt;strong&gt;Swift&lt;/strong&gt; of late. As part of this I have started to deal with &lt;strong&gt;substrings&lt;/strong&gt;. &amp;ldquo;&lt;em&gt;A slice of a string&lt;/em&gt;&amp;rdquo; according to &lt;a href="https://developer.apple.com/documentation/swift/substring"&gt;Apple Documentation&lt;/a&gt;. In dealing with this, I have found myself quite often converting substrings back to normal strings. Today we will look at how we can pass &lt;strong&gt;substrings&lt;/strong&gt; directly by making our functions &lt;strong&gt;generic&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Swift: Deconstruct SPF - Struct Mechanism</title><link>https://bas-man.dev/post/swift/swift-spf-struct-mechanims/</link><pubDate>Wed, 19 May 2021 18:00:00 +0900</pubDate><guid>https://bas-man.dev/post/swift/swift-spf-struct-mechanims/</guid><description>&lt;p&gt;Today, I will start on building out the functionality of the &lt;code&gt;struct Mechanism&lt;/code&gt;.&lt;br&gt;
This will involve creating some tests, and basic functions.&lt;/p&gt;</description></item><item><title>Rust: Domain Name Validation</title><link>https://bas-man.dev/post/rust/domain-name-validation/</link><pubDate>Tue, 18 May 2021 16:50:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/domain-name-validation/</guid><description>&lt;p&gt;Recently, as I work my way through learning bits of &lt;strong&gt;rust&lt;/strong&gt;, I have been thinking that I should in corporate some form of &lt;strong&gt;input validation&lt;/strong&gt; for &lt;strong&gt;domains&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Today I will look at two &lt;strong&gt;crates&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Swift: Deconstruct SPF an Outline and Background</title><link>https://bas-man.dev/post/swift/decon-spf-outline-background/</link><pubDate>Mon, 17 May 2021 12:15:00 +0900</pubDate><guid>https://bas-man.dev/post/swift/decon-spf-outline-background/</guid><description>&lt;h1 id="what-is-spf"&gt;What is SPF&lt;/h1&gt;
&lt;p&gt;If you have not followed my rust series on deconstructing SPF you can check it out &lt;a href="https://bas-man.dev/series/learning-rust/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Swift: Deconstruct SPF Getting Started</title><link>https://bas-man.dev/post/swift/decon-spf-getting-started/</link><pubDate>Thu, 13 May 2021 20:00:00 +0900</pubDate><guid>https://bas-man.dev/post/swift/decon-spf-getting-started/</guid><description>&lt;p&gt;In my previous series &amp;ldquo;&lt;a href="https://bas-man.dev/series/learning-rust/"&gt;Learning Rust&lt;/a&gt;&amp;rdquo;. I decided to attempt to learn some fairly basic rust concepts and constructs by working on a fairly simple project. This seemed to go fairly well. So I am now going to attempt to work on the same project, but this time, using &lt;a href="https://swift.org"&gt;Swift&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Rust: Move from binary to library and Add Documentation Examples that are tested.</title><link>https://bas-man.dev/post/rust/move-to-crate-add-testable-documentation/</link><pubDate>Tue, 11 May 2021 13:30:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/move-to-crate-add-testable-documentation/</guid><description>&lt;p&gt;In the previous article in this &lt;a href="https://bas-man.dev/series/learning-rust/"&gt;series&lt;/a&gt; I went through some basics of documenting your rust code. I had hoped to be able to take advantage of another nice feature of rust. That being the fact that code examples are actually tested by rust. I will go through the changes I had to make for this to work.&lt;/p&gt;</description></item><item><title>Rust: Documenting your Code</title><link>https://bas-man.dev/post/rust/documenting/</link><pubDate>Thu, 06 May 2021 11:03:18 +0900</pubDate><guid>https://bas-man.dev/post/rust/documenting/</guid><description>&lt;p&gt;Hi.&lt;br&gt;
As with all projects. It&amp;rsquo;s important to create documentation. This is, as we know, very important when creating code. When we come back to a project after a break, or if someone new takes over. Documentation will help you remember or learn what the code does. The thinking that was behind certain decisions.&lt;/p&gt;</description></item><item><title>SPF: Adding Support for A and MX Mechanisms in Rust</title><link>https://bas-man.dev/post/rust/spf-a-mx/</link><pubDate>Tue, 27 Apr 2021 16:30:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/spf-a-mx/</guid><description>&lt;p&gt;This is a quick followup on my progress in deconstructing SPF using Rust.&lt;br&gt;
Today I was able to implement both &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;MX&lt;/code&gt; mechanisms.&lt;/p&gt;</description></item><item><title>Add a New Social to Beautifulhugo</title><link>https://bas-man.dev/post/hugo/add-new-social-beautifulhugo/</link><pubDate>Sun, 25 Apr 2021 23:00:00 +0900</pubDate><guid>https://bas-man.dev/post/hugo/add-new-social-beautifulhugo/</guid><description>&lt;p&gt;Fairly recently I changed my theme for my personal blog. I switched to &lt;a href="https://github.com/halogenica/beautifulhugo"&gt;Beautifulhugo&lt;/a&gt;. I find it to be a nice clean theme.&lt;/p&gt;
&lt;p&gt;Beautifulhugo supports a lot of social sites. However, it is also missing some that I like. In particular &lt;a href="https://dev.to"&gt;Dev.to&lt;/a&gt; and &lt;a href="https://flipboard.com"&gt;Flipboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I had previously added these to the other theme I was using. So I went about adding them to &lt;strong&gt;Beautifulhugo&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Looking at Regex in Rust (Addendum)</title><link>https://bas-man.dev/post/rust/looking-at-regex-addendum/</link><pubDate>Thu, 22 Apr 2021 14:30:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/looking-at-regex-addendum/</guid><description>&lt;p&gt;Hi. In my previous article &lt;a href="https://bas-man.dev/post/rust/looking-at-regex/"&gt;Looking at Regex in Rust&lt;/a&gt;. I covered some basics. Today I will go over some new things that I have learned, as I expanded on things that my regex expression needs to handle. In particular the need to handle the possible existence or none existence of &lt;strong&gt;qualifiers&lt;/strong&gt; &lt;code&gt;+&lt;/code&gt;,&lt;code&gt;-&lt;/code&gt;,&lt;code&gt;~&lt;/code&gt;,&lt;code&gt;?&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Looking at Regex in Rust</title><link>https://bas-man.dev/post/rust/looking-at-regex/</link><pubDate>Tue, 20 Apr 2021 21:58:40 +0900</pubDate><guid>https://bas-man.dev/post/rust/looking-at-regex/</guid><description>&lt;p&gt;If you have been following this series, you might know that I am playing with SPF records. I have turned my eye to &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;mx&lt;/code&gt; &lt;strong&gt;mechanism&lt;/strong&gt;s. As I started looking at the &lt;code&gt;a&lt;/code&gt; mechanism. I noticed that my current approach using the standard string functions would probably be fairly difficult to implement. So I started to think about using the &lt;a href="https://docs.rs/regex/1.4.5/regex/index.html"&gt;Regex&lt;/a&gt; crate. So this will be a look at how that went. The challenges and the things that I took away from the experience.&lt;/p&gt;</description></item><item><title>Rust Basic Testing</title><link>https://bas-man.dev/post/rust/basic-testing/</link><pubDate>Mon, 19 Apr 2021 15:00:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/basic-testing/</guid><description>&lt;p&gt;As I work through learning &lt;strong&gt;rust&lt;/strong&gt;, I figured it was time to to start doing actual testing.&lt;/p&gt;
&lt;h2 id="why-test"&gt;Why Test&lt;/h2&gt;
&lt;p&gt;Simple, it&amp;rsquo;s really essential when building anything beyond a few lines of simple code. Being able to run a series of reproducible tests as you develop; allows you to ensure that changes you make are not breaking exisiting code. You also have the option to develop using &lt;strong&gt;TDD&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Of course I have not adhered to any of this as I explore the basics of working with rust. But things are progressing and I should now see how testing basically works in the world of rust.&lt;/p&gt;</description></item><item><title>Manage Rust Code by Breaking it Up</title><link>https://bas-man.dev/post/rust/manage-rust-code-by-breaking-it-up/</link><pubDate>Wed, 14 Apr 2021 15:25:30 +0900</pubDate><guid>https://bas-man.dev/post/rust/manage-rust-code-by-breaking-it-up/</guid><description>&lt;p&gt;We often start small coding projects, and we often tend to start them off in a single file. But sometimes, the project naturally grows larger and more complex. The code thus becomes more difficult to manage in a single file.&lt;/p&gt;
&lt;p&gt;At these times we often need to break the code up across multiple files so that we can focus on a particular functionality. This is where I found myself as I am toying with my SPF code.&lt;/p&gt;</description></item><item><title>Deconstructing SPF with Rust using Generics</title><link>https://bas-man.dev/post/rust/deconstructing-spf-with-rust-using-generics/</link><pubDate>Sat, 10 Apr 2021 23:30:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/deconstructing-spf-with-rust-using-generics/</guid><description>&lt;p&gt;As I mentioned in my previous article &lt;a href="https://bas-man.dev/post/rust/deconstructing-spf-with-rust/"&gt;Deconstructing SPF Records with Rust&lt;/a&gt;. There is a case for using &lt;code&gt;generics&lt;/code&gt; given the amount of overlap between the different mechanisms.&lt;/p&gt;</description></item><item><title>Deconstructing SPF Records with Rust</title><link>https://bas-man.dev/post/rust/deconstructing-spf-with-rust/</link><pubDate>Thu, 08 Apr 2021 10:00:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/deconstructing-spf-with-rust/</guid><description>&lt;p&gt;Hi. If you have visited my blog before you might have seen my series on using the &lt;a href="https://crates.io/crates/trust-dns-resolver"&gt;trust-dns-resolver&lt;/a&gt; crate. As part of that series I looked at querying DNS TXT records. During the process I was reminded of SPF records. Something I used to deal with in a previous position. And this got me to thinking about using &lt;a href="https://www.easy365manager.com/what-is-spf-sender-policy-framework/"&gt;SPF records&lt;/a&gt; as a way to learn more about working with rust.&lt;/p&gt;</description></item><item><title>TXT lookup using the trust-dns-resolver Crate</title><link>https://bas-man.dev/post/rust/trust-dns-resolver-txt-lookup/</link><pubDate>Mon, 29 Mar 2021 11:30:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/trust-dns-resolver-txt-lookup/</guid><description>&lt;p&gt;This is the third article on using the &lt;strong&gt;trust-dns-resolver&lt;/strong&gt; crate&lt;br&gt;
&lt;strong&gt;Warning: This code is not intended to be used in production. You should review and adjust to your own needs.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>SOA lookup using the trust-dns-resolver Crate</title><link>https://bas-man.dev/post/rust/trust-dns-resolver-soa-lookup/</link><pubDate>Fri, 26 Mar 2021 12:00:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/trust-dns-resolver-soa-lookup/</guid><description>&lt;p&gt;This is a second article on using the &lt;strong&gt;trust-dns-resolver&lt;/strong&gt; crate&lt;br&gt;
&lt;strong&gt;Warning: This code is not intended to be used in production. You should review and adjust to your own needs.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>MX and Host lookup using the trust-dns-resolver Crate</title><link>https://bas-man.dev/post/rust/trust-dns-resolver-mx-and-host-lookup/</link><pubDate>Thu, 25 Mar 2021 15:00:00 +0900</pubDate><guid>https://bas-man.dev/post/rust/trust-dns-resolver-mx-and-host-lookup/</guid><description>&lt;p&gt;I used to often work with DNS in one of my previous jobs. So I have always had a long running interesting in DNS. Most recently I have been looking into &lt;a href="https://en.wikipedia.org/wiki/Rust_%28programming_language%29"&gt;Rust&lt;/a&gt;. I wanted to see how easy it might be to use rust to access DNS records, one; because rust is said to be fast, and also because it&amp;rsquo;s a safe programming language.&lt;/p&gt;</description></item><item><title>Google API Gmail LINE Notifications Part 7</title><link>https://bas-man.dev/post/google-api/google-api-gmail-notifications-7/</link><pubDate>Fri, 12 Feb 2021 09:00:00 +0900</pubDate><guid>https://bas-man.dev/post/google-api/google-api-gmail-notifications-7/</guid><description>&lt;p&gt;Final part in a series of articles on implementing a notification system using Gmail and &lt;a href="https://notify-bot.line.me/doc/en/"&gt;Line Bot&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Google API Gmail LINE Notifications Part 6</title><link>https://bas-man.dev/post/google-api/google-api-gmail-notifications-6/</link><pubDate>Mon, 08 Feb 2021 13:30:00 +0900</pubDate><guid>https://bas-man.dev/post/google-api/google-api-gmail-notifications-6/</guid><description>&lt;p&gt;Part 6 in a series of articles on implementing a notification system using Gmail and &lt;a href="https://notify-bot.line.me/doc/en/"&gt;Line Bot&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Google API Gmail LINE Notifications Part 5</title><link>https://bas-man.dev/post/google-api/google-api-gmail-notifications-5/</link><pubDate>Thu, 04 Feb 2021 16:30:00 +0900</pubDate><guid>https://bas-man.dev/post/google-api/google-api-gmail-notifications-5/</guid><description>&lt;p&gt;Part 5 in a series of articles on implementing a notification system using Gmail and &lt;a href="https://notify-bot.line.me/doc/en/"&gt;Line Bot&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Google API Gmail LINE Notifications Part 4</title><link>https://bas-man.dev/post/google-api/google-api-gmail-notifications-4/</link><pubDate>Wed, 03 Feb 2021 09:00:00 +0900</pubDate><guid>https://bas-man.dev/post/google-api/google-api-gmail-notifications-4/</guid><description>&lt;p&gt;Part 4 in a series of articles on implementing a notification system using Gmail and &lt;a href="https://notify-bot.line.me/doc/en/"&gt;Line Bot&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Google API Gmail LINE Notifications Part 3</title><link>https://bas-man.dev/post/google-api/google-api-gmail-notifications-3/</link><pubDate>Mon, 01 Feb 2021 23:00:00 +0900</pubDate><guid>https://bas-man.dev/post/google-api/google-api-gmail-notifications-3/</guid><description>&lt;p&gt;Part 3 in a series of articles on implementing a notification system using Gmail and &lt;a href="https://notify-bot.line.me/doc/en/"&gt;Line Bot&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Google API Gmail LINE Notifications Part 2</title><link>https://bas-man.dev/post/google-api/google-api-gmail-notifications-2/</link><pubDate>Mon, 01 Feb 2021 14:15:00 +0900</pubDate><guid>https://bas-man.dev/post/google-api/google-api-gmail-notifications-2/</guid><description>&lt;p&gt;Part 2 in a series of articles on implementing a notification system using Gmail and &lt;a href="https://notify-bot.line.me/doc/en/"&gt;Line Bot&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Google API Gmail LINE Notifications Part 1</title><link>https://bas-man.dev/post/google-api/google-api-gmail-notifications-1/</link><pubDate>Mon, 01 Feb 2021 14:00:00 +0900</pubDate><guid>https://bas-man.dev/post/google-api/google-api-gmail-notifications-1/</guid><description>&lt;p&gt;This will be a series of articles on implementing a notification system using Gmail and &lt;a href="https://notify-bot.line.me/doc/en/"&gt;Line Bot&lt;/a&gt;.&lt;br&gt;
The goal here is to be able to query gmail for a select set of emails. Process them and then send a notification. This could be altered to work with a Bot of some other service.&lt;/p&gt;</description></item><item><title>Generic Regex Match Function Multiple Groups</title><link>https://bas-man.dev/post/python/generic-regex-match-function-multiple-groups/</link><pubDate>Tue, 12 Jan 2021 16:00:00 +0900</pubDate><guid>https://bas-man.dev/post/python/generic-regex-match-function-multiple-groups/</guid><description>&lt;p&gt;If you have read my previous posts; you might know I am currently working on a new project to move some services to a self-hosted solution. As part of this, I have been working on dealing with &lt;code&gt;unicode&lt;/code&gt; characters in regex.&lt;/p&gt;
&lt;p&gt;In relation to this I have found that I am writing the same function repeatedly. The only difference being the number matches being returned. So I decided we need to refactor this.&lt;/p&gt;</description></item><item><title>Working with double-byte regex expressions with Python3</title><link>https://bas-man.dev/post/python/regex-double-byte-python3/</link><pubDate>Tue, 05 Jan 2021 12:00:00 +0900</pubDate><guid>https://bas-man.dev/post/python/regex-double-byte-python3/</guid><description>&lt;p&gt;As part of my project &lt;a href="https://bas-man.dev/post/self-hosted-zapier-alternative/" title="Self Hosted Zapier Alternative"&gt;Self Hosted Zapier Alternative&lt;/a&gt;; I am having to deal with doing regex searches against the three Japanese written forms, Kanji, Hiragana and Katakana.&lt;/p&gt;</description></item><item><title>Project: Self Hosted Zapier Alternative</title><link>https://bas-man.dev/post/self-hosted-zapier-alternative/</link><pubDate>Sat, 02 Jan 2021 23:00:39 +0900</pubDate><guid>https://bas-man.dev/post/self-hosted-zapier-alternative/</guid><description>&lt;p&gt;I am currently in the process of working out how I might replace some of my Zapier services. Why would I want to do this?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I use the free tier. (The process only runs once every 15 minutes. It used to be once every 5 mins.) Which means it has become a bit slow in sending the notifications.&lt;/li&gt;
&lt;li&gt;I want to learn how to use &lt;a href="https://www.docker.com"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once I get a bit further along I will hopefully publish the python code to &lt;a href="https://github.com"&gt;GitHub&lt;/a&gt; and document some of the issues and successes as I move along. Check the &lt;a href="https://bas-man.dev/projects/"&gt;Projects page&lt;/a&gt; section if you are interested.&lt;/p&gt;</description></item><item><title>Send a notification through LINE with AppDaemon with Home Assistant</title><link>https://bas-man.dev/post/home-assistant-appdaemon-line-notification/</link><pubDate>Thu, 17 Dec 2020 23:00:00 +0900</pubDate><guid>https://bas-man.dev/post/home-assistant-appdaemon-line-notification/</guid><description>&lt;h1 id="the-challenge"&gt;The challenge&lt;/h1&gt;
&lt;p&gt;Living in Japan we generally default to using &lt;a href="https://mobile.line.me"&gt;LINE&lt;/a&gt; for our messaging needs. At the time of this writing there is no integration for LINE within &lt;a href="https://www.home-assistant.io"&gt;Home Assistant&lt;/a&gt;. Currently I use &lt;a href="https://pushover.net"&gt;PushOver&lt;/a&gt; for some of my Home Assistant notifications. I also use &lt;a href="https://zapier.com"&gt;Zapier&lt;/a&gt; with email to trigger notifications to my family LINE group. You can see how I did this &lt;a href="https://dev.to/basman/integrating-line-message-and-zapier-58e6"&gt;here&lt;/a&gt; and &lt;a href="https://gmailzapierlinenotify.readthedocs.io/en/latest/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Detect the OS Perl Code is Running Under</title><link>https://bas-man.dev/post/detect-os-perl-code-running-under/</link><pubDate>Mon, 14 Dec 2020 13:19:33 +0900</pubDate><guid>https://bas-man.dev/post/detect-os-perl-code-running-under/</guid><description>&lt;p&gt;I was looking into updating a couple of my perl modules because rt.cpan.org is being sunset early in 2021. As part of this I thought it was time to stop cpan testers from testing my module under Windows since it is currently not really supported.&lt;/p&gt;
&lt;p&gt;I was not sure how to go about doing this, so I reached out the good people in the &amp;ldquo;Perl Programmers&amp;rdquo; group on FaceBook. I got some great links and suggestions. In order to make this easy for me to find. I am documenting some of them here.&lt;/p&gt;</description></item><item><title>Raspberry Pi Stretch to Buster Missing Steps</title><link>https://bas-man.dev/post/raspberry-stretch-to-buster-missing-steps/</link><pubDate>Fri, 11 Dec 2020 13:00:30 +0900</pubDate><guid>https://bas-man.dev/post/raspberry-stretch-to-buster-missing-steps/</guid><description>&lt;p&gt;I recently went through the process of upgrading my raspberry Pis from Stretch to Buster. I had previously done this moving from Jessie.&lt;/p&gt;
&lt;p&gt;Whilst I had no real issues with task following the guides that I found. I did discover one thing that concerned me, and was missing from the guides.&lt;/p&gt;
&lt;p&gt;After upgrading to Buster, my &lt;code&gt;/boot&lt;/code&gt; had less than 200kb of free storage.&lt;/p&gt;
&lt;p&gt;I did some reading and found that Buster seems to need a lot more space in &lt;code&gt;/boot&lt;/code&gt; than for previous releases. Buster itself now defaults to 256M of space for &lt;code&gt;/boot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So I went about solving this issue.&lt;/p&gt;
&lt;p&gt;I would suggest that you do these steps before upgrading just to avoid any possible problems.&lt;/p&gt;</description></item><item><title>Bind DNS Setup</title><link>https://bas-man.dev/docs/bind-dns-setup/</link><pubDate>Fri, 27 Nov 2020 17:30:00 +0900</pubDate><guid>https://bas-man.dev/docs/bind-dns-setup/</guid><description>A guide on setting up a caching and authoritative name server.</description></item><item><title>Presence Detection with BLE using monitor.sh &amp; Home Assistant</title><link>https://bas-man.dev/post/ble-presence-detection-home-assistant/</link><pubDate>Tue, 10 Nov 2020 19:30:00 +0900</pubDate><guid>https://bas-man.dev/post/ble-presence-detection-home-assistant/</guid><description>&lt;p&gt;I have been running &lt;a href="https://www.home-assistant.io/hassio/"&gt;Home Assistant&lt;/a&gt; for a while. Things are going well. But I have had some issues with presence detection using the standard &lt;em&gt;device_tracker&lt;/em&gt; component. Though I live in a small place, being in Tokyo, Home Assistant sometimes stops detecting phones if they are in an area of the apartment a little away from the Home Assistant server. This I suspect is due to the position of the Raspberry Pi and the building material.&lt;/p&gt;</description></item><item><title>Use launchd instead of crontab on your Mac</title><link>https://bas-man.dev/post/launchd-instead-of-cron/</link><pubDate>Tue, 18 Aug 2020 16:30:00 +0900</pubDate><guid>https://bas-man.dev/post/launchd-instead-of-cron/</guid><description>&lt;p&gt;As of &lt;code&gt;Mac OS 10.4&lt;/code&gt; &lt;strong&gt;crontab&lt;/strong&gt; has been depreciated but not ended. So its a good idea to know how to use its replacement under Mac OS. Welcome to &lt;code&gt;Launchd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This will be a short guide on how to use launchd in a simple form to replace a crontab job. In my case I am automating the backup of my Plex server.
You can see my previous article &lt;a href="https://bas-man.dev/post/plex-macos-backup/"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Launchd has a lot of other features. I will not look at them here.&lt;/p&gt;</description></item><item><title>Publish your next Hugo blog post automatically using Github Actions</title><link>https://bas-man.dev/post/hugo/hugo-auto-publish/</link><pubDate>Sat, 08 Aug 2020 08:00:00 +0900</pubDate><guid>https://bas-man.dev/post/hugo/hugo-auto-publish/</guid><description>&lt;h2 id="the-challenge"&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;I wanted to be able to publish a new post that has already been written at a future date, without needing to manually publish the article.&lt;/p&gt;</description></item><item><title>Private Hugo Repo to Public on Github</title><link>https://bas-man.dev/post/hugo/hugo-private-to-public-github/</link><pubDate>Thu, 06 Aug 2020 16:51:00 +0900</pubDate><guid>https://bas-man.dev/post/hugo/hugo-private-to-public-github/</guid><description>&lt;p&gt;I was researching ways of moving to &lt;a href="https://gohugo.io"&gt;Hugo&lt;/a&gt; for my site generator. I looked at a few options and as part of this I came a cross a workflow in github that allows me to store my site in a private repo and then publish the site to a public repo without too much fuss.&lt;/p&gt;</description></item><item><title>CI on Github for Python</title><link>https://bas-man.dev/post/python/github-python-action/</link><pubDate>Tue, 04 Aug 2020 00:00:00 +0900</pubDate><guid>https://bas-man.dev/post/python/github-python-action/</guid><description>&lt;p&gt;So I finally thought it was time to start doing some continuous integration testing as well as testing with multiple versions of Python.&lt;/p&gt;</description></item><item><title>Gmail Zapier LINE Notify</title><link>https://bas-man.dev/docs/gmail-zapier-line-notify/</link><pubDate>Fri, 24 Jul 2020 15:44:35 +0900</pubDate><guid>https://bas-man.dev/docs/gmail-zapier-line-notify/</guid><description>This documents how to setup integration between GMail, Zapier and LINE for any automated notification service received through LINE.</description></item><item><title>Add a cookie warning notice to a Hugo powered site</title><link>https://bas-man.dev/post/add-cookie-warning/</link><pubDate>Thu, 16 Jul 2020 00:00:00 +0900</pubDate><guid>https://bas-man.dev/post/add-cookie-warning/</guid><description>&lt;h2 id="the-challenge"&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;How to add a cookie warning notice to a Hugo powered website. But also avoid using a third party service.&lt;/p&gt;
&lt;h2 id="the-solution"&gt;The Solution&lt;/h2&gt;
&lt;p&gt;Build your own. Well, find someone who built one and shared it on youtube and github.&lt;/p&gt;</description></item><item><title>Privacy Policy</title><link>https://bas-man.dev/privacy/</link><pubDate>Fri, 10 Jul 2020 10:13:25 +0900</pubDate><guid>https://bas-man.dev/privacy/</guid><description>&lt;p&gt;This site, &lt;a href="https://bas-man.dev/"&gt;https://bas-man.dev/&lt;/a&gt;, hosts the thoughts of myself, and references to material I find on the internet.&lt;/p&gt;
&lt;h2 id="google-analytics"&gt;Google Analytics&lt;/h2&gt;
&lt;p&gt;We also use Google Analytics on this website. A small amount of anonymous data is sent to the Google’s servers. Information such as your ISP, browser, operating system, geo-location and so on. We use these reports to improve our site’s articles (content), and design for our visitors. Google Analytics put cookies on your computer. Please see the &lt;a href="https://marketingplatform.google.com/about/analytics/terms/us/"&gt;Google Analytics Terms of Service&lt;/a&gt; for more information.&lt;/p&gt;</description></item><item><title>Who am I?</title><link>https://bas-man.dev/about/</link><pubDate>Tue, 07 Jul 2020 23:55:00 +0900</pubDate><guid>https://bas-man.dev/about/</guid><description>&lt;p&gt;These days I am a hobbyist programmer. Though my background is in Networking
and Unix/Linux administration.&lt;/p&gt;
&lt;p&gt;I have been living and working in Tokyo for the past 18 years.&lt;/p&gt;
&lt;h2 id="some-of-my-interests"&gt;Some of my interests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Software and Systems&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Perl&lt;/li&gt;
&lt;li&gt;Rust&lt;/li&gt;
&lt;li&gt;Google Script&lt;/li&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Languages I most frequently use based on Github repositories. Does not denote
skill levels.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://github-readme-stats.vercel.app/api/top-langs/?username=Bas-Man&amp;amp;hide=Makefile,HTML,html,roff,ROFF]" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Powered By: &lt;a href="https://github.com/anuraghazra/github-readme-stats"&gt;anuraghazra@Github&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="reading"&gt;Reading&lt;/h2&gt;
&lt;p&gt;If you are interested in what kind of books I enjoy reading.
Check things &lt;a href="https://bas-man.dev/reading/"&gt;here&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Back up your Plex Media Server on Mac OS</title><link>https://bas-man.dev/post/plex-macos-backup/</link><pubDate>Sat, 16 May 2020 12:00:00 +0900</pubDate><guid>https://bas-man.dev/post/plex-macos-backup/</guid><description>&lt;h2 id="the-challenge"&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;How to automate the backing up of my &lt;a href="https://www.plex.tv"&gt;Plex Media Server&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;p&gt;A Bash Script&lt;/p&gt;
&lt;p&gt;I wanted to automate this process. If I didn&amp;rsquo;t, it probably wouldn&amp;rsquo;t get done.&lt;/p&gt;</description></item><item><title>Delay Services launch until external drive mount is complete</title><link>https://bas-man.dev/post/startup-apple-script/</link><pubDate>Thu, 14 May 2020 14:30:00 +0900</pubDate><guid>https://bas-man.dev/post/startup-apple-script/</guid><description>&lt;h2 id="the-challenge"&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;How to give Drobo time to mount before processes that need access to it begin and hence block it&amp;rsquo;s mounting by having the mount point in use.&lt;/p&gt;</description></item><item><title>Site Launch</title><link>https://bas-man.dev/post/site-launched/</link><pubDate>Mon, 11 May 2020 00:00:00 +0900</pubDate><guid>https://bas-man.dev/post/site-launched/</guid><description>&lt;p&gt;Well. Finally got around to putting this site together. Actually this is attempt number two.&lt;/p&gt;
&lt;p&gt;I will try to post some of my small personal projects and thoughts here. I will also probably
create a cheat sheet for myself.&lt;/p&gt;
&lt;p&gt;Anyway,
I shall see how it goes.&lt;/p&gt;</description></item><item><title>Contact</title><link>https://bas-man.dev/contact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bas-man.dev/contact/</guid><description>&lt;form name="contact" class="contact-form width-normal" action="https://bas-man.dev/thank-you/" data-netlify-recaptcha="true" method="POST" data-netlify="true"&gt;
 &lt;input type="hidden" name="form-name" value="contact" /&gt;
 &lt;!-- Text input--&gt;
 &lt;div class="form-group"&gt;
 &lt;label class="col-md-4 control-label" for="Name"&gt;&lt;/label&gt;
 &lt;div class="col-md-4"&gt;
 &lt;input id="contact-form-name" name="Name" type="text" placeholder="Name" class="form-control input-md" required="" autocomplete="off"&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;!-- Text input--&gt;
 &lt;div class="form-group"&gt;
 &lt;label class="col-md-4 control-label" for="Email"&gt;&lt;/label&gt;
 &lt;div class="col-md-4"&gt;
 &lt;input id="contact-form-email" name="Email" type="email" placeholder="Email Address" class="form-control input-md" required="" autocomplete="off"&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;!-- Text input--&gt;
 &lt;div class="form-group"&gt;
 &lt;label class="col-md-4 control-label" for="Subject"&gt;&lt;/label&gt;
 &lt;div class="col-md-4"&gt;
 &lt;input id="contact-form-subject" name="Subject" type="text" placeholder="Subject" class="form-control input-md" required="" autocomplete="off"&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;!-- Textarea --&gt;
 &lt;div class="form-group"&gt;
 &lt;label class="col-md-4 control-label" for=""&gt;&lt;/label&gt;
 &lt;textarea class="form-control" id="contact-form-message" name="Message" placeholder="What's up?" rows="8"&gt;&lt;/textarea&gt;
 &lt;/div&gt;
 &lt;div data-netlify-recaptcha="true" class="form-row"&gt;&lt;/div&gt;
 &lt;!-- Button --&gt;
 &lt;div class="form-group"&gt;
 &lt;button type="submit" value="Submit" id="Form-submit"&gt;Submit&lt;/button&gt;
 &lt;/div&gt;
&lt;/form&gt;</description></item><item><title>Thank you for your Submission</title><link>https://bas-man.dev/thank-you/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://bas-man.dev/thank-you/</guid><description/></item></channel></rss>