BigTom

BigTom

What are the remaining gaps in the elixir ecosystem?

With Phoenix, Liveview, Ash, Oban Web, Nx, Livebook, Beacon, Liveview Native, Flame, Nerves etc all getting mature, are there any major gaps in the elixir ecosystem that means its not suitable for some popular use case out there?

What is the next big space it is going to get a kick-ass solution for?

Most Liked

Eiji

Eiji

I would like to see a scenic-like solution for desktop apps that is based on a NIF which uses the same crates as in zed code editor. This way we would have a native desktop apps that are rendered using by GPU where each UI component could have it’s own beam process. :heart_eyes:

19
Post #2
garrison

garrison

IMO the biggest thing missing from the ecosystem is a proper database. Mnesia doesn’t cut it, so we’re all left using Postgres et al which feels like a total waste of the BEAM’s potential.

I actually started an experimental side project in this area several months ago and it has been going surprisingly well. Will have to make a post about it soon.

bartblast

bartblast

Creator of Hologram

TLDR: There was no copyright issue. I own the copyright to the logo, and the agency’s claims were baseless. After I hired a law firm to analyze the situation, they confirmed my position. The agency CEO has agreed to issue a public apology on LinkedIn.

Longer version:

For those unaware of the situation: After releasing Hologram, I announced it on LinkedIn with our project logo and name. Shortly after, the CEO of a design agency publicly accused me of stealing both their company name and logo. Instead of reaching out privately first, he sent me an email demanding I change the project’s name (and the logo).

The situation was quite stressful. I released Hologram at around 3-4 AM and announced it on various platforms, and his aggressive accusations were literally the first thing I saw when I woke up. What made it worse was that his employees then flooded the LinkedIn announcement thread, engaging in public shaming and bullying behavior.

The logo concept itself is based on common iconography - a minimalist representation of a 2D projection of a hologram machine projecting a hologram. While it’s true that one element of the logo (the icon) is similar, the text treatment is completely different, and they typically only use text in their branding anyway. More importantly, there are thousands of companies and GitHub projects using “Hologram” in their names, and the agency doesn’t hold any trademark rights.

I took this seriously and hired a law firm specializing in trademarks and patents. They thoroughly analyzed the situation and confirmed that the agency’s claims were completely unreasonable. I have clear documentation proving independent creation of our logo and hold the copyright.

The CEO has since removed his LinkedIn post, and we’re awaiting his public rectification. While I understand his initial reaction seeing a similar name and icon, this could have been handled much more professionally through direct communication. If he doesn’t follow through with the agreed-upon public apology, we’ll have to resolve this in court.

Interesting tidbit: After dozens of iterations and finalizing all the geometric calculations, I actually generated the final logomark using an Elixir script that outputs an SVG:

# alfa = 60 degrees
sin_alfa = :math.sqrt(3) / 2
tan_alfa = :math.sqrt(3)

x1 = 0
y1 = 0

x2 = 100
y2 = 0

x3 = 50
y3 = tan_alfa * 50

a = 18
b = a / sin_alfa

x4 = (a + b * tan_alfa) / tan_alfa
y4 = a

x5 = 100 - x4
y5 = a

x6 = 50
y6 = tan_alfa * (50 - b)

File.write!("logomark.svg", """
<svg width="100" height="#{y3 + a}" xmlns="http://www.w3.org/2000/svg">
  <path d="
    M #{x1} #{y1} L #{x2} #{y2} L #{x3} #{y3} Z
    M #{x4} #{y4} L #{x5} #{y5} L #{x6} #{y6} Z
  " fill="#a78bfa" fill-rule="evenodd" />

  <rect x="#{a}" y="#{y3}" width="#{100 - 2 * a}" height="#{a}" fill="#a78bfa" />
</svg>
""")

This whole experience has been quite draining…I appreciate your concern about this situation! @hubertlepicki

zachdaniel

zachdaniel

Creator of Ash

I’d suggest that this is a common misconception driven typically by past experiences with things that resemble Ash. The tools we provide work independently of data interactions (although there are some cases that you can’t put X & Y together w/o a data layer or with only certain data layers, but that is just a reality of software engineering).

This is a perfectly valid resource:

defmodule MyApp.Hello do
  use Ash.Resource

  actions do
    action :say_hello, :string do
      argument :to, :string, allow_nil?: false

      run fn input, _context -> 
        {:ok, "Hello #{input.arguments.to}"}
      end
    end
  end
end

If you want to add that to a GraphQL API:

defmodule MyApp.Hello do
  use Ash.Resource,
    extensions: [AshGraphql.Resource]

  graphql do
    queries do
      action :say_hello
    end
  end

  actions do
    action :say_hello, :string do
      argument :to, :string, allow_nil?: false

      run fn input, _context -> 
        {:ok, "Hello #{input.arguments.to}"}
      end
    end
  end
end

Or if you want to build a form for it:

# make a form
form = AshPhoenix.Form.for_action(MyApp.Hello, :say_hello)

# validate it with inputs from the client
form = AshPhoenix.Form.validate(form, %{to: "fred"})

# submit it
form = AshPhoenix.Form.submit(form)
# {:ok, "Hello fred"}

The benefits that Ash provide are that in the cases that you need persistence as you often do when building applications, you can opt into it without a bunch of choreography.

defmodule MyApp.Person do
  use Ash.Resource,
    extensions: [AshGraphql.Resource],
    data_layer: AshPostgres.DataLayer

  postgres do
    table "table"
    repo Repo
  end

  graphql do
    queries do
      action :say_hello
    end

    mutations do
      create :create
    end
  end

  actions do
    defaults [:create]

    action :say_hello, :string do
      argument :to, :uuid, allow_nil?: false

      run fn input, _context ->
        with {:ok, user} <- Ash.get(user, input.arguments.to) do
           {:ok, "Hello #{user.name}"}
        end
      end
    end
  end

  attributes do
    uuid_primary_key :id
    attribute :name, :string, allow_nil?: false
  end
end

Oftentimes folks will have resources with data layers and without.

Ash isn’t about slapping an API on top of a database. Things like calculations, generic actions (that action/3 that I showed up there), and tons of configuration for how various extensions work with your resources give you the best of both worlds in terms of simple powerful tools derived from resources, with the ability to progressively enhance as complexity increases.

Obviously I’m biased, so grain of salt and all that :person_shrugging:

venkatd

venkatd

Honestly I feel like the biggest things missing are not new libs/features, but improving what we already have!

For example:

  • More contributors to the Elixir language server (the LSP team is very busy!)
  • The Livebook ecosystem
  • Improving the ergonomics of Telemetry, debugging, and performance optimization tools

Where Next?

Popular in Discussions Top

fklement
This is a thread to gather some information about the efforts of using elixir in combination with cars or vehicular systems in general. ...
New
heathen
Quite interesting article Google brought me. Didn’t find any mentions about it here. What do you think in general? Would you use togethe...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
bglusman
I’m curious how others in the community deal with first class enums… especially crossing boundaries like database, code logic, and absin...
New
Sergiusz
Hello everyone, I don’t know if my post is appropriate. If it isn’t, you can delete it. After a year of designing and defining the requ...
New
derpycoder
So, anyone got a chance to look at this?!? I’m kind of glad this came along. We can just throw this into our Auth pages and won’t have t...
New
dogweather
I’ve been brainstorming about ways to solve the N-dimensional code organization problem, and am thinking about developing a Smalltalk-lik...
New
New
puemos
I’m working on a platform that allows users to add apps and use them in a writing assistant browser extension (https://anycursor.com). C...
New
ScriptyScott
Hey Folks, I just spent the last couple of days doing a deep dive into using Swoosh with Amazon’s simple email service, check out this t...
New

Other popular topics Top

vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1140 51847 244
New
srinivasu
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call th...
New
yawaramin
In the Dialyzer docs ( http://erlang.org/doc/man/dialyzer.html#requesting-or-suppressing-warnings-in-source-files ), there is a way to tu...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
beno
I will often find my self writing things similar to: case some_value do nil -&gt; something() "" -&gt; something() _ -&gt; someth...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
Nvim
Elixir appears to be a superior language to Python. I don’t see any advantage of Python over Elixir. Are there any?
New

We're in Beta

About us Mission Statement