<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Miscellaneous on Eric Spencer</title><link>https://dev.ericspencer.us/miscellaneous/</link><description>Recent content in Miscellaneous on Eric Spencer</description><generator>Hugo -- 0.145.0</generator><language>en-us</language><lastBuildDate>Wed, 14 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://dev.ericspencer.us/miscellaneous/index.xml" rel="self" type="application/rss+xml"/><item><title>Sneaker Run</title><link>https://dev.ericspencer.us/miscellaneous/sneaker-run/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/sneaker-run/</guid><description>An endless runner game with a sneaker theme, built with vanilla JavaScript and HTML5 Canvas.</description></item><item><title>Fortnite OneShot</title><link>https://dev.ericspencer.us/miscellaneous/fortnite-oneshot/</link><pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/fortnite-oneshot/</guid><description>A playable browser-based Fortnite game generated by Claude Opus 4.5.</description></item><item><title>OneShot HM2016</title><link>https://dev.ericspencer.us/miscellaneous/oneshot-hm2016/</link><pubDate>Fri, 26 Dec 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/oneshot-hm2016/</guid><description>A browser-based HITMAN-style first-person shooter built with HTML5 Canvas.</description></item><item><title>BioOps Web</title><link>https://dev.ericspencer.us/miscellaneous/bio-ops-web/</link><pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/bio-ops-web/</guid><description>A React + Tailwind starter site for BioOps, an environmental awareness initiative.</description></item><item><title>Great Chicago Fire Digital Exhibit</title><link>https://dev.ericspencer.us/miscellaneous/gcf-de/</link><pubDate>Fri, 14 Nov 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/gcf-de/</guid><description>An interactive digital exhibit about the Great Chicago Fire, built with SvelteKit and D3.js.</description></item><item><title>Auto Decode</title><link>https://dev.ericspencer.us/miscellaneous/auto-decode/</link><pubDate>Thu, 06 Nov 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/auto-decode/</guid><description>Browser-based tool that automatically detects and decodes strings across multiple encoding formats.</description></item><item><title>Conway's Game of Life</title><link>https://dev.ericspencer.us/miscellaneous/gameoflife/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/gameoflife/</guid><description>Interactive implementation of Conway&amp;#39;s Game of Life with preset patterns</description></item><item><title>Windows Design Website</title><link>https://dev.ericspencer.us/miscellaneous/windows/</link><pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/windows/</guid><description>&lt;p>Homepage of the website as imagined it would look like as a Windows 7 homepage.&lt;/p>
&lt;p>Website loading&amp;hellip;&lt;/p>
&lt;meta http-equiv="refresh" content="0; url=https://dev.ericspencer.us/miscellaneous/windows.html"></description></item><item><title>How to tell if written work is AI</title><link>https://dev.ericspencer.us/miscellaneous/tell-ai/</link><pubDate>Thu, 31 Jul 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/tell-ai/</guid><description>Easily tell if something is AI using these obvious giveaways</description></item><item><title>Chess Game</title><link>https://dev.ericspencer.us/miscellaneous/chess/</link><pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/chess/</guid><description>Interactive chess game with AI opponent</description></item><item><title>BlackJack Game</title><link>https://dev.ericspencer.us/miscellaneous/blackjack/</link><pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/blackjack/</guid><description>Play BlackJack with fake money</description></item><item><title>GitHub pfp Generator</title><link>https://dev.ericspencer.us/miscellaneous/pixel-profile/</link><pubDate>Wed, 04 Jun 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/pixel-profile/</guid><description>&lt;p>Generate a default GitHub profile picture below, Generate a new profile as much as you please.&lt;/p>
&lt;!DOCTYPE html>
&lt;html lang="en">
&lt;head>
&lt;meta charset="UTF-8">
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0">
&lt;title>Generate a Default GitHub Profile Picture&lt;/title>
&lt;!-- Tailwind CSS CDN -->
&lt;script src="https://cdn.tailwindcss.com">&lt;/script>
&lt;style>
/* Custom font for better aesthetics */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&amp;display=swap');
canvas {
border: 2px solid #e5e7eb; /* Light border for the canvas */
background-color: #ffffff; /* White background for pixels */
image-rendering: pixelated; /* Ensures crisp pixel rendering */
image-rendering: -moz-crisp-edges;
image-rendering: crisp-edges;
border-radius: 0.75rem; /* Rounded corners for the canvas */
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); /* Subtle shadow */
}
&lt;/style>
&lt;/head>
&lt;body>
&lt;div class="bg-white p-8 rounded-xl shadow-lg w-full max-w-2xl mx-auto text-center">
&lt;h1 class="text-3xl font-bold text-gray-800 mb-6">Generate a Default GitHub Profile Picture&lt;/h1>
&lt;!-- Canvas for drawing the pixel art -->
&lt;canvas id="pixelCanvas" class="w-64 h-64 mx-auto mb-6">&lt;/canvas>
&lt;div class="flex flex-col sm:flex-row justify-center space-y-4 sm:space-y-0 sm:space-x-4">
&lt;!-- Generate New Button -->
&lt;button id="generateBtn" class="bg-blue-600 hover:bg-blue-700 text-white font-semibold py-3 px-6 rounded-lg shadow-md transition duration-300 ease-in-out transform hover:scale-105 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-75">
Generate New
&lt;/button>
&lt;!-- Download Button -->
&lt;button id="downloadBtn" class="bg-green-600 hover:bg-green-700 text-white font-semibold py-3 px-6 rounded-lg shadow-md transition duration-300 ease-in-out transform hover:scale-105 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-opacity-75">
Download Image
&lt;/button>
&lt;/div>
&lt;/div>
&lt;script>
// Get references to the canvas and buttons
const canvas = document.getElementById('pixelCanvas');
const ctx = canvas.getContext('2d');
const generateBtn = document.getElementById('generateBtn');
const downloadBtn = document.getElementById('downloadBtn');
// Configuration for the pixel art
const PIXEL_GRID_SIZE = 7;
const TARGET_CANVAS_DIMENSION = 280;
const PIXEL_BLOCK_SIZE = TARGET_CANVAS_DIMENSION / PIXEL_GRID_SIZE;
// Set canvas dimensions
canvas.width = TARGET_CANVAS_DIMENSION;
canvas.height = TARGET_CANVAS_DIMENSION;
// Global variable to store the density map
let densityMap;
function getRandomColor() {
const letters = '0123456789ABCDEF';
let color = '#';
for (let i = 0; i &lt; 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
function createDensityMap() {
const map = Array(PIXEL_GRID_SIZE).fill(0).map(() => Array(PIXEL_GRID_SIZE).fill(0));
const centerX = (PIXEL_GRID_SIZE - 1) / 2;
const centerY = (PIXEL_GRID_SIZE - 1) / 2;
const maxDistance = Math.sqrt(Math.pow(0 - centerX, 2) + Math.pow(0 - centerY, 2));
const halfGridSize = Math.ceil(PIXEL_GRID_SIZE / 2);
for (let y = 0; y &lt; PIXEL_GRID_SIZE; y++) {
for (let x = 0; x &lt; halfGridSize; x++) {
const distance = Math.sqrt(Math.pow(x - centerX, 2) + Math.pow(y - centerY, 2));
const normalizedDistance = distance / maxDistance;
let probability = 1 - Math.pow(normalizedDistance, 1.5);
probability = Math.max(0, Math.min(1, probability));
map[y][x] = probability;
const mirroredX = PIXEL_GRID_SIZE - 1 - x;
map[y][mirroredX] = probability;
}
}
return map;
}
function generatePixelArt() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
const halfGridSize = Math.ceil(PIXEL_GRID_SIZE / 2);
const mainColor = getRandomColor();
const pixelData = Array(PIXEL_GRID_SIZE).fill(0).map(() => Array(PIXEL_GRID_SIZE).fill('#FFFFFF')); // Initialize all pixels as white
for (let y = 0; y &lt; PIXEL_GRID_SIZE; y++) {
for (let x = 0; x &lt; halfGridSize; x++) {
if (Math.random() &lt; densityMap[y][x]) {
pixelData[y][x] = mainColor;
const mirroredX = PIXEL_GRID_SIZE - 1 - x;
pixelData[y][mirroredX] = mainColor;
}
}
}
for (let y = 0; y &lt; PIXEL_GRID_SIZE; y++) {
for (let x = 0; x &lt; PIXEL_GRID_SIZE; x++) {
ctx.fillStyle = pixelData[y][x];
ctx.fillRect(x * PIXEL_BLOCK_SIZE, y * PIXEL_BLOCK_SIZE, PIXEL_BLOCK_SIZE, PIXEL_BLOCK_SIZE);
}
}
}
function downloadImage() {
const image = canvas.toDataURL('image/png');
const link = document.createElement('a');
link.href = image;
link.download = 'pixel-profile.png';
link.click();
}
// Initialize
densityMap = createDensityMap();
generateBtn.addEventListener('click', generatePixelArt);
downloadBtn.addEventListener('click', downloadImage);
window.onload = generatePixelArt;
&lt;/script>
&lt;/body>
&lt;/html></description></item><item><title>Search Engine</title><link>https://dev.ericspencer.us/miscellaneous/search-engine/</link><pubDate>Sun, 27 Apr 2025 00:00:00 -0700</pubDate><guid>https://dev.ericspencer.us/miscellaneous/search-engine/</guid><description>A barebones Google search experience</description></item><item><title>My ~/.zshrc file</title><link>https://dev.ericspencer.us/miscellaneous/my-zshrc/</link><pubDate>Thu, 20 Mar 2025 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/my-zshrc/</guid><description>Ran every time I open a terminal</description></item><item><title>Old Website</title><link>https://dev.ericspencer.us/miscellaneous/old-website/</link><pubDate>Tue, 18 Mar 2025 16:13:32 -0600</pubDate><guid>https://dev.ericspencer.us/miscellaneous/old-website/</guid><description>My older website</description></item><item><title>Islamic Influences in Timbuktu</title><link>https://dev.ericspencer.us/miscellaneous/timbuktu/</link><pubDate>Wed, 30 Oct 2024 00:00:00 +0000</pubDate><guid>https://dev.ericspencer.us/miscellaneous/timbuktu/</guid><description>LITR 238 Fall 2024</description></item><item><title>Oldest Website</title><link>https://dev.ericspencer.us/miscellaneous/oldest-site/</link><pubDate>Mon, 01 Apr 2024 16:13:32 -0600</pubDate><guid>https://dev.ericspencer.us/miscellaneous/oldest-site/</guid><description>My oldest website</description></item></channel></rss>