Building a Concurrent System Elixir in Action Chapter 7. The GenServer handle_call function returns state to the GenServer, which messages it back to the caller. You can also spawn a worker process, return state to the GenServer instructing it not to message back to the caller, then send a message directly from the spawned worker function.

#LearningElixir #MyElixirStatus #ElixirInAction

Building a Concurrent System

Elixir in Action: Chapter 7

Dinosaur Dance

GenServer Powered Todo Server Elixir in Action: Chapter 6 Exercise

  • Functions are applied to data.
  • Functions are applied to data.
  • Functions are applied to data!!

My Python-brain still sees TodoList.add_entry(todo_list, new_entry) as an object method call and not a Module.function to modify todo_list.

Additionally, when inside a GenServer cast or call I’m thinking, “Where did the todo_list come from?” It came from the GenServer and is the GenServer’s state.

Brain is slowly switching to functional mode.

#LearningElixir #MyElixirStatus #ElixirInAction

GenServer Powered ToDo Server

Elixir in Action: Chapter 6

Dinosaur Dance

Generic Server Processes Elixir in Action: Chapter 6.

I knew about the GenServer handle_call function for synchronous message handling and handle_cast for async, and learned about handle_info for “non-GenServer-specific” message handling.

The chapter provides a clean-up timer as an example.

Implements a simple GenServer which is a big help in understanding the internals.

#LearningElixir #MyElixirStatus #ElixirInAction

Generic Server Processes

Elixir in Action: Chapter 6

Dinosaur Dance

[Data Abstractions(https://rgacote.github.io/dinosaurdance/posts/elixir-in-action-3rd-edition/chapter-04/).

I found that typing and testing all the small code snippets added to my Elixir “muscle memory” and seeing what standard practices look like. For example, when updating the todo list example, I would not have thought of passing a lambda function for the update vs. just passing new data. The lambda function provides much more flexibility at the cost of some slight complexity increase (at least I’m still seeing it as a complexity increase at this stage).

I need to remember that anonymous functions don’t need to be simple one-liners.

#LearningElixir #MyElixirStatus #ElixirInAction

Data Abstractions

Elixir in Action: Chapter 4

Dinosaur Dance

Control Flow Elixir in Action: Chapter 3 opens with an introduction to pattern matching, with details on tuples, lists, maps, bitstrings, binaries, and of course functions, then delves into function guards to implement extended pattern matching in functions.

Multi-clause anonymous functions were new to me:

test_num = fn x when is_number(x) and x < 0 -> :negative x when x == 0 -> :zero x when is_number(x) and x > 0 -> :positive end

Started working more with the Stream module.

#LearningElixir #MyElixirStatus #ElixirInAction

Control Flow

Elixir in Action: Chapter 3

Dinosaur Dance

Building Blocks Elixir in Action: Chapter 2 dives into the nitty gritty of what you need to know to get started programming Elixir. From IEx and code organization to variables, types, operators, and the runtime.

I finally clicked on the use of & in lambdas. The syntax always looked foreign to me and I kept thinking there was somehow more magic going on. I think The Erlangelist macro articles helped clear that up for me.

The following are equivalent:

lambda = fn a, b, x -> a + b - c lambda = &(&1 + &2 - &3)

#LearningElixir #MyElixirStatus #ElixirInAction

Building Blocks

Elixir in Action: Chapter 2

Dinosaur Dance

Overview of Erlang/Benefits of Elixir

Elixir in Action: Chapter 1 is a high level overview of the technologies on which Elixir is built: Erlang and the BEAM.

I’ve always benefitted from being familiar with the level below where I was programming. In Python, I’d look at the AST and bytecode; in Pascal, the p-code; in C, the assembly code, and in assembly code I had hardware emulators (and Soft-ICE back in the day).

Notable Quote: “Unless a system is responsive and reliable, it will eventually fail to fulfill its purpose.”

#LearningElixir #Elixir #ElixirInAction

Overview of Erlang/Benefits of Elixir

Elixir in Action: Chapter 1

Dinosaur Dance

Distracted by Saša Jurić’s old The Erlangist blog referenced in the preface. I’m particularly interested in the “Why Elixir” and six-part “Understanding macros” posts.

Back to the book in a day or so.

#LearningElixir #Elixir #ElixirInAction

The Erlangelist

Restarting

Almost a year since my last post. Finished my last Python project so this old brain no longer needs to try jumping between Python and Elixir.

Planning to start working through Elixir in Action, Third Edition by Saša Jurić. But first, finish watching some ElixirConf2024 videos I could not watch in real-time. Then, on to the learning (fun)!

#LearningElixir #Elixir #Python #ElixirConf

Elixir in Action, Third Edition

Fully updated to Elixir 1.15, this authoritative bestseller reveals how Elixir tackles problems of scalability, fault tolerance, and high availability.</b> Thousands of developers have learned to build applications in Elixir by using Saša Jurić’s Elixir in Action</i>. You’ll skip the programming basics or 101 introductions; this book builds on your existing knowledge to get you quickly writing real Elixir code. Along the way, you'll develop an appreciation for, and considerable skill in, functional and concurrent programming. Inside Elixir in Action, Third Edition</i> you’ll find: Updates for Elixir 1.15</li> Elixir modules, functions, and type system</li> Functional and concurrent programming</li> Introduction to distributed system design</li> Creating deployable releases</li> </ul> Fully updated to Elixir 1.15, this book contains new coverage of working with application configuration and the latest OTP releases. It teaches you the underlying principles and functional concepts of Elixir, and how each piece fits into the bigger picture of building production-ready systems with Elixir, Erlang, and the OTP framework.

Manning Publications

It’s All About the Memory

“As garbage collection once freed developers from the shackles of memory management, Elixir is here to free you from antiquated concurrency mechanisms and bring you joy when writing concurrent code.” José Valim

#LearningElixir #Elixir #ProgrammingElixirBook

It's All About the Memory

One minute into the Programming Elixir book’s foreward and the focus is unlike any other programming book I’ve read. The foreward by José Valim spotlights the historic necessity of keeping, mutating, and freeing single piece of memory memory-limited computers. Computers are no longer getting significantly quicker. We now get more compute power through multiple CPU cores. Throughput is parallel. Managing shared memory across multiple CPU cores is complex and error prone.

Dinosaur Dance