radar

radar

The Elixir Toy Robot (self-published)

:wave: You might remember me as the author of Joy of Elixir: https://forum.elixirforum.net/t/joy-of-elixir-self-published-free/

I’ve got a new book out which shows you how to do the Toy Robot exercise in Elixir:

The first 6 chapters of the book cover how to solve the common part of the exercise. Chapter 7 (coming soon) covers processes and supervision trees while building the foundations of a multiplayer Toy Robot game. Chapter 8 will finish that game.

I view this book as a “sequel” to things like Joy of Elixir, the getting started docs for Elixir or Elixir School. It’s a real (enough) project with real problems and I hope people enjoy reading it and following along.

Let me know what you think in this thread!


Table of Contents

  • Introduction
  • Introducing the Toy Robot
    • Simplifying the problem
    • Creating the application
    • The MOVE command
    • Moving west
    • Moving north and south
    • Moving in the right direction
    • Turn left!
    • Turn right!
  • Catching bugs
    • Finding the bugs within
    • Regression testing the turn_right function
    • Regression testing the move function
    • Regression testing the move_west function
    • Regression testing the move_north and move_south functions
    • Jumping back to the manual test
    • Reflections
  • Placing the robot on a table
    • The Table module
    • The missing link
  • Building our simulation
    • Moving a robot, within a simulation
    • Turning a robot, within a simulation
    • Reporting the robot’s position
  • Reading and handling commands
    • The Command Processor
    • The Command Handler
    • The Command Runner
    • Piecing it all together
  • Building the CLI
    • Reading commands from a file
    • Verifying the robot’s behaviour
    • Conclusion
  • The Toy Robot Game
  • Building a game
    • A single player game
    • Let it crash!
    • The Game Server

Most Liked

radar

radar

radar

radar

This book is now content complete! :tada:

I’ve covered all the content I set out to cover in this book, and so now we’ve got plenty of words covering:

  • How to build an Elixir project from scratch
  • Doctests
  • ExUnit tests
  • GenServers
  • Supervisors
  • Registries

It’s a smidge over 60,000 words, and about 220 pages.

I’m going to spend this next week reading through it myself and making sure everything is as correct as it can be and then I would say this book is done!

narand

narand

Seems interesting! Could you share one or two sample pages from the PDF?

radar

radar

No issue tracker so to speak, but if you email me (me@ryanbigg.com) with the page number where you found the mistakes and a bit of context around them, I should be able to fix them up quick smart!

Here’s a short version of the workflow of writing the book:

  1. Write in an ERB (Embedded Ruby) version of Leanpub’s Markdown
  2. Run my ERB parser script to convert my ERB into Leanpub’s Markdown
  3. Push it up to GitHub (for version control)
  4. Manually copy the files over to a Dropbox folder that Leanpub shares with me
  5. (Optionally) Check the “Notify readers of an update”
  6. Hit “Publish”

The ERB part of the process exists because there’s some fiddly Leanpub-specific syntax that I can automate away with some pretty basic Ruby. (This part is not written in Elixir yet because I wrote it back when I only knew Ruby :wink: )

Another thing is that I use VS Code’s file-shortcuts.code-snippets file to have tab-complete for common code blocks within my books. I configure it like this:

{
  "Code block for robot.ex file": {
    "prefix": "robot.ex",
    "body": [
      "<% elixir title: \"lib/toy_robot/robot.ex\" do %>",
      "  $1",
      "<% end %>"
    ],
    "description": "Code block for robot.ex file"
  },

Then I can type ro.ex and hit <Tab> and it will fill it out to be:

<% elixir title: "lib/toy_robot/robot.ex" do %>
  [cursor goes here]
<% end %>

Then if I put in code in that box and hit <Tab> again, it will jump to the end of it. That speeds up writing a bit!\

AstonJ

AstonJ

Looks good Ryan, congrats on writing another book :023:

Where Next?

Popular in Books Top

CinderellaMan
Create a cryptocurrency trading bot in Elixir (YouTube videos, ebook pay what you want) <span class="hashtag-icon-placeholder"></span>eli...
New
PragmaticBookshelf
Bruce Tate @redrapids edited by Jacquelyn Carter @jkcarter OTP is the heart of the rapidly growing Elixir, the functional language at th...
New
wintermeyer
At https://elixir-phoenix-ash.com I publish training material for Elixir and Phoenix. Text base tutorials which start at zero. Recently I...
New
AlchemistCamp
EARLY ACCESS (currently in writing, estimated length: 40 pages) Hi. I’m Mark and over the past two and a half years, I’ve been teaching ...
New
New
AstonJ
by Fred Hebert This book intends to be a little guide about how to be the Erlang medic in a time of war. It is first and foremost a col...
New
peerreynders
Don’t forget you can get 35% off the ebook with your forum discount, use code ‘devtalk.com’ :023: Available in beta now
New
AstonJ
By Simon St. Laurent If you’re new to Erlang, its functional style can seem difficult, but with help from this hands-on introduction, y...
New
shankardevy
Dear Elixir Alchemists I’m happy to share that I’m working on my 2nd series of books (See my first one here) and this time it’s about As...
New
peerreynders
Don’t forget you can get 35% off the ebook using the code: devtalk.com :023: Note: Check out this thread for help running code in lat...
New

Other popular topics Top

peerreynders
Manning 2016 Halloween weekend sale via Deal of the Day Friday, October 28 - Half off all MEAPs - code WM102816LT Saturday, October 29 ...
326 29600 154
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
yawaramin
In the Dialyzer docs ( http://erlang.org/doc/man/dialyzer.html#requesting-or-suppressing-warnings-in-source-files ), there is a way to tu...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New

We're in Beta

About us Mission Statement