About Bear Blog Trending Posts

Ranked according to the following algorithm:Score = log10(U) + (S / D * 8600), U is Upvotes , S/D is time.

The RSS's url is : https://bearblog.dev/discover/feed/?type=rss

Please copy to your reader or subscribe it with :

Preview of RSS feed of Bear Blog Trending Posts

What happened

2024-11-20 23:32:00

CW: sexual assault

This post is about someone I know. I'll call them P, which isn't actually what their name starts with, but is short for "person." That's the most neutral fake name I can think of.

The first time I met P in person was at GDC 2018, although we'd been internet friends for some time already. At dinner with them and some other friends, I mentioned being touch starved because I hadn't seen my then-boyfriend (now-husband) in several days and was missing snuggles. P asked if I wanted a back rub. I said no thanks. Five minutes later, P reached over and started rubbing my back. I didn't say anything.

And thus began a pattern that continued and grew for years.

But let's back up before we get into that. Because first I want to tell you about our friendship.

It was 2016 or 2017 (I don't remember exactly), and I was mainly doing film composing and was looking to break into doing music for games. I started connecting with some game audio people on Twitter, and P was one of them. They messaged me to say hello, and we quickly became friends.

As I got to know more people in game audio, a friend group started to form. A few people have come and gone, but there have been 5 of us at the core of the group throughout the years, P being one of them. We all became very close despite all living in different cities. Just 5 marginalized people at somewhat similar points in our careers, trying to make it in a rough industry.

We helped each other out a lot. We'd share and refer each other to jobs. We'd give each other feedback on our work. We'd discuss things like how to figure out fair rates and how to respond to sexism from our colleagues. But we also had Jackbox nights and inside jokes and yearly secret Santa and lots of talks about things that weren't work related. This friend group has really meant a lot to me, I guess is what I'm trying to say, in both professional and personal ways, even if we have drifted apart a bit in the past few years.

And P was at the center of it all. P is fun and hilarious. They have a way of making you feel really special. They had a cute little nickname for me that I loved, they'd send gifts with thoughtful handwritten notes, and they always made time to check in and plan one-on-one catch up time. They also advocate for marginalized people a lot, seemingly never hesitating to call out sexism, racism, transphobia, ableism or any other kind of bigotry.

They also continually made me uncomfortable.

They were all small things, but there were a lot of them. I'm just going to name a few that stick out to me. Hugs that went on too long, with them holding on for a full 30 seconds after I'd let go. Frequently asking if I had a crush on anyone despite knowing that I was in a monogamous marriage. Sending me NSFW fan art of video game characters without ever asking if I'd want to be sent that kind of thing (this one felt especially weird because they knew I had a trauma history with sexual non-consent).

These and the unwanted backrub are all things that, taken on their own, would maybe not be a big deal. But taken together, something bigger starts to emerge. And in hindsight, there's probably a reason I had a constant nagging gut feeling about them, that something was off, that I could never fully let my guard down when they were around.

But then again, I told myself, I never said anything. I didn't set boundaries. I wasn't clear enough. I was probably being unfair. So I waved those feelings off.

Bluesky thread by @magmacranes: This is a half formed thought, but I fear that all the constant talk I see about always setting clear boundaries being the solution to every friendship problem implies that it’s avoidant or something to prefer the company of people who implicitly understand how to not make you uncomfortable. Not saying that good relationships will never require talking about boundaries (they prob will!), I just think social media oversimplifies therapy speak in ways that I do not care for (I am preemptively limiting replies because I suspect people might be like what do you MEAN communication is bad)
Here's me doing a Bluesky subpost about P, testing the waters to see if anyone would say I was somehow wrong for preferring friendships with people who I don’t often have to set boundaries with. Good news! Nobody did.

Let's time travel now to the summer of 2022. It was a perfect day, warm and sunny. P was visiting Chicago, we had just had a nice time catching up over brunch, and now we were going to the beach. I had on a new bathing suit, cute and ruffly and solid black. I called it my beach goth look.

One of the weirdest aspects of this thing that happened, to me at least, is that it happened within a few minutes of us getting to the beach. I don't know why I get stuck on that. There was no buildup or anything. Just like, arrival, boom, instant bad thing. I keep trying to figure out ways to write in more lead up to it, maybe add more of a buffer, because it feels strange having it occur so suddenly. But this is actually how it happened.

We found a spot and put our towels down. I asked them to put sunscreen on my back, which they started to do. And then I was frozen, my brain screaming stop touching me stop touching me stop touching me. Because their hands were down my bathing suit.

You may have noticed by now that, whether intentional or not, P has a knack for either going right up to the line, or just baaaarely crossing it, in such a way that makes you question whether a line was even crossed. In this case it involves an actual physical line. Never in my life did I think I would be forced to ponder such philosophical questions as "where does the lower back end and the upper ass begin?" and "where does the rib cage end and the side boob begin?"

Sorry. I do genuinely think that's funny, but I'm also using dark humor to cope with the fact that I was groped. Well, maybe groped. Like I said, I don't quite know where that line is. But what I do know is that I have a strong trauma response to what happened, including flashbacks where I'll randomly feel their hands on me. There were a lot of people on the beach that day, and I now have a lot of nightmares about being sexually assaulted in front of groups of people. My friends who I've told the details to say I was definitely groped. I think I was groped.

Also, I've had a lot of people put sunscreen on me over the years. I’m very pale, so I consider myself something of an “asking people to put sunscreen on my back because I will burn within 2 minutes” expert. And other than P, I’ve literally never had someone put sunscreen under my clothes. That's just not a normal thing to do, especially without asking first. I mean, you don't need sunscreen under there. That's the whole thing! You put on sunscreen to protect the parts that aren't protected by clothing! I wonder what P thinks causes tan lines!

Someone with an intense sock tan
A medical mystery

So. I just did the thing where I do (an attempt at) humor to make myself feel better before sharing something upsetting again. Because I also have a memory burned into my mind of seeing P in my peripheral vision while it was happening, pulling my bathing suit away from my body and looking down it. I don't think there's an innocent explanation for that.

Anyway, after that was over I did what has historically been my coping mechanism: I pretended nothing was wrong and hung out with them for the rest of the day, despite how completely violated I felt. And then I buried the memory as deep into my brain as it would go, because I didn't want to do anything to ruin things with my amazing little game audio friend group that meant so much to me. I didn't let myself think about what happened. I continued the friendship as normal. I even hung out with P again in person at a conference, trying my best to pay no attention to the deep pit in my stomach.

And on the rare occasion that it would cross my mind, I would just keep thinking to myself, well, P was a great person. Such an advocate for marginalized people. We were close. I trusted them completely, so much that I had told them about my past sexual assault trauma. The problem must have been me. I must have been misremembering, misunderstanding, wrong somehow. Because such a good friend would never do something so awful to me, right?

Right?

A beach at sunset
Same lake, different shore.

The ignoring everything strategy worked pretty well, until it didn't. In June of this year (a little less than 2 years after it happened, for those of you keeping track), my best friend invited me to the beach. As I was getting ready to leave my place to meet up with them, I had a panic attack. It was such a major one that I had to cancel our plans. I couldn't figure out where it was coming from, until the memories of what happened with P came flooding back. And then I couldn't ignore it anymore.

This has been really tricky to navigate. While it's far from the worst thing someone has ever done to me, it IS the worst thing someone so embedded in my life and career has done. P is everywhere, they seem generally well-liked, we have a ton of mutual friends, and they objectively have a more successful game audio career than me. So no matter what I do, I'm afraid of what could happen. Every possible step feels like a misstep. I'm scared that people won't believe me, or maybe believe it happened but think I'm overreacting.

Even as I’ve been writing and editing this piece over the past week, I keep imagining people reading it and being like, “that’s it?! She wrote a big dramatic thing about THAT?! That’s nothing! What a drama queen!”

And maybe some of you will read this and think that. But I hope at least some of you will read it and agree with me that it actually is a big deal, that it’s worth talking about.

This whole P thing has made it so that I now feel unsafe even in spaces that should feel okay, like spaces for queer and gender-marginalized people. Nowhere is 100% guaranteed to be safe. It's a hard truth to reckon with.

I'm going to be honest. I've thought a lot about just leaving the industry completely in these past 6 months.

But no, I refuse to do that.

Black cat on top of a studio monitor
I love my job, and Ramona loves being my assistant. If I quit, she loses her job too, and that’s just unacceptable.

And actually, what I said about there being no safe spaces isn't exactly true. I've been making a point lately of surrounding myself with the good people I know who work in games. The ones I can truly trust, who I know have my back. Who don't give me any weird uneasy gut feelings. Building my own little community.

They've been lifesavers. You know who you are. Thank you so much.

And thankfully I already had a wonderful therapist who was helping me through other trauma, so we just added this to the list of things we were working on. Summer was really rough for me PTSD-wise. And then things started to get better. I still get triggered sometimes when P pops up on social media or someone mentions them, but not every time. I'm healing.

I don't know what the point of this post is, exactly. It's not really meant as a callout (hence keeping P anonymous). I think it's part of the healing process for me. I'm trying to break my patterns. I don't want to keep pretending things are okay when they're not, to keep sweeping all the bad shit under the rug out of fear of ever rocking the boat, to keep letting myself be around people who have proven themselves to be unsafe. I want to treat myself with more care than that.

And I think it's also for anyone who finds themselves in the situation I was in with P. Maybe you know someone who makes you vaguely uncomfortable deep in your gut, who you feel a little weird and tense and twitchy around, or who makes you feel like you're somehow doing something wrong by not constantly setting boundaries. This is me giving you permission to remove that person from your life. If you stay friends with them, maybe it won't culminate in something so violating as what happened to me. But maybe it will. And even if it doesn't, I think the discomfort you feel is reason enough.

And to all my colleagues: we work in an industry where knowing people is key. It's drilled into our heads that connections with people are how you build a career, and that's mostly true. So if someone crosses a line with you, it can be easy to default to assuming you need to keep associating with them for the sake of your career. I promise you don't. Please don't make the same mistake I did; it caused me a lot of pain. This industry does have a lot of very, very good people amongst the bad ones. You can find them.

To anyone from my old friend group who might be reading this: I am so, so sorry that this is how you're finding out. And I'm so sorry I've been distant. I trust you all with my whole heart, but I also know that P means a lot to you all. I didn't know how to tell you. I didn't want to make things difficult for anyone. If you want to talk about it, please reach out. I want to keep being friends. I love you all so much.

To P, if you're reading this: you've proven yourself to be bad at consent, but I will try to explicitly spell this out for you. Never contact me again. Stop interacting with my social media posts, and that includes likes and shares. I'll be cordial if we run into each other at a conference or something, but that's all. If you break this boundary, I will block you everywhere and do away with the being cordial in professional settings thing as well. Please respect my wishes on this, and please do a whole bunch of therapy and soul-searching so you can learn to stop hurting people in this way.

I don't really know how to end this. Thank you all for reading it. It feels good and empowering to put this out there, like I’m taking things into my own hands this time. Like I'm reclaiming something.

how do i use websites again...?

2024-11-19 05:13:26

normally, i avoid "metaposting" about social media. discussions about the pros and cons of social media end up being very insular and kind of repetitive, and it's pretty tiring to me. but i need a place to process my thoughts, and well, that's what this blog is for.

i stopped using twitter sometime in 2022, before Musk took over. the psychic damage that the wretched bird site was doing to me was unbearable, and it was impacting my physical health in a very tangible way. i couldn't do it. if it meant dropping off the surface of the earth to anyone who primarily used twitter, then so be it.

tumblr was also driving me insane, so i hid away on cohost for the entirety of that site's lifespan. i've written enough about mourning cohost; so to put it succinctly, it was a website that i really needed at that exact point in my life.

and now, as most people flock to bluesky... i am sitting here, realizing that i don't actually know what i want out of these websites anymore.

i mean that sentiment quite literally. when i say, "i don't know how i feel", i mean it in a very sincere sense. many people seem to use that phrase to imply some kind of conflict or disagreement. but quite often, i find myself completely unable to tell how i feel. it takes me a frustratingly long time to process my emotions.

here's the thing. in the past few years, when i wanted to post to a website, i got used to posting to a smaller-but-passionate audience. it wasn't necessarily where my friends were - cohost was a hard sell for a lot of people, i think i probably used it the most out of nearly everyone i know - but it was where i felt comfortable talking and sharing things.

the way i use social media is somewhat atypical. the concept of "mutuals" makes me deeply anxious. if i follow more than 30-40 accounts, i will mentally explode. i don't feel comfortable resharing posts. rather, i am most comfortable posting in a somewhat one-directional sense; i share things that i have made or worked on, and people may see and interact with my posts if they desire. sometimes i will reply to comments or answer questions, but otherwise, i am very shy and keep to myself.

i have tried to "break out of my shell", so to speak. reshare more posts, comment more, etc. but every time i do, i feel like i am forcing a certain persona on myself... it's just another mask to put on!!! that isn't me. that's not what it looks like when i'm relaxed and socializing comfortably!

my experience with bluesky so far has been... how do i put it. disorienting, maybe? it went from 0 to 100 in the blink of an eye. one moment, my posts were seen by no one. the next moment, i am getting randos who don't follow me, trying to talk to me in ways i find alienating. it's like i sat down with a few friends to get coffee together, and then immediately after we sat down, the cafe got swarmed by people, and now i can't even talk without a stranger overhearing our conversation and trying to butt in.

i'm not sure how i want to talk, either. what tone do i want to project? the way i talk and share things publicly is kind of different from the way i talk in private with close friends. the contrast between everyone else's silly jokes and my weirdly-serious-and-sincere posts is making me self conscious in ways that i haven't felt in a few years. ahhh! i know rationally i should just be myself and not worry about it, but i can't help but feel that i'm doing this wrong.

"but what about the fediverse?", you may ask. well yeah, i've been using that too. it's now my "weird obtuse nerd thing that very few people i know use" website, filling a similar niche that cohost held for me. i'm still not sure how i feel about it, though. it's got that overly insular, techy vibe that cohost had. i've built up my tolerance to it, but it's still alienating. posting to mastodon still feels stilted and awkward to me, and i don't see that feeling going away anytime soon.

i am so lost and adrift, overwhelmed by everything. truthfully, this blog is where i feel most comfortable right now! no character limit restraints, no resharing or mutuals or following lists! it's where i feel most myself, as far as sharing my thoughts go. i'm not putting on a mask to appease others or to fit in. it's a little out of the way and secluded, and that's just the way i like it.

Bear Micro Blog

2024-11-15 22:23:00

Inspired by Sylvia and mgx, I decided to create a Bear Micro Blog, or status log, or shorts page – whatever you want to call it.

It's quite a simple solution, using tags and the Bear class_name snippet. Having it all in the post template also makes it pretty easy to publish posts. To make posting even easier, I'm planning to create an Apple Shortcut.

I've also ”created” separate feeds for status and posts:

Let me know if you're interested in getting your own Bear status log and I will post a tutorial.

Wishing you a great weekend!

Update: Here's a tutorial.

My blog theme and my mini, theme-editing dev environment

2024-11-18 03:00:00

So I've gotten really nice comments about the theme I've put together for this blog! It's actually really nice to hear 'cause it's a bit more involved than simple CSS, so I'm glad it sticks out well!

Digging the look of your page, and this guestbook! Just dropping by to say hello 👋

whoa, i love your blog theme. super cute, sleek, while still very functional... i love it! definitely adding your blog to my rss feeds, i've liked your posts so far!

love the look of the blog.

I wanted to make it reminiscent to some elements from my art archive, but keep it pretty simple, both because Bear is pretty minimal by nature & I didn't want to let my perfectionist side take over. But! There are a few things that I think would be fun to point out since they were neat to implement, as well as the tool I made to work on it.

The starry sky

One of the main things I wanted to port over from my other site was the starry sky background you see behind the post! Since this has to be placed outside of the "main content" of every page, as well as needing some randomness involved, I used a bit of code and placed it in the footer via the blog settings1.

But all it does is prepend a <div class="sky"> element to the body, place a bunch of stars at random positions with random properties, and set up a looping, random interval to "fire" a shooting star. The styling does the rest! Really it's just a slowly rotating div, with each star having a looping CSS animation with different durations and properties. If you look closely enough, the shooting star really is just a very long CSS triangle with its own animation too!

Simple and clever(?) CSS is a fun thing to mess around with.

Text effects

You may have noticed (unless you're reading this from an RSS reader) that some posts, and even the title, have pieces of text that have a bit more flavor to them. These are text effects! They were mainly inspired by Cohost's "CSS crimes" and how users were very creative with the limited styling in their posts, especially with tools like markdown PLUS that made it easy to add "effects" to text.

Though back then, styling was only possible through the style property of each element, which meant that anything even slightly complex could only be feasibly done with external tools (like prechoster or the aforementioned markdown PLUS). Since I have full control of my blog's CSS and JS, I wanted to bring back some of those effects I used in a more intuitive manner! So I have a small, yet robust solution to add a few text effects with just a couple of classes:

Each of these effects also have some variants for cases that are more appropriate to slightly alter the effect. Like if I wanted to say something with a bit of whimsy or sarcasm, maybe instead of the default swaying text, I make it slower and more subtle by adding slow and subtle to its class names. Or if I wanted text that instead of looking like screaming, it looks more deranged with the together class. All the styling rules are defined in its own file.

Though one key aspect I had to look out for is that these effects should not worsen the reading experience in cases where these effects can't be shown, like in RSS readers. That's why these effects are processed after the webpage loads with a bit more Javascript. So if a post is viewed without being able to run that logic, the post will still look the same, since the wrapper <span class="fx ..."> tag hasn't been altered through it. It's a tad more work on both ends, but it offers more control & flexibility over these effects, as well as making it very easy for me to write with minimal friction and without much overhead.

So far, these are the only effects added in there, but I might mess around to maybe include a few more somewhere down the road (a gradient text would be pretty easy to do).2

Making a theme-editing dev environment

So, as I was making this theme, I wanted a way to make quick iterations on it. The idea sorta sparked when I saw Damien Erambert do this for his blog, and the experimental dev inside of me wanted to see if I could do this with Vite. The end result is my own hacky environment for theme editing my blog, which you can find in GitHub.

It functions as a normal web app, opening up a homepage for testing styles with most of the common elements in Bear. But it also offers a similar function like Damien's version, where it can grab a published URL from the blog, hack it into the local environment, strip all of its current styles and scripts, and inject the development files into it. The trickier part was figuring out how to keep Vite's hot-reload function working, since I have to make some middleware to do it for me. But I think it came out alright for my testing purposes.

Though ironically, shortly after I finished this, a lad by the name of mgx made a web tool to basically do this, on the browser and easy to use. I suppose the upper hand I have is being able to use Sass and Typescript to build and minify my files, but if you're thinking about messing around with styling, I definitely would recommend this tool instead as a starting point!

  1. I know one of Bear's schticks is its tiny and optimized filesize footprint, but I think it's a fair compromise for a bit of style, plus it's kinda small in itself too!

  2. Note that these existing effects might also change from the time of writing this too! This blog's forever in a WIP state...

(Almost) Every Cat I Met This Year

2024-11-13 19:03:00

On the way back home from London last night, it hit that circumstance and luck have taken me to a lot of places this year. Canada. Germany. Entirely too many excursions to the United States. England.

There's a lot to untangle into where I ended up and how and why, and the sense of lingering impermanence that's run through this year. But that doesn't matter right now. What does matter is that I met a lot of weird little guys and I want to share them with you.

There's good cats out there. Take a pet no problem.

Tove (Edinburgh, UK)

Tove is not my cat, but she is the cat I live with. She's also less a cat than some kind of cross between a small bird and a meringue, making her strange little chirps for attention all hours of the day. She used to be a terribly shy and anxious thing but has grown into a needy little baby, curling up on the bed whenever I settle down for the night.

Would not survive five seconds in the outside world.

Bobbin (Vancouver, BC)

I am currently in the process of uprooting my entire life to become Bobbin-adjacent. A perfect little weirdo, melting into puddles on the balcony and perching herself on laps for hour 30 of watching SGDQ. She has a smudge on her nose and a wiggle in her step and definitely didn't vomit near the futon at four in the morning.

Bill and Rosie (Brooklyn, NY)

Bill is a big soft friend with a strong fashion sense who I'm told conducts morally bankrupt crypto dealings from his windowsill office. Rosie has a television addiction, and will sit patiently by the big screen until someone flicks on the mouse channel.

Claude (Poughkeepsie, NY)

Claude is proof that goblins live amongst us.

Rumi (Brooklyn, NY)

Short for Rumiana, I think. A real cat-ass cat, curious and friendly and aloof in equal measure. Mostly experienced her peering sphynx-like from the windowsill while we smoked in the back yard.

Rascal (Reading, UK)

The largest cat who has ever lived, with the smallest brain nature has ever cooked up. Was told to keep the door barricaded at night lest he barge through the door Grond-like with his noggin.

I’m Going to be Fine

2024-11-15 02:41:27

It's kind of a weird time for me right now. I quit my job last week without having another one lined up. My wife is going through a lot of things right now, and me being home hasn't been the best thing for our bank account but I think it's the best thing for us right now. Sadly, all of this came together at the same time as the election, my birthday, and the upcoming holidays which is making for an even more stressful time than typical.

To make matters a bit worse, I haven't felt good about retreating into the places that I typically do. A lot of my blogging friends are in pain over the election. My Mastodon feed is depressing, as is most of my RSS. So, I haven't really had a place to just breathe online, which has led me to avoid the internet more than usual. Granted, that isn't a bad thing, but in this weird, uneasy time it's always nice to have a place to fall back, feel apart of, and relax.

Something else has been bothering me. I think Hurricane Helene did a bit of a number on me. I think it triggered a bit of that old survival mode I've talked about before and that's just been simmering in the back of my mind. "You need to be better prepared, you need to get your shit together" is just one of the many messages bombarding me each day.

I'm never the best version of myself when I'm in survival mode. I want to start discarding things, working out, and preparing myself for the worse. So, when you take the recent hurricane, my lack of employment, a potential scary election result, it's made for a rather unsettling time for me.

Last year, I dropped some weight, mainly because I bullied myself. I had gotten into one of these survival modes after a health scare, and I didn't extend myself any grace. I called myself soft, fat, and worthless, more times than I would like to admit. For some reason, I tie my added weight into a failure of masculinity (I'm pretty sure it's because of my father, who despite being significantly overweight never fails to not mention my weight and make comments. I listened to him lecture me on my weight as he took his eighteen different prescriptions earlier this week.), and that sort of pressure and stress definitely doesn't help.

I'll never forget ranting to my wife about what a soft piece of crap I'd become, and she asked me where this was coming from. At the time, we were watching Battlestar Galactica and I mentioned how Admiral Adama had called his son Lee soft when he had gained weight, and they were ill prepared for the Cylon attack. I remember my wife getting loud, and saying, "And what war are you fighting? Right now, are you at war?" It stopped me in my tracks, because I really didn't have an answer. I was putting that same sort of pressure on myself, like everything I was doing was life or death, and destroying myself in the process.

I need to lighten up. I've always been wound too tight, and it's only getting worse as I get older. Recently, I journaled about how I struggled to enjoy so many of my hobbies and interests because of my frustration with their associations. For example, I was playing WWE 2k24, which I would only play because it was free with my PSN account. I refuse to give the WWE any money, since they accept millions from the Saudi government. The match I was playing featured Hulk Hogan and The Ultimate Warrior, two childhood heroes who turned out to be absolutely terrible human beings in real life. I was trying to relax and play a video game and instead, I sabotaged myself and my little escape from the real world. This happens all the time now because I don't want to support this actor, or this film company, or this TV channel, or this store, or this sport. It's just become too much. I'm literally ruining every bit of fun in my life over stuff I have very little or no control over.

This has been an on-going issue for me for a few years now, and I keep trying to embrace a more peaceful life and I realize now, I really need to focus on this a bit more. I have got to stop expecting the worst, and realize that if the worst comes, I'll just have to adapt at the time. I ran across this short little video of Bill Burr and well... it made me feel better. It truly is what I'm aspiring to do.

Reply via email

Please, Stop the Absurd Coding Challenges

2024-11-15 19:53:00

Let’s talk about tech interviews – specifically, the ones that go overboard with unrealistic coding assignments. If you’re a developer who’s been asked to debug legacy PHP or build a mini-app from scratch in just a few hours, you know what I’m talking about. It’s becoming a trend, and it’s not helping anyone.

Unrealistic Tests That Don’t Measure Real Skills

These high-stress, solo coding assignments don’t reflect the actual job. Instead, they put developers in situations they’d never face in the workplace, where collaboration and support are standard. When was the last time you had to debug an ancient codebase without documentation or help from a team? Yet companies claim this somehow measures “problem-solving” skills.

The Hidden Time Sink

What companies often ignore is the extra time candidates invest beyond the “suggested time” for these tests. Developers don’t just jump into an assignment; they research the company, study the job requirements, and meticulously work to polish the project. A “4-hour” assignment can quickly turn into 8, 10, or even more, just to ensure it’s in great shape. For developers balancing jobs and life, this can feel like working unpaid shifts for a job they don’t even have yet.

The Flexibility Myth

Many companies justify these tests by saying they need “adaptable” developers, even if the tech stack has nothing to do with the role. This is like asking a Ruby developer to debug PHP as a test of flexibility. Sure, adaptability is important, but that doesn’t mean a candidate’s worth should be based on their ability to tackle obscure, unrelated challenges.

Are Companies Testing Candidates or Just Flexing?

For some companies, these tests feel like a way to show off how “elite” their standards are rather than truly evaluating fit. There’s an inflated “top 1%” mentality where every hire has to jump through hoops, even if those hoops don’t make sense. This turns away skilled candidates who could do the job well but don’t thrive in these artificial, high-pressure situations.

Time for a Reality Check

It’s time for companies to admit these interview practices are broken. If the job requires specific tech skills, test those skills. But don’t put candidates through unrealistic coding boot camps that don’t reflect the role’s actual needs.

Hiring processes should focus on problem-solving, collaboration, and growth in relevant areas. Unrealistic expectations don’t attract the best talent – they just exhaust and discourage it. If companies want adaptable developers, they should focus on the long-term ability to learn, not how fast someone can tackle an arbitrary test. Dropping these absurd assignments and focusing on what really counts could foster a better, more inclusive tech culture.

"abzug" theme for bear blog

2024-11-19 20:44:00

Abzug is a simple typography-focused theme that emphasizes readability. Born from a moment of inspiration in a cafe, accompanied by the sounds of Kraftwerk.

Preview: Visit bear.css.observer and select the Abzug preset.
CSS: https://static.mgx.me/bear/themes/abzug.css.

ASCII snake in C

2024-11-17 12:59:00

Introduction

I've got some small/tiny gamedev projects on my pocket that I haven't documented here in my Bearblog account. The first one is an ASCII Snake game only using the curses library. There will be another similar post on making Snake game using Raylib.

#1 Libraries

#include <curses.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <string.h>

#2 Consts, structs and global vars

#define MAX_SCORE 256
#define FRAME_TIME 180000

typedef struct {
    int x;
    int y;
} Vec2;

int score = 0;
char score_message[32];

bool skip = false;
bool is_running = true;

int screen_width = 25;
int screen_height = 20;

// initialize screen
WINDOW *win;

// snake
Vec2 head = {0, 0};
Vec2 segments[MAX_SCORE + 1];
Vec2 dir = {1, 0};

// berry
Vec2 berry;

#3 Function declaration

void game_over();
void init();
void quit_game();
void restart_game();
bool collide(Vec2 a, Vec2 b);
bool collide_snake_body(Vec2 point);
Vec2 spawn_berry();
void process_input();
void draw_border(int y, int x, int width, int height);
void draw();
void update();
void game_over();

#4 Collision: the collide function

bool collide(Vec2 a, Vec2 b) 
{
    if (a.x == b.x && a.y == b.y) {
        return true;
    }
    else return false;
}

bool collide_snake_body(Vec2 point) 
{
    for (int i = 0; i < score; i++) {
        if (collide(point, segments[i])) {
            return true;
        }
    }
    return false;
}

#5 Spawning berries

Vec2 spawn_berry() 
{
    // spawn a new berry with 1 pixel padding from edges and not inside of the snake
    Vec2 berry = { 1 + rand() % (screen_width - 2), 1 + rand() % (screen_height - 2) };
    while (collide(head, berry) || collide_snake_body(berry)) {
        berry.x = 1 + rand() % (screen_width - 2);
        berry.y = 1 + rand() % (screen_height - 2);
    }
    return berry;
}

#6 Game Area: draw border

void draw_border(int y, int x, int width, int height) 
{
    // top row
    mvaddch(y, x, ACS_ULCORNER);
    mvaddch(y, x + width * 2 + 1, ACS_URCORNER);
    for (int i = 1; i < width * 2 + 1; i++) {
        mvaddch(y, x + i, ACS_HLINE);
    }
    // vertical lines
    for (int i = 1; i < height + 1; i++) {
        mvaddch(y + i, x, ACS_VLINE);
        mvaddch(y + i, x + width * 2 + 1, ACS_VLINE);
    }
    // bottom row
    mvaddch(y + height + 1, x, ACS_LLCORNER);
    mvaddch(y + height + 1, x + width * 2 + 1, ACS_LRCORNER);
    for (int i = 1; i < width * 2 + 1; i++) {
        mvaddch(y + height + 1, x + i, ACS_HLINE);
    }
}

#7 Quit and Restart

void quit_game() 
{
    // exit cleanly from application
    endwin();
    // clear screen, place cursor on top, and un-hide cursor
    printf("\e[1;1H\e[2J");
    printf("\e[?25h");

    exit(0);
}

void restart_game() 
{
    head.x = 0;
    head.y = 0;
    dir.x = 1;
    dir.y = 0;
    score = 0;
    sprintf(score_message, "[ Score: %d ]", score);
    is_running = true;
}

#8 Init function

This code initializes the game by:

void init() 
{
    srand(time(NULL));
    // initialize window
    win = initscr();
    // take player input and hide cursor
    keypad(win, true);
    noecho();
    nodelay(win, true);
    curs_set(0);

    // initialize color
    if (has_colors() == FALSE) {
        endwin();
        fprintf(stderr, "Your terminal does not support color\n");
        exit(1);
    }
    start_color();
    use_default_colors();
    init_pair(1, COLOR_BLUE, -1);
    init_pair(2, COLOR_GREEN, -1);
    init_pair(3, COLOR_YELLOW, -1);


    berry.x = rand() % screen_width;
    berry.y = rand() % screen_height;

    // update score message
    sprintf(score_message, "[ Score: %d ]", score);
}

#9 Game Over state

game_over: Displays a "Game Over" message and waits for user input to restart or quit.

void game_over() 
{
    while (is_running == false) {
        process_input();

        mvaddstr(screen_height / 2, screen_width - 16, "              Game Over          ");
        mvaddstr(screen_height / 2 + 1, screen_width - 16, "[SPACE] to restart, [ESC] to quit ");
        attron(COLOR_PAIR(3));
        draw_border(screen_height / 2 - 1, screen_width - 17, 17, 2);
        attroff(COLOR_PAIR(3));

        usleep(FRAME_TIME);
    }
}

#10 Movement - process_input

This code processes user input by:

void process_input() 
{
    int pressed = wgetch(win);
    if (pressed == KEY_LEFT) {
        if (dir.x == 1) {
            return;
            skip = true;
        }
        dir.x = -1;
        dir.y = 0;
    }
    if (pressed == KEY_RIGHT) {
        if (dir.x == -1) {
            return;
            skip = true;
        }
        dir.x = 1;
        dir.y = 0;
    }
    if (pressed == KEY_UP) {
        if (dir.y == 1) {
            return;
            skip = true;
        }
        dir.x = 0;
        dir.y = -1;
    }
    if (pressed == KEY_DOWN) {
        if (dir.y == -1) {
            return;
            skip = true;
        }
        dir.x = 0;
        dir.y = 1;
    }
    if (pressed == ' ') {
        if (!is_running)
            restart_game();
    }
    if (pressed == '\e') {
        is_running = false;
        quit_game();
    }
}

#11 Update game state and Draw function

update:

draw:

void update() 
{
    // update snake segments
    for (int i = score; i > 0; i--) {
        segments[i] = segments[i - 1];
    }
    segments[0] = head;

    // move snake
    head.x += dir.x;
    head.y += dir.y;

    // collide with body or walls
    if (collide_snake_body(head) || head.x < 0 || head.y < 0 \
            || head.x >= screen_width || head.y >= screen_height) {
        is_running = false;
        game_over();
    }

    // eating a berry
    if (collide(head, berry)) {
        if (score < MAX_SCORE) {
            score += 1;
            sprintf(score_message, "[ Score: %d ]", score);
        }
        else {
            // WIN!
            printf("You Win!");
        }
        berry = spawn_berry();
    }

    usleep(FRAME_TIME);
}

void draw() 
{
    erase();

    attron(COLOR_PAIR(1));
    mvaddch(berry.y+1, berry.x * 2+1, '@');
    attroff(COLOR_PAIR(1));

    // draw snake
    attron(COLOR_PAIR(2));
    for (int i = 0; i < score; i++) {
        mvaddch(segments[i].y+1, segments[i].x * 2 + 1, ACS_DIAMOND);
    }
    mvaddch(head.y+1, head.x * 2+1, 'O');
    attroff(COLOR_PAIR(2));

    attron(COLOR_PAIR(3));
    draw_border(0, 0, screen_width, screen_height);
    attroff(COLOR_PAIR(3));
    mvaddstr(0, screen_width - 5, score_message);
}

#12 Main

This code is the main entry point of the game:

int main(int argc, char *argv[])
{
    // process user args
    if (argc == 1) {}
    else if (argc == 3) {
        if (!strcmp(argv[1], "-d")) {
            if (sscanf(argv[2], "%dx%d", &screen_width, &screen_height) != 2) {
                printf("Usage: snake [options]\nOptions:\n -d [width]x[height]"
                       "\tdefine dimensions of the screen\n\nDefault dimensions are 25x20\n");
                exit(1);
            }
        }
    }
    else {
        printf("Usage: snake [options]\nOptions:\n -d [width]x[height]"
               "\tdefine dimensions of the screen\n\nDefault dimensions are 25x20\n");
        exit(1);
    }

    init();
    while(true) {        
        process_input();
        if (skip == true) {
            skip = false;
            continue;
        }
        // ---------- update ----------
        update();

        // ------------ draw ------------
        draw();
    }
    quit_game();

    return 0;
}

Result

c-snake-ascii

Adding a Little Friction to My Computing

2024-11-18 11:20:03

I feel like the peak internet for me was some time around 2004. The internet felt balanced, and I was happy with my relationship with it. Sure, I probably spent more time than I should have on the internet, but at least I wasn't carrying it around with me. I wasn't surfing the web on my bathroom breaks or while standing in line at the grocery store. The internet was a tool, not a conqueror of my attention.

For years, I've talked about wanting to set up a desktop or a designated computer space. Some place where I have go and sit down in order to log on. A place where I'll keep my computer off and give myself a few seconds to decide whether looking up an actress in some random sitcom episode is truly worth the effort. I want to add a little friction to my computing and just see how my mental health responds. Will I feel better? Will my attention improve? These are the questions I'm curious about.

Being that I have a little free time on my hands, I thought now is as good of a time as ever to give this a shot. So, starting tonight at midnight, I'm disconnecting. For the next week, my MacBook will live on my dining room table. I'm uninstalling most of the apps that I use on my phone to make it as bare-bones as possible. My iPad will remain on, but with the Wi-Fi turned off. I have a lot of magazines downloaded courtesy of Archive.org and some books I plan to read with my free time.

I wonder how my browsing habits will change if I don't have a piece of technology at my fingertips. Will I feel compelled to keep up with as much, or will I just find other mindless activities to fill my time? Heck, I even wonder if I'll make it the whole week. But these are the questions I will hopefully have an answer to around this time next week. With that being said, if anyone needs to contact me e-mail is going to be your best bet, because I'm sure I'll check that, but I'm probably going to miss a lot elsewhere.

Reply via email

I'm Tired, Boss

2024-11-17 13:00:00

In the 1999 movie adaption of Steven King's The Green Mile, the guards go into the condemned man's cell to ask about the arrangements for his execution. They want to know his last meal request and if he wants a preacher to be with him. Ultimately, they even ask if he wants a chance to escape. The prisoner, named John Coffey, tells them he's ready to go, starting his speech with a resigned "I'm tired boss." Brother, I can relate.

Most of my working life hasn't been spent in a physically demanding job. Occasionally in educational tech we have to install computer labs or do large scale moves, but most of the work is honestly spent sitting down, alternately reading and typing. Sure, it can be mentally draining to do something repetitive or to solve a stubborn problem, but it doesn't make your back hurt.

I have had hard jobs that took a physical toll on me. I've worked as a cook in a busy restaurant. I've framed houses, and I spent time in the infantry. I've spent eight-hour summer days walking backwards down the highway carrying a heavy shotgun guarding prisoners the state wanted people to see out on the roads working. My teenage years were spent on my uncle's farm and if that man believes in one thing, it's teaching young people discipline through manual labor. I'm not unfamiliar with fatigue.

Even my leisure pursuits for years were spent chasing the endorphin rush that endurance sports can bring on. I loved 100-mile bike rides and backpacking over mountains. Building up endurance is an adaptive behavior. If you train a lot, you can do some pretty miraculous things.

The tiredness I'm aware of today, isn't a physical feeling though. It might be me yelling "get off my lawn" at the world, I don't know. What I'm tired of is a world that seems in some ways to be evolving for the benefit of the investor class and not for the working stiff. The last thing I want to do at the end of the day is to go to the grocery store and ring up my own order. The store I go to just took out half the cash registers and replaced them with self check out kiosks. Who wants that? I go to McDonald's for a cup of their fine coffee, and the only human I get to deal with is the one who sits the cup in front of me. All the ordering and paying is done through a giant panel that tries to upsell me at every turn. I'm even old enough to remember the days when people didn't have to pump their own gas. Why was that eliminated? It seems to have disappeared at the same time that gas got expensive.

I'm also tired of having to exercise discernment when I used to be able to just believe stuff. I could turn on the evening news and Walter Cronkite would tell me the deal, or may John Chancellor or Harry Reasoner. These days, I have to make sure I'm not in someone's spin zone when I try to stay informed. Newspapers that were institutions, like The New York Times, Washington Post and LA Times, are now operated by people who wouldn't be good contestants on Fear Factor. Some of them wouldn't endorse a presidential candidate, and they all lean towards sane washing the half of the American political system that is now ruling us. To be blunt, they have no balls, and it makes me tired.

I'm tired of a political system that's caters to a powerful minority. In the US, most people support a woman's right to choose. They support raising the minimum wage. They support equal (not special) rights for LGBT people. Do you hear me? Most people, the majority, support those things, yet they are always in contention because a party that has only won a majority twice in 32 years uses every under-handed dirty trick they can think of to subvert the will of the people. It's obscene.

I'm tired of paying for things that used to be free or nominally priced. My kids grew up going to the state run aquariums located in a couple of our coastal towns. Today I have to drop a C-note to take my grandkids. Camping spots at state parks used to be free or just cost a five spot and now they cost as much as some hotel rooms. It seems like libraries may be all we have left, and thank god someone already thought of them. Imagine someone proposing a free service like that today. They'd be labeled a crazy socialist and chased out of town.

Thankfully, there are some things left that give me energy. Being able to exercise free speech fires me up. Seeing my southern state elect a Democrat (who is Jewish) for governor gave me energy. His opponent had labeled himself a Nazi and said he's like to own slaves. We also elected a Democrat for attorney general and state school superintendent. The Republican who ran for the school job had said she wanted Obama and Biden executed on TV and homeschooled her kids over sending them to public school. I am not without hope, and hope gives me energy.

Gree_mile-resized

Enjoyed it? Please upvote 👇

Initial thoughts on The Power of Now by Eckhart Tolle

2024-11-21 00:10:00

I finally started reading The Power of Now by Eckhart Tolle. I've tried to start this book many times before, but I always stopped in the first chapter or so because I felt that the author was being unnecessarily airy and, more importantly, he directly claimed that he ended up in this semi enlightened state but doesn't rightly know how he got there. This point was the point where I always stopped, but this time I decided to power through it, and in doing so I discovered I've been missing an important part: after not knowing what had happened, and just living in a state of present bliss, Eckhart discovered that what had happened to him is what many religions aim as their ultimate goal, so he went on to discover more about that and how a normal person might get to his state, but told from his point of view.

Now, there's definitely wisdom in his writing. It's clear and well presented, and offers argumentative clarifications every once in a while that I find really useful. However, I have some reservations. First — though it can easily be brushed aside as an issue of semantics — master Eckhart says he's enlightened in the buddhist sense. Again, this is not really that important. My main reservation is my natural cynicism wondering is this true? or is it just an elaborate money grab?

From what I've read online people seem to think highly of Eckhart, but you know me. For now I've decided to suspend my disbelief and just listen to the audiobook as if it were all real. A large part of me wants to believe it is. What makes me feel better is that his message is really simple: in the now there are no problems. And this is quite easy not only to understand intuitively, but also easy to see for myself that what he says is true. It might be that he's not really enlightened and he's just paraphrasing buddhist doctrine, but if it continues to be like this (self verifiable) then there's no harm in it.

Anyway... positive thoughts, positive thoughts.

For the past days, whenever I put my oldest son to sleep, I meditate (or at least attempt to meditate) while I wait for him to pass out. Since I started reading The Power of Now I started adding something new to my meditation which I think is actually something that should perhaps always have been there, but whether due to bad instruction or complacency on my part, it has never found its way into the forefront of my mind. I'm talking about the watcher. Usually my meditation is pretty much loop { breath until distract } , but now I'm making a change where breath is my center, my heart, and at the same time there's an effort to watch for thoughts as they come into my mind, and that reminds me not to engage with them. If ever I do get carried away by a thought then I go back to my center, my breath. But these two things are always there, watching and focusing on the breath. I think it's working fine for now, though I've hardly tried this out while sitting on a cushion in proper meditation, something which I've been wanting to do for a while, but not wanting to dedicate time to it (oh the woes of my life).

Another interesting idea master Eckhart talks about is how when we're identified with our thoughts we're also controlled by them. This is so true for me, and something I've been observing more and more since I first read it. I, and I think everyone, gets taken away by one or two things that interest us at a given time. My mind is fixated on these and can hardly think of anything else, and even less can I contemplate the idea of not doing them, even if I know they're harmful in some way or another. Recently for me this has been playing games on my phone, lately Marvel SNAP and FarmRPG (which aren't as bad to be honest), and I know that I could "not play them" and feel better overall with not having them in the back of my mind all day, and yet, I can't just leave them, can I? I am, as Eckhart says, identified with these thoughts, but once I know and see this I also see that I am not them and their strength over me is lessened.

"Your mind is a tool; use it, don't let it use you" is a (paraphrased) quote from him that comes to mind right now. I think I, and everyone, tend to just go along with what our minds say. It's not only games or other things we're compulsive about (addicted), it's everything. From whether we should drink that thing, or watch that video, everything. The only thing that's no-mind is dropping everything and being in the present: meditation. Everything else is us just being led on a leash by our mind. Arguably even the desire and act of meditating is something that we're led to by our thoughts, but one hopes that in this gordian knot we'll find the same sword that cuts through it.

That's perhaps the reason why I'm so reticent to meditate, because my mind just wants to play, do what it's used to, instead of stopping for a while. Again, here is an example of my thoughts controlling me rather than the other way around.

It's a messy business, knowing who's what and what controls which. Not one we need to get into. Suffice it to say that, in most things, we're just bulls being led by rings in our noses.

⭐️ if this isn't nice, i don't know what is

2024-11-15 06:27:00

It's cold enough this week to make me pause at the coat closet before I leave the apartment. Choosing poorly can mean the difference between being cozy and getting sick. Hand & body cream have appeared in the bathrooms at work (though only the wheelchair accessible ones, which really makes you think). These feel like the real signs that winter is here, not a date on the calendar. Are they going to change what months count as winter when the daily average high in November climbs to the sixties every year?

The office is eerily quiet. A and her posse are out of town for a work retreat, and I'm the only one left behind sitting in their pod of desks. I miss chatting with them and being yanked from my daydreams when they come by with treats. Their absence reminds me how much happier I am now that A is around. To her I owe a great deal.

While walking to my desk this morning with hot chocolate, envelopes, and legal pad in hand, I had the realization that I am currently living the dream job I so desperately wished for while drowning at my last job. I live in New York and work in a cushy high-rise a short subway ride away. I like the people I work with. I have friends to keep me company at work. I have a healthy work-life balance. I don't have to go in every day, but I can to take advantage of free food and amenities, and even when I do I usually have enough energy to read and write when I go back home. This is the life I wanted. It's not perfect, of course — I don't feel as intellectually stimulated as I want to be and I'm not sold on my job security — but I think it's important to recognize a good thing when you have it, and a good thing I certainly have right now. At least, to quote Vonnegut, if this isn't nice, then I don't know what is.

Usually when I post poems on here you can infer that I'm struggling to write, or struggling in general, or both. I've been trying to rouse myself out of catatonia but most days I don't succeed and end up in bed by 8. (Cue nightmares.) Most surprising to me is that I don't feel lonely. I'm grateful to avoid what I think might be the most unpleasant feeling; on the flipside, the cure for this ennui (caused by hurt? disappointment?) is much less straightforward.

The gem which inspired me to write today is Bill Watterson's 1990 commencement speech to the graduates at Kenyon College. I put it on my shelf after agonizing whether to categorize it under "art and the creative process" or "life and philosophy". Content like this that defies categorization is my favorite to consume; it blurs the lines between things I care about and shows me how they're all connected.

There are so many good lines in this speech. Some made me think about my writing on this blog:

It's surprising how hard we'll work when the work is done just for ourselves. (...) If you ever want to find out just how uninteresting you really are, get a job where the quality and frequency of your thoughts determine your livelihood.

Trying to write on this blog regularly has been the most rewarding and humbling experience of my life. Most days I can nary come up with a single original thought. Even when I do come up with something half-baked it inevitably gets shoehorned into the same stiff, weary words and sentence structures I use and overuse.

What follows is really good advice for any creative:

I've found that the only way I can keep writing every day, year after year, is to let my mind wander into new territories.

(...)

We're not really taught how to recreate constructively. We need to do more than find diversions; we need to restore and expand ourselves. Our idea of relaxing is all too often to plop down in front of the television set and let its pandering idiocy liquify our brains. Shutting off the thought process is not rejuvenating; the mind is like a car battery—it recharges by running.

You may be surprised to find how quickly daily routine and the demands of "just getting by" absorb your waking hours. You may be surprised to find how quickly you start to see your politics and religion become matters of habit rather than thought and inquiry. You may be surprised to find how quickly you start to see your life in terms of other people's expectations rather than issues. You may be surprised to find out how quickly reading a good book sounds like a luxury.

I've been starting to feel this way, that daily routine has completely absorbed my waking hours. (Hence me not writing anything original the past few days.) I know I've been letting myself get swept away by the tide of time in order to distract myself from thinking about people leaving my life and the part I play in their departures, but reading this made me want to snap out of it for the first time in a while.

Anyway, I highly recommend reading the rest of the transcript or listening to the speech. I don't know why it surprised me that the guy who made my favorite comic strip is also clever and wise in speech. In some parts it's as if he's talking directly to me.

We all have different desires and needs, but if we don't discover what we want from ourselves and what we stand for, we will live passively and unfulfilled. Sooner or later, we are all asked to compromise ourselves and the things we care about. We define ourselves by our actions. With each decision, we tell ourselves and the world who we are. Think about what you want out of this life and recognize that there are many kinds of success. (...)

Creating a life that reflects your values and satisfies your soul is a rare achievement. In a culture that relentlessly promotes avarice and excess as the good life, a person happy doing his own work is usually considered an eccentric, if not a subversive. (...) Someone who takes an undemanding job because it affords him the time to pursue other interests and activities is considered a flake.

(...)

You'll be told in a hundred ways, some subtle and some not, to keep climbing, and never be satisfied with where you are, who you are, and what you're doing. (...) To invent your own life's meaning is not easy, but it's still allowed, and I think you'll be happier for the trouble.

When I tell A's coworkers about my job many of them try to suggest alternate paths to me, as though where I am right now is not a position anyone should ever be content in, even as I insist that I like where I am and what I'm doing. I'm used to hearing this from my parents and I've learned to tune it out since they'd say the same regardless, but it carries a different ring when it comes from the people that work in the same room as you. Hearing Bill tell me that it's okay to be satisfied and content is a warm hug from someone I've looked up to before I even knew I could do that.

ch-vicariously

The Stranger I Know

2024-11-20 00:21:00

Dad

AMA - What's one of the hardest things you have ever done?

My Dad woke up this morning and didn't know what day it was. Panicked, he sent a text message to almost everyone in the family asking for help. At this point, that means my siblings and his. We are a close family and several of us sprang into action. His brother-in-law lives a couple of miles away and was the first to arrive. My aunt, a nurse with more than 40 years experience was there within the hour. They got him to the doctor and then the hospital where the doctors are running tests to rule out a stroke. His thinking seems to have cleared up since he sent the original text but he still couldn't figure out how to set an alarm on his phone. That kind of thing is starting to happen with more frequency.

Dad is the sole care-giver for my step-mother who has Alzheimers. She still know who he is, although most of the rest of us are becoming strangers to her. She still hugs me and tells me she loves me, but when she was recently asked by a doctor how many children my Dad has (four), she was unable to answer. Her and Dad were in a car accident last month and the next day she didn't understand why she felt so sore, unable to remember what happened. Even though he walks with a cane or a walker, Dad still cooks for her and takes her on the daily drive she insists on going on.

My Dad was the first person I knew to have a computer. It was one he purchased at Radio Shack in the 80s. His experience with them predates Windows. Like lots of old-timers, he likes to talk about how much he paid for a 10MB hard drive back in the day. He used spreadsheets in DOS and used to be a master at writing batch files. Recently, he asked me to come help him with some IT issues. He has having problems changing the ink in his printer and wanted to make sure some important documents were getting backed up. He's also mentioned not being able to remember how to access his photos or music. I was glad to help but I could see that he is starting to get frustrated by having to remember the procedures for tasks he's done for so many years.

My Dad and I don't see eye to eye on many things, especially politics. I've never liked to verbally spar with him because emotions take over and I can't think straight. He has always been one of the most intellectually capable people that I know. A lifelong voracious reader, he's a walking encyclopedia about a great many things. Unfortunately, some of the facts he's assimilated in the last 15 years came from Fox News, an outlet not known for presenting both sides of an issue. We do best when we talk about computers or when he tells stories about my grandparents. There are a great many things he doesn't like because they differ from what he considers traditional. You've heard about the type of person who wishes life today was like the 1950s? That's him.

Although he is financially able to afford assisted living for himself and my step-mother, he has so far resisted doing much more than just looking into it. He says that he is willing to pay for in home care, but so far he hasn't made any moves to get that underway. Maybe today's events will spur him into action.

Every time I see him these days, I have to determine whether he's having a good day or bad day. He has a sensitive nature, so I have to be circumspect. I have done my best in adulthood to let go of resentments toward him with varying levels of success. It has not been easy and that's on me. I feel like he does the best he can. I might wish he were different, but he isn't. He is who he is, and my job is to accept that the best I can.

As you may be able to tell, I am not a big fan of the aging process for me or anyone else, not that I have anything but wishful thinking to combat it. I don't like the effects it has on me and I don't like seeing the way it changes the people I love. Writing this is the outlet for feeling that way. Thanks for reading.

Enjoyed it? Please upvote 👇

The Zen of Coding

2024-11-16 21:26:00

For me, it takes a long time to create something like the Bear Micro Blog. An "unnecessarily" long time.

Partly, it's because I'm an amateur. But that's not the main reason. Nor is it a matter of perfection.

It's because I find it relaxing.

Coding is like meditation for me. A perfect blend of focus and relaxation—a kind of timeless void. I'm often surprised when I look at the clock and realize how much time has passed.

They say time is money. Considering how rewarding these precious moments are to me, it’s a bargain.

My Moleskine to Hobonici Notebook Switch

2024-11-18 06:31:00

mastodon_journalPost_sideView

Spoiler Alert: I indeed was not patient enough.

For the past few days, I’ve been contemplating abandoning my Moleskine journal for my newly acquired Hobonici notebook1. One main reason is that ever since I started writing with fountain pens, I’ve discovered that the bleed through on my Moleskine is just something I can no longer stand. I’ve been diligently writing with my favorite Kaco pen, but now that my Pilot Vanishing Point fountain pen has arrived, I really want to start journaling with it. Being absolutely impatient, and accepting that life is short and I should use a journal that sparks joy2, I made the switch today. I only had 14 pages left, so I don't actually feel AS guilty.

I have new notebook anxiety. I love buying journals, and stationery in general, but writing on that first page is just anxiety inducing for me. I try to address it by skipping the first couple of pages, so I tell my brain that I'm technically not writing on the first page. I’ve also started making a habit of doing pen tests and swatches on the last few pages of my journal before committing. It’s kind of working.

Anyways.

As an ode to my new journal day, I figured I’d celebrate the past TWO journals that have kept me company for the past FIFTEEN years by dedicating this post to them.

Introducing Journals 1, 2 and 3 ⤵️

journals July 2009 to April 2016 --> July 2021 to November 2024 --> November 2024 to who knows??

Note that I don't have any stickers on my new journal. I know people typically decorate their journals before using them but for me, I just add stickers as I fill the journal. To me, the stickers on my journals tell a story as much as the things I write in them.

Also... I know, I know. How is it possible to only fill out TWO3 journals in 15 years? Well…

  1. I am a very inconsistent analogue journaler4. I go through phrases where I write a ton via pen and paper, but then would go through months (and sometimes skip a year) of not writing anything. I find that it has a lot to do with time, mental health and energy.
  2. I have very small handwriting so I am able to say a lot with minimal space.

Ok, that's it. I'm really excited to make new memories to document. Here's to hoping it doesn't take me 3+ years to finish this one5.

85/100

Comments

If you'd like to comment, please send me an email, respond on any social media of mine you know, or sign my Guestbook.


ooh I hope you’ll like the hobonichi! I love starting a new notebook and almost always end up switching even when I have 10-20 pages left in my old one.

-Annie (via Mastodon)


Yay!!! Finally someone writing about journaling who doesn’t make me feel guilty for long-term skipping.

-Mark Okern (via Bluesky)


cool read! And great info here as to pens leaking through haha. I don't write physically but I've thought about it. And I hear the inconsistent writing, there's many years on my blog where I wrote nothing at all 😂

-Jake (via Mastodon)


I tried to keep a journal for years and years and years. I'd stick with it for a bit, then eventually just give up.

Sometimes just sitting down and putting something to paper was exhausting. I'd just stop halfway through a page because I ran out of steam.

I think my brain moves faster than I can write and I get impatient. Also, journals etc aren't organized and can't be readily backed up.

I've been having fun keeping a blog. I think the form factor is more in line with my interests in tech. I can also get as organized as I want with it. The most important thing, though, is that I can type waaaay faster than I can write. So now I have the opposite problem--I'm not thinking fast enough to continue writing at the same pace.

These days I keep a small pocket notebook handy for random thoughts, lists, ideas, etc. "Long form" stuff is made in basic markdown text files which go on my blog. It's been a nice system for me.

-Xavier (via Mastodon)


I use the Hobonichi Techo for my day planner and I love it! Great paper and I was surprised to find I love the A6 size.

and by "day planner" I mean writing anything and everything about any day in it.

-tally (via Mastodon)


Awesome. I've considered a hob in the past. Currently writing very erratically in a bright yellow Stalogy 365 notebook, it's lovely but not overly practical.

-Dave (via Bluesky)


I’m journaler myself and I liked to read that many other people is inconsistent on their analogue journaling. These days I’m rocking a lovely Nuuna notebook that I love, and I like to sit down and write a few lines on it when I’m sitting at my desk. But sometimes I feel bad because sometimes I can stop doing it for days or even weeks.

I have kept journals on the past and I have abandoned them, and then it feel weird using the same notebook for continuing. I have some half-filled notebooks that I have even considered destroying, because at some point I have considered them as a failure.

Right now I’m cleaning my Parker pen that I love because I love switching pens and I have not used this for months.

-Manu M (via email)

Reply by email
  1. I need to write a review about this once I use it a bit more.

  2. …and of course a push from LC.

  3. Journals from my younger years not included. I think those are still in my parents house. I have no idea.

  4. I keep a daily digital journal via DayOne.

  5. I think I made progress. It only took me 3 years to finish the second journal, instead of 7 years.

the median of meaningful

2024-11-15 11:31:07

I’m realizing that what bothers me about teaching is everything feels way too important. In prepping my lessons, the slides, the activities, etc., I have to always be thinking about how all those things affect the kids. How do they enhance their understanding? How do they engage them? Could I be more flexible in certain areas, or are there skills or topics I really need the kids to understand in a certain way? How can I design this class such that they interact more with each other, have more agency over their learning, can keep up?

Dropping the ball on any aspect of teaching feels huge. When a lesson flops, I feel like I wasted my kids’ time and mine. My evenings are spent thinking about how to get the next one right. There’s no part of this job where I feel I can relax my grip or afford to phone it in, and being constantly on and thinking about all these interweaving parts is exhausting.

Maybe it’s a sign of novice, me only being able to see each part of teaching at 100% importance, but I am a novice and that’s how it feels.

I went back to teaching after my office job because I felt the office job was fun and easy but so so meaningless. But now I think teaching might be far too meaningful, to the point of being overwhelming. I’d like to know if there’s a job out there that’s between these two extremes, that’s closer to the middle of meaningful. I’d like to do work for something I believe in and find important, but that doesn’t constantly require 100% of my time and attention and energy and will let me have my other meaningful (but maybe more personal) pursuits.

I do have an answer to this already, actually: The path I’m looking for exists, and it’s called information preservation. But I can’t drop teaching—not when I’m almost done with my program. Not when it’s a job that can get me out of here, to somewhere where I can eventually pivot to something that doesn’t have my shoulders up by my ears all the time.

I kind of wish I realized this about teaching much later, after a few years of experience under my belt. But instead I’m stuck feeling uneasy about a career path I’m deciding to stick with anyway for at least a few years until I get the things I need (something substantial on my resume, PR in a country with a library culture). I think that’s where most of the dread is coming from—knowing how I feel, and knowing I’ll have to sit with it for the foreseeable future.

Anyway, time to get back to work.

The small web - a journey into the rabbit hole 🐇🕳

2024-11-13 20:52:00

😻🤤I am falling in love with the “small web” and the amazing people involved in it - more and more. Let’s start a never ending journey into the small web 🐇🕳rabbit hole👇

🔬Small web has divided my career life as an indie developer to two phases:

What is the small web?

My quick, not complete answer, using an example: Personal websites/blogs people are making and hosting themselves are part of the small web.

You can find many of these websites here:

https://blogroll.org

🔆 You can start learning more about the small web by visiting these websites and keep clicking the links inside them to start a never ending journey into the small web 🐇🕳rabbit hole👇

Learn anything about the small web movement

you can find lots of resources and links to small web projects on this page:

🔗 https://32bit.cafe/mission

And here in this page Aral, the developer of Kitten (One of the best full stack’s for creating small web apps), talks about the small web.

“I confess I fell in love with Kitten from the moment I saw it - You can learn more about Kitten in the link bellow”

🔗 https://ar.al/2020/08/07/what-is-the-small-web

🔸🔹 Please write your comment on my guest book🔸🔹

😇👇 And like my post if you liked it

C + Raylib: snake game

2024-11-20 09:02:00

Introduction

Continuation of the snake game series. This one is using C + Raylib and there will be another version with Zig + Raylib. You might wonder why did I wrote multiple versions of this snake games? My gamedev session is usually done in Godot 4, but I have always been curious how it differs when doing gamedev in Raylib.

What's Raylib?

raylib-logo

Taken from the website: a programming library to enjoy videogames programming; no fancy interface, no visual helpers, no gui tools or editors... just coding in pure spartan-programmers way.

Key point: "pure spartan-programmers way".

Yes compared to using Godot 4, I do feel like a Spartan warrior when using Raylib! Gamedev in Godot is a walk in the park comparatively.

NOTE: you'll see a super similar code compared to the ASCII snake code.

#1 Libraries

#include <raylib.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#2 Consts, structs and global vars

#define GRID_SIZE 25
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
#define MAX_SCORE 256

typedef struct {
    Vector2 position;
} Vec2;

Vec2 head = {{0, 0}};
Vec2 segments[MAX_SCORE + 1];
Vec2 dir = {{1, 0}};
Vec2 berry;

int score = 0;
char score_message[32];

bool skip = false;
bool is_running = true;

#3 Function declaration

void game_over();
void init();
void quit_game();
void restart_game();
bool collide(Vec2 a, Vec2 b);
bool collide_snake_body(Vec2 point);
Vec2 spawn_berry();
void process_input();
void draw();
void update();

#4 Collision: the collide function

bool collide(Vec2 a, Vec2 b) 
{
    return (a.position.x == b.position.x && a.position.y == b.position.y);
}

bool collide_snake_body(Vec2 point) 
{
    for (int i = 0; i < score; i++) {
        if (collide(point, segments[i])) {
            return true;
        }
    }
    return false;
}

#5 Spawning berries

Generates a random position for a new berry, ensuring it doesn't overlap with the snake's body or head.

Vec2 spawn_berry() 
{
    Vec2 berry = {{ 1 + rand() % (GRID_SIZE - 2), 1 + rand() % (GRID_SIZE - 2) }};
    while (collide(head, berry) || collide_snake_body(berry)) {
        berry.position.x = 1 + rand() % (GRID_SIZE - 2);
        berry.position.y = 1 + rand() % (GRID_SIZE - 2);
    }
    return berry;
}

#6 Quit and Restart

void quit_game() 
{
    CloseWindow();
}

void restart_game() 
{
    head.position.x = 0;
    head.position.y = 0;
    dir.position.x = 1;
    dir.position.y = 0;
    score = 0;
    sprintf(score_message, "[ Score: %d ]", score);
    is_running = true;
}

#7 Init function

Initializes the game by setting up the window, random number generator, and initial game state.

void init() 
{
    srand(time(NULL));
    InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "snake");
    SetTargetFPS(8);
    berry = spawn_berry();
    sprintf(score_message, "[ Score: %d ]", score);
}

#8 Movement - process_input

Handles user input, such as arrow key presses and space/escape key presses.

void process_input() 
{
    if (IsKeyPressed(KEY_LEFT)) {
        if (dir.position.x == 1) return;
        dir.position.x = -1;
        dir.position.y = 0;
    }
    if (IsKeyPressed(KEY_RIGHT)) {
        if (dir.position.x == -1) return;
        dir.position.x = 1;
        dir.position.y = 0;
    }
    if (IsKeyPressed(KEY_UP)) {
        if (dir.position.y == 1) return;
        dir.position.x = 0;
        dir.position.y = -1;
    }
    if (IsKeyPressed(KEY_DOWN)) {
        if (dir.position.y == -1) return;
        dir.position.x = 0;
        dir.position.y = 1;
    }
    if (IsKeyPressed(KEY_SPACE)) {
        if (!is_running) restart_game();
    }
    if (IsKeyPressed(KEY_ESCAPE)) {
        is_running = false;
        quit_game();
    }
}

#9 Game Over state

Displays the game over screen with restart and quit options.

void game_over() 
{
    int gameOverWidth = MeasureText("Game Over", 30);
    int gameOverX = (SCREEN_WIDTH - gameOverWidth) / 2;
    DrawText("GAME OVER", gameOverX - 20, SCREEN_HEIGHT/2 - 20, 36, RED);

    int restartWidth = MeasureText("[SPACE] to restart, [ESC] to quit", 20);
    int restartX = (SCREEN_WIDTH - restartWidth) / 2;
    DrawText("[SPACE] to restart, [ESC] to quit", 
             restartX + 5, SCREEN_HEIGHT/2 + 50, 20, ORANGE);
}

#10 Update game state

Updates the game state by moving the snake, checking for collisions, and updating the score.

void update() 
{
    for (int i = score; i > 0; i--) {
        segments[i] = segments[i - 1];
    }
    segments[0] = head;

    head.position.x += dir.position.x;
    head.position.y += dir.position.y;

    if (collide_snake_body(head) || head.position.x < 0 || head.position.y < 0 \
            || head.position.x >= GRID_SIZE || head.position.y >= GRID_SIZE) {
        is_running = false;
    }

    if (collide(head, berry)) {
        if (score < MAX_SCORE) {
            score += 1;
            sprintf(score_message, "[ Score: %d ]", score);
        } else {
            printf("You Win!");
        }
        berry = spawn_berry();
    }
}

#11 Draw function

Renders the game screen, including the snake, berry, score, and game over screen (if applicable).

void draw() 
{
    BeginDrawing();
    ClearBackground(BLACK);

    DrawRectangle(berry.position.x * SCREEN_WIDTH / GRID_SIZE,
                  berry.position.y * SCREEN_HEIGHT / GRID_SIZE,
                  SCREEN_WIDTH / GRID_SIZE,
                  SCREEN_HEIGHT / GRID_SIZE,
                  BLUE);

    for (int i = 0; i < score; i++) {
        DrawRectangle(segments[i].position.x * SCREEN_WIDTH / GRID_SIZE,
                      segments[i].position.y * SCREEN_HEIGHT / GRID_SIZE,
                      SCREEN_WIDTH / GRID_SIZE,
                      SCREEN_HEIGHT / GRID_SIZE,
                      GREEN);
    }
    DrawRectangle(head.position.x * SCREEN_WIDTH / GRID_SIZE,
                  head.position.y * SCREEN_HEIGHT / GRID_SIZE,
                  SCREEN_WIDTH / GRID_SIZE,
                  SCREEN_HEIGHT / GRID_SIZE,
                  YELLOW);

    DrawRectangleLines(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, WHITE);

    int score_text = MeasureText("[ Score: {} ]", 24);
    int score_x = (SCREEN_WIDTH - score_text) / 2;
    DrawText(score_message, 
             score_x, 
             10, 
             24, 
             WHITE);

    int lang_text = MeasureText("C + Raylib", 24);
    int lang_x = (SCREEN_WIDTH - lang_text) / 2;
    DrawText("C + Raylib", 
             lang_x, 
             SCREEN_HEIGHT - 60, 
             24, 
             WHITE);

    if (!is_running) {
        game_over();
    }

    EndDrawing();
}

#12 Main

Initializing the game and running the game loop.

int main(void)
{
    init();
    while (!WindowShouldClose())
    {
        process_input();
        if (skip) {
            skip = false;
            continue;
        }
        if (is_running) {
            update();
        }
        draw();
    }
    quit_game();

    return 0;
}

Result

cRL-snake

FireDucks : Pandas but 100x faster

2024-11-11 06:46:00

Introduction

My main background is a hedge fund professional, so I deal with finance data all the time and so far the Pandas library has been an indispensable tool in my workflow and my most used Python library.

pd-logo pl-logo

Then came along Polars (written in Rust, btw!) which shook the ground of Python ecosystem due to its speed and efficiency, you can check some of Polars benchmark here.

I have around +/- 30 thousand lines of Pandas code, so you can understand why I've been hesitant to rewrite them to Polars, despite my enthusiasm for speed and optimization. The sheer scale of the task has led to repeated delays, as I weigh the potential benefits of a faster and more efficient library against the significant effort required to refactor my existing code.

There has always been this thought in the back of my mind:

Pandas is written in C and Cython, which means the main engine is King C...there got to be a way to optimize Pandas and leverage the C engine!

FireDucks

fd-logo Here comes FireDucks, the answer to my prayer: ==a speed demon Pandas library!==. It was launched on October 2023 by a team of programmers from NEC Corporation which have 30+ years of experience developing supercomputers, read the announcement here.

Quick check the benchmark page here! I'll let the numbers speak by themselves.

Benchmark

Alrighty those bench numbers from FireDucks looks amazing, but a good rule of thumb is never take numbers for granted...don't trust, verify! Hence I'm making my own set of benchmarks on my machine.

#1 Create 150 MB dummy data

create-data

#2 Read the 150 MB dummy data

read-data

#3 Calculate Mean

calc-mean

#4 Calculate Sum

calc-sum

Yes the last two benchmark numbers are 130x and 200x faster than Pandas...are you not amused with these performance impact?! So yeah, the title of this post is not a clickbait, it's real. Another key point I need to highlight, the most important one:

==Using FireDucks requires ZERO Pandas code change==
you can just plug FireDucks into your existing Pandas code and expect massive speed improvements..impressive indeed!

Conclusion

I'm lost for words..frankly! What else would Pandas users want?

A note for those group of people bashing Python for being slow...yes pure Python is super slow I agree. But it has been proven time and again it can be optimized and once it's been properly optimized (FireDucks, Codon, Cython, etc) it can be speedy as well since Python backend uses C engine!

Be smart folks! Noone sane would use "pure Python" for serious workload...leverage the vast ecosystem!