hyperbo.la :: lifestream
permalink

On Tuesday, a weekly CI run triggered a Miri failure for a crate I maintain which has some unsafe code. Two days later I had a fix validated, reviewed, and released plus a RustSec advisory published at https://rustsec.org/advisories/RUSTSEC-2023-0048.html. From advisory being published to the dependabot PR was about 16 hours. #rust #artichoke #security

permalink

There is no more #webpack in #artichoke. All web properties have been migrated to esbuild, eta template engine, the Node fs API, and custom build scripts. This is simple, this is good. #hypstatic is next but there is a lot to unwind. #win

permalink

with the lopopolo IAM user gone, the only ones left were the IAM users in the #artichoke and #hypstatic GitHub organizations used for terraform CI in the project-infrastructure repos. I used the new GitHub Actions OpenID Connect provider to wire up AWS identity federation following this guide – https://scalesec.com/blog/identity-federation-for-github-actions-on-aws/ #security #github #aws #win

permalink

In #aws things, I migrated both hyperbola and #artichoke infra to separate AWS organizations and set them up with AWS Control Tower's account vending machine. Audit logs! AWS Config! SCPs! AWS Cost and Usage Reports! AWS SSO! #win #security #cost

permalink

It's been a while since I've posted about #artichoke, but I recently landed a #rust implementation of #ruby's `String` class. #win https://github.com/artichoke/artichoke/pull/1222

permalink

I got a PR in artichoke suggesting to bump down the frequency of dependabot updates to monthly. I applied this change across all artichoke, hyperbola, and lopopolo repositories. It has been a big quality of life improvement and cuts down on a lot of churn in JS dependencies. Applying dep updates once a month is 👍 #win #artichoke

permalink

focaccia and roe are UTF-8 case manipulation crates for implementing parts of `String` and `Symbol` in #artichoke. intaglio is Artichoke's symbol table, boba is an implementation of Bubble Babble Encoding which will be used in the `digest` stdlib package. #rust #patch

permalink

There have been over 600 PRs in the last year of Artichoke. https://hyperbo.la/lifestream/737/ https://github.com/artichoke/artichoke/pull/847 #artichoke #git

permalink

More #artichoke updates since March: a marketing site at www.artichokeruby.org, prebuilt containers on Docker Hub https://hub.docker.com/r/artichokeruby/artichoke, and prebuilt nightlies https://github.com/artichoke/nightly/releases/latest #win

permalink

#vscode and LLDB in VSCode were SO amazing to use. Within a couple of iterations, I was able to track down the use-after-free: https://github.com/artichoke/artichoke/pull/674 #fail #win #artichoke

permalink

After repeated attempts of replicating my windows CI setup in a developer VM, I sloppily installed software via web installers. With every VS component, rustup, RubyInstaller, LLVM, choco, and winflexbison, I was running with a reproducer #artichoke

permalink

Once GH-670 was merged, I had a segfault that only (and reliably) reproduced on one test in Windows #artichoke #rust #windows

permalink

After 50 PRs, I was able to put GH-442 to bed and remove the Rc wrapper from the Artichoke state https://github.com/artichoke/artichoke/pull/670 #win This refactor took 4 months #fail #rust #artichoke

Photo for post 768.
permalink

Nightly builds of Artichoke are available via ruby-build: rbenv install artichoke-dev #artichoke #win

permalink

Migrated all #artichoke CI to GitHub Actions #github #win Jobs and workflows are so much easier to reason about. And it's free 💪

permalink

Pushing errors to the edge and forcing callers to handle them makes for better code #artichoke https://github.com/artichoke/artichoke/pull/434

permalink

Nothing like a little build breakage to start the weekend https://github.com/artichoke/artichoke/pull/417 #artichoke #fail

permalink

#artichoke RubyConf recording here: https://www.youtube.com/watch?v=QMni48MBqFw

permalink

I missed a couple of months posting! I was working on my RubyConf talk about #artichoke. slides here: https://artichoke.github.io/rubyconf/2019/

permalink

Also added many more converter implementations with macros. There are 988 TryConvert implementations. #win #fail #artichoke

permalink

Led to reporting this #mruby bug: https://github.com/mruby/mruby/issues/4684 #github #fail although I was able to work around it #artichoke

permalink

This change added new functionality: Converting to and from byte and string slices #win #artichoke

Photo for post 740.
permalink

The converters are central to #artichoke. Changing this core abstraction was painful: 84 files changed, 2000 lines added, 2800 lines removed. #fail #git

permalink

The converters allow the runtime to convert between Rust and Ruby types. They are the glue that the entire Ruby Core and Ruby Standard Library implementation is built upon. #artichoke

permalink

I'm separating the core of #artichoke from the #mruby backend specific glue. This step involved reimplementing the converters with the new traits in core.

permalink

This was a nasty PR https://github.com/artichoke/artichoke/pull/242 #artichoke #fail

permalink

Some folks have been contributing #Ruby and #Rust code to #artichoke! #win #github

permalink

I added a macro to oniguruma to enable it to build on clang for #wasm targets #patch #github #artichoke https://github.com/kkos/oniguruma/pull/150

permalink

Reported a build issue on #mruby with gperf 3.1 #ci #build #patch #github #artichoke https://github.com/mruby/mruby/issues/4628

Photo for post 732.
permalink

#artichoke is the top trending repo on all of #github right now #win

permalink

I'm trying to improve Regexp performance in #artichoke by using the regex crate instead of oniguruma in some cases. It turns out not to be faster in all cases #patch #rust #fail https://github.com/rust-lang/regex/issues/604

Photo for post 729.
permalink

I built an #artichoke #Wasm playground in the browser https://artichoke.github.io/artichoke/ #win

Photo for post 728.
permalink

That is a lot of code #artichoke #github #patch #win

Photo for post 727.
permalink

That is a lot of code #artichoke #github #patch #win

permalink

I forked onig and hope to add support for the wasm-unknown-unknown build target. For #artichoke though, it's too soon. Once mruby-sys is pulled into #Rust I'll try again #ruby #mruby #fail #patch #Wasm

permalink

Neither mruby-sys nor onig can build with wasm-unknown-unknown or wasm-wasi, so I was stuck with wasm-unknown-emscripten. The linker on mruby-sys would dead code eliminate artichoke_backend::Artichoke #fail #Wasm #artichoke #mruby

permalink

One of the goals is to have a #Wasm build target. This is what nerdsniped me this weekend. #artichoke

permalink

The biggest accomplishment was redoing the #artichoke README https://github.com/artichoke/artichoke#readme Thought about project goals and differentiators from MRI. Added milestones to track progress in achieving goals #win #ruby #artichoke

permalink

Being forced to set up the repository infra from scratch in cactusref was a good way to fix everything I disliked about my dev environment. CircleCI build and scripts/lint.sh got overhauled #win #artichoke #shell #bash #node #lint

permalink

With renewed focus of building my own #Ruby instead of extending #mruby, I put in some effort to make mruby an implementation detail of #artichoke. Lots of refactoring with sed. #fail

permalink

ferrocarril had different goals than artichoke: it wanted to run Rails. To do that, it had a lot of extra bits in it like gems, a Rack server, and sample apps. Nuked all of it #win #artichoke

permalink

Step 3: create the #artichoke repository where the core #ruby development will take place. #artichoke

permalink

Step 2: transfer ownership of ferrocarril to artichoke organization #artichoke #github. Not much to do here, updated some links, fixed some branding, got CircleCI building again #artichoke

permalink

CactusRef is still an incredibly unsafe crate, but at least it aborts if it detects a use-after-free #fail #artichoke

permalink

Extracting cactusref required completely rewriting #git history, updating docs, adding a build, adding benches, importing my blog post, updating links in the blog post #artichoke

permalink

Step 1: extract CactusRef from ferrocarril into its own repository https://github.com/artichoke/cactusref #artichoke

permalink

This weekend I did the migration, which took place in multiple parts #artichoke #github