<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Vox Silva</title><link>https://blog.alexbeals.com</link><description>Websites, projects, snippets, and errata from Hanover to San Francisco</description><language>en_GB</language><ttl>60</ttl><docs>http://blogs.law.harvard.edu/tech/rss</docs><copyright>Vox Silva</copyright><atom:link href="https://blog.alexbeals.com" rel="self" type="application/rss+xml"/><item><title>Cleaning up Anchor spam comments</title><link>https://blog.alexbeals.com/posts/cleaning-up-anchor-spam-comments</link><description><![CDATA[I have <a href="https://blog.alexbeals.com/posts/adding-captcha-to-anchor" class="inline" target="_blank">Captcha set up</a> for comments on this blog but stuff can still get through. While <a href="https://anchorcms.com/" class="inline" target="_blank">Anchor became defunct in 2020</a> maybe there's someone else out there still using it who would benefit from this (and I know my future self certainly will).]]></description><pubDate>Wed, 18 Mar 2026 17:21:24 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/cleaning-up-anchor-spam-comments/1.png"/></item><item><title>DataSF and scraping planning applications for my inner YIMBY</title><link>https://blog.alexbeals.com/posts/datasf-inner-yimby</link><description><![CDATA[I am doing a series of blog posts diving into 400 Divisadero Street, a defunct car wash and gas station in San Francisco that they're trying to turn into apartments — and have been for over a decade without breaking ground. The reasons for the lack of (visual) progress is multifaceted, but to properly dive into it and explain the timeline I wanted to dig into the raw planning documents. They're widely available as part of SF’s PIM (Property Information Map), but I wanted to download them all locally for OCR, manually review them all, and process them with Claude.]]></description><pubDate>Wed, 18 Mar 2026 07:19:02 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/datasf-inner-yimby/1.png"/></item><item><title>Clearing space on my Linux server</title><link>https://blog.alexbeals.com/posts/clearing-space-on-computer</link><description><![CDATA[All of my websites and projects run off a single 18GB EC2 instance. This is cheap, but means that I do something stupid in one directory I can cause "No space left on device" errors when rendering the blog. This happens enough that I wanted to document what commands I run to recover space.]]></description><pubDate>Mon, 16 Mar 2026 20:23:48 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/clearing-space-on-computer/1.png"/></item><item><title>Resuming paused applications on macOS</title><link>https://blog.alexbeals.com/posts/resuming-paused-applications-on-macos</link><description><![CDATA[I have a penchant for having way too many tabs of Chrome open, and even though I keep buying more RAM I occasionally am still forced to interact with this screen, informing me that I have run out of memory. But if you hit Cmd+Shift+Esc then it disappears, replaced by the normal &quot;Force Quit Applications&quot;. What then? How do I resume my paused applications?]]></description><pubDate>Mon, 09 Mar 2026 06:17:09 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/resuming-paused-applications-on-macos/1.png"/></item><item><title>Claude Code's thinking animation</title><link>https://blog.alexbeals.com/posts/claude-codes-thinking-animation</link><description><![CDATA[I am unfortunately spending more and more of my time interacting with LLMs through terminal interfaces. While the sentient silicon churns through thousands of tokens I find myself <del>scrolling short-form videos</del> contemplating next steps, freeing my time up for deeper mental pursuits, and much more importantly (and realistically) getting entranced by the blinking cursors. But how do they work?]]></description><pubDate>Sat, 07 Feb 2026 10:05:54 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/claude-codes-thinking-animation/1.gif"/></item><item><title>Modifying requests with mitmproxy</title><link>https://blog.alexbeals.com/posts/modifying-requests-with-mitmproxy</link><description><![CDATA[I was recently reverse-engineering parts of the OpenTable API, and wasn't sure how to refresh the Bearer token. We can get the initial one by going through a number of requests: https://mobile-api.opentable.com/oauth/consumer/token to get a logged out token, then through https://mobile-api.opentable.com/api/v1/2fa/start and https://mobile-api.opentable.com/api/v1/2fa/confirm to authenticate through 2FA, and finally back to https://mobile-api.opentable.com/oauth/consumer/token to get an authenticated session token.]]></description><pubDate>Sat, 03 Jan 2026 20:42:53 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/modifying-requests-with-mitmproxy/2.png"/></item><item><title>Inspecting hover elements in Chrome</title><link>https://blog.alexbeals.com/posts/inspecting-hover-elements-in-chrome</link><description><![CDATA[How to inspect hover elements in Chrome by pressing F8 twice while DevTools is open to the Sources tab]]></description><pubDate>Mon, 22 Dec 2025 05:09:13 -0500</pubDate></item><item><title>Remove unused characters from fonts to save on size</title><link>https://blog.alexbeals.com/posts/remove-unused-characters-font-size</link><description><![CDATA[Shrink webfont file sizes with pyftsubset to speed up loading and save bandwidth.]]></description><pubDate>Mon, 15 Dec 2025 23:59:47 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/remove-unused-characters-font-size/1.png"/></item><item><title>Creating custom yellow handshake emojis with zero-width joiners</title><link>https://blog.alexbeals.com/posts/custom-yellow-handshake-emojis-with-zero-width-joiners</link><description><![CDATA[Create custom emoji handshakes using yellow hands like 🫱‍🫲🏿 and 🫱🏿‍🫲.]]></description><pubDate>Mon, 15 Dec 2025 08:29:00 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/custom-yellow-handshake-emojis-with-zero-width-joiners/5.png"/></item><item><title>Showing keyboard strokes on macOS</title><link>https://blog.alexbeals.com/posts/showing-keyboard-strokes-on-macos</link><description><![CDATA[The mouse click recording feature in macOS video recording is really helpful for showing what you're doing (and something that I've used for videos for this blog previously, such in my writeup on <a href="https://blog.alexbeals.com/posts/setting-an-unknown-screen-time-code#setting-video" class="inline" target="_blank">how to set your screen time passcode without knowing it</a>). But sometimes you also want to show keyboard presses, and there's no option in the stock screen recording to do this.]]></description><pubDate>Tue, 09 Dec 2025 03:29:49 -0500</pubDate></item><item><title>Enabling Touch ID for sudo</title><link>https://blog.alexbeals.com/posts/touch-id-for-sudo</link><description><![CDATA[If you have a long password, running a command with sudo can be a bit of a pain. Luckily if you have a recent Macbook with Touch ID you can use it for sudo as well. Just run the following command:]]></description><pubDate>Tue, 09 Dec 2025 02:30:58 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/touch-id-for-sudo/2.png"/></item><item><title>Adding snippets to the blog</title><link>https://blog.alexbeals.com/posts/adding-snippets-to-the-blog</link><description><![CDATA[As you may have noticed by my propensity for <del>footnotes</del> sidenotes I love asides. Likewise there are a lot of small things I come across that either aren't meaty enough for a full post, or trend so narrowly technical that I feel hesitant about broadcasting (a reticence my college self didn't share based on <a href="https://blog.alexbeals.com/posts/router-setup" class="inline" target="_blank">my post setting up my router</a>). I still want them to be searchable as a reference for myself and potentially others, but I want them to take up less presence on the blog (and not be sent out in email blasts). The solution? Snippets!]]></description><pubDate>Sun, 07 Dec 2025 18:46:41 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/adding-snippets-to-the-blog/1.png"/></item><item><title>Removing your location from Mailchimp emails</title><link>https://blog.alexbeals.com/posts/removing-your-location-from-mailchimp-emails</link><description><![CDATA[You can delete your address from your footer as long as you keep the REWARDS piece.]]></description><pubDate>Sun, 07 Dec 2025 17:52:33 -0500</pubDate></item><item><title>Downloading large photos from Flickr</title><link>https://blog.alexbeals.com/posts/downloading-large-photos-from-flickr</link><description><![CDATA[Flickr has restricted original size downloads of images uploaded by free accounts, but you can get around this with Dev Tools.]]></description><pubDate>Sun, 07 Dec 2025 08:23:54 -0500</pubDate></item><item><title>Long live Dog-a-Day! (kinda)</title><link>https://blog.alexbeals.com/posts/long-live-dog-a-day</link><description><![CDATA[Back in college I ran a service called Dog-a-Day, where I emailed subscribers a picture of a dog every day, along with a fun caption. This was initially just a Christmas present for my dad but it spiraled into a full service with some ~200 subscribers. I stopped it in 2020 after five years, but am resurrecting it for the month of December as an Advent calendar, complete with a hidden Santa Mouse each day.]]></description><pubDate>Thu, 04 Dec 2025 08:15:50 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/long-live-dog-a-day/7.png"/></item><item><title>Combinations and permutations and locks, oh my!</title><link>https://blog.alexbeals.com/posts/combination-and-permutation-locks</link><description><![CDATA[I bought a cheap push button combination lock and fell down a rabbit hole when I realized it didn't matter what order you entered the code in. Check out my teardown of the mechanism and the 3D models I designed to figure out how they worked (and why the manual’s advice to set a 5–7 digit code is so interesting).]]></description><pubDate>Sun, 30 Nov 2025 23:48:28 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/combination-and-permutation-locks/1.png"/></item><item><title>Leveraging private Uber APIs in a Chrome extension</title><link>https://blog.alexbeals.com/posts/extracting-uber-ride-history</link><description><![CDATA[I used to use <a href="https://mint.intuit.com/" class="inline" target="_blank">Mint</a> as my budgeting software until <a href="https://www.nytimes.com/2023/11/03/business/mint-app-closing-intuit.html" class="inline" target="_blank">it shut down in March 2024</a>. As a replacement I swapped over to <a href="https://www.monarch.com/" class="inline" target="_blank">Monarch</a>, which I've loved even more and would recommend if you're looking to do any sort of budget tracking. I wanted a tool to automatically annotate and verify my Uber transactions, so I combined a bunch of private APIs to build <a href="https://github.com/dado3212/viceroy-extension" class="inline" target="_blank">Viceroy</a>, a Chrome extension to do just that.]]></description><pubDate>Sun, 19 Oct 2025 23:29:30 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/extracting-uber-ride-history/15.jpg"/></item><item><title>The lost art of contrast</title><link>https://blog.alexbeals.com/posts/kubrick-black-and-white-contrast</link><description><![CDATA[I was watching <a href="https://letterboxd.com/film/the-killing/" class="inline" target="_blank">The Killing</a> the other day, Kubrick's third feature film from 1956. Coming in at just 85 minutes, it’s a lean well-told story of a racetrack heist. But for all of the nonlinear storytelling, and noir aesthetics, and tangled snares of character desires, above all I was just taken with how good it looked.]]></description><pubDate>Sun, 17 Aug 2025 20:30:52 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/kubrick-black-and-white-contrast/7.jpg"/></item><item><title>Downloading arbitrary Apple Podcast episode transcripts</title><link>https://blog.alexbeals.com/posts/downloading-arbitrary-apple-podcast-episode-transcripts</link><description><![CDATA[Because the default Apple Podcasts on macOS only allows you to copy 200 words of transcript at a time, I built a quick <a href="https://alexbeals.com/projects/podcasts/" class="inline" target="_blank">website back in January</a> that allows you to view and copy the full thing. It mostly works great, but some users (including those on older versions of macOS) <a href="https://github.com/dado3212/apple-podcast-transcripts/issues/3" class="inline" target="_blank">have flagged that their transcript files aren't locally saved</a>, and thus don't show up in the tool. Here's how I came up with a slightly convoluted (read: very) workaround — or if you're impatient <a href="https://github.com/dado3212/apple-podcast-transcript-downloader" class="inline" target="_blank">check out the Github</a> if you're on macOS 15.5, and <a href="#alternative-script" class="inline">the Python script if not</a>.]]></description><pubDate>Wed, 23 Jul 2025 05:17:02 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/downloading-arbitrary-apple-podcast-episode-transcripts/21.png"/></item><item><title>Patching MacForge to remove start process_extensions logs</title><link>https://blog.alexbeals.com/posts/start-process-extensions</link><description><![CDATA[I was hitting a problem where some VSCode plugins I use were erroring out when running commands. After slowly paring away at their source code, I realized that they were failing for the same reason: they were calling scripts that were supposed to return JSON, but instead were having strings injected into them, causing the JSON parsing to fail. Come along with me as I track down what's injecting these logs and fix it (with a smattering of binary patching, Gulliver's Travels, and George Bush).]]></description><pubDate>Mon, 30 Jun 2025 08:20:45 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/start-process-extensions/19.png"/></item><item><title>Debugging the changing QR codes for Fitness SF</title><link>https://blog.alexbeals.com/posts/debugging-fitness-sf-qr</link><description><![CDATA[The QR codes for Fitness SF started changing. I had <a href="https://blog.alexbeals.com/posts/custom-apple-wallet-passes" class="inline" target="_blank">previously created an Apple Wallet pass</a> that would automatically open the code up when you arrived. This stopped scanning at the end of May, and although updating my member ID temporarily fixed it, it broke again two weeks later. This lined up with the update of the app, where v1.3.22 let us know that "this update includes a fix to resolve the error with the QR code when checking in". Let's see if we can figure out what it's doing, and how to replicate the behavior for the Wallet pass.]]></description><pubDate>Fri, 20 Jun 2025 07:48:17 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/debugging-fitness-sf-qr/20.jpg"/></item><item><title>Make your iPhone grayscale</title><link>https://blog.alexbeals.com/posts/make-your-phone-grayscale</link><description><![CDATA[Like I said <a href="https://blog.alexbeals.com/posts/reverse-engineering-ios-deeplinking-for-shortcuts" class="inline" target="_blank">in my last post</a>, I'm a big fan of my phone being in grayscale, which <a href="https://link.springer.com/article/10.1007/s12144-021-02020-y" class="inline" target="_blank">helps reduce screentime</a>. This is a quick guide on how to set that up using Shortcuts in a way that automatically disables it for certain apps like Photos and Camera.]]></description><pubDate>Fri, 23 May 2025 18:20:03 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/make-your-phone-grayscale/12.png"/></item><item><title>Reverse engineering iOS Shortcuts deeplinks</title><link>https://blog.alexbeals.com/posts/reverse-engineering-ios-deeplinking-for-shortcuts</link><description><![CDATA[I am a big fan of my phone being in grayscale, which <a href="https://link.springer.com/article/10.1007/s12144-021-02020-y" class="inline" target="_blank">reduces screentime</a> and cuts into into how attention-grabbing the bright red app badges are. The problem is that I don't want all apps to be in grayscale: some because they're effectively broken (Photos, Camera) and others because I'm okay spending time on them (Books, Chess, Crosswords). I used to selectively do this with a <a href="https://blog.alexbeals.com/posts/grayscale-lock-combating-phone-addiction" class="inline" target="_blank">Cydia tweak I wrote</a> but nowadays I do it with Shortcuts. A friend asked me how to set it up on their phone, but while the actual shortcut bit is trivial, creating the automation to run it requires tapping a row for every app on your phone. So before I encouraged them to do just that (<a href="https://blog.alexbeals.com/posts/make-your-phone-grayscale" class="inline" target="_blank">you should do just that</a>) I wanted to see if Shortcuts had a better way to import or programmatically create automations—through deeplinking.]]></description><pubDate>Fri, 23 May 2025 18:18:27 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/reverse-engineering-ios-deeplinking-for-shortcuts/22.png"/></item><item><title>Getting access to the Letterboxd API with mitmproxy</title><link>https://blog.alexbeals.com/posts/extracting-letterboxd-tokens-with-mitmproxy</link><description><![CDATA[Letterboxd has an API but it's available by request only. This is why in the past my projects have either relied on their export functionality (like Letterboxd Gaps) or simple webscraping. This works well when you only need your own activity data, but struggles when it comes to querying multiple users and intersections of their data. But the iOS app does it just fine—enter mitmproxy. We can use it to extract the API tokens the app uses and leverage them in scripts of our own.]]></description><pubDate>Mon, 14 Apr 2025 23:50:54 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/extracting-letterboxd-tokens-with-mitmproxy/2.png"/></item><item><title>Unsubscribing from Reddit Community Notifications</title><link>https://blog.alexbeals.com/posts/unsubscribing-from-reddit-community-notifications</link><description><![CDATA[Reddit has been recently ramping up their &quot;Popular post in&quot; and other community notifications. I find these all incredibly low value, and want to turn them off. There's no UI for turning everywhere—just individually per subreddit. But we can do it for all of them with a quick script!]]></description><pubDate>Sun, 30 Mar 2025 17:41:41 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/unsubscribing-from-reddit-community-notifications/10.png"/></item><item><title>America’s Reading Habits</title><link>https://blog.alexbeals.com/posts/americans-reading-habits</link><description><![CDATA[There was a recent tweet I saw saying "I’m willing to bet my entire net worth on neither the median nor the average American reading 11 books a year." There's a lot of people pushing back on it, but all citing different reasons why the data could be wrong. Rather than do that, we can just dig into the underlying data.]]></description><pubDate>Sun, 23 Mar 2025 19:46:21 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/americans-reading-habits/5.png"/></item><item><title>Letterboxd Gaps</title><link>https://blog.alexbeals.com/posts/letterboxd-gaps</link><description><![CDATA[Kirsten Dunst had a great moment in a <a href="https://www.youtube.com/watch?v=pTD0u-O1uvM&amp;t=3434s" class="inline" target="_blank">2016 Hollywood Reporter roundtable</a> in response to actresses lamenting that they don't work with female directors, saying that "[she's] worked with so many female directors" and that "it's up to us as actresses to give the opportunity to first time directors". While actors have a lot more sway than audiences in getting projects greenlit, I was curious what percentage of the movies I'd seen were directed by women. I googled around, but the <a href="https://directed-by-women.vercel.app/" class="inline" target="_blank">website</a> I found wasn't working and <a href="https://github.com/jamesbvaughan/gender-breakdowns" class="inline" target="_blank">this script</a> was non-trivial for breaking down custom lists. So I <a href="https://alexbeals.com/projects/letterboxd/" class="inline" target="_blank">built my own</a>!]]></description><pubDate>Mon, 24 Feb 2025 00:18:28 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/letterboxd-gaps/10.png"/></item><item><title>Tracking down the movie poster for Possession</title><link>https://blog.alexbeals.com/posts/possession</link><description><![CDATA[I recently watched the 1981 movie Possession by Andrzej Żuławski. It's a weird movie, ostensibly horror, but primarily used as a lens for the dissolution of the director's marriage (and political commentary). However the default poster on <a href="https://letterboxd.com/film/possession/" class="inline" target="_blank">Letterboxd</a> is explicitly horror focused (claws gripping into a woman’s back, blood trickling down, and bright blue spikes like something out of <a data-fancybox="gallery" class="inline" href="/images/possession/6.jpg">The Thing poster</a>). I was curious about why they went with this and tried to look up some details on the poster — thus began the rabbit hole. Come along with me on a two day hyperfixation through the history of Possession and its artwork!]]></description><pubDate>Sun, 02 Feb 2025 20:14:52 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/possession/1.jpg"/></item><item><title>Apple Podcast Transcript Viewer</title><link>https://blog.alexbeals.com/posts/apple-podcast-transcript-viewer</link><description><![CDATA[Apple <a href="https://podcasters.apple.com/support/5316-transcripts-on-apple-podcasts" class="inline" target="_blank">recently added transcripts</a> to their Podcasts app, quickly becoming one of my favorite new features. I wanted to copy a paragraph out of the transcript though, and ran into the <a href="https://podcasters.apple.com/support/5316-transcripts-on-apple-podcasts#:~:text=select%20and%20copy%20up%20to%20200%20words" class="inline" target="_blank">200 word cap</a> on their selection screen. Luckily the MacOS Podcasts app locally caches the transcripts, and so I <a href="https://alexbeals.com/projects/podcasts/" class="inline" target="_blank">built a simple web app</a> that allows you to browse the transcripts and easily select parts of them.]]></description><pubDate>Fri, 31 Jan 2025 08:26:39 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/apple-podcast-transcript-viewer/3.png"/></item><item><title>Fixing Low Quality Wix Gallery Images</title><link>https://blog.alexbeals.com/posts/fixing-low-quality-wix-gallery-images</link><description><![CDATA[My brother has a website (<a href="https://spencerbeals.com" class="inline" target="_blank">https://spencerbeals.com</a>, go buy some art!) which uses Wix. There's a product page view where you can see multiple images of a given piece and click to zoom in, but the gallery images are somehow lower resolution than the non-zoomed version, making for a pretty bad user experience. I couldn't find anyway to change this in the tool (or even any forums with people asking about this) but luckily we can fix it with Javascript.]]></description><pubDate>Wed, 15 Jan 2025 06:14:22 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/fixing-low-quality-wix-gallery-images/5.png"/></item><item><title>Harry Potter and the Anatomy of a Speedrun</title><link>https://blog.alexbeals.com/posts/harry-potter-anatomy-speedrun</link><description><![CDATA[Speedrunning is when you try to complete a video game as fast as possible. You can speedrun individual levels, you can speedrun specific categories like 100% where you try and collect all items and complete all quests, etc. but the main category is Any% — get to the end as fast as possible, anything goes. For many games an Any% speedrun looks similar to someone playing the game normally, albeit with a lot of skill. But for some games the Any% run looks completely different, like Super Mario World's <a href="https://www.speedrun.com/smw?h=0_Exit&amp;x=wkpjpzjk" class="inline" target="_blank">current</a> 41-second World Record. How do people come up with these? Using Harry Potter and the Philosopher's Stone for the GameBoy Advance, I'm going to do a technical deep dive into the Any% speedrun and how you could discover it starting from scratch.]]></description><pubDate>Mon, 16 Dec 2024 08:37:59 -0500</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/harry-potter-anatomy-speedrun/5.png"/></item><item><title>Delayed Gmail Filtering</title><link>https://blog.alexbeals.com/posts/gmail-delayed-filtering</link><description><![CDATA[I subscribe to a lot of email newsletters (<a href="https://www.vox.com/pages/today-explained-newsletter-signup" class="inline" target="_blank">Vox</a>, <a href="https://werehere.beehiiv.com/subscribe" class="inline" target="_blank">We're Here</a>, <a href="https://www.tomscott.com/newsletter/" class="inline" target="_blank">Tom Scott</a>, <a href="https://www.bloomberg.com/account/newsletters/money-stuff" class="inline" target="_blank">Money Stuff</a> and <a href="https://heatmap.news/st/newsletter" class="inline" target="_blank">Heatmap News</a>  among many others) all of which I enjoy...but maybe don't always read. I don't want to unsubscribe because I do read them, but I don't need <a href="https://www.dropout.tv/checkout/subscribe/purchase" class="inline" target="_blank">Dropout.tv</a>'s episode announcement from three weeks ago floating around in my inbox. Ideally if I don't get to them they could quietly be purged in the background, but the default Gmail and Apple mail filters don't support delayed filtering. But Google Scripts does!]]></description><pubDate>Wed, 11 Dec 2024 18:39:58 -0500</pubDate></item><item><title>Jack Sparrow's Compass</title><link>https://blog.alexbeals.com/posts/jack-sparrows-compass</link><description><![CDATA[The iOS compass app is great for pointing north. But what about if you want to point somewhere else? This was a quick two-hour project to whip up a web app for pointing to a static location, much like Jack Sparrow's compass from the <a href="https://clip.cafe/pirates-of-the-caribbean-the-curse-of-the-black-pearl-2003/the-compass-doesnt-point-north/" class="inline" target="_blank">Pirates of the Caribbean</a>.]]></description><pubDate>Sun, 08 Dec 2024 01:25:15 -0500</pubDate></item><item><title>Don't know your screen time code</title><link>https://blog.alexbeals.com/posts/setting-an-unknown-screen-time-code</link><description><![CDATA[The average American spends 4h30m on their phone each day. I've done some things to curb this in the past (see <a href="https://blog.alexbeals.com/posts/grayscale-lock-combating-phone-addiction" class="inline" target="_blank">my post on Grayscale Lock</a> which you can <a href="https://blog.alexbeals.com/posts/make-your-phone-grayscale" class="inline" target="_blank">now do on stock iOS with Shortcuts!</a>) but the number one thing I've found to work is using the built-in Screen Time tools. You may have tried this and found yourself just typing in the code to bypass the limit, but here's the twist — I don't know my code.]]></description><pubDate>Sat, 16 Nov 2024 00:38:00 -0500</pubDate></item><item><title>Custom Apple Wallet Passes for Fitness SF</title><link>https://blog.alexbeals.com/posts/custom-apple-wallet-passes</link><description><![CDATA[<a href="https://www.fitnesssf.com/" class="inline" target="_blank">Fitness SF</a> has a number of great gyms around the Bay Area, but their app can be slow to load, and having to open it every time to scan in was annoying. Apple Wallet passes solve this problem by allowing you to set locations where it will auto-prompt showing a QR code if you're in the radius. The app doesn't let you create an Apple Wallet pass (or even screenshot the QR code), so let's make our own!]]></description><pubDate>Sun, 10 Nov 2024 20:58:41 -0500</pubDate></item><item><title>Roborock Routines and iOS Shortcuts</title><link>https://blog.alexbeals.com/posts/roborock-routines-and-ios-shortcuts</link><description><![CDATA[I have the Roborock S7 MaxV, and it's fantastic. It automates vacuuming and mopping, keeping my allergies under control at the touch of a button. I have a number of routines that I use, and wanted to schedule some of them to run. This is built into the app, but only allows you to do this for set times and days. I instead wanted to automatically suggest a full clean when I left the house (max once/day) where I could approve/disapprove, but was blocked by the poor integration between the iOS app and the normal way to do this kind of customized triggering, Shortcuts.]]></description><pubDate>Sun, 01 Sep 2024 21:15:03 -0400</pubDate></item><item><title>Books Annotations App</title><link>https://blog.alexbeals.com/posts/books-annotations-app</link><description><![CDATA[The Books app on iPhone (previously named iBooks) allows you to highlight text and leave notes. Unfortunately there's no good way to export these, as the information isn't stored in the ePubs themselves. The information is saved in the Media folder though, which is accessible from iPhones over USB. I built an app to read this into a searchable UI without having to install a bunch of software or pore through full backups.]]></description><pubDate>Sat, 22 Jun 2024 01:26:38 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/books-annotations-app/1.png"/></item><item><title>Rom-com Bingo</title><link>https://blog.alexbeals.com/posts/rom-com-bingo</link><description><![CDATA[I noticed a while back that a lot of new romantic comedies (especially those pumped out by streaming services like Netflix and Amazon Prime) have optimized their formulas to the point that you can predict basically the whole plot from just the title and movie poster. To bring a little more spice into them, I started playing bingo with common tropes. To make it easier, I built a website that allows you to build a bingo board out of your own tropes and some defaults, and then compete to get bingo first (or in many cases, as many bingos as possible)!]]></description><pubDate>Sat, 15 Jun 2024 23:44:34 -0400</pubDate></item><item><title>Crossword Grid Builder</title><link>https://blog.alexbeals.com/posts/crossword-grid-builder</link><description><![CDATA[I have been getting into crossword constructing, but found the initial process of staring at a blank 15x15 grid to be one of my least favorite parts. Just like themes and seed entries can be good ways to get a foothold, I ended up building this tool to allow you to explore interesting constructions through an interactive heatmap of previous NYTimes puzzles. As you place black squares into the grid it will update the heatmap to only show grids that include those black squares (though ideally you should diverge from history: 70% of published puzzle grids are novel).]]></description><pubDate>Fri, 14 Jun 2024 05:00:30 -0400</pubDate><media:content medium="image" url="https://blog.alexbeals.com/images/crossword-grid-builder/1.png"/></item><item><title>Pearls Before SwAIne </title><link>https://blog.alexbeals.com/posts/pearls-before-swaine</link><description><![CDATA[Back in 2016 I <a href="https://blog.alexbeals.com/posts/pearls-before-swine-indexer" class="inline" target="_blank">wrote some code to automatically transcribe 'Pearls Before Swine' comic strips</a> to make them searchable. At the time, this transcription relied on Tesseract, the "state of the art" OSS OCR program. As part of that I used a segmentation algorithm based on linear whitespace to separate the original strip into boxes, and then attempted to do something similar for the bounding boxes of the text. This had a lot of problems, in part because the OCR program was not that good on the handdrawn font, in part because the dialogue boxes were inconsistent (which you can see in the image below), and in part because my code wasn't very good.]]></description><pubDate>Fri, 14 Jun 2024 00:22:00 -0400</pubDate></item><item><title>Add a screenshot folder to your macOS dock</title><link>https://blog.alexbeals.com/posts/screenshot-folder-in-dock</link><description><![CDATA[I often forget how to do this, but I find it incredibly useful so here's a quick image-rich tutorial on how to set up a Screenshots folder in your dock on macOS that's visually accessible:]]></description><pubDate>Tue, 04 Jun 2024 18:31:48 -0400</pubDate></item><item><title>Image Motion</title><link>https://blog.alexbeals.com/posts/image-motion</link><description><![CDATA[My brother is an artist (check out his stuff at <a href="https://www.instagram.com/beals.art/" class="inline" target="_blank">https://www.instagram.com/beals.art/</a> or at <a href="https://spencerbeals.com" class="inline" target="_blank">https://spencerbeals.com</a>). He had created some art pieces that he wanted to talk about in depth, by panning over the image. Unfortunately while there are a lot of tools online for a Ken Burns-esque single pan-zoom combination, there wasn't one that that worked with multiple, and not one that smoothed out the camera, or allowed for looping.]]></description><pubDate>Sat, 19 Aug 2023 04:41:11 -0400</pubDate></item><item><title>Dartmouth ID and Flipper</title><link>https://blog.alexbeals.com/posts/dartmouth-id-and-flipper</link><description><![CDATA[I was up on campus again for my 5 year reunion, and it felt wrong to not be doing something slightly sketch around the Dartmouth ID, just for old time's sake. Luckily, I'd recently acquired a <a href="https://shop.flipperzero.one/" class="inline" target="_blank">Flipper Zero</a> for some exploration around the old Gamebody <a href="https://github.com/EstebanFuentealba/Flipper-Zero-Game-Boy-Pokemon-Trading/blob/main/README.md" class="inline" target="_blank">Link Cables</a> which allowed me to put some of my historical information to the test.]]></description><pubDate>Tue, 04 Jul 2023 21:48:46 -0400</pubDate></item><item><title>Fiddler, Excel, and &amp;quot;Good Enough&amp;quot;</title><link>https://blog.alexbeals.com/posts/fiddler-excel-and-good-enough</link><description><![CDATA[My family's dog of 10 years, Neko, unfortunately passed away a couple of months ago. My parents decided that now was a good time to start looking for another beautiful dog to bring into their life, but were having some trouble finding a dog that fit their requirements. Neko, and our dog before that, Macy, were both black British Labrador females. More than that, they actually came from the same breeder, some 14 odd years apart. Unfortunately the breeder didn't have any available, and so my dad went out to get a list of breeders that he could contact. So he shot me an email.]]></description><pubDate>Mon, 12 Oct 2020 04:13:35 -0400</pubDate></item><item><title>iTunes to Spotify Playlist Converter</title><link>https://blog.alexbeals.com/posts/itunes-to-spotify-playlist-converter</link><description><![CDATA[For years, Spotify had a way to import playlists from iTunes into Spotify.  Now, there are a variety of websites that claim to do it, but either can't accept large .xml files, or crash constantly.  So I decided to write up my own.  It just takes in the iTunes Media Library.xml file, extracts the playlists, and lets you choose which one you want to download.  From there, it searches using the public Spotify API for the song name and artist, and combines them all into a long list of track IDs, that can be easily copy and pasted into Spotify.]]></description><pubDate>Sat, 24 Nov 2018 09:57:56 -0500</pubDate></item><item><title>Making a Dumb Smartwatch Smarter</title><link>https://blog.alexbeals.com/posts/making-a-dumb-smartwatch-smarter</link><description><![CDATA[I recently was in the market for a watch.  I wanted a smartwatch, but I wanted something that looked more like a normal watch, as opposed to a slab of silicon and a screen mounted on my wrist.  I still wanted sleep tracking, athletic tracking, and notifications, but not with the changed appearance.  I settled on a hybrid smartwatch from the Fossil Q Commuter series.  However, I got to thinking: given that it interacted with an iOS app on my phone, maybe there was a way to hijack the commands, and run my own!  A way to make the "dumb" smartwatch a little bit smarter.]]></description><pubDate>Tue, 02 Oct 2018 05:24:40 -0400</pubDate></item><item><title>ScreenMazer</title><link>https://blog.alexbeals.com/posts/screenmazer</link><description><![CDATA[For one of my final CS classes, I was brainstorming a list of tech that I hadn't developed anything for or worked with, and screensavers on Mac were on the list as something that would probably lend itself to an easy short-term project.  I had recently seen a series of animated gifs of automatic maze solving, and so I jotted a note to myself that it would make a cool idea for a macOS screensaver.  And lo and behold, a few months later when I got around to it, it did!  Without further ado, here it is in action.]]></description><pubDate>Mon, 13 Aug 2018 19:59:53 -0400</pubDate></item><item><title>Lock and Unlock Mac from iPhone</title><link>https://blog.alexbeals.com/posts/lock-and-unlock-mac-from-iphone</link><description><![CDATA[A few weeks ago, I was considering entering the Dartmouth hackathon, but decided not to because I woke up too late to give someone else a chance to win.  However, when browsing around the Devpost site, I found a project called <a href="https://devpost.com/software/eztouch" class="inline" target="_blank">ezTouch</a>.  It caught my eye, as it allowed you to lock and unlock your computer from anywhere using your iPhone.  Unfortunately, there was no GitHub repo, and the url that was linked in the Devpost article was no longer active.  So I wondered how easy it would be to do!]]></description><pubDate>Fri, 20 Apr 2018 05:57:15 -0400</pubDate></item><item><title>Grayscale Lock - Combating Phone Addiction</title><link>https://blog.alexbeals.com/posts/grayscale-lock-combating-phone-addiction</link><description><![CDATA[Grayscale Lock is a Cydia tweak that allows you to set grayscale status on an app-by-app basis. This is mainly to curb phone addiction, while making it harder to turn off than just manually turning it on.  It also allows the grayscale to not interfere with other apps that still need full color, such as the Camera and Photos app.]]></description><pubDate>Wed, 14 Mar 2018 05:21:01 -0400</pubDate></item><item><title>The Trinity Hall Prime and Other Pixel Primes</title><link>https://blog.alexbeals.com/posts/the-trinity-hall-prime-and-other-pixel-primes</link><description><![CDATA[About 3 months ago I watched <a href="https://www.youtube.com/watch?v=fQQ8IiTWHhg" class="inline" target="_blank">this video</a> by Numberphile on the "Trinity Hall Prime".  You can watch the video but here's a quick summary.  As a graduation gift, a mathematician from Trinity Hall produced the following 1350-digit prime number, and printed it out to be framed.  The top bit is the crest of the school composed out of 1's and 8's, followed by a (nearly) unmodified series of 0's, and finally ends with a single 1.]]></description><pubDate>Fri, 05 Jan 2018 01:42:34 -0500</pubDate></item><item><title>Saving GroupMe's</title><link>https://blog.alexbeals.com/posts/saving-groupmes</link><description><![CDATA[A while ago I made <a href="https://groupmeanalysis.com" class="inline" target="_blank">GroupMe Analysis</a>, which is a bot that you can add to your group, and then see interesting facts about it, including number of comments, likes, and a person-by-person breakdown.  However, I couldn't find any tool to download an entire GroupMe that wasn't just making a CSV file or something boring like that.  So I wrote a Python file that will take in an access token from GroupMe and download an entire conversation, attachments and all, for permanent offline viewing.]]></description><pubDate>Tue, 28 Nov 2017 17:21:15 -0500</pubDate></item><item><title>Renaming Desktops on Mac</title><link>https://blog.alexbeals.com/posts/renaming-desktops-on-mac</link><description><![CDATA[I have had a task since February of 2017 in Asana to see if I could figure out how to rename desktops.  Desktops are what appear when you press "F3" at the top, which have the default names "Desktop 1", "Desktop 2", etc.  I knew it was possible because there was an app called "TotalSpaces" that does this (among many other things).  However, I wasn't a huge fan of how it accomplished it, and it also costs $20.  I knew that I would have to go the SIMBL route (just like for my modifications Messages with <a href="https://blog.alexbeals.com/posts/message-indicator" class="inline" target="_blank">Message Indicator</a>), but my attempts to find the right class to hook into repetitively failed.  Luckily, I finally stumbled onto a pretty convoluted method of doing it, and built it in a day or so!]]></description><pubDate>Fri, 17 Nov 2017 06:54:15 -0500</pubDate></item><item><title>Catan Map Generator</title><link>https://blog.alexbeals.com/posts/catan-map-generator</link><description><![CDATA[I've played a fair amount of Settlers of Catan in my day, and I find that a lot of the skill in the game comes from the initial placements.  Almost two years ago, I built a rough setup that randomized tiles and numbers.  My plan was to screenshot the boards, and make posts on Reddit to discuss the best positions to start a discussion and improve my skills.  Then, <a href="https://www.reddit.com/r/Catan/comments/3s74le/starting_strategy_board_1/" class="inline" target="_blank">I made a post on Reddit</a>.]]></description><pubDate>Sun, 05 Nov 2017 17:47:47 -0500</pubDate></item><item><title>Minor Anchor Tweak - Scrolling Fix</title><link>https://blog.alexbeals.com/posts/minor-anchor-tweak-scrolling</link><description><![CDATA[For some reason, my version of Anchor completely bugs out when you start increasing the size of the text input beyond a certain point.  This was making it really hard to write longer articles, so I tracked down the fix.]]></description><pubDate>Tue, 17 Oct 2017 21:41:15 -0400</pubDate></item><item><title>Dartmouth Nutrition API</title><link>https://blog.alexbeals.com/posts/dartmouth-nutrition-api</link><description><![CDATA[Back about a year ago, I made a <a href="https://blog.alexbeals.com/posts/dart-dine" class="inline" target="_blank">blog post about DartDine</a>, my final project for my Human-Computer Interaction class.  It was an idea to remake the <a href="http://nutrition.dartmouth.edu:8088/" class="inline" target="_blank">Dartmouth nutrition website</a> which at the time (and I think still does) have an absolutely atrocious mobile interface.  As part of it, I wanted to properly connect it to the API behind the site.  This is that API.]]></description><pubDate>Mon, 02 Oct 2017 19:18:21 -0400</pubDate></item><item><title>Guessing Harry Potter</title><link>https://blog.alexbeals.com/posts/guessing-harry-potter</link><description><![CDATA[I was working on a project in extracting typing from hand movement in 3D space, and needed an API for generating sentences.  I found a few ones online, but most of them weren't high enough quality sentences, or weren't free.  So I decided to make my own, sourcing it from random book files.  Then, as a proof of concept, I figured I'd make a short game out of it.  The game that I settled on pulls a random quote from one of the 7 Harry Potter books, and you have to decide which book it belongs to.]]></description><pubDate>Sat, 23 Sep 2017 02:03:07 -0400</pubDate></item><item><title>Mercury - Tweak and  Fun Code</title><link>https://blog.alexbeals.com/posts/mercury-tweak-and-fun-code</link><description><![CDATA[I just released my most recent tweak, Mercury, which you can check out <a href="https://cydia.alexbeals.com/Mercury" class="inline" target="_blank">on my Cydia repo</a> or just look at the source <a href="https://github.com/dado3212/mercury" class="inline" target="_blank">on GitHub</a>.  It's an iOS version of <a href="https://blog.alexbeals.com/posts/message-indicator" class="inline" target="_blank">Message Indicator</a> for macOS that I released back in May.  I've been sitting on it for over a year, and finally carved out a weekend to flesh it out a bit for release.]]></description><pubDate>Tue, 29 Aug 2017 05:49:25 -0400</pubDate></item><item><title>The Mathematics Behind &amp;quot;Ride the Bus&amp;quot;</title><link>https://blog.alexbeals.com/posts/the-mathematics-behind-ride-the-bus</link><description><![CDATA[When I got to college a friend introduced me to a drinking game called "Ride the Bus."  The rules for the full game are <a href="http://drinkinggamezone.com/drinking-games/ride-the-bus/" class="inline" target="_blank">here</a>, but I was interested in the final section.  For that section, there are four questions.  For the first card, is it red or black?  For the second card, is it higher or lower than the first card?  For the third card, is it in between (inclusive) or outside of the first two cards?  And for the fourth card, what suit is it?  You continue pulling cards until you get all four in a row right.  If you get any one wrong you drink, and start over.]]></description><pubDate>Sat, 12 Aug 2017 22:35:35 -0400</pubDate></item><item><title>Cleaning out Google Groups</title><link>https://blog.alexbeals.com/posts/cleaning-out-google-groups</link><description><![CDATA[Google Groups are one of the products that has languished in 2014 in terms of its feature set and visual design.  This means that many useful abilities like mass-deleting topics and exporting Google Groups aren't implemented.  For exportation, some people have come up with clever workarounds by crawling the website.  In the past I've used <a href="https://github.com/henryk/gggd" class="inline" target="_blank">gggd</a>, a fantastic Python command-line script to download full groups that I highly recommend.  However, I couldn't find anything to mass delete topics...so I made one.]]></description><pubDate>Mon, 07 Aug 2017 06:04:41 -0400</pubDate></item><item><title>TimerCL - A command line tool for timers on iOS</title><link>https://blog.alexbeals.com/posts/timercl-a-command-line-tool-for-timers-on-ios</link><description><![CDATA[As many of my posts on this blog reference, my phone is jailbroken.  Activator, a popular tweak allows you to link activating events (such as unlocking your phone, entering a wifi network, or pressing a sequence of buttons) to various listeners (such as setting the brightness, adjusting the volume, sending a text, or triggering Siri).  However, I couldn't figure out a way of silently creating a timer.  So I created TimerCL.]]></description><pubDate>Sat, 17 Jun 2017 17:29:48 -0400</pubDate></item><item><title>Life at Dartmouth - Data Analysis</title><link>https://blog.alexbeals.com/posts/life-at-dartmouth-data-analysis</link><description><![CDATA[I realize that this blog isn't the standard one, where someone would write about how they were feeling, or reblog pictures of cute dogs (that's what I have <a href="https://www.instagram.com/yourdogaday/" class="inline" target="_blank">Instagram</a> for!).  So despite the fact that this post is nearly entirely data driven and still relied on CS, it's slightly out of the norm in that it's a look at how I interact with the Dartmouth campus.]]></description><pubDate>Sat, 10 Jun 2017 23:52:13 -0400</pubDate></item><item><title>Adding Lightbox Support to Anchor</title><link>https://blog.alexbeals.com/posts/adding-lightbox-support-to-anchor</link><description><![CDATA[Previously, the images weren't ideal on the blog.  While they were typically large enough if viewing it on a desktop computer, it didn't work great on phones, because you couldn't expand the images in any way.  For <a href="https://alexbeals.com/projects/puppies/" class="inline" target="_blank">Dog-a-Day</a>, in viewing previous images I used a lightbox solution called FancyBox.  They recently released <a href="http://fancyapps.com/fancybox/3/" class="inline" target="_blank">their 3rd version</a> which was mobile first, so I figured I'd add it to the blog.]]></description><pubDate>Sat, 10 Jun 2017 23:32:07 -0400</pubDate></item><item><title>Adding Captcha to Anchor</title><link>https://blog.alexbeals.com/posts/adding-captcha-to-anchor</link><description><![CDATA[I was getting a lot of spam messages on this blog, so I decided it was long overdue to add a captcha to the form submission.  Which means a fun dive into the completely undocumented world of Anchor CMS!]]></description><pubDate>Thu, 25 May 2017 17:46:41 -0400</pubDate></item><item><title>Venmo Deeplinking</title><link>https://blog.alexbeals.com/posts/venmo-deeplinking</link><description><![CDATA[I tried to deeplink into the Venmo app, but couldn't find a lot of public documentation on it.  So I cracked the main app, and found all of the deeplinking strings, which are listed below:]]></description><pubDate>Wed, 24 May 2017 16:08:43 -0400</pubDate></item><item><title>Spacers for the macOS dock</title><link>https://blog.alexbeals.com/posts/dock-spacers</link><description><![CDATA[Just a small thing that I found out about today and wanted to write down somewhere.  Using Terminal, you can create blank spacers for the macOS dock.  Simply run defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}' for as many spaces as you want, and then restart the Dock with killall Dock.  You can rearrange the spaces wherever you want, and can remove them just like any normal dock item.]]></description><pubDate>Fri, 12 May 2017 19:32:42 -0400</pubDate></item><item><title>Message Indicator</title><link>https://blog.alexbeals.com/posts/message-indicator</link><description><![CDATA[I find that I commonly open chats in Messages on my computer to make the 'unread' indicator go away. However, if there's any delay in answering them back, it's quite common that I'll simply forget to respond to the text for a while.  I've already addressed this on my iPhone using a Cydia tweak (post coming eventually) that adds a gray indicator to chats if I wasn't the last person to respond.  So I figured out how to port it to macOS.]]></description><pubDate>Mon, 08 May 2017 14:41:21 -0400</pubDate></item><item><title>Markov Messages</title><link>https://blog.alexbeals.com/posts/markov-messages</link><description><![CDATA[I was talking to a friend from college about automatically generating flavortext and death messages for a game, to keep it unique.  We were talking through markov chains (<a href="http://setosa.io/ev/markov-chains/" class="inline" target="_blank">here's a great resource to read up on them</a>), and he mentioned the possibility of using your iMessage chat database from your phone.]]></description><pubDate>Sun, 05 Mar 2017 22:25:39 -0500</pubDate></item><item><title>Reading WSJ Articles</title><link>https://blog.alexbeals.com/posts/reading-wsj-articles</link><description><![CDATA[The Wall Street Journal has a bunch of super insightful articles.  However, nearly all of the articles are behind a paywall.  You used to be able to just google the URL, and click the top link but that’s since stopped working.  This worked based on the custom referer: Google was an approved referer to bypass the paywall.  There are, however, other approved referers even though Google is no longer.  I know the 'Drudge Report' works, though there may be others.  The easiest way I’ve found to automatically do this is to add the ‘<a href="https://chrome.google.com/webstore/detail/referer-control/hnkcfpcejkafcihlgbojoidoihckciin/related" class="inline" target="_blank">Referer Control</a>’ extension for Chrome, or similar solutions for other browsers.]]></description><pubDate>Thu, 02 Mar 2017 23:45:19 -0500</pubDate></item><item><title>Automatically Changing Wallpaper</title><link>https://blog.alexbeals.com/posts/automatically-changing-wallpaper</link><description><![CDATA[A few days ago, I stumbled upon <a href="http://imgur.com/gallery/D6ia1" class="inline" target="_blank">some Firewatch wallpapers</a> for the different times of day, and wanted to have the wallpaper on my mac automatically switch through them.  However, all of the solutions I found for this were overly complex, or just plain didn't work on macOS Sierra.  So, here's my solution that doesn't require installing anything and is pretty easy to set up.]]></description><pubDate>Wed, 01 Mar 2017 23:38:11 -0500</pubDate></item><item><title>OnceMore</title><link>https://blog.alexbeals.com/posts/oncemore</link><description><![CDATA[OnceMore is another Cydia tweak that I developed, and probably the one that I use and benefit from the most.  It's incredibly simple: it just adds a 'Restart' button when a timer goes off.  While this is a pretty minor quality of life improvement, I do a ton of things that I try and do in a set time.  Whether it be workout reps, a constrained nap, or a timer for doing laundry, there are countless times when I wish I could just easily click a button and the timer would reset without having to go in, turn off the current one, and set up a new one.  Additionally, if the time isn't a set minute, I would have to retrigger it with Siri.]]></description><pubDate>Tue, 28 Feb 2017 05:47:19 -0500</pubDate></item><item><title>AlphabetSources</title><link>https://blog.alexbeals.com/posts/alphabetsources</link><description><![CDATA[Every so often I go through the [Request] posts on <a href="https://reddit.com/r/jailbreak" class="inline" target="_blank">/r/jailbreak</a> over on Reddit to see if there are any that either are interesting, or could be easily done as a minor quality of life tweak.  'AlphabetSources' falls under the second one.  Someone made a post asking for an alphabetical view to the repo sources in Cydia.]]></description><pubDate>Tue, 28 Feb 2017 05:41:17 -0500</pubDate></item><item><title>Classy</title><link>https://blog.alexbeals.com/posts/classy</link><description><![CDATA[I have a love/hate relationship with Dartmouth. While I love the school, most of the tech infrastructure is horribly outdated, and mainly serves as something to be worked around, rather than a useful tool. Finding classes is just like this. You can search by department, and by time period, though you'll have to continuously go back and start a new search from scratch. The results are also poorly formatted, and miss out on providing valuable information, like median, a class description, and prereqs (all things you'd have to search separately for).]]></description><pubDate>Tue, 28 Feb 2017 05:32:35 -0500</pubDate></item><item><title>SurfShield</title><link>https://blog.alexbeals.com/posts/surfshield</link><description><![CDATA[In September, me and a few friends entered HackDartmouth III, a Dartmouth-based hackathon.  I'd signed up for the one the year before, but me and my roommate slept through it, so this was the first one that I'd be doing at Dartmouth (I did one junior year of high school).  We were undecided as to which project to pursue: a game similar to Sardines, a project that I worked on previously (<a href="https://blog.alexbeals.com/posts/sardines-jumping-into-multiplayer-web-games-part-i" class="inline" target="_blank">that you can read about here</a>), or something that more closely suited the APIs that were offered by sponsors, and the possible prizes associated with them.]]></description><pubDate>Tue, 28 Feb 2017 04:40:10 -0500</pubDate></item><item><title>Class-Dumping with Cycript</title><link>https://blog.alexbeals.com/posts/class-dumping-with-cycript</link><description><![CDATA[I keep forgetting how to do this, so I thought that I would just write it down somewhere.  First, you'll need the classdump-dyld tweak package, which you can get from Cydia on the BigBoss repo (it's by Elias Limneos, who hosts <a href="https://developer.limneos.net/index.php" class="inline" target="_blank">the only reason I do tweak dev</a>), and you'll also need cycript.  Then, you'll need the application you want to dump running.  In this case, I'm going to be doing it for Spotify.]]></description><pubDate>Sat, 14 Jan 2017 23:47:45 -0500</pubDate></item><item><title>Victor - Talking Back</title><link>https://blog.alexbeals.com/posts/victor-talking-back</link><description><![CDATA[I got it into my head that I wanted to be able to programmatically make my phone speak whatever I wanted it to.  Effectively Siri, but unprompted, and without care for silent, or low volume.  On a normal phone, this would be impossible.  But on a jailbroken phone, there was probably a way to do it.  I first started up by making an Activator event that could be passed a string, and would say it.  It did this using the AVSpeechSynthesizer class, and using the com.apple.ttsbundle.Samantha-premium voice (which is Siri's default voice).  I wanted to be able to use the voice that I normally use for Siri/Victor, which is a British man, but while it seemed to be in the system, and it was clearly being used for actual Siri, I couldn't figure out a way to trigger it through AVSpeechSynthesizer (the voice's name is Arthur).]]></description><pubDate>Tue, 03 Jan 2017 07:39:07 -0500</pubDate></item><item><title>Victor - Echo Dot</title><link>https://blog.alexbeals.com/posts/victor-echo-dot</link><description><![CDATA[For Christmas, in addition to the WeMo switch I also got the Amazon Echo Dot.  It's a great device, but it was a little bit complicated to work into my AI setup.  Ideally, I would change it's wake word to 'Victor', and be able to add in custom actions, like 'Victor, play [movie] on Netflix'.  I quickly learned, however, that this is impossible.  So it was time to hack together a solution.  I changed the wake word to 'Echo' to avoid having another AI name (Alexa) introduced into the house.  Then, I set up a custom skill through Amazon who was triggered by 'Victor'.  Commands through Echo to Victor would be handled by a custom Lambda function through AWS, and then pushed into the same 'tasks' pipeline as command sent through Siri from my phone.  Instead, it would be triggered like 'Echo, tell Victor to play [movie] on Netflix'.]]></description><pubDate>Tue, 03 Jan 2017 07:38:14 -0500</pubDate></item><item><title>Victor - Belkin WeMo Switches</title><link>https://blog.alexbeals.com/posts/victor-belkin-wemo-switches</link><description><![CDATA[For Christmas, one of the gifts that I got was a <a href="https://smile.amazon.com/dp/B00BB2MMNE" class="inline" target="_blank">Belkin WeMo Switch</a>.  It was only $30 on sale, and while it had middling reviews (like many of the WiFi-switches), it could be controlled through cURL commands, which made it very easy to hook into Victor.  So I set it up, plugged in my light, and spent like 20 minutes trying to set it up with the app, which kept losing the connection.  I can't really say it was easy to setup, but it's worked since fine, and it is indeed very easy to programmatically control.]]></description><pubDate>Tue, 03 Jan 2017 07:19:17 -0500</pubDate></item><item><title>Victor - Part 2</title><link>https://blog.alexbeals.com/posts/victor-part-2</link><description><![CDATA[But of course, that isn't the end.  Not even close.  In the beginning of fall term of junior year, my computer was once again right next to the TV, and my levels of laziness had reached an all time high.  I once again started to think of ways that I could control Spotify, Netflix, and my movies from the comfort of the futon (note: it was approximately three feet away from the computer).  I pulled out the Kinect again, but remembered the problems that it had last time.  I couldn't talk to it if I wasn't there, the speech recognition API didn't allow for a lot of commands, and it relied on something that was frankly, poorly supported and had next to no online documentation.  So it was time for a change.]]></description><pubDate>Tue, 03 Jan 2017 05:52:22 -0500</pubDate></item><item><title>Victor - Part 1</title><link>https://blog.alexbeals.com/posts/victor</link><description><![CDATA[I started this blog when I first got to Dartmouth.  I'm now over a term into my junior year, and I still haven't mentioned one of my largest ongoing projects, and by far the one that I get the most enjoyment out of: Victor.  It was around the summer of my freshman year when I first started <a href="http://blog.alexbeals.com/posts/kinect-for-xbox-one-v2-sdk" class="inline" target="_blank">messing around</a> with the Kinect v2 SDK, and had the idea to build out an AI that could see the room, hear commands, and serve as a sort of custom built Siri.  This idea for an AI would (eventually) be fleshed out into Victor.]]></description><pubDate>Tue, 03 Jan 2017 05:46:11 -0500</pubDate></item><item><title>Dartmouth Banner Possible Exploit</title><link>https://blog.alexbeals.com/posts/dartmouth-banner-possible-exploit</link><description><![CDATA[When you're requesting pages (such as transcripts, DASH, etc.) through Dartmouth Banner, you slowly accumulate cookies.  But only one of them is actually used to verify who you are: the SESSID one.  It's a base64 encoding of what appears to be 6 random alphanumerics, followed by your PIDM, the Banner specific code that was the root of the previous exploit.  It locks you out if you try and use an old SESSID, and forces you to log in again.]]></description><pubDate>Sat, 31 Dec 2016 02:25:18 -0500</pubDate></item><item><title>Dartmouth ID Magnetic Stripe</title><link>https://blog.alexbeals.com/posts/dartmouth-id-magnetic-stripe</link><description><![CDATA[It's been a while since I've played with the Dartmouth ID's, but my brother got me a <a href="https://smile.amazon.com/dp/B00DE8248Q/" class="inline" target="_blank">Magnetic Reader-Writer</a> for Christmas, so I've been having a blast messing around with it.  I wrote a bit about the magnetic stripe <a href="http://blog.alexbeals.com/posts/the-dartmouth-id" class="inline" target="_blank">over 2 years ago</a>, but most of that was conjecture from one VERY out of date article I found online.  So, let's take a look at what's on it now!]]></description><pubDate>Fri, 30 Dec 2016 00:50:34 -0500</pubDate></item><item><title>Dog-a-Day Backend</title><link>https://blog.alexbeals.com/posts/dog-a-day-backend</link><description><![CDATA[When I first created Dog-a-Day, it ran off of a PHP script that had the images for the days in an array.  I then decided to move it into a MySQL database, where I would insert URLs and dates.  That quickly became too much of a hassle, and I created a simple form that would take in a URL, and automatically calculate the next date, and insert it into the database.  I realized that duplicates might be an issue if I wasn't paying close enough attention, so I implemented perceptual hashing, to try and find similar images.  But this was all built on top of previous functionality, and was bad enough to consistently make it harder and harder to add images.  So I decided it was time to rebuild it.]]></description><pubDate>Fri, 23 Dec 2016 17:20:46 -0500</pubDate></item><item><title>ShiftCycle Update</title><link>https://blog.alexbeals.com/posts/shiftcycle-update</link><description><![CDATA[I posted about <a href="http://blog.alexbeals.com/posts/shiftcycle" class="inline" target="_blank">ShiftCycle</a> before, so read quickly about it if you missed that blog post.  One of the ShiftCycle users messaged me a while ago asking to be able to reorganize the order of changes, which required a rewrite of how the tweak stored permissions.  ]]></description><pubDate>Tue, 13 Dec 2016 07:53:00 -0500</pubDate></item><item><title>Facebook Deep Linking Options</title><link>https://blog.alexbeals.com/posts/facebook-deep-linking-options</link><description><![CDATA[For some reason, the deep-linking URLs aren't publicized anywhere by Facebook.  In case you're looking for them, or in any other app, here's the process to follow.  First figure out what the protocol is (for Facebook it's fb://, for Twitter it's twitter://, etc.).  Then, download a cracked version of the app.  You can either find this online, or decrypt it yourself using Clutch or a similar thing on a jailbroken iPhone.  ]]></description><pubDate>Tue, 13 Dec 2016 07:33:03 -0500</pubDate></item><item><title>Dart Dine</title><link>https://blog.alexbeals.com/posts/dart-dine</link><description><![CDATA[Dart Dine was the culmination project for CS89, Human Computer Interaction.  Our goal was to revamp the Dartmouth meal site, which is located at <a href="http://nutrition.dartmouth.edu:8088" class="inline" target="_blank">http://nutrition.dartmouth.edu:8088</a>. Our goal was to make a mobile app that would solve all of the UX/UI problems that the current site had, especially when accessing it on mobile, and also combine all dining information into a useful format.]]></description><pubDate>Mon, 31 Oct 2016 15:09:38 -0400</pubDate></item><item><title>Sudoku Solver: Online</title><link>https://blog.alexbeals.com/posts/sudoku-solver-online</link><description><![CDATA[A <a href="http://blog.alexbeals.com/posts/sudoku-solver-in-python" class="inline" target="_blank">while ago</a> I wrote a Sudoku solver in Python that could programmatically step through the solution, solve the whole thing, or show what options were available for each location.  It ended up being a good distraction while I was on a plane with no internet.  However, I was on yet another long plane ride and decided to see what I could do to improve on it.]]></description><pubDate>Mon, 24 Oct 2016 18:47:18 -0400</pubDate></item><item><title>Colorize</title><link>https://blog.alexbeals.com/posts/colorize</link><description><![CDATA[A while ago I was designing a website, and wanted a good color blue.  However, I'm incredibly indecisive when it comes to choosing color palettes.  I envisioned some site that would allow me to type in 'blue', and it would give me the ideal blue color.  This idea was fleshed out into <a href="https://alexbeals.com/projects/colorize" class="inline" target="_blank">Colorize</a>.  It takes in a search criteria, and then averages the colors returned in the first page of Google Image results to return a single hex color.]]></description><pubDate>Mon, 05 Sep 2016 23:52:17 -0400</pubDate></item><item><title>Pearls Before Swine Indexer</title><link>https://blog.alexbeals.com/posts/pearls-before-swine-indexer</link><description><![CDATA[I moderate the subreddit <a href="https://reddit.com/r/pearlsbeforeswine" class="inline" target="_blank">/r/PearlsBeforeSwine</a>, and there are a bunch of posts from people trying to track down a specific comic from the past.  After trying to help a few people, I figured there was a better way to do it: so I built the <a href="https://alexbeals.com/projects/pearls" class="inline" target="_blank">Pearls Before Swine Indexer</a>.]]></description><pubDate>Mon, 05 Sep 2016 03:13:00 -0400</pubDate></item><item><title>GamePlan</title><link>https://blog.alexbeals.com/posts/gameplan</link><description><![CDATA[For my CS52 final project, our group worked on a web application called "GamePlan".  It aims to solve the problem of connecting disparate groups of friends.  You can create/join any group that you want (for example, work colleagues, a group of your friends, friends from high school, etc.), and then you can create posts to as many groups as you want.  Each member will see the posts that they belong to, and if it's something that they're interested in, they can join the group to be placed into a chat with the other people who have joined.]]></description><pubDate>Sat, 27 Aug 2016 19:30:24 -0400</pubDate></item><item><title>GroupmeAnalysis</title><link>https://blog.alexbeals.com/posts/groupmeanalysis</link><description><![CDATA[A while ago, I wanted to look at some statistics for one of the GroupMe's that I was in.  I looked around, and found GroupMe had an open REST API.  I wrote a quick script to scrape all the data using my account, and I compiled it into some basic information: who had the most comments, who had the most likes, etc.]]></description><pubDate>Thu, 11 Aug 2016 16:30:16 -0400</pubDate></item><item><title>Movie Display</title><link>https://blog.alexbeals.com/posts/movie-display</link><description><![CDATA[I store a lot of movies on one of my external hard drives, from DVDs in my home that I've ripped for use while at college.  However, it can be hard to visualize all of the movies and find the one I want.  I approached this problem a while ago, by writing a Python script that built a static index.html file after running through all of the folders in the Movies directory.  However, this was written when I had a Windows laptop, and didn't work on Mac.  Additionally, it was built using freecovers.net's API for movie cover art, which had gone down a while ago and was no longer sufficient.]]></description><pubDate>Mon, 08 Aug 2016 02:18:35 -0400</pubDate></item><item><title>Dog-a-Day</title><link>https://blog.alexbeals.com/posts/dog-a-day</link><description><![CDATA[My dad has always really liked dogs.  So, for his Christmas present I set up a script to send an email to him every day with a picture of a puppy.  Recently, I decided to flesh out the code a fair amount to make it so that anyone could subscribe.]]></description><pubDate>Wed, 15 Jun 2016 20:24:58 -0400</pubDate></item><item><title>Boingo Exploit</title><link>https://blog.alexbeals.com/posts/boingo-exploit</link><description><![CDATA[I was recently in Newark International Airport, who is one of the select few airports that I regularly fly through that doesn't have complimentary WiFi.  However, they do have Boingo, which offers 30 minute complimentary WiFi access.  Through a quick Python script, this is exploitable for unlimited free WiFi.  ]]></description><pubDate>Tue, 07 Jun 2016 18:04:49 -0400</pubDate></item><item><title>Sudoku Solver in Python</title><link>https://blog.alexbeals.com/posts/sudoku-solver-in-python</link><description><![CDATA[I was recently flying down to Cancún for my winter break, and I was doing one of the Sudoku puzzles they have in the back of the in-flight magazine.  I got stuck at some point, and found myself wondering if there was an easy way to write a program to solve it for me.  However, I didn't want it to just solve it automatically, I wanted it to guide me through the solution, so I only really needed to use it if I got stuck.]]></description><pubDate>Thu, 17 Dec 2015 04:01:20 -0500</pubDate></item><item><title>What Makes a Mobile Game Great - Monetization</title><link>https://blog.alexbeals.com/posts/what-makes-a-mobile-game-great-monetization</link><description><![CDATA[In Part I, I talked about the five major categories of game, which I dubbed endless, leveled, RTS, endless leveled, and personal competition.  Now unless you're developing mobile games just for the thrill of people playing them, at some point you're going to want to monetize them.]]></description><pubDate>Wed, 02 Dec 2015 07:20:27 -0500</pubDate></item><item><title>What Makes a Mobile Game Great</title><link>https://blog.alexbeals.com/posts/what-makes-a-mobile-game-great</link><description><![CDATA[There are over 1,000 apps submitted to the App Store every day.<a href="http://www.ibtimes.co.uk/apple-app-store-growing-by-over-1000-apps-per-day-1504801" class="inline" target="_blank">[1]</a>  With all of these apps, making a game that stands out is pretty difficult.  And making a game that remains popular over a larger period of time is even harder.]]></description><pubDate>Wed, 02 Dec 2015 06:06:01 -0500</pubDate></item><item><title>What's Line - Finished</title><link>https://blog.alexbeals.com/posts/whats-line-finished</link><description><![CDATA[Well, at long last, What's Line is done!  Or at least as done as any app can be.]]></description><pubDate>Wed, 02 Dec 2015 06:01:08 -0500</pubDate></item><item><title>Sardines! - Optimizing Web Games - Part II</title><link>https://blog.alexbeals.com/posts/sardines-optimizing-web-games-part-ii</link><description><![CDATA[So I had a rough prototype of the game set up, but there were a few problems: the game was pretty laggy, the whole thing happened in DOM, and opening the game on multiple PC's would desync the fish's location.  Additionally, it was difficult to tell which fish was which.]]></description><pubDate>Thu, 26 Nov 2015 07:02:27 -0500</pubDate></item><item><title>Sardines! - Jumping into Multiplayer Web Games - Part I</title><link>https://blog.alexbeals.com/posts/sardines-jumping-into-multiplayer-web-games-part-i</link><description><![CDATA[A brief writeup on my foray into NodeJS, Socket.IO, and more with Sardines!]]></description><pubDate>Thu, 26 Nov 2015 06:29:23 -0500</pubDate></item><item><title>What's Line - Almost Done</title><link>https://blog.alexbeals.com/posts/whats-line-almost-done</link><description><![CDATA[Just a quick progress update on What's Line.  It's pretty much finished!  All of the functionality I had originally planned out, (minus the Facebook login and some small details on keeping track of score) are implemented!]]></description><pubDate>Fri, 30 Oct 2015 16:07:41 -0400</pubDate></item><item><title>Rigging PollDaddy</title><link>https://blog.alexbeals.com/posts/rigging-polldaddy</link><description><![CDATA[One of my best friends siblings was in a poll competition on a popular blog.  He was doing okay, but he wasn't close to the lead.  I thought I'd see if it was possible to boost his numbers a bit.]]></description><pubDate>Fri, 25 Sep 2015 21:49:58 -0400</pubDate></item><item><title>ShiftCycle</title><link>https://blog.alexbeals.com/posts/shiftcycle</link><description><![CDATA[About a week ago, I noticed that someone had posted on the subreddit /r/Jailbreak <a href="https://www.reddit.com/r/jailbreak/comments/3gadnv/request_selecting_text_and_hitting_the_shift_key/" class="inline" target="_blank">asking for a tweak.</a>  What it did was make it so when you selected text, and clicked shift, it would toggle the text through UPPERCASE, lowercase, and the original text.  I thought I could make it, and within a few days it was working great.  <a href="https://github.com/dado3212/ShiftCycle" class="inline" target="_blank">The source code is up on my GitHub</a> if you want to check it out.]]></description><pubDate>Fri, 21 Aug 2015 19:05:59 -0400</pubDate></item><item><title>PasscodeActivator</title><link>https://blog.alexbeals.com/posts/passcodeactivator</link><description><![CDATA[I have a jailbroken iPhone, and I wanted to add an Activator Event for a wrong passcode, so that entering '0000' would send a text message.  I looked through a bunch of tweaks without any success, so I decided to make it myself.  I jumped into learning the basics of Objective C, and through the iPhoneDevWiki and open source tweaks on GitHub, I finally managed to make PasscodeActivator. <a href="https://github.com/dado3212/PasscodeActivator" class="inline" target="_blank">The source code is up on my GitHub</a> if you want to check it out.]]></description><pubDate>Tue, 04 Aug 2015 17:01:12 -0400</pubDate></item><item><title>What's Line - Progress Update</title><link>https://blog.alexbeals.com/posts/whats-line-progress-update</link><description><![CDATA[Finally started working on the iOS version.  It took me a while to track down a Mac I could use (yay 2009 MacBook Pro!), and even longer to update it from Snow Leopard all the way up to OS X Yosemite for the most recent version of Xcode.  I have the initial login screen working, with the backend all set up.  Next step of business is planning out the main screen of the app, and getting the user registration all done.  Should be able to bang out registration tomorrow, and then start implementing the other screens later in the week.  I also need to continue my research on QR codes again.  Great.]]></description><pubDate>Wed, 22 Jul 2015 07:27:45 -0400</pubDate></item><item><title>Running Xcode Apps without Developer License</title><link>https://blog.alexbeals.com/posts/running-xcode-apps-without-developer-license</link><description><![CDATA[A developer license for Apple costs $100.  Now, if you know that you wish to launch an app, that's pretty cheap to get access to all of the great resources and ability to push as many apps as you want onto the App Store.  However, while you're still learning to program in Swift, this can be a large barrier to entry.  Luckily, as long as your phone is jailbroken it's pretty easy to get around this requirement.]]></description><pubDate>Sun, 19 Jul 2015 23:52:43 -0400</pubDate></item><item><title>Dartmouth Banner Redesign - Part 3 (The Fix)</title><link>https://blog.alexbeals.com/posts/dartmouth-banner-redesign-part-3-the-fix</link><description><![CDATA[A good way to reorganize the chaos that is Banner is to sort all of the links into the main purposes.  There are a few main reasons that people go onto Banner:]]></description><pubDate>Sun, 21 Jun 2015 23:20:11 -0400</pubDate></item><item><title>Anchor Modifications</title><link>https://blog.alexbeals.com/posts/anchor-modifications</link><description><![CDATA[There are a bunch of changes that I made to Anchor to fix or implement features.  Here are some of the changes: ]]></description><pubDate>Fri, 19 Jun 2015 16:30:52 -0400</pubDate></item><item><title>Redesigning the Blog</title><link>https://blog.alexbeals.com/posts/redesigning-the-blog</link><description><![CDATA[This blog uses the very lightweight CMS Anchor.  Now, when I set it up, I googled 'lightweight PHP blog', clicked the first link, and installed it.  However, in retrospect it probably wasn't the greatest idea.  For one, while Anchor is on version 0.9.2, and says in multiple places that it's still in development, work began on 1.0 over a year ago, and it looks like it's relatively dead.  One result of this is there are a bunch of features that are missing or broken.  Also, the basic themes are a little rough.]]></description><pubDate>Thu, 18 Jun 2015 08:15:53 -0400</pubDate></item><item><title>What's Line - Mockup I - Accounts</title><link>https://blog.alexbeals.com/posts/whats-line-mockup-i-accounts</link><description><![CDATA[I'm now finally starting to get back into working on What's Line?, the name that I finally settled on for the app that keeps track of line.  Some of the functionality has changed, which will become clear as I continue working through the mockups.  For now, I removed a bunch of the features so that I can work on getting the core tasks done, and a working app out by the end of the summer.  The rest can be added in later.]]></description><pubDate>Tue, 16 Jun 2015 00:45:06 -0400</pubDate></item><item><title>Releasing python-dartmouthbanner</title><link>https://blog.alexbeals.com/posts/releasing-python-dartmouthbanner</link><description><![CDATA[I write a bunch of quick Python programs that interact with Banner.  However, for a while now it's been a pain trying to login, as Banner requires you to be using cookies, and have JavaScript enabled (difficult to do with Python).  However, after a bit of work I found out how they were ensuring JavaScript was enabled (a very simple setting of cookie), and mimicked that.  I packaged this all up into a Python module, and added it to PyPi, so it can now be installed on your computer!]]></description><pubDate>Tue, 09 Jun 2015 19:10:55 -0400</pubDate></item><item><title>Summer Break</title><link>https://blog.alexbeals.com/posts/summer-break</link><description><![CDATA[Finally summer break, and I'm done with my freshman year.  There's a bunch of projects that I've started but then pushed off, and now's the time to start kicking them into gear.]]></description><pubDate>Sun, 07 Jun 2015 06:40:52 -0400</pubDate></item><item><title>Banner Security Hole - Fixed!</title><link>https://blog.alexbeals.com/posts/banner-security-hole-fixed</link><description><![CDATA[Right after I made the post I got in contact with the school in regards to fixing it.  After 5 days, the problem is solved!  Yay!]]></description><pubDate>Mon, 18 May 2015 20:28:17 -0400</pubDate></item><item><title>Update on DartmouthRoomSearch.com</title><link>https://blog.alexbeals.com/posts/update-on-dartmouthroomsearchcom</link><description><![CDATA[This is just a quick update on where DartmouthRoomSearch is.  It finally comes up on the first page of Google when you search "dartmouth room search"!  And it's first!  I've been using Google Analytics to track hits, which has been interesting.]]></description><pubDate>Thu, 14 May 2015 22:49:19 -0400</pubDate></item><item><title>Banner Security</title><link>https://blog.alexbeals.com/posts/banner-security</link><description><![CDATA[There's a security problem with Banner.  It's not huge, and the system does have safeguards against it, but they aren't tailored to the problem.  The problem comes about with "Request an Unofficial Transcript - PDF version".  The web version is fine: you need to be logged in to access that.  The PDF version, however, sends a copy to your email.  Seems okay, right?  Wrong.]]></description><pubDate>Wed, 13 May 2015 04:22:16 -0400</pubDate></item><item><title>Kinect for XBox One (v2 SDK)</title><link>https://blog.alexbeals.com/posts/kinect-for-xbox-one-v2-sdk</link><description><![CDATA[I recently got my USB adapter for the Kinect in the mail.  I set it up, and the USB device wasn't recognized.  <a href="https://www.microsoft.com/en-us/download/details.aspx?id=44561" class="inline" target="_blank">I downloaded the SDK 2.0 from here</a> and got to work.  You have to unplug the Kinect, run the software, and then plug it back in.  Now it recognizes as a Kinect (note that I had to use a USB3.0 spot for it).]]></description><pubDate>Tue, 05 May 2015 22:50:59 -0400</pubDate></item><item><title>Making an Avatar with Kinect</title><link>https://blog.alexbeals.com/posts/making-an-avatar-with-kinect</link><description><![CDATA[Using an XBox One Kinect and the adapter for USB, you should be able to take a mapping and use the SDK to make a 3D model of you.  I'll get it and see if it's possible.]]></description><pubDate>Mon, 20 Apr 2015 00:17:43 -0400</pubDate></item><item><title>Game Idea</title><link>https://blog.alexbeals.com/posts/game-idea</link><description><![CDATA[There's a fantastic book called Snow Crash written by Neal Stephenson.  It touches on a ton of subjects including history, linguistics, religion, and computer science.  The main part of it that I love is the idea of the 'Metaverse'.  Basically, there's a publicly accessible virtual world.  Anyone with a computer can access it.  When you log in, you're represented by an avatar.  This avatar you have to either script yourself or purchase from some other place.]]></description><pubDate>Sun, 19 Apr 2015 21:42:06 -0400</pubDate></item><item><title>Pong Line App - Part 1: Definition</title><link>https://blog.alexbeals.com/posts/pong-line-app-part-1-definition</link><description><![CDATA[The first part of solving a problem is clearly defining it.  For the app, I needed to make it clear what the app was going to do, and what it wasn't.  This is also an easy way to think up new features.  I brainstormed on a sheet of paper until I had a clear idea of what the purpose of the app was.]]></description><pubDate>Sun, 19 Apr 2015 20:23:41 -0400</pubDate></item><item><title>Lone Pine Logo</title><link>https://blog.alexbeals.com/posts/lone-pine-logo</link><description><![CDATA[Weirdly, there's no vector graphic or even large version of the Lone Pine logo at Dartmouth.  I made one, so you can download <a href="/images/lone-pine-logo/Tree.png" class="inline" target="_blank">either a black and white png</a> or <a href="/images/lone-pine-logo/Tree.ai" class="inline" target="_blank">the original Illustrator file</a>.]]></description><pubDate>Tue, 14 Apr 2015 16:49:06 -0400</pubDate></item><item><title>CBORD Laundry</title><link>https://blog.alexbeals.com/posts/cbord-laundry</link><description><![CDATA[Whelp, the laundry swipers aren't working.  Again.  Apparently, CBORD <a href="https://www.cbord.com/enews/article.asp?articleid=1041" class="inline" target="_blank">released an app</a> that works with our brand of laundry controllers (the ever so fancy <a href="https://universities.cbord.com/products/hardware/cu_lr_3000.pdf" class="inline" target="_blank">LR 3000</a>).  But has Dartmouth implemented it?  No...that would be too technically progressive.  Sigh.]]></description><pubDate>Mon, 13 Apr 2015 15:28:56 -0400</pubDate></item><item><title>Pong Line App</title><link>https://blog.alexbeals.com/posts/pong-line-app</link><description><![CDATA[Alright, fantastic 3AM/avoiding essay app idea.  It's an easy way of keeping track of line.  The basic goal is that it makes it super quick and easy to add people to line for pong and rearrange them.  ]]></description><pubDate>Mon, 13 Apr 2015 07:17:45 -0400</pubDate></item><item><title>DartmouthRoomSearch.com</title><link>https://blog.alexbeals.com/posts/dartmouthroomsearchcom</link><description><![CDATA[I picked up the domain for 9 bucks and transferred the website to there.  dartmouth.alexbeals.com redirects there now.  Probably should have done that before releasing, but ah well, it's done now.]]></description><pubDate>Sun, 12 Apr 2015 16:24:22 -0400</pubDate></item><item><title>Dartmouth Room Search - Visuals</title><link>https://blog.alexbeals.com/posts/dartmouth-room-search-visuals</link><description><![CDATA[I quickly did some visuals, and ended up with this 'passable' work:
<a data-fancybox="gallery" data-caption="First iteration" href="/images/dartmouth-room-search-visuals/1.jpg"></a>
It worked, to be sure...but it didn't look GOOD.  The first major problem was the color scheme.  I'm not sure why I went with the blue, but I realized that I probably should have gone with Dartmouth colors.  I went to the Dartmouth website, and took the main color.  It looks like this: .  Now I need a color palette.  First off, <a href="http://viget.com/inspire/tints-tones-shades" class="inline" target="_blank">this site</a> details the process of generating shades of the color you have (note 20% grey = 10% black).  I also needed a complementary color, and from the same website observed <a href="http://viget.com/inspire/add-colors-to-your-palette-with-color-mixing" class="inline" target="_blank">this link</a> to making a color palette.  It utilizes a program called ColorScheme Studio, the free trial version can be downloaded from online.  To activate it, you can (hypothetically) use the information <a href="http://www.smartserials.com/view.php?id=Color_Schemer_Studio_2.0_31263.htm" class="inline" target="_blank">located here</a>.  I fully support buying it, however.]]></description><pubDate>Fri, 03 Apr 2015 00:23:58 -0400</pubDate></item><item><title>Dartmouth Room Search - Locating</title><link>https://blog.alexbeals.com/posts/dartmouth-room-search-locating</link><description><![CDATA[I had all of the data, and I had it in an easily searchable MySQL database.  Now, I had to figure out the best way to access it.  I contemplated just having a bunch of search boxes, but that was quickly crossed out.  It needed to be intuitive, and there were too many categories.  I then thought maybe having sliders for the number of people and rooms, and the standard dropdown/checkboxes for the other values.  Again, I vetoed this for something easier to grasp immediately.]]></description><pubDate>Fri, 03 Apr 2015 00:13:12 -0400</pubDate></item><item><title>Dartmouth Room Search - Sprint</title><link>https://blog.alexbeals.com/posts/dartmouth-room-search</link><description><![CDATA[I realized two days ago that there wasn't at all a good way to find rooms that fit your desires for upperclassmen housing.  I contacted the housing office, and inquired as to if they had access to data about all of the rooms.  Unfortunately, all they had was access to the same outdated floor plans that anyone could access.  Sighing, I started looking through all of the PDF's to see if there was an easy way to extract the data.  The links to the PDF's are scattered across pages, with differing numbers depending on what floors there are.  I noticed they have a similar address pattern: http://www.dartmouth.edu/~orl/images/floor-plans-06/&lt;first four characters of building name&gt;-&lt;floor number (0-4).pdf.  I quickly got the building names by copying them all and running a quick strip, and then using the requests python module to check if the pdf file existed and then downloading it.  You can check out the very easy download script <a href="https://github.com/dado3212/Dartmouth-Room-Service/blob/master/downloadFloors.py" class="inline" target="_blank">here, on my Github.</a>]]></description><pubDate>Thu, 02 Apr 2015 23:48:15 -0400</pubDate></item><item><title>How QR Codes Work</title><link>https://blog.alexbeals.com/posts/qr-codes</link><description><![CDATA[For the Dartmouth Redesign, I wanted a way to turn the DiD (a seven character alphanumeric that identifies you) into an attractive QR code.  This got me wondering into how QR codes work.  Turns out, there are very few easily accessible resources on it.  This is what I found:]]></description><pubDate>Thu, 26 Mar 2015 02:22:06 -0400</pubDate></item><item><title>Dartmouth ID Redesign</title><link>https://blog.alexbeals.com/posts/dartmouth-id-redesign</link><description><![CDATA[Now, I've done a fair amount of work in regards to the Dartmouth ID, but mainly in terms of duplicating/replicating it.  I've made a fair amount of progress, and you can see some of <a href="http://blog.alexbeals.com/posts/mimicking-the-dartmouth-id" class="inline" target="_blank">the early work</a> and <a href="http://blog.alexbeals.com/posts/update-on-making-dids" class="inline" target="_blank">the updates</a> by clicking on the links.  However, this article is about a possible redesign on the current ID.  This is what the current ID look like.]]></description><pubDate>Thu, 26 Mar 2015 00:57:23 -0400</pubDate></item><item><title>Dartmouth Banner Redesign - Part 2 (Specific Breakdown)</title><link>https://blog.alexbeals.com/posts/dartmouth-banner-redesign-part-2-specific-breakdown</link><description><![CDATA[<b>Financial Aid Menu</b>
Financial Aid Adjustment Survey Request
There are no currently available surveys.]]></description><pubDate>Tue, 24 Mar 2015 21:09:31 -0400</pubDate></item><item><title>Dartmouth Banner Redesign - Part 1 (The Problems)</title><link>https://blog.alexbeals.com/posts/dartmouth-banner-redesign-part-1</link><description><![CDATA[Dartmouth currently uses an Ellucian product called Banner for the 'Student Information System'.  From a UI standpoint, it's a nightmare.  From a UX standpoint, it's even worse.  First of all, the URL.  The URL to access banner is https://banner.dartmouth.edu/banner/groucho/twbkwbis.P_WWWLoginWEBAUTH.  One would think that https://banner.dartmouth.edu would redirect, and be a lot easier.  But instead, that redirects to a 403 Forbidden page.
<a data-fancybox="gallery" data-caption="Forbidden Page" href="/images/dartmouth-banner-redesign-part-1/3.png"></a>
When you finally get to the site, you're greeted with this 'beautiful' and totally useful landing page.
<a data-fancybox="gallery" data-caption="Landing Page" href="/images/dartmouth-banner-redesign-part-1/1.png"></a>
The 'Help' link brings up a popup window that just says click on the Menu.  The 'Site Map' link brings up the same menu options as clicking 'Undergraduate Student Main Menu'.  Clicking that brings up one of the worst menus.
<a data-fancybox="gallery" data-caption="Main Menu" href="/images/dartmouth-banner-redesign-part-1/2.png"></a>
You'll notice that the links are almost in alphabetical order, which is infuriating.  Now, a lot of these links aren't applicable, or available at certain times.  The main ones are the following:]]></description><pubDate>Tue, 10 Mar 2015 02:58:09 -0400</pubDate></item><item><title>Router Setup</title><link>https://blog.alexbeals.com/posts/router-setup</link><description><![CDATA[The way that I use my router is basically as an ethernet splitter, and to make my own wifi signal.  In case anyone else has multiple devices in their room that need ethernet, this is a rough guide of how to set it up.  These instructions are for the router I have, which is the Linksys WRT54G.
<a data-fancybox="gallery" data-caption="Linksys WRT54G" href="/images/router-setup/1.jpg"></a>]]></description><pubDate>Mon, 09 Mar 2015 21:30:41 -0400</pubDate></item><item><title>Changing Meal System</title><link>https://blog.alexbeals.com/posts/changing-meal-system</link><description><![CDATA[The site where you can get information on meal swipes and that information has transferred from ManageMyID to CBORD's GET, along with the laundry machines.  I've accordingly updated the Python script for scraping it, and it's accessible in the <a href="https://github.com/dado3212/ManageMyID-Python-/blob/master/manageMyIDExtractor.py" class="inline" target="_blank">same location</a> as last time.]]></description><pubDate>Mon, 09 Mar 2015 21:18:29 -0400</pubDate></item><item><title>Update on making DiD's</title><link>https://blog.alexbeals.com/posts/update-on-making-dids</link><description><![CDATA[It seems like it would be pretty easy to make the ID's.  The first thing you would need is a printer that has a CD/DVD printer tray. The <a href="http://www.amazon.com/MG7520-Wireless-All-In-One-Compatible-Black/dp/B00MOSGJHO" class="inline" target="_blank">Canon PIXMA MG7520, available here on Amazon for $200</a> would probably do.  Then, you need an ID tray, one that will work with the printer, but replace the CD/DVD tray.  That specific printer uses a type of tray referred to as 'Tray J'.  You can buy an ID tray for Tray J type <a href="http://brainstormidsupply.com/pvc-card-tray-for-canon-j-tray.html" class="inline" target="_blank">on this great site, brainstormidsupply.com</a>.  You can also buy Inkjet PVC cards there for relatively cheap.  Finally, you need a template to print to.  Using Photoshop, in Print Settings, you can choose Printable disc under media type, and Disc tray J under Printer Paper Size.  Then, use a template for Tray J.  I couldn't find one online, so I made one that's <a href="/images/mimicking-the-dartmouth-id/PrintingTemplate.psd" class="inline" target="_blank">downloadable here</a> for novelty purposes.]]></description><pubDate>Mon, 09 Mar 2015 21:14:03 -0400</pubDate></item><item><title>Mimicking the Dartmouth ID</title><link>https://blog.alexbeals.com/posts/mimicking-the-dartmouth-id</link><description><![CDATA[Some of the things stated in the Dartmouth article I cited in the Dartmouth ID post weren't entirely accurate: it's not a 125kHz RFID tag in it, which is both a good thing and a bad thing.  It's a bad thing in that I bought a RFID reader for 125kHz, and not 13.56 MHz, but a good thing in that it's a lot easier to write to a 13.56 MHz tag and thus clone it.  NOTE FROM THE FUTURE: This is almost certainly not correct, and it's instead a 125kHz card, but with HID encoding, so that a normal 125kHz reader won't do it, you'll need one from HiD.]]></description><pubDate>Tue, 14 Oct 2014 20:56:37 -0400</pubDate></item><item><title>Accessing Meal Swipe Information (Python)</title><link>https://blog.alexbeals.com/posts/accessing-meal-swipe-information-python</link><description><![CDATA[The app "The Ropes" for Dartmouth displays the swipes remaining and DBA on your account if given your ManageMyID information.  I was curious as to how easily that could be replicated in Python, and then in my own app.]]></description><pubDate>Wed, 01 Oct 2014 20:55:33 -0400</pubDate></item><item><title>The Dartmouth ID</title><link>https://blog.alexbeals.com/posts/the-dartmouth-id</link><description><![CDATA[I was researching some aspects of RFID technology, when I wondered how the Dartmouth ID cards worked.  They clearly have some sort of RFID tech in them, because they open up the doors to the buildings just by holding it near the reader.  However, they also have a magnetic strip that's used for DA$H (meal swipes) and DBA.  So I googled, and found ONE article from "The Dartmouth" in 2005 that shed some light, <a href="http://thedartmouth.com/2005/04/15/chips-used-in-college-ids-to-be-included-in-passports/" class="inline" target="_blank">an article written during the resistance to putting RFID chips into US passports</a>. ]]></description><pubDate>Wed, 24 Sep 2014 20:48:00 -0400</pubDate></item><item><title>Ethernet Cables</title><link>https://blog.alexbeals.com/posts/ethernet-cables</link><description><![CDATA[Finally got around to buying some ethernet cables from The Computer Store.  Now everything's wired up!  The XBox, my computer, and the Raspberry Pi that hasn't been doing anything productive for the last month.  The wireless network is still up though, which made it really easy to set up a floormates' printer.  i don't see any reason to take it down, so for the mean time it'll remain up.]]></description><pubDate>Tue, 23 Sep 2014 20:46:38 -0400</pubDate></item><item><title>Finishing up XBox Connection</title><link>https://blog.alexbeals.com/posts/finishing-up-xbox-connection</link><description><![CDATA[Got the network set up.  The router is jacked into the ethernet port, and then rebroadcasts the network as "Butterfield Secure".  This is WPA2 secure, which XBox happily handles.  Despite the slight drop from ethernet, this is fine in terms of speed.  However, a couple of the games I have for the XBox necessitate random ports to be open.  Luckily, after around five minutes of poking around on the internet, I found the necessary ports and opened them.  Everything's finally set up!]]></description><pubDate>Sat, 06 Sep 2014 20:46:15 -0400</pubDate></item><item><title>WiFi Problems</title><link>https://blog.alexbeals.com/posts/wifi-problems</link><description><![CDATA[The first thing I realized when connecting to the secure internet network "Dartmouth Secure" was that it used WPA-Enterprise authentication, meaning that it needed a username and password combination (your school ID and the password you set up to access Banner Student).  This isn't a problem for laptops and iPhones.  However, it IS a problem for other devices, specifically any XBox one that wants to enjoy a connection speed faster than that of a snail.  There's only one available ethernet cable in the room, and while I brought a router, I only have one ethernet cable.  Looks like I'll have to set up my own wireless network.  Fun!]]></description><pubDate>Sat, 06 Sep 2014 19:44:36 -0400</pubDate></item></channel></rss>
