SPEAKING COMMUNITIES Module -> Beam File -> chunks of module meta data w/:atoms - Chunks were in Latin-1, but now they are UTF-8 - So now you must use Erlang 20 -
(RuntimeError) could not set breakpoint, you are running on an earlier OTP version than OTP 20 (iex) lib/iex.ex:647: IEx.break!/4 ** (RuntimeError) could not set breakpoint, module URI was not compiled with debug_info (iex) lib/iex.ex:647: IEx.break!/4 break! URI.decode_query/2 - Dbgi chunk - allow Elixir metadata to be emitted -
- Property Testing (maintainability) - "Property-based testing is a technique for testing your code by considering general properties of the functions you write. Rather than using explicit values in your tests, you instead try to de ne the types of the values to feed it, and the properties of the results produced." --pragdave - Bene t: test invariants and things you might not have considered when writing manual tests... - Releases (reliability) ~ long term goal - use Distillery for now -
tell people to write "modules and functions" - A de nition for contexts: "Dedicated modules that expose and group related functionality" - New directory structure for 1.3 - see Werewolf repo from LA Elixir -
Experienced team started on 1.1 and went to 1.3...Lessons... - "Framework plays an important role in determining the code organization. Even as experienced devs, we simply stuck to defaults promoted by Phoenix at the time." - "It's much harder to refactor the code post-fact. Having worked on some terrible legacy (and sadly produced some of my own), I strongly feel that your only chance of keeping the control of your code is to pay attention to it from the very start.* -
"Keeping the Phoenix part of the code (controllers, sockets) focused only on HTTP related tasks, basically making it just the interface to the rest of the system is a very good way to structure any production app." - https://elixirforum.com/t/contexts-a-barrier-too-high-for- newbies/5929/19 -
NewRelic, AppSignal, etc. - All implement their own data collection agents on your server - A basic APM (application performance monitoring) library interface that handles the data collection for the Erlang VM. - Data collection must not reduce your application to single thread performance (sending a reporting request on every single HTTP request) - Metrics should provide actionable insights for non- experts -
Instrumenter (...let's give it to compile time hooks into application events such as Ecto.Query) - Feature: You just write a function to collect the data you want - Feature: Set a breakpoint from the browser (via Plug) - Developer Dashboard (/dashboard endpoint) - currently there is a phoenix stats library -
- Body Multerer - Patience: Using Phoenix.Presence in a Primary Care Clinic - Keith Gautreaux - Keep an Eye on The Sky with Nerves and Phoenix - Je Smith - Anything Nerves... -