sodapopcan
In LiveViewTest’s implementation of open_browser, it creates a temp file. To name that, it implements a function that generates a bunch of random bytes which is used to make a filename that looks like: "phx-#{random_id}". The function looks like this:
def random_id do
"phx-"
|> Kernel.<>(random_encoded_bytes())
|> String.replace(["/", "+"], "-")
end
and random_encoded_bytes looks like this:
defp random_encoded_bytes do
binary = <<
System.system_time(:nanosecond)::64,
:erlang.phash2({node(), self()})::16,
:erlang.unique_integer()::16
>>
Base.url_encode64(binary)
end
My question is not about the implementation of these functions but rather: what’s wrong with simply using "phx#{System.unique_integer()"? I’ve thought on it a bunch but can’t come up with an answer.
Thanks!
mods: I wasn’t exactly sure where to put this. I mention LiveView but the question isn’t really about Phoenix but it’s also not even really about Elixir specifically! Apologies if it needs moving.
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
Hey guys,
I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly
Do you guys have any suggestions what is the best prac...
New
Hello!
Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app.
I creat...
New
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
Hello,
I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter).
The diffic...
New
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
I think I’ve found a small improvement I could contribute to <%= web_namespace %>.CoreComponents (installer/templates/phx_web/compo...
New
Other Trending Topics
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve.
They are GUI (Emerge) and State management (S...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
There are three potential reasons for members of this forum to have a look at https://vutuv.de
You are tired or annoyed of LinkedIn.
Yo...
New
Aludel - LLM Evaluation Workbench
Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #ai
- #elixirconf-us
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
dimitarvp
Absolutely nothing.
Though to remove that last 0.01% chance of collision I’d do it only slightly differently, like so:
Or you can use only
System.unique_integerbut with the:monotonicmodifier as well.sodapopcan
I didn’t think so, but then why the extra ceremony? The only reason I’ve got then is that they already have
I’m porting over some of that code, though, so it’s still gonna bug me. I’ll accept your answer… for now 
Phoenix.LiveView.Utils.random_idso may as well use it! Unsure. Anyway, it’s a bit curious though, like, not the most interesting mystery in the worlddimitarvp
I would think they wanted to add more entropy without incurring the extra performance hit of
:cryptofunctions.sodapopcan
But they are using a
:cryptofunction inrandom_encoded_bytes.smathy
Compatibility with pre-
unique_integerOTPs?dimitarvp
They are?
At least I’m not seeing it in the code you posted.
sodapopcan
@smathy Hey, that’s a good thought!
@dimitarvp in this function:
Unless
strong_rand_bytessimply just lives in that module… I’m a bit of a buffoon about this particular stuff.dimitarvp
Ummm, but that was just my idea how it can be rewritten…
al2o3cr
Not sure why it would be useful, but the more-complicated approach has some additional properties:
system_timemeans that a temp file that sorts later in lexicographic order was created laterphash2means that it’s possible to spot temp files that were made by the same process (though 8-bytes into a base64 value is going to be hard to spot visually)sodapopcan
I think our wires may be getting crossed! That
:crypto. strong_rand_bytescode is in LiveView. I was assuming by your response about crypto thatSystem.unique_integerwraps a crypto function.