My ElixirConf keynote, the foundations of the Elixir type system, is up:
Thank you
@ElixirConf
, sponsors, and everyone who attended. Next week I will publish a blog post on
@elixirlang
with further discussion on gradual typing.
Enjoy the weekend.
Tomorrow marks 13 years since the first commit to the Elixir repo. And today we celebrate by announcing that Elixir is, officially, a gradually typed language:
Today Elixir turns 12 years old! 🎉🥳
Let's celebrate with Elixir v1.17-rc, which includes our initial work on set-theoretic types, a brand new duration data type, and support for Erlang/OTP 27.
Want to give Elixir a gift? Give it a star on GitHub!
Woot! Elixir v1.17 is out, bringing you the first warnings and type checking based on our on-going work to perform type inference from patterns (and soon guards). A lot more to come, hopefully:
The Erlang VM has been the most transformative technology of my professional journey.
Almost 14 years later and we are still uncovering novel patterns and approaches enabled by it more than three decades ago. 🤯
Many forget that the client-server architecture is a *distributed system*. The request-response workflow we have historically used helped us forget it. However, if you keep a WebSocket connection open with bidirectional data, you can no longer ignore it. 🧵
Everyone was so busy showing Hey's performance problems that they forgot to show how broken it is. What do you think happens if I press the "enter" key twice?
I was walking down the road when a parrot landed on my shoulder (and then moved around). I was told it is a *king parrot*. I guess game recognizes game. 😂
Today during my
@ElixirConfEU
keynote I announced there is an ongoing PhD scholarship for researching and developing a type system powered by set-theoretic types for Elixir.
Here is a quick summary... 🧵 [1/6]
Elixir v1.17 performs type inference of structs/maps fields with type checking of field and function access, bringing users meaningful warnings without changes to code!
For example, if you try to invoke an unknown field on a struct, the compiler will now let you know. See below:
Announcing Bumblebee: from GPT2 to Stable Diffusion neural networks for Elixir. And - with Livebook v0.8 - all it takes for you to give it a try is three clicks.
Watch the video announcement:
[1/4]
Phoenix was already the best web framework for real-time, but this release makes it the best for any server rendered content, period.
Verified routes is a safe and elegant solution that I haven’t seen anywhere else while components+tailwind brings best in class productivity.
Phoenix 1.7.0-rc.0 is out! So much good stuff in this release –
@tailwindcss
by default, HTML-aware component system with compile-time checks, verified routes, and more!
👉
Me when somebody asks the benefits of Elixir's on-going type system work and I tell them that it already caught two bugs (one in Phoenix, one in Livebook) even before release:
A new exciting case has landed on Elixir's web site: "Scaling a streaming service to hundreds of thousands of concurrent viewers at
@Veeps
", with
@vinniefranco
and
@whatyouhide
:
Hi
@ryanflorence
. LiveView does not preclude JS, JS is part of our ceiling! That said, you are welcome to break Livebeats:
For comparison, you folks could build a Remix version of Livebeats (Remixbeats? :D), so we can try it and exchange notes! [1/4]
Announcing Scholar: traditional Machine Learning algorithms for Elixir and Nx. Regression, clustering, dimensionality reduction, and more:
Don't forget to checkout the "Guides" on the sidebar, they are gorgeous, and look even better in your
@livebookdev
!
I love seeing people call Elixir + Phoenix the "technology of the week" in
@t3dotgg
's video.
In practice, they had reached 1.0 before many of the cited alternatives were even created! More importantly, they are *still* in v1.x almost 10 years later! :D
The pendulum swings again: in the past, web frameworks *were* one person. But once applications grew in complexity and JavaScript started playing a bigger role in them, it was no longer the case.
This growth in complexity was what drove me way from web-dev back then. [1/6]
The first release of EXLA is out! Running Elixir code on the GPU has never been easier:
$ export XLA_TARGET=cuda
$ iex
iex> Mix.install([:exla])
iex> EXLA.jit(&Nx.add/2, [1, 2])
#MyElixirStatus
New article! Web apps have client and server state:
I explore how client state and server state are intrinsic parts of web applications (even without JavaScript) and how LiveView deals with state and realtime from a unified angle. Enjoy!
The first article of the "My Future with Elixir" series is out and it discusses Set-theoretic types and our on-going research on types for Elixir:
#MyElixirStatus
I have documented all of the latency, bandwidth, and rendering optimizations done by Phoenix.LiveView:
Including the recent optimization just merged into main which makes client rendering 3-30x faster. Enjoy!
#MyElixirStatus
Yay, another optimization found for the Elixir compiler. If you have a project with 10k files and you changed one small file, Elixir would take 3.5s on my machine. With the WIP patch, it should take 1.2s. :D
Addressing misconceptions in Elixir takes a big chunk of my time. Which is why seeing other OSS maintainers spreading misconceptions is so frustrating. They probably spend a lot of time doing the same thing, so why be the source for others?
@t3dotgg
As developers, we are frequently told that we need to break stuff to evolve.
I'd say the opposite: if you need to constantly break to evolve, perhaps you don't have a proper foundation to grow in the first place.
We have just launched Livebook Desktop on !
You can get Livebook up and running on your machine and start learning Elixir in less than a minute. Or use the
@flydotio
's Livebook launcher to take it for a spin in the cloud!
What if you could:
* upload a .csv file to see & plot its contents
* stream and transform GBs of .parquet files from S3
* drag and drop a sqlite3 database and query it
* drag and drop an audio/video file for live transcription
With
@livebookdev
, you can:
FLAME is out! 🔥 Auto scale by wrapping any app code in a function and have that block run in a temporary copy of your app.
It's time to rethink Serverless.
No rewrites. No bespoke runtimes. No outrageous layers of complexity. Blog + screencast 👉
I'm a big fan of pushing client updates with server-rendered HTML. Staying closer to your data and your authorisation layer is powerful. However, we may be repeating mistakes from the past. Check out my conversation with
@t3dotgg
on the topic:
Elixir v1.17.0-rc.1 will be out in a couple minutes.
One of the things we did as part of v1.17 is to include a more accessible introduction to gradual set-theoretic types, which you can read here:
Today I meet
@hxjxsnow
, a new member of
@IRIF_Paris
, who is doing a post-doctorate on how behaviours (aka interfaces) in Elixir would look like with set-theoretic types.
Absolutely mind-blowing we now have a PhD student and a post-doc working on types for Elixir.
It seems
@chris_mccord
"conveniently" chooses to share something mind blowing whenever I get some spotlight talking about types. Coincidence or conspiracy?🤔
👀 hot deploys on
@flydotio
to a planet-wide cluster, in 3 seconds.
No websockets were harmed and the prod stylesheet reloaded on the client. More soon! 🔥
🌟 Simple trick to display an empty state when rendering large collections with a LiveView stream: use the :last-child CSS pseudo-class ("last" in Tailwind) to hide/show the empty state element. (Nope, you can't check if the stream is empty.)
#myelixirstatus
Elixir and Machine Learning in 2024 so far: MLIR, rich Arrow types, structured LLM, and more!
This paves the way for quantization, Apple Metal, cross-compilation and other goodies down the road!
Elixir v1.17 now type checks the comparison operators and will warn whenever it detects comparisons with structs or comparisons across disjoint types, which can be sources of bugs (addressing two cases from the linked article).
Check the screenshots below:
📘📘📘 New post: 10
@elixirlang
gotchas!
It's a great language, but some behavior can be unintuitive, confusing and in the worst case lead to bugs. In this post I wanna help clear some of them up!
When writing web apps, client state is everywhere: inputs, scrollbars, CSS states, DOM manipulations, and more. Server state matters too! A solid web framework should integrate it all from top to bottom. Check out my latest article:
There is a recent discussion on Elixir spaces were someone asked if you should use Erlang or Elixir for a DNS server and the overall answer is "whatever you enjoy the most". This makes me happy.
The discussion started because of claims like these. We made an app available, invited people to break it, and now it is the app's fault for not being indicative of our ceiling.
Btw, here is drag n' drop on LiveBeats, w/ Regular 3G, also synchronized between users in realtime.
@juanazam
@ryanrwinchester
This app doesn’t really have anything that approaches the “keep templates on the server” ceiling.
Make a drag and drop, optimistic list, or status dropdown
Yesterday, during my ElixirConf keynote, I showed how Livebook/Kino can plug into Elixir's v1.14 dbg and allow you to debug and rearrange |> pipelines on the fly!
Fantastic keynote from Chris Grainger about one year with Machine Learning in Elixir at CodeBEAM EU.
With LiveView and Nx, they went from three teams (front, backend, data) to a single Elixir team, which is extremely valuable for startups (which need to move fast!)
Apparently, server-side frameworks are not allowed to have client state (which most apps have, since forms are client state) nor do DOM manipulations, even if you have abstractions for syncing them.
This makes as much sense as me asking most SPAs out there to not use a server.
@josevalim
@ryanrwinchester
@bcardarella
@thmsmlr
@t3dotgg
Dug in deeper, had no idea anything was draggable and I didn't have any mp3s on my computer to upload before.
Noticed it uses Sortable.js for drag/drop, this means the UI state is driven by DOM manipulation outside of LiveView.
Somebody sent me a Trellix (dumb mini trello) that
It is time for another Elixir and Machine Learning roundup:
LLama, streaming, batch keying, timestamped transcriptions with Whisper, working with .csv/.ndjson/.parquet from S3, PostgreSQL/SQLite3/Snowflake, and much more!
My
@GOTOcon
talk where I give an introduction to Elixir and then live code a distributed machine learning application inside Livebook is up:
If you are already familiar with Elixir, jump to 24:30 (WebAI).
VIM & Emacs key bindings support just landed in
@livebookdev
v0.11! 😱
Download Livebook, give both a try, and let’s finally decide which one is better. Hold on to your caps lock, because there is no, ahem, escape.
Watch the video/read the post:
@aloukissas
Please send some of the blind-worshipers my way because it feels for the last 10 years all I have been doing is hearing and trying to tackle the complaints from everyone. :D
Livebook v0.11 is out and so begins our second launch week!
Talking to remote notes got a massive upgrade with the new "Remove execution" smart cell. Check the video/article:
The best part? It comes with remote intellisense too!🤯 All thanks to Erlang!❤️
Scholar (traditional Machine Learning for Elixir) has a new version out and, I have to say, this new notebook on manifold learning/dimensionality reduction is really cool:
Mateusz and Krsto are doing an amazing job!
Thanks Ryan! The invitation to break it was honest and I was expecting you to break it!
The most interesting part would be to compare how "similar" apps in different frameworks would look like. So I will be waiting until you give me the opportunity to break RemixBeats too! 🚀
I like José's energy. I still broke his app in seconds.
(I'd love to build RemixBeats eventually, but no time right now with everything else going on with Remix and React Router 😅)
Chris Grainger talk, a Year in Production with Machine Learning, is up:
Learn how Elixir + Phoenix + Nx help break silos (across front-end, backend, data) to ensure startups and teams can innovate and iterate quickly across several domains.
We just added remote dataframes to Explorer: place a dataframe in any node in a cluster and we'll proxy operations to it, transparently:
It took a weekend and about 1100LOC (with docs+tests). Plus some tiny bit of C code with the help of
@_uwu_cocoa
!
Good news: we solved *all* HTML server rendering payload concerns.
Bad news: It uses JSON.😅
PS: JSON is an implementation detail though. The semantic model is that you are sending HTML, it is just optimized away.