- Jul 2023
-
thechipletter.substack.com thechipletter.substack.com
- Mar 2023
-
www.erlang.org www.erlang.org
- Jan 2023
-
proper.softlab.ntua.gr proper.softlab.ntua.grPropEr1
-
-
learnyousomeerlang.com learnyousomeerlang.com
Tags
Annotators
URL
-
-
jlouisramblings.blogspot.com jlouisramblings.blogspot.com
-
users.ece.cmu.edu users.ece.cmu.edu
-
dl.acm.org dl.acm.org
- Dec 2022
-
www.it.uu.se www.it.uu.se
Tags
Annotators
URL
-
-
erlang.org erlang.org
Tags
Annotators
URL
-
-
www.erlang.org www.erlang.org
-
-
www.erlang.org www.erlang.org
Tags
Annotators
URL
-
-
www.zhihu.com www.zhihu.com
-
如何看待Erlang之父Joe Armstrong觉得OO编程很烂?
Tags
Annotators
URL
-
-
www.zhihu.com www.zhihu.com
-
为啥 Erlang 没有像 Go、Scala 语言那样崛起?
Tags
Annotators
URL
-
-
-
对大量使用 immutable data structure 的语言,其 VM 和 GC 会有何特点?
Tags
Annotators
URL
-
-
www.zhihu.com www.zhihu.com
-
如何看待七牛 CEO 许式伟开源的 Cerl?
Tags
Annotators
URL
-
-
www.zhihu.com www.zhihu.com
-
想要理解函数式编程的思想,最好用哪种函数式编程语言入门?
Tags
Annotators
URL
-
-
erlangforums.com erlangforums.com
-
kolobara.com kolobara.comLunatic1
Tags
Annotators
URL
-
- May 2022
- Oct 2021
-
www.quastor.org www.quastor.org
Tags
Annotators
URL
-
- Sep 2021
-
beam-wisdoms.clau.se beam-wisdoms.clau.se
-
- Jun 2021
-
gist.github.com gist.github.com
- Oct 2020
-
erlang.org erlang.org
-
HTTP CLIENT SERVICE START/STOP An HTTP client can be configured to start when starting the Inets application or started dynamically in runtime by calling the Inets application API inets:start(httpc, ServiceConfig) or inets:start(httpc, ServiceConfig, How), see inets(3). The configuration options are as follows: {profile, profile()} Name of the profile, see DATA TYPES. This option is mandatory. {data_dir, path()} Directory where the profile can save persistent data. If omitted, all cookies are treated as session cookies. The client can be stopped using inets:stop(httpc, Pid) or inets:stop(httpc, Profile).
inets:start()
will automatically start thehttpc
service also! -
profile() = atom()
This should be
profile() = default | atom()
because thehttpc
service is automatically started with the default profile (calleddefault
) wheninets
is started.See also How to get more information about error when starting Inets httpd?
Tags
Annotators
URL
-
-
erlang.org erlang.org
-
The HTTP client default profile is started when the Inets application is started and is then available to all processes on that Erlang node.
Tags
Annotators
URL
-
- Sep 2020
-
ferd.ca ferd.ca
-
To me, abandoning all these live upgrades to have only k8s is like someone is asking me to just get rid of all error and exceptions handling and reboot the computer each time a small thing goes wrong.
the Function-as-a-Service offering often have multiple fine-grained updateable code modules (functions) running within the same vm, which comes pretty close to the Erlang model.
then add service mesh, which in some cases can do automatic retry at the network layer, and you start to recoup some of the supervisor tree advantages a little more.
really fun article though, talking about the digital matter that is code & how we handle it. great reminder that there's much to explore. and some really great works we could be looking to.
-
- Jul 2020
-
erlang.org erlang.org
-
The keys will be copied to the heap for the process calling get/0, but the values will not.
What does this mean?
-
-
adoptingerlang.org adoptingerlang.org
-
If the run-time dependencies were shared across all applications depending on the same rebar.config file,
This sentence is straightforward but I only understood it just now.
rebar.config
can specify the dependencies of all the applications in the umbrella project, but they are not necessarily run-time dependencies. Also, therelx
example from therebar.config
above shows how to include an app/lib (in this case,recon
) in the final production release, even if it is not a run-time dependency.This guide also expands on it a paragraph below:
The Rebar3 maintainers therefore just decided to keep a clear distinction between the applications that need fetching for the project to build or run (in
rebar.config
), and the run-time dependencies of each OTP application (in the.app
file) which may be part of the default OTP install, and would therefore not be included inrebar.config
. Other build tools in the ecosystem let you achieve similar results, but they default to including everything at run-time whereas Rebar3 asks of developers to always be specific in their intent.
-
-
adoptingerlang.org adoptingerlang.org
-
mark the workers as permanent or transient, so that if they fail they get restarted
restart
defines when a terminated child process must be restarted.- A
permanent
child process is always restarted. - A
temporary
child process is never restarted (even when the supervisor's restart strategy isrest_for_one
orone_for_all
and a sibling's death causes thetemporary
process to be terminated). - A
transient
child process is restarted only if it terminates abnormally, that is, with another exit reason thannormal
,shutdown
, or{shutdown,Term}
. https://erlang.org/doc/man/supervisor.html
- A
-
-
adoptingerlang.org adoptingerlang.org
-
The most commonly supported tool for this is kerl. Kerl is a wrapper around downloading, compiling, and loading various Erlang/OTP versions on a single system, and will abstract away most annoying operations.
Or use the Nix package manager's
nix-shell
.
Tags
Annotators
URL
-
- May 2020
-
blog.erlang.org blog.erlang.org
-
In OTP 22 we introduced the new experimental socket API. The idea behind this API is to have a stable intermediary API that can be used to create features that are not part of the higher-level gen_* APIs. We have now come one step further in our plan to replace the inet driver by making it possible to use the gen_tcp API with socket as an optional back-end. To make it easy to test with existing code using gen_tcp a new option {inet_backend, socket | inet} can be used to select the socket implementation instead of the default inet implementation.
Q1: So
inet
andsocket
are competing socket implementations then?Q2:
inets
is higher level abstraction layer on top ofinet
? (Just as HTTP is higher level than transport protocols.)Q3 (corollary of Q1 and Q2):
inets
could be then rewritten to usesocket
instead? (And used just likegen_tcp
with theinet_backend
option?)
Tags
Annotators
URL
-
-
muldoon.cloud muldoon.cloud
-
Programming languages These will probably expose my ignorance pretty nicely.
When to use different programming languages (advice from an Amazon employee):
- Java - enterprise applications
- C# - Microsoft's spin on Java (useful in the Microsoft's ecosystem)
- Ruby - when speed is more important then legibility or debugging
- Python - same as Ruby but also for ML/AI (don't forget to use type hinting to make life a little saner)
- Go/Rust - fresh web service where latency and performance were more important than community/library support
- Haskell/Erlang - for very elegant/mathematical functional approach without a lot of business logic
- Clojure - in situation when you love Lisp (?)
- Kotlin/Scala - languages compiling to JVM bytecode (preferable over Clojure). Kotlin works with Java and has great IntelliJ support
- C - classes of applications (operating systems, language design, low-level programming and hardware)
- C++ - robotics, video games and high frequency trading where the performance gains from no garbage collection make it preferable to Java
- PHP/Hack - testing server changes without rebuilding. PHP is banned at Amazon due to security reasons, but its successor, Hack, runs a lot of Facebook and Slack's backends
-
- Apr 2020
-
learnyousomeerlang.com learnyousomeerlang.com
-
If we refer to the CAP theorem, Mnesia sits on the CP side, rather than the AP side, meaning that it won't do eventual consistency, will react rather badly to netsplits in some cases, but will give you strong consistency guarantees if you expect the network to be reliable (and you sometimes shouldn't).
We start out with the TL;DR treatise: The mnesia database is not CP, nor AP. And it cannot be CA, because CA doesn’t make any meaningful sense. In short, it is broken with respect to the CAP theorem. https://medium.com/@jlouis666/mnesia-and-cap-d2673a92850
Tags
Annotators
URL
-
-
erlang.org erlang.org
-
Content-Length
Not mentioned anywhere (not even in the
inets
User's Guide), butContent-Length
is calculated automatically if it is not provided.
Tags
Annotators
URL
-
- Mar 2020
-
erlang-ls.github.io erlang-ls.github.io
-
- Feb 2020
-
blog.loadimpact.com blog.loadimpact.com
-
Tsung utilizes multiple CPUs better than perhaps any other tool I have seen
-
- Jan 2020
-
underjord.io underjord.io
Tags
Annotators
URL
-
- Nov 2019
-
nbviewer.jupyter.org nbviewer.jupyter.org
- Oct 2018
-
planeterlang.com planeterlang.com
-
- Sep 2018
-
-
This is a transcript of a talk given at ElixirDaze and CodeBEAMSF conferences in March of 2018, dealing with supervision trees and with the unexpected.
-
- Dec 2017
-
erlang.org erlang.org
-
If the entire tables are constant over a long time, you could generate them as modules. Nowadays, compile-time constants (even complex ones) are placed in a constant pool associated with the module. So, you could generate something like this: -module(autogen_table). -export([find/1]). find(0) -> {some_struct, "hello", ...}; ... find(99) -> {some_other_struct, <<"hi!">>} find(X) -> throw({not_found, X}). As far as I know, these constants will not be copied to the private heaps of the processes. The generated code will also give you the fastest possible lookup.
This is a pretty cool trick. So looks like a way to bypass the copying overhead is to make a function that only has constant outputs and doesn't actually compute anything.
-
-
www.ostinelli.net www.ostinelli.net
-
To summarize: without queuing mechanism: same Erlang node: 5.3 million messages/min; different Erlang nodes: 700 K messages/min. with queuing mechanism: same Erlang node: 5.3 million messages/min; different Erlang nodes: 2.1 million messages/min. The complete code to run this on your machine is available here. This whole ‘queuing idea’ is still an experiment, and I’d be more than delighted to hear your feedback, to see whether you are getting the same results, you know how to improve the concept or the code, or you have any considerations at all you would like to share.
I got here from the discord blog on how they optimized their performance and it looks like the trick is to batch messages when sending to remote nodes. Seems kinda obvious though that batching messages would improve performance.
A trick to keep in the back pocket.
-
- Feb 2017
-
spawnproc.github.io spawnproc.github.ioBPE1
-
-
jlouisramblings.blogspot.com jlouisramblings.blogspot.com