Poka Ijo is where i catalog my nearby things
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Ryan Rix 14cd2442e1 add uploads directory to gitignore 1 week ago
assets Thing cards that link to their parent 2 weeks ago
lisp splat! this was from phx_literate, i extended the readme a bit. 2 weeks ago
.gitignore add uploads directory to gitignore 1 week ago
Makefile add test rule to Makefile 1 week ago
README.org make it a bit easier to walk through readme 1 week ago
aesthetics.org make flash templates work 1 week ago
mix.lock switch to waffle from arc, store images in priv/uploads 1 week ago
page_controller.org start to define controller tests for ThingController 2 weeks ago
phoenix.org add uploads directory to gitignore 1 week ago
photo_uploads.org switch to waffle from arc, store images in priv/uploads 1 week ago
poka_ijo.org Set up database seeds 2 weeks ago
poka_ijo_web.org switch to waffle from arc, store images in priv/uploads 1 week ago
testing.org rename testing file 2 weeks ago
thing_controller.org Link to large image from thumbnail 1 week ago
things.org Pass params in to Thing.new(with_photos: true) 1 week ago
usersocket.org splat! this was from phx_literate, i extended the readme a bit. 2 weeks ago


Poka Ijo is my Inventory

This project is a repository of Org Mode formatted documents which describe and implement a web service written in Elixir using the Phoenix Framework. Rather than directly editing the source code, these documents are edited instead – source code, justification and the links between disparate modules and data-flows expressed in text as well as code.

poka ijo means "nearby things" in Toki Pona. Poka Ijo is a fairly simple tool:

  • a way for me to catalog the physical objects I possess,

  • to better organize what I possess,

  • to understand what I don't need or want,

  • to give those things an outlet, for others to put them to use.

Table of Contents

I expect a few components to come together for this Project:

  • A Data Model for Poka Ijo Things

    • attributes: name, id, URL, monetary value

    • attributes: file attachments, tags

    • "walk" the tree of objects

    • search for an object by name or metadata

  • Photo Uploads in Poka Ijo

  • a management frontend which allows me to:

    • Poka Ijo Thing CRUD to quickly add new items, floating or contained in another.

    • quickly attach photos and metadata to objects

    • some sort of score interface, "hot or not" but for my shit.

    • some sort of organization suggester based on object similarities

  • a public site which allows others to:

    • see what I am willing to part ways with

    • request an email or text message conversation over an item


There is a Makefile to make it easier to tangle the files. You will need Emacs and Org-mode installed for this to work. Some day all of this will be in Mix tasks that can contain the whole set of dependencies.

make tangle will tangle any org document which is newer than a handle left in _build. It's important to keep your tangled documents up to date with the file system, but for development it's likely that you're sending the Elixir code to a running IEx session, there will be an org-mode documentation providing for this at some point soon.

make init will tangle, download dependencies, and compile them.

Developing in a REPL and a Babel doc

Poka Ijo development requires a postgres database with a database called poka_ijo_dev. run shell:mix ecto.setup (or click on that link!)

Executing this code will allow you to send the org-babel block under point to the REPL. I don't know how that handles noweb, blocks but it kinda works. (it doesn't even tangle them before sending to REPL, i've been relying on the phoenix dev server file watch)

(use-package eval-in-repl
  (require 'eval-in-repl-ielm)
  ; i disable transient mark mode
  (defun eir-eval-in-iex ()
    "Provides eval-in-repl for Elixir."
    ;; Define local variables
    (let* ()
      (eir-repl-start "\\*Alchemist-IEx\\*" #'alchemist-iex-run t)
      (eir-send-to-iex (buffer-substring-no-properties (point) (mark)))))

  (setq eir-repl-placement 'left)
  (setq eir-jump-after-eval nil)
  (setq eir-ielm-eval-in-current-buffer t))

(use-package org-babel-eval-in-repl
  :after ob
  (add-to-list 'ober-org-babel-type-list '("elixir" . (eval-in-repl-iex eir-eval-in-iex)))
  (evil-define-key 'normal 'org-mode-map (kbd "C-<return>") #'ober-eval-in-repl)
  (evil-define-key 'normal 'org-mode-map (kbd "M-<return>") #'ober-eval-block-in-repl))

Alchemist runs an IEx shell:

(use-package alchemist)
(alchemist-iex-run " -S mix phx.server")

Run this with Alt-Return to disable colors and see the IEx shell in action. You can run any1 source block in this fashion.

alias PokaIjo.{Repo,Thing,Photo}
IEx.configure(colors: [enabled: false])

To run tests use mix test.watch">mix test.watch.



Some restrictions apply, segments that are part of a noweb block will need to be run in the module-level block…