Reblogged by fromjason ("fromjason.xyz 🖤"):
ErosBlog@kinkyelephant.com ("ErosBlog Bacchus") wrote:
@galacticstone @cstross @quixoticgeek
"Using this term without the proper context lets greedy corporations off the hook."
I agree wholeheartedly! And for readers who don't know, the proper context is the writings of Cory Doctorow(@pluralistic), who coined "enshittification" and has A WHOLE LOT to say about greedy capitalists.
https://locusmag.com/2024/05/cory-doctorow-no-one-is-the-enshittifier-of-their-own-story/
The default way impl Trait
works in return position is changing in Rust 2024. These changes are meant to simplify impl Trait
to better match what people want most of the time. We're also adding a flexible syntax that gives you full control when you need it.
Starting in Rust 2024, we are changing the rules for when a generic parameter can be used in the hidden type of a return-position impl Trait
:
impl Trait
can use any generic parameter in scope, instead of only types (applicable only in Rust 2024);The new explicit syntax is called a "use bound": impl Trait + use<'x, T>
, for example, would indicate that the hidden type is allowed to use 'x
and T
(but not any other generic parameters in scope).
Read on for the details!
impl Trait
This blog post concerns return-position impl Trait
, such as the following example:
fn process_data(
data: &[Datum]
) -> impl Iterator<Item = ProcessedDatum> {
data
.iter()
.map(|datum| datum.process())
}
The use of -> impl Iterator
in return position here means that the function returns "some kind of iterator". The actual type will be determined by the compiler based on the function body. It is called the "hidden type" because callers do not get to know exactly what it is; they have to code against the Iterator
trait. However, at code generation time, the compiler will generate code based on the actual precise type, which ensures that callers are fully optimized.
Although callers don't know the exact type, they do need to know that it will continue to borrow the data
argument so that they can ensure that the data
reference remains valid while iteration occurs. Further, callers must be able to figure this out based solely on the type signature, without looking at the function body.
Rust's current rules are that a return-position impl Trait
value can only use a reference if the lifetime of that reference appears in the impl Trait
itself. In this example, impl Iterator<Item = ProcessedDatum>
does not reference any lifetimes, and therefore capturing data
is illegal. You can see this for yourself on the playground.
The error message ("hidden type captures lifetime") you get in this scenario is not the most intuitive, but it does come with a useful suggestion for how to fix it:
help: to declare that
`impl Iterator<Item = ProcessedDatum>`
captures `'_`, you can add an
explicit `'_` lifetime bound
|
5 | ) -> impl Iterator<Item = ProcessedDatum> + '_ {
| ++++
Following a slightly more explicit version of this advice, the function signature becomes:
fn process_data<'d>(
data: &'d [Datum]
) -> impl Iterator<Item = ProcessedDatum> + 'd {
data
.iter()
.map(|datum| datum.process())
}
In this version, the lifetime 'd
of the data is explicitly referenced in the impl Trait
type, and so it is allowed to be used. This is also a signal to the caller that the borrow for data
must last as long as the iterator is in use, which means that it (correctly) flags an error in an example like this (try it on the playground):
let mut data: Vec<Datum> = vec![Datum::default()];
let iter = process_data(&data);
data.push(Datum::default()); // <-- Error!
iter.next();
The rules for what generic parameters can be used in an impl Trait
were decided early on based on a limited set of examples. Over time we have noticed a number of problems with them.
Surveys of major codebases (both the compiler and crates on crates.io) found that the vast majority of return-position impl trait values need to use lifetimes, so the default behavior of not capturing is not helpful.
The current rule is that return-position impl trait always allows using type parameters and sometimes allows using lifetime parameters (if they appear in the bounds). As noted above, this default is wrong because most functions actually DO want their return type to be allowed to use lifetime parameters: that at least has a workaround (modulo some details we'll note below). But the default is also wrong because some functions want to explicitly state that they do NOT use type parameters in the return type, and there is no way to override that right now. The original intention was that type alias impl trait would solve this use case, but that would be a very non-ergonomic solution (and stabilizing type alias impl trait is taking longer than anticipated due to other complications).
Because the defaults are wrong, these errors are encountered by users fairly regularly, and yet they are also subtle and hard to explain (as evidenced by this post!). Adding the compiler hint to suggest + '_
helps, but it's not great that users have to follow a hint they don't fully understand.
Adding a + '_
argument to impl Trait
may be confusing, but it's not terribly difficult. Unfortunately, it's often the wrong annotation, leading to unnecessary compiler errors -- and the right fix is either complex or sometimes not even possible. Consider an example like this:
fn process<'c, T> {
context: &'c Context,
data: Vec<T>,
) -> impl Iterator<Item = ()> + 'c {
data
.into_iter()
.map(|datum| context.process(datum))
}
Here the process
function applies context.process
to each of the elements in data
(of type T
). Because the return value uses context
, it is declared as + 'c
. Our real goal here is to allow the return type to use 'c
; writing + 'c
achieves that goal because 'c
now appears in the bound listing. However, while writing + 'c
is a convenient way to make 'c
appear in the bounds, also means that the hidden type must outlive 'c
. This requirement is not needed and will in fact lead to a compilation error in this example (try it on the playground).
The reason that this error occurs is a bit subtle. The hidden type is an iterator type based on the result of data.into_iter()
, which will include the type T
. Because of the + 'c
bound, the hidden type must outlive 'c
, which in turn means that T
must outlive 'c
. But T
is a generic parameter, so the compiler requires a where-clause like where T: 'c
. This where-clause means "it is safe to create a reference with lifetime 'c
to the type T
". But in fact we don't create any such reference, so the where-clause should not be needed. It is only needed because we used the convenient-but-sometimes-incorrect workaround of adding + 'c
to the bounds of our impl Trait
.
Just as before, this error is obscure, touching on the more complex aspects of Rust's type system. Unlike before, there is no easy fix! This problem in fact occurred frequently in the compiler, leading to an obscure workaround called the Captures trait. Gross!
We surveyed crates on crates.io and found that the vast majority of cases involving return-position impl trait and generics had bounds that were too strong and which could lead to unnecessary errors (though often they were used in simple ways that didn't trigger an error).
The current design was also introducing inconsistencies with other parts of Rust.
Rust defines an async fn
as desugaring to a normal fn
that returns -> impl Future
. You might therefore expect that a function like process
:
async fn process(data: &Data) { .. }
...would be (roughly) desugared to:
fn process(
data: &Data
) -> impl Future<Output = ()> {
async move {
..
}
}
In practice, because of the problems with the rules around which lifetimes can be used, this is not the actual desugaring. The actual desugaring is to a special kind of impl Trait
that is allowed to use all lifetimes. But that form of impl Trait
was not exposed to end-users.
As we pursued the design for impl trait in traits (RFC 3425), we encountered a number of challenges related to the capturing of lifetimes. In order to get the symmetries that we wanted to work (e.g., that one can write -> impl Future
in a trait and impl with the expected effect), we had to change the rules to allow hidden types to use all generic parameters (type and lifetime) uniformly.
The above problems motivated us to take a new approach in Rust 2024. The approach is a combination of two things:
impl Trait
can use any generic parameter in scope, instead of only types (applicable only in Rust 2024);The new explicit syntax is called a "use bound": impl Trait + use<'x, T>
, for example, would indicate that the hidden type is allowed to use 'x
and T
(but not any other generic parameters in scope).
In Rust 2024, the default is that the hidden type for a return-position impl Trait
values use any generic parameter that is in scope, whether it is a type or a lifetime. This means that the initial example of this blog post will compile just fine in Rust 2024 (try it yourself by setting the Edition in the Playground to 2024):
fn process_data(
data: &[Datum]
) -> impl Iterator<Item = ProcessedDatum> {
data
.iter()
.map(|datum| datum.process())
}
Yay!
use<>
bound to specify precisely which generic types and lifetimes they useAs a side-effect of this change, if you move code to Rust 2024 by hand (without cargo fix
), you may start getting errors in the callers of functions with an impl Trait
return type. This is because those impl Trait
types are now assumed to potentially use input lifetimes and not only types. To control this, you can use the new use<>
bound syntax that explicitly declares what generic parameters can be used by the hidden type. Our experience porting the compiler suggests that it is very rare to need changes -- most code actually works better with the new default.
The exception to the above is when the function takes in a reference parameter that is only used to read values and doesn't get included in the return value. One such example is the following function indices()
: it takes in a slice of type &[T]
but the only thing it does is read the length, which is used to create an iterator. The slice itself is not needed in the return value:
fn indices<'s, T>(
slice: &'s [T],
) -> impl Iterator<Item = usize> {
0 .. slice.len()
}
In Rust 2021, this declaration implicitly says that slice
is not used in the return type. But in Rust 2024, the default is the opposite. That means that callers like this will stop compiling in Rust 2024, since they now assume that data
is borrowed until iteration completes:
fn main() {
let mut data = vec![1, 2, 3];
let i = indices(&data);
data.push(4); // <-- Error!
i.next(); // <-- assumed to access `&data`
}
This may actually be what you want! It means you can modify the definition of indices()
later so that it actually does include slice
in the result. Put another way, the new default continues the impl Trait
tradition of retaining flexibility for the function to change its implementation without breaking callers.
But what if it's not what you want? What if you want to guarantee that indices()
will not retain a reference to its argument slice
in its return value? You now do that by including a use<>
bound in the return type to say explicitly which generic parameters may be included in the return type.
In the case of indices()
, the return type actually uses none of the generics, so we would ideally write use<>
:
fn indices<'s, T>(
slice: &'s [T],
) -> impl Iterator<Item = usize> + use<> {
// -----
// Return type does not use `'s` or `T`
0 .. slice.len()
}
Implementation limitation. Unfortunately, if you actually try the above example on nightly today, you'll see that it doesn't compile (try it for yourself). That's because use<>
bounds have only partially been implemented: currently, they must always include at least the type parameters. This corresponds to the limitations of impl Trait
in earlier editions, which always must capture type parameters. In this case, that means we can write the following, which also avoids the compilation error, but is still more conservative than necessary (try it yourself):
fn indices<T>(
slice: &[T],
) -> impl Iterator<Item = usize> + use<T> {
0 .. slice.len()
}
This implementation limitation is only temporary and will hopefully be lifted soon! You can follow the current status at tracking issue #130031.
Alternative: 'static
bounds. For the special case of capturing no references at all, it is also possible to use a 'static
bound, like so (try it yourself):
fn indices<'s, T>(
slice: &'s [T],
) -> impl Iterator<Item = usize> + 'static {
// -------
// Return type does not capture references.
0 .. slice.len()
}
'static
bounds are convenient in this case, particularly given the current implementation limitations around use<>
bounds, but use<>
bound are more flexible overall, and so we expect them to be used more often. (As an example, the compiler has a variant of indices
that returns newtype'd indices I
instead of usize
values, and it therefore includes a use<I>
declaration.)
This example demonstrates the way that editions can help us to remove complexity from Rust. In Rust 2021, the default rules for when lifetime parameters can be used in impl Trait
had not aged well. They frequently didn't express what users needed and led to obscure workarounds being required. They led to other inconsistencies, such as between -> impl Future
and async fn
, or between the semantics of return-position impl Trait
in top-level functions and trait functions.
Thanks to editions, we are able to address that without breaking existing code. With the newer rules coming in Rust 2024,
+ use<>
notation used in this post.The Rust team is happy to announce a new version of Rust, 1.81.0. Rust is a programming language empowering everyone to build reliable and efficient software.
If you have a previous version of Rust installed via rustup
, you can get 1.81.0 with:
$ rustup update stable
If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes for 1.81.0.
If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (rustup default beta
) or the nightly channel (rustup default nightly
). Please report any bugs you might come across!
core::error::Error
1.81 stabilizes the Error
trait in core
, allowing usage of the trait in#![no_std]
libraries. This primarily enables the wider Rust ecosystem to standardize on the same Error trait, regardless of what environments the library targets.
Both the stable and unstable sort implementations in the standard library have been updated to new algorithms, improving their runtime performance and compilation time.
Additionally, both of the new sort algorithms try to detect incorrect implementations of Ord
that prevent them from being able to produce a meaningfully sorted result, and will now panic on such cases rather than returning effectively randomly arranged data. Users encountering these panics should audit their ordering implementations to ensure they satisfy the requirements documented in PartialOrd and Ord.
#[expect(lint)]
1.81 stabilizes a new lint level, expect
, which allows explicitly noting that a particular lint should occur, and warning if it doesn't. The intended use case for this is temporarily silencing a lint, whether due to lint implementation bugs or ongoing refactoring, while wanting to know when the lint is no longer required.
For example, if you're moving a code base to comply with a new restriction enforced via a Clippy lint likeundocumented_unsafe_blocks, you can use #[expect(clippy::undocumented_unsafe_blocks)]
as you transition, ensuring that once all unsafe blocks are documented you can opt into denying the lint to enforce it.
Clippy also has two lints to enforce the usage of this feature and help with migrating existing attributes:
#[expect]
or to migrate #[allow]
attributes to #[expect]
#[allow]
attributesChanging the lint level is often done for some particular reason. For example, if code runs in an environment without floating point support, you could use Clippy to lint on such usage with #![deny(clippy::float_arithmetic)]
. However, if a new developer to the project sees this lint fire, they need to look for (hopefully) a comment on the deny explaining why it was added. With Rust 1.81, they can be informed directly in the compiler message:
error: floating-point arithmetic detected
--> src/lib.rs:4:5
|
4 | a + b
| ^^^^^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_arithmetic
= note: no hardware float support
note: the lint level is defined here
--> src/lib.rs:1:9
|
1 | #![deny(clippy::float_arithmetic, reason = "no hardware float support")]
| ^^^^^^^^^^^^^^^^^^^^^^^^
These APIs are now stable in const contexts:
We have renamed std::panic::PanicInfo to std::panic::PanicHookInfo. The old name will continue to work as an alias, but will result in a deprecation warning starting in Rust 1.82.0.
core::panic::PanicInfo
will remain unchanged, however, as this is now a_different type_.
The reason is that these types have different roles:std::panic::PanicHookInfo
is the argument to the panic hook in std context (where panics can have an arbitrary payload), whilecore::panic::PanicInfo
is the argument to the#[panic_handler] in#![no_std]
context (where panics always carry a formatted message). Separating these types allows us to add more useful methods to these types, such asstd::panic::PanicHookInfo::payload_as_str() andcore::panic::PanicInfo::message().
extern "C"
functionsThis completes the transition started in 1.71, which added dedicated "C-unwind"
(amongst other -unwind
variants) ABIs for when unwinding across the ABI boundary is expected. As of 1.81, the non-unwind ABIs (e.g., "C"
) will now abort on uncaught unwinds, closing the longstanding soundness problem.
Programs relying on unwinding should transition to using -unwind
suffixed ABI variants.
Usage of the wasm32-wasi
target (which targets WASI 0.1) will now issue a compiler warning and request users switch to the wasm32-wasip1
target instead. Both targets are the same, wasm32-wasi
is only being renamed, and this change to the WASI targetis being done to enable removing wasm32-wasi
in January 2025.
std::process::Command
now correctly escapes arguments when invoking batch files on Windows in the presence of trailing whitespace or periods (which are ignored and stripped by Windows).
See more details in the previous announcement of this change.
Check out everything that changed in Rust, Cargo, and Clippy.
Many people came together to create Rust 1.81.0. We couldn't have done it without all of you. Thanks!
Reblogged by fromjason ("fromjason.xyz 🖤"):
hailey@hails.org ("Hailey") wrote:
The Internet Archive losing its appeal means one thing: pirate stuff. Pirate brazenly. There’s no point trying to do it the nice way - you’ll get shut down anyway. Copy, share, and archive to your heart’s content. It’s the only way we’re keeping digital media and our cultural memory intact.
This may be the most realistic game ever made:
https://store.steampowered.com/app/3167920/LowBudget_Repairs/
Reblogged by slightlyoff@toot.cafe ("Alex Russell"):
dale@toot.cafe ("Dale Harvey") wrote:
I had to go out to buy a specific version of the iPad in order for my kids to be able to do their homework.
Educational policies aside, it was a sad reminder of what we are losing when we let the web be displaced by propietary apps.
Reblogged by kornel ("Kornel"):
Dear National Trust members, this is your annual reminder to vote in the upcoming AGM. The "anti woke" Restore Trust, who are backed by The Tory Common Sense group are again listing 6 candidates. Although NT membership is over 5 million, only 0.5% actually vote. Restore Trust has a very active membership so don't let apathy give them a beach head for their anti woke vision. You can use the quick vote button to vote for NT preferred candidates. Voting closes 25th October. Please boost.
#NT
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
first one of the new academic year, but probably not the last:
“Georgia high school student, 14, shoots and kills 4 while wounding 9” - https://www.reuters.com/world/us/georgia-officers-respond-reports-shooting-high-school-2024-09-04/
Reblogged by fromjason ("fromjason.xyz 🖤"):
NickAEsp ("Nick Espinosa") wrote:
Yes, Your Phone Mic IS Listening!
#News #TechNews #Technology #surveillance #PrivacyMatters #Facebook #Google #Amazon #Meta
pzmyers@octodon.social ("pzmyers 🦑") wrote:
My day went splat, literally.
https://freethoughtblogs.com/pharyngula/2024/09/04/an-unusually-long-day/
fromjason ("fromjason.xyz 🖤") wrote:
Who are your favorite #bloggers?
Drop their names and web addresses ⬇️
slightlyoff@toot.cafe ("Alex Russell") wrote:
@owa So if you want a future where HTML doesn't suck and where the warts in Web Components get ironed out and where we might be able to take on platform-backed data binding or SVG-custom-elements, then you need to support @owa.
Apple has continually demonstrated that it is functionally anti-web, including up to the present moment. The only solution is true competition.
I wish it wasn't so.
slightlyoff@toot.cafe ("Alex Russell") wrote:
@owa All of this adds up to an assumption by competitors that Apple isn't up for expanding the web to solve important needs that come from frequent developer requests. The *massive* gap in capabilities that Cupertino maintains is just as apparent in DOM and HTML as in advanced features. They *still* won't implement `is`, and `elementInternals` was trench warfare.
It's painful to really push on expanding HTML and web capabilities because Apple will fight it at every step. And everyone knows it.
slightlyoff@toot.cafe ("Alex Russell") wrote:
@owa But I'm sure that Apple spending more to defeat browser engine choice than to engage with developers [1], while materially misleading regulators [2] and leaving critical features in a totally broken state [3] and failing to keep pace in general [4] is just a giant misunderstanding. Could happen at any megacorp that makes $20BN/yr skimming off the web!
[3]: https://webventures.rejh.nl/blog/2024/web-push-ios-one-year/
slightlyoff@toot.cafe ("Alex Russell") wrote:
Apple understands that the web is a reach platform, and that its Achilles heel is a failure to deliver everywhere. Maintaining a hard cap on web capabilities is strategic.
If developers could just build a single compelling experience from a single code-base, they wouldn't need Apple's distribution channel, which would mean they wouldn't need to pay Apple taxes.
And this is why Apple's fighting @owa tooth and nail, going as far as to fund astroturf "developer" groups and mislead regulators.
slightlyoff@toot.cafe ("Alex Russell") wrote:
Because competitors know they can't ship new features to the wealthy developers and decision-makers that user the iOS products with their badges on the bonnet, the incentive to deliver new capabilities to developers on other platforms deflates.
Again, for Apple, this is working as intended. And they don't even have to put that much of a thumb on the scale. All they have to do is to "just ask questions" in standards conversations; muddy the waters in public and defuse progress in private.
slightlyoff@toot.cafe ("Alex Russell") wrote:
The last point is really insidious: Apple and the Android team really, *really* wanted to keep the web from disrupting the cozy mobile duopoly, and through interlocking and reinforcing moats have made it nearly impossible for the web to break out and challenge the app store and native frameworks.
This is working-as-intended. Apple's attempt to kill PWAs earlier this year showed intent, and the fallback position they've taken since (that they don't have to open them up) is indefensible.
slightlyoff@toot.cafe ("Alex Russell") wrote:
Folks are surprised to learn I put as much, or more, blame for the terrible state of frontend today on browsers as I do the JS community.
Browser vendors failed to put their money where their mouths have been on performance, paving endless open field to create induced demand with every JS engine tweak, rarely stopping to ask if what they have done has actually lifted the average.
Also, the last 15 years of neutered engine competition (thanks, iOS) has lowered vendor ambition for the platform.
Reblogged by fromjason ("fromjason.xyz 🖤"):
molly0xfff@hachyderm.io ("Molly White") wrote:
The Internet Archive lost its appeal in the Hachette case. What a huge, devastating loss for all of us.
Reblogged by fromjason ("fromjason.xyz 🖤"):
nixCraft ("nixCraft 🐧") wrote:
The Internet Archive Loses Its Appeal of a Major Copyright Case https://www.wired.com/story/internet-archive-loses-hachette-books-case-appeal/ Next, all AI companies should also lose access to copyrighted books and art. Why are tech bros allowed to breach copyright? The law should be applied equally to all.
slightlyoff@toot.cafe ("Alex Russell") wrote:
@heydon And, indeed, we can see that even a *very mild* price on UI latency -- via the extremely generous INP thresholds that went into effect earlier this year -- are proving to be more than the "DX" narrative bait-and-switch can handle. If a breeze that gentle can topple your whole roadmap...maybe there wasn't anything there?
The whole sociotechnical edifface *can*, for most classes of site, be a hollow promise devoid of additive value.
slightlyoff@toot.cafe ("Alex Russell") wrote:
@heydon It absolutely *is* the case that path dependence and unpriced externalities have caused important sections of the economy to fundamentally destroy value relative to what they "create"!
Accounting tricks can make bad things look good for a long time. It's *entirely possible* that the net net of the last decade's over enthusiasm for JavaScript has been more costly than it has been valuable.
Which is to say, you do not have to accept that popularity == value.
slightlyoff@toot.cafe ("Alex Russell") wrote:
Multiple times since @heydon's epic React video dropped, I've had conversations that have bottomed out at *"yeah, well, lots of people choose React, so it must be popular for a reason"*.
This is true! It can be popular for *many* reasons! Nothing about this acknowledgement requires stipulating that those reasons be *good* or based on complete information.
If Eugene Fama can acknowledge that Efficient Markets don't actually exist, so can you.
Reblogged by fromjason ("fromjason.xyz 🖤"):
molly0xfff@hachyderm.io ("Molly White") wrote:
People have gotten so used to the existence of the Internet Archive’s web archive that they forget how revolutionary and subversive it is. The idea that that is somehow safe while the book lending was not is completely flawed. They were just up against a more powerful group.
Reblogged by fromjason ("fromjason.xyz 🖤"):
timnitGebru@dair-community.social ("Timnit Gebru (she/her)") wrote:
louis@indieweb.social
for harassing anyone who describes Israel as the genocidal, apartheid, colonial entity that it is, and describing the type of election interference & harassment by AIPAC on Israel's behalf, mostly against Black congresspeople, as antisemitic, and targeting accounts that do so for mass reports, suspension and harassment.
See thread👇
https://dair-community.social/deck/@egg@kolektiva.social/113070659317824474
isagalaev ("Ivan Sagalaev :flag_wbw:") wrote:
I liked this leveled, informed explanation of the difficulties around gendered pronouns https://www.youtube.com/watch?v=Kh22m1QG6i4
slightlyoff@toot.cafe ("Alex Russell") wrote:
Stop defining "developer experience" as "the inner loop while I'm writing code after spending an hour installing node_modules".
Setup time is "developer experience".
Upgrade toil is "developer experience".
Memoise-everything-after-weeks-debugging-stray-rerender toil is "developer experience".
Belated, frantic code splitting side quests are "developer experience".
Reblogged by cstanhope@social.coop ("Your friendly 'net denizen"):
rek@merveilles.town ("R E K") wrote:
"The productivity myth suggests that anything we spend time on is up for automation — that any time we spend can and should be freed up for the sake of having even more time for other activities or pursuits — which can also be automated. The importance and value of thinking about our work and why we do it is waved away as a distraction. The goal of writing, this myth suggests, is filling a page rather than the process of thought that a completed page represents."
JSR, created for the JavaScript community, needed a logo and a website to look distinct, friendly, and inclusive. Here's how we approached this design problem.
Reblogged by cstanhope@social.coop ("Your friendly 'net denizen"):
testobsessed@ruby.social ("Elisabeth Hendrickson") wrote:
It just occurred to me that the phases in waterfall software development could just as well have been named after the stages of grief:
1. denial (requirements and design)
2. anger (implementation)
3. bargaining (functional testing)
4. depression (alpha & beta testing) and
5. acceptance (release)
pzmyers@octodon.social ("pzmyers 🦑") wrote:
Is the third week of the semester too early to burn out?
Reblogged by fribbledom ("muesli"):
Interesting. According to Brent Spiner (the actor who plays the android Data in Star Trek: The Next Generation)
it was Patrick Stewart's UK pronunciation of his character's name (day-tah instead of the US's dah-tah) that made this pronunciation canon, and
the character of Data and the popularity of Star Trek has led to "day-tah" now being the common pronunciation in the US, too.
https://youtu.be/xeqTMTOxid8 (π min)
#StarTrek #StarTrekTNG #TNG #data #pronunciation #English #EnglishLanguage
I mean, what else would a PORtable moNITOR be called?
via @qbi
Reblogged by keul@fosstodon.org ("Luca Fabbri"):
lukito@gamedev.lgbt ("Lukito") wrote:
“We created a self-opening fridge with an AI camera that tracks what you put in and take out.”
Please for the love of any and all deities I am PROSTRATE on the floor begging you for fair energy prices and accessible public transport I do not need a fridge incorrectly guessing what is in my 17 Tupperware containers and refusing to open because I haven’t paid my monthly £24.99 subscription of “Fridge Door Lock Plus” :neofox_melt_sob: :neofox_melt_sob: :neofox_melt_sob:
cstanhope@social.coop ("Your friendly 'net denizen") wrote:
Starting my morning with a bit of silliness and a good beat. "The Time Machine (Dr. Evil Trance Mix)":
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
and please tell me again how they are classified a 501c(3) tax exempt non-partisan organization??
https://www.theguardian.com/us-news/article/2024/sep/04/christian-election-poll-workers
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
seems reasonable
Firefox will reconsider supporting JPEG XL if they get a Rust implementation:
https://github.com/mozilla/standards-positions/pull/1064
This is a very good news for web standards:
https://mastodon.social/@kornel/113078862354601952
and will fix a blocker that is hurting adoption of JPEG XL.
The reference implementation has unfortunately been written in C++ just as browser vendors started looking into migrating away from C++ for security reasons, and saw the C++ codec primarily as a big new attack surface.
#WebStandards need two independent implementations of every feature.
This proves that the spec is actually possible to implement, and makes it possible to verify that the implementations are interoperable.
It makes uses in the wild much less likely to depend on bugs in a particular implementation, which makes it possible to upgrade or replace implementations without creating painful bug-compatibility problems.
Reblogged by rmrenner ("The Old Gay Gristle Fest"):
metin@graphics.social ("Metin Seven 🎨") wrote:
A brand new 2.0 version of @PyDPainter has been released by @mriale 👍
PyDPainter is an authentic recreation of the classic Deluxe Paint ("DPaint") Amiga pixel editor.
https://www.youtube.com/watch?v=l385Z7_CRB0
Get it here:
https://github.com/mriale/PyDPainter
#pixel #PixelArt #graphics #GameDev #RetroComputing #tool #editor #tips #FediTips #Commodore #Amiga #MSDOS #retro #VintageComputing
fromjason ("fromjason.xyz 🖤") wrote:
Instagram: hey friend, we'll let your song keep playing while you scroll our feed.
TikTok: fuck whatever you were just doing. All your Spotify playlists are now deleted. The time? You want to know the time?! We just killed your family. Keep scrolling, pussy.
slightlyoff@toot.cafe ("Alex Russell") wrote:
This is (even more) aggro than I'd be about React (and, surprisingly, religion), but this line is the pure, uncut truth:
"React is useful for making complex interfaces like Facebook’s or for making otherwise simple interfaces, and their underlying codebases, complex like Facebook’s."
Christ on a cracker, @heydon; leave something for the rest of us!
Reblogged by cstanhope@social.coop ("Your friendly 'net denizen"):
digits@ravenation.club ("Digits") wrote:
Awesome new compilation of Central Asian disco from the 1980s!
https://ostinatorecords.bandcamp.com/album/synthesizing-the-silk-roads-uzbek-disco-tajik-folktronica-uyghur-rock-tatar-jazz-from-1980s-soviet-central-asia #music
Reblogged by cstanhope@social.coop ("Your friendly 'net denizen"):
ieure@retro.social ("Boosty Collins") wrote:
You can play the CD on a variety of devices, as many times as you want, for free, forever.
The people who made the CD and player can't build a profile of what CDs you listen to.
CDs have full, lossless audio. They can perfectly represent any sound the human ear can perceive.
You don't lose access to your CDs if you stop paying a monthly subscription.
CDs are pretty dang great.
Reblogged by collinsworth@hachyderm.io ("Josh Collinsworth"):
ian@hachyderm.io ("Ian Coldwater 📦💥") wrote:
It has come to my attention that there are younger folks who haven’t heard of Five Geek Social Fallacies.
It was written in 2003 and the social dynamics stay real. Once you read it, you’ll see them everywhere.
On April 9th, 2024, the Rust Security Response WG disclosed CVE-2024-24576, where std::process::Command
incorrectly escaped arguments when invoking batch files on Windows. We were notified that our fix for the vulnerability was incomplete, and it was possible to bypass the fix when the batch file name had trailing whitespace or periods (which are ignored and stripped by Windows).
The severity of the incomplete fix is low, due to the niche conditions needed to trigger it. Note that calculating the CVSS score might assign a higher severity to this, but that doesn't take into account what is required to trigger the incomplete fix.
The incomplete fix is identified by CVE-2024-43402.
Refer to the advisory for CVE-2024-24576 for details on the original vulnerability.
To determine whether to apply the cmd.exe
escaping rules, the original fix for the vulnerability checked whether the command name ended with .bat
or.cmd
. At the time that seemed enough, as we refuse to invoke batch scripts with no file extension.
Unfortunately, Windows removes trailing whitespace and periods when parsing file paths. For example, .bat. .
is interpreted by Windows as .bat
, but our original fix didn't check for that.
If you are affected by this, and you are using Rust 1.77.2 or greater, you can remove the trailing whitespace (ASCII 0x20) and trailing periods (ASCII 0x2E) from the batch file name to bypass the incomplete fix and enable the mitigations.
Rust 1.81.0, due to be released on September 5th 2024, will update the standard library to apply the CVE-2024-24576 mitigations to all batch files invocations, regardless of the trailing chars in the file name.
All Rust versions before 1.81.0 are affected, if your code or one of your dependencies invoke a batch script on Windows with trailing whitespace or trailing periods in the name, and pass untrusted arguments to it.
We want to thank Kainan Zhang (@4xpl0r3r) for responsibly disclosing this to us according to the Rust security policy.
We also want to thank the members of the Rust project who helped us disclose the incomplete fix: Chris Denton for developing the fix, Amanieu D'Antras for reviewing the fix; Pietro Albini for writing this advisory; Pietro Albini, Manish Goregaokar and Josh Stone for coordinating this disclosure.
Gargron ("Eugen Rochko") wrote:
Saw this band live a couple of weeks back.
Reblogged by slightlyoff@toot.cafe ("Alex Russell"):
spiralganglion ("Ivan Reese") wrote:
Here's the (excellent) official GOV.UK guidance on progressive enhancement — in short, try very hard to avoid using JS at all, and especially avoid large frameworks.
https://www.gov.uk/service-manual/technology/using-progressive-enhancement
And here, from the frontpage of HN, is an unofficial component library that emulates the GOV.UK "Design System”… in Vue.
…There's no emoji for “flailing my arms with an exasperated, disbelieving look on my face”
cstanhope@social.coop ("Your friendly 'net denizen") wrote:
It's not really representative of most of their work, but I'm really diggin' this power ballad from Unleash the Archer's latest album. "Give it Up or Give it All":
https://www.youtube.com/watch?v=of8SZkI728I
(My ears tell me the compression is a bit much on that youtube recording, but they don't have it up on bandcamp as a preview. So you get what you get, and you don't throw a fit.)
Reblogged by slightlyoff@toot.cafe ("Alex Russell"):
mathowie@xoxo.zone ("Matt Haughey 🫠") wrote:
“I love that for you!” is west coast for “well, bless your heart”
Reblogged by keul@fosstodon.org ("Luca Fabbri"):
veronica@xoxo.zone ("Veronica") wrote:
Here, I made you a Slack emoji for when you're talking about GenAI
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
“The group has devised a catalytic recycling process that breaks apart the chains of some of the more commonly used plastics — polyethylene and polypropylene — in such a way that the building blocks of those plastics can be used again...
The catalysts required for the reaction — sodium or tungsten — are readily available and inexpensive… early tests show the process is likely scalable at industrial levels. It uses no water and has fewer energy requirements than other recycling methods”
Reblogged by slightlyoff@toot.cafe ("Alex Russell"):
heydon@front-end.social ("Large Heydon Collider") wrote:
📼 What Is React.JS?
Finally, a new video on briefs.video.
Gargron ("Eugen Rochko") wrote:
For some reason the #Leprous Melodies of Atonement LP is 45 RPM instead of 33 RPM, first time I've had to switch the band on the record player.
xor@tech.intersects.art ("Parker Higgins") wrote:
Null Island Iced Tea
Reblogged by isagalaev ("Ivan Sagalaev :flag_wbw:"):
mitsuhiko@hachyderm.io ("Armin Ronacher") wrote:
Sometime to think about when voting this autumn.
Reblogged by isagalaev ("Ivan Sagalaev :flag_wbw:"):
jenbanim@mastodo.neoliber.al wrote:
This is neat
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
Looks like the Trump campaign is giving up on New Hampshire per the Boston Globe:
“Tom Mountain, who had served as one of several vice chairs for the former president’s effort in Massachusetts, wrote in an email to Trump volunteers in the state that “the campaign has determined that New Hampshire is no longer a battleground state,” and advised supporters to instead direct their attention to Pennsylvania. The GOP had been bullish about winning New Hampshire before President Biden dropped out of the race.In the email, Mountain, a former official with the Massachusetts GOP, said Trump was “sure to lose by an even higher margin” in New Hampshire than in 2016 and 2020, citing “campaign data/research.” He claimed resources would be suspended and the campaign would not send Trump or high-profile surrogates such as his sons. The email was obtained by the Globe and confirmed with multiple recipients.”
(The volunteer who wrote the email has since been fired.)
https://www.bostonglobe.com/2024/09/02/nation/new-hampshire-battleground-2024-harris-trump/
#uspol #uspolitics
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
dogzilla@masto.deluma.biz wrote:
Overview ‹ AI-Implanted False Memories — MIT Media Lab https://www.media.mit.edu/projects/ai-false-memories/overview/
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
“confidence in these false memories remained higher than the control”
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
ncdominie@mastodon.scot ("New-Cleckit Dominie") wrote:
Today's prize for on-brand academic behaviour goes to the School of Mathematics & Statistics, University of Glasgow, for disguising their building as a chalkboard.
(I'm informed that the elements were collected from working chalkboards in staff offices.)
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
The_Icarian@federated.press ("The Icarian") wrote:
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
Via Harry Sisson:
BOOM! The #Harris #Walz campaign just released this statement in response to Donald Trump claiming that he has “every right” to interfere in elections. Share this everywhere!
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
kendraserra@dair-community.social ("Kendra Albert") wrote:
Surveillance is everywhere in the modern city.
rust@social.rust-lang.org ("Rust Language") wrote:
After 7 years, there will finally be another "Rust All Hands" event where all members of the Rust project come together in person to collaborate on the future of Rust. 🎉
The All Hands will be part of @rustnl's "Rust Week 2025" in Utrecht, Netherlands.
https://blog.rust-lang.org/inside-rust/2024/09/02/all-hands.html
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
an example of why things like police reports should not be generated by AI
https://www.crikey.com.au/2024/09/03/ai-worse-summarising-information-humans-government-trial/
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
“It’s so crazy that my poll numbers go up. Whoever heard you get indicted for interfering with a presidential election—where you have every right to do it—you get indicted, and your poll numbers go up,” Trump said. “When people get indicted, your poll numbers go down!”
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
mcnees ("Robert McNees") wrote:
Physicist Carl Anderson was born #OTD in 1905.
Anderson developed an improved cloud chamber that he used to identify the positron – the antiparticle of the electron first theorized by Dirac.
Nowadays we use these particles for positron emission tomography (PET), android brains, and ghost busting.
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
wdlindsy@toad.social ("William Lindsey :toad:") wrote:
"Trump is not flip flopping. He is still 'honored' to have stripped women of a constitutional right. And he knows these 'Trump abortion bans' are killing women. It’s now time for all of us who oppose Trump and the GOP’s oppression—and killing of women—-to loudly make our voices heard at the ballot box."
~ Dean Obeidallah
#Trump #Republicans #abortion #ReproductiveRights #RoevWade #Dobbs
/3https://deanobeidallah.substack.com/p/the-issue-is-not-trump-flip-flopping
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
mxp@mastodon.acm.org ("Michael Piotrowski") wrote:
Whatever “Allow access” means, I somehow doubt that it will improve my “experience” with #Microsoft products.
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
benroyce ("Ben Royce 🇺🇸🇺🇦 Don't Boo: Vote") wrote:
Light hearted news:
#SupremeCourt Justice #KetanjiBrownJackson and #actor #MattDamon were scene partners in drama class in college
They were paired up to memorize their lines and do a scene from "Waiting for Godot"
“At the end, the professor said, ‘Ketanji, you were very good. Matt, we’ll talk,’ ” she said. “I was like, ‘Oh my God, I was better than Matt Damon in a scene’”
Jackson spoke to CBS Sunday Morning Sept. 1 for the release of her memoir, "Lovely One"
Reblogged by keul@fosstodon.org ("Luca Fabbri"):
baldur@toot.cafe ("Baldur Bjarnason") wrote:
“Canva says its AI features are worth the 300 percent price increase - The Verge”
https://www.theverge.com/2024/9/3/24234698/canva-price-increase-300-percent-ai-features
Read through a few discussion threads where Canva customers were reacting to the price hike and, surprisingly, they didn't think AI features were a transformative revolution well worth 300% price hike. Terms like "useless" and "waste of time" were bandied about. I’m shocked, I tell you.
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
okay, this is amusing
Reblogged by kornel ("Kornel"):
kate@fosstodon.org ("Kate Morley") wrote:
Great news for renewable energy in the UK, and I think this paragraph is particularly important to note:
“In recent years the cost of renewable energy has fallen below the market price for electricity, meaning that the scheme has paid money back to consumers, helping reduce energy bills. This was seen over Winter 2022/2023, when Contracts for Difference payments reduced the amount needed to fund government energy support schemes by around £18 per typical household.”
https://www.gov.uk/government/news/government-secures-record-pipeline-of-clean-cheap-energy-projects
Reblogged by kornel ("Kornel"):
LisaHornung@fosstodon.org ("Lisa Hornung") wrote:
Is my blue your blue? maybe not cause apparently I consider turquoise to be green 👀😅
Great little tool to test your colour perception https://ismy.blue #design #ux
Reblogged by kornel ("Kornel"):
EUCommission@ec.social-network.europa.eu ("European Commission") wrote:
Greenhouse gas emissions continue to decline in the EU! 📉
The latest Eurostat data shows that greenhouse gas emissions in the EU fell by 4% in the first quarter of 2024 compared to the same time last year – while the EU's GDP saw a slight increase!
Here’s how some countries are doing:
🇧🇬 Bulgaria: -15.2%
🇩🇪 Germany: -6.7%
🇧🇪 Belgium: -6.0%The biggest reductions came from:
🔻Electricity and gas supply: -12.6%
🔻Households: -4.4%ℹ️ More info: https://europa.eu/!WtYnwx
pzmyers@octodon.social ("pzmyers 🦑") wrote:
My granddaughter will fit right in.
https://freethoughtblogs.com/pharyngula/2024/09/03/first-day-of-kindergarten/
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
“… opposed the spread of in vitro fertilization and other fertility treatments, describing those treatments as harmful to women. They praised the rapidly expanding number of state laws restricting abortion rights and access, saying that the procedure should become “unthinkable” in America. And they cited hunger as a “great motivation” for Americans to find work.”
Reblogged by keul@fosstodon.org ("Luca Fabbri"):
tomgauld.bsky.social@bsky.brid.gy ("Tom Gauld ") wrote:
My cartoon for this week’s Guardian Books.
isagalaev ("Ivan Sagalaev :flag_wbw:") wrote:
Pastry project. Tomorrow is the first day of school, and my daughter decided to make some pastries for her teachers to earn the honor of being the best suck-up teacher's pet in her class :-)
Reblogged by kornel ("Kornel"):
BalooUriza@social.tulsa.ok.us ("Baloo Uriza") wrote:
Just aged my husband a thousand years by saying "here's a phrase that exists now: 'second-generation YouTuber.'"
Reblogged by bcantrill ("Bryan Cantrill"):
There's an article making the rounds, which reminds me that I'm broadly skeptical of the things that Venture Capitalists say, because they have much less skin in the game than operators.
Here are some good takes worth reading instead:
https://skamille.medium.com/founders-create-managers-aba3c88981ba by @skamille
https://oxide.computer/blog/reflections-on-founder-mode by @bcantrill
https://samgerstenzang.substack.com/p/founder-mode-in-context by Sam Gerstenzang
pzmyers@octodon.social ("pzmyers 🦑") wrote:
In 1958-59, I was that pudgy kid on the right.
https://freethoughtblogs.com/pharyngula/2024/09/02/do-you-want-to-see-my-jiggly-belly/
Reblogged by kornel ("Kornel"):
quirk@computerfairi.es ("FoxQuirk 🦊") wrote:
Found this old meme when rummaging around my files
Reblogged by kornel ("Kornel"):
stephaniewalter@front-end.social ("Stef Walter") wrote:
Looking for a monospaced pixel font with a lo-fi technical vibe, serving old school interfaces? Meet Departure Mono. I love it soooo much!
Gargron ("Eugen Rochko") wrote:
The Fairfield Horseshoe.
📷 Pentax KX
🎞️ Fuji Superia X-tra 400
🔭 Pentax M 50mm/1.7
⚗️ Come Through Lab#BelieveInFilm #FilmPhotography #AnalogPhotography #35mm #Cumbria #LakeDistrict #TheLakes
bcantrill ("Bryan Cantrill") wrote:
Reflections on Paul Graham's "Founder Mode": https://oxide.computer/blog/reflections-on-founder-mode
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
“The woke mob has distorted the true meaning of Labor Day,” Vance told supporters in Michigan. “Honoring workers might please people who work for a living, but it doesn’t delight me and Donald Trump.”
The vice-presidential nominee urged that Labor Day be “a time to pay tribute to the one thing that gives women’s lives meaning: reproducing.”
“Only women who have given birth should be allowed at Labor Day picnics,” he declared. “No baby, no hot dog.”
https://www.borowitzreport.com/p/jd-vance-says-labor-day-should-celebrate
jsonstein@masto.deoan.org ("Jeff Sonstein") wrote:
[Trump is] “a man who, to borrow from an old joke, could commit suicide by leaping from his ego to his I.Q.”
Starliner was designed to remain in orbit up to 210 days (about 7 months), since its contracted missions are to carry crew to ISS and stay docked there until their return.
pzmyers@octodon.social ("pzmyers 🦑") wrote:
Would you trust these two men? They're back!
https://freethoughtblogs.com/pharyngula/2024/09/02/wohl-and-burkmans-sneak-back-into-politics/
pzmyers@octodon.social ("pzmyers 🦑") wrote:
I'm going to unplug my electric toothbrush to fix this giant hole in Siberia.
Reblogged by collinsworth@hachyderm.io ("Josh Collinsworth"):
andy@bell.bz ("Andy Bell") wrote:
This is @heydon’s masterpiece https://briefs.video/videos/what-is-react/
pzmyers@octodon.social ("pzmyers 🦑") wrote:
Texan Evangelicals only reject imaginary pedophiles -- the real ones who praise Jesus are OK.
https://freethoughtblogs.com/pharyngula/2024/09/02/being-a-pedophile-a-molester-thats-not-ok/
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
larryfeltonj@journa.host ("Larry Felton Johnson") wrote:
The Cobb County Courier's Cat of the Day, selected from the Cobb Animal Shelter website, is a sweet-tempered female calico named Cleo #CobbCounty #cats
Reblogged by jsonstein@masto.deoan.org ("Jeff Sonstein"):
antlerboy ("Benjamin P. Taylor") wrote:
Interview – Gödel, Escher, Bach author Doug Hofstadter on the book and on the state of AI today – Game Thinking TV with Amy Jo Kim on YouTube (2023) https://stream.syscoi.com/2024/08/31/interview-godel-escher-bach-author-doug-hofstadter-on-the-book-and-on-the-state-of-ai-today-game-thinking-tv-with-amy-jo-kim-on-youtube-2023/