Thinking Elixir News 147
Episode 147 of Thinking Elixir. Day 1 and 2 of Livebook’s first launch week announcements, a new JsonSchema compiler named Exonerate, Ecto 3.10.0 brings changeset improvements for LiveView, the Image library can now skew and unskew images using Nx, KnockLabs released the one_and_done library for idempotent APIs, and more!
IntelliJ Elixir v15.0.0
Changelog
15.0.0
Incompatible Changes
- Drop support for <= 2022 IDEs.
Enhancements
- Support 2023.1 IDEs.
Bug Fixes
-
Ignore from preload list that doesn’t have square brackets.
When trying to resolve keyword keys to
from, don’t error on unknown keys if any previous key was preload as this may be a list of preloads that is missing the square brackets. - Re-enable canary releases.
-
Remove duplicate dependency on
com.intellij.modules.javaplugin.
Elixir Mix Task Generator: The Ultimate Tool for Automating Repetitive Tasks
The Comprehensive Guide to Creating Custom Mix Task Generators
Stop wasting hours on mundane tasks! 😩💻 Say hello to your new productivity hack: the Elixir Mix Task Generator 🚀🙌 Check out my latest blog post to learn how this ultimate task can change your workflow for the better! 💪💡
Livebook Launch Week Day 5: Data wrangling in Elixir with Explorer, the power of Rust, the elegance of R
This post introduces the new data features in Livebook 0.9: fast data exploration through integration with Explorer, interactive data tables, and data transformation using the new Data Transform Smart cell.
Inspecting LiveView Tests with open_browser/2
Anytime I need to inspect a page when testing LiveView, I reach for open_browser/2:
view |> open_browser()
It renders the current LiveView page and opens it in your browser! 🤩
Check it out in action 👉 https://youtube.com/shorts/IVW26sTeuSQ 👀
Livebook Launch Week - Day 4: Build and deploy a Whisper chat app to Hugging Face in 15 minutes
Learn how to use Livebook to build a Machine Learning app and deploy it to Hugging Face in less than 15 minutes.
Oban v2.15 Released
Discover Oban v2.15’s performance and quality-of-life improvements, including notification compression, faster node shutdown without orphaning jobs, and the query solution to a insidious Postgres issue we hunted for years.
Phoenix LiveView Zipped Uploads
File and image uploads in LiveView are already easy and elegant. But what if the user wants to upload an entire directory with more nested directories and files? How should we handle that? Chris McCord walks us through how that can work in LiveView.
https://fly.io/phoenix-files/phoenix-liveview-zipped-uploads/
Livebook Launch Week - Day 3: Hubs and secret management
Discover Livebook 0.9’s new security features, including Hubs for centralized secret management, notebook stamping, and a sneak peek into Livebook Teams for team collaboration.
https://news.livebook.dev/hubs-and-secret-management—launch-week-1—day-3-3tMaJ2
Livebook Launch Week - Day 2: Distributed² Machine Learning notebooks with Elixir and Livebook
Explore Livebook v0.9’s enhanced Machine Learning features: new Neural Network tasks with the built-in Smart Cell, Distributed² Machine Learning in Elixir, and more.
Thinking Elixir News 146
Episode 146 of Thinking Elixir. News includes Elixir 1.14.4 release and what’s in it, the EEF’s election is re-run and why, a new ML library Scholar was released and what it’s for, a Sobelow update, a post about building your own static site generator with Phoenix, a post creating a Slack-like app with LiveView and streams, and more!
An Introduction to Mocking Tools for Elixir
Let’s explore three mocking tools you can use in Elixir — Mock, Mox, and Mimic. https://blog.appsignal.com/2023/04/11/an-introduction-to-mocking-tools-for-elixir.html
Idempotency in Elixir with One and Done
Add idempotency to your Phoenix/Plug apps with as little as one line of code using the new One and Done hex package!
- Launch blog post: https://knock.app/blog/using-one-and-done-to-power-idempotency
- Github Repo: https://github.com/knocklabs/one_and_done
- Hex Package: https://hex.pm/packages/one_and_done
Livebook Launch Week - Day 1: Deploy notebooks as apps & quality-of-life upgrades
Explore Livebook 0.9’s new features: deploy notebooks as user-friendly apps, star & access recent notebooks, and collapse sections.
Learn how to build and deploy your notebook as an app with Livebook.
IntellIJ Elixir v14.0.1
v14.0.1
Bug Fixes
-
Ignore atoms at top-level when looking for docs.
-
Replace
TODO()inleex.reference.resolver.Assignwith logger errors that includePSiElement. -
Ignore
typefor docs. -
Don’t look for variable use scope above EEx tags. If a variable is declared in an EEx tag then it is actually missing its declaration and cannot be resolved, so ignore its usage.
-
Check if module is disposed when write action is run for
syncLibraries. -
Only use Elixir SDK for
mix formatif it has an Erlang SDK. -
Include more lines of context for stacktraces in error reports.
-
Ignore identifier when
@*docattribute isn’t quoted. -
Ignore if package virtual file is disposed before the deps can be read.
-
Don’t decompile Erlang
Andas Elixirand. -
Ignore
request_bodyandresponsesfor docs. -
Check if heredoc has lines before calculating host text range for Markdown docs.
-
Ignore if stubs ids can’t be found when resolving Callables.
-
Ignore hexadecimal numbers at the root of the file when collecting doc comment.
-
Return an empty array of primaryArguments instead of array with null operand for unary operation without operand.
-
Set
sinceBuildto IntelliJ IDEA 2022.3. Fixes incorrect compatibility listed with < 2022.3 when < 2022.3 support was removed in 14.0.0 with #2946. -
Use
minByOrNullto protect from empty module list. This fix may not work as the line number reported in the errors is actually outside of the file. This is only a guess thatminBywas what was throwing theNoSuchElementexception. -
Ignore
nulloperands fornot inprimaryArguments(). Instead of including both left and right operand always and so having null operand in fixed size array return array with only non-null operands. -
Don’t allow Elixir SDK without Erlang SDK to be selected for New Project. The SDK has to be able to work for
mix new. -
Ignore strings, charlists, and sigils at the top of file when looking for doc comments.
-
Ignore top-level Aliases when collecting docs.
-
Ignored
unquotecalls when injecting docs. -
Find enclosing
quotewhendefs are inside anfnas in Phoenix Route Helpers. -
Handle binary modules when processing protocols and implementations for line markers and definition search.
-
Skip unqualified no arguments calls when Ecto.Query.from arguments are being typed.
-
Setting name on a call definition clause sets the name on the head instead. The JetBrains API both renames the usage references AND the original element where the rename refactoring was started, but when started on a call definition clause the
functionNameElementis thedef,defp,defmacro, ordefmacropand so both the name of the call was changed, but thedef*was also changed to the new name. Now, ifsetNameis called on a definition, the head is renamed instead. -
Filter out Elixir SDKs that don’t have an Erlang SDK when importing projects.
-
Check Elixir SDK has Erlang SDK before running dialyzer. Notify user of configuration error instead of throwing exception when constructing
mixcommandline. -
Log heredoc where Markdown cannot be injected.
-
Don’t inject Markdown in empty heredoc docs.
-
Log if new name element type does not match old name element type.
-
Replace name with relative identifier instead of identifier for qualified calls on rename.
-
Keep looking for variants above if and unless
ifandunlessused to callkeepProcessing()after checking if the child calls when resolving or searching for variants, but Variants returnedfalsealways fromkeepProcessing().This stops the variant search from terminating inside of an
iforunlesswhen it wouldn’t outside of one as was reported in #2751. -
List
KernelandKernel.SpecialFormsvariants inside modulars. Keep processing at end of modulars when looking for variants, which will check the implicit imports ofKernelandKernel.SpecialForms. -
Prevent listing variants from outer module in nested module
-
Log the accumulated and target usage type that cannot be folded.
-
Fix reporting
mix newerrors as notifications- Don’t associate mix new errors with new project as it doesn’t have a frame, so the notification was suppressed before.
- Strip color codes from mix new error notification.
-
Validate
–appis set correctly for new projects-
If inferred from project name, make sure the name is valid application name the same as
mix newdoes. -
If
–appis set explicitly, make sure it follows naming rules formix new.
-
If inferred from project name, make sure the name is valid application name the same as
Simulate LiveView Latency with liveSocket.enableLatencySim()
Another awesome LiveView helper:
⏱ liveSocket.enableLatencySim()
It lets us emulate latency to see how our LiveView responds when our users aren’t sitting close to our servers. That’s 🔥
Check it out https://youtube.com/shorts/xlLVtmVCuPw 👀
Elixir Security: What's the impact of DoS due to atom creation?
How to test your Elixir application’s reaction to a major crash.
Analyze Meta Tags With Elixir
A quick walk through on how to analyse for meta tags on websites using Elixir.
Go read more: https://kiru.io/blog/posts/2023/analyze-meta-tags-with-elixir/
Inspecting LiveView Payloads with liveSocket.enableDebug()
I ❤️ that LiveView comes with so many helpers to improve dev experience.
One of those is liveSocket.enableDebug() to help us inspect the payloads LiveView is sending. So nice! 🤩
Can Phoenix Safely Use the Zip Module?
Elixir has a built-in Zip library that comes with OTP. This post explores how to use the zip module and asks the important question: “Is this safe to use with user provided zips?” We explore two different types of zip-based attacks and see what we learn from it.
https://fly.io/phoenix-files/can-phoenix-safely-use-the-zip-module/
