profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/ericmj/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.
Eric Meadows-Jönsson ericmj Gothenburg, Sweden https://ericmj.github.io/ @elixir-lang core team member and creator of the @hexpm package manager

elixir-plug/plug 2369

A specification and conveniences for composable modules between web applications

elixir-mint/mint 1023

Functional HTTP client for Elixir with support for HTTP/1 and HTTP/2.

elixir-ecto/postgrex 834

PostgreSQL driver for Elixir

ericmj/decimal 367

Arbitrary precision decimal arithmetic

elixir-ecto/db_connection 234

Database connection behaviour

batate/blacksmith 169

Data generation framework for Elixir

batate/shouldi 136

Elixir testing libraries with nested contexts, superior readability, and ease of use

elixir-mint/castore 69

Up-to-date certificate store for Elixir.

ericmj/erlware_commons 1

Erlware Commons is an Erlware project focused on all aspects of reusable Erlang components.

push eventelixir-lang/elixir

José Valim

commit sha 8fca53ad314501e193a4ab21ec2191a0f37600ce

Ensure deprecated macros emit warnings

view details

push time in 3 hours

push eventelixir-lang/elixir

José Valim

commit sha dac03b17c214689f940864de37c2286bed87d336

Ensure deprecated macros emit warnings

view details

push time in 3 hours

Pull request review commenterlang/otp

ssl: Fix signature algorithm selection for ECDSA

 get_cert_params(Cert) ->             _ ->                 undefined         end,-    {SignAlgo, Param, PublicKeyAlgo, RSAKeySize}.+    Curve = get_ec_curve(TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo),+    {SignAlgo, Param, PublicKeyAlgo, RSAKeySize, Curve}.++get_ec_curve(#'OTPSubjectPublicKeyInfo'{+                algorithm = #'PublicKeyAlgorithm'{+                               algorithm = {1,2,840,10045,2,1},

Done.

peterdmv

comment created time in 5 hours

pull request commentelixir-lang/elixir

Fix normalization of partial keyword list elements

:green_heart: :blue_heart: :purple_heart: :yellow_heart: :heart:

doorgan

comment created time in 6 hours

push eventelixir-lang/elixir

Dorgan

commit sha fb7179ff713c7fc9444307eb563c289a03505c1c

Fix normalization of partial keyword list elements (#11084)

view details

push time in 6 hours

PR merged elixir-lang/elixir

Fix normalization of partial keyword list elements

The Elixir.Normalizer lets us feed any arbitrary AST to the formatter, but if the user provides a list, and an element is a 2-tuple that is not one of the last elements, and the first element is a wrapped atom with format: :keyword metadata, then the formatter will happily print it as a keyword list element, despite it being invalid syntax, for example:

iex> opts = [literal_encoder: &{:ok, {:__block__, &2, [&1]}}]
iex> {_, _, [[tuple]]} = Code.string_to_quoted("[a: b]", opts)
iex> Macro.to_string([tuple, :not_a_tuple, tuple])
"[a: b, :not_a_tuple, a: b]"

With this PR we would get the expected output:

iex> Macro.to_string([tuple, :not_a_tuple, tuple])
"[{:a, b}, :not_a_tuple, a: b]"
+43 -1

0 comment

2 changed files

doorgan

pr closed time in 6 hours

PR opened elixir-lang/elixir

Fix normalization of partial keyword list elements

The Elixir.Normalizer lets us feed any arbitrary AST to the formatter, but if the user provides a list, and an element is a 2-tuple that is not one of the last elements, and the first element is a wrapped atom with format: :keyword metadata, then the formatter will happily print it as a keyword list element, despite it being invalid syntax, for example:

iex> opts = [literal_encoder: &{:ok, {:__block__, &2, [&1]}}]
iex> {_, _, [[tuple]]} = Code.string_to_quoted("[a: b]", opts)
iex> Macro.to_string([tuple, :not_a_tuple, tuple])
"[a: b, :not_a_tuple, a: b]"

With this PR we would get the expected output:

iex> Macro.to_string([tuple, :not_a_tuple, tuple])
"[{:a, b}, :not_a_tuple, a: b]"
+43 -1

0 comment

2 changed files

pr created time in 6 hours

pull request commenthexpm/hex_core

Validate api key permissions

@ericmj Yeah that sounds fine to me. As stated, just trying to get some clarity. So what I'm hearing and off-topic from this PR, but worth aligning on now I think is that we don't any granular validations (this includes meta validations that were going to go in hex_tarball). Does that sound right?

starbelly

comment created time in 6 hours

pull request commentelixir-ecto/postgrex

Fix invalid type error after failover

Maybe the same change should be done for the streaming of a prepared query?

I will review this soon but I just want to say the answer to this question is yes. :)

ok will do :)

chaodhib

comment created time in 7 hours

issue openederlang/otp

Cannot Call WX Copy Constructor

Describe the bug

It's impossible to call this copy constructor. The reason is that the color constructor above it matches a four element tuple (for {r, g, b, a}) and a wx_ref is also a four element tuple. Possible solutions might be to put record pattern matches above colors or to have color pattern matching check that at least their first element is a number.

To Reproduce

1> wx:new().
{wx_ref,0,wx,[]}
2> T = wxTextAttr:new().
{wx_ref,35,wxTextAttr,[]}
3> wxTextAttr:new(T).
** exception error: {{badarg,"colText"},{wxTextAttr,new,2}}
     in function  wxe_util:rec/1 (wxe_util.erl, line 110)

Expected behavior

It should not crash. It should return a reference to a new wxTextAttr instance.

Affected versions

OTP 24

created time in 7 hours

pull request commentelixir-ecto/postgrex

Fix invalid type error after failover

Maybe the same change should be done for the streaming of a prepared query?

I will review this soon but I just want to say the answer to this question is yes. :)

chaodhib

comment created time in 7 hours

issue commentkeathley/finch

Not all errors returned by request/3 are Mint.Types.error()

@lukebakken Published

lukebakken

comment created time in 8 hours

created tagkeathley/finch

tagv0.8.0

Elixir HTTP Client focused on performance

created time in 8 hours

push eventkeathley/finch

Chris Keathley

commit sha 7fd267d490f5dba4d1b596a84e5a6cf91b187cda

Bump version

view details

push time in 8 hours

pull request commenthexpm/hex_core

Validate api key permissions

Yeah there’s tension between docs/specs and what the server allows. Good point about the downsides.

It is tangentially related but we have some validations in hex_tarball module but eventually we want to have more. I feel like there it is more appropriate given hex_tarball hopes to encapsulate whatever we’d ever need to do with tarballs. For Hex HTTP API, as far as hex_core is concerned, we only implement the client side of things and we don’t have plans to implement the server side of things anytime soon or ever. So relying on the server to do validations seems appropriate here.

I don't have strong feelings. Months and months backs we discussed doing this as a way to save trips to the server for a few reasons, and we were all in agreement then, despite the con of having to update both. That said, I'm quite ok with ripping it out.

starbelly

comment created time in 8 hours

Pull request review commenthexpm/hex_core

Validate api key permissions

 keys_test(_Config) ->      {ok, {200, _, Key}} = hex_api_key:get(?CONFIG, Name), -    Permissions = [#{<<"domain">> => <<"api">>, <<"resource">> => <<"read">>}],+    Permissions = [#{domain => <<"api">>, resource => <<"read">>}],

I'd say keep atom keys IMO, the issue I ran into was atom values, not keys. Of course, having some context on why the server rejects binary values such as <<"api">> but accepts atom keys might help here.

starbelly

comment created time in 8 hours

Pull request review commenthexpm/hex_core

Validate api key permissions

 keys_test(_Config) ->      {ok, {200, _, Key}} = hex_api_key:get(?CONFIG, Name), -    Permissions = [#{<<"domain">> => <<"api">>, <<"resource">> => <<"read">>}],+    Permissions = [#{domain => <<"api">>, resource => <<"read">>}],     {ok, {201, _, Key2}} = hex_api_key:add(?CONFIG, Name, Permissions),     #{<<"name">> := Name2} = Key2,      {ok, {200, _, #{<<"name">> := Name2}}} = hex_api_key:delete(?CONFIG, Name2),++    ExpErr1 = io_lib:format("Non binary value ~p given for key ~s", [api, domain]),

Yeah, I agree. I suppose I have bias in that in rebar3_hex we would simply dump this to stdout. Other options would be :

  1. Return an atom, but wouldn't be very descriptive, but maybe it really doesn't have to be.
  2. Return a binary, still would be a little weird.
  3. Return a string or a binary that's not as descriptive, but doesn't end up as an io list.
starbelly

comment created time in 8 hours

Pull request review commenterlef/setup-beam

Add Windows to the mix

+Write-Output "Installer for Elixir for Windows not available"

Yeah, the other day I was wondering why some stuff was written as Shell script vs JavaScript, myself. I think it should only be so when execution is needed in the target platform (e.g. I want to get the Elixir version from Elixir to make sure the installation process was Ok) - but most other stuff could be converted to JS... anyway, I've linked this to the newer issue, so your comments will be ported over also. Thanks for the help.

paulo-ferraz-oliveira

comment created time in 9 hours

PR opened elixir-ecto/postgrex

Fix invalid type error after failover

This PR fixes https://github.com/elixir-ecto/postgrex/issues/550

The change to recv_parse_describe ensures that in case the Protocol & Query's types differ, the Query gets a new ref (to trigger an update to the Ecto cache) and gets the Protocol's types (both of these are done in describe_result/4).

Todo:

  • [ ] Maybe the same change should be done for the streaming of a prepared query?
+12 -16

0 comment

2 changed files

pr created time in 9 hours

pull request commenterlang/otp

observer: add button to trace all processes and ports

Makes sense. I pushed a change for that.

legoscia

comment created time in 10 hours

Pull request review commenterlang/otp

epp: Fix inconsistent handling of undefined pre-defined macros

 scan_ifdef(Toks, IfDef, From, St) ->     wait_req_skip(St, [ifdef]).  scan_ifndef([{'(',_Alp},{atom,_Am,M},{')',_Arp},{dot,_Ad}], _IfnD, From, St) ->-    case St#epp.macs of-	#{M:=_Def} ->+    case is_macro_defined(M, St) of+        true -> 	    skip_toks(From, St, [ifndef]);-	_ ->+        false -> 	    scan_toks(From, St#epp{istk=[ifndef|St#epp.istk]})     end; scan_ifndef([{'(',_Alp},{var,_Am,M},{')',_Arp},{dot,_Ad}], _IfnD, From, St) ->-    case St#epp.macs of-	#{M:=_Def} ->+    case is_macro_defined(M, St) of+        true -> 	    skip_toks(From, St, [ifndef]);-	_ ->+        false -> 	    scan_toks(From, St#epp{istk=[ifndef|St#epp.istk]})     end; scan_ifndef(Toks, IfnDef, From, St) ->     T = find_mismatch(['(',var_or_atom,')',dot], Toks, IfnDef),     epp_reply(From, {error,{loc(T),epp,{bad,ifndef}}}),     wait_req_skip(St, [ifndef]). +is_macro_defined(Name, #epp{macs=Macs}) ->+    case Macs of+        #{Name := undefined} -> false;

Good, so this can be resolved.

bjorng

comment created time in 10 hours

issue commenterlang/otp

process waits spawn_opt/5 more than 4 hours

So far I was not able to reproduce this issue.

I think it may be explained by the fact that voluntarily I can break connection between nodes only in a predictable and conventional way. My user rights in the environment where I observed this situation are limited: I'm not able to kill docker container neither with erl process (my application) nor with istio (networking).

I tried to reproduce the issue just by killing erl process on one of cluster nodes from inside the docker container shell, but this is handled correctly, and I observed only expected behavior.

vyacheslavik

comment created time in 10 hours

pull request commentelixir-ecto/postgrex

Require elixir v11+

:green_heart: :blue_heart: :purple_heart: :yellow_heart: :heart:

chaodhib

comment created time in 11 hours

push eventelixir-ecto/postgrex

Chaouki Dhib

commit sha 17e25445a06e73e9016b19695c1bb3ab4991166a

Require elixir v11+ (#554)

view details

push time in 11 hours

PR merged elixir-ecto/postgrex

Require elixir v11+

Since https://github.com/elixir-ecto/postgrex/pull/547, Postgrex requires elixir v11 or superior.

+1 -1

0 comment

1 changed file

chaodhib

pr closed time in 11 hours

PR opened elixir-ecto/postgrex

Require elixir v11+

Since https://github.com/elixir-ecto/postgrex/pull/547, Postgrex requires elixir v11 or superior.

+1 -1

0 comment

1 changed file

pr created time in 11 hours

Pull request review commenterlang/otp

epp: Fix inconsistent handling of undefined pre-defined macros

 scan_ifdef(Toks, IfDef, From, St) ->     wait_req_skip(St, [ifdef]).  scan_ifndef([{'(',_Alp},{atom,_Am,M},{')',_Arp},{dot,_Ad}], _IfnD, From, St) ->-    case St#epp.macs of-	#{M:=_Def} ->+    case is_macro_defined(M, St) of+        true -> 	    skip_toks(From, St, [ifndef]);-	_ ->+        false -> 	    scan_toks(From, St#epp{istk=[ifndef|St#epp.istk]})     end; scan_ifndef([{'(',_Alp},{var,_Am,M},{')',_Arp},{dot,_Ad}], _IfnD, From, St) ->-    case St#epp.macs of-	#{M:=_Def} ->+    case is_macro_defined(M, St) of+        true -> 	    skip_toks(From, St, [ifndef]);-	_ ->+        false -> 	    scan_toks(From, St#epp{istk=[ifndef|St#epp.istk]})     end; scan_ifndef(Toks, IfnDef, From, St) ->     T = find_mismatch(['(',var_or_atom,')',dot], Toks, IfnDef),     epp_reply(From, {error,{loc(T),epp,{bad,ifndef}}}),     wait_req_skip(St, [ifndef]). +is_macro_defined(Name, #epp{macs=Macs}) ->+    case Macs of+        #{Name := undefined} -> false;

It's my understanding that defined macros are bound to {none,[Expr]} in that map, so there should be no issue.

bjorng

comment created time in 11 hours

Pull request review commenterlang/otp

epp: Fix inconsistent handling of undefined pre-defined macros

 scan_ifdef(Toks, IfDef, From, St) ->     wait_req_skip(St, [ifdef]).  scan_ifndef([{'(',_Alp},{atom,_Am,M},{')',_Arp},{dot,_Ad}], _IfnD, From, St) ->-    case St#epp.macs of-	#{M:=_Def} ->+    case is_macro_defined(M, St) of+        true -> 	    skip_toks(From, St, [ifndef]);-	_ ->+        false -> 	    scan_toks(From, St#epp{istk=[ifndef|St#epp.istk]})     end; scan_ifndef([{'(',_Alp},{var,_Am,M},{')',_Arp},{dot,_Ad}], _IfnD, From, St) ->-    case St#epp.macs of-	#{M:=_Def} ->+    case is_macro_defined(M, St) of+        true -> 	    skip_toks(From, St, [ifndef]);-	_ ->+        false -> 	    scan_toks(From, St#epp{istk=[ifndef|St#epp.istk]})     end; scan_ifndef(Toks, IfnDef, From, St) ->     T = find_mismatch(['(',var_or_atom,')',dot], Toks, IfnDef),     epp_reply(From, {error,{loc(T),epp,{bad,ifndef}}}),     wait_req_skip(St, [ifndef]). +is_macro_defined(Name, #epp{macs=Macs}) ->+    case Macs of+        #{Name := undefined} -> false;

No, the value for your dummy macro would be represented as [{atom,Anno,undefined}], which is different from undefined used to mark a pre-defined macro currently without a value.

bjorng

comment created time in 11 hours

delete branch elixir-lang/ex_doc

delete branch : wm-autolink2

delete time in 11 hours

push eventelixir-lang/ex_doc

Wojtek Mach

commit sha 563f79ceb07754743d664adb38b6c09ce754b370

Add ExDoc.Language.autolink_doc/2 and autolink_spec/2 callbacks

view details

Wojtek Mach

commit sha 985f2eaf5e027cd71173c03b8192175d53856e42

Prepare for autolinking Erlang docs

view details

Wojtek Mach

commit sha 9df725bee8eb714a79efa7d5548f3f5664bb3cd2

walk -> walk_doc

view details

Wojtek Mach

commit sha 544b2b20c42db837b80349cbe91e646ffb39820e

Start moving code back to Autolink

view details

Wojtek Mach

commit sha 08399bf273c5005b681b04b3df2f299abd20f5e2

Initial support for autolinking Erlang docs

view details

push time in 11 hours