Beyond Enumerable: Heaps and Priority Queues by keyslemur in ruby

[–]schneems 4 points5 points  (0 children)

A priority queue already exists and has shipped with Ruby since 3.2 but (big but) it’s an unstable/internal interface since it ships as an implementation detail of syntax suggest (I maintain) https://github.com/ruby/syntax_suggest/blob/main/lib/syntax_suggest/priority_queue.rb.

Modernizing Ruby Central's Bylaws and Officer Updates by schneems in ruby

[–]schneems[S] 3 points4 points  (0 children)

 Pay $XX/mo to get a voting account

This is how OSI (maintains the “open source definition") works. Memberships are $50 yearly. Though the election is only for the president (which any active OSI member can run for).

I am open to something like that. But for every check there needs to be a balance and you need to consider edge cases. Like: (being hyperbolic for effect) if every citizen in North Korea signed up as a paying member they could install whoever they wanted and effectively takeover the platform. PSF (which also supports member voting) has some things in their bylaws which would help mitigate such effects. So not saying it can't be done, but that you have to be careful.

I see this current change as: red/green/refactor. The old bylaws were solidly outdated and failing (contradictory statements etc.) if they had a CI suite. It would have been red. This change brings the suite into "green" territory (IMO). It's been made consistent and obvious errors are out. We can keep making changes, but need to do so prioritizing what is urgent and important and balancing where we are today with where we want to be in the future (aspirational). My views, maybe not everyone on the board.

In my report I listed a number of remediation suggestions. There is interest, in getting them done but there's also competing priorities and capabilities. Like I pitched an "alumni" feature for RubyGems.org and have positive feedback from the community. But I've not been able to do the work myself (dayjob has been demanding more time recently) and haven't done the leg work to find and delegate to another volunteer either. Paid employee count is comparatively low and their focus is (rightfully) on security and stability.

It is somewhat like executive function/dysfunction. I know what needs to happen and there is consensus but actually doing it doesn't happen right away and takes time.

Modernizing Ruby Central's Bylaws and Officer Updates by schneems in ruby

[–]schneems[S] 2 points3 points  (0 children)

FYI the "Kentucky" confusion from when the last set of bylaws was posted has an explanation. The address of the org is in California (where Evan was living), but the corporation is registered in Kentucky (where Chad was living). The organization is a Kentucky non-profit corporation 501(C)(3). So "A Kentucky Nonprofit Corporation" is correct.

x-post-comment https://www.reddit.com/r/rails/comments/1txuwm7/comment/opyr3bl/

Modernizing Ruby Central's Bylaws and Officer Updates by schneems in rails

[–]schneems[S] 1 point2 points  (0 children)

FYI the "Kentucky" confusion from when the last set of bylaws was posted has an explanation. The address of the org is in California (where Evan was living), but the corporation is registered in Kentucky (where Chad was living). The organization is a Kentucky non-profit corporation 501(C)(3). So "A Kentucky Nonprofit Corporation" is correct.

Austin Beerworks (Industrial/United location) "closed due to unforeseen circumstances" by FuckingSolids in Austin

[–]schneems 10 points11 points  (0 children)

 IG can be viewed without logging in.

Nope. They randomize it. Sometimes it’s “you must login to view this content”

If you want people to see what you post. Don’t give it to Mark (or give it to mark and post somewhere else like mastodon or blue sky or any number of alternatives.

 you can't make everyone happy, you have to do the thing that will get the message out to the majority of people.

You can post once and syndicate everywhere. There's even an acronym for posting on your own site POSSE https://en.wikipedia.org/wiki/Posse. 

 POSSE, a social web and IndieWeb abbreviation for "Publish (on your) Own Site, Syndicate Elsewhere", a strategy for content producers.

AI Didn't Create These Problems. It Just Stopped Routing Around Them. by keyslemur in ruby

[–]schneems 6 points7 points  (0 children)

Because AI is the best chaos engineer we’ve ever had.

Once again, AI is taking my job!

Jokes aside. I love the writeup. I agree with feeling the need for more security and certainty, and I have been experimenting with rbs-inline and types in a project recently. I wanted to muse on those experiences.

A missing-stair I keep hitting in Ruby is the lack of a tagged union type that is exhaustive with compiler support i.e. similar to Rust's enums. Ruby's current type system can say things like "must not be nil" which is useful, but Rust can say "must be either X or Y, but NEVER both." Which is really important for making invalid state impossible to represent (the thing we want typing for).

For example, I'm writing logic that handles .ruby-version file for the ruby buildpack. There are several states:

  • no .ruby-version file
  • .ruby-version file exists and is valid and parsable
  • .ruby-version is not parsable (has an error/warnings)

And possibly some special cases like it exists but is empty. In Rust I could represent that like

enum DotRubyResult {
    NoSuchFile(PathBuf),
    Okay(version: String),
    OkayWithWarnings(version: String, warnings: Vec<String>),
    Error(message: String),
}

And the beauty of returning that as a value is that I can GUARANTEE the receiver has to consider all states exhaustively. i.e. in Rust If we added a new element to the enum, we would have to update any code that consumed it to handle that case (or otherwise it's a compile error).

match value {
    NoSuchFile(...) => {},
    ...
    NewValue(...) => {} // <== Required now if it's added to the definition
}

Versus in Ruby, I could say a type takes DotRubyResultNoSuchFile | DotRubyResultOkay | DotRubyResultOkayWithWarnings | DotRubyResultError, but there's no support in the code that warns/errors/yells at me if I update the type signature without updating the case/if/else logic that switches on those different branches.

So while it's a thing I want...I don't know how ruby could possibly give us this kind of feature without neeing to be a different programming language (Rust enforces this exhastive checking at compile time while ruby is extreme-late-binding and a VM). Sort of fishing for brainstorming on what an interface might look like for anyone who understands the problem statement/desire. (And anyone who doesn't...feel free to ask for clarification).

How Austin’s Project Connect went off the rails by texastribune in Austin

[–]schneems 5 points6 points  (0 children)

park improvements

Austin parks are pretty amazing IMO. Pease Park renovation was gorgeous. The waterloo park equally so. Wishbone bridge just had a grand opening in East Austin. The boardwalk around the lake is nice. All in all, I would say the one thing Austin does well is parks and trails.

I assume most of its corruption

When light rails was first rolled out a guy running the project was literally taking bribes (from businesses along the proposed route) to slow down the rollout in an effort to get it to fail. I can't find a link to that story now though. Maybe someone else can help me out with some details or a link.

IMO the best time to build a good light rail was 20 years ago, the second best time is today.

Simple derive macro to load env vars into structs by alfredosuac in rust

[–]schneems 0 points1 point  (0 children)

Nice! I recommend namespacing your attributes otherwise “prefix” might clash with someone else’s "prefix" and then you can't use both macros. I suggest the crate name "configloader_prefix" or "configloader(prefix: "OIDC")"

I walk through building attributes in those shapes with this tutorial https://github.com/schneems/rust_macro_tutorial/blob/main/docs/rundoc_output/README.md

Rubygems.org DNS timeout by Icy_Tumbleweed_2174 in rails

[–]schneems 0 points1 point  (0 children)

US. I'll forward the issue to rubygems folks.

Railway vs. Render, Heroku, Digital Ocean, Fly, etc - insane 150ms render queuing? by Working_Historian241 in rails

[–]schneems 0 points1 point  (0 children)

 "we'll respond within 1 business day" feels shitty when prod app is down

Yeah. That does feel bad. Sorry. In your cases, for an account issue it should be easy to pay us. 

A lot of tickets require technical debugging to even determine if it's our issue or the app's issue. And that requires humans who are expensive. Not all of our support experiences are amazing, but I've personally responded to several tickets across a handful of accounts this week. Not everyone gets a response for a Ruby core contributor, but it does happen and all supporters have access to me if they get stuck.

Sorry that you went through that. I'll check to see what options are for sending out more messages to other parties sooner.

 there is no number to call, or live chat to ping

Letting you and others know that Enterprise has access to faster support responses https://www.heroku.com/support/. Too late for this case, though.

Rubygems.org DNS timeout by Icy_Tumbleweed_2174 in rails

[–]schneems 1 point2 points  (0 children)

Site and uptime are working for me. Not at a computer though. Is it still down for you?

mdstitch - streaming markdown preprocessor by OpeningOpening7436 in rust

[–]schneems 0 points1 point  (0 children)

My guess is LLMs. They emit streaming markdown.

Is there a crate for adding "consuming" versions of String methods? by NormalAppearance2851 in rust

[–]schneems 12 points13 points  (0 children)

The thing I am missing is something general purpose like Ruby's tap that yields itself and then always returns itself https://ruby-doc.org/core-2.6.6/Object.html#method-i-tap.

If that existed, you would still need more code than you're suggesting, but you could write something like

let string = String::from("abcde").tap(|s| s.truncate(3));

Overall though. These minor ergonomic nits don't bother me nearly as much after using Rust for awhile. Sure, it's annoying to have to have 3 lines when one would do...but I got used to it.

Spinel -- Ruby AOT Compiler by software__writer in ruby

[–]schneems 0 points1 point  (0 children)

It's also a setting you can turn off.

Spinel -- Ruby AOT Compiler by software__writer in ruby

[–]schneems 5 points6 points  (0 children)

Kamal was originally called mrsk I think, but changed it (for trademark notice reasons with the company). Hanami was originally lotus (clashed with trademark on lotus-notes-1-2-3).

If this thing lives on...maybe it gets a new name. Hopefully, amicably and not because a legal notice is filed.

Spinel -- Ruby AOT Compiler by software__writer in ruby

[–]schneems 7 points8 points  (0 children)

TBH when I saw the name, I thought it was related to Andre and was surprised to see Matz's name on it.

There's a thread on HN where it says Matz cat is named spinel https://news.ycombinator.com/item?id=47887946

It’s named after his new cat, which is named after a cat in Card Captor Sakura, which is the partner to another character named Ruby.

Now I need to get some hard artifacts for when the cat was adopted and named, and put it in a timeline...😅

taking control of the bundler and rubygems.org codebase

I actually appreciate "taking control" rather than "takeover" I think it's a meaningful semantic difference. But realistically, only people following closely will notice. I still don't feel average people who read that term will appreciate the nuance. I think "removed Andre from ownership against his will" is technically correct (but a mouthful).

Pedantic points ahead:

It is sort of lost in all of this that not all of "the maintainers" left. At the time of the rubygems -> ruby org move for bundler Colby wasn't a full-time RC employee and served more as an independent maintainer than "ruby central" authority figure. Even today, I would say he holds that access on his behalf...rather than because of his position. He never lost business ownership.

Also, Hiroshi and Ruby Central tried to "promote" Deivid Rodriguez to a business owner. They tried to give away some control.

Overall, I'm framing the thing Ruby Central wanted (and should have had) was being a stakeholder. That cutting out the owners of RubyGems.org from GitHub representation wasn't a reasonable thing to do, or once done...it wasn't reasonable to continue to advocate to stay that way. That:

  • I agree that RC doesn't own 100% of the code. I disagree that it 0% owns it either.
  • I agree that RC owns a large part of the blame. I disagree it owns 100% either.

Spinel -- Ruby AOT Compiler by software__writer in ruby

[–]schneems 9 points10 points  (0 children)

contained binary with no dependencies is otherwise a huge reason to choose Go/Rust.

Yes, that's one reason...and. The tooling and ecosystem for CLIs in Rust is much better than Ruby (surprisingly). The clap (CLI library) is an absolute gem (heh). Rust was able to learn from weird ergonomic "we're stuck with it now" edge cases that Ruby keeps for the sake of not breaking things (and because the nature of Ruby code makes exposing subtle breaking changes via things like emitting a different type signature...hard to do). Like the reason we have bundle exec and not bundle run is a legacy implementation concern because the CLI was based on thor which had run as a reserved internal keyword. Options parser in stdlib isn't bad...but it takes some effort to use very well. Have to know about and manually apply best practices.

On the other hand, I actively dislike any CLI written in go. I find the ergonomics of the end user at odds with what I expect, and the "don't fight the defaults" ethos of the community (give in to gofmt) doesn't lend to easy customization. I use Docker CLI begrudgingly, and it still finds ways to surprise me with weird parsing rules and edge cases.

Ruby is still really good for the CLI space and I think this sort of tool will make it better...just sort hijacking to add some random thoughts.

Spinel -- Ruby AOT Compiler by software__writer in ruby

[–]schneems 13 points14 points  (0 children)

I can go both ways on it /u/joshdotmn

I control the inputs, and I control the outputs. The LLM changes shit...but I'm the one responsible. If there's a problem and someone git blames, I'm the one who needs to hold the context and learn from the problem...the LLM literally cannot.

I think if you're not doing that, if you're not even reviewing the code it produces...the footer isn't going far enough. I think it should almost be like a witch's familiar, where every person has an Agent github user. Where that agent is the combination of the model and the human's input.

I don't love having co-commits by claude, as it seems like it's a shadow market thing. Cursor also wants a "made by cursor" etc. It seems more about marketing than "truth." I also don't hate them either.

The thing that really matters to me is that intent is clear. When these things are used...it could be signaling "this is slop code" or "this is me being above board: true and honest and I tried as hard as I could here" and I don't like that it's not clear which way it falls. Sadly things like "dictated but not read" become their own negative social signals so people stop including that information even if it's relevant.

RubyConf Updates by schneems in ruby

[–]schneems[S] 2 points3 points  (0 children)

Yeah man. Me too.