In der Fintech-Branche mĂŒssen wir hĂ€ufig sehr groĂe Mengen an Wechselkursdaten verarbeiten. Wir erhalten Daten aus verschiedenen Quellen, und jede von ihnen hat ihre eigene Vorstellung davon, wie die SĂ€tze fĂŒr morgen, ĂŒbermorgen, den nĂ€chsten Monat und sogar die nĂ€chsten drei Jahre extrapoliert werden können. Wenn jemand wusste, wie man Kurse richtig vorhersagtEs wĂ€re genau richtig, das GeschĂ€ft zu schlieĂen und einfach dumm Geld hin und her zu wechseln. Einige Quellen sind vertrauenswĂŒrdiger, andere liefern komplett MĂŒll, mit seltenen EinschlĂŒssen von fast korrekten Werten, aber fĂŒr exotische Paare. Unsere Aufgabe ist es, diese Zehntausende von Werten pro Sekunde zu sichten und zu bestimmen, was den Kunden gezeigt werden soll. Wir mĂŒssen den einzig richtigen Wert aus einer Tonne Schmutz und Schlick herausfiltern, wie es Flamingos beim Abendessen tun.
Ein besonderes Unterscheidungsmerkmal von Flamingos ist ihr massiver, gebogener Schnabel, mit dem sie Lebensmittel aus Wasser oder Schlick filtern.
- Wiki
Vela
, . , N ( , ).
, . Vela
- :
defmodule Pairs do
use Vela,
eurusd: [sorter: &Kernel.<=/2],
eurgbp: [limit: 3, errors: 1],
eurcad: [validator: Pairs]
@behaviour Vela.Validator
@impl Vela.Validator
def valid?(:eurcad, rate), do: rate > 0
end
-
validator
, (. ); - , ,
:__errors__
; -
sorter
, (LIFO, . ); -
:limit
; -
Vela
.
iex|1 > pairs = %Pairs{}
iex|2 > Vela.put(pairs, :eurcad, 1.0)
#â %Pairs{..., eurcad: [1.0], ...}
iex|3 > Vela.put(pairs, :eurcad, -1.0)
#â %Pairs{__errors__: [eurcad: -1.0], ...}
iex|4 > pairs |> Vela.put(:eurusd, 2.0) |> Vela.put(:eurusd, 1.0)
#â %Pairs{... eurusd: [1.0, 2.0]}
Vela
Access
, Kernel
: Kernel.get_in/2
, Kernel.put_in/3
, Kernel.update_in/3
, Kernel.pop_in/2
, and Kernel.get_and_update_in/3
.
:
- (
&MyMod.my_fun/1
), ; - ,
&MyMod.my_fun/2
,serie, value
; - ,
Vela.Validator
; -
threshold
, â âcompare_by
, . Comparison .
, , {serie, value}
:__errors_
.
, , . Vela
, compare_by
( Kernel.</2
); (Vela.value() -> number())
. & &1
.
, comparator
(min
/max
); , Date.diff/2
, .
threshold
, {min, max}
. , comparator
, compare_by
. , , compare_by: &DateTime.to_unix/1
( ) threshold: 1
, , ±band
.
, Vela.equal?/2
. equal?/2
compare/2
, , ==/2
.
Vela.purge/1
, ( validator
timestamps
). Vela.slice/1
, keyword
, .
get_in/2
/pop_in/2
.
Vela
GenServer
/Agent
. , , Vela
, , .
@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
do: Rate.age(rate) < @death_age
Vela.purge/1
, . Vela.slice/1
, ( ), â â .
!