<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/subcurrent-astro/rss/styles.xsl" type="text/xsl"?><rss version="2.0"><channel><title>Subcurrent | Astoria Tech Meetup</title><description>A content aggregator for the Astoria Tech Meetup community</description><link>https://astoria-tech.github.io/</link><language>en-us</language><item><title>Sucker Punch, 2011</title><link>https://www.chrisdeluca.me/2026/03/08/sucker-punch.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/03/08/sucker-punch.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;https://cdn.uploads.micro.blog/111874/2026/sucker-punch-original-0-600-0-900-crop.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;This movie is daffy and fun.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 09 Mar 2026 03:12:46 GMT</pubDate><author>Chris DeLuca</author></item><item><title>Advanced CSS Custom Properties for Components</title><link>https://www.chrisdeluca.me/2026/03/08/advanced-css-custom-properties-for.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/03/08/advanced-css-custom-properties-for.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt; &lt;aside&gt; &lt;p&gt;This post is based on a talk I gave at Florida Drupal Camp 2026. It’s my slides, with some extra writing for the parts I spoke through extemporaneously, formatted for the web.&lt;/p&gt; &lt;p&gt;There’s a &lt;a href=&quot;&amp;quot;https://www.fldrupal.camp/session/advanced-css-custom-properties-components&amp;quot;&quot;&gt;full video recording&lt;/a&gt;, and the full&lt;br&gt; &lt;a href=&quot;&amp;quot;https://codepen.io/collection/myWYqJ&amp;quot;&quot;&gt;Codepen demo collection&lt;/a&gt;.&lt;/p&gt; &lt;/aside&gt; &lt;p&gt;Welcome to Advanced CSS Custom Properties for Components. They say that brevity is the soul of wit, and that goes double for titles, so welcome to my witless talk. Thank you for being here, genuinely.&lt;/p&gt; &lt;p&gt;My name is Chris DeLuca, I’m a senior front end developer working at Lullabot. Call me weird, but I love component-based development, and I’m excited to share some of the things I’ve learned about implementing them using CSS custom properties.&lt;/p&gt; &lt;h2 id=&quot;&amp;quot;what-is-this&amp;quot;&quot;&gt;What is this?&lt;/h2&gt; &lt;p&gt;Let’s get into what we’ll be getting into this afternoon. This talk covers some patterns for using CSS custom properties, or variables, to customize components. It will be pretty demo heavy. You might see some examples that directly apply to your work, or you may not. My hope is that the demos at least get your creativity flowing to start playing with some of these patterns in your day to day.&lt;/p&gt; &lt;p&gt;Now, if you remember the 1998 American Godzilla movie, and why would you, there’s a scene where a scientist, played by Matthew Broderick, has a plan to lure Godzilla into a trap with a massive amount of fish as bait.&lt;/p&gt; &lt;img is=&quot;&quot; alt=&quot;&amp;quot;Auto-generated&quot; height=&quot;&amp;quot;251&amp;quot;&quot; width=&quot;&amp;quot;600&amp;quot;&quot; src=&quot;https://cdn.uploads.micro.blog/111874/2026/godzilla-1998-features-the-largest-amount-of-fish-ever-put-v0-zxlgygo86hkg1.webp&quot;&gt; &lt;p&gt;The army delivers the pile of fish, and Broderick looks at a guy with a &lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 08 Mar 2026 23:46:13 GMT</pubDate><author>Chris DeLuca</author></item><item><title>The Bride!, 2026</title><link>https://www.chrisdeluca.me/2026/03/07/the-bride.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/03/07/the-bride.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;https://cdn.uploads.micro.blog/111874/2026/1045767-the-bride-2026-0-600-0-900-crop.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;I liked all the themes it was playing with, but it felt muddled and didn’t really hag together for me. Felt like keywords stuffing a plot.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 08 Mar 2026 00:30:39 GMT</pubDate><author>Chris DeLuca</author></item><item><title>Nirvanna the Band the Show the Movie, 2025 - ★★★★★</title><link>https://www.chrisdeluca.me/2026/03/06/nirvanna-the-band-the-show.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/03/06/nirvanna-the-band-the-show.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;https://cdn.uploads.micro.blog/111874/2026/1041012-nirvanna-the-band-the-show-the-movie-0-600-0-900-crop.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;God damn this movie is so funny. I like it better than the show even. So smart at being so stupid. A+. Go see it now.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sat, 07 Mar 2026 02:57:07 GMT</pubDate><author>Chris DeLuca</author></item><item><title>Kyoto Tech Meetup links for March 5, 2026</title><link>https://www.ashryan.io/kyoto-tech-meetup-links-for-march-5-2026/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-links-for-march-5-2026/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Time management, OpenClaw, cherry blossoms, and more&lt;/div&gt;</description><pubDate>Thu, 05 Mar 2026 02:05:48 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>February Community Hack Day wrap-up</title><link>https://www.ashryan.io/february-community-hack-day-wrap-up/</link><guid isPermaLink="true">https://www.ashryan.io/february-community-hack-day-wrap-up/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;A recap of what we built and info on the next hack event in March.&lt;/div&gt;</description><pubDate>Mon, 02 Mar 2026 21:50:50 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>The Brave Little Toaster, 1987</title><link>https://www.chrisdeluca.me/2026/03/01/the-brave-little-toaster.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/03/01/the-brave-little-toaster.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;https://cdn.uploads.micro.blog/111874/2026/39344-the-brave-little-toaster-0-600-0-900-crop.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;I had only seen a small part of this movie when I was maybe six, from under the couch. Really fun to revisit as an adult. I enjoyed it legitimately, but it was also dare I say healing to that little kid who was so scared of it. I think what confused and scared me the most as a child was how mean the characters are to each other. And man does this thing deal with DARK themes. Some banger van dyke parks tunes as well.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 01 Mar 2026 17:51:59 GMT</pubDate><author>Chris DeLuca</author></item><item><title>Godzilla, Mothra and King Ghidorah: Giant Monsters All-Out Attack, 2001</title><link>https://www.chrisdeluca.me/2026/03/01/godzilla-mothra-and-king-ghidorah.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/03/01/godzilla-mothra-and-king-ghidorah.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;https://cdn.uploads.micro.blog/111874/2026/28063-godzilla-mothra-and-king-ghidorah-giant-monsters-all-out-a-0-600-0-90.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;The human characters constantly have plot realizations out of thin air, and there’s way more ghosts than I was expecting.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 01 Mar 2026 17:48:24 GMT</pubDate><author>Chris DeLuca</author></item><item><title>Kyoto Tech Meetup links for February 19, 2026</title><link>https://www.ashryan.io/kyoto-tech-meetup-links-for-february-19-2026/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-links-for-february-19-2026/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&quot;Humans are hard&quot; edition&lt;/div&gt;</description><pubDate>Thu, 19 Feb 2026 01:09:43 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Kyoto Tech Meetup links for Feb 14, 2026</title><link>https://www.ashryan.io/kyoto-tech-meetup-links-for-feb-14-2026/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-links-for-feb-14-2026/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;It&apos;s AI all the way down.&lt;/div&gt;</description><pubDate>Sat, 14 Feb 2026 02:27:09 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Little Nemo: Adventures in Slumberland, 1989</title><link>https://www.chrisdeluca.me/2026/02/10/little-nemo-adventures-in-slumberland.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/02/10/little-nemo-adventures-in-slumberland.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;https://cdn.uploads.micro.blog/111874/2026/37792-little-nemo-adventures-in-slumberland-0-600-0-900-crop.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;This is the only children’s cartoon I know of that nails the whiplash morphing of dream logic. One moment you’re joyfully flying through the air on your bed, then next you’re underwater being chased by a train. &lt;/p&gt;&lt;p&gt;Some people may say Nemo lifts directly from the Wizard of Oz, or The NeverEnding Story. Those people are boring. &lt;/p&gt;&lt;p&gt;Nemo has all the emotional beats of a maudlin, down the middle children’s animated feature of the time, with the bug eyed psychedelia of that dream you kept having as a kid. You know the one.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 10 Feb 2026 13:31:41 GMT</pubDate><author>Chris DeLuca</author></item><item><title>Send Help, 2026 - ★★★★</title><link>https://www.chrisdeluca.me/2026/02/08/send-help.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/02/08/send-help.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;https://cdn.uploads.micro.blog/111874/2026/1084117-send-help-0-600-0-900-crop.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;What a good time at the movies. Saw it in 4DX, which is a gimmick but goofy fun. I don’t think the regal in Astoria’s scent device was working properly, because every smell cue just smelled like lemon pledge.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 08 Feb 2026 19:22:28 GMT</pubDate><author>Chris DeLuca</author></item><item><title>Rafureshia, 1995</title><link>https://www.chrisdeluca.me/2026/02/03/rafureshia.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/02/03/rafureshia.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;https://cdn.uploads.micro.blog/111874/2026/239837-rafflesia-0-600-0-900-crop.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;I can’t and won’t describe what I watched.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 03 Feb 2026 17:45:01 GMT</pubDate><author>Chris DeLuca</author></item><item><title>Kyoto Tech Meetup: January 2026 wrap-up</title><link>https://www.ashryan.io/kyoto-tech-meetup-january-2026-wrap-up/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-january-2026-wrap-up/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Updates from our morning coffee and hack day events last month. Also, this month&apos;s schedule.&lt;/div&gt;</description><pubDate>Tue, 03 Feb 2026 00:12:50 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Mortal Kombat, 1995</title><link>https://www.chrisdeluca.me/2026/01/28/mortal-kombat.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/01/28/mortal-kombat.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;uploads/2026/47281-mortal-kombat-0-600-0-900-crop.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;Let’s go.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 29 Jan 2026 03:59:05 GMT</pubDate><author>Chris DeLuca</author></item><item><title>Interstella 5555: The 5tory of the 5ecret 5tar 5ystem, 2003</title><link>https://www.chrisdeluca.me/2026/01/26/interstella-the-tory-of-the.html</link><guid isPermaLink="true">https://www.chrisdeluca.me/2026/01/26/interstella-the-tory-of-the.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;&lt;img src=&quot;uploads/2026/45654-interstella-5555-the-5tory-of-the-5ecret-5tar-5ystem-0-600-0-900-crop.jpg&quot;&gt;&lt;/p&gt; &lt;p&gt;Such a cool movie for a perfect album.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 26 Jan 2026 05:04:45 GMT</pubDate><author>Chris DeLuca</author></item><item><title>How the Kyoto Tech Meetup website works</title><link>https://www.ashryan.io/how-the-kyoto-tech-meetup-website-works/</link><guid isPermaLink="true">https://www.ashryan.io/how-the-kyoto-tech-meetup-website-works/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;TL;DR: Astro, React, Tailwind, GitHub Actions, GitHub Pages, RSS.&lt;/div&gt;</description><pubDate>Fri, 02 Jan 2026 09:48:16 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>2025 retrospective with shirts</title><link>https://nfraprado.net/post/2025-retrospective-with-shirts.html</link><guid isPermaLink="true">https://nfraprado.net/post/2025-retrospective-with-shirts.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;This year I bought more shirts than ever. Mostly because I decided to go to as many concerts as I possibly could.&lt;/p&gt; &lt;p&gt;With the year coming to a close, I thought this would be a good moment to look back at the shirts I collected throughout the year and see …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 29 Dec 2025 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Kyoto Tech Meetup: 2025 wrap-up</title><link>https://www.ashryan.io/kyoto-tech-meetup-2025-wrap-up/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-2025-wrap-up/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Recapping what the Kyoto Tech Meetup has been up to in 2025.&lt;/div&gt;</description><pubDate>Tue, 23 Dec 2025 02:53:40 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Kyoto Tech Meetup: Dec 11 and 18 Wrap-Ups</title><link>https://www.ashryan.io/kyoto-tech-meetup-dec-11-dec-18/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-dec-11-dec-18/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Highlights from the Kyoto Tech Meetup: engineering management books, Supabase, AI stuff, tech career sites in Japan&lt;/div&gt;</description><pubDate>Thu, 18 Dec 2025 02:17:51 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Kyoto Tech Meetup Community Hack Day Wrap-up for December</title><link>https://www.ashryan.io/kyoto-tech-meetup-community-hack-day-wrap-up-for-december/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-community-hack-day-wrap-up-for-december/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;A recap of the December Kyoto Tech Meetup Community Hack Day at FabCafe Kyoto. AI projects, site features, dev tools, and more!&lt;/div&gt;</description><pubDate>Sun, 14 Dec 2025 04:58:16 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Kyoto Tech Meetup: Dec 4 Wrap-Up</title><link>https://www.ashryan.io/kyoto-tech-meetup-dec-4-wrap-up/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-dec-4-wrap-up/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Highlights from this week’s Kyoto Tech Meetup: AI tools for database design, project shares, and more.&lt;/div&gt;</description><pubDate>Sat, 06 Dec 2025 06:50:47 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>powRSS</title><link>https://www.ashryan.io/powrss/</link><guid isPermaLink="true">https://www.ashryan.io/powrss/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;ashryan.io is now on RSS feed aggregator powRSS.&lt;/div&gt;</description><pubDate>Tue, 02 Dec 2025 03:01:00 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Song of the Month: Andy Williams - Do You Hear What I Hear?</title><link>https://nfraprado.net/post/song-of-the-month-andy-williams-do-you-hear-what-i-hear.html</link><guid isPermaLink="true">https://nfraprado.net/post/song-of-the-month-andy-williams-do-you-hear-what-i-hear.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Slightly late for November, but better late than never!&lt;/p&gt; &lt;p&gt;As November rolled by, and the Christmas mood took over, I put on an &lt;a href=&quot;https://www.youtube.com/watch?v=g8UmqvOqB1A&amp;amp;list=PLBN3i8jrg4Wze3v_KZRPFmnQrTw5jia61&amp;amp;index=1&quot;&gt;old school Christmas songs playlist on YouTube&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Many of the songs I was hearing for the first time. A few of my favorites were &lt;a href=&quot;https://www.youtube.com/watch?v=lvVfIi0mQx4&quot;&gt;Carol of the …&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 01 Dec 2025 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>TIL: 2025-11-25</title><link>https://dviramontes.com/til/20251125</link><guid isPermaLink="true">https://dviramontes.com/til/20251125</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Lorem CLI&lt;/div&gt;</description><pubDate>Tue, 25 Nov 2025 07:00:00 GMT</pubDate><author>David Viramontes</author></item><item><title>Kyoto Tech Meetup Community Hack Day Wrap Up</title><link>https://www.ashryan.io/kyoto-tech-meetup-community-hack-day-wrap-up/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-community-hack-day-wrap-up/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Websites, LLMs, RAG systems, databases, and more at our first Community Hack Day.&lt;/div&gt;</description><pubDate>Sun, 23 Nov 2025 04:24:42 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Kyoto Tech Meetup’s First Hack Day</title><link>https://www.ashryan.io/kyoto-tech-meetups-first-hack-day/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetups-first-hack-day/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;The first Kyoto Tech Meetup Community Hack Day is coming up. We&apos;ve also got a GitHub org and a starter site.&lt;/div&gt;</description><pubDate>Thu, 20 Nov 2025 02:47:57 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>TIL: 2025-11-15</title><link>https://dviramontes.com/til/20251115</link><guid isPermaLink="true">https://dviramontes.com/til/20251115</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Upgrading golang using go&lt;/div&gt;</description><pubDate>Sat, 15 Nov 2025 07:00:00 GMT</pubDate><author>David Viramontes</author></item><item><title>Kyoto Tech Meetup: Nov 13 Wrap-Up ☕</title><link>https://www.ashryan.io/kyoto-tech-meetup-nov-13-wrap-up/</link><guid isPermaLink="true">https://www.ashryan.io/kyoto-tech-meetup-nov-13-wrap-up/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Highlights from the Nov 13 Kyoto Tech Meetup. AI consulting, cybersecurity in Japan, Astro.js, creative side projects, and more.&lt;/div&gt;</description><pubDate>Thu, 13 Nov 2025 01:36:10 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Quietly intelligent app features with OpenAI Agent Builder</title><link>https://www.ashryan.io/quietly-intelligent-app-features-with-openai-agent-builder/</link><guid isPermaLink="true">https://www.ashryan.io/quietly-intelligent-app-features-with-openai-agent-builder/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;How I used OpenAI’s Agent Builder to power an “invisible AI” feature in Collxn. What I learned about LLM reliability, schema design, and control.&lt;/div&gt;</description><pubDate>Tue, 04 Nov 2025 05:51:05 GMT</pubDate><author>Ash Ryan Arnwine</author></item><item><title>Song of the Month: Christopher Cross - Sailing</title><link>https://nfraprado.net/post/song-of-the-month-christopher-cross-sailing.html</link><guid isPermaLink="true">https://nfraprado.net/post/song-of-the-month-christopher-cross-sailing.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;This month I went on a two week long road trip through California with a friend. We sailed on Lake Tahoe, walked over sand dunes in Death Valley, and hiked between the mountains in Yosemite Valley. We saw the oldest trees on Earth at the Ancient Bristlecone Pine Forest, and …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 28 Oct 2025 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Song of the Month: Moin - Lift You</title><link>https://nfraprado.net/post/song-of-the-month-moin-lift-you.html</link><guid isPermaLink="true">https://nfraprado.net/post/song-of-the-month-moin-lift-you.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;My pick for song of the month this time around is a track that played at &lt;a href=&quot;https://www.spectacletheater.com/&quot;&gt;Spectacle Theater&lt;/a&gt; before the movie started (the movie was &lt;a href=&quot;https://www.spectacletheater.com/i-know-youre-out-there/#miragemen&quot;&gt;Mirage Men (2013)&lt;/a&gt;, by the way). The lyrics are very poetic, and the instrumentation has this eerie and underground feel to it. It&apos;s a great …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 30 Sep 2025 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Pin collection update (128 pins in three images and a table)</title><link>https://nfraprado.net/post/pin-collection-update-128-pins-in-three-images-and-a-table.html</link><guid isPermaLink="true">https://nfraprado.net/post/pin-collection-update-128-pins-in-three-images-and-a-table.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;It&apos;s been almost two years since I posted the &lt;a href=&quot;/post/collecting-pins.html&quot;&gt;&quot;Collecting pins&quot; post&lt;/a&gt;! It&apos;s time I shared an update.&lt;/p&gt; &lt;p&gt;Somewhere along the way I decided to get more organized and started a spreadsheet to track all the details about my pin collection (has this crossed the line to the unhealthy hobby …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 04 Sep 2025 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Song of the Month: Soundgarden - Black Hole Sun</title><link>https://nfraprado.net/post/song-of-the-month-soundgarden-black-hole-sun.html</link><guid isPermaLink="true">https://nfraprado.net/post/song-of-the-month-soundgarden-black-hole-sun.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Just two days ago I went to an immersive theatrical experience called &lt;a href=&quot;https://www.theshed.org/program/444-violas-room&quot;&gt;Viola&apos;s Room&lt;/a&gt;. It started in a girl&apos;s bedroom with dim lighting and a few beds made on the floor as in a sleepover. On the headphones, a beautiful song started playing. The moment was so magical it&apos;s hard …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 31 Aug 2025 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Song of the Month: Junko Yagami - Bay City</title><link>https://nfraprado.net/post/song-of-the-month-junko-yagami-bay-city.html</link><guid isPermaLink="true">https://nfraprado.net/post/song-of-the-month-junko-yagami-bay-city.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Today I want to try starting something new. Every month I&apos;ll share one song that stood out to me throughout the month.&lt;/p&gt; &lt;p&gt;For this first one, even though it&apos;s already midway through August, I still really feel the need to share this song that has marked my days throughout July …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 12 Aug 2025 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>localmart: why, what, and a visualization</title><link>https://peter.direct/blog/localmart-visualization/</link><guid isPermaLink="true">https://peter.direct/blog/localmart-visualization/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;h2 id=&quot;why-what&quot;&gt;why &amp;amp; what&amp;lt;/h2&amp;gt; &lt;p&gt;For the first couple months of the year, I was working on an idea called &lt;strong&gt;localmart&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The motivation behind of &lt;strong&gt;localmart&amp;lt;/strong&amp;gt; is this:&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;strong&gt;&lt;strong&gt; &lt;li&gt;Lots of people today order things from Amazon that they could get in their neighborhood.&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;That means that money is being extracted from local neighborhoods into global corporations.&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;So what if we were able to provide the &lt;a href=&quot;http://Amazon.com&quot;&gt;Amazon.com&amp;lt;/a&amp;gt; experience, but all the goods are sourced from local stores so that your money gets reinvested into your neighborhood?&amp;lt;/li&amp;gt; &amp;lt;/ol&amp;gt; &lt;p&gt;So in short, &lt;strong&gt;localmart&amp;lt;/strong&amp;gt; is a service where you order local goods from local stores, and it gets delivered within a day or two.&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/p&gt;&lt;h2 id=&quot;visualization&quot;&gt;&lt;strong&gt;visualization&amp;lt;/h2&amp;gt; &lt;p&gt;I&apos;ve had a visualization in mind to explain &lt;strong&gt;localmart&amp;lt;/strong&amp;gt; to folks, so here&apos;s a quick version.&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Cash is flowing out to corporations, but with more local orders, cash stays in the neighborhood and makes the neighborhood healthier.&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/p&gt;&lt;div id=&quot;localmart-visualization&quot;&gt;&lt;strong&gt; &lt;div id=&quot;controls&quot;&gt; &lt;div&gt;Orders in Astoria&amp;lt;/div&amp;gt; &lt;div&gt; &lt;span id=&quot;current-time&quot;&gt;June 2025&amp;lt;/span&amp;gt; &amp;lt;/div&amp;gt; &lt;div id=&quot;money-stats&quot;&gt; &lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;/a&gt;&lt;/li&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/ol&gt;&lt;/h2&gt;&lt;/div&gt;</description><pubDate>Sat, 28 Jun 2025 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>Experiment #3: Finger Painting</title><link>https://peter.direct/lab/experiment-3/</link><guid isPermaLink="true">https://peter.direct/lab/experiment-3/</guid><pubDate>Fri, 27 Jun 2025 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>TIL: 2025-06-27</title><link>https://dviramontes.com/til/20250627</link><guid isPermaLink="true">https://dviramontes.com/til/20250627</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;IndieWeb Ring&lt;/div&gt;</description><pubDate>Fri, 27 Jun 2025 00:00:00 GMT</pubDate><author>David Viramontes</author></item><item><title>Experiment #2: Go Board</title><link>https://peter.direct/lab/experiment-2/</link><guid isPermaLink="true">https://peter.direct/lab/experiment-2/</guid><pubDate>Thu, 26 Jun 2025 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>Experiment #1: Minus, Plus</title><link>https://peter.direct/lab/experiment-1/</link><guid isPermaLink="true">https://peter.direct/lab/experiment-1/</guid><pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>TIL: 2025-05-09</title><link>https://dviramontes.com/til/20250509</link><guid isPermaLink="true">https://dviramontes.com/til/20250509</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;closest(selector) and matches(selector)&lt;/div&gt;</description><pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate><author>David Viramontes</author></item><item><title>A new theme for the blog (now with 0% JavaScript!)</title><link>https://nfraprado.net/post/a-new-theme-for-the-blog-now-with-0-javascript.html</link><guid isPermaLink="true">https://nfraprado.net/post/a-new-theme-for-the-blog-now-with-0-javascript.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;I&apos;ve recently updated the blog&apos;s theme and I felt I should make a post not only to document the reason but also to archive pictures of the blog before and after the change for the future.&lt;/p&gt; &lt;p&gt;When I created this blog, I chose &lt;a href=&quot;https://github.com/gunchu/nikhil-theme&quot;&gt;nikhil-theme&lt;/a&gt; as the theme because I found …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 04 May 2025 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>TIL: 2025-04-19</title><link>https://dviramontes.com/til/20250419</link><guid isPermaLink="true">https://dviramontes.com/til/20250419</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;go doc&lt;/div&gt;</description><pubDate>Sat, 19 Apr 2025 06:00:00 GMT</pubDate><author>David Viramontes</author></item><item><title>TIL: 2025-03-25</title><link>https://dviramontes.com/til/20250325</link><guid isPermaLink="true">https://dviramontes.com/til/20250325</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;YAML&apos;s special indicators &gt; and | handle of multiline strings&lt;/div&gt;</description><pubDate>Tue, 25 Mar 2025 00:00:00 GMT</pubDate><author>David Viramontes</author></item><item><title>Using stow to manage dotfiles on multiple machines</title><link>https://dviramontes.com/posts/stow</link><guid isPermaLink="true">https://dviramontes.com/posts/stow</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;If you work across multiple systems, you&apos;ve likely accumulated a collection of configuration files over time.&lt;/div&gt;</description><pubDate>Sat, 01 Mar 2025 05:35:07 GMT</pubDate><author>David Viramontes</author></item><item><title>In search of the perfect pin necklace</title><link>https://nfraprado.net/post/in-search-of-the-perfect-pin-necklace.html</link><guid isPermaLink="true">https://nfraprado.net/post/in-search-of-the-perfect-pin-necklace.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Last year, on the &lt;a href=&quot;/post/collecting-pins.html&quot;&gt;&quot;Collecting pins&quot; post&lt;/a&gt;, I mentioned that I usually wear my pins on a beanie, but was still looking for a good alternative for the warmer months.&lt;/p&gt; &lt;p&gt;After thinking more about it, I realized a necklace would be the way to go. It doesn&apos;t depend on any …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sat, 16 Nov 2024 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>CardOS: Now compiling without Arduino!</title><link>https://nfraprado.net/post/cardos-now-compiling-without-arduino.html</link><guid isPermaLink="true">https://nfraprado.net/post/cardos-now-compiling-without-arduino.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;In the &lt;a href=&quot;/post/cardos-writing-an-os-for-the-cardputer.html&quot;&gt;&quot;CardOS: Writing an OS for the Cardputer&quot; post&lt;/a&gt; I shared about the OS that I&apos;m writing for the Cardputer and that the next step was to move away from the Arduino toolchain. It took me two months but I finally did it. The end product was &lt;a href=&quot;https://codeberg.org/nfraprado/cardOS/commit/85553f797cf0877e4c88a8e549052a445d00e7d1&quot;&gt;this commit …&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Wed, 31 Jul 2024 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>CardOS: Writing an OS for the Cardputer</title><link>https://nfraprado.net/post/cardos-writing-an-os-for-the-cardputer.html</link><guid isPermaLink="true">https://nfraprado.net/post/cardos-writing-an-os-for-the-cardputer.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;I recently got the &lt;a href=&quot;https://docs.m5stack.com/en/core/Cardputer&quot;&gt;M5Stack&apos;s Cardputer&lt;/a&gt;. I was motivated to get it because I knew other people personally that had it too, so we would be able to share our progress, but I was worried it might end up being just another board that sits in my closet forever untouched …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sat, 25 May 2024 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Binary Search in Elixir</title><link>https://dviramontes.com/posts/binary-search-elixir</link><guid isPermaLink="true">https://dviramontes.com/posts/binary-search-elixir</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;Let&apos;s implement a quick and dirty version of binary search, and we&apos;ll improve upon it after identifying the base case and the recursive case.&lt;/div&gt;</description><pubDate>Fri, 03 May 2024 12:00:00 GMT</pubDate><author>David Viramontes</author></item><item><title>vCard + RSS as an alternative to social media</title><link>https://nfraprado.net/post/vcard-rss-as-an-alternative-to-social-media.html</link><guid isPermaLink="true">https://nfraprado.net/post/vcard-rss-as-an-alternative-to-social-media.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Last year after talking for a while with someone during a conference they asked me for my LinkedIn to be able to connect with me, to which I answered I didn&apos;t have one.&lt;/p&gt; &lt;p&gt;It was many years ago when I decided to leave social media. I don&apos;t miss it. Instant …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Fri, 22 Mar 2024 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Collecting pins</title><link>https://nfraprado.net/post/collecting-pins.html</link><guid isPermaLink="true">https://nfraprado.net/post/collecting-pins.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;It started innocently about one year ago as I was looking for a gift for a friend. We played a lot of League of Legends and Ragnarok Online back in the day, so I wanted to give him something to remember that. Eventually I came across these pins:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;https://www.etsy.com/listing/587004849/poring-poporing-slime-monter-fanart-hard&quot;&gt;Poring/Poporing …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Thu, 23 Nov 2023 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Meeting the Linux community at my first ELC</title><link>https://nfraprado.net/post/meeting-the-linux-community-at-my-first-elc.html</link><guid isPermaLink="true">https://nfraprado.net/post/meeting-the-linux-community-at-my-first-elc.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;This month I attended the Embedded Linux Conference Europe, which was co-located with the Open Source Summit Europe, and took place in Dublin, Ireland. This was my first time attending a Linux conference in-person as a contributor and it was a very special experience.&lt;/p&gt; &lt;p&gt;This wasn&apos;t my first ever in-person …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 29 Sep 2022 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Moving the blog to Codeberg</title><link>https://nfraprado.net/post/moving-the-blog-to-codeberg.html</link><guid isPermaLink="true">https://nfraprado.net/post/moving-the-blog-to-codeberg.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;As someone who cares about FOSS, I&apos;m always happy to move to a FOSS alternative when one shows up, provided there aren&apos;t any big drawbacks.&lt;/p&gt; &lt;p&gt;Back when I was in University and starting to learn the ways of Git, I only knew about two Git hosting options: GitHub, the mainstream …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 29 Aug 2022 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Mac setup guide for web development</title><link>https://dviramontes.com/posts/mac-setup-guide</link><guid isPermaLink="true">https://dviramontes.com/posts/mac-setup-guide</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;An opinionated setup guide for web development on a mac&lt;/div&gt;</description><pubDate>Thu, 28 Jul 2022 05:35:07 GMT</pubDate><author>David Viramontes</author></item><item><title>Using emojis in matplotlib</title><link>https://nfraprado.net/post/using-emojis-in-matplotlib.html</link><guid isPermaLink="true">https://nfraprado.net/post/using-emojis-in-matplotlib.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Last month, as I was writing the blog post with all the statistics for the blog&apos;s two year anniversary, the &lt;a href=&quot;/post/blog-statistics-after-two-years.html&quot;&gt;&quot;Blog statistics after two years&quot; post&lt;/a&gt;, I decided that I really wanted to have a plot with emojis. From the moment I thought of this I knew it couldn&apos;t simply …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Wed, 20 Jul 2022 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Blog statistics after two years</title><link>https://nfraprado.net/post/blog-statistics-after-two-years.html</link><guid isPermaLink="true">https://nfraprado.net/post/blog-statistics-after-two-years.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Wow, it&apos;s been two years since I&apos;ve started this blog! I&apos;m really happy that I&apos;ve still managed to keep up the one post per month. Hopefully I&apos;ll be able to keep it up for the third one!&lt;/p&gt; &lt;p&gt;For this post I thought it would be fun to look through some …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 20 Jun 2022 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Discovering the comfort of loudspeakers</title><link>https://nfraprado.net/post/discovering-the-comfort-of-loudspeakers.html</link><guid isPermaLink="true">https://nfraprado.net/post/discovering-the-comfort-of-loudspeakers.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;In 2014, while on a school trip to Germany, I bought a Razer Tiamat headset. The sound was great and for the most part it was comfortable. Its only issue was the clamping force, which was a bit too much, and gave me headaches after long hours of use.&lt;/p&gt; &lt;p&gt;I …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Fri, 27 May 2022 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Learning from SerenityOS</title><link>https://nfraprado.net/post/learning-from-serenityos.html</link><guid isPermaLink="true">https://nfraprado.net/post/learning-from-serenityos.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;One day I was scrolling through Reddit as usual, when I saw a post linking to this blog post: &lt;a href=&quot;https://awesomekling.github.io/I-quit-my-job-to-focus-on-SerenityOS-full-time/&quot;&gt;I quit my job to focus on SerenityOS full time&lt;/a&gt;. I was intrigued by the backstory, the premise of this OS, and also by the fact that its development was &lt;a href=&quot;https://www.youtube.com/c/AndreasKling/videos&quot;&gt;being …&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Fri, 29 Apr 2022 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Running LineageOS on my Nexus 5X</title><link>https://nfraprado.net/post/running-lineageos-on-my-nexus-5x.html</link><guid isPermaLink="true">https://nfraprado.net/post/running-lineageos-on-my-nexus-5x.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;This month marks one year since I bought a Nexus 5X and started using LineageOS, so I thought I&apos;d share my experience.&lt;/p&gt; &lt;div id=&quot;setting-up&quot;&gt; &lt;h2&gt;Setting up&lt;/h2&gt; &lt;p&gt;About one year ago, &lt;a href=&quot;https://andrealmeid.com/&quot;&gt;a friend&lt;/a&gt; told me he found a really good deal for a Nexus 5X online. The Nexus 5X is an old phone …&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description><pubDate>Wed, 30 Mar 2022 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Learning x86-64 assembly basics</title><link>https://nfraprado.net/post/learning-x86-64-assembly-basics.html</link><guid isPermaLink="true">https://nfraprado.net/post/learning-x86-64-assembly-basics.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Recently I decided to learn assembly. I already had a reasonable understanding of how it worked due to some classes that touched the subject in university, however I never had the opportunity to really write assembly code.&lt;/p&gt; &lt;p&gt;Since my everyday computer is an x86-64 machine, it made most sense to …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Fri, 25 Feb 2022 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Making internal linking in pelican effortless</title><link>https://nfraprado.net/post/making-internal-linking-in-pelican-effortless.html</link><guid isPermaLink="true">https://nfraprado.net/post/making-internal-linking-in-pelican-effortless.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;One interesting feature of &lt;a href=&quot;https://github.com/getpelican/pelican&quot;&gt;Pelican&lt;/a&gt;, the static site generator I use for this blog, is the internal link expansion syntax with &lt;code&gt;{}&lt;/code&gt;. It is documented &lt;a href=&quot;https://docs.getpelican.com/en/latest/content.html?highlight=static#linking-to-internal-content&quot;&gt;here&lt;/a&gt;. Some examples are &lt;code&gt;{filename}&lt;/code&gt;, &lt;code&gt;{static}&lt;/code&gt; and &lt;code&gt;{author}&lt;/code&gt;. The purpose of the syntax is to have shorter and easier aliases to link to internal content in …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 20 Jan 2022 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>The menus in my system</title><link>https://nfraprado.net/post/the-menus-in-my-system.html</link><guid isPermaLink="true">https://nfraprado.net/post/the-menus-in-my-system.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Another post going through stuff I set up for my desktop environment a couple years ago and that have used ever since 🙂. This time I&apos;ll show the menus I&apos;ve created using &lt;a href=&quot;https://github.com/davatorium/rofi&quot;&gt;rofi&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;So, what is &lt;a href=&quot;https://github.com/davatorium/rofi&quot;&gt;rofi&lt;/a&gt;? It&apos;s basically a program where you feed a list of options to it, and …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 28 Dec 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>The blocks in my status bar</title><link>https://nfraprado.net/post/the-blocks-in-my-status-bar.html</link><guid isPermaLink="true">https://nfraprado.net/post/the-blocks-in-my-status-bar.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Five years ago when I moved to the i3 window manager, I started using its status bar, the i3bar. It is text based, and it&apos;s up to you what gets shown there. However it is not very modular: it&apos;s weird to combine different information to be shown since everything has …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Fri, 26 Nov 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Resurrecting a computer on the go</title><link>https://nfraprado.net/post/resurrecting-a-computer-on-the-go.html</link><guid isPermaLink="true">https://nfraprado.net/post/resurrecting-a-computer-on-the-go.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Earlier this month I was spending a few weeks in another country. It was late at night and I was once again looking over my personal files and thinking if there was a better way to organize them in folders.&lt;/p&gt; &lt;p&gt;After thinking for a bit I decided on a new …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sat, 23 Oct 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>My journey to a good backup system</title><link>https://nfraprado.net/post/my-journey-to-a-good-backup-system.html</link><guid isPermaLink="true">https://nfraprado.net/post/my-journey-to-a-good-backup-system.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;I&apos;m a bit of a data hoarder. I still have some of the first programs I&apos;ve ever written, photos I&apos;ve taken on trips and drawings I did many years ago, to name a few. And since I don&apos;t trust some company to store all of this data for me, it …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 27 Sep 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Owning my Kindle</title><link>https://nfraprado.net/post/owning-my-kindle.html</link><guid isPermaLink="true">https://nfraprado.net/post/owning-my-kindle.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Several years ago my mother gave me a Kindle Paperwhite 2. I have read a few books on it since, but it never felt like it was really mine. Locking the screen showed some annoying ad, all books bought from Amazon were protected by DRM, books transferred through USB only …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 29 Aug 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Blog customizations</title><link>https://nfraprado.net/post/blog-customizations.html</link><guid isPermaLink="true">https://nfraprado.net/post/blog-customizations.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;I&apos;ve been using &lt;a href=&quot;https://github.com/getpelican/pelican/&quot;&gt;pelican&lt;/a&gt; as my static blog generator since I started this blog about one year ago. It only took a bit of configuration to get the blog up and running, and a bit of searching through &lt;a href=&quot;http://pelicanthemes.com/&quot;&gt;pelicanthemes&lt;/a&gt; to find &lt;a href=&quot;https://github.com/gunchu/nikhil-theme&quot;&gt;nikhil-theme&lt;/a&gt; which is the theme I&apos;m still using.&lt;/p&gt; &lt;p&gt;While …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sat, 24 Jul 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>One year of blog</title><link>https://nfraprado.net/post/one-year-of-blog.html</link><guid isPermaLink="true">https://nfraprado.net/post/one-year-of-blog.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;It&apos;s been a full year since I started this blog! So I thought I&apos;d take this chance to talk a bit about the blog itself: How it started and my thoughts on it.&lt;/p&gt; &lt;div id=&quot;origins&quot;&gt; &lt;h2&gt;Origins&lt;/h2&gt; &lt;p&gt;I had already thought a bit about having my own blog. Having a little corner of …&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description><pubDate>Tue, 22 Jun 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Keeping track of my packages</title><link>https://nfraprado.net/post/keeping-track-of-my-packages.html</link><guid isPermaLink="true">https://nfraprado.net/post/keeping-track-of-my-packages.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;As I previously mentioned in the &lt;a href=&quot;/post/moving-to-wayland.html&quot;&gt;&quot;Moving to Wayland&quot; post&lt;/a&gt;, I recently moved to a new computer. Moving can be very annoying if you use a heavily configured system and don&apos;t have all the configurations easily available to just move over. Since I do regular backups of my files, which …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 20 May 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Learning music theory by writing melodies</title><link>https://nfraprado.net/post/learning-music-theory-by-writing-melodies.html</link><guid isPermaLink="true">https://nfraprado.net/post/learning-music-theory-by-writing-melodies.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Hey, first non-technical blog post 🙂.&lt;/p&gt; &lt;p&gt;Anyway, I haven&apos;t talked about this before here, but I&apos;m really interested in playing the piano. When I was younger I took some guitar classes, but I always wanted to play the piano, and a couple years ago I finally got one! I&apos;ve been playing …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 20 Apr 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Moving to Wayland</title><link>https://nfraprado.net/post/moving-to-wayland.html</link><guid isPermaLink="true">https://nfraprado.net/post/moving-to-wayland.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;In the middle of January, my computer decided to surprise me, and not in a good way. Differently from all the quirks I&apos;ve come to expect from it after all these 6 years of use — faulty keyboard, flashing screen, bad audio jack — this time it was worse, and it wasn&apos;t …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 21 Mar 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Ledsticker: My first holistic SW + HW project</title><link>https://nfraprado.net/post/ledsticker-my-first-holistic-sw-hw-project.html</link><guid isPermaLink="true">https://nfraprado.net/post/ledsticker-my-first-holistic-sw-hw-project.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;It was in the middle of 2019. I was taking classes in Embedded Systems Laboratory and had to make the final project of my choice. I had the idea to do some sort of a Guitar Hero using a keyboard for the input, an 8x8 LED matrix to display the …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sat, 20 Feb 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Organization beyond Taskwarrior</title><link>https://nfraprado.net/post/organization-beyond-taskwarrior.html</link><guid isPermaLink="true">https://nfraprado.net/post/organization-beyond-taskwarrior.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;In the previous article of this series, I went into all my Taskwarrior and VIT customizations, and my workflow with them, that enables me to organize my tasks and get them done. Tasks, however, aren&apos;t the whole story when getting organized.&lt;/p&gt; &lt;p&gt;Another crucial component of organization is having a calendar …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Wed, 20 Jan 2021 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Managing my tasks using VIT</title><link>https://nfraprado.net/post/managing-my-tasks-using-vit.html</link><guid isPermaLink="true">https://nfraprado.net/post/managing-my-tasks-using-vit.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Two years ago I decided to get more organized about my life. During that time I read the &lt;a href=&quot;https://en.wikipedia.org/wiki/Getting_Things_Done&quot;&gt;Getting Things Done&lt;/a&gt; book and discovered &lt;a href=&quot;https://taskwarrior.org/&quot;&gt;Taskwarrior&lt;/a&gt;, a task manager for the terminal which doesn&apos;t get in the way.&lt;/p&gt; &lt;p&gt;I greatly appreciated Taskwarrior&apos;s simplicity and customizability, but after some time, the need …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 22 Dec 2020 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Porting a flash LED driver upstream</title><link>https://nfraprado.net/post/porting-a-flash-led-driver-upstream.html</link><guid isPermaLink="true">https://nfraprado.net/post/porting-a-flash-led-driver-upstream.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Now that I had a working serial cable for my Nexus 5, as described in the &lt;a href=&quot;/post/making-an-uart-cable-for-the-nexus-5.html&quot;&gt;&quot;Making an UART cable for the Nexus 5&quot; post&lt;/a&gt;, I was ready to face some action and help in upstreaming.&lt;/p&gt; &lt;p&gt;Looking through &lt;a href=&quot;https://masneyb.github.io/nexus-5-upstream/TODO.html&quot;&gt;Brian Masney&apos;s TODO page&lt;/a&gt; there were a couple options, but the one …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Fri, 20 Nov 2020 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Bulk file editing with ranger</title><link>https://nfraprado.net/post/bulk-file-editing-with-ranger.html</link><guid isPermaLink="true">https://nfraprado.net/post/bulk-file-editing-with-ranger.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;My file manager of choice is &lt;a href=&quot;https://ranger.github.io/&quot;&gt;ranger&lt;/a&gt;. It&apos;s terminal-based, provides keybind mapping for everything making me more efficient in navigating my files, and it&apos;s incredibly extensible by enabling the creation of custom commands in &lt;strong&gt;python&lt;/strong&gt;. If that wasn&apos;t enough, it also has a ton of other great features (extensible file …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 20 Oct 2020 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Playlist generation with MPD</title><link>https://nfraprado.net/post/playlist-generation-with-mpd.html</link><guid isPermaLink="true">https://nfraprado.net/post/playlist-generation-with-mpd.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Music is life. I really love listening to music, although not the same kind of music all the time. Most of the time though, anything goes: I like to listen to any of the songs I have at random. But when I&apos;m doing something that needs concentrating (like writing this …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 20 Sep 2020 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Automatic context detection for Taskwarrior</title><link>https://nfraprado.net/post/automatic-context-detection-for-taskwarrior.html</link><guid isPermaLink="true">https://nfraprado.net/post/automatic-context-detection-for-taskwarrior.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;One of the main ideas of &lt;a href=&quot;https://en.wikipedia.org/wiki/Getting_Things_Done&quot;&gt;GTD&lt;/a&gt; is to have a context associated with each task, so that it is very easy to see which tasks can be done in your current context. I organize my tasks with &lt;a href=&quot;https://taskwarrior.org/&quot;&gt;Taskwarrior&lt;/a&gt;, so to make it work with contexts, when adding a new …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 24 Aug 2020 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Setting up mbsync to work with XOAUTH2</title><link>https://nfraprado.net/post/setting-up-mbsync-to-work-with-xoauth2.html</link><guid isPermaLink="true">https://nfraprado.net/post/setting-up-mbsync-to-work-with-xoauth2.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;For a long time I used &lt;a href=&quot;https://www.offlineimap.org/&quot;&gt;offlineimap&lt;/a&gt; to synchronize my emails between the email providers and my computer. Having access to all my emails offline on my computer is pretty handy. But after seeing the &lt;a href=&quot;https://people.kernel.org/mcgrof/replacing-offlineimap-with-mbsync&quot;&gt;brutal efficiency advantage of mbsync over offlineimap&lt;/a&gt;, and having had delay issues with offlineimap myself …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 30 Jul 2020 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Making an UART cable for the Nexus 5</title><link>https://nfraprado.net/post/making-an-uart-cable-for-the-nexus-5.html</link><guid isPermaLink="true">https://nfraprado.net/post/making-an-uart-cable-for-the-nexus-5.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Recently, me and &lt;a href=&quot;https://andrealmeid.com/&quot;&gt;a friend&lt;/a&gt; started digging into making the Nexus 5 run the mainline Linux kernel. The purpose of this is, apart from a great learning experience, to make the Nexus 5 run a Linux distro, like &lt;a href=&quot;https://postmarketos.org/&quot;&gt;PostmarketOS&lt;/a&gt;, instead of Android, while also having lifetime updates delivered from the …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 30 Jun 2020 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Creating movie and game lists using Taskwarrior</title><link>https://nfraprado.net/post/creating-movie-and-game-lists-using-taskwarrior.html</link><guid isPermaLink="true">https://nfraprado.net/post/creating-movie-and-game-lists-using-taskwarrior.html</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;I like watching movies and playing games, but I also like to keep track of which movies I&apos;ve watched and which games I&apos;ve beaten. I also got into the habit of rating each movie I watch. For the longest time, though, I have kept track of these collections informally in …&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 25 May 2020 03:00:00 GMT</pubDate><author>Nicolas F. R. A. Prado</author></item><item><title>Working with Electron</title><link>https://peter.direct/blog/working-with-electron/</link><guid isPermaLink="true">https://peter.direct/blog/working-with-electron/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Working with &lt;a href=&quot;https://electron.atom.io/&quot;&gt;Electron&amp;lt;/a&amp;gt; is a pleasure. I just built an app called &lt;/a&gt;&lt;a href=&quot;http://redub.audio&quot;&gt;Redub&amp;lt;/a&amp;gt; with it. For the uninitiated, here is how the creators describe Electron:&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;a href=&quot;http://redub.audio&quot;&gt; &lt;p&gt;Electron is a framework for creating native applications with web technologies like JavaScript, HTML, and CSS.&amp;lt;/p&amp;gt; &amp;lt;/blockquote&amp;gt; &lt;/p&gt;&lt;p&gt;Most programmers know how to build web apps. Now, with that same knowledge, you can build cross-platform desktop apps.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;http://redub.audio&quot;&gt;Electron gets a &lt;/a&gt;&lt;a href=&quot;https://josephg.com/blog/electron-is-flash-for-the-desktop/&quot;&gt;lot&amp;lt;/a&amp;gt; &lt;/a&gt;&lt;a href=&quot;https://medium.com/@caspervonb/electron-is-cancer-b066108e6c32&quot;&gt;of&amp;lt;/a&amp;gt; &lt;/a&gt;&lt;a href=&quot;http://sircmpwn.github.io/2016/11/24/Electron-considered-harmful.html&quot;&gt;crap&amp;lt;/a&amp;gt; for being too resource intensive and for enabling lazy developers. The haters say that better frameworks for desktop apps already exist and that you should use those instead.&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://sircmpwn.github.io/2016/11/24/Electron-considered-harmful.html&quot;&gt;They&apos;re right, Electron apps are more intensive than I&apos;d like. For those unaware, it&apos;s because every app has a full browser baked into it. That&apos;s how you&apos;re able to use Javascript, HTML, and CSS.&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://sircmpwn.github.io/2016/11/24/Electron-considered-harmful.html&quot;&gt;But let me be the first to say: the haters are missing the point, as usual. The real value of Electron is that it lets you move from &lt;strong&gt;random idea&amp;lt;/strong&amp;gt; to &lt;strong&gt;cross-platform app&amp;lt;/strong&amp;gt; fast, using the web dev knowledge you probably already have (which also means you have a huge community to draw from).&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://sircmpwn.github.io/2016/11/24/Electron-considered-harmful.html&quot;&gt;&lt;strong&gt;&lt;strong&gt;Also, it&apos;s not like you the performance problems can&apos;t be addressed. Solutions are already being proposed. For example, there&apos;s talks of an &lt;/strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/electron/electron/issues/673&quot;&gt;&quot;Electron runtime&quot;&amp;lt;/a&amp;gt;. Basically, every Electron app on your system would share a s&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;</description><pubDate>Sun, 12 Nov 2017 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>Insert an audio clip to a video file with FFMPEG</title><link>https://peter.direct/blog/splice-audio/</link><guid isPermaLink="true">https://peter.direct/blog/splice-audio/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;h3 id=&quot;the-goal&quot;&gt;The goal&amp;lt;/h3&amp;gt; &lt;p&gt;For a &lt;a href=&quot;https://github.com/azlyth/redub&quot;&gt;hobby project of mine&amp;lt;/a&amp;gt;, I wanted to be able to merge an audio clip into the existing audio track of a video file.&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;/h3&gt;&lt;h3 id=&quot;the-command&quot;&gt;&lt;a href=&quot;https://github.com/azlyth/redub&quot;&gt;The command&amp;lt;/h3&amp;gt; &lt;p&gt;After struggling for an hour or two, I finally came up with the correct incantation of the command &lt;code&gt;ffmpeg&amp;lt;/code&amp;gt; to overlay an audio clip to a video file:&amp;lt;/p&amp;gt; &lt;/code&gt;&lt;/p&gt;&lt;pre data-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;code data-lang=&quot;bash&quot;&gt;ffmpeg \ -i movie.mkv \ -i new-audio-clip.mp3 \ -filter_complex &quot;[1:0] adelay=2728000|2728000 [delayed];[0:1][delayed] amix=inputs=2&quot; \ -map 0:0 \ -c:a aac -strict -2 \ -c:v copy \ output.mp4 &amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt; &lt;h3 id=&quot;the-explanation&quot;&gt;The explanation&amp;lt;/h3&amp;gt; &lt;p&gt;Line by line:&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;strong&gt;-i movie.mkv&amp;lt;/strong&amp;gt;: set the video/audio file as an input&amp;lt;/li&amp;gt; &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;strong&gt;-i new-audio-clip.mp3&amp;lt;/strong&amp;gt;: set the audio clip as an input&amp;lt;/li&amp;gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;-filter_complex &quot;...&quot;&amp;lt;/strong&amp;gt;: specify the two following filters: &lt;ul&gt; &lt;li&gt;&lt;strong&gt;&quot;[1:0] adelay=2728000|2728000 [delayed]&amp;lt;/strong&amp;gt;: the adelay filter, specifically: &lt;ul&gt; &lt;li&gt;&lt;strong&gt;[1:0]&amp;lt;/strong&amp;gt;: using the second input file&apos;s first stream&amp;lt;/li&amp;gt; &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;strong&gt;adelay=2728000|2728000&amp;lt;/strong&amp;gt;: add a delay of 2,728,000 milliseconds to both channels of the audio (the left and right channels, because the audio is stereo)&amp;lt;/li&amp;gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;[delayed]&amp;lt;/strong&amp;gt;: assign the name &quot;delayed&quot; to the new stream&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;/li&amp;gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;[0:1][delayed] amix=inputs=2&amp;lt;/strong&amp;gt;: the amix filter, specifically: &lt;ul&gt; &lt;li&gt;&lt;strong&gt;[0:1][delayed]&amp;lt;/strong&amp;gt;: using the first input&apos;s second stream and the &quot;delayed&quot; stream&amp;lt;/li&amp;gt; &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;strong&gt;amix=inputs=2&amp;lt;/strong&amp;gt;: mix the two audio streams (NOTE: I&apos;m not 100% on the meaning of &lt;strong&gt;inputs=2&amp;lt;/strong&amp;gt; here)&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/h3&gt;&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;</description><pubDate>Thu, 26 Oct 2017 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>A React Native library to run commands over SSH</title><link>https://peter.direct/blog/react-native-ssh/</link><guid isPermaLink="true">https://peter.direct/blog/react-native-ssh/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;For my React Native app &lt;a href=&quot;https://github.com/azlyth/hooks&quot;&gt;Hooks&amp;lt;/a&amp;gt;, I wrote some native Android code to enable the running of arbitrary commands over SSH.&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/azlyth/hooks&quot;&gt;I&apos;ve now added the iOS side, and after some refactoring, the SSH code for both platforms is now its own library: &lt;/a&gt;&lt;a href=&quot;https://github.com/azlyth/react-native-ssh&quot;&gt;react-native-ssh&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/azlyth/react-native-ssh&quot;&gt;There are no tests and it&apos;s very light on the error handling. But I figured I&apos;d put it out there for others to use and/or improve upon.&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;h2 id=&quot;native-dependency-pains&quot;&gt;&lt;a href=&quot;https://github.com/azlyth/react-native-ssh&quot;&gt;Native dependency pains&amp;lt;/h2&amp;gt; &lt;p&gt;Gradle (the Android build system) lets you specify dependencies from Maven (Java&apos;s package repository). This meant that including the Android SSH library I needed was a single line. Nice and easy.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;Installing third-party dependencies on the iOS side of things is a pain, though. First, a disclaimer: I&apos;m by no means an iOS developer, and have only dealt with XCode and CocoaPods a handful of times.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;I first tried to make my library a pod to be installed via CocoaPods, which would allow it to have its own dependencies. However, there are two problems with installing a React Native library as a pod:&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;/a&gt;&lt;ul&gt;&lt;a href=&quot;https://github.com/azlyth/react-native-ssh&quot;&gt; &lt;li&gt;it has to list React as one of its dependencies, which is deprecated&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;/a&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/azlyth/react-native-ssh&quot;&gt;it&apos;s incompatible with &lt;strong&gt;react-native link&amp;lt;/strong&amp;gt; which links your iOS library for you, and would result in duplicate libraries in XCode&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/azlyth/react-native-ssh&quot;&gt;After this didn&apos;t work, I decided to go with the manual installation methods listed by a few other libraries (specifically &lt;/a&gt;&lt;a href=&quot;https://github.com/auth0/react-native-lock&quot;&gt;react-native-lock&amp;lt;/a&amp;gt;, thanks auth0). So as it stands, after npm-installing &lt;strong&gt;react-native-ssh&amp;lt;/strong&amp;gt;, you have to:&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;a href=&quot;https://github.com/auth0/react-native-lock&quot;&gt;&lt;strong&gt; &lt;li&gt;run &lt;strong&gt;react-native link&amp;lt;/strong&amp;gt; to include the library&amp;lt;&amp;amp;#&lt;/strong&gt;&lt;/li&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/ul&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;/div&gt;</description><pubDate>Tue, 06 Dec 2016 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>A mobile app to run scripts on servers</title><link>https://peter.direct/blog/hooks/</link><guid isPermaLink="true">https://peter.direct/blog/hooks/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;Over the years, whether I was working with a Raspberry Pi or running a server, there would often be one-off scripts that I would want to run. The usual pattern would be:&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;ul&gt; &lt;li&gt;SSH into the server&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;Run a single command&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;Logout&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &lt;p&gt;I always thought it would be nice to have a phone app that could easily run those scripts.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;I&apos;d try some mobile SSH client but those felt clunky; a full-blown terminal was overkill. I just wanted to quickly run a single script.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;Other times I&apos;d write a quick Flask app to listen on obscure ports and URLs to trigger a script. This also felt like overkill, though, because I really didn&apos;t want to have to expose some HTTP server on some port just to run a script on occasion.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;So I decided to bite the bullet and write the app that I wanted.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;h2 id=&quot;hooks&quot;&gt;Hooks&amp;lt;/h2&amp;gt; &lt;p&gt;The app is simple. It works as follows:&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Add a server&apos;s SSH credentials&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;You&apos;ll see a list of the executable files in &lt;strong&gt;~/.hooks-app/hooks&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt; &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Tap one of them and it will run&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &lt;p&gt;I myself have started to use this for a few things, including making sure all the containers are running properly on this server.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;/content/images/2016/11/demo.gif&quot;&gt; &amp;lt;/p&amp;gt; &lt;/p&gt;&lt;h2 id=&quot;what-i-learned&quot;&gt;What I learned&amp;lt;/h2&amp;gt; &lt;p&gt;This was the first time I used React and it&apos;s libraries. I have to say that using it, particularly together with Redux, felt elegant and safe. The fact that a global state defines the UI really makes things simpler.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;Working with React Native was also a treat. &lt;strong&gt;Hot Loading&amp;lt;/strong&amp;gt; is a wonderful feature that will update your app when you save a file, while maintaining your app&apos;s state. This makes UI work so much easier.&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;I also got to write some native Androi&lt;/strong&gt;&lt;/p&gt;&lt;/h2&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/h2&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Thu, 24 Nov 2016 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>A simple image to backup volumes to S3</title><link>https://peter.direct/blog/docker-s3-backup/</link><guid isPermaLink="true">https://peter.direct/blog/docker-s3-backup/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;One part of setting up my online presence naturally includes getting backups going.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;Since I&apos;m trying to keep everything containerized, I did some research into what Amazon S3 backup solutions are out there. I found a popular project called &lt;a href=&quot;https://github.com/tutumcloud/dockup&quot;&gt;dockup&amp;lt;/a&amp;gt; that basically does everything I wanted to have done.&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/tutumcloud/dockup&quot;&gt;However, upon looking at what I had to configure, I thought it could be simpler.&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;h2 id=&quot;how-dockup-works&quot;&gt;&lt;a href=&quot;https://github.com/tutumcloud/dockup&quot;&gt;How dockup works&amp;lt;/h2&amp;gt; &lt;p&gt;In order to get &lt;strong&gt;dockup&amp;lt;/strong&amp;gt; working, you have to mount the volumes you want to backup to some arbitrary place in the filesystem, and provide the following environment variables:&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;strong&gt; &lt;li&gt;AWS_ACCESS_KEY_ID&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;AWS_SECRET_ACCESS_KEY&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;AWS_DEFAULT_REGION&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;BACKUP_NAME&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;PATHS_TO_BACKUP&amp;lt;/li&amp;gt; &lt;/li&gt;&lt;li&gt;S3_BUCKET_NAME&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &lt;p&gt;So, in English, given a bunch of directories (specified in PATHS_TO_BACKUP), &lt;strong&gt;dockup&amp;lt;/strong&amp;gt; will create a timestamped backup (using the name BACKUP_NAME) in the bucket S3_BUCKET_NAME.&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/p&gt;&lt;h2 id=&quot;i-d-do-it-a-bit-differently&quot;&gt;&lt;strong&gt;I&apos;d do it a bit differently&amp;lt;/h2&amp;gt; &lt;p&gt;My ideal backup image would work different in a few ways.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;First, I want a separate backup for each of my apps. At any given time, I&apos;m not sure which services I will be running. Maybe I&apos;ll stop the blog and keep the git repo running. Or maybe I&apos;ll add a new service. I want to keep the data for each of those services separate.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;Next, I shouldn&apos;t have to specify which directories I want to backup. I could just put my volumes somewhere specific, like &lt;strong&gt;/backups&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Finally, the structure of the backup directory can contain the bucket and name. For example, any data in the directory &lt;strong&gt;/backups/app-backups/blog-data&amp;lt;/strong&amp;gt; will be bundled &lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;/li&gt;&lt;/strong&gt;&lt;/ul&gt;&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;</description><pubDate>Fri, 21 Oct 2016 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>Anatomy of this site&amp;#x27;s Docker Compose file</title><link>https://peter.direct/blog/using-docker-to-self-host/</link><guid isPermaLink="true">https://peter.direct/blog/using-docker-to-self-host/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;As it stands, this server has two services running: a blog and git repository. They&apos;re both routed to by an nginx proxy, and my free SSL certificates are provided by the oh-so-wonderful Let&apos;s Encrypt.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;The best part is that all of that is defined in and deployed by using a single Docker Compose file.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;That means the only thing I had to do on my server was install &lt;a href=&quot;https://www.docker.com/what-docker&quot;&gt;Docker&amp;lt;/a&amp;gt; (which is made easy by &lt;/a&gt;&lt;a href=&quot;https://docs.docker.com/machine/overview/#/what-is-docker-machine&quot;&gt;Docker Machine&amp;lt;/a&amp;gt;). The rest happens inside containers that play well with each other thanks to &lt;/a&gt;&lt;a href=&quot;https://docs.docker.com/compose/overview/#/overview-of-docker-compose&quot;&gt;Docker Compose&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/compose/overview/#/overview-of-docker-compose&quot;&gt;I&apos;m going to explain the file section by section, but first, here&apos;s all of it:&amp;lt;/p&amp;gt; &lt;/a&gt;&lt;/p&gt;&lt;pre data-lang=&quot;yaml&quot;&gt;&lt;a href=&quot;https://docs.docker.com/compose/overview/#/overview-of-docker-compose&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;version: &apos;2&apos; services: nginx-proxy: image: jwilder/nginx-proxy:0.4.0 container_name: nginx-proxy ports: - &quot;80:80&quot; - &quot;443:443&quot; volumes: - certs:/etc/nginx/certs:ro - /etc/nginx/conf.d - /etc/nginx/vhost.d - /usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro environment: - DEFAULT_HOST=ptrvldz.me letsencrypt-nginx-proxy: image: jrcs/letsencrypt-nginx-proxy-companion container_name: letsencrypt-nginx-proxy volumes_from: - nginx-proxy volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - certs:/etc/nginx/certs:rw blog: image: ghost:0.11.2 container_name: blog volumes: - ghost:/var/lib/ghost environment: - VIRTUAL_HOST=ptrvldz.me - LETSENCRYPT_HOST=ptrvldz.me - LETSENCRYPT_EMAIL=webmaster@ptrvldz.me git: image: gogs/gogs:0.9.97 container_name: git volumes: - &lt;/code&gt;&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Mon, 17 Oct 2016 00:00:00 GMT</pubDate><author>Peter Valdez</author></item><item><title>Back online</title><link>https://peter.direct/blog/back-online/</link><guid isPermaLink="true">https://peter.direct/blog/back-online/</guid><description>&lt;div class=&quot;sanitized-content&quot;&gt;&lt;p&gt;It&apos;s been a while since I&apos;ve had any form of personal site.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;Every time I wanted to start one, I would overthink it.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;I&apos;d think about the various apps I wanted to host, like a blog, a git repository, a file server, maybe even my own mail. And it&apos;d be all nicely organized and deployable.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;But in the end, all I&apos;d do was think and not do.&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;p&gt;So today, simple beginnings:&amp;lt;/p&amp;gt; &lt;/p&gt;&lt;ul&gt; &lt;li&gt;A blog at &lt;a href=&quot;https://ptrvldz.me&quot;&gt;ptrvldz.me&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ptrvldz.me&quot;&gt;A git repo at &lt;/a&gt;&lt;a href=&quot;https://git.ptrvldz.me&quot;&gt;git.ptrvldz.me&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Sun, 16 Oct 2016 00:00:00 GMT</pubDate><author>Peter Valdez</author></item></channel></rss>