<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[TalkativeTurtles - Tutorials & Resources]]></title>
		<link>https://talkativeturtles.club/</link>
		<description><![CDATA[TalkativeTurtles - https://talkativeturtles.club]]></description>
		<pubDate>Wed, 05 Aug 2026 13:53:25 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Free learning sites that are actually good]]></title>
			<link>https://talkativeturtles.club/showthread.php?tid=122</link>
			<pubDate>Sat, 04 Jul 2026 20:35:25 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://talkativeturtles.club/member.php?action=profile&uid=1">Zero Two</a>]]></dc:creator>
			<guid isPermaLink="false">https://talkativeturtles.club/showthread.php?tid=122</guid>
			<description><![CDATA[Curating the good ones. Criteria: free tier that is actually useful, active, not just video re-recordings of textbooks.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Programming and CS</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">CS50</span> - Harvard intro course. Genuinely excellent production and pedagogy. Best free intro to CS.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The Odin Project</span> - Full stack web from zero. Project-based, no hand-holding.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Exercism</span> - Practice exercises in 60+ languages with real human mentoring. Free tier is generous.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Codecrafters</span> - Build Redis, Git, HTTP server from scratch. Challenging and practical.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Security</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">TryHackMe</span> - Best onboarding for beginners. Guided paths, browser-based labs.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">HackTheBox</span> - Harder, more realistic machines. Free tier has retired machines.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PicoCTF</span> - CTF platform aimed at students, good for fundamentals.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Networking</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Professor Messer</span> - CompTIA material, free videos. Dry but thorough.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">GNS3 Academy</span> - Networking labs you can run locally.<br />
</li>
</ul>
<br />
Add yours below. Link and one sentence on who it is best for.]]></description>
			<content:encoded><![CDATA[Curating the good ones. Criteria: free tier that is actually useful, active, not just video re-recordings of textbooks.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Programming and CS</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">CS50</span> - Harvard intro course. Genuinely excellent production and pedagogy. Best free intro to CS.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The Odin Project</span> - Full stack web from zero. Project-based, no hand-holding.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Exercism</span> - Practice exercises in 60+ languages with real human mentoring. Free tier is generous.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Codecrafters</span> - Build Redis, Git, HTTP server from scratch. Challenging and practical.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Security</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">TryHackMe</span> - Best onboarding for beginners. Guided paths, browser-based labs.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">HackTheBox</span> - Harder, more realistic machines. Free tier has retired machines.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PicoCTF</span> - CTF platform aimed at students, good for fundamentals.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Networking</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Professor Messer</span> - CompTIA material, free videos. Dry but thorough.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">GNS3 Academy</span> - Networking labs you can run locally.<br />
</li>
</ul>
<br />
Add yours below. Link and one sentence on who it is best for.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Tutorial] SSH keys - setup, security, and useful config tricks]]></title>
			<link>https://talkativeturtles.club/showthread.php?tid=95</link>
			<pubDate>Mon, 22 Jun 2026 14:31:36 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://talkativeturtles.club/member.php?action=profile&uid=1">Zero Two</a>]]></dc:creator>
			<guid isPermaLink="false">https://talkativeturtles.club/showthread.php?tid=95</guid>
			<description><![CDATA[SSH password authentication is insecure and inconvenient. Key-based auth is more secure and faster once set up. Here's everything you need.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Generate a key pair</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ssh-keygen -t ed25519 -C "your_comment_here"<br />
# ed25519 is preferred over RSA - shorter keys, faster, more secure<br />
# Add a passphrase when prompted - protects the key if your machine is compromised</code></div></div><br />
This creates <span style="font-family: monospace;" class="mycode_font">~/.ssh/id_ed25519</span> (private - never share this) and <span style="font-family: monospace;" class="mycode_font">~/.ssh/id_ed25519.pub</span> (public - safe to share).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Copy your public key to a server</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ssh-copy-id user@server<br />
# Or manually:<br />
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh &amp;&amp; cat &gt;&gt; ~/.ssh/authorized_keys"</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Disable password auth on the server (do this after confirming keys work)</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># In /etc/ssh/sshd_config:<br />
PasswordAuthentication no<br />
PubkeyAuthentication yes<br />
<br />
sudo systemctl restart sshd</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">SSH config file (~/.ssh/config) - underused and very useful</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Host myserver<br />
&nbsp;&nbsp;&nbsp;&nbsp;HostName 192.168.1.100<br />
&nbsp;&nbsp;&nbsp;&nbsp;User ubuntu<br />
&nbsp;&nbsp;&nbsp;&nbsp;IdentityFile ~/.ssh/id_ed25519<br />
&nbsp;&nbsp;&nbsp;&nbsp;ServerAliveInterval 60<br />
<br />
Host bastion<br />
&nbsp;&nbsp;&nbsp;&nbsp;HostName bastion.example.com<br />
&nbsp;&nbsp;&nbsp;&nbsp;User deploy<br />
&nbsp;&nbsp;&nbsp;&nbsp;ForwardAgent yes<br />
<br />
Host internal<br />
&nbsp;&nbsp;&nbsp;&nbsp;HostName 10.0.0.50<br />
&nbsp;&nbsp;&nbsp;&nbsp;User admin<br />
&nbsp;&nbsp;&nbsp;&nbsp;ProxyJump bastion&nbsp;&nbsp; # connect via bastion host</code></div></div><br />
With this config, <span style="font-family: monospace;" class="mycode_font">ssh myserver</span> connects without typing IP, username, or specifying the key.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ssh-agent for passphrase convenience</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>eval "&#36;(ssh-agent -s)"<br />
ssh-add ~/.ssh/id_ed25519<br />
# Now the passphrase is cached for the session</code></div></div><br />
On Mac: add <span style="font-family: monospace;" class="mycode_font">UseKeychain yes</span> and <span style="font-family: monospace;" class="mycode_font">AddKeysToAgent yes</span> to your SSH config and the passphrase saves to Keychain.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Security checklist:</span><ul class="mycode_list"><li>Use ed25519, not RSA 2048<br />
</li>
<li>Use a passphrase on the private key<br />
</li>
<li>Disable password auth on servers you control<br />
</li>
<li>Never put private keys on servers (use agent forwarding or ProxyJump instead)<br />
</li>
<li>Rotate keys if a machine is compromised<br />
</li>
</ul>
]]></description>
			<content:encoded><![CDATA[SSH password authentication is insecure and inconvenient. Key-based auth is more secure and faster once set up. Here's everything you need.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Generate a key pair</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ssh-keygen -t ed25519 -C "your_comment_here"<br />
# ed25519 is preferred over RSA - shorter keys, faster, more secure<br />
# Add a passphrase when prompted - protects the key if your machine is compromised</code></div></div><br />
This creates <span style="font-family: monospace;" class="mycode_font">~/.ssh/id_ed25519</span> (private - never share this) and <span style="font-family: monospace;" class="mycode_font">~/.ssh/id_ed25519.pub</span> (public - safe to share).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Copy your public key to a server</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ssh-copy-id user@server<br />
# Or manually:<br />
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh &amp;&amp; cat &gt;&gt; ~/.ssh/authorized_keys"</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Disable password auth on the server (do this after confirming keys work)</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># In /etc/ssh/sshd_config:<br />
PasswordAuthentication no<br />
PubkeyAuthentication yes<br />
<br />
sudo systemctl restart sshd</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">SSH config file (~/.ssh/config) - underused and very useful</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Host myserver<br />
&nbsp;&nbsp;&nbsp;&nbsp;HostName 192.168.1.100<br />
&nbsp;&nbsp;&nbsp;&nbsp;User ubuntu<br />
&nbsp;&nbsp;&nbsp;&nbsp;IdentityFile ~/.ssh/id_ed25519<br />
&nbsp;&nbsp;&nbsp;&nbsp;ServerAliveInterval 60<br />
<br />
Host bastion<br />
&nbsp;&nbsp;&nbsp;&nbsp;HostName bastion.example.com<br />
&nbsp;&nbsp;&nbsp;&nbsp;User deploy<br />
&nbsp;&nbsp;&nbsp;&nbsp;ForwardAgent yes<br />
<br />
Host internal<br />
&nbsp;&nbsp;&nbsp;&nbsp;HostName 10.0.0.50<br />
&nbsp;&nbsp;&nbsp;&nbsp;User admin<br />
&nbsp;&nbsp;&nbsp;&nbsp;ProxyJump bastion&nbsp;&nbsp; # connect via bastion host</code></div></div><br />
With this config, <span style="font-family: monospace;" class="mycode_font">ssh myserver</span> connects without typing IP, username, or specifying the key.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ssh-agent for passphrase convenience</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>eval "&#36;(ssh-agent -s)"<br />
ssh-add ~/.ssh/id_ed25519<br />
# Now the passphrase is cached for the session</code></div></div><br />
On Mac: add <span style="font-family: monospace;" class="mycode_font">UseKeychain yes</span> and <span style="font-family: monospace;" class="mycode_font">AddKeysToAgent yes</span> to your SSH config and the passphrase saves to Keychain.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Security checklist:</span><ul class="mycode_list"><li>Use ed25519, not RSA 2048<br />
</li>
<li>Use a passphrase on the private key<br />
</li>
<li>Disable password auth on servers you control<br />
</li>
<li>Never put private keys on servers (use agent forwarding or ProxyJump instead)<br />
</li>
<li>Rotate keys if a machine is compromised<br />
</li>
</ul>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Tutorial] Essential Git commands and workflows every developer should know]]></title>
			<link>https://talkativeturtles.club/showthread.php?tid=69</link>
			<pubDate>Mon, 22 Jun 2026 14:09:51 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://talkativeturtles.club/member.php?action=profile&uid=1">Zero Two</a>]]></dc:creator>
			<guid isPermaLink="false">https://talkativeturtles.club/showthread.php?tid=69</guid>
			<description><![CDATA[Git is one of those tools where most people learn just enough to get by and then stay at that level forever. Here's a reference for the commands that go beyond the basics and are worth knowing.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">The stuff everyone knows</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git clone, git add, git commit, git push, git pull</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Branching properly</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git switch -c feature/my-feature&nbsp;&nbsp;&nbsp;&nbsp;# create and switch to new branch<br />
git switch main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # go back to main<br />
git branch -d feature/my-feature&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# delete branch after merge</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Staging selectively</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git add -p&nbsp;&nbsp;&nbsp;&nbsp;# interactively choose hunks to stage (very useful)</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Fixing mistakes</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git restore --staged file.txt&nbsp;&nbsp;&nbsp;&nbsp;# unstage a file<br />
git restore file.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# discard local changes to a file<br />
git commit --amend --no-edit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# add staged changes to the last commit without changing the message<br />
git reset HEAD~1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# undo the last commit but keep the changes staged</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Investigating history</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git log --oneline --graph --all&nbsp;&nbsp;&nbsp;&nbsp;# visual branch history<br />
git log -p file.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# full history of changes to a file<br />
git blame file.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # who changed each line and when<br />
git diff main...feature&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# what changed on feature branch since it diverged from main</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Finding regressions</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git bisect start<br />
git bisect bad HEAD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # current commit is broken<br />
git bisect good v1.2.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# this version was fine<br />
# git tests each midpoint, you mark good/bad until it finds the commit</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Stashing work in progress</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git stash&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # save dirty working tree<br />
git stash list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # see all stashes<br />
git stash pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# restore most recent stash</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Cleaning up</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git clean -fd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# delete untracked files and directories (careful - irreversible)</code></div></div><br />
A good Git mental model: commits are snapshots, branches are pointers to commits, and most "scary" commands (reset, rebase) just move these pointers around. Once that clicks, the tool becomes much less mysterious.]]></description>
			<content:encoded><![CDATA[Git is one of those tools where most people learn just enough to get by and then stay at that level forever. Here's a reference for the commands that go beyond the basics and are worth knowing.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">The stuff everyone knows</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git clone, git add, git commit, git push, git pull</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Branching properly</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git switch -c feature/my-feature&nbsp;&nbsp;&nbsp;&nbsp;# create and switch to new branch<br />
git switch main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # go back to main<br />
git branch -d feature/my-feature&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# delete branch after merge</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Staging selectively</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git add -p&nbsp;&nbsp;&nbsp;&nbsp;# interactively choose hunks to stage (very useful)</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Fixing mistakes</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git restore --staged file.txt&nbsp;&nbsp;&nbsp;&nbsp;# unstage a file<br />
git restore file.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# discard local changes to a file<br />
git commit --amend --no-edit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# add staged changes to the last commit without changing the message<br />
git reset HEAD~1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# undo the last commit but keep the changes staged</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Investigating history</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git log --oneline --graph --all&nbsp;&nbsp;&nbsp;&nbsp;# visual branch history<br />
git log -p file.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# full history of changes to a file<br />
git blame file.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # who changed each line and when<br />
git diff main...feature&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# what changed on feature branch since it diverged from main</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Finding regressions</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git bisect start<br />
git bisect bad HEAD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # current commit is broken<br />
git bisect good v1.2.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# this version was fine<br />
# git tests each midpoint, you mark good/bad until it finds the commit</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Stashing work in progress</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git stash&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # save dirty working tree<br />
git stash list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # see all stashes<br />
git stash pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# restore most recent stash</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Cleaning up</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git clean -fd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# delete untracked files and directories (careful - irreversible)</code></div></div><br />
A good Git mental model: commits are snapshots, branches are pointers to commits, and most "scary" commands (reset, rebase) just move these pointers around. Once that clicks, the tool becomes much less mysterious.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Tutorial] Setting up a WireGuard VPN on a cheap VPS - complete guide]]></title>
			<link>https://talkativeturtles.club/showthread.php?tid=68</link>
			<pubDate>Mon, 22 Jun 2026 14:02:51 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://talkativeturtles.club/member.php?action=profile&uid=1">Zero Two</a>]]></dc:creator>
			<guid isPermaLink="false">https://talkativeturtles.club/showthread.php?tid=68</guid>
			<description><![CDATA[WireGuard is the cleanest way to get a private tunnel between your devices and a server you control. This guide covers setting up a WireGuard server on a Debian/Ubuntu VPS and connecting a Linux client. Adapt for other OS as needed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Prerequisites</span><ul class="mycode_list"><li>A VPS running Debian 12 or Ubuntu 22.04+ (any cheap £3-5/mo provider works)<br />
</li>
<li>Root or sudo access<br />
</li>
<li>Your server's public IP address<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Step 1: Install WireGuard on the server</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt update &amp;&amp; sudo apt install wireguard -y</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 2: Generate server keys</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wg genkey | tee /etc/wireguard/server_private.key | wg pubkey &gt; /etc/wireguard/server_public.key<br />
chmod 600 /etc/wireguard/server_private.key</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 3: Create server config at /etc/wireguard/wg0.conf</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[Interface]<br />
Address = 10.0.0.1/24<br />
ListenPort = 51820<br />
PrivateKey = &lt;server_private_key&gt;<br />
<br />
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE<br />
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE<br />
<br />
[Peer]<br />
PublicKey = &lt;client_public_key&gt;<br />
AllowedIPs = 10.0.0.2/32</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 4: Enable IP forwarding</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf<br />
sudo sysctl -p</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 5: Start and enable the service</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo systemctl enable --now wg-quick@wg0</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 6: On the client</span><br />
Install WireGuard, generate a client keypair the same way, then create /etc/wireguard/wg0.conf:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[Interface]<br />
Address = 10.0.0.2/24<br />
PrivateKey = &lt;client_private_key&gt;<br />
DNS = 1.1.1.1<br />
<br />
[Peer]<br />
PublicKey = &lt;server_public_key&gt;<br />
Endpoint = &lt;server_ip&gt;:51820<br />
AllowedIPs = 0.0.0.0/0<br />
PersistentKeepalive = 25</code></div></div><br />
Bring it up with <span style="font-family: monospace;" class="mycode_font">sudo wg-quick up wg0</span> and check the connection with <span style="font-family: monospace;" class="mycode_font">sudo wg show</span>.<br />
<br />
Set <span style="font-family: monospace;" class="mycode_font">AllowedIPs = 10.0.0.0/24</span> instead of <span style="font-family: monospace;" class="mycode_font">0.0.0.0/0</span> if you only want LAN access rather than routing all traffic through the VPN.<br />
<br />
Questions welcome - happy to help troubleshoot.]]></description>
			<content:encoded><![CDATA[WireGuard is the cleanest way to get a private tunnel between your devices and a server you control. This guide covers setting up a WireGuard server on a Debian/Ubuntu VPS and connecting a Linux client. Adapt for other OS as needed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Prerequisites</span><ul class="mycode_list"><li>A VPS running Debian 12 or Ubuntu 22.04+ (any cheap £3-5/mo provider works)<br />
</li>
<li>Root or sudo access<br />
</li>
<li>Your server's public IP address<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Step 1: Install WireGuard on the server</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt update &amp;&amp; sudo apt install wireguard -y</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 2: Generate server keys</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wg genkey | tee /etc/wireguard/server_private.key | wg pubkey &gt; /etc/wireguard/server_public.key<br />
chmod 600 /etc/wireguard/server_private.key</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 3: Create server config at /etc/wireguard/wg0.conf</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[Interface]<br />
Address = 10.0.0.1/24<br />
ListenPort = 51820<br />
PrivateKey = &lt;server_private_key&gt;<br />
<br />
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE<br />
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE<br />
<br />
[Peer]<br />
PublicKey = &lt;client_public_key&gt;<br />
AllowedIPs = 10.0.0.2/32</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 4: Enable IP forwarding</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf<br />
sudo sysctl -p</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 5: Start and enable the service</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo systemctl enable --now wg-quick@wg0</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 6: On the client</span><br />
Install WireGuard, generate a client keypair the same way, then create /etc/wireguard/wg0.conf:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[Interface]<br />
Address = 10.0.0.2/24<br />
PrivateKey = &lt;client_private_key&gt;<br />
DNS = 1.1.1.1<br />
<br />
[Peer]<br />
PublicKey = &lt;server_public_key&gt;<br />
Endpoint = &lt;server_ip&gt;:51820<br />
AllowedIPs = 0.0.0.0/0<br />
PersistentKeepalive = 25</code></div></div><br />
Bring it up with <span style="font-family: monospace;" class="mycode_font">sudo wg-quick up wg0</span> and check the connection with <span style="font-family: monospace;" class="mycode_font">sudo wg show</span>.<br />
<br />
Set <span style="font-family: monospace;" class="mycode_font">AllowedIPs = 10.0.0.0/24</span> instead of <span style="font-family: monospace;" class="mycode_font">0.0.0.0/0</span> if you only want LAN access rather than routing all traffic through the VPN.<br />
<br />
Questions welcome - happy to help troubleshoot.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Index] Community Tutorial & Resource Index]]></title>
			<link>https://talkativeturtles.club/showthread.php?tid=52</link>
			<pubDate>Sun, 21 Jun 2026 09:42:20 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://talkativeturtles.club/member.php?action=profile&uid=1">Zero Two</a>]]></dc:creator>
			<guid isPermaLink="false">https://talkativeturtles.club/showthread.php?tid=52</guid>
			<description><![CDATA[This thread indexes the best tutorials and resources posted by community members. Staff will update it as good content is posted.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">How to get your post listed:</span><br />
Post a well-written tutorial or curated resource list in this forum. If staff find it useful, it will be added here.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Index</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">Nothing listed yet - be the first to post a tutorial!</span><br />
<br />
We are looking for:<ul class="mycode_list"><li>Step-by-step guides (setting up a dev environment, configuring a service, wiring a circuit)<br />
</li>
<li>Curated resource lists by topic<br />
</li>
<li>Cheat sheets for tools and languages<br />
</li>
<li>Explained walkthroughs of interesting code or concepts<br />
</li>
</ul>
<br />
Quality over quantity. A short guide that actually works beats a list of 50 links nobody has checked.]]></description>
			<content:encoded><![CDATA[This thread indexes the best tutorials and resources posted by community members. Staff will update it as good content is posted.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">How to get your post listed:</span><br />
Post a well-written tutorial or curated resource list in this forum. If staff find it useful, it will be added here.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Index</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">Nothing listed yet - be the first to post a tutorial!</span><br />
<br />
We are looking for:<ul class="mycode_list"><li>Step-by-step guides (setting up a dev environment, configuring a service, wiring a circuit)<br />
</li>
<li>Curated resource lists by topic<br />
</li>
<li>Cheat sheets for tools and languages<br />
</li>
<li>Explained walkthroughs of interesting code or concepts<br />
</li>
</ul>
<br />
Quality over quantity. A short guide that actually works beats a list of 50 links nobody has checked.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Rules] Tutorials & Resources — Forum Rules]]></title>
			<link>https://talkativeturtles.club/showthread.php?tid=20</link>
			<pubDate>Sun, 21 Jun 2026 09:34:07 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://talkativeturtles.club/member.php?action=profile&uid=1">Zero Two</a>]]></dc:creator>
			<guid isPermaLink="false">https://talkativeturtles.club/showthread.php?tid=20</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Tutorials &amp; Resources</span> is for sharing guides, cheat sheets, curated links, and learning material with the community.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Posting Rules:</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Content must be useful and original in presentation.</span> Do not just paste a link with no context - explain what the resource is and why it is worth reading.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Disclose if you are the author</span> of a linked tutorial or resource.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">No affiliate links</span> unless clearly disclosed.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Keep resources up to date.</span> If you post a tutorial that becomes outdated, update the original post or note the version it applies to.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">No paywalled content without warning.</span> If a resource requires a paid subscription or account, say so upfront.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Verify before posting.</span> Do not share resources you have not personally used or vetted.<br />
</li>
</ul>
]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Tutorials &amp; Resources</span> is for sharing guides, cheat sheets, curated links, and learning material with the community.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Posting Rules:</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Content must be useful and original in presentation.</span> Do not just paste a link with no context - explain what the resource is and why it is worth reading.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Disclose if you are the author</span> of a linked tutorial or resource.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">No affiliate links</span> unless clearly disclosed.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Keep resources up to date.</span> If you post a tutorial that becomes outdated, update the original post or note the version it applies to.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">No paywalled content without warning.</span> If a resource requires a paid subscription or account, say so upfront.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Verify before posting.</span> Do not share resources you have not personally used or vetted.<br />
</li>
</ul>
]]></content:encoded>
		</item>
	</channel>
</rss>