a few weeks ago i realized that the past event pages on the purdue hackers events site were pretty useless—they had almost exactly the same content as when the events were upcoming. i thought it would be cool if past event pages were instead recap pages that served as an archive/writeup of the event. so i spent the past few days (though mostly today) building it!
the new past event page design includes a writeup, some random statistics/fun facts about the event, and a gallery of photos. click on any past event on events.purduehackers.com to see it. though if you want to see my favorite recap page, check out the hammerwars page: events.purduehackers.com/hammerwars:purdue-hackers: it looks great on small screens but view on a large screen for best results :)
I wanted to wait until the very end of the year to share my 2021 Apple Music Replay. Now that 2021 is over, I'm very excited to share it!!! 2021 was such a great year for music for me. Thanks to @lachlanjc for helping me mess with the CSS on Replay's website to make the content more shareable :D :applemusic:
since i shipped the purdue hackers events site last month, it has lived without any social cards. today i forked vercel/og-image and adapted it for purdue hackers! now every event has a dynamic social card and we can easily create more for other parts of our website :partyparrot:og.purduehackers.com
@AppleMusicStatus is now powered by typescript :typescript:! idk if i did it right but it works and there are no typescript errors so i'll take it :peefest:
i'm still going to rewrite my personal website but in the meantime i made some much-needed changes to my current one. i hadn't updated it since early 2020 so previously it said i'm an 18-year-old high school senior and that "this semester" i was working for hack club in new haven and driving across the country to visit hack clubs in person
i was going to wait to test it with multiple users before shipping but THIS IS HACK CLUB, that is not necessary!!! i love #slotify but as an apple music user i hate feeling left out of all the cool tools people make that are spotify-only. so i decided to bravely battle the apple music api and build slotify for apple music! i shared a proof-of-concept in #scrapbook a few days ago that was hardcoded with my credentials, but now you can use it too if you are an apple music user :applemusic: just head over to apple-music-slack-status-1.techbug2012.repl.co and sign in with slack & apple music. use /music-status to toggle it on/off (it should be on by default after you authenticate though). if you run into any issues at any point, please let me know 🙏
one of my least favorite things about using apple music is that i feel left out of all of the cool tools that developers build that are spotify-only, because the apple music api is so exclusive and bad that nobody wants to build any tools for apple music. i've been especially feeling this with @StevenConaway's #slotify—so i learned how the apple music api works and built slotify for apple music :applemusic::yeah: this is just a bare-bones MVP with some bugs, and right now it's just for me, but if you use apple music and want to use it too, let me know and i'll add multi-user support
3 years ago today I visited Hack Club HQ & met @zrl, @lachlanjc, @yev, and @msw (not pictured) for the first time in San Francisco
Went on a 20-mile hike today. It took 10 hours and was the most strenuous thing I’ve done in a very long time. The lower half of my body is barely functioning right now. I had a lot of fun though and it was very prettyI did it too! nextjs.org/conf/tickets/jun21/MatthewStanciu
ummm is airtable down again
i just learned a new mirror's edge speedrunning strat! in chapter 2, you're supposed to climb up these "stormdrains" and it takes a while. but at the top, there's a waterfall and the collision detection on that waterfall was poorly coded by the devs, so you can stand on top of it as if it's solid ground. if you do some trickery, you can climb on top of the waterfall and skip a huge chunk of the stormdrains section. this isn't super difficult but it's way harder than it looks—took me an hour of doing it over and over again before i could do it consistentlyI did it!!!! I contacted every club!!!! And I sat inside at a Panera for the first time in over a year!!!! My god this week was tiring but I’m so glad I did it. If you’re a club leader (not in the India/Asia/Pacific region) and I didn’t contact you (or a member of your team) this week, please let me know 🙌
233 clubs contacted, 159 left. this is soooo energy-intensive omg, but kinda fun. if you're a club leader (not in the asia/pacific region) and i haven't reached out to you yet about whether or not you're going to lead your club next year, it would be super helpful if you dmed me 👀
Found the chicken that was on @msw‘s trash can that one time
Hack Club Meetings just got a little bit better! Yesterday afternoon/evening I learned about some cool new React concepts and made all video timestamps clickable links that seek to the timestamp in the embedded video! Then yesterday night, @lachlanjc helped me clean up my clunky code and add a new "Dock video" button, which displays the video in a small window near the bottom of the screen so that you can watch it while reading the page. My experience with React is still pretty limited, so I'm glad I was able to figure it out :yay:
Try it out! All pages on meetings.hackclub.com now have the dock button and the new timestamps :partyparrot:
little double mini-ship:
1. after noticing a club leader i've been talking to wasn't in the #leaders channel, i went through and discovered that about a third of US clubs weren't in #leaders. so i went through and added every club leader managed by the US team i could find in the database
2. i made a small change to @orpheus2. now, when club leaders run the /leader-add command, orpheus will automatically add them to their club channel and to #leaders.
now no club leader will ever be accidentally excluded from #leaders! yay!
After this DM conversation this morning, I realized I had had this same DM conversation toooo many times to count. Normally what I do is get their user ID with /lookup, then go into Clippy's Airtable, search for their user ID, find the name of their channel, and DM it to them. Today I added a short command to Clippy—/clippy-channel—that does all that for me. It even gives me the direct link to their channel so that I can go to it via @clippyadmin if something's wrong. This was literally a 2-minute project so it's a pretty tiny ship but still yay! :clippy:
pringle :clairebookworm:, part 2
After lots of struggling, Scrappy is finally off of Next.js and is now its own Express app. The code looks mostly the same, but now hopefully it'll stop crashing.
I tested this as much as I could before merging into the real scrappy, but admittedly I didn't test every feature (only a few basic ones, like posting and some commands). So if you run into any issues with scrappy, please let me know so that I can look into it 🙌 :scrappy::scrappyparrot:
Today is Twin Peaks Day!!!!!! To celebrate, I forked @sampoder's profile pic changer and set it to change my profile picture to a random scene from Twin Peaks every 2 minutes github.com/MatthewStanciu/pfp
Does scrappy work now?
(Update: yes it does)
Airtable is back up
Earlier today I stumbled across a series of Twitter bots that make cool generative art. The creator, who previously did not know how to code in Python before making those bots, said that this article was instrumental to him figuring out how to make those bots. So for the last few hours, I've been going through this and following along and making my own random image generator. The code was less than 100 lines long, so I figured it would be pretty simple, but there's soooo much going on that it took me hours to figure out how it works. Here's the repl where I built it. And here are some of the images I made with it.
Now that I understand how this works, I'm hoping to hack it a bunch until I make something unique and that's entirely my own creation 👀
I put up @lachlanjc’s Christmas gift to me on my wall
As an Apple Music user, I always feel left out of the end of year music wrapped hype because Spotify Wrapped blows Apple Music Replay out of the water. The worst part about Apple Music Replay is that it's impossible to share your top 10 albums in one screenshot—so I stitched a few screenshots together in Preview on my Mac and made my own screenshot! I made two versions: a square one and a portrait one, with slightly different layouts. I eyeballed everything so it's not perfect, but I'm very excited that I can finally share my top 10 albums of the year!!! 🎵
Finally reorganized my home screen! The darker red one is the new oneit's time for :wom:!!!!!!!
10 haunting images taken seconds after disaster
Omg it’s a double rainbow!!!
Went on a foggy night drive through Shelburne and Burlington@msw taught me how to use blender and helped me start making the Currents album cover. It was pretty fun
it’s windyWe still need a small table, a floor lamp or two, and a red curtain, but the twin peaks room is starting to come together!
I ran an event today
scrappy has been reacting with :summer-of-making: for way too long now, so screw it it's time for :aom:
Look the leaves are turning red!!!!! Yay!!!!!!!! I love fall!!!!!! Also my new allbirds AND ALSO I’m wearing these red shorts for the first time in a YEAR (long story) AAAAAAAAAAAA CIDUSVWICYCHWGEDOFOIDJS
Scrappy will now respond to you if you mention it, with some bonus responses if you insult it
I shared a series of memes and surreal & aesthetic images for over an hour tonight in #matthews-brain-dump. It was very therapeutic
Coast Guard was down for over a month and I totally forgot about it :yikes: but now it's back up!
Just downloaded Scrapple! Thanks @linus for making this, it's amazing
Reinstalled Slack after a super refreshing week-long break! I mostly binged John Oliver during my break, but I also got back into speedrunning a game called Mirror’s Edge, which I used to play a bunch back in the day, and I managed to finish the game in 32 minutes and 48 seconds, which is currently the 27th best time in the world. I think I could get into the top 20 if I tried some more, but we’re getting back to work soon, so it’ll have to wait until my next break. This took many hours of trying, though, so I’m still really proud of it :) you can check out the full run at youtu.be/KB-GiGYlgiI
I’m finally home in Indiana!!! Here’s a video of my big boy Marshall sitting on my lap while we listen to All Delighted People by Sufjan StevensAlmost finished moving out of our New Haven office with @msw and @lachlanjc. Hoping to be completely moved out by tomorrow. This office has been sitting idle since mid-March, when COVID hit and all of us dashed out to various places. A lot of my stuff was still here because I went on a big trip to Denver in early March and never came back to New Haven. I'm glad we're finally moving out of here, though it is kinda sad to see the place the clubs team called home for a year go away.
soon you'll be able to opt out of streaks yay! test post
Wow, that fireside chat with DHH was incredible. Thanks so much @msg4satwik for letting us tune in!
Went on a big team grocery run today with @lachlanjc + @melody! I’m really excited for this week.
Here’s a vending machine booting up and then crashing
I relaaaaaaxed today after a long week. I’m feeling great about this school year :partyparrot: I also spent a while looking at monthly Airbnb rentals in cool small towns across the country—hoping to live in many different places this year. Here’s @lachlanjc posting to their scrapbook and @cwalker building something cool
Cluuuuuuuuuubs 👁️ 👁️
Check out this egg
I wrote @youtube_downloader, a bot that downloads YouTube videos! It's not quite ready for primetime yet, but it works! Try it out by posting a YouTube link in #youtube-dl
Double throwback!!! Yesterday was the 2-year anniversary of Anonbot, an instagram bot that wreaked havoc on my school until February 2019. This was my second Node.js project, after era-project. Any piece of text submitted on the website would be converted to an image and posted on the Instagram page. It was used mostly by me, @yuto, @physicalc123, and a few of our friends until it started spreading like wildfire across the school in late fall 2018. With the newfound fame in my school, posts became increasingly toxic, and people began using it to gossip and spread rumors. In February 2019, some people posted messages that others interpreted as warning of a school shooting. The police were called, and I spent the next day in the office + at the police station. I wasn’t punished in the end, and everything was fine, but I agreed to kill the bot and make the code private so that nobody could fork it and start it back up. The code remains private, but the Instagram page is still up: instagram.com/anonbot.wl
Code is still available at github.com/MatthewStanciu/era-project
There’s rain coming!
Fixed some more bugs & made some optimizations to scrappy, but otherwise it was a slow day today. Today was the hottest day of the week (90 degrees!), and the place we’re staying at doesn’t have air conditioning, so @lachlanjc and I went for a kayak/swim in the lake earlier. I am so excited for the tools we’re planning to build next week and later!!!
Today was a great day. Fixed some scrappy bugs and finished the backend for reactions, including back-propagating so that every previous post logs reactions. The water was also really calm today.
Airtable is back up
I went kayaking today 🚣♂️
I'm officially a paying HEY customer 😎 :hey:
Spent all day today fixing a ton of Scrappy bugs! Here's everything I did today:
• The streak resetter is called by a Zap that runs every hour, but it kept turning off every time it ran because I wasn't sending a response back. Now it's fixed and running every hour! 🕐
• We added text formatting (emojis, channels, and users) a while back, but posts made before that still appeared unformatted. So I wrote a script that formatted every scrapbook update since the beginning ⭐
• Scrappy now publicly links to the scrapbook profile of anyone who shares a CSS style so that anyone can see what the style looks like 🖌️
• If you had a custom scrapbook domain set and you ran /scrappy setdomain again to set a new one, it wouldn't remove your previous domain from Vercel. Now, it does! :vercel:
• For a while, when you edited a message or shared an unfurled link in a thread, Scrappy would react with a beachball. Now, it doesn't do that anymore :beachball:
• If you to set your status to a streak number that doesn't match your streak, Scrappy sets your status to a clown emoji. A few days ago I accidentally broke this feature, but I fixed it today! 🤡
• Yesterday, @saharsh submitted a pull request that automatically updates your scrapbook profile when you edit relevant profile information in your Slack profile. Today, I got that PR working, made a few changes, and merged it. Now when your profile picture, website, GitHub profile, and timezone change, it'll instantly be reflected on your scrapbook profile 🙌
• Today, I was made aware that Scrappy occasionally doesn't update people's status, either when they post an update or when their streak is reset. I believe I fixed the issue—I couldn't test it because I couldn't easily reproduce it, but if you notice your streak status not being properly updated, let me know so that I can investigate further! :som-7+:
• In case you didn't know, all full slack members can run /som-promote to promote a multi-channel guest to a full user in Slack. Now, when you do that, it notifies #welcome-committee that they've been promoted so that they can help them get acquainted with the rest of the community! :heart:
• And finally: previously when you uploaded large video files (>300MB), Scrappy would falsely tell you your video was successfully uploaded, only to silently fail and display an unsatisfying black screen on your profile. It was failing because 1) Slack wasn't serving the video near-instantly like it normally does with most files, so Scrappy was fetching an error page, and 2) even if Scrappy managed to fetch the large video, it crashed the Heroku dyno because it didn't have enough RAM to download the whole file. My largest project for today was getting large video files to work. Now, if you upload a file that's too big for Scrappy to download, it will wait for Slack to serve the file, upload it directly to Mux (the platform we use to serve video on the website), and notify you when it's processed. So go ahead and upload multi-minute videos now! :yay: 📹
If you find any other bugs in Scrappy, please let me know or open an issue in the GitHub repo (github.com/hackclub/scrappy) and I'll fix it. And of course, if you notice any of the bugs I supposedly fixed today persisting, please let me know so that I can look further into them and fix them for good.
Here's a picture of me giving a very good dog a belly rub
i got access to doggo.ninja! :snootslide2::snootslide::snootslide2: that was a lot of fun
Clippy now recommends #orpheus-legion to newly-promoted members with she/her or they/them pronouns! This was part of the Clippy flow pre-summer of making that I had forgotten to carry over until now.
Just made it home after driving all day! Also last night I wrote a bot that posts this image from Russian Doll (2019) to #thursday every Thursday at 8am ET
Spent the day driving from Vermont to Pennsylvania with @lachlanjc. Tomorrow I’m driving 8 hours to home in West Lafayette, IN. The red car in the distance is mine (taken during a lunch stop in Greenwich, NY)
At the tail-end of a 3-day weekend after working all day every day & pulling an all-nighter last week to build Scrappy & the scrapbook site. I’ll get back to work fixing Scrappy’s bugs and building new Summer infrastructure tomorrow, but in the meantime, here’s Let It Happen by Tame Impala playing on a HomePod in the kitchenI wrote a quick serverless Airtable-based link shortener! Inspired by @itsmingjie's version, but super stripped down (only ~20 lines of code) and hosted on Vercel. 🔗 https://github.com/MatthewStanciu/abls-serverless