[HN Gopher] Social virtual spaces with Elixir at Mozilla
___________________________________________________________________
Social virtual spaces with Elixir at Mozilla
Author : thibaut_barrere
Score : 164 points
Date : 2021-06-04 17:06 UTC (5 hours ago)
(HTM) web link (elixir-lang.org)
(TXT) w3m dump (elixir-lang.org)
| spicybright wrote:
| Why floating torsos without limbs? Could they have designed
| something less creepy to talk to?
| LinusPrime wrote:
| Limbs can be tricky to animate correctly in VR... I still get
| nightmares from some of the abominations I've seen in VR Chat.
| jayd16 wrote:
| Usually all you have is head position and hand position. You
| don't have torso tracking separate from head tracking and
| because of that doing elbow IK can be really hard. This style
| keeps you out of the uncanny valley.
|
| Although, the realistic torso shape might go a bit too far.
| gfodor wrote:
| Worth noting Hubs is more like Wordpress for social VR - the
| content is largely up to the user (to either adopt or create)
| - so the avatars in screenshots say less about some kind of
| universal art design choices than whatever specific setup the
| user was in.
| gfodor wrote:
| Believe me, not creepy is harder than it seems, especially in
| VR.
| teeray wrote:
| I can't believe this has been around since 2018 and this is the
| first I've heard of it. I can think of a bunch of events over the
| past year where this would have been awesome to use. Shame that
| the marketing hasn't been better.
| fsiefken wrote:
| I'd like to run Hubs Cloud on premises (my own home), but it's
| currently only offered as Digital Ocean droplet and Amazon
| https://hubs.mozilla.com/docs/hubs-cloud-intro.html
|
| I found some repositories here and there but it's all dated. I
| wondered if there is a more recent reticulum docker and
| installation document I could re-use and found the links below.
| If anyone has other tips, installation flows/scripts or pointers,
| feel free to share.
|
| https://sophiadigitalart.com/setup-your-own-hubs-server/
|
| https://github.com/mozilla/hubs
|
| https://github.com/xr3ngine-archive/mozilla-hubs-docker
|
| https://gitlab.nautilus.optiputer.net/ar-noc/mozilla-hubs-do...
| sergiomattei wrote:
| These frequent posts about Elixir are tempting me to give it
| another shot...
|
| But the last time I tried (weeks ago), it was a total pain. I
| could barely find documentation for the authentication packages I
| was trying for Phoenix and the docs I did find were usually
| outdated. Packages were unmaintained left and right and there's
| no official libraries for things like Stripe.
|
| It was a real shame because I seriously align with the ideology
| behind it. It just slows me downvand for that reason I can't use
| it.
| pablodavila wrote:
| Someone shared a boilerplate template on the Elixir subreddit
| the other day, might help out. Can't really recommend anything
| for Stripe, though. From what I've seen people usually use
| Stripity Stripe.
|
| - https://alex-min.fr/open-sourcing-my-phoenix-boilerplate/ -
| https://hex.pm/packages/stripity_stripe
| remi wrote:
| Shamless plug for our Elixir boilerplate we've been
| maintaining for three years :)
| https://github.com/mirego/elixir-boilerplate
| realusername wrote:
| I'm the author of the boilerplate mentioned here if people
| have any question about it, thanks for sharing! I've had the
| same struggles personally when building my web app so that's
| why I backported some my code into this repo, the defaults
| with Phoenix are great but there's a long way to make it kind
| of usable for real users.
| shijie wrote:
| I have had a completely opposite experience during the last 5+
| years as full-time Elixir dev, but I can empathize with running
| into a few scenarios where some library wasn't implemented in
| Elixir, or the library you want to use is no longer supported.
|
| If you're looking for an "every feature I will ever need to
| implement has a library for it" experience a la Rails or JS,
| you might not be happy with Elixir (although we shall see what
| 5 more years does to the ecosystem).
|
| I don't have problems wrapping a service's API and creating my
| own library every once in a while, if it means I don't have to
| trade off slapping together a 5+ service behemoth just to get a
| good concurrent queue working. This is where Elixir/OTP shines:
| the hard stuff is easy.
| spicybright wrote:
| Can you elaborate a bit more how the hard stuff is easy?
| syspec wrote:
| The code writes itself!
| pdimitar wrote:
| Paralellizing data processing is trivial, it's literally
| 2-5 more lines of code in many scenarios.
|
| I've tried -- and failed -- to replicate what Elixir does
| in this regard, in several other programming languages. Age
| those tries incurred hundreds of coding lines. Only Rust
| came close, although it's a bit verbose, but the code still
| did the job.
| itake wrote:
| What do you think about Golang's concurrency patterns?
| pdimitar wrote:
| They are mostly okay but I find their caveats tiring to
| mentally keep track of.
|
| As a fairly experienced dev I prefer the technology to
| slap me hard on the cheek and not make me triple check
| things.
|
| But Golang's concurrency is definitely a big step up from
| all the naked multithreading we had to endure and groom
| for decades -- that is unequivocally true!
|
| I still find Erlang/Elixir's message passing paradigm
| superior though. Plus every "process" there (a fiber /
| green thread basically) is being transparently
| parallelized on another CPU core without you thinking
| about it at all.
|
| As a personal scoreboard:
|
| 1. Erlang/Elixir's messages.
|
| 2. OCaml's "domain" effects (mutable shared state managed
| by multiple threads in a safe manner).
|
| 3. Golang's channels and messages.
| lostcolony wrote:
| I'll add - the synchronous by default, typed nature of
| Golang creates a massive amount of bookkeeping, as well
| as some fault tolerance issues you can walk into trying
| to build a robust service. It's definitely better than
| handling raw threads, but Erlang/Elixir beat it hands
| down.
| jfim wrote:
| > Paralellizing data processing is trivial, it's
| literally 2-5 more lines of code in many scenarios. I've
| tried -- and failed -- to replicate what Elixir does in
| this regard, in several other programming languages.
|
| Scala's parallel collections handled this cleanly. I
| believe they've been removed from the built in libraries
| (still available as a JAR though), but the idea was that
| you'd just add a .par call in your data processing chain
| and it would use a parallel collection instead of a
| regular sequential one.
|
| These examples from the documentation
| (https://docs.scala-lang.org/overviews/parallel-
| collections/o...) show how to turn a regular sequential
| computation: val list = (1 to
| 10000).toList list.map(_ + 42)
|
| Into a parallel one list.par.map(_ + 42)
|
| Oftentimes, for data processing, being able to
| parallelize parts of the computation makes it fast enough
| that one does not need to go beyond a single machine.
| Spark's RDDs are basically a distributed version of
| Scala's collection library.
|
| One of the areas where Elixir and Erlang shine is
| distributed applications.
|
| For anyone who has written socket code, the ability to
| easily send regular Elixir data structures as messages to
| processes that may run locally or remotely is pretty
| awesome. And once you realize that you can also send
| closures over the network (ie. one node can send a
| snippet of code to another mode and it'll be executed
| there), mind blown.
| [deleted]
| pdimitar wrote:
| It's true that some library coverage is definitely the weak
| point of Elixir. Authentication in particular is a gaping hole
| although efforts like `Pow` and `phx.gen.auth` do help to no
| small extent.
|
| The community is excellent though. You'll rarely find such a
| welcoming and ready-to-help community as ElixirForum (although
| the occasional exceptions do happen like everywhere else).
|
| Elixir is not about the syntax or anything. It's about (a) the
| underlying runtime, (b) the very powerful metaprogramming
| facilities and (c) Phoenix / Absinthe / a few others.
| sergiomattei wrote:
| Agreed on the community! They have been nothing but
| supportive on forums and chats. The brightest point of Elixir
| is their warm and friendly folks.
| vaer-k wrote:
| In my experience the documentation around Elixir has been
| ideal. People are modeling the absolute best of behavior,
| generally. The popular auth libraries (like guardian) are a bit
| of an exception in my opnion, for some strange reason. (Pow
| does a good job, though)
| dudul wrote:
| What auth packages were you trying? Documentation in the Elixir
| ecosystem is often excellent. The recommended auth library with
| Phoenix is now phx_gen_auth if it helps.
|
| As for Stripe, this looks pretty mature to me
| https://github.com/code-corps/stripity_stripe
|
| Definitely not a lot of "official" libs/clients in Elixir,
| companies aren't gonna spend a lot of resources maintaining
| that.
| sergiomattei wrote:
| My experience with phx_gen_auth was like this:
|
| 1. Install Phoenix, expect the command to be available
| because everyone is raving about it.
|
| 2. Missing command.
|
| 3. Dig through docs.
|
| 4. Pull the development branch of Phoenix because
| phx_gen_auth is only available there.
|
| 5. Run the generator within the Phoenix git repo because it
| won't allow me to run it elsewhere using a development
| version.
|
| 6. Use the generator.
|
| 7. Never figure things out because the phx_gen_auth command
| is barely documented and now I've got files everywhere that I
| don't understand.
|
| I tried implementing API authentication as well and while I
| got it working, it was less pleasant than my usual Django
| stack.
|
| Another example. The colossal amount of docs referring to a
| missing Phoenix plugin for Guardian that got removed in a
| random update made me scratch my head and spend an hour
| digging through their changelog and commits to figure out why
| my code wasn't working. The change was not documented at all.
|
| All in all, there were roadblocks every step of the way with
| poor docs and big undocumented breaking changes in libraries
| like Guardian. I want to love this thing but it made me so
| unproductive in the first couple weeks of using it for basic
| web/api development that I simply noped out.
| devoutsalsa wrote:
| I feel your pain. I personally felt like the learning curve
| was on Elixir was quite steep, partially because I lacked a
| strong foundation in software engineering when I started.
| Fortunately I had the luxury of learning on the job & was
| given enough time to ramp up. Now I really like it.
| ch4s3 wrote:
| Yeah, phx_gen_auth hasn't landed in main phoenix yet. As
| another poster mentioned, you should try
| https://github.com/aaronrenner/phx_gen_auth if you're going
| to use a generator. You might however get more mileage out
| of Programming Phoenix[1] where you'd learn what all of the
| files are for and how to build auth yourself. Plug and Ecto
| make it quite easy to do password auth. Guardian was
| popular in the past, but isn't widely used these days. You
| could use joken, or just roll it yourself.
|
| Generally the docs for Elixir libraries are very good, but
| you have indeed found some poorly documented things. I
| might suggest scraping together something simple and then
| trying out parts of the ecosystem that offer something new,
| like channels, live_view, broadway, or something else that
| takes advantage of OTP. Otherwise you're only going to see
| the gaps compared to Django and none of the benefits.
|
| [1] https://pragprog.com/titles/phoenix14/programming-
| phoenix-1-...
| sergiomattei wrote:
| Will do :)
| dudul wrote:
| Damn, did you try it 6 months ago while it was still
| experimental? I started like 4 projects in the past 2
| months with it and this does not at all mirror my milage.
|
| And I like it much better than a library because the code
| is just plain phoenix/ecto that is can customize easily.
| sergiomattei wrote:
| No, a month ago.
| bostonvaulter2 wrote:
| Yeah, unfortunately there are still some sharp edges. Was
| there a particular reason you decided to use the unreleased
| version of Phoenix 1.6 instead of using the current version
| of phx_gen_auth (from
| https://github.com/aaronrenner/phx_gen_auth/)? There's a
| decent bit of documentation there too.
|
| I haven't used guardian (not a fan of JWT) so I can't
| comment on it.
| gregors wrote:
| I haven't tried this yet - but I just recently saw this rolled
| up version of Phoenix - with a bunch of defaults.
|
| https://legendaryframework.org/
| freedomben wrote:
| Coming from the Ruby and Node eco-systems I know what you mean,
| but I've also found it to be not that bad to roll my own
| depending on the complexity of the service. In some cases I'm
| finding I like it _better_ that way because it 's less "magic."
| For example, I can open the module anytime and see how the HTTP
| request is being made to the K8s API.
|
| Definitely not for everyone or everything, just thought I'd
| share the thought.
| syspec wrote:
| I really want to try elixir, but I need an IDE based debugger!
|
| I tried the IntelliJ plugin, but it did not work (would work once
| the disconnect when the first BP was hit)
|
| JetBrains if you're listening, please make an official app /
| plug-in! Pretty please
|
| -
|
| My other gripe is the state of abandoned packages
| benatkin wrote:
| Mozilla licenses almost everything under the MPL, which seems to
| reduce interaction with other open source organizations. I wonder
| if it bothers them, or they're OK with it.
| princevegeta89 wrote:
| I started dabbling with elixir in 2017. The platform is
| phenomenal in terms of performance and the preciseness you can
| write code with.
|
| The pains I've seen are
|
| - thinking everything in a "functional" way
|
| - ide support
|
| - the library ecosystem, though rich in selection, could use some
| more help.
|
| Functional thinking becomes easier the more time you spend on it.
| I've recently solved the ide part with VSCode and ElixirLS. I use
| Docker and I'm able to get all interpretation and dynamic
| compiling along with suggestions, warnings using the VSCode
| Remote Containers plug in.
|
| Overall, the platform seems to be growing and it is great to see
| big players taking some steps here.
| gfodor wrote:
| Hello, I'm sure Mozilla folks will be here too (I no longer work
| on Hubs) but I am quoted a few times in this article and happy to
| answer any questions I can!
| pqb wrote:
| This submission is probably the first example of usage Phoenix
| Framework in big company that I know. I remember how many there
| were Elixir vs Go "battles" on HN in last three years but what I
| have noticed the Phoenix have worse traction and new adopters
| evangelizing it. That's sad, because I think Elixir and Phoenix
| Framework definitely is worth some attention.
| ch4s3 wrote:
| We use it at Pepsi eConmerce for multiple teams. In fact all of
| our newer backend projects use it.
| devoutsalsa wrote:
| Silly question... what is Pepsi e-commerce all about? I've
| been contacted multiple times over the years by recruiters
| about Pepsi, but I never interviewed there.
| dudul wrote:
| There are plenty of big companies using Elixir/Phoenix.
| Bleacher Report, Cars.com, Pinterest and many more.
| enraged_camel wrote:
| Discord uses Elixir too, I think?
| bcrosby95 wrote:
| They use Elixir but not Phoenix.
| dnautics wrote:
| I have heard pagerduty deploys their elixir microservices using
| a (very cut down) version of Phoenix. Somewhere they have a
| private "miniPhoenix" template that autogenerates everything
| for them.
|
| There are some big non-tech companies that you probably know
| that use elixir-phoenix, off the top of my head, PepsiCo, MBTA,
| BBC, PRX (of NPR/public radio fame).
| ch4s3 wrote:
| You can roll out your own mini Phoenix with flags passed to
| mix phi.new
___________________________________________________________________
(page generated 2021-06-04 23:00 UTC)