chancancode
I find this tweet insightful because it offered a perspective that I (and it seems like you also) don’t have which is helpful in comprehending the situation.
As a developer, I am not particularly invested nor excited by the announcements but I thought they were fine. I think things may be a bit overhyped but I also enjoyed their products for what they are as a consumer and subscriber.
With that said, to me, from the outside, things seemed to be going fine, maybe even great, over there. So while I understand the words in the reporting (“it’s a disagreement in direction”), I think I lack the perspective to actually understand what that entails, and I thought this was an insightful viewpoint to fill in the perspectives that I didn’t have.
The way this was handled still felt iffy to me but with the perspective I can at least imagine what may have drove people to want to take such drastic actions in the first place.
He is not exactly an insider, but seems broadly aligned/sympathetic/well-connected with the Ilya/researchers faction, his tweet/perspective was a useful proxy into what that split may have felt like internally.
While revamping the tutorial[1] to showcase the new features and idioms, I worked on this tool[2] to automate the generation of the tutorial.
Every page of the tutorial you see is the output from markdown source files (like this one[3]) which contains executable instructions for the steps. The build[4] system will run these commands and edits the same way an end-user would, capture the output of the commands and put them in the tutorial. It also takes the screenshots by opening a real browser (via puppeteer) and navigating to the actual app that we are building as part of the tutorial.
All of these ensures that the tutorial content and screenshots are up-to-date with the latest blueprints (the files used by the generators), config files, etc, and that everything really works as-expected. It makes it much easier to maintain and QC the teaching materials, but also servers as a very useful end-to-end smoke test to ensure all the moving pieces in the ecosystem (including external components like npm, node, etc) are all working together.
Right now the tool and the tutorial content are in the same GitHub repo, but the code is actually written to be completely agnostic to Ember.js (or JS even). It just runs shell commands, edit files etc. My intention is to separate out the tool to its standalone thing, so more communities can benefit from this approach.
[1]: https://guides.emberjs.com/release/tutorial/
[2]: https://github.com/ember-learn/super-rentals-tutorial/
[3]: https://raw.githubusercontent.com/ember-learn/super-rentals-...
[4]: https://github.com/ember-learn/super-rentals-tutorial/commit...
Skylight, a Ruby profiler, free for open source applications
---
Helix: Build and Deploy a Ruby Native Extension with Rust in 10 Minutes [video]
Helix: Ruby Native Extensions Without Fear
Glimmer.js: What’s the Deal with TypeScript?
Spreadsheet Tic-Tac-Toe Part 2: Abstraction, Encapsulation and Refactoring [video]
Announcing the Glimmer 2 Alpha
Rethinking Computer Science Education
Helix is setup to do the right thing – it already goes through a coercion protocol, we can easily add the encoding check there. We just missed that detail when porting the code, will fix it soon.
I suppose that echoes my point about how system programming in is hard to get right, there are just too many details you have to remember!
This is why having a shared solution like Helix is beneficial. By moving all the unsafe code into a common library, it's more likely that someone will notice the problem and fix it for everyone.
This actually touches on an interesting point I would like to elaborate on. When we say {Helix/Rust/Ruby} is safe, there is an important caveat – {Helix/Rust/Ruby} themselves could of course have bugs. I have definitely experienced segfaults on Ruby myself.
While true, this caveat is not particularly interesting. It is not a slight of hand. Moving code around doesn't magically remove human errors, that's not the point. It's about establishing clear boundaries for responsibility. (This is why unsafe blocks in Rust is great.)
When you get a segfault on Ruby, you know for certain that your code is not the problem. Sure, you might be something weird, but it is part of the contract that the VM is not supposed to crash no matter what you do. As a result, memory safety is just not a thing you have to constantly worry about when programming in Ruby.
It is the same thing as saying JavaScript code on a website "cannot" crash the browser, segfaults in user-space code "cannot" cause a kernel panic or malicious code "cannot" fry your chip. All of these could of course (and do) happen – but from the programmer's perspective, you can work with the assumption that they are not going to happen (and when they do, it's someone else's fault). It's not "cannot" in the "mathematically proven" sense, but it's just a useful abstraction boundary.