<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xml" href="/feed.xslt.xml"?>
<feed xmlns="http://www.w3.org/2005/Atom" >
<generator uri="https://jekyllrb.com/" version="4.2.2">Jekyll</generator>
<link href="https://www.julianlopez.net/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.julianlopez.net/" rel="alternate" type="text/html" />
<updated>2026-04-19T01:00:11+00:00</updated>
<id>https://www.julianlopez.net/feed.xml</id>
	<title type="html">Domain of a Knight</title>
	<subtitle type="text" xml:lang="en">The personal website for me, Julian Lopez. Sometimes I go by the name Rerun. I'm a young dude with interests in technology, stationary, fountain pens, wheelchairs, postage, and comics.</subtitle>
	<author>
		<name>Julian Lopez</name>
	</author>
	
  	<entry>
		<title type="html">Is Coding with AI Safe?</title>
		<link href="https://www.julianlopez.net/posts/2026/04/is-coding-with-ai-safe" rel="alternate" type="text/html" title="Is Coding with AI Safe?" />
		<published>2026-04-07T00:00:00Z</published>
		<updated>2026-04-07T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2026/04/is-coding-with-ai-safe</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2026/04/is-coding-with-ai-safe">
			
			
			
			
			
			&lt;h2 id=&quot;the-question-you-asked&quot;&gt;The Question You Asked&lt;/h2&gt;

&lt;p&gt;Dear M,&lt;/p&gt;

&lt;p&gt;Recently you asked me the question of “Is it safe to code with AI?”. Initially I was going to give a brief but detailed answer, but I got a bit out of hand. Thus, I’m going to provide you with two formats. A short answer and a long answer.&lt;/p&gt;

&lt;h2 id=&quot;the-short-answer&quot;&gt;The Short Answer&lt;/h2&gt;

&lt;p&gt;If you know what you’re doing, yes.&lt;/p&gt;

&lt;h2 id=&quot;the-long-answer&quot;&gt;The Long Answer&lt;/h2&gt;

&lt;p&gt;I have the feeling you’ve been looking at “Claude Code”, the “Agentic Coding” app that Anthropic made that is the most popular in the world for this category of software. Coding with AI is really popular right now and something I’ve been doing heavily for over a year now. Around 2-3 years ago the best AI could manage was act as a fancy coding auto complete. That’s all changed now as they’ve become smart enough to handle coding entire projects/apps from scratch with the user not needing to type a single line of code, all they have to do is converse normally with the AI via a chatbox. Using AI in this manner even has a name: “vibe coding”.&lt;/p&gt;

&lt;p&gt;In my case, I’ve been vibe coding almost all of my work with Cyberknight and by my rough estimate almost 90%+ of Cyberknight code is AI generated while having a speed up of 2x compared to me just hand writing it! Not to mention (as much as it pains me to admit it) AI is better than I am at certain work and can generate results better than I can! To be clear, this is in areas that aren’t my specialty (I hate making webpages with forms) but even in things I am well versed in it demonstrates remarkable knowledge and skill.&lt;/p&gt;

&lt;p&gt;The big advantage AI has in coding is that code can either run properly or not. If there’s a bug or error, the AI can catch it and fix it. What vibe coding looks like is that you’ll tell AI to code something, it’ll run it, check for errors (known as debugging), fix them, run again, and report back if all is well. This loop is what enables AI to be code things in a safe manner. With regards to Cyberknight, I spent nearly a month working on getting the tools for Claude to debug things properly, and while it took longer than I would have liked the ability for AI to autonomously edit code is both impressive and well worth the effort.&lt;/p&gt;

&lt;p&gt;Now that said, I have noticed core deficiencies with modern AIs for coding. My main concern is that they are bad at architecting (designing things for the long term) and left unchecked, they will generate code that over the course of a year or two would result in an unmaintainable and a near impossible to edit project. In my case, I have the knowledge to know exactly what changes I want AI to make so as to keep my codebases small and maintainable. For someone who doesn’t know how to code properly I fear that for larger and more complex projects, they would struggle.&lt;/p&gt;

&lt;p&gt;Additionally I’ve noticed the “style” of the webpages they make isn’t to my liking. To be clear, from a purely practical standpoint they succeed in conveying the information and serving the forms that they were designed for. Where they will fail is in the subjective part of their task, the “feeling” that they are meant to convey. I get the feeling that the next couple of years in AI research is going to be driven in this area of “taste” and tasks that don’t have a boolean true/false outcome.&lt;/p&gt;

&lt;h2 id=&quot;local-ai-is-the-future&quot;&gt;Local AI Is the Future&lt;/h2&gt;

&lt;p&gt;On a more personal note, something I’ve been doing recently instead is downloading AI models onto my laptop (which I must thank you for again!) and running them locally. I was planning on writing a post on that soon either way so I’ll text you a link once I post it.&lt;/p&gt;

&lt;p&gt;As your wallet recalls, I have a MacBook with 36GB of RAM which limits the size of the AI models I can run to roughly 30GB (I need a bit of breathing room for my operating system and the other apps I have open). Currently I’ve settled on using Qwen 3.5 (or to be more exact: qwen3.5-35b-a3b) which barely squeezes in that limit. By comparison, Claude Sonnet (the version of Claude you probably use the most) is estimated to be around 300 Billion parameters (it’s not exact, but this is roughly 300GB).&lt;/p&gt;

&lt;p&gt;That said, the risk is much bigger with these smaller models. Because they inherently contain less information they are “less smart” and more prone to making mistakes. For instance, I’ll ask it to perform a task and while it might do well at first, eventually it’ll make an obvious mistake or just stop randomly for no reason. Despite these issues, I am of the opinion that the Qwen model I can now run on my laptop is far smarter and faster than even GPT-4 from just a couple of years ago! While I do not trust using local AIs run on my laptop to handle key parts of Cyberknight’s code, I do trust it enough to handle basic webpages or my personal projects such as this website you’re on right now.&lt;/p&gt;

&lt;p&gt;Local AI is something I am increasingly interested in especially since I have growing concerns around the management, unrealistic revenue expectations, potential liquidity issues, political concerns and rising costs associated with using Claude/GPT/Gemini and other major AIs run in the cloud. At this time, I don’t believe these issues are enough for me to stop relying on these services, but I do foresee stormy clouds on the horizon…&lt;/p&gt;

&lt;p&gt;To counter all that, I personally believe that within a decade (possibly it may take as many as 15 years though), AI models and the means to run them will become commoditized for the most part. For the vast bulk of AI tasks your layman performs, phones and laptops will be able to process them locally for free, offline, and at a comparable speed to current models. For more advanced tasks like coding, people will have two options. Either stick to cheaper on device models (like I’ve been experimenting with) or pay for more capable AI models running in the cloud. The difference compared to now is that in the future the gap between what is possible locally vs in the cloud will be far smaller compared to today.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="coding" />
		
			<category term="ai" />
		
		<summary type="html">&lt;h2 id=&quot;the-question-you-asked&quot;&gt;The Question You Asked&lt;/h2&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">My ROG Ally</title>
		<link href="https://www.julianlopez.net/posts/2026/04/my-rog-ally" rel="alternate" type="text/html" title="My ROG Ally" />
		<published>2026-04-02T00:00:00Z</published>
		<updated>2026-04-02T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2026/04/my-rog-ally</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2026/04/my-rog-ally">
			
			
			
			
			
			&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Dear T,&lt;/p&gt;

&lt;p&gt;Last time we met I’m sure you noticed how I was lugging around my backpack. We were so wrapped up in our conversation that I didn’t get a chance to show off what I was lugging around with me! There were three gadgets I had with me that I wanted to show off. For now, I’ll be discussing just my gaming handheld, my ROG Ally.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;/assets/images/posts/2026-04-01/thumbnails/IMG_1279.webp&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;/assets/images/posts/2026-04-01/IMG_1279.jpeg&quot; alt=&quot;A photo of my ROG Ally as I first unboxed it.&quot; class=&quot;blog_image&quot; title=&quot;A photo of my ROG Ally as I first unboxed it.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Unboxing my Ally for the first time felt amazing&lt;/figcaption&gt;
&lt;/picture&gt;

&lt;p&gt;To clarify, this isn’t one of the “Xbox” branded Ally models. This was the very first ROG Ally released in 2023, but despite its age it handles modern-ish games super well! Most of the games I play are either a decade old / indies / or retro (GOG is amazing for retro PC games), but for the few recent games I’ve played via Game Pass it’s handled them well.&lt;/p&gt;

&lt;p&gt;I cannot understate the versatility of this handheld. Basically 90%+ of games I am remotely interested in playing I can run on it, and on the back of a bus as well! There are plenty of PC games that don’t have controller support of course, but for those I can just plug the Ally into my USB-C dock at home and use the monitor/keyboard/mouse set up I have at home.&lt;/p&gt;

&lt;p&gt;I got suuuuuper lucky and managed to get a barely touched refurbished unit (everything was still in its packaging!) for $400 at my local Best Buy. Within a matter of weeks the price went up by a hundred bucks. By January, they no longer were selling them! It’s a shame but kinda makes sense that they’d want to push the newer Xbox Ally handhelds. My Ally might not have the same power/features as those units, but it more than made up for it in raw bang for the buck!&lt;/p&gt;

&lt;p&gt;Another thing I have to admit is just how great of a conversation starter it is. I am not exaggerating when I say that I was asked twice today what it was! I’ll admit, it felt awesome to explain and just what it’s capable of in addition to the mods I’ve done.&lt;/p&gt;

&lt;h2 id=&quot;the-mods-ive-performed&quot;&gt;The Mods I’ve Performed&lt;/h2&gt;

&lt;h3 id=&quot;magnetic-d-pad&quot;&gt;Magnetic D-Pad&lt;/h3&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;/assets/images/posts/2026-04-01/thumbnails/IMG_1474.webp&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;/assets/images/posts/2026-04-01/IMG_1474.jpeg&quot; alt=&quot;A close up photo of a metal green D-Pad on an Ally.&quot; class=&quot;blog_image&quot; title=&quot;A close up photo of a metal green D-Pad on an Ally.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;I like this metal green more than I expected&lt;/figcaption&gt;
&lt;/picture&gt;

&lt;p&gt;As embarrassing as it is to type, one of my main motivations in getting this handheld was so I could stay addicted to Hollow Knight Silksong on the go. It’s a pretty challenging game that requires precision inputs (especially in Act 3), so playing with a D-Pad is a must. Unfortunately, the Ally ships with something that can be best described as a “Slide-Pad”. Usable, but far from ideal.&lt;/p&gt;

&lt;p&gt;Thankfully, someone came up with the brilliant idea of making a 3D printed adapter for the Xbox Elite controller’s magnetic D-Pad to the Ally that works perfectly! As it turns out there are multiple color options available on Amazon that are of various sizes and colors. The hard part is having to nearly fully disassemble everything, but once you’ve done so it’s a piece of cake. The difference in precision I have in platformer made this soooooo worthwhile!&lt;/p&gt;

&lt;h3 id=&quot;xbox-face-buttons&quot;&gt;Xbox Face Buttons&lt;/h3&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;/assets/images/posts/2026-04-01/thumbnails/IMG_2264.webp&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;/assets/images/posts/2026-04-01/IMG_2264.jpeg&quot; alt=&quot;A close up photo of Xbox styled/colored ABXY buttons&quot; class=&quot;blog_image&quot; title=&quot;A close up photo of Xbox styled/colored ABXY buttons&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;The glitter effect is only visible from this angle&lt;/figcaption&gt;
&lt;/picture&gt;

&lt;p&gt;Unlike the other mods I’ve performed, this one was solely for aesthetics. The face buttons that the Ally comes with aren’t bad, but I couldn’t help but find their colors weird. Thus I decided to order face buttons that look like an Xbox controller but with a glitter effect. The effect is visible when you view the buttons at an off angle, but not head on.&lt;/p&gt;

&lt;p&gt;Overall I feel kinda meh on this one. The Etsy shop I ordered from had other more colorful/artsy designs I regret not getting. The one’s I went with aren’t bad, they’re just not great.&lt;/p&gt;

&lt;h3 id=&quot;egpu-port-cover&quot;&gt;eGPU Port Cover&lt;/h3&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;/assets/images/posts/2026-04-01/thumbnails/IMG_2262.webp&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;/assets/images/posts/2026-04-01/IMG_2262.jpeg&quot; alt=&quot;A close up photo of a black port cover but with a single USB-C port exposed&quot; class=&quot;blog_image&quot; title=&quot;A close up photo of a black port cover but with a single USB-C port exposed&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;I also like how the color matches the rest of the Ally&lt;/figcaption&gt;
&lt;/picture&gt;

&lt;p&gt;Unlike the latest revisions of the Ally, the original one swapped a USB-C port for a proprietary eGPU port that I (along with practically everybody that owns one) will never use. A major nuisance for me was how it’s physically similar enough to the nearby USB port that I’d often accidentally attempt to plug things into it.&lt;/p&gt;

&lt;p&gt;$5 from a materials cost perspective is probably a rip off for this cover, but I feel it’s well worth it in terms of how well it resolves my issue with the eGPU port. I genuinely believe that most all owners should start with this before moving onto the more difficult mods.&lt;/p&gt;

&lt;h3 id=&quot;2tb-ssd&quot;&gt;2TB SSD&lt;/h3&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;/assets/images/posts/2026-04-01/thumbnails/IMG_2261.webp&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;/assets/images/posts/2026-04-01/IMG_2261.jpeg&quot; alt=&quot;An Intel M.2 2280 SSD bing held in place by adapters within the inside of an Ally.&quot; class=&quot;blog_image&quot; title=&quot;An Intel M.2 2280 SSD bing held in place by adapters within the inside of an Ally.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;It looks janky, but it works!!&lt;/figcaption&gt;
&lt;/picture&gt;

&lt;p&gt;From day, one I always wanted to increase the amount of storage my unit has. The intended method is to use the microSD card slot, however due to a poor thermal design it’s practically guaranteed to burn out. Thankfully, it’s pretty easy to swap the SSD, but the issue there is the form factor.&lt;/p&gt;

&lt;p&gt;Like the Steam Deck, the original ROG ally uses an M.2230 SSD. This is an uncommon form, factor, but readily available at a slight markup…. in a normal market. Due to the AI craze, by the time I saved up enough to purchase an SSD all the good options were either out of stock or nearly doubled their MSRP!&lt;/p&gt;

&lt;p&gt;Fortunately, I was in luck. About two years prior I had purchased a 2 TB Intel (I believe they’ve sold off their storage division since) M.2280 SSD for use in my server. I use hard drives to store all my data and only used it as a boot device, so I never used up more than 20 GB. Thus I was able to swap the drives via an adapter made specifically for the Ally. It’s wayyyy jankier than I’d like (I had to put washi tape over the power connecter) but haven’t had any issues with either the fit (after cutting a bunch of plastic out of the backplate) or thermals.&lt;/p&gt;

&lt;h2 id=&quot;planned-mods&quot;&gt;Planned Mods&lt;/h2&gt;

&lt;p&gt;I’m pretty content with my ally right now. However, there are just two final tweaks I’d like to perform before I can call it perfect: switching out the battery for a higher capacity and getting a proper case. These are both pretty self-explanatory, but in the case of the battery it is worth noting that this ally does not have a great one to begin with. I play mostly indie/retro(GOG is amazing for these)/emulated games so often I’m able to stick to the lowest power/performance mode, but even then I can only eke out 1.5-2 hours if I’m lucky. This isn’t an issue for me while I’m home, but while commuting this could be such a big boon.&lt;/p&gt;

&lt;h2 id=&quot;software&quot;&gt;Software&lt;/h2&gt;

&lt;p&gt;When I first got this unit it ran vanilla Windows 11 which was a terrible experience (probably why it was returned in the first place). Since then I’ve installed the “Xbox Full Screen Experience” (amazing naming from Microsoft) which acts as a launcher for games from Xbox/GOG/Steam/EGS/Ubisoft. It also apparently prevents quite a bit of Windows bloat from loading on boot (I hate OneDrive), but I’m uncertain of the efficacy of this.&lt;/p&gt;

&lt;p&gt;Something that’s been a great to have is “Xbox Play Anywhere” which lets me buy the game once and then play it on both my Ally and my Series S. Practically all new Game Pass games have this, however I’m trying to avoid subscriptions in my personal life, so I just prefer to buy these games outright.  A decent chunk of indie games that I’m interested in have this feature though, And it’s really nice gaming for a bit on the Metro and picking up from where I left off on my TV.&lt;/p&gt;

&lt;p&gt;That said, updates are always a pain and require at least two hours. This is still fundamentally a Windows 11 device, so Windows Update, ASUS BIOS updates, Microsoft Store, and AMD GPU drivers separately and manually up to date. Having a centralized place to click an “Update” button is an understandably difficult challenge, but is direly needed. As of writing this, I’m not certain if I have my Ally completely up to date.&lt;/p&gt;

&lt;p&gt;Additionally, just for certain Xbox marketplace games (Rain World was the worst one), I’ve had issues with not being able to run games at all after installing them. There are workarounds but they both shouldn’t be needed and aren’t always effective. Even Ubisoft Connect works better than the Xbox PC app in this regard!!&lt;/p&gt;

&lt;p&gt;The worst issue for me though is how when I’m offline (typically when I’m commuting via LA Metro), I can’t play most of my Xbox games due to not being able to sync/load my player profile. Ironically, this is pushing me towards purchasing my games on other marketplaces! (GOG seriously doesn’t get enough love for how all their games are DRM free and avoid this online connection BS.)&lt;/p&gt;

&lt;h2 id=&quot;emulators&quot;&gt;Emulators&lt;/h2&gt;

&lt;p&gt;Retroarch is my go to emulator and the one I have the most experience with. Thus I feel kinda mixed since there is practically no difference running games via it on my Ally, Series S, or hacked Switch. The games/shaders/UI all looked and behaved the same between them all. The only difference I could find was with BSNES HD (a SNES emulator focused on accuracy that can run patched games in widescreen) which ran at full speed on the Ally while it struggled elsewhere.&lt;/p&gt;

&lt;p&gt;However, where the Ally truly shines is in more demanding consoles. PCSX2 runs PS2 games near perfectly (the issues I ran into were software ones I suspect) which struggled on everything else I tried it on. What really blew me away was PS3 emulation. Several years ago I tried running RPCS3 on my desktop gaming PC (RX 480 + i5 6500) but could barely get above 10fps in LittleBigPlannet. On this newer yet portable hardware I can get a near locked 60FPS! I’m sure the bulk of that is from software optimizations that have occurred in the years since, but part of me wonders how much that difference is due to the Ally’s newer architecture and raw power!&lt;/p&gt;

&lt;p&gt;What was equally exciting and mixed was my experience emulating Nintendo Switch games. I have MK8 Deluxe and other Switch games boxed on my bookshelf so I feel fully justified in running just those games here. As of roughly a year ago, Nintendo sued the emulator Yuzu out of existence. I didn’t fully agree with their method of fundraising, but for Nintendo to do this doesn’t sit well with me. That said, the exe still exists online and can run most pre-2023 games with no problem. Unfortunately, shader compilation stutter is a big problem when first running a game, but after a couple of laps in MK8 it mostly goes away. Other than that performance is solid at 60fps and 1080p.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;I don’t know if you’re aware of this, but recently Microsoft had a controversial “This is an Xbox” marketing campaign that pushed the idea of devices such as my Ally as a full-blown Xbox. I can understand the pushback against it, but at the same time I really do think of my ally as a portable Xbox. The software’s certainly not perfect, but compared to the portable gaming options from a decade ago it’s simply an incredible experience.&lt;/p&gt;

&lt;p&gt;Compared to a Nintendo Switch, I strongly prefer my Ally due to the level of customization I can have with it. However, for your average gamer, I’m not sure if I can recommend they get an ally over a Switch or even a Steam Deck. I actually view the Steam Deck as not a great option due to most major multiplayer games not being playable in Steam OS, and the lack of third-party marketplaces (I really care about having EGS and GOG). The Switch is certainly a lot more underpowered compared to the Ally, which really does make a difference in this modern era of Unreal Engine 5 games. That said, the thing both of these platforms have going for them is their polish, which the “Xbox Full Screen Experience” is in dire need of right now.&lt;/p&gt;

&lt;p&gt;Apparently the next-gen Xbox (rn it’s called “Project Helix”) is gonna be very similar software-wise to my Ally. Rumors (and Microsoft?) say it’ll have the same UI and third-party marketplaces which could be incredible for a home console. Having Steam alone would be nuts since you could play the God of War or Spiderman games on an Xbox! This is all contingent on the polish being good enough for your average console gamer. I’m 50/50 if Microsoft can pull this off in time. That company’s ability to screw things up is almost unrivaled…&lt;/p&gt;

&lt;p&gt;Hopefully the next time I see you in person you’ll be able to try it out and evaluate it for yourself. I’ll be sure to bring it along to our next meeting!&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="gaming" />
		
			<category term="hardware" />
		
		<summary type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">My Guide for Fountain Pen Beginners</title>
		<link href="https://www.julianlopez.net/posts/2025/01/fountain-pen-beginers-guide" rel="alternate" type="text/html" title="My Guide for Fountain Pen Beginners" />
		<published>2025-01-10T00:00:00Z</published>
		<updated>2025-01-10T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2025/01/fountain-pen-beginers-guide</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2025/01/fountain-pen-beginers-guide">
			
			
			
			
			
			&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Dear (Person I Am Introducing Fountain Pens To),&lt;/p&gt;

&lt;p&gt;You asked me for some fountain pen recommendations in your letter to me, but I’m going to discuss slightly more than just pens here. It’s hard to explain, but there’s a whole world out there of stationary products that you can mix and match until you achieve a perfect fit for you. It’s like those Arch Linux users who spend countless hours making their perfect desktop environment (often with i3).&lt;/p&gt;

&lt;p&gt;With this in mind, I’m going to split this into several sections. I’ll try to keep it beginner friendly and short though!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; So that was a lie. As you can tell by the length of this blog post I went a bit crazy and failed to keep this guide at a reasonable word count. That said, I do feel that it is useful for people starting out in this hobby and covers a bunch of useful information. I highly recommend not attempting to read this in one sitting but instead using the above table of contents to skip around to sections you find interesting.&lt;/p&gt;

&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;

&lt;h3 id=&quot;jetpens-youtubeemail&quot;&gt;JetPens YouTube/Email&lt;/h3&gt;

&lt;p&gt;JetPens is an online store that specializes in Japanese stationary. Their website is fun to browse, but their &lt;a href=&quot;https://www.youtube.com/@JetPens&quot;&gt;YouTube channel&lt;/a&gt; is a treasure trove of helpful info and interesting products that they sell. I really like their style which appeals more to a younger generation than the dreary stuffiness associated with FP’s. However, if you prefer email I highly recommend subscribing to their &lt;a href=&quot;https://www.jetpens.com/Newsletter/subscribe&quot;&gt;email newsletter&lt;/a&gt;. It’s a great way of keeping abreast of new products and innovations within the stationary world.&lt;/p&gt;

&lt;h3 id=&quot;fediversemastodon&quot;&gt;Fediverse/Mastodon&lt;/h3&gt;

&lt;p&gt;I can’t comment on other social media sites, but the fountain pen community on the Fediverse is super helpful. It’s small but super active. If you’re a n00b asking for help, you’ll get a bunch of replies from people eager to help.&lt;/p&gt;

&lt;p&gt;Here’s how you can get involved:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Create an account on a Mastodon server. I recommend &lt;a href=&quot;https://penfount.social/explore&quot;&gt;penfount.social&lt;/a&gt;, a Mastodon instance dedicated to fountain pens and stationary. It’s a great place to ask questions and share your experiences with fountain pens.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Follow &lt;a href=&quot;https://penfount.social/@penfount&quot;&gt;@penfount@penfount.social&lt;/a&gt;. It’s an automated account which boosts/retweets all posts tagged with “#fountainpen” by followers of it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Your timeline will now be filled with fountain pen posts! If you ever want to ask a question, don’t forget to tag it with “#fountainpen”.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;me&quot;&gt;Me!&lt;/h3&gt;

&lt;p&gt;I’m more than willing to help you out if you have any questions or concerns regarding fountain pens or stationery no matter how small they may be! You can email me at &lt;a href=&quot;mailto:admin@julianlopez.net&quot;&gt;admin@julianlopez.net&lt;/a&gt; or send me a letter to my mailbox at:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Julian Lopez
232 E 2nd St Unit A
PMB #8170
Los Angeles, CA 90012
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;where-to-buy-stuff&quot;&gt;Where To Buy Stuff&lt;/h2&gt;

&lt;h3 id=&quot;kinokuniya&quot;&gt;&lt;a href=&quot;https://united-states.kinokuniya.com/&quot;&gt;Kinokuniya&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Kinokuniya is a Japanese bookstore chain that sources a large chunk of its inventory from Japan directly. This means that certain items available for purchase there can’t be bought at any other US stores physically or online. (e.g. the Pilot Lightive) Their selection varies often by location but they all stock roughly the same basics. Here in LA you have one at the Santa Anita mall over by Arcadia (which kinda sucks for buying pens since they’re all behind the register) and another in Little Tokyo by DTLA (there’s a separate counter for pens/inks which is great but it’s often crowded on weekends). Over in NYC there’s a location over by Bryant Park. I can’t comment on the product selection there but the mini-cafe overlooking the park is really nice!&lt;/p&gt;

&lt;h3 id=&quot;jetpens&quot;&gt;&lt;a href=&quot;https://www.jetpens.com&quot;&gt;JetPens&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;I mentioned this site earlier so I’ll keep this short. They originally specialized in Japanese stationary but now carry stuff from all over as well. Their regular non-sale prices are pretty good and they offer free shipping if you spend a minimum of $35.&lt;/p&gt;

&lt;h3 id=&quot;local-bookstoresshops&quot;&gt;Local Bookstores/Shops&lt;/h3&gt;

&lt;p&gt;Your mileage will vary but I’ve had good experiences at local stores. Here in LA I can recommend &lt;a href=&quot;https://vromansbookstore.com/&quot;&gt;Vroman’s&lt;/a&gt; (the largest independent bookstore in SoCal) and &lt;a href=&quot;https://www.flaxpentopaper.com/&quot;&gt;Flax Pen to Paper&lt;/a&gt; (located close to UCLA), which I haven’t visited yet but have heard good things about from my pen friend. What’s great about these places is that you can really take your time browsing their selection and ask the staff questions (who are typically really nice).&lt;/p&gt;

&lt;h2 id=&quot;what-paper-to-get&quot;&gt;What Paper to Get&lt;/h2&gt;

&lt;p&gt;Before getting into the pen stuff, I want to first discuss the paper you’ll be using. Typical paper doesn’t cut it for fountain pens. They’ll bleed through and are rough to write on in addition to containing acid which does not react well with certain fountain pen inks. Thankfully there are a bunch of options out there with a variety of attributes to match what you need!&lt;/p&gt;

&lt;h3 id=&quot;kokuyo-campus&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/Kokuyo-Campus-Notebooks/ct/2980&quot;&gt;Kokuyo Campus&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Out of all of the options listed here, this is by far the most popular and cheapest option. Kokuyo’s Campus line up is one of if not the most prevalent notebooks in Japan. Surprisingly they work pretty well with fountain pens and are acid free. They come in a wide variety of colors, features, and sizes. My personal favorite notebook is their &lt;a href=&quot;https://www.jetpens.com/Kokuyo-Campus-Soft-Ring-Notebooks/ct/6172&quot;&gt;soft ring variant&lt;/a&gt; which doesn’t hurt your wrist while writing. They also sell &lt;a href=&quot;https://www.jetpens.com/Kokuyo-Campus-Loose-Leaf-Paper-Sarasara-B5-Dotted-6-mm-Rule-26-Holes-100-Sheets/pd/5609&quot;&gt;loose leaf sheets&lt;/a&gt; which can be used in a &lt;a href=&quot;https://www.jetpens.com/Kokuyo-Campus-Slide-Binder-Middle-B5-26-Rings-Light-Blue/pd/5605&quot;&gt;binder&lt;/a&gt; or a &lt;a href=&quot;https://www.jetpens.com/Kokuyo-Campus-Smart-Ring-Binder-Notebook-B5-26-Rings-Light-Blue/pd/10752&quot;&gt;binder notebook&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;clairefontaine&quot;&gt;&lt;a href=&quot;https://goldspot.com/collections/clairefontaine&quot;&gt;Clairefontaine&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Clairefontaine is a French paper company whose loose leaf sheets I love using. (This is written on them!) The lines within the squares are perfect for correcting my handwriting. That said, it’s next to impossible to purchase their &lt;a href=&quot;https://www.gentlemanstationer.com/curated-paper/clairefontaine-french-ruled-looseleaf-sheets&quot;&gt;A4 loose leaf sheets&lt;/a&gt; here in the US which I absolutely love using for writing long documents. Thankfully, it’s a lot easier to buy their notebooks which also have the same style of lines/squares. They also sell a nice &lt;a href=&quot;https://www.jetpens.com/Clairefontaine-Triomphe-Notepad-A5-Blank-50-Sheets/pd/14351&quot;&gt;A5 notepad&lt;/a&gt;, perfect for letters.&lt;/p&gt;

&lt;h3 id=&quot;rhodia&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/rhodia&quot;&gt;Rhodia&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Owned by Clairefontaine, their &lt;a href=&quot;https://www.jetpens.com/Rhodia-Classic-Notepads/ct/764&quot;&gt;perforated notepads&lt;/a&gt; and &lt;a href=&quot;https://www.jetpens.com/Rhodia-Pocket-Size-Notebook-A7-Graph-Orange/pd/8535&quot;&gt;pocket notebooks&lt;/a&gt; are a personal favorite of mine. I’d say that it’s a heavy-duty paper which I’ve felt more than comfortable hauling around with me. I once went “swimming” in a flooded tunnel within Central Park and had an iPhone 12 along with a Rhodia pocket notebooks in my pocket. My iPhone had battery issues afterwards and I had to get it replaced while the notebook had nearly no discernible damage/issues.&lt;/p&gt;

&lt;h3 id=&quot;tomoe-river&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/search?f=d73902a34caaf36bced3cd7016823981&amp;amp;sa=popularity&quot;&gt;Tomoe River&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Arguably one of the most unique papers out there, these sheets are lighter and thinner than anything else out there (except for airmail paper) thanks to a special coating that hardly exhibits any bleed-through. Plus, they’re great for highlighting inks that sheen. That said, they’re only really suitable for use with fountain pens and I wouldn’t feel comfortable using a pencil with this paper.&lt;/p&gt;

&lt;p&gt;There’s a whole bunch of controversy surrounding the recent change in manufacturer of it which I won’t get into here. I’ve mainly written with the old stuff but plan to try out the &lt;a href=&quot;https://www.jetpens.com/Yamamoto-Writing-Pad-Tomoe-River-S-Paper-A5/pd/35300&quot;&gt;new Tomoe River S&lt;/a&gt; (“S” for Sanzen) soon. I’ve heard that it’s noticeably different from the old stuff with different properties but still good.&lt;/p&gt;

&lt;h3 id=&quot;midori-md&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/MD-Series/ct/4317&quot;&gt;Midori MD&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;A cream-colored cotton paper mainly sold in Diary/Jounral form. The texture is smooth yet still different from other papers. I’ve also noticed it works well for highlighting the sheen of certain inks. They sell &lt;a href=&quot;https://www.jetpens.com/Midori-MD-Pads/ct/6240&quot;&gt;paper pads in A4/A5 size&lt;/a&gt; in addition to a &lt;a href=&quot;https://www.jetpens.com/Midori-MD-Letter-Pad-50-Sheets/pd/19865&quot;&gt;lined letter pad&lt;/a&gt; meant for use with their &lt;a href=&quot;https://www.jetpens.com/Midori-MD-Envelopes-Pack-of-8/pd/19867&quot;&gt;envelopes&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;maruman-mnemosyne&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/Maruman-Mnemosyne-Notebooks/ct/765&quot;&gt;Maruman Mnemosyne&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Out of all of the different types of paper I’ve used, this stuff is by far the smoothest. It’s hard to describe just with words, but once you feel it you can understand just how premium it is. That said, I believe it’s the priciest out of all of these paper options. Thankfully, it makes up for that with a large variety of notepads/notebooks in a bunch of different sizes and line types. Personally, I love and highly recommend their &lt;a href=&quot;https://www.jetpens.com/Maruman-Mnemosyne-N105-Notebook-A5-Dot-Grid/pd/27112&quot;&gt;dot grid paper&lt;/a&gt; which I use for my personal journal.&lt;/p&gt;

&lt;h2 id=&quot;inks-explainer&quot;&gt;Inks Explainer&lt;/h2&gt;

&lt;p&gt;A critical component of fountain pens are the inks you fill them with. Some people are content with buying the default blue ink sold by their pen manufacturer but I strongly feel that they are missing out. Not only does fountain pen ink come in an unimaginable variety of colors but also in a wide variety of sheens, shading, and shimmer effects!&lt;/p&gt;

&lt;h3 id=&quot;shading&quot;&gt;Shading&lt;/h3&gt;

&lt;p&gt;Shading is when an ink looks darker in some areas and lighter in others. When I first started writing with an ink that shaded I got super frustrated because of the uneven coloring. I thought there was something wrong with either my pen or my handwriting. Nowadays though, I appreciate it as it adds a bit of variation to my ink instead of just a single color.&lt;/p&gt;

&lt;h3 id=&quot;sheening&quot;&gt;Sheening&lt;/h3&gt;

&lt;p&gt;When you hold up inks that sheen to a light at a certain angle, a metallic coating (often of a different color from the ink itself) can appear. It’s a great effect but with some downsides. In order to have an ink’s sheen visible it is best to write on high quality paper made for fountain pens. Additionally, these inks often take a long time to dry, and even after they dry they tend to be easy to rub off. Thus I wouldn’t recommend them for letters/mail, but can work for personal notes.&lt;/p&gt;

&lt;h3 id=&quot;shimmer&quot;&gt;Shimmer&lt;/h3&gt;

&lt;p&gt;Inks that shimmer have small glitter particles mixed in with the rest of the ink. These glitter particles are much smaller than their traditional counterparts so you might need to look closely to see them properly. The main concern with using them is that you might clog your nib feed. Thus, it is highly recommended to only use them with medium/broad/stub nibs.&lt;/p&gt;

&lt;p&gt;Additionally, you can add a shimmer effect to standard ink by mixing in a glitter potion. Being able to control the ratio of ink to glitter is great since you can enhance the glitter effect further by adding more glitter particles. Just don’t clog up your feed by adding to much glitter (as I once did).&lt;/p&gt;

&lt;h2 id=&quot;inks-i-recommend&quot;&gt;Inks I Recommend&lt;/h2&gt;

&lt;h3 id=&quot;diamine-oxblood&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/Diamine-Oxblood-Ink-80-ml-Bottle/pd/7767&quot;&gt;Diamine Oxblood&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Diamine is a company that sells nearly every possible hue of the color red in ink form. Personally, my favorite is Oxblood. It is fairly vibrant yet with a deepness that I prefer to have. Don’t limit yourself to just this shade of red though! I highly recommend browsing Diamine’s catalogue to find the perfect fit for you.&lt;/p&gt;

&lt;h3 id=&quot;kaweco-midnight-blue&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/Kaweco-Midnight-Blue-Ink-6-Cartridges/pd/5817&quot;&gt;Kaweco Midnight Blue&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;At the time I bought this more out of necessity as I needed a cartridge for a pen that accepts international cartridges  and wouldn’t fit a converter . Thus, while at Kinokuniya I grabbed whatever wasn’t a plain black/blue out of what they had available. I don’t like the standard Azure blue used in most pens but do prefer darker tones of it. This ink surprised me though as I wouldn’t really call it blue as it’s far too dark. Midnight is perfect for it though as it captures the night sky over an urban area which you can’t quite call black yet has just enough vibrancy to not be grey.&lt;/p&gt;

&lt;h3 id=&quot;sailor-shikiori-komakusa&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/Sailor-Shikiori-Komakusa-Ink-Green-Sansui-20-ml-Bottle/pd/43861&quot;&gt;Sailor Shikiori Komakusa&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;A while back I experimented with a light jade green ink and I hated it. In response, I got this earthy ink that I love! It’s dark enough to be easily legible yet has some nice shading which results in a light grassy hue or a darker green that reminds me of the foliage of a dense forest.&lt;/p&gt;

&lt;h3 id=&quot;wearingeul-emerald-castle&quot;&gt;&lt;a href=&quot;https://goldspot.com/products/wearingeul-literature-ink-glitter-potion-in-emerald-castle-30ml&quot;&gt;Wearingeul Emerald Castle&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;This isn’t actually ink but a glitter potion meant to be mixed in with ink. This potion is part of Wearingeul’s Wizard of Oz set and is appropriately named after the castle of the titular wizard. While in its bottle it has a milky white complexion but once you’ve mixed it with some ink and spread it on paper, the glitter really does take on an emerald look. I like to mix it with the previously mentioned Komakusa ink and use it with a broad-nibbed pen. This combination worked great for me but your mileage shall vary with other inks.&lt;/p&gt;

&lt;h3 id=&quot;lamy-dark-lilac-2024-edition&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/LAMY-Dark-Lilac-Ink-2024-Ver.-50-ml-Bottle/pd/16462&quot;&gt;LAMY Dark Lilac (2024 Edition)&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;This pen had quite a controversy upon its release (there was even a &lt;a href=&quot;https://www.nytimes.com/2024/03/01/style/lamy-dark-lilac-ink.html&quot;&gt;NYT article&lt;/a&gt; about it!) since it’s a slightly different formulation of an ink previously released with the same name. That aside, I like it for what it is. A purple ink with a gold sheen. When writing with it, it was cool to hold it up to the light and see its gold glint. However, I dislike the long drying time it has which would be easy to deal with if it weren’t for how easily it can be rubbed off even when dry.&lt;/p&gt;

&lt;h3 id=&quot;platinum-carbon-black&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/Platinum-Carbon-Black-Ink-60-ml-Bottle/pd/3461&quot;&gt;Platinum Carbon Black&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Black. That’s what this ink is. A pure no-frills and consistent black ink. What drew me to it was its durability. Unlike most other inks which are dye-based, this one relies on carbon pigment which allows it to be waterproof and more durable than others. This is perfect for my letters as I’ve had my girlfriend open a lovingly crafted letter only to face a colorful mess. Something to notes is that due to its pigment base you’ll have to clean out any pen using it somewhat regularly. I also advise using it with a pen that has a good seal. (TWSBI and Platinum pens typically have good seals.)&lt;/p&gt;

&lt;h2 id=&quot;fountain-pen-explainer&quot;&gt;Fountain Pen Explainer&lt;/h2&gt;

&lt;p&gt;Before diving straight into which fountain pens I recommend I first wish to break down important things to be aware with them. Fountain pens come in all kinds of shapes/features/attributes and it’s a fact that a pen that may be highly praised by others may not be a match for you.&lt;/p&gt;

&lt;h3 id=&quot;price-doesnt-equal-quality&quot;&gt;Price Doesn’t Equal Quality&lt;/h3&gt;

&lt;p&gt;Often you might come across some fancy ultra-luxury pen that costs hundreds, if not thousands, of dollars and think that writing with it guarantees a perfect writing experience. This is for sure not the case. For instance, there are certain companies that rely on their past and brand recognition to sell their products (Parker is such a company in my opinion) instead of focusing on quality manufacturing and features. Additionally, there are plenty of pens with bodies made of pricy/exotic materials designed to jack up prices but have a middling writing experience. Personally, these types of pens don’t appeal to me as what I really care about is the feel of the nib and how well I can write with it for extended periods of time.&lt;/p&gt;

&lt;h3 id=&quot;western-vs-asian-nib-sizes&quot;&gt;Western vs Asian Nib Sizes&lt;/h3&gt;

&lt;p&gt;The basic nib sizes offered by most manufacturers are Fine/Medium/Bold. However, the exact sizes vary between each manufacturer, but even more so between Western and Asian nibs. On average, an Asian medium is equivalent to a Western fine nib. This is something I am sensitive to as I prefer finer nibs for my writing and have found Western medium (sometimes fine as well) nibs not to my liking.&lt;/p&gt;

&lt;h3 id=&quot;its-important-to-cap-your-pens&quot;&gt;It’s Important To Cap Your Pens&lt;/h3&gt;

&lt;p&gt;With ballpoint pens, you can leave a pen uncapped for a while, roll it a bit, and it’ll be good. Not so with fountain pens. If you leave one uncapped and unattended for a while, its nib will eventually dry out and you might need to dip it briefly in water to allow ink to freely flow again. Thus, it is important to keep&lt;/p&gt;

&lt;p&gt;It’s also worth noting that even when left unused for an extended period of time a pen’s nib will dry out even if capped. To avoid this, be sure to use your pens every once in a while to keep them flowing!&lt;/p&gt;

&lt;h3 id=&quot;different-pens-fill-different-ways&quot;&gt;Different Pens Fill Different Ways&lt;/h3&gt;

&lt;p&gt;Unfortunately, there is no universal way to fill up a fountain pen with ink. You will have to check on a per pen basis what the filling method is, which I admit can seem daunting. Thankfully, there are three filling methods that most pens use.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Piston Fillers&lt;/strong&gt;: To fill these pens you simply submerge their nibs into a bottle of ink and turn a knob that draws ink into an inner reservoir. Out of the three methods outlined here, it allows for the highest capacity option with the downside of increased complexity and difficulty of maintenance.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Cartridges&lt;/strong&gt;: It’s what it sounds like. Ink cartridges that when they run low you can easily swap. They are by far the most convenient option, but you’ll be sacrificing variety for that. There’s far more of a selection in bottled form than can be found in cartridges. Additionally, there is no universal standard for cartridge size/fit. As such, it’s common (especially with Japanese pens) for a pen to only accept cartridges from its manufacturer.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Cartridge Converter&lt;/strong&gt;: A cartridge converter is a small device that fits in the cartridge slot and has a mechanism to draw ink from a bottle. 
After you install it you’ll have to dip the nib of the pen into an ink bottle and use its mechanism to draw ink inside. The downside of this method is that you’ll have to clean out the pen more often than with a piston filler. Additionally, there are many different types of converters that are not universal (same as with cartrages). For instance, a LAMY converter will not work with a Pilot pen. Just make sure when buying a converter that it’ll fit in the pen you intend to use it with!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;fountain-pens-that-i-recommend-for-beginners&quot;&gt;Fountain Pens That I Recommend (For Beginners)&lt;/h2&gt;

&lt;h3 id=&quot;platinum-preppy&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/Platinum-Preppy-Fountain-Pens/ct/5111&quot;&gt;Platinum Preppy&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;In my eyes, this is the perfect beginner’s pen. (I might be biased as this was one of my first pens though.) It writes well for its price range, costs less than $10, and comes in a variety of colors and some special &lt;a href=&quot;https://www.jetpens.com/Platinum-Preppy-Wa-Modern-Maki-e-Fountain-Pen-Yanagi-ni-Koumori-Fine-Limited-Edition/pd/40875&quot;&gt;Japanese-themed editions&lt;/a&gt;. Not to mention its special air-tight cap &lt;a href=&quot;https://www.youtube.com/watch?v=CqvBn9OxnnY&quot;&gt;which can keep the ink on a nib wet for over a year!&lt;/a&gt; The only issue I have with it is that if you want to use bottled ink with it you have to buy a &lt;a href=&quot;https://www.jetpens.com/Platinum-Fountain-Pen-Converter-Silver/pd/31445&quot;&gt;Platinum converter&lt;/a&gt; which costs more than the pen itself! I must admit that it’s an easy converter to disassemble which is great for cleaning out problematic inks.&lt;/p&gt;

&lt;h3 id=&quot;pilot-kakuno&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/Pilot-Kakuno-Fountain-Pen-Madoromi-Series-Madoromi-Blue-Medium/pd/43238&quot;&gt;Pilot Kakuno&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;A pen explicitly meant to be its owner’s first pen, the Kakuno isn’t dumbed down in any way. It’s a great pen that writes well and is easy to use. Its standout feature is a cute smiley face on its nib meant to help its users write better. The idea being that if you’re gripping your pen properly if you can see the cute smiley face! This in conjunction with the transparent design with a variety of pastel accent colors, a cap that does its job of sealing well, and enough room for a full-size CON-70 converter make this pen hard to beat at its low price point. The only negative thing I have to say about it is that I really would have preferred if it had a clip, but that’s not a deal breaker.&lt;/p&gt;

&lt;h3 id=&quot;kaweco-sport&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/Kaweco-Sport-Fountain-Pens/ct/3402&quot;&gt;Kaweco Sport&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Extremely pocketable and available in a wide variety of colors and materials, the long-lived Kaweco Sport (first released in 1911) is likely the most popular and recognizable pocket pen out there. It’s a great pen that when capped is&lt;/p&gt;

&lt;p&gt;However, it’s not for everyone. I was gifted a brass version of this pen, and while I liked the writing feel and nib I found it to be to heavy and unbalanced during long writing sessions. (A brass pen I much prefer to write with is the &lt;a href=&quot;https://www.jetpens.com/TRAVELER-S-COMPANY-BRASS-FOUNTAIN-PEN-Fine/pd/29200&quot;&gt;Traveler’s Pen&lt;/a&gt;) That said, there is a massive variety of plastic versions out there that have been tempting me for a while. (Especually the new &lt;a href=&quot;https://www.jetpens.com/Kaweco-Classic-Sport-Piston-Filler-Fountain-Pen-Black-Fine/pd/45154&quot;&gt;piston filler&lt;/a&gt;.)&lt;/p&gt;

&lt;h3 id=&quot;lamy-safari&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/LAMY-Safari-Fountain-Pens/ct/1185&quot;&gt;LAMY Safari&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;A no-nonsense design that has been manufactured since 1980 and had only small design revisions, the LAMY Safari is one of the most ubiquitous pens out there. (It’s also the pen I’m writing this guide with.) Its design is plain at first glance, but after writing with it for a bit, it’s evident that every small aspect of it was well thought out. From the simple yet effective grip, to the small but useful ink window, and the plain yet &lt;a href=&quot;https://www.jetpens.com/LAMY-Fountain-Pen-Nib-Stainless-Steel-Finish-Fine/pd/3631&quot;&gt;easily swappable nibs&lt;/a&gt;. What this pen lacks in a flashy design it more than makes up for it in functionality. That said, I’ve written with several of these pens and have found their nibs to be scratchy.&lt;/p&gt;

&lt;p&gt;Still, its standout feature is the wide variety of colors it comes in. Every year LAMY releases a &lt;a href=&quot;https://www.jetpens.com/LAMY-Safari-Fountain-Pen-Violet-Blackberry-Fine-Special-Edition/pd/41289&quot;&gt;new special edition&lt;/a&gt; along with &lt;a href=&quot;https://www.jetpens.com/LAMY-Violet-Blackberry-Ink-50-ml-Bottle-Special-Edition/pd/41297&quot;&gt;a matching ink&lt;/a&gt; which is a fun way to collect them. I once even met a guy at a pen meet up who brought over 30 of them!&lt;/p&gt;

&lt;h3 id=&quot;twsbi-eco&quot;&gt;&lt;a href=&quot;https://www.jetpens.com/TWSBI-ECO-Fountain-Pens/ct/2864&quot;&gt;TWSBI ECO&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;If the LAMY Safari is meant to be subtle and inconspicuous, the TWSBI ECO is brash and expressive! With its transparent design clearly showing off your choice of ink and the internals of its piston mechanism, it’s a great conversation starter. That said, it’s more than just a flashy pen. TWSBI pens have some of the best seals I’ve had the pleasure of using in addition to their nibs being fun to write with. Additionally, there are a wide variety of different color schemes and &lt;a href=&quot;https://www.jetpens.com/TWSBI-ECO-Indigo-Blue-Bronze-Fountain-Pen-Fine-Limited-Edition/pd/39702&quot;&gt;limited editions&lt;/a&gt; making them fun to collect. (They even sell some that &lt;a href=&quot;https://www.jetpens.com/TWSBI-ECO-Glow-Green-Fountain-Pen-Fine-Limited-Edition/pd/35690&quot;&gt;glow in the dark&lt;/a&gt;!) That said, there are many reports online of cracking issues with the clear plastic TWISBI uses. I’ve had mine for a while and haven’t had any issues with it, but it’s something to be aware of. Even so, you’ll be hard-pressed to find a piston filling pen better than it at this price point!&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Initially, I intended this guide to just be a list of fountain pens I recommend along with some brief notes on things to be aware of. Nine sheets of A4 paper later and it’s clear that I slightly spiralled out of control while typing this. This was mainly due to my passion for this topic but also because of its depth. There is a countless number of fountain pens out there that can be paired up with more inks that span nearly every aspect of the color spectrum and can be used on paper of different sizes and attributes. The combinations are nearly infinite! As such, there is no one-size-fits-all solution for everyone. The best I can do is to give an overview of this world and allow you to explore whatever seems interesting to you. Good luck and happy writing!&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="fountain-pens" />
		
			<category term="notebooks" />
		
			<category term="writing" />
		
		<summary type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Thoughts On Autocrop Python Library</title>
		<link href="https://www.julianlopez.net/posts/2024/06/thoughts-on-autocrop-python-library" rel="alternate" type="text/html" title="Thoughts On Autocrop Python Library" />
		<published>2024-06-14T00:00:00Z</published>
		<updated>2024-06-14T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2024/06/thoughts-on-autocrop-python-library</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2024/06/thoughts-on-autocrop-python-library">
			
			
			
			
			
			&lt;p&gt;&lt;a href=&quot;https://github.com/leblancfg/autocrop&quot;&gt;Autocrop&lt;/a&gt; is a python library that automatically crops faces in images. this is exactly what I want for profile photos, since I want there to be consistency among all the photos uploaded and publicly displayed. Performing this locally in the container is more than doable, however I am slightly concerned about the performance impact this could have. On my MacBook it is nearly instantaneous, but I suspect on production hardware it will take more than five seconds. During these five seconds all other functions and customers using can experience extreme performance degradation.  When a new group of customers joins this service and uploads a bunch of photos all at once, this could cause serious issues. Thus, running it on separate hardware is best.&lt;/p&gt;

&lt;p&gt;That said, I have noticed some issues with the quality of facial detection. Hats and glasses seem to be an issue, and only faces in profile work. Still, given the context of “professional” photos that are expected to be uploaded this shouldn’t be a problem. If anything, I can sell this as a feature that check for professional photos. From almost day one, implementing a solution like this has been an objective of mine. However, if the facial recognition becomes too poor/problematic, I can just switch this function to just perform a crop on the center and covert the result to WEBP.&lt;/p&gt;

&lt;p&gt;The biggest issue I ran into was the lack of support Autocrop has for HEIF/HEIC. These file formats are what Apple devices natively use to store photos in. Converting these files to a PNG format is complicated by the fact that you can not write files directly to the filesystem on an Azure Function (you can write to Tempfiles tho). I decided to stop working on converting these images since it was too time consuming and I’m 70% certain that iPhones upload/share images as a JPEG.&lt;/p&gt;

&lt;p&gt;Additionally, the last release/commit for this library was 2 years ago. For now it seems to be working perfectly fine with the latest version of Python (not so for pyScss, another library I’m using but have issues with) so I feel confident using it for the foreseeable future. In the event something happens though, it should be easy-ish to switch to a similar facial recognition library.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="python" />
		
		<summary type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/leblancfg/autocrop&quot;&gt;Autocrop&lt;/a&gt; is a python library that automatically crops faces in images. this is exactly what I want for profile photos, since I want there to be consistency among all the photos uploaded and publicly displayed. Performing this locally in the container is more than doable, however I am slightly concerned about the performance impact this could have. On my MacBook it is nearly instantaneous, but I suspect on production hardware it will take more than five seconds. During these five seconds all other functions and customers using can experience extreme performance degradation.  When a new group of customers joins this service and uploads a bunch of photos all at once, this could cause serious issues. Thus, running it on separate hardware is best.&lt;/p&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">An Update on My Blog</title>
		<link href="https://www.julianlopez.net/posts/2024/06/an-update-on-my-blog" rel="alternate" type="text/html" title="An Update on My Blog" />
		<published>2024-06-12T00:00:00Z</published>
		<updated>2024-06-12T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2024/06/an-update-on-my-blog</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2024/06/an-update-on-my-blog">
			
			
			
			
			
			&lt;p&gt;It’s been a hot minute since I last posted here! In fact, as of me writing/uploading this, it has been exactly 5 months since my last blog post. On the personal side things have changed a bunch…&lt;/p&gt;

&lt;p&gt;For one, I have a girlfriend!
It’s been great being with her, but she’s also a huge inspiration and drive for my life now.
Certain things that I have made for her have blossomed into creating opportunities for me I never could have imagined.
Today she even helped me out a bunch with an issue I was super panicking over for my upcoming summer job!
I can safely say that I wouldn’t be where I am today without her.&lt;/p&gt;

&lt;p&gt;Also, I’ve moved up the ranks in my council (I think)! I’m no longer a warden and have moved on to being a chancellor. I was just appointed this Tuesday and I’ll start next month. My duties include “recruiting and retaining members” and setting up events “that display the values and principles of the Knights of Columbus”. Hopefully I can do a lot of good for my brother knights.&lt;/p&gt;

&lt;p&gt;Anyhow, the main reason I haven’t been posting to this site is because I’ve been busy working on a product/service that has consumed all of my spare time.
I’m not willing to discuss it right now, but it’s super awesome and fulfilling to work on.
For it, I’ve been writing semi-weekly PDF reports for my “boss”.
He doesn’t really read them, but I’ve been dumping my passion for writing into them.
I’ve been writing on a variety of technical topics and I kinda feel it would be a waste for them to not be read.
As such, I’ll be posting censored excerpts of these reports on my blog starting with my thoughts on a particular Python facial recognition library.&lt;/p&gt;

&lt;p&gt;I hope you all enjoy the stuff I write!&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="life-stuff" />
		
		<summary type="html">&lt;p&gt;It’s been a hot minute since I last posted here! In fact, as of me writing/uploading this, it has been exactly 5 months since my last blog post. On the personal side things have changed a bunch…&lt;/p&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Optimizing Variable Fonts For Web</title>
		<link href="https://www.julianlopez.net/posts/2024/01/optimizing-variable-fonts-for-web" rel="alternate" type="text/html" title="Optimizing Variable Fonts For Web" />
		<published>2024-01-12T00:00:00Z</published>
		<updated>2024-01-12T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2024/01/optimizing-variable-fonts-for-web</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2024/01/optimizing-variable-fonts-for-web">
			
			
			
			
			
			&lt;h2 id=&quot;why-worry-about-website-size&quot;&gt;Why Worry About Website Size?&lt;/h2&gt;

&lt;p&gt;A while back I added this blog to an online list of websites called the &lt;a href=&quot;https://512kb.club/&quot;&gt;512KB club&lt;/a&gt;. As the name implies, all of the sites on this list when loaded require under 512KB of resources. Within this overall list, sites are separated into various “clubs” based on what site they manage to stay under:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Green Club  &amp;lt; 100KB
Orange Club &amp;lt; 250KB
Blue Club   &amp;lt; 500KB
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Reaching the Blue Club is super easy as long as you’re not using a website builder. In my personal experience, Wix websites load a minimum of 2MB+ which is made worse by the fact that they don’t automatically compress/convert images to web optimized formats.&lt;/p&gt;

&lt;p&gt;The orange club is slightly harder to get into since it requires you to limit the amount of images and JavaScript libraries you use with your site. I’d argue that limiting the amount of images is a good thing since it allows for a bigger focus on the actual content you’re trying to convey.&lt;/p&gt;

&lt;p&gt;However, it is exceptionally tough to make a site within the Green Club’s requirements. Even the 512KB Club’s own site is not in this club due to the sheer amount of HTML it has from listing all the members. Having your site look good by modern standards and maintain a size beneath this threshold is an achievement that worth commending.&lt;/p&gt;

&lt;p&gt;While this might seem like a list for just something kinda dumb, I’d argue it encourages something in dire need nowadays. In the year 2024 the web is increasingly mobile driven and unlike with a desktop at home/work, you can’t guarantee the strength and speed of your connection to the internet. If you have an internet based business it is critical that your connection to your consumers is as resistant to poor networks as possible or else you might lose out on valuable profits. Additionally, by lowering the amount of time spent by devices transferring and receiving data some amount of energy is saved helping contribute towards reducing climate change. At an individual level this is a tiny amount of energy, but at the level of billions upon billions of requests made online per year this adds up significantly.&lt;/p&gt;

&lt;p&gt;As such, I was beyond proud when I added my site to this club and had it join the Green Club despite having a look and feel like no other site I had encountered. However that soon changed…&lt;/p&gt;

&lt;h2 id=&quot;the-lure-of-variable-fonts&quot;&gt;The Lure of Variable Fonts&lt;/h2&gt;

&lt;p&gt;It was sometime in November/December 2023 when I had decided to change the fonts I used on my site. I didn’t think its previous look was bad, but it just wasn’t distinctive enough for what I wanted.&lt;/p&gt;

&lt;p&gt;While searching for replacements I had read about about variable fonts, but I hadn’t understood their appeal. That was the case until I read an article on &lt;a href=&quot;https://www.digitalocean.com/community/tutorials/css-variable-fonts&quot;&gt;how to use them with basic CSS&lt;/a&gt; that had some great CodePen examples, then it clicked for me.&lt;/p&gt;

&lt;p&gt;Immediately I searched through &lt;a href=&quot;https://fonts.google.com/?vfonly=true&quot;&gt;Google Font’s selection of variable fonts&lt;/a&gt; and settled upon &lt;a href=&quot;https://fonts.google.com/specimen/Red+Hat+Display?query=red+hat+&amp;amp;vfonly=true&quot;&gt;Red Hat Display&lt;/a&gt;. Despite some of my misgivings about the company, it was free/open-source in addition to being simple yet futuristic. Adding it and implementing some of the features shown off in that article to my site made it glimmer to my eyes.&lt;/p&gt;

&lt;p&gt;There was just one problem… Instead of the ~30kb or so my old fonts took up, I was now looking at 200kb! This knocked me clear off the 512KB green team and onto the edge of the blue team.&lt;/p&gt;
&lt;h2 id=&quot;optimizing-a-variable-tff-font&quot;&gt;Optimizing a Variable .tff font&lt;/h2&gt;

&lt;p&gt;Simply put, subsetting a font is removing all the characters you don’t need from it. Professional fonts contain hundreds of characters for various languages, mathematical notations, special symbols, and various other reasons. For a blog such as mine that is written with just standard English words, does not use characters for special features, and has a need for being lightweight, it’s only natural to use subsetting.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2024-01-16-Pasted_image_aai9my4IX?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2024-01-16-Pasted_image_aai9my4IX?tr=w-480&quot; alt=&quot;A screenshot of FontForge displaying various characters within a font.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot of FontForge displaying various characters within a font.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;I can guarantee that I will never most of the characters in this image.&lt;/figcaption&gt;
&lt;/picture&gt;

&lt;p&gt;Initially I tried using &lt;a href=&quot;https://www.grantojanen.com/videos/pg/optimize-fonts.html&quot;&gt;this method to remove characters&lt;/a&gt; I didn’t need, but 
despite successfully using it in the past I couldn’t get it to work with this type of font. It seems that FontForge doesn’t work with variable fonts directly. Instead, (I think) you have to separate the font you’re working with into different files for various thickness and italic styles then combine them later via another method (Python seems to be popular).&lt;/p&gt;

&lt;p&gt;Thankfully I found this &lt;a href=&quot;https://clagnut.com/blog/2418/&quot;&gt;blog post by Richard Rutter&lt;/a&gt; that details exactly what I needed to do with a single Python command.&lt;/p&gt;

&lt;h3 id=&quot;step-1-install-the-dependancies&quot;&gt;Step 1: Install the Dependancies&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pip3 install fonttools brotli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;fontTools is a library for manipulating fonts, that can work with TrueType, OpenType, AFM and to an extent Type 1 and some Mac-specific formats. If I ever wanted to work with fonts more often I have a feeling I’d be using it a bunch.&lt;/p&gt;

&lt;p&gt;Brotli is a lot more interesting to me. It’s a general purpose lossless compression algorithm that uses some fancy stuff I’m pretty sure an actual CS person would recognize. It provides better compression ratios than Gzip and deflate speeds are comparable. However, brotli compressing is slower which isn’t an issue for web stuff (which only focuses on decompression), but I suspect is why it isn’t used often in Linux/server settings (which require both efficient compression / decompression). It was initially developed for the WOFF2 font standard, but was so efficient that it was also adopted into HTTP providing improvements for all web data transfers! It even &lt;a href=&quot;https://www.w3.org/news/2022/w3c-to-receive-emmy-award-for-standardizing-font-technology/&quot;&gt;won an Emmy&lt;/a&gt; somehow!&lt;/p&gt;

&lt;h3 id=&quot;step-2-run-the-command&quot;&gt;Step 2: Run the Command&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pyftsubset FontName.ttf --unicodes=&quot;U+0000-007F&quot; --layout-features=&apos;*&apos; --flavor=&quot;woff2&quot; --output-file=&quot;FontName.woff2&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unicodes&lt;/code&gt; specifies what &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Unicode_block#List_of_blocks&quot;&gt;Unicode blocks&lt;/a&gt; should be included in the file you’re generating. Since I only ever write in English and don’t use wacky characters on my site, I chose to limit myself to only the ”Basic Latin” block (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;U+0020-007&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;layout-features&lt;/code&gt; specifies what OpenType layout features to include. If I’m being honest this is something I don’t know anything about. If subsetting a variable font isn’t enough to reduce your filesize, I would suggest looking into modifying this argument.&lt;/p&gt;

&lt;p&gt;Something I found out the hard way was that this command will throw an &lt;a href=&quot;https://github.com/fonttools/fonttools/issues/2900&quot;&gt;error if you use one dash (-)&lt;/a&gt; versus two dashes (–) for the CLI arguments. Richard Rutter has only one dash in the example on his post, so that’s something to be aware of.&lt;/p&gt;

&lt;h2 id=&quot;check-for-italics&quot;&gt;Check For Italics&lt;/h2&gt;

&lt;p&gt;While testing the results of subsetting a font I accidentally discovered something amazing. Despite only having one variable font file, not only were all the font-weights being rendered correctly but so were italics! This was shocking since in the zip file from Google Fonts there were two separate files, one with and the other supposedly without italics. As it turns out, this particular variable font has support for italics baked into one file (not all support this feature). This singular feature halved the amount of data I had to transfer!&lt;/p&gt;

&lt;h2 id=&quot;the-results&quot;&gt;The Results&lt;/h2&gt;

&lt;p&gt;To be frank, I was flabbergasted when I saw the results of all this. I went from two 95kb files to a single 19.2kb file!!! Logically this makes sense since I’m removing the vast majority of the content within this file. However, when I worked with regular WOFF2 font files in the past, 20KB was roughly the same size as one of those files that were locked to one font thickness and italic type! For the same size, I’m getting wayyyyyy more now. I firmly believe that as many sites as possible should be using variable fonts not just for the features they allow but the savings in bandwidth they can come with.&lt;/p&gt;

&lt;p&gt;If anything I am excited for the future of web fonts. Color fonts seem to be the next big thing (within Google Font’s filter options they’re placed right next to variable fonts) and I’ve seen &lt;a href=&quot;https://nabla.typearture.com/&quot;&gt;some great demos&lt;/a&gt; of them. However, the current variety of them in 2024 is somewhat lacking and &lt;a href=&quot;https://caniuse.com/colr-v1&quot;&gt;Safari still has yet to support them&lt;/a&gt; (I fully expect Apple to take over a year to do so).&lt;/p&gt;

&lt;p&gt;Hopefully the next decade will have plenty of more great stuff in store for fonts on the web!&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="webdev" />
		
		<summary type="html">&lt;h2 id=&quot;why-worry-about-website-size&quot;&gt;Why Worry About Website Size?&lt;/h2&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Stealing From Websites</title>
		<link href="https://www.julianlopez.net/posts/2023/12/stealing-from-websites" rel="alternate" type="text/html" title="Stealing From Websites" />
		<published>2023-12-19T00:00:00Z</published>
		<updated>2023-12-19T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/12/stealing-from-websites</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/12/stealing-from-websites">
			
			
			
			
			
			&lt;p&gt;The term “steal” has a bunch of negative connotations, but I feel that taking HTML/CSS/JS from other’s websites be viewed as a bad thing. Personally, I would feel more than pleased to learn that someone decided to steal code from my site for their own use! However, instead of just copying other’s websites, I’ve decided to showcase where I’ve been sourcing stuff from. That way, people looking to copy my code can compare against its origin.&lt;/p&gt;

&lt;p&gt;In order to better illustrate what I will be talking about, I have included CodePen samples. Feel free to directly copy what I’ve typed up!&lt;/p&gt;

&lt;h2 id=&quot;underlined-linkschris-coyier&quot;&gt;&lt;a href=&quot;https://chriscoyier.net/&quot;&gt;Underlined Links(Chris Coyier)&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Out of all the RSS feeds I read, I probably click on Chris Coyier’s posts the most. He has a great mix of random tech stuff, things going on in his life, and new things in the webdev world. So it only makes sense that his website would have have stuff worth copying from!&lt;/p&gt;

&lt;p&gt;Immediately, when you first visit his website you notice that a bunch of links are underlined with a gold color. That’s neat, but when you hover over them with your cursor the line changes color!&lt;/p&gt;

&lt;p class=&quot;codepen&quot; data-height=&quot;300&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;css,result&quot; data-slug-hash=&quot;eYxqWdb&quot; data-user=&quot;JLO64&quot; style=&quot;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/JLO64/pen/eYxqWdb&quot;&gt;
  Underline Links Hover&lt;/a&gt; by Julian Lopez (&lt;a href=&quot;https://codepen.io/JLO64&quot;&gt;@JLO64&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;This is a small thing, but it adds such a layer of interactivity to websites and I’m surprised it’s not more common.&lt;/p&gt;

&lt;h2 id=&quot;text-glowingrobin-rendle&quot;&gt;&lt;a href=&quot;https://robinrendle.com/&quot;&gt;Text Glowing(Robin Rendle)&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;This site has three themes: Light, Dark, and Communist (seriously lol). Under the Communist theme the title text flickers. My first assumption was that the title text was a gif on loop. However, the text could be highlighted meaning that this wasn’t the case. Instead, there was an animation being applied to that element and all it was doing was changing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;text-shadow&lt;/code&gt; property.&lt;/p&gt;

&lt;p class=&quot;codepen&quot; data-height=&quot;300&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;css,result&quot; data-slug-hash=&quot;KKJOmQG&quot; data-user=&quot;JLO64&quot; style=&quot;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/JLO64/pen/KKJOmQG&quot;&gt;
  Untitled&lt;/a&gt; by Julian Lopez (&lt;a href=&quot;https://codepen.io/JLO64&quot;&gt;@JLO64&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;Unfortunately this effect doesn’t work that well on a white background. Still, I think it’s a neat effect to add to my links.&lt;/p&gt;

&lt;h2 id=&quot;random-posts512kb-club&quot;&gt;&lt;a href=&quot;https://512kb.club/&quot;&gt;Random Posts(512kb Club)&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;So for the longest time I’ve been meaning to add a way to read a random post. Initially I thought I couldn’t add a way to do this on a static site. I had thoughts about using an external service to do this, like having an AWS Lambda function that had an array containing links to all the posts on my site and returning one of them at random. Then I came across the implementation of this site.&lt;/p&gt;

&lt;p class=&quot;codepen&quot; data-height=&quot;300&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;js,result&quot; data-slug-hash=&quot;oNmKVBW&quot; data-user=&quot;JLO64&quot; style=&quot;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/JLO64/pen/oNmKVBW&quot;&gt;
  Random &amp;lt;a&amp;gt; Link&lt;/a&gt; by Julian Lopez (&lt;a href=&quot;https://codepen.io/JLO64&quot;&gt;@JLO64&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;I’m going to be honest. I was kinda pissed off when I saw this solution working with minimal effort and code. I was prepared to go all out and try to use cloud solutions for this. Seeing this work made me feel stupid!&lt;/p&gt;

&lt;h2 id=&quot;email-linkgarrit-franke&quot;&gt;&lt;a href=&quot;https://garrit.xyz/&quot;&gt;Email link(Garrit Franke)&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;At the bottom of all posts on this website I noticed there was a link to “Reply via E-Mail”. Clicking on it created a draft email in my personal inbox on the web. I thought that there would be a bunch of complicated JavaScript behind this, but it was just one line of HTML!&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;mailto:admin@example.net?subject=Re: An Example Subject&quot;&amp;gt;Email Link&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Out of all the things I’ve shown off here, this is the one that is the simplest, yet adds the most functionality to my site. I don’t really like the idea of adding comments to my site since I know that they will be something that is hardly ever used and that I can not control effectively. Besides, I’d have to rely on a third party service &lt;a href=&quot;/posts/2023/12/bringing-my-old-website-back-from-the-dead&quot;&gt;like I did on my old site&lt;/a&gt; which I’d rather not do for my blog. This eliminates those concerns by using a simple tool that we all have.&lt;/p&gt;

&lt;h2 id=&quot;website-iconsyoutube&quot;&gt;Website Icons(YouTube)&lt;/h2&gt;
&lt;p&gt;Typically in the description of their videos YouTubers put links to their social media. To the left of these links, icons representing the sites they point towards have been added. From a user perspective, these are great since they help show where you are being sent to.&lt;/p&gt;

&lt;p class=&quot;codepen&quot; data-height=&quot;300&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;css,result&quot; data-slug-hash=&quot;YzBmgxY&quot; data-user=&quot;JLO64&quot; style=&quot;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/JLO64/pen/YzBmgxY&quot;&gt;
  Untitled&lt;/a&gt; by Julian Lopez (&lt;a href=&quot;https://codepen.io/JLO64&quot;&gt;@JLO64&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;While the method YouTube and I use are different, the results are the same. Before looking into this, I had no clue that you could edit what comes before a link or any element with just CSS. You can even use this to add a mail icon to the email links I highlighted above!&lt;/p&gt;

&lt;p&gt;That said, this is a manual process so not all of the external links on my site have an icon. I’ve thought about automating this but then I would lose control over the exact Favicon and color being used for links.&lt;/p&gt;

&lt;h2 id=&quot;using-this-code-effectively&quot;&gt;Using This Code Effectively&lt;/h2&gt;

&lt;p&gt;Individually, these are all neat effects and tricks but when combined well they result in something worth being proud of. There is no single thing on my site that I can point to and say “this makes my website look good”. It’s the combination of a bunch of little details that makes anything in life look good. As such, I have to thank the people who took the time to make their websites look pretty which made mine better as well.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="webdev" />
		
			<category term="html" />
		
			<category term="css" />
		
			<category term="javascript" />
		
		<summary type="html">&lt;p&gt;The term “steal” has a bunch of negative connotations, but I feel that taking HTML/CSS/JS from other’s websites be viewed as a bad thing. Personally, I would feel more than pleased to learn that someone decided to steal code from my site for their own use! However, instead of just copying other’s websites, I’ve decided to showcase where I’ve been sourcing stuff from. That way, people looking to copy my code can compare against its origin.&lt;/p&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Running a Jekyll Dev Server</title>
		<link href="https://www.julianlopez.net/posts/2023/12/running-a-jekyll-dev-server" rel="alternate" type="text/html" title="Running a Jekyll Dev Server" />
		<published>2023-12-12T00:00:00Z</published>
		<updated>2023-12-12T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/12/Running-a-Jekyll-Dev-Server</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/12/running-a-jekyll-dev-server">
			
			
			
			
			
			&lt;h2 id=&quot;my-plugin-problem&quot;&gt;My Plugin Problem&lt;/h2&gt;

&lt;p&gt;Here’s a quick breakdown of how my writing process for this blog works. I have a server in my bedroom which I remote into within VS Code my laptop or iPad via VS Code. From there I create and edit markdown files within my Jekyll site repository and publish them via Git. (I’m probably going to be changing my workflow significantly soon thanks to &lt;a href=&quot;https://obsidian.md/&quot;&gt;Obsidian&lt;/a&gt;, and I’ll write more in depth then.)&lt;/p&gt;

&lt;p&gt;In order to preview my website I use a VS Code extension called &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Dedsec727.jekyll-run&quot;&gt;Jekyll Run&lt;/a&gt;. All it really does is run the command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bundle exec jekyll serve&lt;/code&gt; within your site directory and serves your site at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;localhost:4000&lt;/code&gt;. Since I run it off my server and because I want to test this preview on my phone, I add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--host=0.0.0.0&lt;/code&gt; to the launch options of this plugin. This way I can just connect to port 4000 of my server’s IP address from my phone’s web browser and access the preview from there.&lt;/p&gt;

&lt;p&gt;The actual preview itself works great, but I’ve been having issues with the plugin not terminating when I disconnect from my server. Thus, when I reconnect and try to launch it again it errors out since the port (4000 in my case) is occupied. There’s a plugin setting that’s meant to fix this, but it does nothing in my case. I suspect that the author of it never tested an SSH use case. I’ve submitted a &lt;a href=&quot;https://github.com/Kanna727/jekyll-run/issues/67&quot;&gt;GitHub Issue&lt;/a&gt;, but I doubt I this will get fixed anytime soon.&lt;/p&gt;

&lt;h2 id=&quot;the-solution&quot;&gt;The Solution&lt;/h2&gt;

&lt;p&gt;Something I’ve thought of recently is just launching the command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bundle exec jekyll serve --host=0.0.0.0&lt;/code&gt; on startup and just leaving it running on my server. It’s a dead simple fix that requires no thought. Besides, now that I’m transitioning my writing to Obsidian for my writing I want to use a plugin called “Permalink Opener” to open a preview of what I’m writing. Switching between Obsidian and VS Code just to activate a plugin wouldn’t the best experience. (It’s got one major issue though that I’m gonna be submitting a PR for soon.)&lt;/p&gt;

&lt;p&gt;I also want to change the port I use to something other than 4000 since I might need that open for other applications. That can be easily done by appending &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-P PORT_NUMBER&lt;/code&gt; with you substituting your port number in of course.&lt;/p&gt;

&lt;p&gt;To run this command on boot I appended the below line to my &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;crontab&lt;/code&gt; file.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;@reboot cd PATH_TO_YOUR_JEKYLL_DIRECTORY &amp;amp;&amp;amp; bundle exec jekyll serve --host=0.0.0.0 -P PORT_NUMBER
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;creating-a-jekyll-subdomain&quot;&gt;Creating A Jekyll Subdomain&lt;/h2&gt;

&lt;p&gt;Now while this is perfectly workable so far, I’d rather have a real URL to connect to instead of having to type in a port number after my domain. Thus I decided to add a “jekyll” subdomain to my site. This is literally the same thing as what I wrote about in my &lt;a href=&quot;/posts/2023/11/setting-up-my-domain&quot;&gt;previous post on adding subdomains&lt;/a&gt; so I won’t be going into too much detail about it here. Below is what I added to my Nginx config and my AWS route 53 settings.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;server {
    listen 80;
    server_name jekyll.julianlopez.net;
    location / {
       proxy_pass http://localhost:JEKYLL_PORT;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-12-Running-a-Jekyll-Dev-Server/_route53_I8iJ4bRVP.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-12-Running-a-Jekyll-Dev-Server/_route53_I8iJ4bRVP.png?tr=w-480&quot; alt=&quot;A screenshot of an AWS Route 53 domain record.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot of an AWS Route 53 domain record.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Here is the AWS Route 53 domain record I set up for this subdomain.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;If you’re going to copy what I’m doing, make sure that the port you’re using is open on your router and firewall in addition to Nginx being properly configured. Otherwise, you’ll only be able to access this preview from your local&lt;/p&gt;

&lt;p&gt;With that, I’m done! If you want to check out the changes I’m going to be making to my site before I publish them, visit &lt;a href=&quot;http://jekyll.julianlopez.net&quot;&gt;jekyll.julianlopez.net&lt;/a&gt;.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="nginx" />
		
			<category term="jekyll" />
		
			<category term="webdev" />
		
		<summary type="html">&lt;h2 id=&quot;my-plugin-problem&quot;&gt;My Plugin Problem&lt;/h2&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Bringing My Old Website Back From The Dead</title>
		<link href="https://www.julianlopez.net/posts/2023/12/bringing-my-old-website-back-from-the-dead" rel="alternate" type="text/html" title="Bringing My Old Website Back From The Dead" />
		<published>2023-12-09T00:00:00Z</published>
		<updated>2023-12-09T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/12/Bringing-My-Old-Website-Back-From-The-Dead</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/12/bringing-my-old-website-back-from-the-dead">
			
			
			
			
			
			&lt;h2 id=&quot;my-assignment&quot;&gt;My Assignment&lt;/h2&gt;

&lt;p&gt;At the start of this year I took a Japanese class as is required of all majors at USC Dornsife (don’t ask what grade I got). A big part of this class was a blogging project where students had to create and comment on posts in Japanese. The instructions had us use Blogger, but this wasn’t appealing to me. The interface was bad, posts looked terrible, the blogs looked bland, and there was not enough customization for me. So I decided to search for an alternative.&lt;/p&gt;

&lt;p&gt;I didn’t want to rent a server since I wanted to spend as little cash as possible on this (I’m a broke college student) which immediately ruled out running a &lt;a href=&quot;https://wordpress.com&quot;&gt;WordPress site&lt;/a&gt;. If I had my current home server back then (this was months before I built it) I probably would have looked this more, but then I found out about static websites.&lt;/p&gt;

&lt;p&gt;Prior to looking into this, I thought all websites required a server to run 24/7 in order to serve files and process user queries. This is kinda half true. Website information can be precompiled and stored on a publicly accessible file system without the need for any computational resources. Sites that are made this way are called “Static Websites”. Since I wasn’t doing anything fancy I decided to go with this opinion which still left me with many choices for where to store these files. To my surprise, you can actually configure an &lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html&quot;&gt;AWS S3 bucket&lt;/a&gt; to host a website which was great since I had used this service plenty of times before.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_aws-static-settings_mh5-44oep.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_aws-static-settings_mh5-44oep.png?tr=w-480&quot; alt=&quot;A screenshot of AWS S3 static website hosting settings.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot of AWS S3 static website hosting settings.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;This page is within the settings of an S3 bucket.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;To actually create and generate this blog I decided to go with &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; which is probably one of the most popular and thus best documented options out there. Plus, there are a bunch of free to use themes to customize the way your site looks. I went with &lt;a href=&quot;https://github.com/h01000110/windows-95&quot;&gt;windows-95&lt;/a&gt; which has a retro look that I like and works surprisingly well on mobile!&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_mobile-website_Oo7ad8a0Z.jpeg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_mobile-website_Oo7ad8a0Z.jpeg?tr=w-480&quot; alt=&quot;A screenshot taken from an iPhone of a website with a Windows 95 theme.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot taken from an iPhone of a website with a Windows 95 theme.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Here&apos;s how it looks on my phone.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;All I needed to do to add a post was to create a markdown file in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_posts&lt;/code&gt; directory, build the site by running the command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bundle exec jekyll build&lt;/code&gt; in the root directory of the website, then sync said directory to my S3 bucket. Just with that &lt;a href=&quot;http://julian-lopez-usc-jpn3-blog.s3.us-west-2.amazonaws.com/index.html&quot;&gt;I had something good enough for my class&lt;/a&gt;!&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_old_website_UhH4agVL2.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_old_website_UhH4agVL2.png?tr=w-480&quot; alt=&quot;A screenshot of a website with a Windows 95 theme.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot of a website with a Windows 95 theme.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;I like the way my current blog looks, but I have to admit this looks awesome.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;h2 id=&quot;commenting-was-required&quot;&gt;Commenting Was Required&lt;/h2&gt;

&lt;p&gt;However, the assignment didn’t involve just writing and posting blogs. We were required to write comments on other’s posts which was fun since it forced us to read each other’s blogs. However, there was a catch. According to the rubric, users had to be able to submit comments without creating or signing in to an account. While this seems relatively simple, most embeddable comment services require users to login to something (typically a Google/Facebook account) as an anti spam measure. I initially used &lt;a href=&quot;https://commentbox.io&quot;&gt;CommentBox&lt;/a&gt; (which worked great) but they require an account login. I had to switch to &lt;a href=&quot;https://cusdis.com/#pricing&quot;&gt;Cusdis&lt;/a&gt; which surprisingly fit well with my site theme. Both of these options are free up to a certain point (100+ comments per month) which is great since my site got nowhere near that limit&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_comments_iR7CiP3wO.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_comments_iR7CiP3wO.png?tr=w-480&quot; alt=&quot;A screenshot of Cusdis comments.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot of Cusdis comments.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;It kinda looks as if it is a part of the theme.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;I’m still not fully content with having to rely on a 3rd party service like this (especially one that I doubt will exist for years to come) but it’s something I can’t really bother myself to change. I doubt I’ll ever make any effort to save these comments, buttttttttt who knows.&lt;/p&gt;

&lt;h2 id=&quot;switching-to-github&quot;&gt;Switching To GitHub&lt;/h2&gt;

&lt;p&gt;Now this is the part where I admit that the title is clickbait. The original website I made for this assignment is still live and reachable on S3. However, it’s not exactly up to my current standards. For one, the url is just terrible (&lt;a href=&quot;https://julian-lopez-usc-jpn3-blog.s3.us-west-2.amazonaws.com/index.html&quot;&gt;https://julian-lopez-usc-jpn3-blog.s3.us-west-2.amazonaws.com/index.html&lt;/a&gt;). I have since purchased a domain (julianlopez.net) and have been using that for a bunch of other sites I have (&lt;a href=&quot;/posts/2023/11/setting-up-my-domain&quot;&gt;as I outlined in this blog post&lt;/a&gt;). Switching the domain of this website to that is a no brainer. Additionally, HTTPS is something that I believe all websites should have for security reasons. However, I didn’t know about it back then and didn’t set it up for that site.&lt;/p&gt;

&lt;p&gt;Both of these issues can be fixed on an S3 hosted website, but the process isn’t exactly easy. While S3 is great for just file storage, it’s not exactly something made with websites in mind. What they have in place is only good for just the bare minimum of static website hosting.&lt;/p&gt;

&lt;p&gt;By chance, I found out (no joke, I got it from the URL of a &lt;a href=&quot;https://hiatus-hiatus.github.io&quot;&gt;manga fan page&lt;/a&gt;) that GitHub has a service called &lt;a href=&quot;https://pages.github.com&quot;&gt;GitHub Pages&lt;/a&gt; to host static websites. It is wayyyyy better than using an S3 bucket, automatically provides HTTPS, has support for custom domains, and has version history through Git. Ever since I The only issue with it is that the source files have to be on a GitHub repository, which are public unless you pony up the $4/month for a GitHub Pro subscription. I’m fine with the &lt;a href=&quot;https://github.com/JLO64/JLO64.github.io&quot;&gt;source files of my blog being public&lt;/a&gt;, but I’d rather not have others snoop around the source files of my other sites.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_github-pages_38keHiWpd.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-12-9-Bringing-My-Old-Website-Back-From-The-Dead/_github-pages_38keHiWpd.png?tr=w-480&quot; alt=&quot;A screenshot of the GitHub Pages settings for a website.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot of the GitHub Pages settings for a website.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;These are my GitHub Pages settings for this blog.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;(As it turns out, Netlify also supports auto HTTPS, custom domains, and pushing files via Git. This is in addition to being easier to work with for hosting multiple websites and not requiring a subscription to hide source files. This has made me seriously consider switching to them for hosting my all my websites.)&lt;/p&gt;

&lt;h2 id=&quot;how-special-this-site-is-to-me&quot;&gt;How Special This Site Is To Me&lt;/h2&gt;

&lt;p&gt;I know it doesn’t seem this way, by far this is the most important website I have (and perhaps will) &lt;strong&gt;ever&lt;/strong&gt; make. This might seem like an exaggeration, but it’s not. Making this site got me get into web development as a hobby, and it was thanks to this that I met someone very special who changed my life forever. Plus who knows, this might even become a bit of a career for me!&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="webdev" />
		
			<category term="jekyll" />
		
			<category term="blogging" />
		
			<category term="aws" />
		
		<summary type="html">&lt;h2 id=&quot;my-assignment&quot;&gt;My Assignment&lt;/h2&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">What I Carry In My Pockets</title>
		<link href="https://www.julianlopez.net/posts/2023/11/what-i-carry-in-my-pockets" rel="alternate" type="text/html" title="What I Carry In My Pockets" />
		<published>2023-11-28T00:00:00Z</published>
		<updated>2023-11-28T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/11/what-i-carry-in-my-pockets</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/11/what-i-carry-in-my-pockets">
			
			
			
			
			
			&lt;h2 id=&quot;phone-stuff&quot;&gt;Phone Stuff&lt;/h2&gt;

&lt;p&gt;In my front right pocket I carry my phone (&lt;a href=&quot;https://www.apple.com/shop/buy-iphone/iphone-15/6.1-inch-display-128gb-blue-unlocked&quot;&gt;a white-blue iPhone 15&lt;/a&gt;) which has a USC branded sticker wallet (which I got for free!) on its generic clear case I bought at Best Buy. The two cards that are in there are my student ID and California State ID. I strongly prefer using Apple Pay as a payment method and here in LA most places accept it (especially after the pandemic).&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_0289_rWYtnCzDE.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_0289_rWYtnCzDE.jpg?tr=w-480&quot; alt=&quot;A photo of an iPhone 15 with a clear case and a stick on wallet.&quot; class=&quot;blog_image&quot; title=&quot;A photo of an iPhone 15 with a clear case and a stick on wallet.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;You can tell this photo was taken on an iPad.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;My back right pocket houses my wired earphones (&lt;a href=&quot;https://www.apple.com/shop/product/MNHF2AM/A/earpods-35mm-headphone-plug&quot;&gt;Apple 3.5mm EarPods&lt;/a&gt; with a &lt;a href=&quot;https://www.apple.com/shop/product/MU7E2AM/A/usb-c-to-35-mm-headphone-jack-adapter&quot;&gt;USB-C adaptor&lt;/a&gt;). To be frank, wireless earbuds aren’t worth it for me. It’s a hassle to always keep them charged, they’re extra fragile, and above all else super pricy for something that has to be replaced every 2-3 years. Maybe someday I’ll be wowed by the convenience offered by AirPods, but for now I’ll stick to wired audio.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1200_YO09keCe6.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1200_YO09keCe6.jpg?tr=w-480&quot; alt=&quot;A photo of Apple EarPods with an Aux to USB-C adaptor.&quot; class=&quot;blog_image&quot; title=&quot;A photo of Apple EarPods with an Aux to USB-C adaptor.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;These things have been around for so long for a reason.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;Now my front left pocket is where things get interesting.&lt;/p&gt;

&lt;h2 id=&quot;pennotebook-stuff&quot;&gt;Pen/Notebook Stuff&lt;/h2&gt;

&lt;p&gt;First, I have a fountain pen to write stuff with. My pen of choice is a modified &lt;a href=&quot;https://www.jetpens.com/Platinum-Plaisir-Fountain-Pen-Blue-03-Fine-Nib/pd/5985&quot;&gt;Platinum Plaisir&lt;/a&gt; (the body is a Plaisir but the internals are of a &lt;a href=&quot;https://www.jetpens.com/Platinum-Preppy-Wa-Modern-Maki-e-Fountain-Pen-Shima-to-Tomoe-03-Fine-Nib-Limited-Edition/pd/37601&quot;&gt;Preppy with a fine nib&lt;/a&gt;) with &lt;a href=&quot;https://www.jetpens.com/Sailor-Shikiori-Shigure-Ink-Rain-Showers-Izayoi-no-Yume-20-ml-Bottle/pd/22562&quot;&gt;Sailor Shikiori Shigure (dark purple) Ink&lt;/a&gt;. I used to carry a &lt;a href=&quot;https://www.jetpens.com/Kaweco-Brass-Sport-Fountain-Pen-Fine-Nib/pd/13984&quot;&gt;Brass Kaweco Sport&lt;/a&gt; with me, but I found that too heavy despite its small size. This Plaisir is bigger but considerably lighter which makes it perfect for one handed use.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1201_xvqtFXJb-.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1201_xvqtFXJb-.jpg?tr=w-480&quot; alt=&quot;A photo of a Platinum Plaisir along with Sailor Shikiori Shigure ink behind it.&quot; class=&quot;blog_image&quot; title=&quot;A photo of a Platinum Plaisir along with Sailor Shikiori Shigure ink behind it.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;I like this pen and ink combo.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;Next, I have a passport sized Leather cover with two notebooks inside held together by bands. This cover was given to me as a gift so I don’t know where to buy it, which is a shame because I would love to get more! Initially I just had one notebook in there, but after watching &lt;a href=&quot;https://youtu.be/bq0wud7wJi4?si=H-nNChbvjuQuzszf&amp;amp;t=130&quot;&gt;a video on how the bands work for the Traveler Notebook&lt;/a&gt; I added another notebook to it.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1198_z_-SACxTD.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1198_z_-SACxTD.jpg?tr=w-480&quot; alt=&quot;A photo of a passport size leather cover with notebooks inside of it along with a pen strapped to it.&quot; class=&quot;blog_image&quot; title=&quot;A photo of a passport size leather cover with notebooks inside of it along with a pen strapped to it.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;It fits perfectly in my pocket with my pen!&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;My first and favorite notebook is &lt;a href=&quot;https://www.jetpens.com/Rhodia-Unlimited-Notebook-Pocket-3.5-x-5.5-Lined-Black/pd/10781&quot;&gt;my Rhodia notebook&lt;/a&gt;. Inside the pages are grid lined, have a header for titles/dates, perforated for easily tearing off pages, ink doesn’t bleed through, and it has a band to keep it closed.  However, what made me fall in love with it is its durability.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1197_vUuLMXnjz.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1197_vUuLMXnjz.jpg?tr=w-480&quot; alt=&quot;A photo of a Rhodia Unlimited notebook inside a leather case.&quot; class=&quot;blog_image&quot; title=&quot;A photo of a Rhodia Unlimited notebook inside a leather case.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;The cover has gotten a bit worn out tho.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;Several months ago I was visiting NYC and had a breakfast appointment with a friend from a summer job. Unfortunately, the city was dealing with some of its &lt;a href=&quot;https://www.bbc.com/news/live/world-us-canada-66963276&quot;&gt;worst flooding in years&lt;/a&gt; that morning. After getting stuck in a bus inside Central Park, I stupidly waded through several waist high flooded tunnels to make it to my appointment (I was still late by 1+ Hour). In doing so I killed a portable battery I had with me and my iPhone started boot looping (so much for being waterproof). My Rhodia notebook was perfectly fine though! There is zero trace of water damage to the pages which is just astonishing considering what they went through.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_tunnel_photo_75SWjN09P.jpeg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_tunnel_photo_75SWjN09P.jpeg?tr=w-480&quot; alt=&quot;A photo of a Rhodia Unlimited notebook inside a leather case.&quot; class=&quot;blog_image&quot; title=&quot;A photo of a Rhodia Unlimited notebook inside a leather case.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Not my proudest moment.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;My other notebook isn’t quite so great. It’s a &lt;a href=&quot;https://pencils.com/products/forestchoice-small-flex-notebook-triple-set?variant=23948024053860&quot;&gt;ForestChoice notebook with squared paper&lt;/a&gt;, and if I’m being honest I wouldn’t recommend it. It’s not bad, but ink bleeds through it more than I would like. Apparently it uses extra special “forest friendly” paper (it’s not recycled tho) but that doesn’t make it worth it in my eyes.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1202_LgxSuFEAPu.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-28-what-i-carry-in-my-pockets/_IMG_1202_LgxSuFEAPu.jpg?tr=w-480&quot; alt=&quot;A photo of the inside of a ForestChoice notebook.&quot; class=&quot;blog_image&quot; title=&quot;A photo of the inside of a ForestChoice notebook.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;I like using this notebook to plan out things.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;To round things out, I keep my back left pocket empty. Sometimes I put a wallet in there, but I prefer not to. I’m a believer in always leaving extra space/resources for whatever might arise.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="notebooks" />
		
			<category term="fountain-pens" />
		
			<category term="writing" />
		
		<summary type="html">&lt;h2 id=&quot;phone-stuff&quot;&gt;Phone Stuff&lt;/h2&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Setting Up My Domain</title>
		<link href="https://www.julianlopez.net/posts/2023/11/setting-up-my-domain" rel="alternate" type="text/html" title="Setting Up My Domain" />
		<published>2023-11-20T00:00:00Z</published>
		<updated>2023-11-20T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/11/setting-up-my-domain</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/11/setting-up-my-domain">
			
			
			
			
			
			&lt;h2 id=&quot;why-did-i-buy-a-domain&quot;&gt;Why did I buy a domain?&lt;/h2&gt;

&lt;p&gt;Recently I decided to purchase a domain through AWS Route 53 for the purpose of making connecting to my server at home easier. Before I bought this domain whenever I had to connect to the stuff I have hosted on there (RSS feeds/media server/torrenting/etc) I had to type out my entire IP address. This is obviously a pain to do multiple times per day, and there are certain services/apps that don’t work well with just IP addresses. Thus, I decided to pay $11 per year for this domain (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;julianlopez.net&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Having it point towards my home server was super easy, all I had to do was create an A record in my DNS records with no subdomain and the value being my server IP address. After I did that, it worked perfectly! All I had to do in order to connect to my server via SSH was just type in the domain and login info and it worked!&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-20-setting-up-my-domain/images_route_53_XOmB4z2P6.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-20-setting-up-my-domain/images_route_53_XOmB4z2P6.png?tr=w-480&quot; alt=&quot;A screenshot of an AWS Route 53 A record.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot of an AWS Route 53 A record.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Don&apos;t put anything for the subdomain and set your server&apos;s IP address as your value.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;h2 id=&quot;subdomains-are-awesome&quot;&gt;Subdomains are awesome!&lt;/h2&gt;

&lt;p&gt;However, I got inspired by &lt;a href=&quot;https://chriscoyier.net/2023/09/21/use-subdomains/&quot;&gt;a post by Chris Coyier&lt;/a&gt; to try using subdomains to better organize and keep track of all the stuff I have running on ports off my server. Plus, there was one time that I tried showing said stuff to a friend while at their place, but I completely blanked out on most of my port numbers! I wasn’t able to show them much… Never again!&lt;/p&gt;

&lt;p&gt;Af first, I was at a complete loss at how to do this. I was able to create subdomains within the AWS console, but I couldn’t route them to my server. Eventually I figured out that within DNS records you can only have an IP address, you can’t have an IP address &lt;em&gt;and&lt;/em&gt; port number there. Instead what you have to do is create A records for your desired subdomain and have them point to the exact same IP address as the initial A record.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-20-setting-up-my-domain/images_hosted_zone_kJQN4YkWZ.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-20-setting-up-my-domain/images_hosted_zone_kJQN4YkWZ.png?tr=w-480&quot; alt=&quot;A screenshot of an AWS Route 53 hosted zone&apos;s records.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot of an AWS Route 53 hosted zone&apos;s records.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Despite these A records all having different subdomains, they all point to the same IP address.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;Now all these subdomains were being routed properly to my server, but once at the server they were not being routed to the port they needed to use. For that I had to set up Nginx to properly forward my requests to my port of choice.&lt;/p&gt;

&lt;p&gt;Within the http section of my Nginx config (on my Ubuntu server its filepath is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/nginx/nginx.conf&lt;/code&gt;) I added code similar to what I have below to redirect requests from port 80 (the default port web browsers try to connect to) to the appropriate port. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;server_name&lt;/code&gt; is just the subdomain plus domain.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;http{
    ...
    server {
        listen 80;
        server_name subdomain_one.julianlopez.net;

        location / {
            proxy_pass http://localhost:69;
            }
    }
    server {
        listen 80;
        server_name subdomain_two.julianlopez.net;
        location / {
            proxy_pass http://localhost:420;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After restarting Nginx (I ran &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/init.d/nginx restart&lt;/code&gt; as root), I no longer had to type in port numbers when accessing my stuff! I was initially concerned that switching to subdomains might break some functionality, but everything worked perfectly.&lt;/p&gt;

&lt;h2 id=&quot;making-my-blog-cooler&quot;&gt;Making my blog cooler&lt;/h2&gt;

&lt;p&gt;I could have my blog accessible through my domain through Nginx served off my server since it’s a static Jekyll site. However, I like using GitHub Pages for for my site hosting since it provides SSL certificates without having to do anything extra. Additionally, I like the idea of showing off my site assets (HTML/CSS/JS) if anyone wants to copy something I made. Thankfully, GitHub Pages allows you to use your domain along with a subdomain to host your website. All you have to do is verify your domian via DNS records, then add a filenamed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CNAME&lt;/code&gt; containing your subdomain and domain (in my case: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://www.julianlopez.net/&lt;/code&gt;)&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-20-setting-up-my-domain/images_github_verification_gfrDCSX-9.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/www_julianlopez_net/2023-11-20-setting-up-my-domain/images_github_verification_gfrDCSX-9.png?tr=w-480&quot; alt=&quot;A screenshot of the GitHub page to verify ownership of your domain.&quot; class=&quot;blog_image&quot; title=&quot;A screenshot of the GitHub page to verify ownership of your domain.&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Create a TXT record with the string from 1. as your subdomain and the string from 2. as the value of your record.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;If you want to host more than one website on your same GitHub account you just need to repeat all these steps, but also change the url in your Jekyll &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_config.yml&lt;/code&gt; file to your subdomain and domain.&lt;/p&gt;

&lt;h2 id=&quot;what-about-the-root-domain&quot;&gt;What about the root domain?&lt;/h2&gt;

&lt;p&gt;At this point, when I put &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;julianlopez.net&lt;/code&gt; into my web browser I just got a page from Nginx. This seemed like a waste of this URL, plus people trying to access my blog probably wouldn’t type in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;www.&lt;/code&gt; part. To fix both of these problems I decided to have my server route all requests for my root domain ot my&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;server {
    listen 80;
    server_name julianlopez.net;
    return 301 https://www.julianlopez.net;
}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I was worried that this might reroute ALL requests to my server (including SSH) but this is not the case. It only reroutes web traffic (port 80 stuff) so I have nothing to be worried about.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;At first, this was all beyond daunting to even attempt but this all now feels super easy to set up! I believe the lack of proper documentation and explainers for some of these topics (especially setting up multiple sites on GitHub Pages) contributes towards making this all look hard.&lt;/p&gt;

&lt;p&gt;In the future I might look into having Nginx run via docker so that I can manage it in Portainer alongside all the other containers I have running, but I’m concerned about how that might work with SSL encryption via Let’s Encrypt.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="webdev" />
		
			<category term="nginx" />
		
		<summary type="html">&lt;h2 id=&quot;why-did-i-buy-a-domain&quot;&gt;Why did I buy a domain?&lt;/h2&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Am I Worth My Tools?</title>
		<link href="https://www.julianlopez.net/posts/2023/11/am-i-worth-my-tools" rel="alternate" type="text/html" title="Am I Worth My Tools?" />
		<published>2023-11-10T00:00:00Z</published>
		<updated>2023-11-10T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/11/am-i-worth-my-tools</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/11/am-i-worth-my-tools">
			
			
			
			
			
			&lt;p&gt;I’ll be the first to admit, I don’t exactly have access to the best tools for my projects. The laptop I used to use has a crappy Intel Pentium processor with 4 GB of RAM, but I often use an 8th gen iPad now for most of my Tech needs. That said, I view this as less of a detriment but more of an opportunity to learn how to maximize the tools at my disposal. If I had a full fat laptop with all the power/storage/memory I could ever want I wouldn’t have learned certain skills that I’ve picked up. For instance, there are plenty of things that you simply cannot do on an iPad. In order to get around this, I’ve set up virtual machines (Windows 10 / Endeavor OS) on my home server that I can remote into with Anydesk. Now I can do anything that can be done on a desktop from a thin and mobile iPad! I turned this weakness into an opportunity to learn and grow my personal skill set, which can help me in my future career.&lt;/p&gt;

&lt;p&gt;That said, I have a certain friend with the opposite mindset of mine. What he does is go out and purchase the best equipment possible for whatever it is he is working on. For his Adobe Lightroom projects he doesn’t bat an eye at blowing huge amounts of cash on laptops with 64 GB of RAM and multiple terabytes of NVMe storage. A more… extreme example of his mindset was his decision to purchase $1000 fountain pen. In order to write well he should only use the best writing tools!&lt;/p&gt;

&lt;p&gt;In a way, I suppose my personal belief on this topic can be explained by a concern of worth. “Am I worth this amazing new gadget?” in the case of my home server(her name is Izumi), I initially didn’t feel this way. However, this concern faded away as I slowly pushed her more and more to her limits. Now, as I have multiple VMs / Docker containers / a GitLab instance / media sharing via Jellyfin / and a bunch more, I no longer feel these concerns of worth. Instead, I am now concerned by how to upgrade and expand my horizons further!&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="fountain-pens" />
		
			<category term="thoughts" />
		
		<summary type="html">&lt;p&gt;I’ll be the first to admit, I don’t exactly have access to the best tools for my projects. The laptop I used to use has a crappy Intel Pentium processor with 4 GB of RAM, but I often use an 8th gen iPad now for most of my Tech needs. That said, I view this as less of a detriment but more of an opportunity to learn how to maximize the tools at my disposal. If I had a full fat laptop with all the power/storage/memory I could ever want I wouldn’t have learned certain skills that I’ve picked up. For instance, there are plenty of things that you simply cannot do on an iPad. In order to get around this, I’ve set up virtual machines (Windows 10 / Endeavor OS) on my home server that I can remote into with Anydesk. Now I can do anything that can be done on a desktop from a thin and mobile iPad! I turned this weakness into an opportunity to learn and grow my personal skill set, which can help me in my future career.&lt;/p&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">How I Listen To Music</title>
		<link href="https://www.julianlopez.net/posts/2023/10/how-i-listen-to-music" rel="alternate" type="text/html" title="How I Listen To Music" />
		<published>2023-10-26T00:00:00Z</published>
		<updated>2023-10-26T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/10/how-i-listen-to-music</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/10/how-i-listen-to-music">
			
			
			
			
			
			&lt;p&gt;Growing up as a Kid I loved listening to anime music on my iPod. I started out by purchasing songs off of iTunes for $0.99, but there weren’t that many songs on there from shows that I liked. (In hindsight, they might have had them but with Japamese titles which I couldn’t read/search.) The one place I was able to easily find these songs was on YouTube so I used that as my source. I would grab the URLs I wanted and go visit some sketchy YoaTube to MP3 websites, import the MP3s into iTunes, then sync my iPod.&lt;/p&gt;

&lt;p&gt;Over a decade later and the way I listen to my music has not fundamentally changed. I used Apple Music / Spotify for a while but the music selecton still wasn’t great for me especially for Video game soundtracks. YouTube Music was almost pertect but I had issues with certain tracks being removed and readded from listening availibilty. Thus I’ve stuck to transferring MP3s to my phone although I’ve made a few improvements on the overall process.&lt;/p&gt;

&lt;p&gt;I have a bash script that a cron job runs periodically which syncs my YouTube playlists and the music on my server. This scipt also adds Album name metadata using eyeD3 which I have match the playlist titles. This way, I can easily sort the music in my Ilbrary without having to resort to creating playlists.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
		<summary type="html">&lt;p&gt;Growing up as a Kid I loved listening to anime music on my iPod. I started out by purchasing songs off of iTunes for $0.99, but there weren’t that many songs on there from shows that I liked. (In hindsight, they might have had them but with Japamese titles which I couldn’t read/search.) The one place I was able to easily find these songs was on YouTube so I used that as my source. I would grab the URLs I wanted and go visit some sketchy YoaTube to MP3 websites, import the MP3s into iTunes, then sync my iPod.&lt;/p&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Good Customer Support</title>
		<link href="https://www.julianlopez.net/posts/2023/08/good-customer-support" rel="alternate" type="text/html" title="Good Customer Support" />
		<published>2023-08-31T00:00:00Z</published>
		<updated>2023-08-31T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/08/good-customer-support</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/08/good-customer-support">
			
			
			
			
			
			&lt;p&gt;Having to make a phone call and talk to a companies customer support always sucks. Nowhere has this been more apparent to me than when I have been on hold for over an hour to talk to my university’s financial aid department. However, there have been some rare instances where I found my experiences almost enjoyable.&lt;/p&gt;

&lt;h2 id=&quot;consumer-cellular&quot;&gt;Consumer Cellular&lt;/h2&gt;

&lt;p&gt;Several years ago I was helping a guy out. He got mugged and had all of his possession stolen. I decided to give him an old phone of mine, but we needed to transfer his phone number to it. So we had to call his cellular provider, consumer cellular to do so. Keep in mind, prior to this the two of us had made multiple excruciating phone calls, over the better part of a month to replace some of his lost possessions. Just to attempt to replace one of these items took multiple days worth of calls and often ended in failure. Thus, you weren’t expecting much from a single car. After a long wait (probably around 30 minutes) the two of us finally got on the line with someone. Immediately I knows this person had a southern accent which of reassuring since it meant I was not dealing with an international call center (which have never provided good service in my experience). Two are shocked and surprised, within 10 minutes we managed to get the number transferred! This is so unexpectedly quick I just had to think the representative on the phone for how great the service was.&lt;/p&gt;

&lt;h2 id=&quot;nintendo-of-america&quot;&gt;Nintendo of America&lt;/h2&gt;

&lt;p&gt;As I mentioned in the previous post, I recently bought myself a used Nintendo 3DS. However, when I attempted to use my Nintendo account to access the eShop (this was before closure) I was blocked from doing so because the account of its previous owner was still tied to the console. The procedure for removing that account involved making a phone call to a Nintendo of America line for 3DS inquiries, and have a representative Remove it for me. To my surprise, not only was this line still active years after the 3DS had been discontinued (this was probably in 2021), but there was hardly any wait time to speak to someone. The person I then spoke to was super chill and completely understood why I purchased “outdated” console (purely for nostalgia). After I was done with that call, I made sure to give that representative a glowing review on the email questionnaire I was later sent.&lt;/p&gt;

&lt;h2 id=&quot;amazon-web-services&quot;&gt;Amazon Web Services&lt;/h2&gt;

&lt;p&gt;To this day, this is the most incredible customer support experience I’ve ever had. Back in my final year of high school, I was experimenting with making an inventory app for a club I created to donate computers to low income families. Of course, I had no clue I was doing so at one point I accidentally pushed AWS IAM credential info to GitHub. Within 24 hours I got a call from the Seattle number. To my shock and awe, it was an AWS support employee who had called to inform me that they had noticed that keys tied to my account were publicly viewable on GitHub and they had deactivated them to protect my account. Suffice to say, my 18 year old mind was blown. I have issues with the way Amazon and their cloud services division sometimes conduct business, but the incredible support I received from them on that day will always stick with me and be a driving reason why I use their services.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="thoughts" />
		
		<summary type="html">&lt;p&gt;Having to make a phone call and talk to a companies customer support always sucks. Nowhere has this been more apparent to me than when I have been on hold for over an hour to talk to my university’s financial aid department. However, there have been some rare instances where I found my experiences almost enjoyable.&lt;/p&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Finding Flags on a Website</title>
		<link href="https://www.julianlopez.net/posts/2023/07/finding-flags-on-a-website" rel="alternate" type="text/html" title="Finding Flags on a Website" />
		<published>2023-07-30T00:00:00Z</published>
		<updated>2023-07-30T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/07/finding-flags-on-a-website</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/07/finding-flags-on-a-website">
			
			
			
			
			
			&lt;p&gt;A while back, I was on a website that had a weird link near the bottom that was titled “Capture the Flag”. Clicking on it, directed me to a “secret” page that described how there were six hidden flags throughout the site with in format “GXYZ{***}”. If you managed to find a flag, you could have your name added to a “hall of fame” along with the number of flags you had found.&lt;/p&gt;

&lt;p&gt;Coincidentally, earlier that day I had come across a blog post that had something to do with storing data within image files. On a hunch, I download an image of a flag that was on that page and opened it in Vim. To my pleasant surprise, at the end of the file there was a flag! Unfortunately I haven’t found any other flags yet, but I haven’t been trying that hard.&lt;/p&gt;

&lt;p&gt;I won’t be linking to this website since it would be unfair as I’ve already detailed one of the flags. That being said, a quick web search (Bing in my case) will result in many similar challenges open to all.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
		<summary type="html">&lt;p&gt;A while back, I was on a website that had a weird link near the bottom that was titled “Capture the Flag”. Clicking on it, directed me to a “secret” page that described how there were six hidden flags throughout the site with in format “GXYZ{***}”. If you managed to find a flag, you could have your name added to a “hall of fame” along with the number of flags you had found.&lt;/p&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Cleaning My 3DS</title>
		<link href="https://www.julianlopez.net/posts/2023/05/cleaning-my-3ds" rel="alternate" type="text/html" title="Cleaning My 3DS" />
		<published>2023-05-16T00:00:00Z</published>
		<updated>2023-05-16T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/05/cleaning-my-3ds</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/05/cleaning-my-3ds">
			
			
			
			
			
			&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#weird-problems-with-my-3ds&quot;&gt;Weird Problems with my 3DS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#cleaning-the-3ds&quot;&gt;Cleaning the 3DS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#a-new-sd-card&quot;&gt;A new SD Card&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#footnotes&quot;&gt;Footnotes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;weird-problems-with-my-3ds&quot;&gt;Weird Problems with my 3DS&lt;/h2&gt;

&lt;p&gt;Ever since I bought my 3DS from a retro game store&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, I’ve been having some weird issues with it.
After playing a game for a while (10 minutes+), the system would freeze and I’d get an error on the bottom screen.
At first I thought this was tied to the homebrew/firmware I had installed, but I couldn’t find anything online regarding similar behavior.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post3/IMG_3810.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post3/IMG_3810.jpg?tr=w-480&quot; alt=&quot;A Nintendo 3DS with a crash screen&quot; class=&quot;blog_image&quot; title=&quot;A Nintendo 3DS with a crash screen&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;This is what a crash would look like.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;Additionally it only had a 1 in 3 chance of turning on when you pressed the power button.
Removing the SD card and reinserting it seemed to help, but that might have been a placebo.
There were times were it look me upwards of 5 minutes to turn it on, which was especially annoying after a crash.&lt;/p&gt;

&lt;p&gt;On top of this, removing the SD card was a pain since the cover for the SD card slot almost never closed properly.
As a result the system would often not recognize the SD card which prevented it from booting with homebrew.
This was also just annoying at a practical level since I had to carry around my 3DS with the SD card cover slightly open.&lt;/p&gt;

&lt;h2 id=&quot;cleaning-the-3ds&quot;&gt;Cleaning the 3DS&lt;/h2&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post3/IMG_3797.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post3/IMG_3797.jpg?tr=w-480&quot; alt=&quot;A Nintendo 3DS with the back removed&quot; class=&quot;blog_image&quot; title=&quot;A Nintendo 3DS with the back removed&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Take a good look around the screw holes.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;Removing the back of the 3DS (which only took 4 phillips screws) revealed yet another problem.
There was some sort of yellowish residue around the screw holes, which was also present in between the “seams” on the bottom of the 3DS.
My best guess is that at some point the previous owner (probably a dumb kid) spilled something on it which might have damaged/broken it and sold it to the store I bought it from.
They then probably repaired it, but didn’t do a great job of cleaning it and only did the bare minimum to get it working.
Credit to that store though, they gave me a free warranty so I could have gotten it fixed for free, but given that I hacked it and was running homebrew I didn’t want to push my luck.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post3/IMG_3800.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post3/IMG_3800.jpg?tr=w-480&quot; alt=&quot;The exposed SD card slot of a Nintendo 3DS with gunk in it&quot; class=&quot;blog_image&quot; title=&quot;The exposed SD card slot of a Nintendo 3DS with gunk in it&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;A look at the gunk in the SD slot.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;Disassembling it further revealed that the SD card slot was also full of this gunk.
This was causing extra friction with the SD card which was why it was so hard to close the cover.
The fact that this gunk was also present here makes me think that this 3DS was submerged in some sort of liquid.
That it survived at all is probably a miracle.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post3/IMG_3803.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post3/IMG_3803.jpg?tr=w-480&quot; alt=&quot;A clean disassembled Nintendo 3DS&quot; class=&quot;blog_image&quot; title=&quot;A clean disassembled Nintendo 3DS&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;The finished result.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;It took me several hours, but I got rid of any trace of the gunk.
Unfortunately, I didn’t have any rubbing alcohol (and I wasn’t crazy enough to use water) so I had to use a bunch of disposable alcohol wipes and just rub the plastic as hard as I could.
I didn’t want to touch any of the electronic stuff, but I noticed that the game cartridge slot might have had some signs of corrosion.
In the future I’ll probably try to clean that out as well, but for now I’m just happy that my 3DS is working again.&lt;/p&gt;

&lt;h2 id=&quot;a-new-sd-card&quot;&gt;A new SD Card&lt;/h2&gt;

&lt;p&gt;When I first hacked my 3DS I used a 128GB SD card I had been using for my Switch.
The idea was to have all the games I could ever possibly want installed on my 3DS.
However, this isn’t a great idea since the 3DS can only use 32GB SD cards by default.
While it can use larger SD cards, it generally becomes slower the larger the SD card is.
My suspicion is that the reason my 3DS was crashing was because of how slow the SD card was.&lt;/p&gt;

&lt;p&gt;Thankfully I have a friend who traded me a 32GB SD card for my 128GB one.
All I had to do to use it with my 3DS was format it to FAT32 and copy over the files from my old SD card.
The only hard part about this was that I had to delete a bunch of games to make it fit on the 32GB card.
After that it worked perfectly and I haven’t had any crashes since!&lt;/p&gt;

&lt;p&gt;Now my only problem is that I promised him I’d trade my 128GB card for it and I’ve since lost it!&lt;/p&gt;

&lt;h2 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h2&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;GameHogs in East Los Angeles. They have by far the sketchiest storefront I’ve ever been inside, but the interior is amazing. I’ve never seen such a large selection of games, much less retro games! Highly recommend if you’re in the area. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="3ds" />
		
		<summary type="html">&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#weird-problems-with-my-3ds&quot;&gt;Weird Problems with my 3DS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#cleaning-the-3ds&quot;&gt;Cleaning the 3DS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#a-new-sd-card&quot;&gt;A new SD Card&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#footnotes&quot;&gt;Footnotes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Generating Fake McDonald&apos;s Screenshots With AWS and OpenAI</title>
		<link href="https://www.julianlopez.net/posts/2023/05/fake-mcdonalds-screenshots" rel="alternate" type="text/html" title="Generating Fake McDonald&apos;s Screenshots With AWS and OpenAI" />
		<published>2023-05-01T00:00:00Z</published>
		<updated>2023-05-01T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/05/fake-mcdonalds-screenshots</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/05/fake-mcdonalds-screenshots">
			
			
			
			
			
			&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post2/banner.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post2/banner.jpg?tr=w-480&quot; alt=&quot;The McDonald&apos;s app&quot; class=&quot;blog_image&quot; title=&quot;The McDonald&apos;s app&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Honestly the deals you can get through points are amazing.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#my-problem&quot;&gt;My Problem&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#generating-images-in-the-cloud&quot;&gt;Generating Images in the Cloud&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#making-the-canvas&quot;&gt;Making the Canvas&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#its-all-in-the-details&quot;&gt;It’s all in the details&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#chatgpt-can-do-almost-anything&quot;&gt;ChatGPT can do (almost) anything&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#training-a-custom-gpt-3-model&quot;&gt;Training a custom GPT-3 model&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#drawing-it-all-together&quot;&gt;Drawing it all together&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#apple-shortcuts-is-awesome&quot;&gt;Apple Shortcuts is awesome&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#the-final-product&quot;&gt;The final product&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;my-problem&quot;&gt;My Problem&lt;/h2&gt;
&lt;p&gt;Several months ago, I had a dumb first world problem.
Typically my mom likes to order food from McDonald’s using the app, that way she gets points she can redeem for free food. However, in order to pick up at the counter you need to show the order confirmation screen on your phone.&lt;/p&gt;

&lt;p&gt;She (being my mother) would then force me to take her phone and pick up the order for her.
I don’t mind being the one to pick up the food, but I don’t like having to use her phone to do it.&lt;/p&gt;

&lt;p&gt;If only there was a way I could make a fake screenshot of the McDonald’s app with the her order info in it…&lt;/p&gt;

&lt;h2 id=&quot;generating-images-in-the-cloud&quot;&gt;Generating Images in the Cloud&lt;/h2&gt;
&lt;p&gt;A loooong time ago, I made an inventory system built on AWS for a community service thing that donated computers to low income individuals/families.
The main thing it was designed to keep track of was all of the computers that we received/refurbished/donated.&lt;/p&gt;

&lt;p&gt;Initially, in order to tell which computer was which, we placed masking tape and wrote on them with sharpies.
However, people’s (my) handwriting sucked so you often come across many computers with illegible ID numbers.
To fix this I wanted to have an app where you could create an entry for a computer and enter in all of its specs and other relevant information.
Then it would create a PNG with an ID number and a QR code that could be printed on a label and stuck on the computer.&lt;/p&gt;

&lt;p&gt;In order to do this, I made an Android app that would create a new entry in a DynamoDB database with all of the appropriate fields.
Then the app would trigger a Lambda function that would generate the PNG using information from that entry (ID number and computer type), and upload it to an S3 bucket where it could be accessed elsewhere. Looking back on this, I hate this and I am glad that I don’t have any of this code anymore.&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;https://mermaid.ink/img/pako:eNpFkMtuwjAQRX9lNCsqwYpdFpVCjNiQijaswF0M8QQs4oeMoyoi_DsmUDGreZzRvbpXrJ1izLBp3V99ohBhK6SFVPk-tyo4rSD3_hdms8-hCEyRYVPA0sbQD7CYiN6ScWLx8XoauZLODN8_sPlaDVBM1mQOil5EMRJVdOGNJMXnUeyr-SgFg9AX31L_z-Q4RcPBkFbJ7fWBS4wnNiwxS63ihro2SpT2llDqoqt6W2MWQ8dT7LxKzoWmYyCDWUPtJW092Z1z75mVTr7KZyJjMLc7mIZblg?type=png&quot; alt=&quot;Diagram of AWS backend&quot; /&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;I&apos;m going off my memory here, so this is probably wrong.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Fundamentally, generating a fake McDonald’s screenshot would be much simpler than this since I don’t need to deal with any of the database stuff.
However, unlike these labels which are just text on a white background, I’d need to have a background image and place text on top of it.&lt;/p&gt;

&lt;h2 id=&quot;making-the-canvas&quot;&gt;Making the Canvas&lt;/h2&gt;

&lt;p&gt;First I ordered an Oreo McFlurry from a McDonald’s with my phone and took a screenshot of the order confirmation page.
I then imported it into GIMP, erased a bunch of stuff within it, and split it into two images, one for the top half and one for the bottom half.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post2/top_half.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post2/top_half.jpg?tr=w-480&quot; alt=&quot;&quot; class=&quot;blog_image&quot; title=&quot;&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;&lt;/figcaption&gt;
 &lt;/picture&gt;
&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post2/bottom_half.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post2/bottom_half.jpg?tr=w-480&quot; alt=&quot;&quot; class=&quot;blog_image&quot; title=&quot;&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;It&apos;s weird seeing so much blank space in this image&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;The reason I split it into two images was because I didn’t to have a limit to how many items I could have in the order.
If I had stuck with just the original screenshot, the order text could have gone off the bottom of the screen so I figured stitching two images together would be an easy fix.&lt;/p&gt;

&lt;h2 id=&quot;its-all-in-the-details&quot;&gt;It’s all in the details&lt;/h2&gt;
&lt;p&gt;I initially kept the time in the upper left cover, but if I tried ordering at night and the time was 1:00 PM it could potentially give me away.
Luckily, Apple really likes using “Helvetica” in their software so I was able to easily download a ttf file and use it to generate the time.&lt;/p&gt;

&lt;p&gt;The rest of the text was not so easy to fake.
I used an online text analyzer to figure out what font McDonald’s uses, and it wasn’t able to nail it down 100%.
Additionally, all of the fonts it was suggesting were paid fonts, so I couldn’t just download them.
After some trial and error I settled on “Heebo Black” which isn’t a perfect match, but it’s close enough for a brief glance.
If anyone were to take a closer look in comparison to the real app this would probably be the first thing they notice.&lt;/p&gt;

&lt;p&gt;Thankfully, because I used Apple Pay when I placed my order, I didn’t have to worry about providing a real debit card number.
Without getting too into it, my understanding is that Apple Pay generates a different card number for each transaction.
Thus I was able to just use a random number generator to generate a four digit number and use that as the card number.&lt;/p&gt;

&lt;p&gt;However, the toughest issue was the cost of the order which I needed a way to guess.&lt;/p&gt;

&lt;h2 id=&quot;chatgpt-can-do-almost-anything&quot;&gt;ChatGPT can do (almost) anything&lt;/h2&gt;
&lt;p&gt;The answer (of course) was to use AI!&lt;/p&gt;

&lt;p&gt;Prior to this project, I had been screwing around with OpenAI’s APIs and they are shockingly easy to work with.
Plus, they’re super cheap!&lt;/p&gt;

&lt;p&gt;To oversimplify a bit, the newer an AI model is the better it is.
When I started working on this project OpenAI had released an endpoint for a model called GPT-3.5 Turbo intended for chat (which I think is what ChatGPT uses).
(Now they are up to GPT-4)
Since that was the best model they had available at that time, I decided to use it.&lt;/p&gt;

&lt;p&gt;I got it working pretty quickly, but there were some serious problems.
For one, it wasn’t very good at pricing things.
Multiple queries with the exact same prompt would yield wildly different results.
When guessing how much a Big Mac cost I would get responces that ranged from $2.99 to $5.99.
This is because McDonald’s prices vary wildly across America, but whenever I tried to specify SoCal/California pricing it just refused to generate a number.&lt;/p&gt;

&lt;p&gt;Additionally, no matter what I gave it as a prompt, I couldn’t get it to output in a standardized format.
For instance, I wanted it to output $2.99 as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.99&lt;/code&gt; but I would typically get &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$2.99&lt;/code&gt;.
No problem, I can easily use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.replace(&apos;$&apos;, &apos;&apos;)&lt;/code&gt; to get rid of the dollar sign.
But what was even more frustrating was that I had gotten got outputs like  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Your cost would be $2.99&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Total Cost: 2.99&lt;/code&gt;, and others like that instead of just the number I wanted.&lt;/p&gt;

&lt;p&gt;I could have tried fixed these problems, but I decided to take a different approach towards using the API.&lt;/p&gt;

&lt;h2 id=&quot;training-a-custom-gpt-3-model&quot;&gt;Training a custom GPT-3 model&lt;/h2&gt;
&lt;p&gt;Thankfully the chat endpoint wasn’t the only offering OpenAI had with their API.&lt;/p&gt;

&lt;p&gt;Something I had been wanting to try for a while was training my own GPT-3 model.
In short, its as easy as making a spreadsheet with a bunch of example inputs and outputs, putting it through an OpenAI JSONL formatter, and then uploading it to the API.&lt;/p&gt;

&lt;p&gt;So I spent just over an hour going the McDonald’s app for the location I go to and logged the prices for almost everything there.
After that I uploaded the data to the API and it took just shy of 30-45 minutes to train.
The longest part wasn’t the actual training, but waiting in the queue to get my turn to train&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post2/gpt-spreadsheet.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post2/gpt-spreadsheet.png?tr=w-480&quot; alt=&quot;&quot; class=&quot;blog_image&quot; title=&quot;&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;222 lines of McDonald&apos;s.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;At this point the model I trained was very good at guessing prices for individual menu items.
It was even able to provide the correct price even when I mistyped the name of an item.
However, it still wasn’t able to generate a total price for multiple items.
In order to get around this, I decided to have my code call the API for each item and add each result together.&lt;/p&gt;

&lt;p&gt;While I could have added additional training so it could process multiple items at once, I decided not to do that since the API was already pretty fast and this would only shave off a second or two.
It’s not worth it for me to spend an hour plus formating the data for that small of a speed increase.
Plus, in my experience I don’t trust a GPT-3 model to do addition correctly.
While GPT-4 is probably better overall, for my future OpenAI projects I’m going to break up my tasks and combine them with coding instead of trying to do it all in one API call.&lt;/p&gt;

&lt;h2 id=&quot;drawing-it-all-together&quot;&gt;Drawing it all together&lt;/h2&gt;

&lt;p&gt;Now that all the data is loaded, it just needs to be drawn on top of the edited screenshots.&lt;/p&gt;

&lt;p&gt;Thankfully drawing is super easy in Python using PIL(Pillow).
On my laptop all I had to do was install it with pip, type out a few lines of code, and I was done.
The only hard part was figuring out the coordinates for where to draw the text, but that was just a matter of trial and error.&lt;/p&gt;

&lt;p&gt;Unfortunately, it wasn’t this easy to use PIL on AWS Lambda.
Typically (for Python) you bundle your code and its dependencies into a zip file and upload it to AWS.
However, for some reason I couldn’t get my code to run properly on Lambda with its bundled dependencies (in this case PIL).
This could have been a big problem since as far as I know, this is the only way to upload pip dependencies to Lambda.&lt;/p&gt;

&lt;p&gt;Thankfully, I was able to get around this by using layers.
In short, someone else had already bundled PIL into a zip file and uploaded it to AWS.
With the ARN of that layer, I was able to use it in my Lambda function without having to bundle it myself.
If it weren’t for this guy I would have been kinda screwed.&lt;/p&gt;

&lt;p&gt;Overall Azure Functions are a lot easier to work with since you can actually prepackage your code with its dependencies and upload it directly to Azure within VS Code.
For this and other reasons, I might consider redeploying this project on Azure in the future.&lt;/p&gt;

&lt;h2 id=&quot;apple-shortcuts-is-awesome&quot;&gt;Apple Shortcuts is awesome&lt;/h2&gt;

&lt;p&gt;Having a script that can generate a fake McDonald’s order is cool, but it’s not very useful if I have to run it on my laptop every time I want to use it.&lt;/p&gt;

&lt;p&gt;Luckily I only had to develop for iOS since it’s what my phone runs and I’m the only one who’s ever going to use this.
Unfortunately, I don’t have a Mac so I can’t use Xcode to develop an app.
Plus, back then I wasn’t as knowledgeable about web development as I am now.&lt;/p&gt;

&lt;p&gt;As it turns out, Apple has a built in app called Shortcuts that lets users create/share scripts that can be run from the home screen or with Siri.
Despite the drag and drop interface that is akin to Scratch, it is surprisingly powerful and has access to many system features.
For the purposes of this project, it is able to make HTTP requests and save images locally.&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;https://mermaid.ink/img/pako:eNpVkEFrwzAMhf-K8Lk5beyQwyBpt15WCCRQWN2DaiuNIbZTR2aUJP997nLYppMkvif03iSU1yRy0fb-S3UYGJqddJCqOJmq846g7nxgFfkMWfYKc8c8wP6tgUC3SCPPUE7FsYYPtBeNUrrqzkkH79EpNt4t67lyVRsmCw4tzbA9NQGNIw37qsme4JA-6c8rvf1DD8GohJf_7lxwJHh5BnIPA3MhNsJSsGh0MjM9UCm4I0tS5KnV1GLsWQrploRiZF_fnRI5h0gbEQeNTDuD14BW5C32Y9oO6D69_51JG_bhsAb2k9vyDa7BaUA?type=png&quot; alt=&quot;Diagram of screenshot generation&quot; /&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Honestly this is pretty simple.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;So I set up mmy script which asks for the name of the person who placed the order, the items they ordered, and what their order code was.
Then it appends this data to a URL and makes a GET request to the AWS Lambda function I set up earlier.
From there it downloads the image and saves it to the photos app.&lt;/p&gt;

&lt;h2 id=&quot;the-final-product&quot;&gt;The final product&lt;/h2&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post2/1D99F7A8-6145-492B-9ED4-5A365A12DA81.jpeg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post2/1D99F7A8-6145-492B-9ED4-5A365A12DA81.jpeg?tr=w-480&quot; alt=&quot;&quot; class=&quot;blog_image&quot; title=&quot;&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;A 100% fake screenshot.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;And with that I was done.
I had a means to fake McDonald’s screenshots on my phone in order to not use my mom’s phone.
All that was left was to use it in action…&lt;/p&gt;

&lt;p&gt;That Saturday I had my mother place an order off of her phone so that I could pick it up using only what I had made.
I then walked up to the counter more anxious than I had ever been picking up a Big Mac.
The person behind it then barely gave my phone a glance before handing me my order.
Success!&lt;/p&gt;

&lt;p&gt;Given this response, if I so desired I could easily use this to get free food and steal from McDonald’s and its patrons.
However, I am not a criminal and have chosen to never do this.
In order to avoid encouraging such bad behaviors (and so that I don’t get sued) I haven’t posted the full code for this project on GitHub.
Instead, I only pushed the code and assets for the image generation and the OpenAI API call, the AWS Lambda function, and the Apple Shortcut is not included.
If someone so desired, they could probably easily replace those missing parts with their own code.
That being said, if you have the know-how to do so, you probably have better things to do.&lt;/p&gt;

&lt;h2 id=&quot;the-obvious-easy-solution-to-my-dumb-problem&quot;&gt;The (Obvious) Easy Solution to my Dumb Problem&lt;/h2&gt;
&lt;p&gt;Of course, I immediately set about bragging about what I made to anyone I knew.
One person I told was a friend of mine who is a nurse and didn’t fully understand what I was talking about.
That being said, she asked a very simple question that I couldn’t answer.&lt;/p&gt;

&lt;p&gt;“Why couldn’t you ask your mom to send you a screenshot?”&lt;/p&gt;

&lt;p&gt;I was dumbfounded.
On this same line of thought, why did I have to create a way for this code to guess the price?
I could have easily added a field for me to input the price in the shortcut and it would’ve eliminate the need to use the OpenAI API.
However, in hindsight there was a simple answer to this question.&lt;/p&gt;

&lt;p&gt;“Why not?”&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="python" />
		
			<category term="openai" />
		
			<category term="aws" />
		
		<summary type="html">&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post2/banner.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post2/banner.jpg?tr=w-480&quot; alt=&quot;The McDonald&apos;s app&quot; class=&quot;blog_image&quot; title=&quot;The McDonald&apos;s app&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Honestly the deals you can get through points are amazing.&lt;/figcaption&gt;
 &lt;/picture&gt;
</summary>
  	</entry>
  
  	<entry>
		<title type="html">Hacking My Nintendo 3DS</title>
		<link href="https://www.julianlopez.net/posts/2023/04/hacking-game-consoles-part-i" rel="alternate" type="text/html" title="Hacking My Nintendo 3DS" />
		<published>2023-04-11T00:00:00Z</published>
		<updated>2023-04-11T00:00:00+00:00</updated>
		<id>https://www.julianlopez.net/posts/2023/04/hacking-game-consoles-part-i</id>
		<content type="html" xml:base="https://www.julianlopez.net/posts/2023/04/hacking-game-consoles-part-i">
			
			
			
			
			
			&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/nintendo3ds-white-back.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/nintendo3ds-white-back.jpg?tr=w-480&quot; alt=&quot;An aqua-blue Nintendo 3DS with a stylus on a white background&quot; class=&quot;blog_image&quot; title=&quot;An aqua-blue Nintendo 3DS with a stylus on a white background&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;My childhood in a nutshell.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;As weird as it sounds to say this, if you have a Nintendo 3DS you should try hacking it!
And I’m not suggesting you do this just to pirate games.
But before I get into that let me give you a bit of a personal backstory.&lt;/p&gt;

&lt;p&gt;As a pre-teen, I grew up with my favorite gadget in the world, my aqua-blue 3DS.
I got it in 2011 (the year it came out) and back then it blew my mind that something so capable could fit in my pocket.
That was right before the first price drop (from $250 to $170), so to compensate consumers who paid full price they introduced the “Ambassador Program” which let members download several Gameboy Advance games for free!f
That in conjunction with all the great games that came out for it made it a perfect distraction from the real world.&lt;/p&gt;

&lt;p&gt;However in 2013, I lost it while meeting up with a friend of mine at Central Park in New York City!
I was devastated, but thankfully my mother ended up buying me an XL model later that year.
Years after the fact I came across a post on an obscure forum from someone who found an aqua-blue 3DS at that same location that matched the description of mine…&lt;/p&gt;

&lt;p&gt;Fast forward to 2021, and I was at a really cool retro game store in East LA called GameHogs.
I was trying to find a launch PS3 when I came across the exact same model of 3DS I had growing up as a kid!
I had to buy it, partially out of a sense of nostalgia, but also because I knew that if I hacked it I could do some really cool stuff with it.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/my-3ds.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/my-3ds.png?tr=w-480&quot; alt=&quot;an aqua-blue 3DS being held&quot; class=&quot;blog_image&quot; title=&quot;an aqua-blue 3DS being held&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;She&apos;s as beautiful as the day I lost her.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;h2 id=&quot;hacking-explained&quot;&gt;Hacking explained&lt;/h2&gt;
&lt;p&gt;Let’s get this out of the way though, hacking a game console is not illegal!&lt;/p&gt;

&lt;p&gt;Hacking can be defined as opening closed computer systems for functions other than they were designed for, such as homemade or as they’re called in this context “homebrew” software.
Simply put, you bought this gadget so you should be able to do what you want with it!
Honestly I think people call it hacking instead of modding because hacking sounds way cooler.&lt;/p&gt;

&lt;p&gt;Generally, there are two types of hackers (within console hacking): pirates who want to play games for free, and enthusiasts who want to do cool stuff with their consoles.
These two groups are often at odds with each other, but their goals overlap in wanting unrestricted access to their hardware.&lt;/p&gt;

&lt;h2 id=&quot;hacking-a-3ds&quot;&gt;Hacking a 3DS&lt;/h2&gt;
&lt;p&gt;I’m not going to get too deep into the details of how to hack a 3DS, this isn’t meant to be a tutorial and the exact methods are always changing.
That being said, you can visit &lt;a href=&quot;https://3ds.hacks.guide&quot;&gt;3ds.hacks.guide&lt;/a&gt; for the most up to date information on how to do so.
What I will cover are some of the apps you can install and what they bring to the table.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/3ds-hacks-guide.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/3ds-hacks-guide.png?tr=w-480&quot; alt=&quot;a screenshot of the 3ds.hacks.guide website&quot; class=&quot;blog_image&quot; title=&quot;a screenshot of the 3ds.hacks.guide website&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;All you need to do is follow the steps listed on here and you&apos;ll be good to go.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;First off, installers that allow you to install apps directly to the homescreen end with the extension “.cia”.
So of course, the app you use to install these files is called &lt;a href=&quot;https://github.com/Steveice10/FBI&quot;&gt;FBI&lt;/a&gt;.
With this app, you can either install app from files on your SD card, or you can scan a QR code 
Apps that have their source code posted on github often have these QR codes as well.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/fbi-qr.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/fbi-qr.png?tr=w-480&quot; alt=&quot;a screenshot of the FBI app scanning a QR code&quot; class=&quot;blog_image&quot; title=&quot;a screenshot of the FBI app scanning a QR code&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;This is by far the coolest feature I&apos;ve ever seen built into homebrew!&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;However, you don’t have to use this to install all of your software.
The app &lt;a href=&quot;https://github.com/Universal-Team/Universal-Updater&quot;&gt;Universal Updater&lt;/a&gt; acts as a sort of 3DS app store with plenty of new apps and updates for them being posted on there.
It’s a super easy way to not only download homebrew apps and games but keep them updated without having to deal with file management.&lt;/p&gt;

&lt;h2 id=&quot;homebrew-3ds-apps&quot;&gt;Homebrew 3DS Apps&lt;/h2&gt;
&lt;p&gt;My favorite homebrew game you can install from there is based off of a fairly popular one. Wordle DS!&lt;/p&gt;

&lt;p&gt;It’s surprisingly convenient having two screens to play it on and what’s even better is that it uses the same list of words as the official version!
I’ve often followed the development of this port on &lt;a href=&quot;https://gbatemp.net/threads/release-wordle-ds-a-clone-of-wordle-for-the-ds-i.607796/&quot;&gt;GBAtemp&lt;/a&gt; where the developer frequently posts updates and fun little tidbits about this app and the New York Times version of Wordle.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/ds-wordle.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/ds-wordle.png?tr=w-480&quot; alt=&quot;a photo of a 3DS running the Wordle DS app with a qr code on the bottom screen&quot; class=&quot;blog_image&quot; title=&quot;a photo of a 3DS running the Wordle DS app with a qr code on the bottom screen&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;It even generates a QR code so you can still share your score online.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;This of course isn’t the only piece of homebrew software I’ve downloaded for my 3DS.
I have &lt;a href=&quot;https://github.com/Cam-2002/Minesweeper-3DS&quot;&gt;Minesweeper&lt;/a&gt;, an app that showcases &lt;a href=&quot;https://github.com/memeToasty/3ds_sorting&quot;&gt;different sorting algorithms&lt;/a&gt;, and a port of a &lt;a href=&quot;https://github.com/LukeZGD/DDLC-LOVE&quot;&gt;perfectly harmless dating simulator&lt;/a&gt; made by the hacker known as 4chan.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/3ds-bad-apple.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/3ds-bad-apple.png?tr=w-480&quot; alt=&quot;a photo of the Bad Apple video playing on a 3DS&quot; class=&quot;blog_image&quot; title=&quot;a photo of the Bad Apple video playing on a 3DS&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Of course, you can play Bad Apple on it.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;Even better, custom themes are a thing! All you have to do is download &lt;a href=&quot;https://github.com/astronautlevel2/Anemone3DS&quot;&gt;Anemone3DS&lt;/a&gt; and use the built in qr code scanner to download themes from the &lt;a href=&quot;https://3dsthemes.com/&quot;&gt;3DS Theme Shop&lt;/a&gt;.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/winxp-theme.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/winxp-theme.png?tr=w-480&quot; alt=&quot;a photo of a 3DS with a Windows XP theme&quot; class=&quot;blog_image&quot; title=&quot;a photo of a 3DS with a Windows XP theme&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;I have a thing for retro looks.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;h2 id=&quot;emulating-old-games&quot;&gt;Emulating Old Games&lt;/h2&gt;
&lt;p&gt;But honestly, my favorite apps are the emulators people have developed for it.&lt;/p&gt;

&lt;p&gt;Atari 2600, NES, SNES, Genesis and plenty more retro consoles have emulators developed by fans with insane coding skills.
If you have a model that was released later in the 3DS’s lifespan (which is confusingly called the “New” 3DS), with improved clockspeeds and more RAM, you can even emulate PlayStation One games!&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/3ds-balloon-fight.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/3ds-balloon-fight.png?tr=w-480&quot; alt=&quot;a photo of a 3DS running the NES game balloon fight&quot; class=&quot;blog_image&quot; title=&quot;a photo of a 3DS running the NES game balloon fight&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Hands down my favorite game on the NES.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;Make no mistake, developing software for this is no easy feat.
The smartphone you have in your pocket is orders of magnitude more powerful and easier to develop for.&lt;/p&gt;

&lt;p&gt;Also, remember that ambassador program I mentioned near the start of this post?
For some reason, Nintendo never sold any of the GameBoy Advance games they released for that program despite the fact that they already put in the work to create an “emulator” (it’s more complex than that) for those games!
Unless you bought in early like me you couldn’t buy or play any of them.
However, thanks to the efforts of those in the homebrew community, you can now use that same “emulator” to run whatever GBA games you want!&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/3ds-metroid-fusion.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/3ds-metroid-fusion.png?tr=w-480&quot; alt=&quot;a photo of a 3DS running the Gameboy Advance game Metroid Fusion&quot; class=&quot;blog_image&quot; title=&quot;a photo of a 3DS running the Gameboy Advance game Metroid Fusion&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;Metroid Fusion is still one of the scariest games I&apos;ve ever played!&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;h2 id=&quot;the-piracy-issue&quot;&gt;The Piracy Issue&lt;/h2&gt;
&lt;p&gt;To be blunt I’m ok with pirating games for my 3DS, but that’s because its a dead platform and me downloading games in 2023 for it doesn’t take away any potential earning from developers.
However, when I first got this particular 3DS the Nintento eShop was still running so I tried downloading &lt;em&gt;Mario &amp;amp; Luigi: Dream Team&lt;/em&gt; which is on the larger side of 3DS games.
No matter what I did I couldn’t get it to download, it would always initiate the download and then fail.&lt;/p&gt;

&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/dead-eshop.png?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/dead-eshop.png?tr=w-480&quot; alt=&quot;a photo of the Nintendo eShop on a 3DS failing to load&quot; class=&quot;blog_image&quot; title=&quot;a photo of the Nintendo eShop on a 3DS failing to load&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;It was fun while it lasted.&lt;/figcaption&gt;
 &lt;/picture&gt;

&lt;p&gt;By contrast, using a pirate site such as &lt;a href=&quot;https://hshop.xyz/&quot;&gt;hShop&lt;/a&gt; in conjunction with FBI I was able to successfully download/install the game.&lt;/p&gt;

&lt;p&gt;To be clear, I am not an advocate for piracy, but I do think it’s important to understand the difference between piracy and homebrew.&lt;/p&gt;

&lt;h2 id=&quot;should-you-buy-a-3ds-in-2023&quot;&gt;Should you buy a 3DS in 2023?&lt;/h2&gt;

&lt;p&gt;If you don’t care about playing the latest and greatest games and you like to tinker with your stuff, I highly recommend getting a 3DS.
For homebrew I fully recommend getting a “New” 3DS.
It’s more expensive but it’s worth it for the extra power and capabilities.
Honestly, when this model first came out there was almost no reason to buy it over the original versions, but now when it comes to homebrew it’s by far the superior choice.
Personally, I am content with my original 3DS, but that’s mainly because of the nostalgia factor it has for me.&lt;/p&gt;

		</content>
		<author><name>Julian Lopez</name></author>
		
			<category term="3ds" />
		
		<summary type="html">&lt;picture&gt;
    &lt;source srcset=&quot;https://ik.imagekit.io/jlo64/post1/nintendo3ds-white-back.jpg?tr=w-720,f-webp,&quot; type=&quot;image/webp&quot; /&gt;
    &lt;img src=&quot;https://ik.imagekit.io/jlo64/post1/nintendo3ds-white-back.jpg?tr=w-480&quot; alt=&quot;An aqua-blue Nintendo 3DS with a stylus on a white background&quot; class=&quot;blog_image&quot; title=&quot;An aqua-blue Nintendo 3DS with a stylus on a white background&quot; /&gt;
    &lt;figcaption style=&quot;text-align:center&quot;&gt;My childhood in a nutshell.&lt;/figcaption&gt;
 &lt;/picture&gt;
</summary>
  	</entry>
  
</feed>
