Kevin Menard

I'm a Staff Engineer at Shopify where I work on YJIT and TruffleRuby. I care a lot about efficient use of resources, making code fast, and saving humans time by making software smarter.

Historically, I've been active in the Boston startup community. Previously I co-founded Servprise and Mogotest, operating each of those for ~4.5 years each, and have worked at a few other area startups on early engineering teams.

I'm fond of music & enjoy drumming.

2025-03-21

Working with BackBlaze B2 and ActiveStorage gave me a flashback to when I spent months adding mock implementations of S3 versioning to Fog. It was a lot of tedium working out exactly how S3 would respond because actual API responses often conflicted with the documentation. API errors that Amazon documented as being impossible would happen sporadically, but regularly.

PRs for those interested:

* github.com/fog/fog/pull/672
* github.com/fog/fog/pull/681

I kinda miss working on Fog and Rubber.

2025-02-22

So far, I'm really enjoying it. But, also struggling a bit with outdated modes of thinking on some parts. I'm trying to use an LLM as a code buddy, too, to build up that skill. But, I never know if it's giving me info that's idiomatic for Rails 7+ or if I'm getting data scraped from an old, undated blog post targeting Rails 4.

In any event, not having to deal with asset pipeline is great. Stimulus is really compelling. I haven't deployed yet, but Kamal looks a lot nicer than Capistrano.

2025-02-22

I've been working on Ruby implementations for a long time. I got started with some basic Ruby Enterprise Edition stuff a long time ago, then JRuby, then TruffleRuby, then CRuby (most of this was actually at the same time). One of the challenges with dedicating time to the VM internals is you can fall behind what Rubyists are actually doing. So, I'm building a Rails 8 app from scratch for a friend.

I've contributed to Rails apps, but this is the first one I'm spinning up from scratch in a while.

2025-02-22

@mcphat It still has some quirks and I run EAP builds. But, I'm pretty happy with it. Alas, Copilot often lags EAP.

The biggest annoyance is the chat box tries to pair up quotes. So, when I type a contraction in English there's a trailing `'` that I need to delete. I'm sure they'll fix it soon.

I've heard good things about CodeBuddy + JetBrains tooling, but I haven't tried that one out yet. I don't care for GitHub-based login and the pricing is confusing, but that could be worth checking out.

2025-02-21

The JetBrains AI stuff was really not that good when I used it over the summer, but it's really come into its own. I've used it pretty extensively with RubyMine, CLion, and IntelliJ over the past couple of weeks. It has a really nice full IDE integration that VS Code + Copilot can't match. It's great being able to select an undocumented function and have it explain the code.

What's really neat on the Rails side is it'll auto-add more context using knowledge about the structure of Rails apps.

2024-11-14

If you’re at #RubyConf2024 and are interested in TruffleRuby, please feel free to reach out. I’m happy to chat and look at code.

2024-10-25

@Orc @ekuber You can target a particular Rust edition if you’re not interested in chasing new functionality.

doc.rust-lang.org/edition-guid

2024-10-18

@bobmcwhirter A nice day to start again.

2024-10-16

I'm giving Tailwind a shot with Rails 8.0.0-beta1. I've been rather skeptical of Tailwind since I've first heard of it, but I've been told I need to try it to truly get it, so I'm doing that.

My first hour or so was spent trying to figure out why my <h1> was rendering inline. Docs suggested only font size and margin would get reset. It turns out the generated application layout wraps everything in a `flex` class so all my views need a flex wrapper to render correctly. Not off to a good start...

2024-09-11

The Steam Families feature is out of beta:

store.steampowered.com/news/ap

I'm still amazed such a pro-consumer move was made. Most media companies have been using digital as a way to restrict rights in ways physical never could.

Steam is addressing my largest issue with digital games: having to buy multiple copies when only one family member is playing at a time. They've made purchasing & license management easier, too. I'm inclined to sell to switch the kids from Nintendo Switch to Steam Deck.

2024-09-02

I quite enjoy Rust. We use it for YJIT and I’ve been using it personally for years (incidentally, building a different compiler). But, its usage in Ruby gems has been an endless source of headaches, even on CRuby.

My gripe at the moment is how rb-sys breaks rubies other than CRuby while advertising itself as a Ruby extension tool (i.e., not just CRuby). We did a ton of work to make native extensions run TruffleRuby by treating CRuby’s functions as a de facto interface and rb-sys undoes that.

2024-09-02

If you’re making a physical backup of your GitHub recovery codes, please note that it will print with your theme rendered. I use a dark theme so the process ended up printing an almost entirely black sheet of paper. Fortunately, I have a laser printer, otherwise it would’ve used $10 worth of ink.

github.com/orgs/community/disc if you want more details or would like to vote on it.

2024-06-12

@braidn @soulcutter I guess I'm the odd one out that doesn't really care about linear history. I'll rebase commits before merge, but I like having a merge commit. It makes reverting considerably easier, should it become necessary. I suppose squash commits make reverting easy, too, but it also loses history.

I structure my commits so they're individually useful & rebase locally. I also write meaningful commit messages that explain the "why" rather than the "what" so history is meaningful.

2024-06-12

I understand why people want a squash and merge function even if I don't agree with it. I just don't get why they even bother using git in that case.

2024-04-24

@soulcutter I concur. I also like being able to grep through a changelog and read it offline. But, I don't have control over what other people do and GitHub saw it fit to create a proprietary solution here :-/

2024-04-17

Is there a way to see one flat listing of release notes in GitHub Releases? Many projects no longer ship with a single changelog file, but it's rather tedious paginating through a list of releases. Moreover, GitHub throws a lot of superfluous info on the page. (I'm glad contributors get recognition, but it comes at the expense of tracking what's actually changed.)

2024-02-18

@eregon @byroot There isn't a carve out in semver for rare circumstances guarded by tooling or a Ruby-specific extension for required_ruby_version. The document is fairly straightforward and reads:

"MINOR version when you add functionality in a backward compatible manner"

While I appreciate Rails doesn't follow semver, RubyGems very much encourages it for version specifiers. And Rails has a large influence on the community. That's how this discussion started. It got sidetracked pretty quickly.

2024-02-15

@postmodern I had someone threaten me because he lost in a match of "Titanfall". At that point I realized I didn't want my gamer tag to be the same as my online persona. For years Discord didn't support multiple logins and it's still janky now, all but forcing you to unify your presence. I didn't find that to be particularly user friendly.

While I don't love Element, I like building on protocols instead of yet another walled garden. But, the Discord UI is better than Slack's for sure.

2024-02-15

One thing I really appreciate about @JRuby is that their community chat is on Matrix. I find that way more in keeping with the open source ethos than either Discord or Slack.

I don't need to ask for an invitation to join. I can remain connected to other open source projects at the same time without an expensive workspace switch. I'm not getting pestered about archive limits on free accounts. And I can keep my gaming identity separate from my OSS to keep the creeps away.

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst