So installieren Sie Elixir und Erlang mit ASDF

Viele Programmiersprachen veröffentlichen regelmäßig neue Versionen, die Funktionen hinzufügen oder ablehnen, Fehler beheben und bahnbrechende Änderungen einführen. Um Entwicklern den Wechsel zwischen Versionen zu erleichtern, verfügen mehrere Sprachgemeinschaften über Versionsmanager (wie NVM für Node.js oder Rbenv für Ruby). Wenn Sie jedoch die Versionen mehrerer Sprachen gleichzeitig wechseln müssen, stellt der ASDF-Versionsmanager sicher, dass jedes Projekt über die erforderliche Umgebung verfügt.

Dies ist besonders in Elixir-Projekten wichtig, die die Erlang-Laufzeit benötigen. In dieser Anleitung erfahren Sie, wie Sie bestimmte Versionen von Elixir und Erlang/OTP mithilfe des ASDF-Versionsmanagers auf macOS oder Linux installieren.

ASDF installieren

Der ASDF-Versionsmanager ist ein Befehlszeilentool, das auf GitHub verfügbar ist. Es verwendet curlund gitinstalliert verschiedene Sprachen.

Installationsvoraussetzungen

Um die Dienstprogramme curlund zu installieren git, führen Sie Folgendes aus:

brew install coreutils curl git  # on macOS with Homebrew
sudo apt install curl git        # on Linux

Sie können mehr über Homebrew auf macOS lernen hier .

ASDF klonen

Klonen Sie nun mit den installierten Voraussetzungen das ASDF-Projekt:

git clone https://github.com/asdf-vm/asdf.git ~/.asdf

Wenn Sie ASDF jemals entfernen möchten, können Sie dies tun, indem Sie es .asdfaus Ihrem Home-Verzeichnis entfernen und die unten beschriebenen Konfigurationsänderungen rückgängig machen.

Konfigurieren Sie Ihre Shell

Schließlich fügen Sie ASDF in die Konfiguration Ihrer Shell ein. Für zshfügen Sie Folgendes zu hinzu ~/.zshrc:

 $HOME/.asdf/asdf.sh

Wenn Sie alternativ verwenden oh-my-zsh, fügen Sie es asdfzu Ihrer Plugin-Konfiguration hinzu. So schließen Sie ASDF in Ihre Konfiguration ein, wenn Sie eine andere Shell verwenden

Plugins installieren

ASDF verwendet ein Plugin-System, um mehrere Sprachen zu unterstützen. Für ein typisches Elixir-Projekt benötigen Sie die Elixir- und Erlang-Plugins:

asdf plugin add erlang
asdf plugin add elixir

Wenn Ihr Projekt Node.js erfordert, können Sie das nodejsPlugin auch installieren .

Erlang/OTP installieren

Wenn ASDF und seine Plugins installiert sind, können Sie jetzt Elixir und Erlang installieren. Wenn Ihr Projekt eine .tool-versionsDatei mit Einträgen für elixirund enthält erlang, können Sie die richtigen Versionen installieren, indem Sie Folgendes aus dem Projekt heraus ausführen:

asdf install

Die .tool-versionsDatei ähnelt .nvmrcund .ruby-version-Dateien, außer dass sie die Namen und Versionen mehrerer Sprachen auflistet. Im Allgemeinen sollten die Namen in dieser Datei mit den Namen des Plugins der Sprache übereinstimmen (zB nodejsfür Node.js).

Wenn Sie noch keine .tool-versionsDatei haben oder Elixir und Erlang global installieren möchten, verwenden Sie Folgendes, um eine Liste aller verfügbaren Erlang/OTP-Versionen anzuzeigen:

asdf list-all erlang
# ...
23.2
23.2.1
23.2.2
# ...

Im Gegensatz zu anderen Versionsmanagern erfordert ASDF, dass Sie eine genaue Version der zu installierenden Sprache angeben. Um die Version 23.2.1von Erlang zu installieren , führen Sie Folgendes aus:

asdf install erlang 23.2.1

Warnung : Diese Installation wird einige Zeit in Anspruch nehmen, während sie Erlang aus dem Quellcode kompiliert.

Erlang stellt Module basierend auf den verfügbaren Bibliotheken Ihres Systems zusammen. Einige Funktionen (wie der integrierte Beobachter) erfordern beispielsweise wxBibliotheken. Während der Installation werden möglicherweise Meldungen zu ausgelassenen Modulen angezeigt, die sich nicht auf die restliche Laufzeit auswirken.

Elixier installieren

Sobald die Erlang-Laufzeitumgebung installiert ist, können Sie Elixir installieren. Um eine Liste aller verfügbaren Versionen anzuzeigen, führen Sie Folgendes aus:

asdf list-all elixir
# ...
1.11.2
1.11.2-otp-21
1.11.2-otp-22
1.11.2-otp-23
# ...

Beachten Sie, dass jede Elixir-Version mehrere Versionen enthält, die mit verschiedenen Hauptversionen von Erlang/OTP kompiliert wurden. Um die Kompatibilität zwischen Elixir und der Erlang-Laufzeit zu maximieren, wählen Sie eine -otp-XYVersion aus, die der Hauptversion der Laufzeit entspricht, die Sie im vorherigen Schritt installiert haben. Zum Beispiel:

asdf install elixir 1.11.2-otp-23

Die Installation von Elixir nimmt deutlich weniger Zeit in Anspruch als die Installation von Erlang/OTP.

Versionen einstellen

Nachdem Sie Elixir und Erlang/OTP installiert haben, können Sie Ihre ausgewählten Versionen in einem Projekt speichern. Führen Sie im Stammverzeichnis des Projekts Folgendes aus:

asdf local erlang 23.2.1
asdf local elixir 1.11.2-otp-23

Ersetzen Sie die obigen Versionen durch diejenigen, die Sie während der Installation verwendet haben. Dadurch wird eine .tool-versionsDatei in Ihrem Projekt erstellt, die ASDF anweist, welche Versionen verwendet werden sollen. Wenn Sie eine globale oder Standardversion festlegen möchten, führen Sie Folgendes aus:

asdf global erlang 23.2.1
asdf global elixir 1.11.2-otp-23

Dadurch wird eine .tool-versionsDatei in Ihrem Home-Verzeichnis erstellt. ASDF verwendet diese Versionen immer dann, wenn ein Projekt keine eigenen Versionen angibt.

Abschluss

ASDF ist ein beliebter Versionsmanager für Elixir-Projekte, da er sowohl Elixir- als auch Erlang-Versionen verwaltet. Fügen Sie eine .tool-versionsDatei in Ihre Projekte ein, damit die Mitwirkenden schnell einsatzbereit sind, und vergessen Sie nicht, die -otp-XYVersionen von Elixir für die beste Kompatibilität zu nutzen

What is GEEK

Buddha Community

How to Installing Elixir and Erlang With ASDF

Many programming languages regularly release new versions that add or deprecate features, fix bugs, and introduce breaking changes. To help developers switch between versions easily, several language communities have version managers (like NVM for Node.js or Rbenv for Ruby). When you need to switch versions of multiple languages at once, however, the ASDF version manager ensures each project has the environment it needs.

This is especially important in Elixir projects, which require the Erlang runtime. In this guide, you’ll learn how to install specific versions of Elixir and Erlang/OTP using the ASDF version manager on macOS or Linux.

#elixir #erlang #asdf

So installieren Sie Elixir und Erlang mit ASDF

Viele Programmiersprachen veröffentlichen regelmäßig neue Versionen, die Funktionen hinzufügen oder ablehnen, Fehler beheben und bahnbrechende Änderungen einführen. Um Entwicklern den Wechsel zwischen Versionen zu erleichtern, verfügen mehrere Sprachgemeinschaften über Versionsmanager (wie NVM für Node.js oder Rbenv für Ruby). Wenn Sie jedoch die Versionen mehrerer Sprachen gleichzeitig wechseln müssen, stellt der ASDF-Versionsmanager sicher, dass jedes Projekt über die erforderliche Umgebung verfügt.

Dies ist besonders in Elixir-Projekten wichtig, die die Erlang-Laufzeit benötigen. In dieser Anleitung erfahren Sie, wie Sie bestimmte Versionen von Elixir und Erlang/OTP mithilfe des ASDF-Versionsmanagers auf macOS oder Linux installieren.

ASDF installieren

Der ASDF-Versionsmanager ist ein Befehlszeilentool, das auf GitHub verfügbar ist. Es verwendet curlund gitinstalliert verschiedene Sprachen.

Installationsvoraussetzungen

Um die Dienstprogramme curlund zu installieren git, führen Sie Folgendes aus:

brew install coreutils curl git  # on macOS with Homebrew
sudo apt install curl git        # on Linux

Sie können mehr über Homebrew auf macOS lernen hier .

ASDF klonen

Klonen Sie nun mit den installierten Voraussetzungen das ASDF-Projekt:

git clone https://github.com/asdf-vm/asdf.git ~/.asdf

Wenn Sie ASDF jemals entfernen möchten, können Sie dies tun, indem Sie es .asdfaus Ihrem Home-Verzeichnis entfernen und die unten beschriebenen Konfigurationsänderungen rückgängig machen.

Konfigurieren Sie Ihre Shell

Schließlich fügen Sie ASDF in die Konfiguration Ihrer Shell ein. Für zshfügen Sie Folgendes zu hinzu ~/.zshrc:

 $HOME/.asdf/asdf.sh

Wenn Sie alternativ verwenden oh-my-zsh, fügen Sie es asdfzu Ihrer Plugin-Konfiguration hinzu. So schließen Sie ASDF in Ihre Konfiguration ein, wenn Sie eine andere Shell verwenden

Plugins installieren

ASDF verwendet ein Plugin-System, um mehrere Sprachen zu unterstützen. Für ein typisches Elixir-Projekt benötigen Sie die Elixir- und Erlang-Plugins:

asdf plugin add erlang
asdf plugin add elixir

Wenn Ihr Projekt Node.js erfordert, können Sie das nodejsPlugin auch installieren .

Erlang/OTP installieren

Wenn ASDF und seine Plugins installiert sind, können Sie jetzt Elixir und Erlang installieren. Wenn Ihr Projekt eine .tool-versionsDatei mit Einträgen für elixirund enthält erlang, können Sie die richtigen Versionen installieren, indem Sie Folgendes aus dem Projekt heraus ausführen:

asdf install

Die .tool-versionsDatei ähnelt .nvmrcund .ruby-version-Dateien, außer dass sie die Namen und Versionen mehrerer Sprachen auflistet. Im Allgemeinen sollten die Namen in dieser Datei mit den Namen des Plugins der Sprache übereinstimmen (zB nodejsfür Node.js).

Wenn Sie noch keine .tool-versionsDatei haben oder Elixir und Erlang global installieren möchten, verwenden Sie Folgendes, um eine Liste aller verfügbaren Erlang/OTP-Versionen anzuzeigen:

asdf list-all erlang
# ...
23.2
23.2.1
23.2.2
# ...

Im Gegensatz zu anderen Versionsmanagern erfordert ASDF, dass Sie eine genaue Version der zu installierenden Sprache angeben. Um die Version 23.2.1von Erlang zu installieren , führen Sie Folgendes aus:

asdf install erlang 23.2.1

Warnung : Diese Installation wird einige Zeit in Anspruch nehmen, während sie Erlang aus dem Quellcode kompiliert.

Erlang stellt Module basierend auf den verfügbaren Bibliotheken Ihres Systems zusammen. Einige Funktionen (wie der integrierte Beobachter) erfordern beispielsweise wxBibliotheken. Während der Installation werden möglicherweise Meldungen zu ausgelassenen Modulen angezeigt, die sich nicht auf die restliche Laufzeit auswirken.

Elixier installieren

Sobald die Erlang-Laufzeitumgebung installiert ist, können Sie Elixir installieren. Um eine Liste aller verfügbaren Versionen anzuzeigen, führen Sie Folgendes aus:

asdf list-all elixir
# ...
1.11.2
1.11.2-otp-21
1.11.2-otp-22
1.11.2-otp-23
# ...

Beachten Sie, dass jede Elixir-Version mehrere Versionen enthält, die mit verschiedenen Hauptversionen von Erlang/OTP kompiliert wurden. Um die Kompatibilität zwischen Elixir und der Erlang-Laufzeit zu maximieren, wählen Sie eine -otp-XYVersion aus, die der Hauptversion der Laufzeit entspricht, die Sie im vorherigen Schritt installiert haben. Zum Beispiel:

asdf install elixir 1.11.2-otp-23

Die Installation von Elixir nimmt deutlich weniger Zeit in Anspruch als die Installation von Erlang/OTP.

Versionen einstellen

Nachdem Sie Elixir und Erlang/OTP installiert haben, können Sie Ihre ausgewählten Versionen in einem Projekt speichern. Führen Sie im Stammverzeichnis des Projekts Folgendes aus:

asdf local erlang 23.2.1
asdf local elixir 1.11.2-otp-23

Ersetzen Sie die obigen Versionen durch diejenigen, die Sie während der Installation verwendet haben. Dadurch wird eine .tool-versionsDatei in Ihrem Projekt erstellt, die ASDF anweist, welche Versionen verwendet werden sollen. Wenn Sie eine globale oder Standardversion festlegen möchten, führen Sie Folgendes aus:

asdf global erlang 23.2.1
asdf global elixir 1.11.2-otp-23

Dadurch wird eine .tool-versionsDatei in Ihrem Home-Verzeichnis erstellt. ASDF verwendet diese Versionen immer dann, wenn ein Projekt keine eigenen Versionen angibt.

Abschluss

ASDF ist ein beliebter Versionsmanager für Elixir-Projekte, da er sowohl Elixir- als auch Erlang-Versionen verwaltet. Fügen Sie eine .tool-versionsDatei in Ihre Projekte ein, damit die Mitwirkenden schnell einsatzbereit sind, und vergessen Sie nicht, die -otp-XYVersionen von Elixir für die beste Kompatibilität zu nutzen

Sofia Gardiner

Sofia Gardiner

1622561280

Erlang, Elixir, Blockchain & Serverless…What?! • Ulf Wiger, Saša Jurić & Eric Johnson • GOTO 2019

Erlang, Elixir, Blockchain & Serverless…What?! • Ulf Wiger, Saša Jurić & Eric Johnson • GOTO 2019

TIMECODES

  • 00:00 Intro
  • 01:13 Erlang’s first paying customer
  • 04:28 Is Elixir the next generation of Erlang?
  • 06:27 How to choose between Erlang and Elixir?
  • 11:33 Your GOTO Copenhagen talks
  • 14:03 Why did you choose Erlang for a Blockchain implementation?
  • 17:25 Trying to objectify Erlang
  • 18:38 Running Erlang or Elixir serverlessly?
  • 28:31 Is Erlang short for Ericsson language?
  • 30:03 Who would win a Sumo wrestling match – Erlang or Elixir?
  • 30:22 Outro

Read the full transcription of this interview here:
https://gotopia.tech/articles/erlang-elixir-blockchain-serverless

Ulf Wiger - Freelance Consultant & Core Developer Team Member at æternity blockchain
Saša Jurić - Author of “Elixir in Action”
Eric Johnson - Principal Developer Advocate - Serverless at AWS

#blockchain #serverless #erlang #elixir

GraphQL Elixir: An Elixir Implementation Of Facebook's GraphQL.

GraphQL Elixir

An Elixir implementation of Facebook's GraphQL.

This is the core GraphQL query parsing and execution engine whose goal is to be transport, server and datastore agnostic.

In order to setup an HTTP server (ie Phoenix) to handle GraphQL queries you will need plug_graphql. Examples for Phoenix can be found at hello_graphql_phoenix, so look here for a starting point for writing your own schemas.

Other ways of handling queries will be added in due course.

Installation

First, add GraphQL to your mix.exs dependencies:

defp deps do
  [{:graphql, "~> 0.3"}]
end

Add GraphQL to your mix.exs applications:

def application do
  # Add the application to your list of applications.
  # This will ensure that it will be included in a release.
  [applications: [:logger, :graphql]]
end

Then, update your dependencies:

$ mix deps.get

Usage

First setup your schema

defmodule TestSchema do
  def schema do
    %GraphQL.Schema{
      query: %GraphQL.Type.ObjectType{
        name: "RootQueryType",
        fields: %{
          greeting: %{
            type: %GraphQL.Type.String{},
            resolve: &TestSchema.greeting/3,
            description: "Greeting",
            args: %{
              name: %{type: %GraphQL.Type.String{}, description: "The name of who you'd like to greet."},
            }
          }
        }
      }
    }
  end

  def greeting(_, %{name: name}, _), do: "Hello, #{name}!"
  def greeting(_, _, _), do: "Hello, world!"
end

Execute a simple GraphQL query

iex> GraphQL.execute(TestSchema.schema, "{greeting}")
{:ok, %{data: %{"greeting" => "Hello, world!"}}}

Status

This is a work in progress, right now here's what is done:

  •  Parser for GraphQL (including Type definitions)
  •  AST matching the graphql-js types as closely as possible
  •  Schema definition
  •  Query execution
    •  Scalar types
    •  Arguments
    •  Multiple forms of resolution
    •  Complex types (List, Object, etc)
    •  Fragments in queries
    •  Extract variable values
  •  Introspection
  • [WIP] Query validation
  •  Directives

Resources

Implementation

Tokenisation is done with leex and parsing with yecc. Both very useful Erlang tools for parsing. Yecc in particular is used by Elixir itself.

Some resources on using leex and yecc:

The Execution logic follows the GraphQL JS Reference Implementation pretty closely, as does the module structure of the project. Not to mention the naming of files and concepts.

If you spot anything that isn't following Elixir conventions though, that's a mistake. Please let us know by opening an issue or a PR and we'll fix it.

Developers

Getting Started

Clone the repo and fetch its dependencies:

$ git clone https://github.com/graphql-elixir/graphql.git
$ cd graphql
$ mix deps.get
$ mix test

Atom Editor Support

Using the language-erlang package? .xrl and .yrl files not syntax highlighting?

Syntax highlighting in Atom for leex (.xrl) and yecc (yrl) can be added by modifying grammars/erlang.cson.

Just open the atom-language-erlang package code in Atom and make the change described here:

https://github.com/jonathanmarvens/atom-language-erlang/pull/11

however if that PR has been merged then just grab the latest version of the plugin!

Contributing

We actively welcome pull requests, bug reports, feedback, issues, questions. Come and chat in the #erlang channel on Slack

If you're planning to implement anything major, please let us know before you get too far so we can make sure your PR will be as mergable as possible. Oh, and don't forget to write tests.


Author: graphql-elixir
Source Code: https://github.com/graphql-elixir/graphql
License: View license

#elixir #graphql 

Mitchel  Carter

Mitchel Carter

1602919882

Performance Battle: Quarkus vs Phoenix

At my job, I am evaluating some microservices platform options. A good way to test them is doing some benchmarks. Everybody likes benchmarks. So, why not?

Disclaimer: although I tried to make conditions fair and “scientific”, it’s an amateur benchmark and I’m making this for fun. Please, don’t take it too seriously.

Why Quarkus?

It’s the “supersonic subatomic Java” framework, sponsored by Red Hat. My work place is a Red Hat shop and we have many subscriptions from them. So, Quarkus is not only a good fit, but we already use it on some projects. It promises a better startup time and memory footprint. Tested version: 1.6.1.

Why Phoenix

Well, personal preference. I like Elixir, it is a powerful and fun language. When you discover Erlang and what problems it was made to solve, you will find it amazing. WhatsApp, Discord and many others use it. The framework of choice for the Elixir language is Phoenix. Achieving 2 million connections in a single machine is really impressive too. Tested version: 1.5.4.

The benchmark

I couldn’t find any real benchmarks on these technologies. There is this benchmark on Netty and Cowboy, which are the technologies behind these frameworks, but using a “sleep” to simulate load is not ok. These frameworks handle databases and connection pools differently. Acquiring a database connection from a pool can timeout and throw an exception. A “sleep” command won’t timeout. Serializing data to JSON also impose memory and CPU usage.

Techempower does something different, but it uses good hardware and low load. Its focus is on how many requests per second a framework can handle, and this is not ok too. _I need to know what framework can handle more requests within constrained hardware, like a Heroku dyno. _So, speed isn’t a concern at this point.

In this benchmark, I decided to use my work development database and data. It’s an Oracle database and my test data is on a table with 5 columns and 6000 rows. Yes, it is a lot of JSON, so it can force some timeouts, CPU and memory usage. Although Oracle JDBC driver is well tested and supported, in Phoenix we must rely on jamdb_oracle package. It works well and it is maintained, but it’s not “official”. Oracle database driver is not a first class citizen on Quarkus either, and we can not compile it to a native image using GraalVM out of the box.

#phoenix-elixir #quarkus #openjdk #web-development-framework #elixir #web-development #software-development #erlang