<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>A Shower Of Thoughts / Bernardo Baquero Stand</title>
	<subtitle>Where I write about web frontend development, guitars, music, films, games, and anything else I&#39;m interested in</subtitle>
	<link href="https://berbaquero.com/feed/feed.xml" rel="self"/>
	<link href="https://berbaquero.com/"/>
	<updated>2026-01-17T00:00:00Z</updated>
	<id>https://berbaquero.com/</id>
	<author>
		<name>Bernardo Baquero Stand</name>
		<email>baquerober@gmail.com</email>
	</author>
	
	<entry>
		<title>My 2017&#39;s Lists and Numbers</title>
		<link href="https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/"/>
		<updated>2017-12-31T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/</id>
		<content type="html">&lt;p&gt;At the end of the year, I like putting lists together and reviewing numbers for the things I managed to keep track of during the year. This is a fun way for me to look back at 2017 through the things I enjoy the most — music, films, concerts, traveling, and games!&lt;/p&gt;
&lt;!-- excerpt --&gt;
&lt;h2 id=&quot;traveling&quot;&gt;Traveling &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/#traveling&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In 2017 I visited to 10 cities in 7 contries. To get to these cities and back, I traveled twice by train, 6 times by car, and 7 times by plane.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Brussels, Belgium&lt;/li&gt;
&lt;li&gt;Liege, Belgium&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.instagram.com/p/BW5lZ9fAxVi/&quot;&gt;Luxembourg, Luxembourg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cologne, Germany&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.instagram.com/p/BXY8Ro_A9eg/&quot;&gt;Dubrovnik, Croatia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.instagram.com/p/Bbh4sl0nF6j/&quot;&gt;New York City, USA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Chicago, USA&lt;/li&gt;
&lt;li&gt;Iowa City, USA&lt;/li&gt;
&lt;li&gt;Paris, France&lt;/li&gt;
&lt;li&gt;Bogotá, Colombia&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This year I finally visited &lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/930927028429381632&quot;&gt;New York City&lt;/a&gt;, which is, next to Tokyo, among the cities I&#39;ve always wanted to visit the most. It was definitely the traveling highlight of the year for me.&lt;/p&gt;
&lt;h2 id=&quot;concerts&quot;&gt;Concerts &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/#concerts&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I attended 10 live shows, for 9 different artists, across 5 different cities in 3 countries.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/829467165434707973&quot;&gt;Dream Theater — Tilburg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Between The Buried And Me — Amsterdam&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/840331226233880580&quot;&gt;Devin Townsend — Amsterdam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Haken — Amsterdam&lt;/li&gt;
&lt;li&gt;Fatboy Slim — Amsterdam&lt;/li&gt;
&lt;li&gt;Snarky Puppy — Eindhoven&lt;/li&gt;
&lt;li&gt;The Shattered Fortress — Tilburg&lt;/li&gt;
&lt;li&gt;La Yegros — Luxembourg&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/907712211665211392&quot;&gt;LCD Soundsystem — Amsterdam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dream Theater — New York City&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Dream Theater were the first and last live shows I attended during the year. Neat!&lt;/p&gt;
&lt;h2 id=&quot;music&quot;&gt;Music &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/#music&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I used Spotify almost exclusively to listen to music during 2017.&lt;/p&gt;
&lt;p&gt;I listened for a total of 29699 minutes of music during the whole year, which is the same as 495 hours, or 20.6 days. I honestly feel surprised it was this little.&lt;/p&gt;
&lt;p&gt;The artist I listened to the most was The Dear Hunter.&lt;/p&gt;
&lt;p&gt;The song I listened to the most was &lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/901009222770585600&quot;&gt;&lt;em&gt;People Who Eat Darkness&lt;/em&gt;&lt;/a&gt; by Steven Wilson.&lt;/p&gt;
&lt;p&gt;Overall, my favourite album of the year was &lt;strong&gt;To The Bone&lt;/strong&gt; by Steven Wilson, followed by Arcade Fire&#39;s &lt;strong&gt;Everything Now&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;films&quot;&gt;Films &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/#films&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;According to my &lt;a href=&quot;https://letterboxd.com/berbaquero/films/diary/for/2017/&quot;&gt;Film Diary in Letterboxd&lt;/a&gt;, which I tried to keep accurate through the whole year, &lt;strong&gt;I watched 57 films&lt;/strong&gt; in 2017.&lt;/p&gt;
&lt;p&gt;Out of those, 32 of them I watched at home, 15 on the cinema, and 9 while travelling (of which 4 were while on a plane).&lt;/p&gt;
&lt;p&gt;Out of those, &lt;a href=&quot;https://letterboxd.com/berbaquero/film/blade-runner-2049/&quot;&gt;&lt;strong&gt;Blade Runner 2049&lt;/strong&gt;&lt;/a&gt; was my favourite film of the year, with &lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/934273366441254913&quot;&gt;&lt;strong&gt;Coco&lt;/strong&gt;&lt;/a&gt; being a close second.&lt;/p&gt;
&lt;p&gt;23 of these films I watched on Netflix.&lt;/p&gt;
&lt;p&gt;I feel like I didn&#39;t watch as many films as I would have liked, so that&#39;s something I&#39;ll try to improve on next year. This year I also signed-up for Amazon Prime Video, so I hope it makes for more films to watch during next year.&lt;/p&gt;
&lt;h2 id=&quot;games&quot;&gt;Games &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/#games&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This year I played 31 games, and finished 13 of those.&lt;/p&gt;
&lt;p&gt;22 of them were on PS4, 3 on Switch, 4 on Nintendo 2DS, 1 on SNES (Classic Mini), 1 on iOS, and 1 with emulation.&lt;/p&gt;
&lt;p&gt;1 of them was a replay.&lt;/p&gt;
&lt;h3 id=&quot;finished%3A&quot;&gt;Finished: &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/#finished%3A&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Titan Souls — PS4&lt;/li&gt;
&lt;li&gt;Final Fantasy XV — PS4&lt;/li&gt;
&lt;li&gt;Journey — PS4&lt;/li&gt;
&lt;li&gt;FF XV: A King&#39;s Tale — PS4&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/840992176666529793&quot;&gt;Inside — PS4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/854433355101765632&quot;&gt;Kingdom Hearts 1.5 Final Mix — PS4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Kingdom Hearts 2.0 Final Mix — PS4&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/871797350137819136&quot;&gt;Monument Valley 2 — iOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Unravel — PS4&lt;/li&gt;
&lt;li&gt;Life Is Strange — PS4&lt;/li&gt;
&lt;li&gt;Mario Kart 7 — Nintendo 2DS&lt;/li&gt;
&lt;li&gt;Super Mario 3D Land — Nintendo 2DS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/923904368642019328&quot;&gt;Super Mario Odyssey&lt;/a&gt; — Switch&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;played&quot;&gt;Played &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/#played&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Doom — PS4&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/887752793481781248&quot;&gt;Yakuza 0 — PS4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/884460391648178176&quot;&gt;Final Fantasy XII: The Zodiac Age — PS4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tearaway: Unfolded — PS4&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/840638167682301953&quot;&gt;Abzú — PS4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Super Mario Bros. 3 — NES Emulation&lt;/li&gt;
&lt;li&gt;Yoshi&#39;s Island: Super Mario World 2 — SNES Classic Mini&lt;/li&gt;
&lt;li&gt;Kingdom Hearts: Birth By Sleep — PS4&lt;/li&gt;
&lt;li&gt;Guacamelee — PS4, replay&lt;/li&gt;
&lt;li&gt;Hyper Light Drifter — PS4&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/897578073939484673&quot;&gt;Sonic Mania — PS4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Legend of Zelda: A Link Between Worlds — Nintendo 2DS&lt;/li&gt;
&lt;li&gt;Mario And Luigi: Superstar Saga — Nintendo 2DS&lt;/li&gt;
&lt;li&gt;Rocket League — PS4 + Switch&lt;/li&gt;
&lt;li&gt;Downwell — PS4&lt;/li&gt;
&lt;li&gt;Street Fighter V — PS4&lt;/li&gt;
&lt;li&gt;Tricky Towers — PS4&lt;/li&gt;
&lt;li&gt;Mario Kart 8 DX — Switch&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/874728563651612672&quot;&gt;&lt;strong&gt;Rocket League&lt;/strong&gt; is easily the one game I played the most during the year&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And without a doubt &lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/935681352065720320&quot;&gt;&lt;strong&gt;Super Mario Odyssey&lt;/strong&gt;&lt;/a&gt; is my favourite game of the year.&lt;/p&gt;
&lt;h2 id=&quot;highlights-of-2017&quot;&gt;Highlights of 2017 &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2017/12/my-2017-lists-and-numbers/#highlights-of-2017&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Visiting the US was something I always wanted to do, and this year I finally got the chance to do it for the first time. It was a great experience altogether, specially NYC!&lt;/li&gt;
&lt;li&gt;In preparation for visiting Japan (hopefully next year!) &lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/865470360543666176&quot;&gt;I started learning Japanese&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;In Dubrovnik, I rode a water motor ski for the first time — it was pretty exciting. Also, stressful.&lt;/li&gt;
&lt;li&gt;At work, I was promoted to Technical Lead for my Frontend development team.&lt;/li&gt;
&lt;li&gt;The biggest one was getting engaged with my girlfriend Andrea. I proposed to her in the middle of the Brooklyn Bridge in New York - a culmination of personal goals coming together right there and then.&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Reeddit, 6 Years Old</title>
		<link href="https://berbaquero.com/posts/2018/11/reeddit-6-years-old/"/>
		<updated>2018-11-20T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2018/11/reeddit-6-years-old/</id>
		<content type="html">&lt;p&gt;6 years ago today, I gathered the courage to put Reeddit out there. To share it with other people. It was my first serious attempt at building a complete, frontend-only web-app.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://reedditapp.com/&quot;&gt;Reeddit&lt;/a&gt; is basically an alternative way to browse reddit.com’s content. While I love to read and browse reddit.com, I never really liked their UI- specially on their mobile site, which was really cumbersome and ugly, at least back then.&lt;/p&gt;
&lt;p&gt;Also, I wanted to become a proper web frontend developer! I had worked with Java for almost 4 years by then and sure, I had to work with HTML and CSS over the years, but it always felt like I was only scratching the surface, and JavaScript had always completely eluded me.&lt;/p&gt;
&lt;p&gt;So this was, in my mind, the perfect way to address those things: I would design and build the reddit UI that I’d love to use, and by doing so, I would learn as much as I could about what frontend development really was, learn the proper foundation— JS included.&lt;/p&gt;
&lt;p&gt;In the span of ~5 months, working a couple of hours every week after work and a bit more each weekend, I built a responsive, single-page web-app for &lt;em&gt;just reading reddit&lt;/em&gt;. And by doing so, I had learnt so, so much about building things for the browser; how to tame the DOM (thanks to jQuery/Zepto!) and the Cascade, the Box Model, how to use Flexbox (so shiny and new back then!). And I had more or less built the alternative reddit client that I wanted.&lt;/p&gt;
&lt;p&gt;But that was supposed to be it! I built it for me. So I could use it myself. I didn&#39;t consider publishing it on the web— not initially.&lt;/p&gt;
&lt;p&gt;But after showing what I had done so far to a friend from work, he told me &amp;quot;you should put it out there! It&#39;s nice!&amp;quot;, to which I said that wasn&#39;t in my plans because I didn&#39;t think it was good enough for people to use it and much less like it. And then he said &amp;quot;if you already find it useful or good for yourself, there will be others who will agree and use it as well&amp;quot;.&lt;/p&gt;
&lt;p&gt;And that made me realize: if there was a single person who finds Reeddit, uses it, likes it, and continues using it, that&#39;d be a huge satisfaction for me. Enough of a reward.&lt;/p&gt;
&lt;p&gt;So for a couple of days I worked on making Reeddit a bit more &amp;quot;presentable&amp;quot;, and made sure it worked fine in all the browsers I had installed, which were desktop and mobile Safari, Chrome, Opera, and Firefox.&lt;/p&gt;
&lt;p&gt;And finally, on November 20th, 2012, I shared it with the world; first with my Twitter and Facebook network (&lt;a href=&quot;https://twitter.com/berbaquero/status/270813753489104896&quot;&gt;announcement tweet&lt;/a&gt;), and then on reddit itself (&lt;a href=&quot;https://www.reddit.com/r/webdev/comments/13od81/this_is_reeddit_a_minimal_elastic_and_readonly/&quot;&gt;thread on r/webdev&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I considered also showing it to Hacker News, but decided not to because I thought it was &lt;em&gt;definitely&lt;/em&gt; not HN-worthy and that it would be shat upon if I did share it there. So I didn&#39;t. Silly me.&lt;/p&gt;
&lt;p&gt;The reception on twitter and reddit was pretty much what I expected and hoped; people gave me good feedback, suggestions, and compliments. It was great. It felt good to share what I had worked on and to see it being well-received. I figured the cycle was complete. That the project was over as it had served its original purpose.&lt;/p&gt;
&lt;p&gt;But it was far from over.&lt;/p&gt;
&lt;p&gt;Less than 2 months later, during the first week of January 2013, &lt;a href=&quot;https://twitter.com/cheeaun&quot;&gt;someone&lt;/a&gt; :) shared &lt;a href=&quot;https://news.ycombinator.com/item?id=5012698&quot;&gt;Reeddit on Hacker News&lt;/a&gt;, and I only found out about it because after waking up that morning, I saw I was getting a lot notifications from people making tweets about Reeddit! All because of the weird machine that is Hacker News top posts.&lt;/p&gt;
&lt;p&gt;So, I learned that there&#39;s a bunch of twitter bots that automatically tweet when a HN post receives certain amount of votes; here&#39;s &lt;a href=&quot;https://twitter.com/newsyc50/status/287610168714338305&quot;&gt;reeddit getting 50 votes&lt;/a&gt; and here&#39;s &lt;a href=&quot;https://twitter.com/newsyc100/status/287699254066167808&quot;&gt;reeddit getting 100 votes&lt;/a&gt;. And I guess people that follows these bots started reacting to those tweets and checking and tweeting about Reeddit. Then HN&#39;s post reached the top 2 spot on the frontpage.&lt;/p&gt;
&lt;p&gt;And then it quickly reached the top of HackerNews&#39; frontpage. Gulp.&lt;/p&gt;
&lt;p&gt;The buzz generated by HN and Twitter was picked up by some big websites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/Designmodo/status/287660276067737602&quot;&gt;Designmodo tweeted about Reeddit&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://venturebeat.com/2013/01/05/ugly-ol-reddit-gets-a-spiffy-new-ui-with-reedit/&quot;&gt;Venture Beat published an article&lt;/a&gt; &lt;a href=&quot;https://twitter.com/VentureBeat/status/287646148003500033&quot;&gt;and tweeted about Reeddit&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mashable.com/2013/01/07/reeddit-reddit/&quot;&gt;Mashable published a video article about Reddit&lt;/a&gt; — although the actual video doesn&#39;t seem to work anymore. Boo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And best of all, &lt;a href=&quot;https://twitter.com/alexisohanian/status/287695285088575489&quot;&gt;Alexis Ohanian himself tweeted about Reeddit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It was crazy.&lt;/p&gt;
&lt;p&gt;Those were a very awesome couple of days. It made the whole thing so incredibly rewarding. Much more than it already was.&lt;/p&gt;
&lt;p&gt;But it was not over.&lt;/p&gt;
&lt;p&gt;Even after the online buzz faded out, I learned of another benefit from it; I started getting approached by a few companies that were interested on me joining them as a frontend developer. One of them was a big one, and I couldn&#39;t believe it. And even though none of those worked out –as I would have had to move to a city I didn&#39;t really want to– the fact there was interest in my profile as &lt;em&gt;frontend developer&lt;/em&gt; gave me the confidence to persue that path completely, and apply for Frontend Dev jobs in Amsterdam, which is what I really wanted.&lt;/p&gt;
&lt;p&gt;Very fittingly, while using Reeddit myself one day and browsing the Amsterdam subreddit, I stumbled upon a post from someone sharing a job opening in the city, to which I replied with interest. Long (sub)story short, it was the experience and knowledge that I got from building Reeddit, and the confidence that its reception got gave me, what ultimately resulted and me getting a great job and moving to Amsterdam.&lt;/p&gt;
&lt;p&gt;Afterwards, I continuously used Reeddit as my code playground, trying new things while fixing its bugs or adding new features, experimenting with new frameworks or libraries, or just applying the new things I&#39;d learned at work. I believe I learned Sass/SCSS by migrating Reeddit&#39;s styles to it.&lt;/p&gt;
&lt;p&gt;Reeddit has also received some open-source contributions during these years, which has always made so happy, humble, and very thankful, and has inspired me to give back— even though I don&#39;t do it as much as I should.&lt;/p&gt;
&lt;p&gt;But it&#39;s been a while since I&#39;ve done any work on Reeddit. I still love the product, but I feel like I&#39;ve moved on from the codebase.&lt;/p&gt;
&lt;p&gt;For almost 2 years now, I haven&#39;t really improved Reeddit. It got an improvement some weeks ago via a Pull Request on GitHub (yay open source!) but that&#39;s been pretty much it since years.&lt;/p&gt;
&lt;p&gt;And it&#39;s actually a great feeling to see something you haven&#39;t had to support for a long time is still working fine. Of course, that&#39;s partially also thanks to Reddit itself not breaking its public API and to a very stable GitHub Pages service. But it&#39;s ultimately a testament to how wonderful The Web as a platform really is. How things that haven&#39;t been touched for years are still perfectly usable and accessible. I love it and don&#39;t take it for granted.&lt;/p&gt;
&lt;p&gt;And I will try to make sure that my now-6-year-old Reeddit web-app stays usable and accessible in the future; but it&#39;s time to officially feature-freeze Reeddit.&lt;/p&gt;
&lt;p&gt;It&#39;s time to move on.&lt;/p&gt;
&lt;p&gt;To Reeddit 2.&lt;/p&gt;
&lt;p&gt;--&lt;/p&gt;
&lt;p&gt;Footnotes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The first improvement to Reeddit after releasing it was done just around 30 minutes after sharing it on reddit and getting the suggestion to show previews for image posts, in the comments view.&lt;/li&gt;
&lt;li&gt;For some time at the beginning of the published codebase, all the JS code was wrapped in a single jQuery/Zepto &lt;code&gt;$.ready()&lt;/code&gt; function.&lt;/li&gt;
&lt;li&gt;Firefox had no support for Flexbox back then, so I had to do some sort of browser detection and use Floats instead. Yikes.&lt;/li&gt;
&lt;li&gt;Reeddit&#39;s UI was inspired by &lt;strong&gt;HNMobile&lt;/strong&gt;, now known as HackerWeb, by &lt;a href=&quot;https://twitter.com/cheeaun&quot;&gt;@cheeaun&lt;/a&gt;. When I used HNMobile for the first time on my iPhone 4S, I remember being blown away by the fact a web-app could look and feel so smooth and &lt;em&gt;native&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Yes, I&#39;m building a &lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/1065009473360674816&quot;&gt;new version of Reeddit&lt;/a&gt;!&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>My List and Numbers of 2018</title>
		<link href="https://berbaquero.com/posts/2018/12/my-list-and-numbers-from-2018/"/>
		<updated>2018-12-31T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2018/12/my-list-and-numbers-from-2018/</id>
		<content type="html">&lt;p&gt;Same as the previous years, here’s a bunch of lists and numbers from the things I did in 2018.&lt;/p&gt;
&lt;p&gt;While writing this, I’ve realised that looking back at my own Twitter feed is a perfect way to recollect lots of the my year’s highlights. And here I was thinking of using Twitter less, heh.&lt;/p&gt;
&lt;h2 id=&quot;places&quot;&gt;Places &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2018/12/my-list-and-numbers-from-2018/#places&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I visited 5 cities in 4 countries. To get there and back, I traveled by train twice, and flew ten times.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/995025549432107008&quot;&gt;London, England&lt;/a&gt;. First time visiting. It’s uttely massive, so I felt like I didn’t have the chance to see enough of it. What I did see was great.&lt;/li&gt;
&lt;li&gt;Berlin, Germany.&lt;/li&gt;
&lt;li&gt;Barcelona, Spain. Twice!&lt;/li&gt;
&lt;li&gt;Cartagena and&lt;/li&gt;
&lt;li&gt;Bogotá, Colombia. &lt;a href=&quot;https://twitter.com/berbaquero/status/1074735529390944256?s=20&quot;&gt;The food! &amp;lt;3&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;concerts&quot;&gt;Concerts &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2018/12/my-list-and-numbers-from-2018/#concerts&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Steven Wilson @ AFAS, Amsterdam&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/995365415814680576?s=20&quot;&gt;&lt;strong&gt;Hamilton&lt;/strong&gt; @ Victorian Palace Theater, London&lt;/a&gt;. This is one of this year’s highlights. It was an incredible experience that I’d love to revisit.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/1006298335668592642&quot;&gt;Arcade Fire @ AHOY, Rotterdam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Motherwolf @ Melkweg, Amsterdam&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/1059037826812203009?s=20&quot;&gt;CHVRCHES @ Tivoli, Utrecht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nightwish @ Ziggo Dome, Amsterdam&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;films&quot;&gt;Films &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2018/12/my-list-and-numbers-from-2018/#films&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I love films. Going to the movies, watching films at home. Reading about them. Learning from them. This year, I decided to get a &lt;a href=&quot;https://www.cineville.nl/en/card&quot;&gt;Cinevillepass&lt;/a&gt;, which basically allows me to watch films unlimitedly across 50+ movie theaters in The Netherlands for a monthly subscription. It’s awesome, and it really made me go out to the movies more. I watched 25 films using the Cineville pass.&lt;/p&gt;
&lt;p&gt;I also became a Pro member of &lt;a href=&quot;https://letterboxd.com/pro/&quot;&gt;Letterboxd&lt;/a&gt;, mostly to support the website and its service, as it has become my favourite place to geek out about films. And as it turns out, Pro members get a nice Stats page per year. &lt;a href=&quot;https://letterboxd.com/berbaquero/year/2018/&quot;&gt;Here’s my 2018 Stats for Films&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In total, &lt;a href=&quot;https://letterboxd.com/berbaquero/films/diary/for/2018/&quot;&gt;I watched 78 films&lt;/a&gt; — 63 of those were films I hadn’t watched before, and the remaining 15 were rewatches. It amounted to 149 hours of movie-watching, or a bit more than 6 days.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I watched 5 of these films during a flight.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;28 of these films I watched on Netflix.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;My favourite film of the 2018 is &lt;a href=&quot;https://letterboxd.com/film/spider-man-into-the-spider-verse/&quot;&gt;&lt;strong&gt;Spider-Man: Into The Spider-Verse&lt;/strong&gt;&lt;/a&gt;. I was anticipating it since &lt;a href=&quot;https://twitter.com/berbaquero/status/1004396060687716353?s=20&quot;&gt;I watched the first teaser halfway through the year&lt;/a&gt; and it absolutely blew my already-high expectations. It’s perfect.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;My runner up is &lt;a href=&quot;https://letterboxd.com/film/roma-2018/&quot;&gt;Roma&lt;/a&gt;; as a fan of Alfonso Cuarón, this feels like his magnum opus. A technical masterpiece.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;games&quot;&gt;Games &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2018/12/my-list-and-numbers-from-2018/#games&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This year I stumbled upon &lt;a href=&quot;https://www.igdb.com/&quot;&gt;IGDB.com&lt;/a&gt;, which is trying to be a mix of IMDb + Letterboxd but for gaming. I decided to use it as a way to keep track of my games.&lt;/p&gt;
&lt;p&gt;Here’s the list of &lt;a href=&quot;https://www.igdb.com/users/bbs/lists/played-in-2018&quot;&gt;all the games I played&lt;/a&gt; and &lt;a href=&quot;https://www.igdb.com/users/bbs/lists/finished-in-2018&quot;&gt;the games I finished&lt;/a&gt; in 2018.&lt;/p&gt;
&lt;p&gt;From the moment I finished it, I had no doubt; &lt;a href=&quot;https://twitter.com/berbaquero/status/991670391063105536&quot;&gt;my favourite game of 2018 is &lt;strong&gt;God Of War&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My favourite games of the 2018 are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;God Of War&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/1039281549559164928?s=20&quot;&gt;Marvel’s Spider-Man&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/958832958546182144?s=20&quot;&gt;Celeste&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/1013909542697144320&quot;&gt;Hollow Knight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/1032178869112066049?s=20&quot;&gt;Guacamelee 2&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;music&quot;&gt;Music &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2018/12/my-list-and-numbers-from-2018/#music&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I feel like I listened to so much music, so many different stuff that it’s a bit tricky to recollect. These is what pops out as I write this, as my favourite music this year:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/966264851919134721?s=20&quot;&gt;Celeste OST — Rena Laine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://songwhip.com/album/the-reign-of-kindo/happy-however-after&quot;&gt;Happy However After — The Reign Of Kindo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://songwhip.com/album/chvrches/love-is-dead&quot;&gt;&lt;strong&gt;Love Is Dead — CHVRCHES&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/berbaquero/status/1012618430703382528?s=20&quot;&gt;The Now Now — Gorillaz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At this point, Love Is Dead is tied with The Now Now for my favourite album of 2018.&lt;/p&gt;
&lt;h2 id=&quot;work&quot;&gt;Work &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2018/12/my-list-and-numbers-from-2018/#work&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This year I left my job of 4.4 years, and the first one I got in The Netherlands, to join a promising and exciting scale-up to continue working and growing as a Frontend Developer in &lt;a href=&quot;https://tiqets.com/en/about&quot;&gt;&lt;strong&gt;Tiqets&lt;/strong&gt;&lt;/a&gt;. I decided to work 36 hours (so a day off every 2 weeks) and it’s being a bliss and I’ve learned a lot. Here’s to more of that for 2019!&lt;/p&gt;
&lt;p&gt;I also started development of and &lt;a href=&quot;https://twitter.com/berbaquero/status/1065009473360674816?s=20&quot;&gt;announced Reeddit 2&lt;/a&gt;. Hope to release it in early 2019.&lt;/p&gt;
&lt;h2 id=&quot;other&quot;&gt;Other &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2018/12/my-list-and-numbers-from-2018/#other&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I walked on ice! When the canals in Amsterdam froze early in the year, we got to walk on them. It was incredible, and scary!&lt;/li&gt;
&lt;li&gt;I bought a new &lt;a href=&quot;https://shop.fender.com/en-NL/electric-guitars/american-original-50s-telecaster/0110132850.html?clickref=1100l6qn2tRG&amp;amp;aff_id=10l1110&quot;&gt;Telecaster guitar&lt;/a&gt; which pushed me to get better at guitar playing and inspired me to learn more about music theory, specially. Hopefully I’ll make it something out of it in 2019.&lt;/li&gt;
&lt;li&gt;I visited Efteling, which is like a Dutch version of Disneyland, sort of. Was wonderful.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Here’s to an even better 2019&lt;/strong&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>New song from Tool</title>
		<link href="https://berbaquero.com/posts/2019/08/new-song-from-tool/"/>
		<updated>2019-08-07T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2019/08/new-song-from-tool/</id>
		<content type="html">&lt;p&gt;After 13 years (!), &lt;a href=&quot;https://twitter.com/Tool/status/1159071693685633025&quot;&gt;Tool has released a new song&lt;/a&gt;, &lt;em&gt;&lt;a href=&quot;https://songwhip.com/song/tool/fear-inoculum&quot;&gt;&amp;quot;Fear Inoculum&amp;quot;&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This is surreal on its own; for a long time it felt like there was just not going to be new Tool music ever. But the best part is that it&#39;s only one song from their soon-to-be-released new album. Incredible.&lt;/p&gt;
&lt;p&gt;I&#39;ve listened to the new song a bunch of times today. I&#39;m so excited, I&#39;m just going to put my unordered thoughts around this in a list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In Apple Music, this track is listed as the 1st one of the new album&#39;s tracklist, with the rest just named Track 2, Track 3, etc. since their titles have not been revealed yet.&lt;br /&gt;
This might just be an Apple Music quirk, but it could also mean this is the album opener.&lt;/li&gt;
&lt;li&gt;If this is the album opener, it would mark the first time in Tool&#39;s discography that the opener is also the titular song.&lt;/li&gt;
&lt;li&gt;The song itself is just fantastic! It sounds exotic, introspective, and then intense and cathartic. Very progressive.&lt;/li&gt;
&lt;li&gt;The first half reminds me a lot of &lt;em&gt;Disposition&lt;/em&gt; and &lt;em&gt;Reflection&lt;/em&gt;. And &lt;a href=&quot;https://songwhip.com/song/tool/disposition&quot;&gt;Disposition&lt;/a&gt; is one of my favourite Tool songs.&lt;/li&gt;
&lt;li&gt;Actually, there&#39;s a section where I thought I was listening to Reflection, because of the drum patterns. Possibly a callback!&lt;/li&gt;
&lt;li&gt;Maynard&#39;s singing is phenomenal. Very emotional and dynamic performance.&lt;/li&gt;
&lt;li&gt;One of my favourite things about Tool is their song endings; they&#39;re so bombastic, full of energy. And here they&#39;ve done it again. Powerful ending.&lt;/li&gt;
&lt;li&gt;It&#39;s so, so good to listen to Danny Carey&#39;s fantastic new rythms and unreal drumming. He&#39;s in such great form here.&lt;/li&gt;
&lt;li&gt;I had no idea they were releasing a single before the new album&#39;s release. This caught me by suprise this morning!&lt;/li&gt;
&lt;li&gt;The excitement and anticipation for the new album has grown immensely after today!&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Firefox Add-Ons that should be built into the browser already!</title>
		<link href="https://berbaquero.com/posts/2019/08/firefox-add-ons/"/>
		<updated>2019-08-23T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2019/08/firefox-add-ons/</id>
		<content type="html">&lt;p&gt;One of the many great things about The Web and web browsers is the inherent ability of users to extend the browser&#39;s abilities and functionalities via extensions/add-ons, which ultimately improve our experience and agency on the web and empower us as its users.&lt;/p&gt;
&lt;p&gt;Popular browser extensions can often end up becoming native browser features; e.g, &lt;a href=&quot;https://getfirebug.com/&quot;&gt;Firebug&lt;/a&gt;, one of the most important and influential Add-ons in Firefox for web development, has been integrated into Firefox natively (in its Developer Tools).&lt;/p&gt;
&lt;p&gt;Through the &lt;a href=&quot;https://testpilot.firefox.com/&quot;&gt;Test Pilot program&lt;/a&gt;, Mozilla created a bunch of Add-ons with the aim of eventually taking the learnings and best results and build them into a better Firefox. Even though Test Pilot is now over, it gave us some truly fantastic functionality in Firefox via these Add-ons.&lt;/p&gt;
&lt;p&gt;I really like some of those Add-ons, so I wanted to talk about them because I believe you would find them useful as well.&lt;/p&gt;
&lt;p&gt;The thuth is the majority of regular users will not dive deep enough into the browser&#39;s capabilities in order to take advantage of Add-ons in general. That&#39;s why I think these following Add-ons should be baked into Firefox by default already, so everyone can easily start using them from the get go.&lt;/p&gt;
&lt;p&gt;While we wait for that, they are available to us right now, of course. So take a look and improve your browsing:&lt;/p&gt;
&lt;h2 id=&quot;containers&quot;&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/&quot;&gt;Containers&lt;/a&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2019/08/firefox-add-ons/#containers&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I see Containers as sort of an evolution of &amp;quot;Private / Incognito&amp;quot; mode. When you open a Private/Incognito tab, whatever you do in there stays isolated from your normal browsing, and when you close the Private tab, any storage set by any site you visited gets deleted.&lt;/p&gt;
&lt;p&gt;Containers work similarly- any Container tab&#39;s activity stays isolated from your normal browsing or from any other Container profiles. But unlike Private tabs, Container tabs don&#39;t delete the sites data when you close them. This is a good thing, because it allows you to easily maintain different online profiles in the same browser.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/containers&quot;&gt;Read more about Containers here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some of the things I like using Containers for is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A &amp;quot;Work&amp;quot; container, so opening gmail.com on a Work tab will open my work email, while opening gmail.com on a normal tab opens my personal email. Any other service I use for work, I open it in the Work container.&lt;/li&gt;
&lt;li&gt;A &amp;quot;Shopping&amp;quot; container, where you exclusively browser web shops such as Amazon, keeping your shopping behaviour separate from the rest of your regular browsing.&lt;/li&gt;
&lt;li&gt;Having a specific &amp;quot;Facebook&amp;quot; container, where any visits to facebook.com will automatically open a Facebook container tab, so Facebook cannot keep track of your browsing behaviour elsewhere.
&lt;ul&gt;
&lt;li&gt;This one is such a great idea that &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/facebook-container/&quot;&gt;Mozilla published a separate Add-on specifically for it&lt;/a&gt;, and &lt;a href=&quot;https://twitter.com/berbaquero/status/1161674501857447936&quot;&gt;it&#39;s just great&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Containers represent a concrete example of Mozilla&#39;s focus and effort of protecting users&#39; privacy online; they should be baked into Firefox already!&lt;/p&gt;
&lt;h2 id=&quot;snooze-tabs&quot;&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/snoozetabs/&quot;&gt;Snooze Tabs&lt;/a&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2019/08/firefox-add-ons/#snooze-tabs&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I like to treat tabs as a sort of &amp;quot;to do&amp;quot; item; read this, watch that, listen to this, try that. And once I&#39;m done with that &amp;quot;task&amp;quot;, I can just close the tab.&lt;br /&gt;
So naturally, I&#39;ve never liked having endless amounts of tabs opened while I work, as it feels overwhelming and distracting- &amp;quot;so many things to do!&amp;quot;.&lt;/p&gt;
&lt;p&gt;This is why Snooze Tabs is such a brilliant utility.&lt;/p&gt;
&lt;p&gt;Just hit the Snooze button in the topbar, and choose a time and date. &lt;em&gt;The current tab will then inmediately close, only to be automatically re-opened at the specified date and time&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;It&#39;s a super quick way to easily manage your browsing activity, and one of the most valuable tools for my productivity.&lt;/p&gt;
&lt;h2 id=&quot;side-view&quot;&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/side-view/&quot;&gt;Side View&lt;/a&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2019/08/firefox-add-ons/#side-view&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Whenever I&#39;m developing a web page, it&#39;s natural that I&#39;d have to test it on narrow(er) viewports, for mobile and tablet scenarios (I even built a &lt;a href=&quot;https://ventana.glitch.me/&quot;&gt;super simple utility&lt;/a&gt; for quickly doing so). Side View provides a convenient way to do that, while also potentially enhancing your browsing experience and productivity outside of development.&lt;/p&gt;
&lt;p&gt;This super neat add-on adds a button on the location bar and top bar, and a context menu option that will &lt;em&gt;open the current tab within the browser&#39;s sidebar&lt;/em&gt;. It also requests the site with a &amp;quot;mobile-like&amp;quot; User Agent string, which combined with the sidebar&#39;s generally narrow width, results in (most) websites rendering in their mobile version.&lt;/p&gt;
&lt;p&gt;Navigation to the same domain stays within Side View, and anything else opens in the current normal tab. This enables enhanced browsing possibilities, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opening lists-of-links sites (reddit, twitter) in Side View and opening their links in the normal tab.&lt;/li&gt;
&lt;li&gt;Comparing (shopping) items, one in the normal tab, one in the Side View.&lt;/li&gt;
&lt;li&gt;Email in Side View, links from emails in normal tab.&lt;/li&gt;
&lt;li&gt;YouTube or Twitch in Side View, while doing anything more involved in the normal tab.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unfortunately, it doesn&#39;t play well with &lt;a href=&quot;https://berbaquero.com/posts/2019/08/firefox-add-ons/#containers&quot;&gt;Containers&lt;/a&gt;; even if a page in on a Container, once it&#39;s sent to Side View it will not longer be &amp;quot;contained&amp;quot;- it will just be on the regular/default browser context.&lt;/p&gt;
&lt;p&gt;Overall it provides a neat way to browse and use the web, and it&#39;s definitely a great tool for testing responsive-designed websites.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Update 11-02-2021: updated link to one of the apps as previous one was broken.&lt;/em&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Apple Arcade is fantastic. Mostly.</title>
		<link href="https://berbaquero.com/posts/2019/10/apple-arcade/"/>
		<updated>2019-10-04T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2019/10/apple-arcade/</id>
		<content type="html">&lt;ul&gt;
&lt;li&gt;From the beginning I loved the fact that this is not a streaming-based service, which I really don&#39;t like at all. It makes so much  sense to simply allow customers to download and play the games without worries of internet connection.&lt;/li&gt;
&lt;li&gt;Being able to connect my DualShock 4 so easily is huge. And lots of game actually show the correct buttons (cross, circle, square) in their UI which is neat. It makes so much sense for Apple to allow DS4 and Xbox One controllers; if you have a PS4 or an XB1, Arcade becomes much more attractive from the start.
&lt;ul&gt;
&lt;li&gt;I just wished it was easier to &lt;em&gt;disconnect&lt;/em&gt; the DualShock when I&#39;m done.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;It&#39;s not very clear to me how the cloud saves / progress sync works. Is it based on Game Center? AppleID?
&lt;ul&gt;
&lt;li&gt;It would be nice if there was a hub for managing save states. Or that games themselves confirmed in their own UIs about cloud syncing, otherwise.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Games like Rayman Mini send an interesting message to me about Arcade: the service could easily host a full-fledge game like Rayman Origins/Legends, but because of the &amp;quot;mobile-gaming&amp;quot; constraints - like no garantee of a gamepad - they have to be shrinked into smaller-scale experiences. But maybe that&#39;s a good thing.&lt;/li&gt;
&lt;li&gt;The service is only going to get better when it&#39;s available on macOS and specially tvOS. But maybe then the games will feel too &amp;quot;small&amp;quot;.&lt;/li&gt;
&lt;li&gt;The sweet selling-point of Arcade is that all its games (going to be) playable on iPhones, iPads, Macs, and Apple TVs. But would it make sense at some point to have &amp;quot;big scale&amp;quot; games only for Macs or TVs?&lt;/li&gt;
&lt;li&gt;I&#39;m curious how often will Apple introduce new games into the service. The launch roster is excellent and very long already!&lt;/li&gt;
&lt;li&gt;Maybe this information is available somewhere that I missed, but it would be nice to know how are developers being compesated for having their games in the service. Hopefully it&#39;s not based on time spent on a particular game!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;favourite-games-so-far&quot;&gt;Favourite games so far &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2019/10/apple-arcade/#favourite-games-so-far&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rayman Mini&lt;/strong&gt;: the style of Rayman Origins/Legends is gorgeous, and the auto-running mechanics feel quite flexible, and allow for a lot of puzzle-platforming.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bleak Sword&lt;/strong&gt;: simple and straighforward combat design, but with a nice challenging curve, and with lots of enemy variety. I don&#39;t think I could enjoy it &lt;em&gt;without&lt;/em&gt; the DualShock, however; the touch controls are a bit quirky, I thought.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sayonara Wild Hearts&lt;/strong&gt;: the presentation and aesthetics and stunning. And the sheer amount of gameplay variety across stages (and even during the same stage) is quite impressive. Unfortunately my progress hasn&#39;t been saved in the first 2 ocassions, &amp;quot;forcing&amp;quot; me to start all over. Still, it&#39;s so enjoyable I have no problem going back!&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Satelite beta</title>
		<link href="https://berbaquero.com/posts/2019/11/satelite-beta/"/>
		<updated>2019-11-20T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2019/11/satelite-beta/</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://beta.satelite.app/&quot;&gt;Try the Satelite beta out now!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;picture&gt;
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://berbaquero.com/img/satelite-dark.png&quot; /&gt;
  &lt;img src=&quot;https://berbaquero.com/img/satelite-light.png&quot; alt=&quot;Screenshot of Satelite in dark mode&quot; /&gt;
&lt;/picture&gt;
&lt;p&gt;One year ago today, as part of &lt;a href=&quot;https://berbaquero.com/posts/2018/11/reeddit-6-years-old/&quot;&gt;&amp;quot;celebrating&amp;quot; the 6th anniversary&lt;/a&gt; of &lt;a href=&quot;https://reedditapp.com/&quot;&gt;Reeddit&lt;/a&gt;&#39;s release, &lt;a href=&quot;https://mobile.twitter.com/berbaquero/status/1065009473360674816&quot;&gt;I announced I was working on &amp;quot;Reeddit 2&amp;quot;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&#39;s been a whole year since then, and I have surely but very slowly been working on the successor to Reeddit.&lt;/p&gt;
&lt;p&gt;But since &lt;em&gt;today marks the 7-year anniversary of Reeddit&#39;s release&lt;/em&gt;, I have decided to just put the result of my work so far out there!&lt;/p&gt;
&lt;p&gt;As mentioned at the start, &lt;em&gt;Reeddit 2 is actually named &lt;strong&gt;Satelite&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;One of the many lessons I learned with Reeddit was that &amp;quot;Reeddit&amp;quot; is not a good name for a Reddit client; people were always misspelling it, or thinking that &amp;quot;reddit&amp;quot; had been misspelt. Furthermore, &lt;code&gt;.app&lt;/code&gt; domains became available every since, and I wanted to get one!&lt;/p&gt;
&lt;h2 id=&quot;satelite&quot;&gt;Sate&lt;em&gt;lite&lt;/em&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2019/11/satelite-beta/#satelite&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&amp;quot;Satelite&amp;quot; is Español for...&amp;quot;Satellite&amp;quot;, but it&#39;s also a reflection of my effort to offer a &lt;em&gt;lite&lt;/em&gt; (as in, lean and fast) Reddit experience, specially compared with reddit.com&#39;s own experience.&lt;/p&gt;
&lt;h2 id=&quot;why-though%3F&quot;&gt;Why though? &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2019/11/satelite-beta/#why-though%3F&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I built the original Reeddit out of the desire to have a better way to browse and read Reddit on my mobile and tablet, since back then they had a really lackluster mobile experience.&lt;/p&gt;
&lt;p&gt;Turns out that while they improved this a lot in modern reddit.com, they are now annoyingly pushing their native apps while using it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I built Reeddit, and now Satelite, because I wanted a simpler, faster, mobile-friendly way to browse and use reddit on the web&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;what&#39;s-new%3F&quot;&gt;What&#39;s new? &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2019/11/satelite-beta/#what&#39;s-new%3F&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The biggest change in comparison to the original Reeddit is that Satelite requires your reddit account to work. So you get your subscriptions and multireddits (I call them Channels), and you can &lt;em&gt;save&lt;/em&gt; and &lt;em&gt;vote&lt;/em&gt; posts. You can also un/subscribe to subreddits and create new Channels as well.&lt;/p&gt;
&lt;p&gt;I will soon start working on taking more advantage of having the accounts, so you can comment on posts, and reply on comments and other pretty common stuff.&lt;/p&gt;
&lt;h2 id=&quot;feedback%2C-please!&quot;&gt;Feedback, please! &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2019/11/satelite-beta/#feedback%2C-please!&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I would love for you to &lt;a href=&quot;https://beta.satelite.app/&quot;&gt;try Satelite out&lt;/a&gt; and send me any suggestion you might have or bug report you might find.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Issues with HDMI, Apple&#39;s USB-C dongle, and my MacBook Pro.</title>
		<link href="https://berbaquero.com/posts/2020/03/macbook-hdmi-adapter-issue/"/>
		<updated>2020-03-20T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2020/03/macbook-hdmi-adapter-issue/</id>
		<content type="html">&lt;p&gt;I was having issues with my MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports) when trying to connect my external screen with its HDMI cable via Apple&#39;s &lt;a href=&quot;https://support.apple.com/en-us/HT207806&quot;&gt;USB-C Digital AV Multiport Adapter&lt;/a&gt; a.k.a. dongle.&lt;/p&gt;
&lt;p&gt;Basically, the MacBook wouldn&#39;t recognize the HDMI connection via the dongle, no matter which of the 2 ports I was using. Sometimes, not even the power charging would work, neither directly to the MacBook nor via the dongle.&lt;/p&gt;
&lt;p&gt;I tried with another dongle of the same kind, and it didn&#39;t work either. And both dongles worked fine on another, similar MacBook model. It didn&#39;t seem to be a dongle issue.&lt;/p&gt;
&lt;p&gt;This seem to indicate it was an issue with my MacBook itself. It could a hardware-software issue.&lt;/p&gt;
&lt;p&gt;After &lt;a href=&quot;https://duckduckgo.com/&quot;&gt;DuckDuckGoing&lt;/a&gt; for driver-related issues, I found this &lt;a href=&quot;https://support.apple.com/en-us/HT201295&quot;&gt;Apple Support Page about resetting the System Management Controller&lt;/a&gt;. It provided the solution to my problem.&lt;/p&gt;
&lt;h2 id=&quot;solution&quot;&gt;Solution &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2020/03/macbook-hdmi-adapter-issue/#solution&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Resetting the controller that handles the management of the USB-C connection a.k.a System Management Controller (SMC) fixed my issue.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These are the steps I took for my MacBook Pro (extracted and paraphrased from the article linked above. Might be different steps depending on your specific MacBook model):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Shut down the MacBook.&lt;/li&gt;
&lt;li&gt;When it&#39;s off, &lt;em&gt;press and hold&lt;/em&gt; the &lt;strong&gt;left-side &lt;kbd&gt;control&lt;/kbd&gt; + &lt;kbd&gt;option&lt;/kbd&gt; + &lt;kbd&gt;shift&lt;/kbd&gt; keys&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;While holding those keys pressed, &lt;em&gt;press and hold&lt;/em&gt; the &lt;strong&gt;power key&lt;/strong&gt; (on the upper right corner of the keyboard) to turn the MacBook back on.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Keep those 4 keys pressed for 10 seconds&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;After those 10 seconds, release all the keys. The MacBook should bootup like usual, and the problem should be solved. It was at least for me.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Afterwards, both the HDMI connection and the power charging worked fine again, all from one dongle.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>useDelayedDebounce react hook</title>
		<link href="https://berbaquero.com/posts/2020/09/use-delayed-debounce/"/>
		<updated>2020-09-24T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2020/09/use-delayed-debounce/</id>
		<content type="html">&lt;p&gt;For whenever you need to react to a repeatedly-and-rapidly-fired event, but only &lt;em&gt;some time after the last event occurred&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;For example, when you only want to make a request based on the value of a &lt;code&gt;&amp;lt;input type=“text”&amp;gt;&lt;/code&gt; but don’t want to send the request every time the user types each character.&lt;/p&gt;
&lt;h2 id=&quot;usedelayeddebounce.ts&quot;&gt;&lt;code&gt;useDelayedDebounce.ts&lt;/code&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2020/09/use-delayed-debounce/#usedelayeddebounce.ts&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; useState&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; useEffect &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;react&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;/**&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt; * Receives a value that is the result of a repeatedly-and-rapidly-fired event&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt; * and returns the value at the time after the last of those events ocurred.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt; * @param originalValue value to debounce off&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt; * @param delay amount of milliseconds to delay after the last event ocurred&lt;/span&gt;&lt;br /&gt; */&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; useDelayedDebounce&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;originalValue&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; number&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;V&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// set the initial debounced value based on the original one,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// and keep it in this hook&#39;s state&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;debouncedValue&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; setDebouncedValue&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;originalValue&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// Declare the side-effect that will handle the debouncing.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// Will execute when the component is mounted.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token function&quot;&gt;useEffect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; handler &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token comment&quot;&gt;// The debounced value will only be updated after the delay has passed.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token function&quot;&gt;setDebouncedValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;originalValue&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; delay&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token comment&quot;&gt;// Clean-up. Will execute when the component unmounts.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token comment&quot;&gt;// Cancel the current timeout if it hasn&#39;t triggered.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token comment&quot;&gt;// If the original value changes before the delay time happens,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token comment&quot;&gt;// then this cancellation will prevent the debounced value from being updated.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;        &lt;span class=&quot;token function&quot;&gt;clearTimeout&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;handler&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;// Side-effect will execute when the original value changes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;// (which should be &quot;a lot and very quickly&quot; for this whole hook to be useful).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;originalValue&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; debouncedValue&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;usage-example&quot;&gt;Usage Example &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2020/09/use-delayed-debounce/#usage-example&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; debouncedTextInput &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; useDelayedDebounce&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;textQuery&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// side effect that fetches a thing with the text field&#39;s value as input&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;useEffect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;	&lt;span class=&quot;token function&quot;&gt;makeFetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; debouncedTextInput&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;debouncedTextInput&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this usage (contrived) example, the side effect that will make the fetch will run only after 500 milliseconds have passed after the user stopped updating the text field. So no matter how quickly the user is typing, deleting, and otherwise updating the text field value, the request will only be made half a second after the user &lt;em&gt;stopped&lt;/em&gt; updating it.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The best from last-gen consoles; screenshots, video captures, and photo mode.</title>
		<link href="https://berbaquero.com/posts/2020/11/consoles-screenshot-video-photo-mode/"/>
		<updated>2020-11-15T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2020/11/consoles-screenshot-video-photo-mode/</id>
		<content type="html">&lt;p&gt;This week I bought a controller for my Nintendo Switch and only when I started using  it I realized there was no “capture” button in it. That meant not being able to  take a screenshot or save a video recording of the games.&lt;/p&gt;
&lt;p&gt;Only then I realised how important this feature was to me.&lt;/p&gt;
&lt;p&gt;The new generation of home game consoles started this week - &lt;em&gt;current-gen&lt;/em&gt; became &lt;em&gt;last-gen&lt;/em&gt;, and &lt;em&gt;next-gen&lt;/em&gt; became &lt;em&gt;current-gen&lt;/em&gt; - with the releases of Xbox Series X and PlayStation 5. And they bring lots of promises for what &amp;quot;the new current-gen&amp;quot; is supposed to mean.&lt;/p&gt;
&lt;p&gt;But just now, after not having a “capture” button on my controller, I looked back and realised what the most meaningful features from last-gen were to me: having the ability to take a snapshot of a nice looking or memorable moment of a game, while it’s happening, knowing that it will allow you to re-live it as much as you want in the future without having to actually replay the game and having to attempt to reproduce the moment is a brilliant feature which I love.&lt;/p&gt;
&lt;p&gt;Combine that with Photo Mode - which granted, not every game has one - and you get a winner combo of game memories preservation and in-gaming photography.&lt;/p&gt;
&lt;p&gt;More and more games are including Photo Modes that allow you to pause the game at any moment during gameplay and manipulate the camera, lightning, which characters are visible in the shot, and many more things, all in order to provide tools for taking great game moments. I love it.&lt;/p&gt;
&lt;p&gt;I have spent a long time just doing “game photography” - which at the same time, makes me appreciate more the artwork, art style, graphics quality and in general the visuals of the games.&lt;/p&gt;
&lt;p&gt;And being able to record videos has allowed me to re-watch great story moments and standout gaming experiences - beating a difficult boss, completing a challenge, or finishing a great set-piece - it’s a great way to go back to the game without having to actually play it again (which sometimes I simply don’t have the time to do, as much as I’d like!).&lt;/p&gt;
&lt;p&gt;Besides the same promises of even-better looking, higher-fidelity game visuals that come with every new generation of consoles, it’s this peripheral kind of features that end up being the more important legacies of a console and its time.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Quickly toggle Dark Mode on macOS via Automator</title>
		<link href="https://berbaquero.com/posts/2021/02/quick-dark-mode-toggle-automator-macos/"/>
		<updated>2021-02-11T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2021/02/quick-dark-mode-toggle-automator-macos/</id>
		<content type="html">&lt;p&gt;I like having a fast way to toggle Dark Mode, preferrably via the keyboard.&lt;br /&gt;
Turns out it&#39;s very simple to set this up without needing any third-party app:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Automator.app&lt;/strong&gt;. Included in macOS.&lt;/li&gt;
&lt;li&gt;Create new Application. Either via the initial popup or by going to &lt;em&gt;File → New&lt;/em&gt; in the top menu.&lt;/li&gt;
&lt;li&gt;Find and add the &lt;em&gt;&amp;quot;Change System Appearance&amp;quot;&lt;/em&gt; action. Either by double-clicking on it or dragging it into the right panel.&lt;/li&gt;
&lt;li&gt;Make sure the &lt;em&gt;Change Appearance&lt;/em&gt; action is set to &lt;strong&gt;Toggle Light / Dark&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Save the app as &amp;quot;Toogle Dark Mode&amp;quot; and put it in the Applications directory.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&#39;s it! Opening this app will simply toggle Dark Mode immediately.&lt;/p&gt;
&lt;p&gt;Combined with Spotlight (or Alfred) and you can quick-n-easy Dark Mode toggling via the keyboard.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>More iPad, less MacBook</title>
		<link href="https://berbaquero.com/posts/2022/10/more-ipad-less-macbook/"/>
		<updated>2022-10-17T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2022/10/more-ipad-less-macbook/</id>
		<content type="html">&lt;p&gt;I’ve realised that most of the things I used to do and enjoyed doing on my laptop, I do them now on my tablet.&lt;/p&gt;
&lt;p&gt;I think it started with the pandemic lockdown. Working from home all the time - which was something I was very happy with - came with an unexpected disadvantage: after spending my day working - sitting on my desk using the company laptop - I didn’t feel like using my own laptop at all, afterwards. The laptop had become a tool for work and I didn’t want to use it for anything else because it just reminded me of work.&lt;/p&gt;
&lt;p&gt;Now, this is not to say I don’t enjoy my job or anything like that. I very much love it, specially now that I get to do it from home. But the fact that I do it at home means that it’s a bit harder to separate work from my personal life, and in my mind, having a separate device and form factor (the tablet) for my personal projects and tasks makes it easier to provide that healthy separation.&lt;/p&gt;
&lt;p&gt;But even more than that, I enjoy the extra portability of the tablet over the laptop. The iPad Pro is lighter and a bit smaller than the laptop - 11” vs. 14” respectively in my case. Which allows me to do my things pretty much anywhere in the house.&lt;/p&gt;
&lt;p&gt;Most importantly, the touch screen. I know none of this is new and it’s in fact taken for granted by everyone since these technologies have been ubiquitous for a long time now, but being able to do my &lt;em&gt;computing&lt;/em&gt; on a touch screen feels fresh, &lt;em&gt;fun and engaging&lt;/em&gt; in a way that a keyboard and mouse is not.&lt;/p&gt;
&lt;p&gt;Coding is the only thing that I still prefer to do on a laptop, because it’s still more comfortable and effective than on a tablet, or possible at all. Trying to do it on the iPad is extra difficult since you cannot have normal access to any programming language or development environment on it. There are ways: either using a Terminal-like app to connect and write to an external device which is doing the actual processing of the code is one. A more straightforward approach is using Web IDEs like &lt;a href=&quot;https://glitch.com/&quot;&gt;glitch.com&lt;/a&gt;, &lt;a href=&quot;https://codesandbox.io/&quot;&gt;codesandbox.io&lt;/a&gt;, &lt;a href=&quot;https://github.dev/&quot;&gt;github.dev&lt;/a&gt;, and &lt;a href=&quot;https://vscode.dev/&quot;&gt;vscode.dev&lt;/a&gt; from the browser. You still need to connect a keyboard to make this comfortable enough, but it gets you closer to “the real thing”.&lt;/p&gt;
&lt;p&gt;Perhaps a good native code editor already exists for iPadOS and I’m just not aware of it - one that still would need to connect to an external machine that does the code processing, but that at least makes the code-editing experience feel truly native on the iPad. My ideal scenario, however, would be a completely touch screen-centered interface for “writing” code without actually needing your keyboard as much or at all - perhaps only for naming your variables - and where everything else is done by using the touch-screen and its interactions to the fullest, for a more “interactive” and engaging experience.&lt;/p&gt;
&lt;p&gt;All in all, using the iPad feels more instant, more engaging, and even though its operating system is very strict and constrained when compared with a desktop-class OS, I’ve actually enjoyed the simplicity that comes with that.&lt;/p&gt;
&lt;p&gt;Maybe at some point I’ll get to completely move everything to the tablet - all iPad, no MacBook.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Easier dark-mode CSS with Sass</title>
		<link href="https://berbaquero.com/posts/2023/03/sass-dark-mode/"/>
		<updated>2023-03-28T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2023/03/sass-dark-mode/</id>
		<content type="html">&lt;p&gt;When offering a dark-mode for a website, you probably want to offer an &amp;quot;automatic&amp;quot; or &amp;quot;system&amp;quot; option which follows the OS-level user preference for dark mode instead of explicitly forcing a light or dark mode.&lt;br /&gt;
This way, visitors can choose:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;dark&lt;/code&gt;: for always dark-mode&lt;/li&gt;
&lt;li&gt;&lt;code&gt;light&lt;/code&gt;: for always light-mode&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auto&lt;/code&gt;: for automatically switching between dark/light based on operating-system setting.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Writing the CSS for dark-mode that covers these options currently requires a lot of boilerplate, however. With the setup and the Sass mixin I&#39;m sharing next, it should hopefully be easier to handle this.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: we&#39;re not focusing on the mechanics of how to switch between these options using JavaScript in this post. We&#39;re focusing on the CSS implementation specifically.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-setup&quot;&gt;The setup &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2023/03/sass-dark-mode/#the-setup&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On your document, you&#39;re going to add a &lt;code&gt;data-theme&lt;/code&gt; attribute to the root &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; whose value will be the currently chosen option:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- always dark-mode --&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-theme&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;dark&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- automatic / based on system preference --&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-theme&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;auto&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Again, how you chose to update this value on your pages is outside of the scope of this post.&lt;/p&gt;
&lt;h2 id=&quot;the-sass-mixin&quot;&gt;The Sass Mixin &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2023/03/sass-dark-mode/#the-sass-mixin&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&#39;s the mixin that takes care of everything:&lt;/p&gt;
&lt;pre class=&quot;language-scss&quot;&gt;&lt;code class=&quot;language-scss&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;@mixin&lt;/span&gt; &lt;span class=&quot;token selector&quot;&gt;on-dark-mode &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;prefers-color-scheme&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; dark&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token selector&quot;&gt;html[data-theme=&quot;auto&quot;] &lt;span class=&quot;token parent important&quot;&gt;&amp;amp;&lt;/span&gt; &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;      &lt;span class=&quot;token keyword&quot;&gt;@content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token selector&quot;&gt;html[data-theme=&quot;dark&quot;] &lt;span class=&quot;token parent important&quot;&gt;&amp;amp;&lt;/span&gt; &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;@content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here&#39;s how to use it:&lt;/p&gt;
&lt;pre class=&quot;language-scss&quot;&gt;&lt;code class=&quot;language-scss&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.some-component &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// base / light-mode styles&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;--bg-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; white&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--bg-color&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; black&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// dark-mode styles&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token keyword&quot;&gt;@include&lt;/span&gt; &lt;span class=&quot;token selector&quot;&gt;on-dark-mode &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;--bg-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; black&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; white&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I use this mixin in any Sass project I work on, and so far it has worked nicely!&lt;/p&gt;
&lt;h3 id=&quot;limitations%3A-can&#39;t-be-used-for-root%2Fhtml-styles&quot;&gt;Limitations: can&#39;t be used for root/html styles &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2023/03/sass-dark-mode/#limitations%3A-can&#39;t-be-used-for-root%2Fhtml-styles&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The only downside to this mixin (that I&#39;m aware of) is that it can&#39;t be used for declaring dark-mode styles in the &lt;code&gt;:root&lt;/code&gt; or &lt;code&gt;html&lt;/code&gt; element;&lt;br /&gt;
it only works for decendants of it, starting with &lt;code&gt;body&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This means it can&#39;t be used to define a set of &amp;quot;global&amp;quot; colors as Custom Properties to be updated based on dark-mode, for instance.&lt;/p&gt;
&lt;h2 id=&quot;the-future%3A-simpler-implementation&quot;&gt;The future: simpler implementation &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2023/03/sass-dark-mode/#the-future%3A-simpler-implementation&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Hopefully sometime later in 2023 we will be able to &lt;a href=&quot;https://thinkdobecreate.com/articles/simplified-dark-mode-with-style-queries/&quot;&gt;use style queries to simplify and shorten the code needed for robust dark-mode support&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>ZapKeys</title>
		<link href="https://berbaquero.com/posts/2023/03/zapkeys/"/>
		<updated>2023-03-31T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2023/03/zapkeys/</id>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://zapkeys.berbaquero.com/&quot;&gt;Homepage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/zapkeys&quot;&gt;npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/berbaquero/zapkeys&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ZapKeys is a JavaScript UI utility that makes it super easy and quick to add keyboard shortcuts to any page.&lt;/p&gt;
&lt;h2 id=&quot;try-it-now&quot;&gt;Try it now &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2023/03/zapkeys/#try-it-now&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The easiest way to see it in action is by pressing the &lt;kbd&gt;F&lt;/kbd&gt; key now, on this page!&lt;/p&gt;
&lt;h2 id=&quot;what-it-does%3A-a-different-approach-to-shortcuts&quot;&gt;What it does: a different approach to shortcuts &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2023/03/zapkeys/#what-it-does%3A-a-different-approach-to-shortcuts&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Instead of requiring visitors/customers to learn and memorize some set of keypress combinations for your website, ZapKeys simply shows a key or key-sequence above each interative element on the page. They can then press the key/sequence and the corresponding element&#39;s interaction will be triggered.&lt;/p&gt;
&lt;p&gt;So buttons and links will be clicked, forms fields will be focused on, etc. All without needing a pointer device or mouse.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot;&gt;How it works &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2023/03/zapkeys/#how-it-works&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When it&#39;s activated by the end-user - by pressing the preconfigured activation key - ZapKeys grabs all the currently-visible interactive elements of the page (buttons, links, form-fields) and adds an overlay with a unique key/sequence over each element. Then, when one of the key-sequences is pressed, the corresponding element&#39;s interaction is triggered.&lt;/p&gt;
&lt;h2 id=&quot;the-easiest-setup&quot;&gt;The easiest setup &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2023/03/zapkeys/#the-easiest-setup&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My goal was to make setting it up as easy as possible; with the default configuration and in the simplest implementation, you only need to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Include ZapKeys&#39; CSS, and&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Import the JS module and initialize it:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- On your HTML --&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://unpkg.com/zapkeys@0.2.1/dist/index.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;module&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; ZapKeys &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://unpkg.com/zapkeys@0.2.1/dist/zapkeys.esm.js&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; zapkeys &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ZapKeys&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// default config - pressing &#39;F&#39; will activate the shortcuts&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  zapkeys&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;That&#39;s it!&lt;/strong&gt; This is &lt;em&gt;exactly&lt;/em&gt; the setup used in &lt;a href=&quot;https://zapkeys.berbaquero.com/&quot;&gt;ZapKeys&#39; homepage&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Naturally there&#39;s more configuration options to customise ZapKeys - you can check those on the &lt;a href=&quot;https://www.npmjs.com/package/zapkeys&quot;&gt;npm page&lt;/a&gt;. It&#39;s also available for bundling via &lt;code&gt;npm i zapkeys&lt;/code&gt; or &lt;code&gt;yarn add zapkeys&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;years-in-the-making&quot;&gt;Years in the making &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2023/03/zapkeys/#years-in-the-making&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I started working on this utility around five years ago!&lt;/p&gt;
&lt;p&gt;I was inspired by &lt;a href=&quot;https://support.apple.com/en-us/HT210539#numberoverlays&quot;&gt;Number overlays in Voice Control for macOS&lt;/a&gt; which was announced around that time. I thought that while it would be difficult to make it work by voice on the browser, it was nice how Voice Control added a visual indicator for each element that you could interact with. I figured the next best thing was to make it work with the keyboard instead.&lt;/p&gt;
&lt;p&gt;While looking for existing libraries that implemented this solution I only found &amp;quot;traditional&amp;quot; shortcut libraries. But then I found &lt;a href=&quot;https://vimium.github.io/&quot;&gt;Vimium&lt;/a&gt; which has a feature that&#39;s pretty much what I had in mind, but wasn&#39;t a library that I could use on my own sites. That&#39;s when I decided to build it myself.&lt;/p&gt;
&lt;p&gt;At some point it was working well enough in both &lt;a href=&quot;https://satelite.app/&quot;&gt;Satelite&lt;/a&gt; and on this website so I considered it finished. Later I published it in npm as &amp;quot;Teclas&amp;quot; but I never worked on announcing or actually sharing it, I think partially because I didn&#39;t like the name.&lt;/p&gt;
&lt;p&gt;Years later I came up with the new name and thought about renaming it and publishing it. But then I didn&#39;t. And more time passed.&lt;/p&gt;
&lt;p&gt;Only a few days ago I found a bug which prompted me to update it with the fix and get it ready for publishing, actually for real this time, fr fr.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://tsdx.io/&quot;&gt;TSDX&lt;/a&gt; made it very easy to get ZapKeys ready as a npm library.&lt;/p&gt;
&lt;p&gt;And here we are! ⚡&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Album Whale</title>
		<link href="https://berbaquero.com/posts/2024/06/album-whale/"/>
		<updated>2024-06-08T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2024/06/album-whale/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://albumwhale.com/&quot;&gt;Album Whale&lt;/a&gt;&#39;s homepage does a fantastic job at letting you know if it&#39;s something you would enjoy. It immediately hooked me.&lt;/p&gt;
&lt;p&gt;It&#39;s a simple website: you create an account and make lists of music albums. That&#39;s it. You can keep them private if you want to use it for tracking your own stuff, or make them public for sharing with others.&lt;/p&gt;
&lt;p&gt;I had been meaning to create a simple page for &lt;a href=&quot;https://albumwhale.com/ber/licorice-pizzas&quot;&gt;my vinyl collection&lt;/a&gt; for a while, so AW came in perfectly.&lt;/p&gt;
&lt;p&gt;Some super lightweight social bits add a bit of fun and make for potentially discovering new music, too; there&#39;s a &lt;a href=&quot;https://albumwhale.com/discover&quot;&gt;Discover&lt;/a&gt; page which highlights the public lists, and &lt;em&gt;liking&lt;/em&gt; others&#39; public  will probably influence what&#39;s shown on some parts of this Discover page.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://albumwhale.com/ber&quot;&gt;Here&#39;s my Album Whale profile&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;quot;Let&#39;s bring back albums!&amp;quot;.&lt;/p&gt;
&lt;p&gt;💿 🐋&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Revisiting The Last Of Us Part II</title>
		<link href="https://berbaquero.com/posts/2024/12/revisiting-the-last-of-us-part-2/"/>
		<updated>2024-12-24T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2024/12/revisiting-the-last-of-us-part-2/</id>
		<content type="html">&lt;p&gt;A recent family tragedy strangely prompted me to revisit this game for the first time since the original release. This personal loss left me feeling heavy and numb, and I felt like playing something equally heavy and dark as a channel for catharsis.&lt;/p&gt;
&lt;p&gt;Frankly I just wanted to experience the story again. I remember that the first time I played it, I was always stressed and tense because of how hopeless the atmosphere feels and how oppressive the gameplay is. I definitely didn’t want to go through that again, so I chose the Light difficulty. It worked; it was still immersive and involved enough to make it exciting without it becoming overwhelming. The fact that I already knew when the big events were coming helped me better prepare for them. All in all I ended up appreciating the story much more.&lt;/p&gt;
&lt;p&gt;I adore this story. It expands an already interesting setting into a fascinating world. The Wolves and Seraphites and their clash in the North, and the Rattlers in the South; how each area or population can evolve (or devolve) so wildly and differently; how the good-natured ideas of an individual can be twisted over time into an extremist cult; how one people’s “happy” ending can be the beginning of a nightmare for another. The corrosive nature of hatred. Guilt and redemption. Regrets and amends.&lt;/p&gt;
&lt;p&gt;Now this world has its teeth on me; I want to listen to the official accompanying podcast, re-watch the making-of documentary, and replay the story with the developer’s commentary. Of course I’m super eager to watch the TV adaption of Part II. And finally, I’m really hoping we get see where Ellie, Abby, Lev, and Dina are in Part III.&lt;/p&gt;
&lt;p&gt;Here’s to the future days.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Also published as a &lt;a href=&quot;https://backloggd.com/u/ber/review/2223082/&quot;&gt;review on my backloggd profile&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Best Of 2024</title>
		<link href="https://berbaquero.com/posts/2024/12/best-of-2024/"/>
		<updated>2024-12-31T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2024/12/best-of-2024/</id>
		<content type="html">&lt;p&gt;Making lists is fun. It&#39;s one of the reasons I love using &lt;a href=&quot;https://letterboxd.com/berbaquero/&quot;&gt;letterboxd&lt;/a&gt;, &lt;a href=&quot;https://backloggd.com/u/ber/&quot;&gt;backloggd&lt;/a&gt;, and &lt;a href=&quot;https://albumwhale.com/ber&quot;&gt;album whale&lt;/a&gt;. But I haven&#39;t made one of these for this blog in a long time and since I&#39;ve decided to make and effort of writing more here, it was a good way to get back on it.&lt;/p&gt;
&lt;p&gt;So these were my favourite game/film/music/show releases of 2024. The lists have no particular order.&lt;/p&gt;
&lt;h2 id=&quot;games&quot;&gt;Games &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#games&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I played a lot of games in 2024, but only a handful were actually released this year. I guess the journey to be more of a &amp;quot;patient player&amp;quot; is ongoing.&lt;/p&gt;
&lt;h3 id=&quot;1.-like-a-dragon%3A-infinite-wealth&quot;&gt;1. Like A Dragon: Infinite Wealth &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#1.-like-a-dragon%3A-infinite-wealth&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Ridiculously massive and oh-so-fun. It&#39;s easily my favourite entry on the series so far. I started playing it right after it released and only finished a few weeks ago—both because I took my time, took breaks, and jumped to other games in between.&lt;/p&gt;
&lt;p&gt;I didn&#39;t even dig into the Sujimon (Pokemon-inspired) and Dondoko Island (Animal Crossing-inspired) side-games! Who knows how long it would have taken me to get through those.&lt;/p&gt;
&lt;p&gt;The jobs are hilarious, the battle system is a blast, and the side-stories are as crazy, creative, and emotional as ever. I specially love that it&#39;s a Japanese RPG where the main cast is made of grown-up adults and besides the hilarious insane special moves and abilities in battle, it&#39;s a pretty grounded story.&lt;/p&gt;
&lt;p&gt;It&#39;s the complete package.&lt;/p&gt;
&lt;h3 id=&quot;2.-astro-bot&quot;&gt;2. Astro Bot &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#2.-astro-bot&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Absolute joy and nostalgia turned into a modern 3D platformer. Just by looking at the previews of this game—and based on the excellent previous entries in the series, Rescue Mission and Playroom—I knew Astro Bot was going to be special. It was pretty much what I expected: a wonderful, creative, funny, super fun, optionally challenging, and ultimately rewarding experience. Specially as a fan of PlayStation and its history and legacy, to which the game pays a lot of homage to. A certified classic.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://backloggd.com/u/ber/review/1925746/&quot;&gt;Here&#39;s my review of Astro Bot on Backloggd&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;3.-prince-of-persia%3A-the-lost-crown&quot;&gt;3. Prince Of Persia: The Lost Crown &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#3.-prince-of-persia%3A-the-lost-crown&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The best Metroidvania that I&#39;ve played since Hollow Knight. You can just tell the game was made with lots of passion and attention to details. The combat, exploration, puzzles, and platforming are fantastic and super rewarding. The setting is intriguing and captivating and the story and characters were engaging enough to keep me motivated to move forward. I really hope this team gets the chance to follow-up on this amazing entry. If not, at least I have the DLC as an excuse to revisit it.&lt;/p&gt;
&lt;h3 id=&quot;4.-ufo-50&quot;&gt;4. UFO 50 &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#4.-ufo-50&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A staggering achievement in the indie space. It&#39;s 50 &amp;quot;NES-scale&amp;quot; games—meaning, these are full-blown games at a level similar to the ones originally released during the NES lifetime; these are not &amp;quot;mini-games&amp;quot;!—but exploring either new ideas or variations of the premises from the games of that era with a more modern twist, all packaged and presented as a collection of a fictional console from that time.&lt;/p&gt;
&lt;p&gt;At the moment I haven&#39;t even played all of the games yet (I&#39;ve played a bit more than half of them) and even though not all of them are my jam, the ones that I&#39;ve liked are really, really fun and engaging. Some could have been released as standalone games and they surely would be well received on their own. Lots of the game have &amp;quot;couch&amp;quot; multiplayer modes as well!&lt;/p&gt;
&lt;p&gt;These are my favourites so far, in &amp;quot;chronologic&amp;quot; order by &amp;quot;release date&amp;quot;: Ninpek, Magic Garden, Velgress, Attactics, Avianos, Bushido Ball, Block Koala, &lt;strong&gt;Camouflage&lt;/strong&gt;, Campanella, The Big Bell Race, Warptank, Porgy, Rakshasa, &lt;strong&gt;Pilot Quest&lt;/strong&gt;, and Seaside Drive.&lt;/p&gt;
&lt;p&gt;All in all, UFO 50 provides insane value in many ways and is without a doubt one of 2024&#39;s gaming highlights.&lt;/p&gt;
&lt;h2 id=&quot;films&quot;&gt;Films &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#films&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These last few months of the year have sadly been devoid of film-watching. I think I&#39;ve watched maybe 3 or 4 films in total in the last 3 months! I know there&#39;s a lot of great stuff that I&#39;ve missed from the last quarter of the year. I just hope I get to catch up on them sooner than later.&lt;/p&gt;
&lt;h3 id=&quot;1.-dune%3A-part-two&quot;&gt;1. Dune: Part Two &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#1.-dune%3A-part-two&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I&#39;ve watched this film 4 times - 3 of those in the cinema. It&#39;s definitely my favourite film of 2024. &lt;a href=&quot;https://letterboxd.com/berbaquero/film/dune-part-two/reviews/&quot;&gt;Here&#39;s what I wrote about Dune: Part Two on Letterboxd&lt;/a&gt;. It&#39;s a highly rewarding experience, visually and sonically stunning, and ever more grandiose in scale. Peak sci-fi, specially paired with Part I.&lt;/p&gt;
&lt;h3 id=&quot;2.-inside-out-2&quot;&gt;2. Inside Out 2 &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#2.-inside-out-2&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I loved the original one, and was frankly doubtful about this &amp;quot;unnecessary&amp;quot; sequel. In retrospect a sequel was inevitable; given the critical and commercial success of the original, the potential of exploring the mind of an older protagonist as a premise, and the state of Pixar (or Hollywood in general), a follow-up was a no-brainer. And oh they pulled it off. I watched it with family in a movie theatre in Seattle while visiting my sister, and we all ended up crying by the end. The depiction of anxiety was cathartic.&lt;/p&gt;
&lt;h3 id=&quot;3.-challengers&quot;&gt;3. Challengers &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#3.-challengers&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A sweaty, steamy blast. Reznor &amp;amp; Atticus&#39; feverish soundtrack completely elevated the whole thing.&lt;/p&gt;
&lt;h3 id=&quot;4.-alien%3A-romulus&quot;&gt;4. Alien: Romulus &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#4.-alien%3A-romulus&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;After the disappointment that &lt;em&gt;Prometheus&lt;/em&gt; (incredibly hyped, still good, but not great) and &lt;em&gt;Covenant&lt;/em&gt; (plain bad) turned out to be, I was actually looking forward to a new promising director taking over and I&#39;m quite happy with what Fede Alvarez delivered. &lt;em&gt;Romulus&lt;/em&gt; has some intense set pieces and surprisingly great character moments. A few things stood out as tad unearned and perhaps treaded familiar grounds, but it&#39;s overall a fantastic return to the universe of Alien.&lt;/p&gt;
&lt;h2 id=&quot;music&quot;&gt;Music &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#music&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I feel like this year I didn&#39;t go out of my way to discover new music nor dig into new releases from my old favourites. The few ones that I did spin and enjoy (like King Gizzard&#39;s &lt;em&gt;Flight b741&lt;/em&gt;, Frost*&#39;s &lt;em&gt;Life In The Wires&lt;/em&gt;, Billie Eilish&#39;s &lt;em&gt;HIT ME HARD AND SOFT&lt;/em&gt;, THUS LOVE&#39;s &lt;em&gt;All Pleasure&lt;/em&gt;, and Childish Gambino&#39;s &lt;em&gt;Bando Stone and The New World&lt;/em&gt;) didn&#39;t really grab me enough to put them on my list.&lt;/p&gt;
&lt;p&gt;But there was one album that came out of nowhere and instantly hooked me, so much so that it&#39;s the only entry on my list.&lt;/p&gt;
&lt;h3 id=&quot;1.-blood-incantation&#39;s-absolute-elsewhere&quot;&gt;1. Blood Incantation&#39;s &lt;em&gt;Absolute Elsewhere&lt;/em&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#1.-blood-incantation&#39;s-absolute-elsewhere&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I had never heard of this band at all, but I suddenly saw some buzz around this release from metal-heads in my social media spaces. Finally, it was one of Mike Portnoy&#39;s posts on Instagram, which recommended the album and—more importantly—featured the cover artwork, what prompted me to give it a spin for the first time. Seriously, I loved the album cover artwork from the moment I first saw it and now I feel it perfectly captures the atmosphere and tone of the music therein. It&#39;s a true musical journey which jumps between death metal, electronica, psychedelic rock, and progressive rock, in both an elegant and intense package.&lt;/p&gt;
&lt;p&gt;This is also the album that finished the dominance that King Gizzard And The Lizard Wizard had over my music listening the entire year.&lt;/p&gt;
&lt;h3 id=&quot;the-year-of-king-gizzard-and-the-lizard-wizard&quot;&gt;The year of King Gizzard And The Lizard Wizard &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#the-year-of-king-gizzard-and-the-lizard-wizard&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The reason I didn&#39;t have time to discover almost no new music from 2024 was because I invested it all in discovering the music from KGATLW (which was effectively new to me).&lt;/p&gt;
&lt;p&gt;Even though I first listened to KGATLW in 2023, it was actually this year that I really got into them and became completely enthralled by their insanely expansive discography, their music creativity, their work ethic, and their overall output. It was just so much fun and so rewarding to try and dig into any of their twenty-something released albums and discover what genres and which crazy, ambitious ideas they decided to tackle on each of them.&lt;/p&gt;
&lt;p&gt;Funnily enough, their one proper new music release this year - &lt;em&gt;Flight b741&lt;/em&gt; - didn&#39;t really vibe with me that much; &amp;quot;Le Risque&amp;quot; was the only song from it that I&#39;ve kept in my constant rotation.&lt;/p&gt;
&lt;p&gt;However, lots of their previously released albums completely took over for the vast majority of my 2024. In no particular order, these were the KGATLW albums that decorated most of my time throughout the year:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;PetroDragonic Apocalypse&lt;/strong&gt;: incredible concept album from start to finish. It&#39;s a thrash and progressive metal album with a classic, vintage, raw sound. The first album from them I listened to.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Butterfly 3000&lt;/strong&gt;: an electronic pop/rock outing filled with uplifting and catchy hooks. Just feel-good tunes here!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nonagon Infinity&lt;/strong&gt;: 9 buzz-filled punk songs, all connected, and forming a never-ending listening cycle. One of my most played.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Polygondwanaland&lt;/strong&gt;: intricate, progressive, and highly creative. Crumbling Castle might be one of my favourite songs ever.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infest The Rats&#39; Nest&lt;/strong&gt;: another thrash concept album with even rawer energy and more garage sound.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Silver Cord&lt;/strong&gt;: full-blown psychedelic electronica.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;tv-shows&quot;&gt;TV Shows &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2024/12/best-of-2024/#tv-shows&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Finally, these are the highlights from shows on streaming platforms.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Shōgun&lt;/strong&gt;: excellent from start to finish. Fascinating, memorable characters and an alluring, mysterious plot, all delivered with incredible performances and technical prowess.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arcane&lt;/strong&gt;: among the most stunning animation work ever, and filled with memorable, complex characters, but with a tad disjointed story as it went on. While not as sublime as Season 1, it&#39;s still a technical and storytelling benchmark.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fallout&lt;/strong&gt;: The Ghoul stole the show. A surprisingly funny, twisted, and gripping story. Got tired of the old-time music pretty quickly but the rest of it was a total ...blast.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dandadan&lt;/strong&gt;: came out of nowhere for me, and from the first minutes of the first episode (that intro!) I was entranced. It bursts with style and charm.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kaos&lt;/strong&gt;: such a disappointment that this was cancelled so quickly after premiering! While it did have a couple of rough moments, I thought the overall setting of &amp;quot;ancient-greek mythology characters in the modern-day world&amp;quot; was an interesting, fresh premise that was nicely executed. What a shame.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;X-men &#39;97&lt;/strong&gt;: I wasn&#39;t even that big of a fan of the original show (except for that opening theme of course!), but the premise of a follow-up more than 15 years later was exciting, and &#39;97 came in and utterly surpassed any expectations I had. Great animation but specially fantastic characters and emotional moments, and the setup for Season 2 makes the wait all the more hard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Baby Reindeer&lt;/strong&gt;: the fact that this is based on a real story is just wild and heartbreaking. A &lt;em&gt;tour de force&lt;/em&gt; by the leads and a crushing, riveting story.&lt;/li&gt;
&lt;/ol&gt;
</content>
	</entry>
	
	<entry>
		<title>They announced the Switch 2, finally</title>
		<link href="https://berbaquero.com/posts/2025/01/switch-2-announced/"/>
		<updated>2025-01-16T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2025/01/switch-2-announced/</id>
		<content type="html">&lt;p&gt;🔗 &lt;a href=&quot;https://youtu.be/WxLUf2kRQRE?si=MAyKg-70NpDeiYXu&quot;&gt;Nintendo Switch 2 – First-look trailer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some quick thoughts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Feature- and offering-wise it&#39;s pretty much what I expected: a safe upgrade without risks. Nintendo probably doesn&#39;t want to mess with their winning formula.&lt;/li&gt;
&lt;li&gt;Also unsurprising but still worth commending: backwards compatibility both physical and digital. It would have been alienating otherwise.&lt;/li&gt;
&lt;li&gt;Hopefully the bigger size (bigger screen!) means actually comfortable controllers.&lt;/li&gt;
&lt;li&gt;Bigger buttons in the controllers and more space between them is super welcomed. However,&lt;/li&gt;
&lt;li&gt;It doesn&#39;t seem like the new controllers have any grips. After having the comfy grips on the Steam Deck it&#39;s too bad Switch 2 won&#39;t offer anything similar.&lt;/li&gt;
&lt;li&gt;Very curious about what looks to be mouse-like functionality for the controllers.&lt;/li&gt;
&lt;li&gt;The magnetic attachment of the controllers to the console looks great.&lt;/li&gt;
&lt;li&gt;They&#39;re going to exhibit the new console in special events across the world, including Amsterdam! Will try to attend.&lt;/li&gt;
&lt;li&gt;Is that a new Mario Kart game, then? It doesn&#39;t look that different from MK8 so it&#39;s hard to tell.&lt;/li&gt;
&lt;li&gt;Overall I&#39;m not excited yet. Will have to wait for proper game announcements and more details on the hardware.&lt;/li&gt;
&lt;li&gt;I will most likely get it sooner than later anyway (I&#39;ll be there day one when the new 3D Mario is out).&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Sticker-bombing my laptop</title>
		<link href="https://berbaquero.com/posts/2025/01/sticker-bombing-laptop/"/>
		<updated>2025-01-23T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2025/01/sticker-bombing-laptop/</id>
		<content type="html">&lt;p&gt;I can never have enough stickers. I love them. But for a long time I would hesitate on actually using them because &amp;quot;what if it was the wrong place for it?&amp;quot;. I was afraid of &amp;quot;wasting&amp;quot; my precious stickers on stuff that maybe I would need to replace or get rid of some time later. So I started accumulating them and then doing pretty much nothing with them, just sticking some of them here and there every once in a while.&lt;/p&gt;
&lt;p&gt;But of course the point of stickers is to cover stuff with them! Not just collecting them and keeping them hidden away in some drawer, but to actually see them in the stuff you use or in spots you pass by regularly. Once I stopped feeling &amp;quot;sticker anxiety&amp;quot; I started looking everywhere for a nice spot to put stickers on.&lt;/p&gt;
&lt;h2 id=&quot;first-attempt&quot;&gt;First attempt &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/01/sticker-bombing-laptop/#first-attempt&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Once I decided I wanted to sticker-bomb &lt;em&gt;something&lt;/em&gt;, I chose to start with one of the cover plates of my PS5. And I learned an important lesson: &lt;em&gt;do not start with your &amp;quot;nice&amp;quot; stickers&lt;/em&gt;—the ones you want to actually display when you&#39;re finished. It&#39;s obvious in retrospective, but I was excited to start putting my cool stickers on it and then when it was time to cover the spaces in between, I started feeling a bit sad that I&#39;d be covering them with less nice-looking ones. So I only added small generic stickers that wouldn&#39;t obstruct the previous ones and it all ended up looking pretty rough and lame. Now I have one PS5 cover plate half-full of nice stickers, less-than-nice ones, and lots of white-space, and I guess it will stay that way!&lt;/p&gt;
&lt;img src=&quot;https://berbaquero.com/img/ps5-stickered.jpg&quot; alt=&quot;PS5 face plate with around 2 dozens of random stickers scattered over it&quot; width=&quot;1000&quot; height=&quot;1537&quot; /&gt;
&lt;p&gt;So yeah, you should start the &amp;quot;base layer&amp;quot; with the big, random, more generic stickers—the ones you don&#39;t care too much about because their main purpose is to fill-up the background.&lt;/p&gt;
&lt;h2 id=&quot;doing-it-right-%E2%99%AA&quot;&gt;Doing it right ♪ &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/01/sticker-bombing-laptop/#doing-it-right-%E2%99%AA&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Last year, while visiting Seattle I bought a couple of sticker books—the ones that got pages and pages of stickers from different artists and styles—which are precisely designed for sticker-bombing. But even after I got them, I wasn&#39;t sure where to use them—definitely not on the PS5 plate! That&#39;s when I put my eyes on my laptop.&lt;/p&gt;
&lt;p&gt;I&#39;ve had my laptop (a 13-inch M1 MacBook Air) since pretty much its original release date in 2020. I love its pinkish gold color finish, so back then I had decided to only put one sticker on the corner to, you know, &lt;em&gt;keep it classy&lt;/em&gt; (also, the aforementioned sticker anxiety).&lt;/p&gt;
&lt;img src=&quot;https://berbaquero.com/img/mb-clean.jpg&quot; alt=&quot;Laptop cover lid with only one sticker on the top left corner&quot; width=&quot;956 &quot; height=&quot; 659&quot; /&gt;
&lt;p&gt;Even though &lt;a href=&quot;https://berbaquero.com/posts/2022/10/more-ipad-less-macbook/&quot;&gt;I try to use my MacBook less often in favour of my iPad&lt;/a&gt; I have recently been going back to it more because it&#39;s naturally much more comfortable to code and write on it. I still love this laptop; it&#39;s as powerful and feels as snappy as when I first got it. So I figured it&#39;s a good time to freshen up its looks. And not just by putting a few stickers on it—I&#39;ve always put a handful of stickers on my previous laptops—but now I wanted to go all-in on it; to cover the entire lid with sticker art. A proper sticker-bombing.&lt;/p&gt;
&lt;p&gt;This time I did start by covering the base with &amp;quot;random&amp;quot; stickers—some are really nice anyway!—and once it was mostly covered, I&#39;d bring in some of the stickers I really liked and wanted to appreciate every time I looked at the back of the laptop.&lt;/p&gt;
&lt;p&gt;Doing the base layer was a quick operation. Even faster if you see the time-lapse video I recorded for it: &lt;a href=&quot;https://mastodon.social/@bbs/113879468173381439&quot;&gt;time-lapse video on my mastodon profile&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I then added a handful of my &amp;quot;nice&amp;quot; stickers to fill the bits that &lt;em&gt;seemed&lt;/em&gt; empty or weird.&lt;/p&gt;
&lt;h2 id=&quot;the-result&quot;&gt;The result &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/01/sticker-bombing-laptop/#the-result&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;img src=&quot;https://berbaquero.com/img/mb-stickered.jpg&quot; alt=&quot;Laptop cover lid fully covered in all styles of stickers&quot; width=&quot;1008 ×&quot; height=&quot;756&quot; /&gt;
&lt;p&gt;A messy, beautiful wall of sticker art!&lt;/p&gt;
&lt;p&gt;Some of the nice stickers I chose to include initially are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 4-star dragon ball, which I got in a Shōnen Jump pop-up store in Tokyo.&lt;/li&gt;
&lt;li&gt;The Hologram one, which came with the &lt;a href=&quot;https://www.hologramelectronics.com/chroma-console&quot;&gt;Chroma Console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A couple of small Afro Ken ones that I got in Seattle.&lt;/li&gt;
&lt;li&gt;The immigrant butterfly, which I got in Bogotá.&lt;/li&gt;
&lt;li&gt;The space station, which I got from &lt;a href=&quot;https://shop-eu.kurzgesagt.org/&quot;&gt;Kurzgesagt&lt;/a&gt; , and&lt;/li&gt;
&lt;li&gt;A Traveller&#39;s Company one that I got at Narita Airport.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in all I&#39;m super happy with the result. There&#39;s still some space that I can fill with some nice stickers later if I feel like it. But at the moment I love looking at the little rectangle full of art that my laptop lid has become.&lt;/p&gt;
&lt;h2 id=&quot;everywhere-now&quot;&gt;Everywhere now &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/01/sticker-bombing-laptop/#everywhere-now&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you&#39;ve been saving your big collection of stickers for &amp;quot;just the perfect spot&amp;quot;, the &amp;quot;right place&amp;quot; to put them, let go of that and start sticking them wherever they&#39;d spark joy in this moment. In your thermo, water bottle, tablet and phone case, your laptop, e-reader, your luggage, the fridge, your powerbanks, notebooks, your bike. Sticker-bomb all the things!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Next To-Do: a Shortcut for your next task in Reminders.app</title>
		<link href="https://berbaquero.com/posts/2025/02/next-todo-shortcut/"/>
		<updated>2025-02-12T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2025/02/next-todo-shortcut/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;Fill out the tasks you want to accomplish, then roll a d6 to determine which one to work on. Roll again to determine how long to work on it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&#39;s the super simple premise of &lt;a href=&quot;https://gladdendesign.com/products/paper-apps-todo&quot;&gt;Paper Apps&#39; TODO&lt;/a&gt; and it&#39;s extra fun and engaging as it&#39;s done in a physical notebook and, ideally, with an actual dice as well. It gamifies your day-planning while also removing the burden of having to choose a task or how much time to invest on it.&lt;/p&gt;
&lt;p&gt;I really liked the premise except I didn&#39;t want to write the tasks every day so I thought of applying the pattern to my digital to-dos. It&#39;s definitely less fun and gamey than the real pen-and-paper thing, but it&#39;s still very useful and specially helpful when you can&#39;t be bothered to decide what to do next.&lt;/p&gt;
&lt;p&gt;Fortunately it&#39;s possible to accomplish this with Apple Reminders, which is what I already used for my to-dos, thanks to its integration with Apple Shortcuts.&lt;/p&gt;
&lt;p&gt;The shortcut picks one random item (overdue or due-today) from a list in Reminders, then it randomly picks a duration between 5, 10, 15, 20, 30, and 45 minutes, then it shows a message with the result and asks whether to set up a timer for the chosen duration. That&#39;s it! Naturally it works on macOS, iPadOS, and iOS.&lt;/p&gt;
&lt;p&gt;If you think it might be useful for you as well, feel free to &lt;a href=&quot;https://www.icloud.com/shortcuts/97de455890e54d5fb29390a16328caf4&quot;&gt;&lt;strong&gt;grab the Shortcut here&lt;/strong&gt;&lt;/a&gt; (please note that it won&#39;t work &amp;quot;out of the box&amp;quot;; you must specify which list from your Reminders you want to use. I haven&#39;t figured out how to make this part of the shortcut).&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Preventing race conditions between sibling htmx elements with `hx-sync`</title>
		<link href="https://berbaquero.com/posts/2025/03/htmx-race-conditions-hx-sync/"/>
		<updated>2025-03-07T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2025/03/htmx-race-conditions-hx-sync/</id>
		<content type="html">&lt;p&gt;Today I ran into this scenario while building a tabs-like component with &lt;a href=&quot;https://htmx.org/&quot;&gt;htmx&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a list of &lt;code&gt;button&lt;/code&gt;s all next to each other,&lt;/li&gt;
&lt;li&gt;each &lt;code&gt;button&lt;/code&gt; triggers its own request, but&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;the response of each request targets the same element&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-get&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/op?action=a&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-target&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[data-result]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Show A&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-get&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/op?action=b&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-target&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[data-result]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Show B&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-get&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/op?action=c&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-target&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[data-result]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Show C&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;section&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- html response from any of the buttons goes here --&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With this setup it would be possible for this flow to occur:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User clicks Button A.
&lt;ol&gt;
&lt;li&gt;Request A is made.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;User clicks Button B (before the Response A is complete).
&lt;ol&gt;
&lt;li&gt;Request B is made.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Response A takes too long.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Response B completes. Content B is shown.&lt;/li&gt;
&lt;li&gt;Response A completes. Content A is shown (replacing Content B).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Resulting in the content from Button A&#39;s response being shown despite the fact that the last click was done on Button B. So, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Race_condition&quot;&gt;race condition&lt;/a&gt; which would be confusing and frustrating for the user.&lt;/p&gt;
&lt;p&gt;Fortunately htmx does provide a way to manage this scenario via &lt;a href=&quot;https://htmx.org/attributes/hx-sync/&quot;&gt;&lt;code&gt;hx-sync&lt;/code&gt;&lt;/a&gt;, although it took me a while to grasp how to use it from its documentation.&lt;/p&gt;
&lt;h2 id=&quot;how-i-solved-it&quot;&gt;How I solved it &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/03/htmx-race-conditions-hx-sync/#how-i-solved-it&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I wrapped the list of buttons on a &lt;code&gt;div&lt;/code&gt; element which has the &lt;code&gt;hx-sync&lt;/code&gt; attribute set to &lt;code&gt;this:replace&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-sync&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;this:replace&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-get&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/op?action=a&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-target&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[data-result]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Show A&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-get&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/op?action=b&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-target&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[data-result]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Show B&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-get&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/op?action=c&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;hx-target&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[data-result]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Show C&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;section&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- html response from any of the buttons goes here --&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&#39;s break it down:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;hx-sync&lt;/code&gt; can be inherited, which means we can declare it on a parent so it affects all of its children. So we put it on a &lt;code&gt;div&lt;/code&gt; which is now the parent of the &lt;code&gt;button&lt;/code&gt;s.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;this&lt;/code&gt; part of the attribute&#39;s value refers to the &lt;code&gt;div&lt;/code&gt; element itself. Combined with the fact that it&#39;s the parent of the &lt;code&gt;button&lt;/code&gt;s, it results in the requests of the &lt;code&gt;button&lt;/code&gt;s being &amp;quot;synced&amp;quot; with each other.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;replace&lt;/code&gt; part of the attribute&#39;s value determines the syncing strategy. There are multiple options here. I went with &lt;code&gt;replace&lt;/code&gt; because it cancels any existing in-flight request when a new request is made.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With this, the improved flow goes like:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User clicks Button A.
&lt;ol&gt;
&lt;li&gt;Request A is made.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;User clicks Button B (before the Response A is complete).
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Request A is cancelled.&lt;/strong&gt; Response A will never complete.&lt;/li&gt;
&lt;li&gt;Request B is made.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Response B completes. Content B is shown.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Therefore guaranteeing that only the response from the last clicked button (Button B in this example) is always the one shown.&lt;/p&gt;
&lt;p&gt;✨✨✨&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Switch 2</title>
		<link href="https://berbaquero.com/posts/2025/04/switch-2/"/>
		<updated>2025-04-02T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2025/04/switch-2/</id>
		<content type="html">&lt;p&gt;I was looking forward to &lt;a href=&quot;https://www.youtube.com/watch?v=1uGRs-ispRU&quot;&gt;today&#39;s presentation about the new Switch&lt;/a&gt; and now I feel like geeking out about it. Here&#39;s some quick thoughts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We&#39;ll have to wait for confirmation of course, but it seems like it might indeed be more powerful than the Steam Deck, which is promising.&lt;/li&gt;
&lt;li&gt;Love the magnetic attachment for the controllers.&lt;/li&gt;
&lt;li&gt;The mouse functionality is interesting and intriguing, but I&#39;m skeptical about the comfort and ergonomics.&lt;/li&gt;
&lt;li&gt;GameChat is definitely a swing; I don&#39;t see myself using that UI which makes my own game smaller overall. But it&#39;s nice that they&#39;re finally catching up on this in general I guess. It is weird, however, that they put a dedicated button on the controllers for a feature that will require a subscription.&lt;/li&gt;
&lt;li&gt;Biggest letdown is the screen; back to LCD instead of OLED and the bezel is annoyingly thick. They will likely release a hardware revision with an OLED, larger screen (and therefore thinner bezels) later on. Which is a shame and makes me consider waiting.&lt;/li&gt;
&lt;li&gt;The biggest pulls for me are: being able to play GameCube games (Wind Waker! hopefully Rogue Leader!) and &lt;em&gt;specially&lt;/em&gt; replaying Tears of the Kingdom at 60 frames-per-seconds.&lt;/li&gt;
&lt;li&gt;I definitely would try to get that new GameCube controller.&lt;/li&gt;
&lt;li&gt;It&#39;s insane that they&#39;re charging any amount of money for what essentially seems to be a tech demo. In contrast, Sony gave away a brilliant precursor to a game-of-the-year title in Astro&#39;s Playroom.&lt;/li&gt;
&lt;li&gt;I&#39;m afraid there were no new titles that made me excited enough to pull me into trying to get the console during the release window. &lt;em&gt;Mario Kart World&lt;/em&gt; and &lt;em&gt;Donkey Kong Bananza&lt;/em&gt; both look really, really great but they&#39;re not console-movers for me.&lt;/li&gt;
&lt;li&gt;The prices… oof. Yikes, even. Almost €500 for the console and €90 for physical games is a hard pill to swallow.&lt;/li&gt;
&lt;li&gt;Perhaps none of this will matter to me once they announce the new proper Zelda and Mario games. Odyssey was the sole reason I got the Switch 1 back in 2017, after all.&lt;/li&gt;
&lt;li&gt;Overall, I was more excited about it before the announcement than after, but it&#39;s great to see that Nintendo is keeping the momentum going and mostly improving on the whole experience.&lt;/li&gt;
&lt;li&gt;The Switch 2 will be a hit for sure. I&#39;ll just have to wait until the right games—and perhaps a revised OLED edition—are out.&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Disable scrolling for a modal dialog: my first use of CSS `:has`</title>
		<link href="https://berbaquero.com/posts/2025/04/disable-scrolling-for-modal-dialog-with-css-has/"/>
		<updated>2025-04-12T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2025/04/disable-scrolling-for-modal-dialog-with-css-has/</id>
		<content type="html">&lt;p&gt;The &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/:has&quot;&gt;CSS &lt;code&gt;:has()&lt;/code&gt; pseudo-class&lt;/a&gt; makes it possible (and straightforward) to prevent scrolling on a page while a &lt;code&gt;dialog&lt;/code&gt; is &lt;code&gt;open&lt;/code&gt;. This week I got to apply this technique which was my first ever use of &lt;code&gt;:has()&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;Here&#39;s the full snippet as a one-liner:&lt;/p&gt;
&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;body:has(#my-modal[open])&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&#39;s break it all down.&lt;/p&gt;
&lt;h2 id=&quot;the-dialog-element-as-a-modal&quot;&gt;The &lt;code&gt;dialog&lt;/code&gt; element as a modal &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/04/disable-scrolling-for-modal-dialog-with-css-has/#the-dialog-element-as-a-modal&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have a &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/dialog&quot;&gt;&lt;code&gt;dialog&lt;/code&gt; element&lt;/a&gt; that is opened via the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/showModal&quot;&gt;&lt;code&gt;showModal()&lt;/code&gt; method&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dialog&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;my-modal&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  Modal content here&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dialog&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;my-modal&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;showModal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Calling &lt;code&gt;showModal()&lt;/code&gt; on the &lt;code&gt;dialog&lt;/code&gt; automatically adds the &lt;code&gt;open&lt;/code&gt; attribute to it.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;              &lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- added attribute&lt;br /&gt;                      ↓↓↓↓ --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dialog&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;my-modal&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  Modal content here&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dialog&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Which allows us to select the &lt;code&gt;dialog&lt;/code&gt; specifically when it&#39;s open:&lt;/p&gt;
&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;#my-modal[open]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;/* styles applied to the dialog&lt;br /&gt;  only for when the dialog is open */&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Critically, &lt;code&gt;#my-modal[open]&lt;/code&gt; is a conditional that essentially means &amp;quot;when &lt;code&gt;#my-modal&lt;/code&gt; is open&amp;quot;.&lt;/p&gt;
&lt;p&gt;Naturally, when the modal dialog is closed, the &lt;code&gt;open&lt;/code&gt; attribute is automatically removed, disabling the selector above.&lt;/p&gt;
&lt;h3 id=&quot;modal-dialog-does-not-prevent-page-scrolling&quot;&gt;Modal &lt;code&gt;dialog&lt;/code&gt; does not prevent page-scrolling &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/04/disable-scrolling-for-modal-dialog-with-css-has/#modal-dialog-does-not-prevent-page-scrolling&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A modal &lt;code&gt;dialog&lt;/code&gt; automatically moves the focus to the content inside the &lt;code&gt;dialog&lt;/code&gt; and &amp;quot;traps&amp;quot; it there, which is exactly what a modal UI should do.&lt;/p&gt;
&lt;p&gt;However, even when a &lt;code&gt;dialog&lt;/code&gt; is open as a modal, the rest of the page — what&#39;s &amp;quot;underneath&amp;quot; the modal — can still be scrolled through normally, which is not always what you want.&lt;/p&gt;
&lt;h2 id=&quot;prevent-page-scrolling&quot;&gt;Prevent page-scrolling &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/04/disable-scrolling-for-modal-dialog-with-css-has/#prevent-page-scrolling&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The way you would normally disable scrolling on a page is by applying &lt;code&gt;overflow: hidden&lt;/code&gt; to the &lt;code&gt;body&lt;/code&gt; or &lt;code&gt;html&lt;/code&gt; element.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But we only want to do this when the &lt;code&gt;dialog&lt;/code&gt; is open! And this dialog element can be anywhere on the page (inside the body).&lt;/p&gt;
&lt;h2 id=&quot;%3Ahas()-as-a-%22global-observer%22&quot;&gt;&lt;code&gt;:has()&lt;/code&gt; as a &amp;quot;global observer&amp;quot; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/04/disable-scrolling-for-modal-dialog-with-css-has/#%3Ahas()-as-a-%22global-observer%22&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By attaching &lt;code&gt;:has&lt;/code&gt; to the &lt;code&gt;body&lt;/code&gt; selector we&#39;re enabling a pattern where the styles will only be applied to the &lt;code&gt;body&lt;/code&gt; when the &amp;quot;sub-selector&amp;quot; inside the parens in &lt;code&gt;:has()&lt;/code&gt; is active.&lt;/p&gt;
&lt;p&gt;In other words, the &lt;code&gt;body&lt;/code&gt; element is now observing for the &amp;quot;condition&amp;quot; defined in the sub-selector to be true in order to apply the styles, and it&#39;s doing this observation for any element inside itself.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;body:has(conditional-selector)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;/* styles applied to body&lt;br /&gt;  only when the condition is true */&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;all-together-now&quot;&gt;All together now &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/04/disable-scrolling-for-modal-dialog-with-css-has/#all-together-now&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;At last, we have:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The styles we want want to apply to the body to disable page-scrolling: &lt;code&gt;overflow: hidden&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The conditional that represents &lt;em&gt;when&lt;/em&gt; we want to apply those styles to the body; &amp;quot;when this specific modal is open&amp;quot;: &lt;code&gt;#my-modal[open]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;:has&lt;/code&gt; operator that connects both and makes it all work.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The result (same as at the beginning of this post, but broken down in parts):&lt;/p&gt;
&lt;pre class=&quot;language-css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token property&quot;&gt;body&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* 3 */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;    #my-modal[open] &lt;span class=&quot;token comment&quot;&gt;/* 2 */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token selector&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden &lt;span class=&quot;token comment&quot;&gt;/* 1 */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s it ✨&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This is a super flexible technique to have as part of your tool-belt. Of course it doesn&#39;t have to be a &amp;quot;global observer&amp;quot; only; it can be scoped down into a smaller section or component of a page, and any element attribute can be used as a conditional.&lt;/p&gt;
&lt;p&gt;The possibilities with this usage of  &lt;code&gt;:has&lt;/code&gt; are endless.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>New music: &quot;travel by night&quot;</title>
		<link href="https://berbaquero.com/posts/2025/09/travel-by-night-song/"/>
		<updated>2025-09-22T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2025/09/travel-by-night-song/</id>
		<content type="html">&lt;p&gt;I&#39;m currently obsessed with &lt;a href=&quot;https://strudel.cc/&quot;&gt;Strudel&lt;/a&gt;. Last week I started learning how to use it and was immediately inspired to write a song and after a few couple-of-hours sessions in different days, I finished it. I called it &amp;quot;travel by night&amp;quot; and you can &lt;a href=&quot;https://strudel.cc/#Ly8gInRyYXZlbCBieSBuaWdodCIgYnkgYmVyIGJhcXVlcm8KLy8gYmVyYmFxdWVyby5jb20KCiQ6IHNvdW5kKCJbfiBoaF0hNCIpLmJhbmsoIlJvbGFuZFRSOTA5Iik7CgokOiBzb3VuZCgiYmQqNCIpLmJhbmsoIktvcmdERE0xMTAiKS5yb29tKDEpOwoKJDogbm90ZSgiPFtjMSBjMl0qND4iKQogIC5zb3VuZCgiZ21fc3ludGhfYmFzc18xIikubHBmKDUwMDApLmRlY2F5KC4yKS5zdXN0YWluKC4zKQogIC5jb2xvcignY3lhbicpLl9waWFub3JvbGwoKTsKCiQ6IG5vdGUoYDxbYzQsIGVdIFtlLCBnXSBbZiwgYV0gPGYzKjggZjQqOD4%2BYCkKICAuc291bmQoJ2J5dGViZWF0Jykucm9vbSgxKS5nYWluKC41KS5kZWNheSgiPHggeCB4IC41PiIpCiAgLm1hc2soIjwwIDEgMSAxIDEgMSAxIDEgMT4vOCIpCiAgLmNvbG9yKCdtYWdlbnRhJykuX3BpYW5vcm9sbCgpOwoKJDogbm90ZShgW2c0IGU0IGY0IDxjNCBjNT5dKjRgKQogIC5zb3VuZCgnYnl0ZWJlYXQnKS5kZWxheSguMykuZ2FpbiguMzY1KQogIC5tYXNrKCI8MCAwIDAgMSAxIDEgMSAxIDE%2BLzgiKQogIC5jb2xvcigneWVsbG93JykuX3BpYW5vcm9sbCgpOwoKJDogbm90ZShgPGc1IGU1IGY1IDxjNSBjNj4%2BYCkKICAucm9vbSgxKS5kZWxheSguNSkuZ2FpbiguNSkKICAubWFzaygiPDAgMCAwIDAgMCAxIDEgMSAxPi84IikKICAuY29sb3IoJ3llbGxvdycpLl9waWFub3JvbGwoKTsKCiQ6IG5vdGUoYFtnNSBlNSBmNSA8YzUgYzY%2BXSo0YCkKICAuc291bmQoJ2J5dGViZWF0JykuZGVsYXkoLjkpLmdhaW4oLjIpCiAgLm1hc2soIjwwIDAgMCAwIDAgMCAwIDEgMT4vOCIpCiAgLmNvbG9yKCd5ZWxsb3cnKS5fcGlhbm9yb2xsKCk7CgokOiBzb3VuZCgifiBzZCB%2BIGNwIikKICAuYmFuaygncjgnKS5scGYoNDAwMCkucm9vbSguNCkuZ2FpbiguNykKICAubWFzaygiPDEgMSAxIDEgMCAwIDAgMCAwPi84Iik7CgokOiBzb3VuZCgiW34gW3NkLCBjcF1dKjIiKQogIC5iYW5rKCdyOCcpLmxwZig0MDAwKS5yb29tKC40KS5nYWluKC43KQogIC5tYXNrKCI8MCAwIDAgMCAxIDEgMSAxIDE%2BLzgiKTsKCiQ6IHNvdW5kKCJbfiB%2BIH4gb2hdIikKICAuYmFuaygnUm9sYW5kVFI5MDknKS5nYWluKC4zNjUpLnJvb20oLjcpCiAgLm1hc2soIjwwIDAgMCAwIDAgMSAxIDAgMD4vOCIpOwoKJDogc291bmQoIlt%2BIG9oXSo0IikKICAuYmFuaygnUm9sYW5kVFI5MDknKS5nYWluKC40KS5yb29tKC43KQogIC5tYXNrKCI8MCAwIDAgMCAwIDAgMCAxIDE%2BLzgiKTsK&quot;&gt;listen to it here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One interesting thing about the Strudel website is that it encodes your source-code from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop&quot;&gt;REPL&lt;/a&gt; into a base64 string and puts it on the URLs hash-fragment. And when opening that URL, on page-load Strudel decodes that hash fragment and places it in the REPL. This way, you&#39;re able to share your creation easily by simply sharing a strudel.cc URL with a very long hash-fragment. Pretty neat! Of course, if you update your song&#39;s code, the hash-fragment gets updated but your previously shared URL naturally will not include your latest updates.&lt;/p&gt;
&lt;p&gt;So, as a way to properly preserve the source-code for &amp;quot;travel by night&amp;quot;, here it is:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// &quot;travel by night&quot; by ber baquero&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[~ hh]!4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;RolandTR909&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;bd*4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;KorgDDM110&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;[c1 c2]*4&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;gm_synth_bass_1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lpf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;decay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sustain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;cyan&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_pianoroll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;[c4, e] [e, g] [f, a] &amp;lt;f3*8 f4*8&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;bytebeat&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;decay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;x x x .5&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 1 1 1 1 1 1 1 1&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;magenta&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_pianoroll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;[g4 e4 f4 &amp;lt;c4 c5&gt;]*4&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;bytebeat&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.365&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 1 1 1 1 1 1&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;yellow&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_pianoroll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;g5 e5 f5 &amp;lt;c5 c6&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 1 1 1 1&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;yellow&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_pianoroll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;[g5 e5 f5 &amp;lt;c5 c6&gt;]*4&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;bytebeat&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 0 1 1&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;yellow&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_pianoroll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;~ sd ~ cp&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;r8&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lpf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;1 1 1 1 0 0 0 0 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[~ [sd, cp]]*2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;r8&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lpf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 1 1 1 1 1&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[~ ~ ~ oh]&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;RolandTR909&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.365&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 1 1 0 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[~ oh]*4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;RolandTR909&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 0 1 1&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This should be enough for now but perhaps later I will create a separate page where I embed my own Strudel instance to showcase all the stuff I create with it.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>&lt;bbq-spoiler&gt; Web Component</title>
		<link href="https://berbaquero.com/posts/2025/10/spoiler-web-component/"/>
		<updated>2025-10-01T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2025/10/spoiler-web-component/</id>
		<content type="html">&lt;p&gt;A few weeks ago I started doing &lt;a href=&quot;https://berbaquero.com/weeknotes/&quot;&gt;Weeknotes&lt;/a&gt; in here and I&#39;m really enjoying it. But whenever I wanted to write about something I watched or played that I didn&#39;t want to spoil for visitors, I would just skip it, which is not ideal because I do want to log all my thoughts about what interests me in the moment!&lt;/p&gt;
&lt;p&gt;To fix this, today I created the first version of a simple Web Component that initially hides the spoilery text and only reveals it when clicking the hidden block.&lt;/p&gt;
&lt;p&gt;I called it &lt;code&gt;&amp;lt;bbq-spoiler&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here&#39;s how it&#39;s used:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;My favourite film of 2025 is &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;bbq-spoiler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&#39;One Battle After Another&#39;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;bbq-spoiler&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the result:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My favourite film of 2025 is &lt;bbq-spoiler&gt;&#39;One Battle After Another&#39;&lt;/bbq-spoiler&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;notes&quot;&gt;Notes &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/10/spoiler-web-component/#notes&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Accessibility: screen readers announce &amp;quot;Spoiler&amp;quot; instead of the spoilery text.&lt;/li&gt;
&lt;li&gt;Copiable: the hidden/spoilery text can still be copied.&lt;/li&gt;
&lt;li&gt;Built for this site: I kept it simple by writing this component specifically for my website. But it should be easy to grab the source code and modify it to your needs. Just view-source this page!&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Best of 2025</title>
		<link href="https://berbaquero.com/posts/2025/12/best-of-2025/"/>
		<updated>2025-12-31T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2025/12/best-of-2025/</id>
		<content type="html">&lt;p&gt;Just like last time (rather, last year), here are my various lists, in no particular order, of my favourite pieces of art and entertainment released during 2025. And just like last time, I only managed to get it out on the last hours of the last day of the year.&lt;/p&gt;
&lt;p&gt;It fun to put this together, but also felt like a adrenaline rush to finish it before the actual end of 2025. Here we go:&lt;/p&gt;
&lt;h2 id=&quot;music&quot;&gt;Music &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#music&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;rosalia%E2%80%99s-lux&quot;&gt;Rosalia’s &lt;em&gt;LUX&lt;/em&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#rosalia%E2%80%99s-lux&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A daring, bittersweet, mournful, and blissful masterpiece. Not a mere collection of songs but a complete journey with a beginning and end. And what an end. I believe an album is only as great as its closing track, and &lt;em&gt;Magnolias&lt;/em&gt; is a stunningly powerful and heart-wrenching closer. &lt;em&gt;&amp;quot;Yo que vengo de las estrellas, hoy me convierto en polvo, pa&#39; volver con ellas&amp;quot;&lt;/em&gt;. Favourites: &lt;em&gt;Reliquia, Mio Cristo Piange Diamanti, Dios Es Un Stalker, Magnolias.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;deftones%E2%80%99-private-music&quot;&gt;Deftones’ &lt;em&gt;private music&lt;/em&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#deftones%E2%80%99-private-music&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I&#39;m not really a Deftones fan but on each of their albums there&#39;s always a couple of songs that hook me and become part of my regular rotation. However, when I first listened to &lt;em&gt;my mind is a mountain&lt;/em&gt;, its energy and crisp, unique sound captivated me and made me excited to dig into the entire record. And the rest of the album is a fantastic mix of unique guitar riffs, tight and interesting drum rhythms, and Chino Moreno&#39;s one-of-a-kind vocals. I&#39;ve been spinning this one a lot ever since it came out. Favourites: &lt;em&gt;my mind is a mountain, locked club, milk of the madonna&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&quot;dream-theater%E2%80%99s-parasomnia&quot;&gt;Dream Theater’s &lt;em&gt;Parasomnia&lt;/em&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#dream-theater%E2%80%99s-parasomnia&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The band&#39;s first album since Mike Portnoy&#39;s momentous return to the lineup, and exactly what I needed; their previous album &lt;em&gt;A View From The Top Of The World&lt;/em&gt; did almost nothing for me. As expected, Portnoy&#39;s return meant an injection of a different type of energy that, as much as I really like previous drummer Mike Mangini, I feel the band needed, to get a good shake up. A mostly heavy concept album exploring various terrors of the night, &lt;em&gt;Parasomnia&lt;/em&gt; is a blast all the way through. The album artwork/cover is terrible, though. Favourites: &lt;em&gt;A Broken Man, Dead Asleep (the main riff is killer!), Bend the Clock, The Shadow Man Incident&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&quot;darren-korb%E2%80%99s-hades-ii%3A-original-soundtrack&quot;&gt;Darren Korb’s &lt;em&gt;Hades II: Original Soundtrack&lt;/em&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#darren-korb%E2%80%99s-hades-ii%3A-original-soundtrack&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As far as I&#39;m aware, Darren Korb is a musical god. That he can put together this immense collection of tracks that explore and melt together different styles and soundscapes while keeping it consistent throughout with satisfying leitmotifs and insanely great ear-worms, is nothing but an insane display of musical prowess. All the Skylla and The Siren songs are bangers. Favourites: &lt;em&gt;Coral Crown, King Vermin, (Thrashing) Into Tartarus, The Necropolis, Rock and a Hard Place, Bewitching Eyes, The End Of Time&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Honourable mentions: Bad Bunny’s &lt;em&gt;Debí Tirar Más Fotos&lt;/em&gt;; Lorien Testard’s &lt;em&gt;Clair Obscur: Expedition 33 Original Soundtrack&lt;/em&gt;, Between The Buried And Me&#39;s &lt;em&gt;The Blue Nowhere&lt;/em&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;cinema&quot;&gt;Cinema &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#cinema&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;one-battle-after-another&quot;&gt;One Battle After Another &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#one-battle-after-another&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Amongst my favourites from Paul Thomas Anderson and might be my actual favourite film of the year. Surprisingly funny at times, but mostly dark, tense, frantic and filled with memorable characters and tremendous, heart-pumping moments.&lt;/p&gt;
&lt;h3 id=&quot;train-dreams&quot;&gt;Train Dreams &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#train-dreams&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This one felt to me like it came out of nowhere but it immediately captivated me and wrecked me when it ended. An absolutely beautiful film where every frame could very well be a painting.&lt;/p&gt;
&lt;h3 id=&quot;sinners&quot;&gt;Sinners &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#sinners&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Another visual stunner where music is a protagonist. I still think about that scene with the &amp;quot;music incantation&amp;quot; during the party; a visual and musical spectacle that makes the entire experience worthwhile.&lt;/p&gt;
&lt;h3 id=&quot;wake-up-dead-man&quot;&gt;Wake Up Dead Man &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#wake-up-dead-man&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Might be my favourite entry in the wonderfully brilliant &lt;em&gt;Benoit Blanc/Knives Out&lt;/em&gt; series. A visual delight, an impossible crime, a great and super fun cast, and super engaging performances to tie it all together. Rian Johnson keeps on delivering jewels.&lt;/p&gt;
&lt;p&gt;Honourable mentions: &lt;em&gt;Weapons&lt;/em&gt;, &lt;em&gt;28 Years Later&lt;/em&gt;, &lt;em&gt;Predator: Killer of Killers&lt;/em&gt;; &lt;em&gt;KPop Demon Hunters&lt;/em&gt;, &lt;em&gt;Bugonia&lt;/em&gt;, &lt;em&gt;Frankenstein&lt;/em&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;tv&quot;&gt;TV &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#tv&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;pluribus&quot;&gt;Pluribus &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#pluribus&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;More Vince Gilligan and Rhea Seehorn was all I needed to know, to show up for this. And it delivered exactly what I expected: an astonishing performance carrying a slow burner, methodical, and engaging mystery that ends up asking some interesting questions about humanity, loyalty, individuality, and community.&lt;/p&gt;
&lt;h3 id=&quot;andor-season-2&quot;&gt;Andor Season 2 &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#andor-season-2&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;An ground-breaking political thriller that happens to be set in the Star Wars canon and therefore makes arguably the best piece of Star Wars-anything in a long time. Simultaneously, it felt like a warning for how authoritarianism creeps in and how it crumbles.&lt;/p&gt;
&lt;h3 id=&quot;adolescence&quot;&gt;Adolescence &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#adolescence&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Jaw-dropping in every sense. A technical wonder and a galore of tour de force  performances, all presenting a real-life,  deeply troublesome epidemic.&lt;/p&gt;
&lt;p&gt;Honourable mention: &lt;em&gt;Severance Season 2, Alien: Earth&lt;/em&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;games&quot;&gt;Games &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#games&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;clair-obscur%3A-expedition-33&quot;&gt;Clair Obscur: Expedition 33 &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#clair-obscur%3A-expedition-33&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The best modern version of what classic Final Fantasy would be if made today. Full of charm, with a fascinating setting, a tragic and engaging story, multi-dimensional characters, a ridiculously fun and super challenging combat system, and unbelievably great music. It&#39;s the whole package.&lt;/p&gt;
&lt;h3 id=&quot;hades-ii&quot;&gt;Hades II &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#hades-ii&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Alongside the previous &lt;em&gt;Hades&lt;/em&gt;, these are only action rogue-like games I really like, and it&#39;s doubtlessly all thanks to that Supergiant Games&#39; phenomenal combo of superb writing and flawless presentation.&lt;/p&gt;
&lt;h3 id=&quot;death-standing-2%3A-on-the-beach&quot;&gt;Death Standing 2: On The Beach &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#death-standing-2%3A-on-the-beach&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;An extremely polished, massive-budget, high-production experience overflowing with its auteur&#39;s idiosyncrasies. There&#39;s a lot of crazy, wild, convoluted stuff going on here, but it&#39;s done with such earnest and polish that I could&#39;t help but love it. The freedom and possibilities provided by the gameplay mechanics makes every playing moment deeply engaging and rewarding. Hideo Kojima did it again.&lt;/p&gt;
&lt;h3 id=&quot;%C3%B6oo&quot;&gt;Öoo &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#%C3%B6oo&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This one came out of nowhere and quickly became one of the year&#39;s highlights for me. It&#39;s a puzzle platformer where you cannot actually jump; instead, you propel yourself by setting off the self-generating bombs that up your body (the &amp;quot;oo&amp;quot; in the games title!). It&#39;s a compact, tight, charming, and super satisfying brain-tickler of an experience.&lt;/p&gt;
&lt;h3 id=&quot;the-roottrees-are-dead&quot;&gt;The Roottrees Are Dead &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#the-roottrees-are-dead&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;An investigation game - which my wife and I loved playing together - where you must figure out a huge family tree and all of their history and inherent drama. Some of the deduction mechanics reminded me of &lt;em&gt;Obra Dinn&lt;/em&gt;, and the in-game internet was very fun to explore. All in all, it&#39;s a brilliant mystery that&#39;s highly satisfying to uncover.&lt;/p&gt;
&lt;h3 id=&quot;dispatch&quot;&gt;Dispatch &lt;a class=&quot;direct-link&quot; href=&quot;https://berbaquero.com/posts/2025/12/best-of-2025/#dispatch&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Another year highlight that I played together with my wife. It’s almost spotless, but it might just be that the plot, characters and their relationships and evolution is so, so sharply and hilariously written and presented, that at times I just wanted to get over the gameplay bits (which were still fun!) to see how it would all progress. Absolutely brilliant.&lt;/p&gt;
&lt;p&gt;Honourable mentions: &lt;em&gt;Bionic Bay&lt;/em&gt;, &lt;em&gt;Sword Of The Sea&lt;/em&gt;,&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>New music: &quot;Kindness Inspires Radical Actions Neverendingly&quot;</title>
		<link href="https://berbaquero.com/posts/2026/01/kindness-song/"/>
		<updated>2026-01-17T00:00:00Z</updated>
		<id>https://berbaquero.com/posts/2026/01/kindness-song/</id>
		<content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://berbaquero.bandcamp.com/track/kindness-inspires-radical-actions-neverendingly&quot;&gt;Listen and buy it on Bandcamp&lt;/a&gt; (all money donated to Cycle For Good!).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://strudel.cc/#Ly8gIktpbmRuZXNzIElucGlyZXMgUmFkaWNhbCBBY3Rpb25zIE5ldmVyZW5kaW5nbHkiCgpzZXRjcG0oNTAvMikKCmNvbnN0IGRydW1iYW5rID0gInRyOTA5IjsKY29uc3Qgc2NhbGUgPSAiZzptYWpvciI7Cgpjb25zdCBtYXNrcyA9IHsKICAvLyBEUlVNUwogIGtjazogIjxbMCAxXSAxIDEgMSAwIDEgMSAxIDEgWzEgMSAxIFsxIDBdXSAwPi84IiwKICBzbnI6ICI8MCBbMCE4IDFdIDEgMSAwIFswITggMV0gMSAxIDEgWzEgMSAwIDBdIDA%2BLzgiLAoKICBic3M6ICI8MSAxIDEgMSAxIDEgMSAxIDEgMSAwPi84IiwKCiAgY2xwOiAiPDAgMSAxIDEgMCAwIDEgMSAxIFsxIDEgMSAwXSAwPi84IiwKCiAgaGF0OiAiPDAgMCAwIDAgMCAwIDEgMSAxIFsxIDEgMCAwXSAwPi84IiwKICAKICB0ZjA6ICI8MCAwIDAgMCAwIFswITcgMV0gMCAwIDAgWzBdIDA%2BLzgiLAogIHRtczogIjwwIDAgMCAwIDAgMCAwIDAgMSBbMSAxIFsxIDBdIDBdIDA%2BLzgiLAogIAogIGNyYTogIjwwIDAgWzEgMCE3XSAwIDAgMCBbMSAwITddIDAgMCBbMF0gMD4vOCIsCgogIC8vIFNZTlRIUwogIGxkMDogIjwwIDEgMCAwIDAgMSAwIDAgMCBbMSAxIDAgMF0gMD4vOCIsCiAgbGQxOiAiPDAgMCAxIDEgMCAwIDEgMSAxIFsxIDEgMCAwXSAwPi84IiwKICBsZDI6ICI8MCAwIDAgMSAwIDAgMSAxIDEgWzEgMCAwIDBdIDA%2BLzgiLAogIGxkMzogIjwwIDAgMCAwIDAgMCAwIDAgMSBbMSAxIDEgMF0gMD4vOCIsCiAgCiAgbWQxOiAiPDAgMCAwIDAgMSAxIDEgMSAxIFsxIDEgMCAwXSAwPi84IiwKICBtZDI6ICI8MCAwIDAgMCAwIDEgMSAxIDEgWzEgMSAwIDBdIDA%2BLzgiLAoKICAvLyBCQVNTCiAgYnMyOiAiPDAgMCAwIDAgMCAwIDEgMSAxIFsxIDEgMSAxXSAwPi84IiwKICBiczM6ICI8MCAwIDAgMCAwIDAgMCAxIDEgWzEgMSAwIDBdIDA%2BLzgiLAogIGJzNDogIjwwIDAgMCAwIDAgMCAwIDAgMSBbMSAxIDAgMF0gMD4vOCIsCgogIC8vIEVYVFJBUwogIHBobzogIjwwIDAgMCAwIDAgMCAwIDAgMSBbMSAxIDEgMF0gMD4vOCIsCiAgY293OiAiPDAgMCAwIDAgMCAwIDAgMSAxIFsxIDEgMCAwXSAwPi84Igp9CgovLy8vLy8vLy8vLyBEUlVNUwoKJGtpY2s6IHMoImJkKjQiKS5iYW5rKGRydW1iYW5rKQogIC5tYXNrKG1hc2tzLmtjaykKICAuY29sb3IoImN5YW4iKS5fc2NvcGUoKTsKCiRjbGFwOiBzKCJbfiBjcF0hMiIpLmJhbmsoZHJ1bWJhbmspCiAgLnJvb20oLjcpCiAgLmdhaW4oIjwuOSEyIDEuMiE5Pi84IikKICAubWFzayhtYXNrcy5jbHApOwoKJHNuYXJlOiBzKCJzZCExNj8iLmRlZ3JhZGVCeSguNikucmliYm9uKDE5LDIpKQogIC5yb29tKC4zKQogIC5iYW5rKGRydW1iYW5rKQogIC5tYXNrKG1hc2tzLnNucikKICAuZ2FpbigxLjEpCiAgLl9wdW5jaGNhcmQoKTsKCiR3aGl0ZTogcygid2hpdGUhNCIpLmF0dCguNCkuZ2FpbiguMikubWFzayhtYXNrcy5rY2spOwoKJGhhdDogcygiW34gb2hdITQiKS5iYW5rKGRydW1iYW5rKS5kZWxheSguNSkuZ2FpbiguNTUpCiAgLm1hc2sobWFza3MuaGF0KQogIC5jb2xvcigieWVsbG93IikuX3Njb3BlKCk7CgokdG9tc19maWxsOiBzKCJtdCBsdCIpLnN0cnVjdCgiLSAtIHggeCB4IHggeCAtIC0geCB4IC0gLSAtIC0gLSIpCiAgLnBhbigiMCAxIikKICAuZ2FpbiguNykKICAubWFzayhtYXNrcy50ZjApOwoKJHRvbXM6IHMoIm10IGx0Iikuc3RydWN0KCItIC0geCB4IC0geCAtIHggLSAtIHggeCAtIC0geCB4ICIpCiAgLnBhbihzaW5lLnNsb3coMikpCiAgLmJhbmsoZHJ1bWJhbmspCiAgLmdhaW4oLjMpCiAgLm1hc2sobWFza3MudG1zKS5fc2NvcGUoKTsKCiRjcmFzaDogcygiY3IiKS5iYW5rKGRydW1iYW5rKS5hdHQoLjQpLmRlY2F5KDIpLnJvb20oMykucnNpemUoMykuZ2FpbiguMikKICAubWFzayhtYXNrcy5jcmEpOwoKLy8vLy8vLy8vLy8gU1lOVEhTCgpjb25zdCBsZWFkID0gIjw5IDggNCAxIDcgNSAwIDE%2BKjE2IjsKCiRsZWFkMDogbm90ZShsZWFkKS5zY2FsZShzY2FsZSkuc291bmQoInN1cGVyc2F3IikKICAuZ2FpbigiPC4yNSAuMyAuNCAuNSAuNiAuNyAuOCAuOT4iKQogIC5tYXNrKG1hc2tzLmxkMCkKOwoKCiRsZWFkOiBub3RlKGxlYWQpLnNjYWxlKHNjYWxlKS5zb3VuZCgic3VwZXJzYXciKQogIC5nYWluKC43NSkKICAubWFzayhtYXNrcy5sZDEpICAKICAuX3B1bmNoY2FyZCgpOwoKJGxlYWQyOiBub3RlKGxlYWQuYWRkKDE0KSkuc2NhbGUoc2NhbGUpCiAgLnNvdW5kKCJzdXBlcnNhdyIpLmRlbGF5KC41KS5nYWluKC40KS5tYXNrKG1hc2tzLmxkMik7CgokbGVhZDM6IG5vdGUobGVhZC5hZGQoOSkpLnNjYWxlKHNjYWxlKQogIC5zb3VuZCgic3VwZXJzYXciKS5nYWluKC40KS5tYXNrKG1hc2tzLmxkMyk7Cgpjb25zdCBtZWxvZHkgPSAiPFs1IFszIDRdIDAgNF0gWzMgWzQgNSA2IDhdIDcgWzExIDEyIDExIDldXSBbOCBbNCA2XSA3IDhdIFs5IDExIDcgX10%2BKi41IjsKCiRsZWFkX2hiOiBuKG1lbG9keSkuc2NhbGUoc2NhbGUpLnMoInN1cGVyc2F3IikKICAuZGVjKDEwMDApLmdhaW4oLjcpCiAgLm1hc2sobWFza3MubWQxKS5fcHVuY2hjYXJkKCk7CgokbGVhZF9oYl9hOiBuKG1lbG9keS5hZGQoMikpLnNjYWxlKHNjYWxlKS5zKCJzdXBlcnNhdyIpCiAgLmdhaW4oLjUpCiAgLm1hc2sobWFza3MubWQyKTsKCgovLy8vLy8vLy8vLyBCQVNTCgokYmFzczogbigiPDggOSBbNCAxXSA8NyAwPj4iLmFkZCgtMTQpKS5zY2FsZShzY2FsZSkucygic3VwZXJzYXciKQogIC5nYWluKDEuMykKICAubWFzayhtYXNrcy5ic3MpLmNvbG9yKCJtYWdlbnRhIikuX3B1bmNoY2FyZCgpOwoKY29uc3QgYmFzc0hpdHMgPSAiMCExNj8iLmRlZ3JhZGVCeSguNikucmliYm9uKDE5LDIpLmFkZCgiPDEgMiBbNCAxXSAwPiIpOwoKJGJhc3MyOiBuKGJhc3NIaXRzKS5zY2FsZShzY2FsZSkucygic3VwZXJzYXciKQogIC50cmFucygtMTIpLmdhaW4oMS40KQogIC5tYXNrKG1hc2tzLmJzMikuX3B1bmNoY2FyZCgpOwogICAgICAgICAgIAokYmFzczM6IG4oYmFzc0hpdHMpLnNjYWxlKHNjYWxlKS5zKCJzdXBlcnNhdyIpCiAgLnJvb20oMSkuZ2FpbigxLjIpCiAgLm1hc2sobWFza3MuYnMzKTsKCiRiYXNzNDogbihiYXNzSGl0cy5hZGQoMikpLnNjYWxlKHNjYWxlKS5zKCJzdXBlcnNhdyIpCiAgLnJvb20oMSkuZ2FpbigxKQogIC5tYXNrKG1hc2tzLmJzNCk7CgovLy8vLy8vLyBFWFRSQVMKCiRwaG9uZTogbigiPDkgOCA0IDEgNz4qNCIpLnNjYWxlKHNjYWxlKS5zKCdnbV92aWJyYXBob25lJykKICAucGFuKHJhbmQpCiAgLmdhaW4oLjMpCiAgLm1hc2sobWFza3MucGhvKS5fcHVuY2hjYXJkKCk7CgokY293OiBzKCJjYiIpLnN0cnVjdCgiLSAtIC0geCB4IHggeCB4IC0gLSAtIC0gLSAtIC0gLSAiKQogIC5iYW5rKCJ2aXNjb3NwYWNlZHJ1bSIpCiAgLmdhaW4oLjI1KS5yb29tKC41KS5wYW4ocmFuZCkKICAubWFzayhtYXNrcy5jb3cpOw%3D%3D&quot;&gt;Original song in Strudel&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A month ago &lt;a href=&quot;https://mastodon.social/@bbs/115713447164812109&quot;&gt;I released Kindness Inspires Radical Actions Neverendingly&lt;/a&gt; on Bandcamp, but I hadn&#39;t written about it until now.&lt;/p&gt;
&lt;p&gt;This is the second song I&#39;ve written in &lt;a href=&quot;https://strudel.cc/&quot;&gt;Strudel&lt;/a&gt; (&lt;a href=&quot;https://berbaquero.com/posts/2025/09/travel-by-night-song&quot;&gt;here&#39;s my post about the first one&lt;/a&gt;). It&#39;s inspired by a very good friend of mine and I made it as a birthday gift to him. I released it on the day of my friend&#39;s 50th birthday party.&lt;/p&gt;
&lt;p&gt;Any and all money made from the song in Bandcamp goes to the non-profit organisation he co-founded, &lt;a href=&quot;https://cycleforgood.org/&quot;&gt;Cycle For Good&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&#39;s the source code for the song:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// &quot;Kindness Inpires Radical Actions Neverendingly&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token function&quot;&gt;setcpm&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; drumbank &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tr909&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; scale &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;g:major&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; masks &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// DRUMS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;kck&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;[0 1] 1 1 1 0 1 1 1 1 [1 1 1 [1 0]] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;snr&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 [0!8 1] 1 1 0 [0!8 1] 1 1 1 [1 1 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;bss&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;1 1 1 1 1 1 1 1 1 1 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;clp&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 1 1 1 0 0 1 1 1 [1 1 1 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;hat&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 1 1 1 [1 1 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;tf0&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 [0!7 1] 0 0 0 [0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;tms&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 0 0 1 [1 1 [1 0] 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;cra&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 [1 0!7] 0 0 0 [1 0!7] 0 0 [0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// SYNTHS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;ld0&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 1 0 0 0 1 0 0 0 [1 1 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;ld1&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 1 1 0 0 1 1 1 [1 1 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;ld2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 1 0 0 1 1 1 [1 0 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;ld3&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 0 0 1 [1 1 1 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;md1&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 1 1 1 1 1 [1 1 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;md2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 1 1 1 1 [1 1 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// BASS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;bs2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 1 1 1 [1 1 1 1] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;bs3&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 0 1 1 [1 1 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;bs4&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 0 0 1 [1 1 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;// EXTRAS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;pho&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 0 0 1 [1 1 1 0] 0&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token literal-property property&quot;&gt;cow&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;0 0 0 0 0 0 0 1 1 [1 1 0 0] 0&gt;/8&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/////////// DRUMS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$kick&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;bd*4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;drumbank&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;kck&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;cyan&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_scope&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$clap&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[~ cp]!2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;drumbank&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;.9!2 1.2!9&gt;/8&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;clp&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$snare&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;sd!16?&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;degradeBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ribbon&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;drumbank&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;snr&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_punchcard&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$white&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;white!4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;att&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;kck&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$hat&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[~ oh]!4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;drumbank&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.55&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hat&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;yellow&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_scope&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$toms_fill&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;mt lt&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;- - x x x x x - - x x - - - - -&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pan&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;0 1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;tf0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$toms&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;mt lt&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;- - x x - x - x - - x x - - x x &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pan&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sine&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;slow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;drumbank&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;tms&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_scope&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$crash&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;cr&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;drumbank&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;att&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;decay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;rsize&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cra&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/////////// SYNTHS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; lead &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;9 8 4 1 7 5 0 1&gt;*16&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$lead0&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;lead&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;.25 .3 .4 .5 .6 .7 .8 .9&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ld0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$lead&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;lead&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.75&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ld1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_punchcard&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$lead2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;lead&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ld2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$lead3&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;lead&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sound&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ld3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; melody &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;[5 [3 4] 0 4] [3 [4 5 6 8] 7 [11 12 11 9]] [8 [4 6] 7 8] [9 11 7 _]&gt;*.5&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$lead_hb&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;melody&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;dec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;md1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_punchcard&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$lead_hb_a&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;melody&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;md2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/////////// BASS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$bass&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;8 9 [4 1] &amp;lt;7 0&gt;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;bss&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;magenta&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_punchcard&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; bassHits &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0!16?&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;degradeBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ribbon&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;19&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;1 2 [4 1] 0&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$bass2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bassHits&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;trans&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;bs2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_punchcard&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;           &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$bass3&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bassHits&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1.2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;bs3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$bass4&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bassHits&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;supersaw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;bs4&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;//////// EXTRAS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$phone&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&amp;lt;9 8 4 1 7&gt;*4&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scale&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;gm_vibraphone&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pan&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;rand&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pho&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;_punchcard&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;$cow&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;cb&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;- - - x x x x x - - - - - - - - &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;viscospacedrum&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.25&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;room&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;.5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pan&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;rand&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;highlight-line&quot;&gt;  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;masks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cow&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&#39;m very proud of this one! I hope you give it spin, enjoy it, and dance to it! (And even better, buy it for a good cause!).&lt;/p&gt;
&lt;p&gt;Bonus: &lt;a href=&quot;https://strudel.cc/#Ci8vICJLaW5kbmVzcyBJbnBpcmVzIFJhZGljYWwgQWN0aW9ucyBOZXZlcmVuZGxlc3NseSIKCnNldGNwbSg1MC8yKQoKY29uc3QgZHJ1bWJhbmsgPSAidHI5MDkiOwpjb25zdCBzY2FsZSA9ICJnOm1ham9yIjsKCmNvbnN0IG1hc2tzID0gewogIC8vIERSVU1TCiAga2NrOiAiPFswIDFdIDEgMSAxIDAgMSAxIDEgMSBbMSAxIDEgWzEgMF1dIDA%2BLzgiLAogIHNucjogIjwwIFswITggMV0gMSAxIDAgWzAhOCAxXSAxIDEgMSBbMSAxIDAgMF0gMD4vOCIsCgogIGJzczogIjwxIDEgMSAxIDEgMSAxIDEgMSAxIDA%2BLzgiLAoKICBjbHA6ICI8MCAxIDEgMSAwIDAgMSAxIDEgWzEgMSAxIDBdIDA%2BLzgiLAoKICBoYXQ6ICI8MCAwIDAgMCAwIDAgMSAxIDEgWzEgMSAwIDBdIDA%2BLzgiLAogIAogIHRmMDogIjwwIDAgMCAwIDAgWzAhNyAxXSAwIDAgMCBbMF0gMD4vOCIsCiAgdG1zOiAiPDAgMCAwIDAgMCAwIDAgMSAxIFsxIDEgWzEgMF0gMF0gMD4vOCIsCiAgCiAgY3JhOiAiPDAgMCBbMSAwITddIDAgMCAwIFsxIDAhN10gMCAwIFswXSAwPi84IiwKCiAgLy8gU1lOVEhTCiAgbGQwOiAiPDAgMSAwIDAgMCAxIDAgMCAwIFsxIDEgMCAwXSAwPi84IiwKICBsZDE6ICI8MCAwIDEgMSAwIDAgMSAxIDEgWzEgMSAwIDBdIDA%2BLzgiLAogIGxkMjogIjwwIDAgMCAxIDAgMCAxIDEgMSBbMSAwIDAgMF0gMD4vOCIsCiAgbGQzOiAiPDAgMCAwIDAgMCAwIDAgMCAxIFsxIDEgMSAwXSAwPi84IiwKICAKICBtZDE6ICI8MCAwIDAgMCAxIDEgMSAxIDEgWzEgMSAwIDBdIDA%2BLzgiLAogIG1kMjogIjwwIDAgMCAwIDAgMSAxIDEgMSBbMSAxIDAgMF0gMD4vOCIsCgogIC8vIEJBU1MKICBiczI6ICI8MCAwIDAgMCAwIDAgMSAxIDEgWzEgMSAxIDFdIDA%2BLzgiLAogIGJzMzogIjwwIDAgMCAwIDAgMCAwIDEgMSBbMSAxIDAgMF0gMD4vOCIsCiAgYnM0OiAiPDAgMCAwIDAgMCAwIDAgMCAxIFsxIDEgMCAwXSAwPi84IiwKCiAgLy8gRVhUUkFTCiAgcGhvOiAiPDAgMCAwIDAgMCAwIDAgMCAxIFsxIDEgMSAwXSAwPi84IiwKfQoKLy8vLy8vLy8vLy8gRFJVTVMKCiRraWNrOiBzKCJiZCo0IikuYmFuayhkcnVtYmFuaykKICAubWFzayhtYXNrcy5rY2spCiAgLl9zY29wZSgpOwoKJGNsYXA6IHMoIlt%2BIGNwXSEyIikuYmFuayhkcnVtYmFuaykKICAucm9vbSguNykKICAuZ2FpbigxLjIpCiAgLm1hc2sobWFza3MuY2xwKTsKCiRzbmFyZTogcygic2QhMTY%2FIi5kZWdyYWRlQnkoLjYpLnJpYmJvbigxOSwyKSkKICAucm9vbSguMykKICAuYmFuayhkcnVtYmFuaykKICAubWFzayhtYXNrcy5zbnIpCiAgLmdhaW4oMS4xKQogIC5fcHVuY2hjYXJkKCk7Cgokd2hpdGU6IHMoIndoaXRlITQiKS5hdHQoLjQpLmdhaW4oLjMpLm1hc2sobWFza3Mua2NrKTsKCiRoYXQ6IHMoIlt%2BIG9oXSE0IikuYmFuayhkcnVtYmFuaykuZGVsYXkoLjUpLmdhaW4oLjU1KQogIC5tYXNrKG1hc2tzLmhhdCkKICAuX3Njb3BlKCk7CgokdG9tc19maWxsOiBzKCJtdCBsdCIpLnN0cnVjdCgiLSAtIHggeCB4IHggeCAtIC0geCB4IC0gLSAtIC0gLSIpCiAgLmdhaW4oMS40KQogIC5tYXNrKG1hc2tzLnRmMCk7CgokdG9tczogcygibXQgbHQiKS5zdHJ1Y3QoIi0gLSB4IHggLSAtIHggeCAtIC0geCB4IC0gLSB4IC0gIikKICAuYmFuayhkcnVtYmFuaykKICAuZ2FpbiguMzUpCiAgLy8gLmdhaW4oLjcpCiAgLm1hc2sobWFza3MudG1zKS5fcHVuY2hjYXJkKCk7CgokY3Jhc2g6IHMoImNyIikuYmFuayhkcnVtYmFuaykuYXR0KC40KS5kZWNheSgyKS5yb29tKDIpLmdhaW4oLjMpLm1hc2sobWFza3MuY3JhKTsKCi8vLy8vLy8vLy8vIFNZTlRIUwoKY29uc3QgbGVhZCA9ICI8OSA4IDQgMSA3IDUgMCAxPioxNiI7CgokbGVhZDA6IG5vdGUobGVhZCkuc2NhbGUoc2NhbGUpLnNvdW5kKCJzdXBlcnNhdyIpCiAgLmdhaW4oIjwuMiAuMyAuNCAuNSAuNiAuNyAuOCAuOT4iKQogIC5tYXNrKG1hc2tzLmxkMCkKOwoKCiRsZWFkOiBub3RlKGxlYWQpLnNjYWxlKHNjYWxlKS5zb3VuZCgic3VwZXJzYXciKQogIC5nYWluKCIuNyIpCiAgLm1hc2sobWFza3MubGQxKSAgCiAgLl9waWFub3JvbGwoKTsKCiRsZWFkMjogbm90ZShsZWFkLmFkZCgxNCkpLnNjYWxlKHNjYWxlKQogIC5zb3VuZCgic3VwZXJzYXciKS5kZWxheSguNSkuZ2FpbiguNCkubWFzayhtYXNrcy5sZDIpOwoKJGxlYWQzOiBub3RlKGxlYWQuYWRkKDkpKS5zY2FsZShzY2FsZSkKICAuc291bmQoInN1cGVyc2F3IikuZ2FpbiguNCkubWFzayhtYXNrcy5sZDMpOwoKY29uc3QgbWVsb2R5ID0gIjxbNSBbMyA0XSAwIDRdIFszIFs0IDUgNiA4XSA3IFsxMSAxMiAxMSA5XV0gWzggWzQgNl0gNyA4XSBbOSAxMSA3IF9dPiouNSI7CgokbGVhZF9oYjogbihtZWxvZHkpLnNjYWxlKHNjYWxlKS5zKCJzdXBlcnNhdyIpCiAgLmRlYygxMDAwKS5nYWluKC43KQogIC5tYXNrKG1hc2tzLm1kMSkuX3BpYW5vcm9sbCgpOwoKJGxlYWRfaGJfYTogbihtZWxvZHkuYWRkKDIpKS5zY2FsZShzY2FsZSkucygic3VwZXJzYXciKQogIC5nYWluKC41KQogIC5tYXNrKG1hc2tzLm1kMik7CgoKLy8vLy8vLy8vLy8gQkFTUwoKJGJhc3M6IG4oIjw4IDkgWzQgMV0gPDcgMD4%2BIi5hZGQoLTE0KSkuc2NhbGUoc2NhbGUpLnMoInN1cGVyc2F3IikKICAuZ2FpbigxLjIpCiAgLm1hc2sobWFza3MuYnNzKS5fcGlhbm9yb2xsKCk7Cgpjb25zdCBiYXNzSGl0cyA9ICIwITE2PyIuZGVncmFkZUJ5KC42KS5yaWJib24oMTksMikuYWRkKCI8MSAyIFs0IDFdIDA%2BIik7CgokYmFzczI6IG4oYmFzc0hpdHMpLnNjYWxlKHNjYWxlKS5zKCJzdXBlcnNhdyIpCiAgLnRyYW5zKC0xMikuZ2FpbigxLjQpCiAgLm1hc2sobWFza3MuYnMyKS5fcGlhbm9yb2xsKCk7CiAgICAgICAgICAgCiRiYXNzMzogbihiYXNzSGl0cykuc2NhbGUoc2NhbGUpLnMoInN1cGVyc2F3IikKICAucm9vbSgxKS5nYWluKDEuMikKICAubWFzayhtYXNrcy5iczMpLl9waWFub3JvbGwoKTsKCiRiYXNzNDogbihiYXNzSGl0cy5hZGQoMikpLnNjYWxlKHNjYWxlKS5zKCJzdXBlcnNhdyIpCiAgLnJvb20oMSkuZ2FpbigxLjEpCiAgLm1hc2sobWFza3MuYnM0KS5fcGlhbm9yb2xsKCk7CgovLy8vLy8vLyBFWFRSQVMKCiRwaG9uZTogbigiPDkgOCA0IDEgNz4qNCIpLnNjYWxlKHNjYWxlKS5zKCdnbV92aWJyYXBob25lJykKICAubWFzayhtYXNrcy5waG8pCiAgLmdhaW4oLjMpCiAgLl9waWFub3JvbGwoKTs%3D&quot;&gt;here&#39;s an earlier, less polished, incomplete version of the song&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
</feed>
