There is no source because it's not true
HN user
m8s
Hmm they all seem to be working for me
I’ve been really unhappy with pretty much every Google product I’ve used except their consumer productivity tools — Gmail, Calendar, and Meet. Diving into Google Cloud has been extremely unsatisfactory
The two feel very different. Elixir is introducing gradual set-theoretic typing (https://hexdocs.pm/elixir/1.18.4/gradual-set-theoretic-types...) while Gleam has a static Hindley-Milner style type system.
To me, Gleam feels like if Elm’s type system met Rust’s syntax. I really like it. But I also really liked Elixir too, I just can’t live without Gleam’s type system anymore.
It’s a good lesson. We found PMF with a shared google sheet and a bit of data processing behind the scenes. The level of polish I’d come to expect as an engineer at an enterprise company was astronomically higher than what was actually needed for our customers to give us their dollars.
This is a really gross comment and should be removed.
That reminds me, there’s a really great survival game called The Long Dark in which you survive a plane crash in something like the arctic circle and must survive. If anyone is into survival games, definitely check this one out!
Two quite different things!
Elixir’s use: https://hexdocs.pm/elixir/main/alias-require-and-import.html...
Gleam’s use: https://tour.gleam.run/advanced-features/use/
Erika wrote “Using use in Gleam” in part because I didn’t understand how to use `use`, so I feel at least a little bit qualified to answer this.
I find that `use` is quite effective when needed. This is the part referenced in her article where I find `use` particularly helpful. Something like:
fn outer() -> Result(success, failure) {
result.map(parse_id(), fn(id) {
... // More code that uses the id
})
}
Becomes: fn outer() -> Result(success, failure) {
use id <- result.map(parse_id())
... // More code that uses the id
}
In more concrete terms, I’m building an application with Gleam and Wisp that uses Wisp’s `require_form`. The type signature for `require_form` is: pub fn require_form(
request: Request(Connection),
next: fn(FormData) -> Response(Body),
) -> Response(Body)
But I get to use it like this: use form <- wisp.require_form(req)
I’m not sure if I have the appropriate nomenclature here, and I consider myself a beginner of writing strongly typed functional languages, but when I use `use`, I get to invoke the callback with the value on the left side of the arrow.As Erika so thoughtfully put it:
The key is to use `use` when it allows you to highlight the happy path of your code … A use expression is syntax sugar, and it’s always possible to write Gleam code without it, though maybe not as clearly.
You can see more here [1] if you want, but note that there are a lot of structural changes in this codebase while I learn and figure out how to best use Gleam and Wisp :)
1. https://github.com/usepriceflow/app/blob/main/src/app/web/ad...
Awesome video, and definitely captures some of the super powers of targeting the BEAM! Thanks for sharing
Congrats to the community, Gleam is a really awesome language! This is such exciting news!
Hands up if you’ve still got ColdFusion powering critical apps in production to this day
It doesn’t really matter what can be done natively versus in a browser. For many folks, apps are the internet. This take is very developer-centric but it doesn’t account for the real world. Many people prefer using apps, especially middle-age to older demographics. That’s what our analytics say at least.
I think one of the most important "features" of Gleam is that it intentionally has a small footprint. I agree with your main point here: that Gleam is highly discoverable. You arrive at this conclusion via "reading someone else's code", which I agree with, but I think there's a second important piece regarding discoverability as well: you can read the standard library and be fairly confident that there aren't hidden "better ways" of doing things. I really like Elixir's standard library documentation too, there are numerous examples of how to actually use each function, which is really helpful for beginners.
As an aside, I really love the citations in the third column of your website. Super cool!
For what purpose? Is Gleam today unable to do things you’d like to be able to do?
It really is. A typed BEAM language (that also compiles to Javascript), a fantastic community, and a growing ecosystem. I’m really excited for the future of Gleam!
Feel free to ignore it then?
Are there modern learning resources available for Java?
https://www.refactoringui.com/ is a great resource for practical UI design concepts.
Svelte 4 reduces the Svelte package size by nearly 75% (10.6 MB down to 2.8 MB), which means less waiting on npm install. This improvement will be especially noticeable for users who are loading our interactive learning experience on learn.svelte.dev for the first time, users of the Svelte REPL, and users with limited connectivity. The majority of the remaining package size is eslint support, which necessitates distributing a CJS build, and once the eslint rewrite is completed the Svelte package size can drop by over another 50%.
Wow, that’s a pretty big reduction.
That’s fine, but that’s just your opinion. A lot of people use Elm in production and don’t have issues with it. I’m neutral on Elm. I think it’s a cool language but I don’t use it. I’m not convinced that “constant commits” signal the life of a project though.
There's more to the story in that Elm is a stable, high-quality frontend language that works as well as its creator wants it to for now. There are a lot of happy Elm users over on the Elm Slack, and it's being used in production at various companies.
There's also [Elm on the Backend](https://gotoaarhus.com/2023/sessions/2529/elm-on-the-backend), a recent talk given by the creator of Elm, about his experiments in using Elm as a full-stack language. There are some notes and a few photos, but no video as far as I'm aware.
I'm not involved in the Elm community nor do I write it for a living though, so I'm only kind of aware of what's going on over in the Elm world.
Joran Greef (TigerBeetle's CEO) had a fascinating conversation with Richard Feldman on his Software Unscripted podcast. Highly recommend giving it a listen!
https://twitter.com/sw_unscripted/status/1584695054563954689
I was about to ask the same thing. Why would someone leave voluntarily for worse benefits?
That’s surprising. In what way? I find it to be the most consistent and the most correct out of any chat software I’ve used, including IRC, Slack, Mattermost, and Microsoft Teams. They seem to just get a lot of stuff right.
The only thing that took me some time to adjust to was how overwhelming joining a new server can be. So many channels! Everything needs my attention! But after using it for a long time, I think this is actually a feature. I can mute channels and categories I’m uninterested in, but how many channels on Slack are never found due to poor discoverability?
We run both Slack and Discord at my work and the engineers vastly prefer Discord, for what it’s worth.
That was obviously not the actual code :)
I recently had to tell my bank, with my voice over the phone, that the make and model of my first car were the three random words 1Password generated for me. “Yes, the make and model of my first car was… a Venerated Breakfast Platoon.”
Buy now pay later schemes are usually really terrible ideas. Companies like Klarna and Afterpay should be avoided at all costs. Often the loan repayment schedules are intentionally confusing and predatory.
Here’s a relevant You Need A Budget podcast episode for those looking for more on this topic: https://open.spotify.com/episode/0Z9NQoseq5nvutAInURR2r
Major League Soccer*
The direct quote from Lemoine in the Washington Post is a little less insulting to his intelligence.
“If I didn’t know exactly what it was, which is this computer program we built recently, I’d think it was a 7-year-old, 8-year-old kid that happens to know physics,” said Lemoine, 41.
https://www.washingtonpost.com/technology/2022/06/11/google-...