<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Projects - Category - Andrews Website</title><link>https://andrew.com/categories/projects/</link><description>Projects - Category - Andrews Website</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 14 May 2026 13:55:00 -0600</lastBuildDate><atom:link href="https://andrew.com/categories/projects/" rel="self" type="application/rss+xml"/><item><title>A 24/7 AI Assistant on a Raspberry Pi, Reachable from Telegram</title><link>https://andrew.com/posts/ai-assistant-on-a-pi/</link><pubDate>Thu, 14 May 2026 13:55:00 -0600</pubDate><author>xxxx</author><guid>https://andrew.com/posts/ai-assistant-on-a-pi/</guid><description><![CDATA[<h1 id="a-247-ai-assistant-on-a-raspberry-pi-reachable-from-telegram">A 24/7 AI Assistant on a Raspberry Pi, Reachable from Telegram</h1>
<p>For a while now I&rsquo;ve wanted a personal AI assistant that stays online all the time, that I can reach from my phone, and that lives on hardware I actually own. Cloud chatbots are great, but they don&rsquo;t have a persistent home. They don&rsquo;t really remember anything between sessions, and they can&rsquo;t quietly work on something in the background while I&rsquo;m off doing other things. So I decided to build my own.</p>]]></description></item><item><title>SpeedTyping: A Spring Boot Typing Test</title><link>https://andrew.com/posts/speedtyping/</link><pubDate>Wed, 06 May 2026 15:49:50 -0600</pubDate><author>xxxx</author><guid>https://andrew.com/posts/speedtyping/</guid><description><![CDATA[<h1 id="speedtyping-a-spring-boot-typing-test">SpeedTyping: A Spring Boot Typing Test</h1>
<p>Source: <a href="https://github.com/jackaholy/SpeedTyping" target="_blank" rel="noopener noreffer ">github.com/jackaholy/SpeedTyping</a></p>
<h2 id="why">Why?</h2>
<p>A team project for a software engineering course. The goal was to ship something end-to-end (backend, database, frontend) using Spring Boot and JPA.</p>
<p>The product side was a typing test aimed at younger learners: pick a difficulty, type the passage, get a WPM score, land on a leaderboard.</p>
<h2 id="what">What?</h2>
<p>A Spring Boot web app backed by MySQL via JPA. Three controllers handle the home/leaderboard view, the typing page, and score submission. Levels are seeded from a SQL file with thirty short passages tagged EASY, MEDIUM, or HARD. Vanilla JS on the frontend runs the timer, colors characters as you type, and auto-submits when the passage is finished.</p>]]></description></item><item><title>Emotion Detection with Convolutional Neural Networks</title><link>https://andrew.com/posts/cnn_emotion_detection/</link><pubDate>Sun, 31 Aug 2025 12:00:00 +0000</pubDate><author>xxxx</author><guid>https://andrew.com/posts/cnn_emotion_detection/</guid><description><![CDATA[<h1 id="emotion-detection-with-convolutional-neural-networks">Emotion Detection with Convolutional Neural Networks</h1>
<h2 id="why">Why?</h2>
<p>To explore machine learning techniques for image classification</p>
<h2 id="what">What?</h2>
<p>OpenCV handles face detection. A CNN trained on FER2013 handles emotion classification. Chain them together for live video analysis.</p>
<h2 id="code">Code</h2>
<h3 id="setup-data">Setup data</h3>
<p>For training, we are using the fer2013 black and white emotion-labelled faces dataset. The raw data is available on Kaggle <a href="https://www.kaggle.com/datasets/msambare/fer2013" target="_blank" rel="noopener noreffer ">here</a>.</p>
<p>We load our data and apply transformations using the <code>ImageDataGenerator</code> class. Applying small transformations to our data prevents overfitting which helps when making predictions on new data.</p>]]></description></item></channel></rss>