@maegul@lemmy.ml avatar

maegul

@maegul@lemmy.ml

A little bit of neuroscience and a little bit of computing

This profile is from a federated server and may be incomplete. For a complete list of posts, browse on the original instance.

maegul OP Mod ,
@maegul@lemmy.ml avatar

Q6: Fixing

Of the following fixes (highlighted in yellow), which fix best satisfies these three criteria:

  • The fixed function passes the Rust compiler,
  • The fixed function preserves the intention of the original code, and
  • The fixed function does not introduce unnecessary inefficiencies
/// Gets the string out of an option if it exists,
/// returning a default otherwise
fn get_or_default(arg: &Option<String>) -> String {
    if arg.is_none() {
        return String::new();
    }
    let s = arg.unwrap();
    s.clone()
}

1:

fn get_or_default(arg: &Option<&str>) -> String {
    if arg.is_none() {
        return String::new();
    }
    let s = arg.unwrap();
    s.to_string()
}

2:

fn get_or_default(arg: &mut Option<String>) -> String {
    if arg.is_none() {
        return String::new();
    }
    let s = arg.as_mut().unwrap();
    s.clone()
}

3:

fn get_or_default(arg: Option<String>) -> String {
    if arg.is_none() {
        return String::new();
    }
    let s = arg.unwrap();
    s.clone()
}

4:

fn get_or_default(arg: &Option<String>) -> String {
    match arg {
        None => String::new(),
        Some(s) => s.clone()
    }
}
Answer

4

  • Really about best-practices here
  • 4 is a better, more idiomatic version of 3, especially because it requires ownership of arg which is restrictive and may not even be available
    • But I think 3 does fix the problem
  • 1 doesn't fix the problem
  • 2 ... I'm not sure about ... but I don't think having a mutable s helps with the problem either (?)

Context: The combination of is_none and unwrap here is a Rust anti-pattern, since a match combines the two functionalities and automatically deals with pushing the reference &Option into the interior to produce &String. Therefore the match solution is the most idiomatic, and passes the compiler without changing the intended type signature of the function.

The solution of changing &Option to Option is not desirable because it requires the caller to provide ownership of their option, which is a far more restrictive API.

maegul OP Mod ,
@maegul@lemmy.ml avatar

Q5

  • Which programs would pass the compiler (presuming this function, from above, passes too) and possibly cause undefined behaviour?
/// Gets the string out of an option if it exists,
/// returning a default otherwise
fn get_or_default(arg: &Option<String>) -> String {
    if arg.is_none() {
        return String::new();
    }
    let s = arg.unwrap();
    s.clone()
}

Options:

  • None of these programs
// 1
let opt = Some(String::from("Rust"));
let s = get_or_default(&opt);
println!("{}", s);

// 2
let opt = Some(String::from("Rust"));
get_or_default(&opt);

// 3
let opt = Some(String::from("Rust"));
get_or_default(&opt);
println!("{:?}", opt);
Answer
  • All programs (1, 2 and 3).

  • Once arg.unwrap() occurs, s takes ownership of the underlying String.

  • Once s "dies", the String is deallocated.

  • But, opt, from before the call to get_or_default also owns the same String, and so once it "dies" and its memory is deallocated, a double-free will occur.

  • This actually threw me at first

  • My answer was program 3, as I figured that opt had to be used in some way for "undefined behaviour" to occur, as only then, did I figure, would the inappropriate memory be used resulting in an incorrect result

  • This is kinda wrong, though, because deallocation occurs once opt's lifetime ends, which will cause a double-free. println prolongs the lifetime while in program 2 the lifetime of opt clearly ends, I suppose, causing the double-free.

    • I personally think this is completely ambiguous, and unless I'm missing something, these undefined behaviour questions easily suffer from these problems.
maegul OP Mod ,
@maegul@lemmy.ml avatar

Q4: Method and Ownership

  • What best describes the compiler error
/// Gets the string out of an option if it exists,
/// returning a default otherwise
fn get_or_default(arg: &Option<String>) -> String {
    if arg.is_none() {
        return String::new();
    }
    let s = arg.unwrap();
    s.clone()
}
  1. arg does not live long enough
  2. cannot move out of arg in arg.unwrap()
  3. cannot call arg.is_none() without dereferencing arg
  4. cannot return s.clone() which does not live long enough
Answer

2

  • cannot move arg in arg.unwrap()
    • arg is a reference.
    • but unwrap() has signature unwrap(self) -> T: it takes ownership!
    • Therefore unwrap cannot take ownership (arg doesn't have ownership to move/give).

Context: The function Option::unwrap expects self, meaning it expects ownership of arg. However arg is an immutable reference to an option, so it cannot provide ownership of the option. Therefore the compiler complains that we cannot move out of arg via unwrap.

maegul OP Mod ,
@maegul@lemmy.ml avatar

Q3: How fix

Of the following fixes (highlighted in yellow), which fix best satisfies these three criteria:

  • The fixed function passes the Rust compiler,
  • The fixed function preserves the intention of the original code, and
  • The fixed function does not introduce unnecessary inefficiencies

1:

fn make_separator(user_str: &str) -> &str {
    if user_str == "" {
        let default = "=".repeat(10);
        &default
    } else {
        &user_str
    }
}

2:

fn make_separator(user_str: String) -> String {
    if user_str == "" {
        let default = "=".repeat(10);
        default
    } else {
        user_str
    }
}

3:

fn make_separator(user_str: &str) -> String {
    if user_str == "" {
        let default = "=".repeat(10);
        default
    } else {
        user_str.to_string()        
    }
}
Answer

3

  • Return owned default
  • Convert user_str to a String to keep a consistent return type
  • Change return type to String
  • 2 is too restrictive in requiring use_str to be a String
  • 1 doesn't solve the problem
fn make_separator(user_str: &str) -> String {
    if user_str == "" {
        let default = "=".repeat(10);
        default
    } else {
        user_str.to_string()        
    }
}

Context: There is no valid way to return a pointer to a stack-allocated variable. The simple solution is therefore to change the return type to String and copy the input user_str into an owned string. However, requiring user_str to be a String would reduce the flexibility of the API, e.g. a caller could not call make_separator on a substring of a bigger string. It would also require callers to heap-allocate strings, e.g. they could not use a string literal like make_separator("Rust").

The most idiomatic solution to this problem uses a construct you haven't seen yet: Cow - Clone-on-write. The clone-on-write smart pointer would enable this function to return either an owned string or a string reference without a type error.

  • Interesting!!
maegul OP Mod ,
@maegul@lemmy.ml avatar

Q2

/// Makes a string to separate lines of text, 
/// returning a default if the provided string is blank
fn make_separator(user_str: &str) -> &str {
    if user_str == "" {
        let default = "=".repeat(10);
        &default
    } else {
        user_str
    }
}

Normally if you try to compile this function, the compiler returns the following error:

error[E0515]: cannot return reference to local variable `default`

 --> test.rs:6:9

  |

6 |         &default

  |         ^^^^^^^^ returns a reference to data owned by the current function

Assume that the compiler did NOT reject this function. Which (if any) of the following programs would (1) pass the compiler, and (2) possibly cause undefined behavior if executed? Check each program that satisfies both criteria, OR check "None of these programs" if none are satisfying.

  • None of these programs
// 1
let s = make_separator("");

// 2
let s = make_separator("");
println!("{s}");

// 3
println!("{}", make_separator("Hello world!"));
Answer
  • Slightly dodgy question, as the undefined behaviour first requires an empty string to be passed in to trigger the return of &default, which results in a dangling pointer being returned. Then, it's any program that uses the returned reference (so printing will do the trick)

Context: First, the caller must pass an empty string to trigger the problematic if-condition. This returns a dangling pointer. Second, the caller must use the result of make_separator, e.g. via println.

maegul OP Mod ,
@maegul@lemmy.ml avatar

Q1

/// Makes a string to separate lines of text, 
/// returning a default if the provided string is blank
fn make_separator(user_str: &str) -> &str {
    if user_str == "" {
        let default = "=".repeat(10);
        &default
    } else {
        user_str
    }
}

When compiling, what's the best description of the compiler error?

  1. user_str does not live long enough
  2. function make_separator cannot return two different references
  3. function make_separator cannot return a reference of type &str
  4. cannot return reference to local variable default
Answer

Cannot return reference to a local variable

  • &default isn't allowed as default is local to the function.
    • What's the fix? Copy? Just return "=".repeat(10) directly?
    • How about just return an owned String (requires converting user_str to a String with to_string())

Context: Because default lives on the stack within make_separator, it will be deallocated once a call to make_separator ends. This leaves &default pointing to deallocated memory. Rust therefore complains that you cannot return a reference to a local variable.

OpenAI's Mira Murati: "some creative jobs maybe will go away, but maybe they shouldn't have been there in the first place" ( mastodon.social )

OpenAI's Mira Murati: "some creative jobs maybe will go away, but maybe they shouldn't have been there in the first place" And you stole everything from creative people who provided free texts, images, forum answers, etc. To date, your company has refused to acknowledge any credit. Rich people truly live in their bubble and have...

maegul , (edited )
@maegul@lemmy.ml avatar

So, to be fair, the line after the quote refers specifically to those that produce "low quality" output.

So a charitable but not unreasonable read might be that she's saying any creative role that's easily replaced with AI isn't really a loss. In some cases, when we're talking about artists just trying to make a living, this is really some vile shit. But in the case of email monkeys in corporations and shitty designers and marketeers, maybe she's got a point along the same lines as "bullshit jobs" logic.

On the other hand, the tech industry’s overriding presumption that disruption by tech is a natural good and that they're correctly placed as the actuators of that "good" really needs a lot more mainstream push back. It's why she felt comfortable declaring some people in industries she likely knows nothing about "shouldn't exist" and why there weren't snickers, laughter and immediate rebukes, especially given the lack (from the snippet I saw) of any concern for what the fuck happens when some shitty tech takes away people's livelihoods.

If big tech's track record were laid out, in terms of efficiency, cost, quality etc, in relation to the totality of the economy, not just the profits of its CEOs ... I'm just not sure any of the hype cloud around it would look reasonable anymore. With that out of the way, then something so arrogant as this can be more easily ridiculed for the fart-sniffing hype that it so easily can be.

maegul ,
@maegul@lemmy.ml avatar

That all makes sense. Thanks! I was tempted to watch the whole interview but realised I didn't actually care that much. I figured something like what you describe was where she was going just from the clip I watched, and of course it was obvious that rage baiting was going on here.

And exactly what you said ... many listening to the full interview will probably think she, and therefore AI generally, is actually "right" and will be valuable ... except for all the shitty ways it's gonna be used by corporations and all of the shitty and presumptive things OpenAI and others will do to win their new platform war.

maegul ,
@maegul@lemmy.ml avatar

I’m with you on that.

maegul ,
@maegul@lemmy.ml avatar

Also, if you REALLY want a chilling thing she says, go find the part where she says they may eventually allow people to customize the moral and political views of their chatbots on top of a standard framework, and she specifically mentions allowing churches to do that.

eeeesh.

maegul OP Mod ,
@maegul@lemmy.ml avatar

For me, the biggest things to take away from these chapters were:

  • Enums and pattern matching
  • Borrow checker concerns emerging from these new data structures
  • Derivable traits

Enums and pattern matching for the win

  • That the pattern matching facility is powerful, and that enums can have associated data, structured independently for each variant ... really provides a (relatively straight forward and versatile "happy path" in rust IMO.
    • I tried to hack together a file differ in rust a couple of months ago (see my post on my solution here, mostly in the comments) and found myself just leaning into enums + pattern matching and rather enjoying the process.
  • So much so that major (and celebrated?) features of the language such as Option and Result types are really just applications of enums (along with rust's good type system)

The example in the book of the IP Address enum type is quite a nice demonstration I think:

enum IpAddr {
    V4(u8, u8, u8, u8),
    V6(String),
}

let home = IpAddr::V4(127, 0, 0, 1);
let loopback = IpAddr::V6(String::from("::1"));

We're still learning "The Borrow Checker"

  • Ownership and borrowing concerns are still alive here in their application to structs and enums and what best practices arise out of it all.

Match statements

  • In match statements, the concerns are relatively straight forward (I think). Match arms take ownership of the variables they "use/touch" (I'm still unclear on the details there!) ...
  • so if you want a variable to live beyond the match statement, match on a reference.

EG:

let opt: Option<String> = Some(String::from("Hello world"));

match &opt {
    Some(s) => println!("Some: {}", s),
    None => println!("None!")
};

println!("{:?}", opt);
  • There's a slightly tricky thing that happens implicitly here:
    • Though the match is on &opt, the s in the pattern Some(s) is also a reference because rust implicitly "pushes down" the reference from the outer enum to the inner field or associated data.
    • Seems tricky, but also ergonomically sensible.

Borrowing self in methods

Probably the trickiest and most relevant part of the two chapters

  • the self in methods, like any other variable, can be one of three types in terms of ownership:
    • Owned by the method, like a plain variable
    • A reference (&self)
    • A mutable reference (&mut self)
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }

    fn set_width(&mut self, width: u32) {
        self.width = width;
    }

    fn max(self, other: Rectangle) -> Rectangle {
        Rectangle { 
            width: self.width.max(other.width),
            height: self.height.max(other.height),
        }
    }
}
  • What's tricky about this is that a method's signature for self has consequences that both reach back to the initial type of the root object (ie, is it mutable or not) and forward to what can be done with the root type afterward.

    • EG, a method that takes &mut self can't be used on a variable that isn't initially mutable.
    • EG, a method that takes ownership of self effectively kills the root object, making it unusable after the method is called!!
  • I'm sure there are a bunch of patterns that emerge out of this (anyone with some wisdom here?) ...

  • But the simple answer seems to borrow self, and if necessary, mutably borrow.

  • Taking ownership of self is an interesting way to enforce a certain kind of usage and behaviour though.

  • As the object dies, the natural return of an owning method would be a new object, probably of the same type.

  • Which leads into a sort of functional "pipe-line" or "method chaining" style of usage, not unlike the "Faux-O" idea in Cory Bernhardt's talk Boundaries. It's likely not the most performant, but arguably has some desirable qualities.

Derivable Traits

  • We haven't gotten to traits yet, but they come up here.
  • Turns out rust has kinda has a system of inheritance for structs where a trait can be easily implemented for a struct "automagically": #[derive(Debug)]

EG:

#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}
  • This particular trait, Debug, allows for the printing of a struct's full makeup with println!.

  • All of the "Derivable" traits (from the std lib) are listed in Appendix C of The Book

  • There aren't that many, but they're useful:

    • Copy and Clone enable a struct to be copied without having to worry about ownership (though you have to be careful about the types of the fields, as its their copy methods that are ultimately relied on)
    • Four traits that implement methods for comparison and equality operators
    • Hash for hashing an object
    • Default for defining default values
  • Of course, when we cover traits we'll learn how to implement them ourselves for our custom types, but these seem to be fundamental features of the language, and easy enough to use right away.

maegul OP Mod ,
@maegul@lemmy.ml avatar

Also, on the topic of "having references as fields in structs" ... see this conversation we had here about that.

That conversation started from a post on the users . rust-lang forum, where the ultimate pithy and harsh conclusion about doing this was:

You’re not allowed to use references in structs until you think Rust is easy. They’re the evil-hardmode of Rust that will ruin your day.

😉

Use Box or Arc to store things in structs “by reference”. Temporary borrows don’t do what you think they do.

maegul ,
@maegul@lemmy.ml avatar

Am I imagining it or has there been a noticeable uptick on the amount media/Hollywood attention on the space race? I suppose it's always been a point of focus, but with things like this, "For all Man Kind", "First Man" (film), "Hidden Figures" ... I'm wondering if there's a sort of "Golden Age" preoccupation that's settled in with the space race?

maegul ,
@maegul@lemmy.ml avatar

Yea, academics need to just shut the publication system down. The more they keep pandering to it the more they look like fools.

maegul ,
@maegul@lemmy.ml avatar

Yep. But that is all a part of the problem. If academics can't organise themselves enough to have some influence over something which is basically owned and run them already (they write the papers and then review the papers and then are the ones reading and citing the papers and caring the most about the quality and popularity of the papers) ... then they can't be trusted to ensure the quality of their practice and institutions going forward, especially under the ever increasing encroachment of capitalistic forces.

Modern day academics are damn well lucky that they inherited a system and culture that developed some old aristocratic ideals into a set of conventions and practices!

maegul ,
@maegul@lemmy.ml avatar

I'm sympathetic, but to a limit.

There are a lot of academics out there with a good amount of clout and who are relatively safe. I don't think I've heard of anything remotely worthy on these topics from any researcher with clout, publicly at least. Even privately (I used to be in academia), my feeling was most don't even know how to think and talk about it, in large part because I don't think they do think and talk about it all.

And that's because most academics are frankly shit at thinking and engaging on collective and systematic issues. Many just do not want to, and instead want to embrace the whole "I live and work in an ideal white tower disconnected from society because what I do is bigger than society". Many get their dopamine kicks from the publication system and don't think about how that's not a good thing. Seriously, they don't deserve as much sympathy as you might think ... academia can be a surprisingly childish place. That the publication system came to be at all is proof of that frankly, where they were all duped by someone feeding them ego-dopamine hits. It's honestly kinda sad.

maegul ,
@maegul@lemmy.ml avatar

The problems are wider than that. Besides, relying "individuals just doing the right thing and going a little further to do so" is, IMO, a trap. Fix the system instead. The little thing everyone can do is think about the system and realise it needs fixing.

maegul ,
@maegul@lemmy.ml avatar

pay attention, there’s a screen that pops up, there’s a date and a year. That’s the only chance you have. If you miss that screen in the beginning, you miss what year it is

Almost feels like the writer's realising in real time that it was a mistake to not be more clear about this.

Which I say as someone totally ready for a film that is a shameless "cover" or "redux" of alien/aliens without caring too much about how much it makes sense or moves the franchise "forward".

Doesn't mean that we don't want some clarity around what the film is actually trying to do, especially in the era of reboots and pre-/sequels.

maegul ,
@maegul@lemmy.ml avatar

Wait, what do you like about alien then? This feels like quite the internal struggle.

maegul , (edited )
@maegul@lemmy.ml avatar

Like all the other replies ...

  • On one hand ... fuck you, you awful person, why would you put me through that
  • On the other hand ... you are a treasure and a master craftsperson and ought to be celebrated for the mirror you hold up to society

... sometimes ... fucking "modern hustle" youtube ... just come on!

EDIT: just to be clear, this was wonderful and thank you, I’m being mostly facetious here.

maegul , (edited )
@maegul@lemmy.ml avatar

Abso-fucking-lutely!!

It's another example of how modern tech is has forgotten how to be "humane" (Look up Bret Victor and his philosophies on tech if you're keen on deep diving on this more) ... that is, actually good for humans and not merely the best way to make profit. And so the promise of tech to help and solve problems, given how many resources are being poured into it, is often looking like a failure.

maegul ,
@maegul@lemmy.ml avatar

Yep. I’ve reached the point of wanting all information on the internet in Wikipedia format.

"Moderation tools are nonexistent on here. It also eats up storage like crazy [...] The software is downright frustrating to work with" - Can any other instance admins relate to this?

After a year online the free speech-focused instance 'Burggit' is shutting down. Among other motivations, the admins point to grievances with the Lemmy software as one of the main reasons for shutting down the instance. In a first post asking about migrating to Sharkey, one of the admins states:...

maegul ,
@maegul@lemmy.ml avatar

The introduction of a plugin system seems interesting here, though it's still alpha and basically looking for feedback from would-be plugin developers

AFAICT, there's no established way for a plugin to surface affect the UI, which would be a somewhat unwieldy problem anyway due to the apps and frontends ecosystem. Probably the best path for any plugin that provides a UI would be to have a system for aggregating links to plugin UIs.

With something like that in place, plugins and other services that just use the DB/API, could really go a long way to filling these holes, if they haven't already.

So it seems that the work needed here is perhaps "distribution" work ... where there's a more "plug and play" Lemmy distribution with plugins etc bundled?

maegul ,
@maegul@lemmy.ml avatar

but we’re at a critical point right now. It’s no longer software that is just fun side projects and building stuff that looks cool, it has some real issues now that it has a real userbase. I’m definitely one to say “But it’s FOSS, and other people can pick up and submit a PR” - but it also says something when the head devs just completely ignore a massively huge issue with it.

This is a general issue I think, not just for lemmy but the whole fediverse (whatever one's opinions might be on particular priorities).

It's all non-profit and being run and built at a much smaller scale than many users would appreciate (I think). Sure there are plenty of people here, but not that many. Combined with no obvious revenue streams, such as ads or subscription fees, there really is only so much that can be done. Some time last year even the Mastodon team (by far the most successful fediverse platform) admitted that they didn't have the capacity to work on new things for a while ... they were just busy keeping things running. And they are (apparently) notorious at being slow to ship new features. Meanwhile platforms like firefish just straight up died last year.

So yea, it might be a critical point, for sure. But putting more on the core dev teams may not be the answer for the simple reason that it's just not viable in the long run.

If we enjoy the bigger community focus and open and non-profit organisations that makeup the fediverse, the "answer" at this critical point might be to find a way to give back somehow ... to organise, build communities, run fund-raising campaigns, think of ideas for more sustainable funding, find devs who can help etc etc. It's perhaps onerous and annoying, even to read perhaps ... but this is likely the tradeoff we have to make for a place like this.

maegul ,
@maegul@lemmy.ml avatar

Should there be something like a lemmy admin's community for talking about the ins and outs of running a lemmy instance? Something like that over time can be some sort of band-aid for missing documentation (it's searchable etc).

I'm aware that there's the matrix room and a lemmy support community ... but maybe just opening things up to any chat about hosting lemmy in one place could actually help (in part because you can easily search specifically within one community).

maegul ,
@maegul@lemmy.ml avatar

I hear you for sure on this.

I personally appreciate the push the core devs make for a "less demanding" relationship between users and open source devs. I think they have a point and it's good for long term sustainability and I'll probably find myself defending it.

But I like you're framing, and in retrospect it seems (as is usually the case) that some people organising was what was missing just to get everyone helping each out as much and efficiently as possible. While any member of the community can (and should) do that, at some point it makes sense for the core devs to take on a task like that, I agree.

maegul ,
@maegul@lemmy.ml avatar

Absolutely!

The bit I'm conceptually stuck on (not know much at all about how a good plugin architecture would work) is how a plugin can surface or affect the UI, especially in an ecosystem with multiple UIs/Apps/Frontends, and, a federated ecosystem at that.

Given the apps, I figure it's not possible without a convention of plugins providing APIs which apps can then implement against when available, which adds a good amount of complexity but should be viable for popular/useful plugins. Though, tangentially, this does affirm for me that the whole native mobile app expectation is a bit of a trap for a social system like the fedi (as webUIs are naturally more universal and maleable).

So, for immediate results, I can see only two options:

  1. a plugin operates on the backend directly manipulating or creating content not unlike a bot
  2. a plugin provides its own webUI which is made available through a simple and dedicated location in the UI

Is there something I'm missing about how a plugin system could work?

maegul ,
@maegul@lemmy.ml avatar

Youre right about lemmy-ui, unfortunately it doesnt have enough contributors. I dont know why that is, you’d think a project written in a popular language like Typescript would easily find contributors.

Random thoughts:

  • Is it obvious enough that one can contribute to the UI separately from the backend and that it's a Typescript SPA style UI?
    • If not, maybe a bit of a "dev recruitment campaign" could help ... let people people know and what sorts of issues could really do with new contributors lending a hand? Maybe even a bit of a "Inferno isn't that different from all of the other SPA frameworks/libraries spiel?"
  • Is the use of Inferno as oppose to one of the big 3 React/Vue/Svelte a repellent? (perhaps a downside to the "diversity" of frontend frameworks?)
  • Are would-be UI contributors more inclined to make their own front-end or app than contribute to the default webUI?

More generally:

  • Would a server side rendered webUI be welcome?
    • Then the contributions would mainly be on templates and their "simpler" logic, which might be more attractive or easier to get started on?
    • Plus, it might be more efficient? The current UI feels to me like it would suit server side rendering well.
    • Is this where the new leptos UI is heading ... more server side rendering (I don't know much about leptos)
  • Do you have a sense of usage numbers for the different apps and frontends? Obviously you only run lemmy.ml, but do you have a sense of how much the front-end gets hit versus the API directly?
    • I ask, because If the default WebUI is really the main interface, then it makes sense to try to organise some more contributors (It's certainly my main, nearly exclusive interface, as much as I've like some of the alt front ends or apps)
maegul ,
@maegul@lemmy.ml avatar

The internet cannot fit so much awesomeness ... JFC that was awesome!

maegul ,
@maegul@lemmy.ml avatar

It's interesting to see these kinds of ideas. Can't help but feel it's reactionary and superficially "anti-government" without looking at other deeper issues.

What is "law" without judicial enforcement? If you don't have constitutional law, then a big pile of power balancing is thrown out, so you have to make sure you want that. That the Court is by far the least democratic institution is pretty obvious (but to be fair, in a two-party system, I'm not sure how much "democracy" there really is to start off with). But it's also the least worrisome if you care about individual's rights/freedoms, which is part of the reason why it's special status makes sense: it relies entirely on cooperation from everyone else.

So, why abolish its power to enforce the constitution? Because it's unreliably politicised? Then I think that might be the underlying issue.

maegul ,
@maegul@lemmy.ml avatar

It’s the least worrisome because it can be abolished (selectively)

I'd say it's because they don't command the police or military and are completely subject, without input, to the democratic levers of government including, not least, amending the constitution itself.

They sit completely under the constitution, and it itself is a democratic entity. If the amendment process doesn't feel democratic enough, well then we get the elephant in the room about how much democracy do you want and whether that's maybe your main problem.

If cooperation is not at least partially optional, then it’s not the weakest branch

What other branch is partially optional?

In the case of a court, they're role is passive. They only act when prompted by a party who brings a case. Legislators and the Executive do what they want when they want. So surely they're by the most optional. Honestly have no idea what you're trying to say here ... the point of governmental power and law is arguably not to be optional.

maegul ,
@maegul@lemmy.ml avatar

The only Constitutional restriction on them is impeachment and removal,

... and constitutional amendment ... a democratic process

But if your not willing to consider that an executive might at some time be right in saying “no”, then they are effectively all powerful.
That’s the “optional” part.

Then would the country have any option to being subject to the Executive's power to override the court? You sidestepped my most important question ... what kind of governmental power is ever "optional"? And I suspect that's because you haven't thought through what happens when you override one branch's power with another's.

Moreover, in highlighting how easy it is to ignore the court, you're strangely acknowledging my "least worrisome" point but then folding that into an argument that they should therefore be ignored by the executive ... because "they can" or "they might be right". Which only highlights the danger of this line of thought ... if one reads between the lines, it'd be fair to conclude that you favour the more powerful parts of government flexing their muscles. The danger being that there's no outline here of what happens next and whether there are then more or fewer "options" for the country. If the executive can just say "nah" ... what law is there? What constrains the government from its natural vice of abusing power, compared to a court that can only say somethings are not permitted?

Otherwise, if a politicised court is a concern (which I generally agree with and probably like you feel should be taken more seriously to the point that formally I actually endorse your arguments, just not substantively) ... I think there are various other things that can be done without throwing the baby out with the bath water. Unfortunately, I'd fear that the politicisation of the court, to the point that controlling it's makeup seems like half of the point in a presidential election, and the constitution (or its "hot topics") has gone too far for any side to be willing to "let go of the rope".

maegul ,
@maegul@lemmy.ml avatar

For a continued focus on film, the projector is a pretty iconic representation of the cinema and movies ... so perhaps an alternative image of a projector?

As a start, a quick search dug up these two creative commons pics of projectors: first and second. As easily identifiable thumb nails or icons, I can see images like those working quite well.

maegul ,
@maegul@lemmy.ml avatar

For a banner, maybe a bunch of Lemmings in a theater watching a movie? I might be able to create it.

I love the idea of including lemmings in banner images! I did the same with the "learning rust and lemmy" community: https://lemmy.ml/c/learningrustandlemmy (using AI obviously, chat-GPT 4 IIRC).

maegul ,
@maegul@lemmy.ml avatar

So far, I'm really liking the new icon ... in the UI (I use the default webUI), it looks good and is clearly identifiable for sure! Nice work!

maegul ,
@maegul@lemmy.ml avatar

A few months ago, the "Nazi" presence on substack and substack's insistence on not moderating them (like at all it seemed) broke as a story, during which Casey Newton (and by extension his "platformer" blog) got engaged with substack about the issue and, after being disappointed with substack's responses and policies, famously left for Ghost (see their post on the move here.

Pretty sure that boosted its profile and prompted talks of federating, which they were initially hesitant to do ... but here we are now.

maegul ,
@maegul@lemmy.ml avatar

But I get the database thing. Its spiking every couple minutes and a lot every hour. It’s not a big deal if you have 2 threads at least but I can see how it doesnt work for everyone in every scenario.

Yea database management seems to where the growing pains are right now (with the core devs welcoming help from anyone with DB/PostreSQL expertise) ... and indeed it seems to be a perennial issue across the fediverse platforms.

If I may ask (sorry, probably annoying) ... what sort of resources would you recommend for a small personal lemmy instance? (let's say 1-5 users, ~200 community subs and a few local communities?)

maegul ,
@maegul@lemmy.ml avatar

Cheers! 2 threads and 2gb RAM I’d what I would have hoped for anyway. Thanks!

maegul ,
@maegul@lemmy.ml avatar

Ha, yea! If you know rust, then you don’t need to reach for Python (right?!). Plus the main motivation was to contribute to lemmy itself while also learning rust. That another platform is good for personal instances doesn’t change that, though piefed does seem cool and I can see myself wanting to get involved with it at some point.

maegul OP ,
@maegul@lemmy.ml avatar

Haven’t seen the trailer, but I think I can imagine this.

maegul OP ,
@maegul@lemmy.ml avatar

I don’t know the film. Do you recommend it?

maegul OP ,
@maegul@lemmy.ml avatar

I really liked it especially after starting it without knowing anything about it.

Basically how I went into it, it being over 10 years since it came out. Going into films this way is a fantastic thing IMO and more people should really seek out that type of experience. Expectations and spoilers from trailers work to get buts in seats but not enhance the cinematic experience at all.

The cinematography is amazing too.

Yep! It looked fantasic!

maegul OP ,
@maegul@lemmy.ml avatar

people either seem to love or hate it.

This should be normalised more IMO. Even sought after. Usually it's a sign that there's something special in it if you're one of the people that are going to like it ... and that should be treasured.

I said it in another reply ... subjective art is awesome!


Curious how you feel about The Fountain ... as that was the most similar film I could think of.

maegul OP ,
@maegul@lemmy.ml avatar

And it's poor performance and reception was probably the end of their film careers too.

Jupiter Ascending was such a weird problem ... like I feel like there's a good film in there but it was cursed in some "last attempt to stay in hollywood" urge or something.

maegul OP ,
@maegul@lemmy.ml avatar

Yea: https://en.wikipedia.org/wiki/The_Fountain

Speaking of which, I'm just cooking up an idea of running a sort of watch club here, where something like this could be an ideal candidate, at least for a sort of "out there, somewhat experimental sci-fi cinema watch club".

Do you have any thoughts on whether that'd be something you or others would be interested in?

maegul Mod ,
@maegul@lemmy.ml avatar

Nice work. Chs 5 and 6 are lighter weight after ch 4, as they're more basic language features stuff, so it makes sense you made quicker progress than you thought.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • random
  • test
  • worldmews
  • mews
  • All magazines