/highstorm

Primary LanguageElixirMIT LicenseMIT

HIGHLY EXPERIMENTAL AND IN ACTIVE DEVELOPEMENT: USE AT YOUR OWN RISK

Highstorm

Datalog, git-style data archival, pathom, and other related ideas for Elixir.

Assume the following:

  • undocumented
  • untested
  • unfinished
  • not intended for production use

More akin to a scratchpad or and incubator for ideas.

Development Setup

All of these setup steps were tested on MacOS 11.2.1 on 2/23/2021

To start your Phoenix server:

  • Install Git: https://git-scm.com/downloads (unnecessary if using Gitpod)
  • Install Visual Studio Code: https://code.visualstudio.com/Download (unnecessary if using Gitpod)
  • Setup Development Environment (see options below, local, devcontainer, gitpod)
  • Install dependencies with mix deps.get
  • Start database: docker-compose up -d db (unnecessary if using devcontainer)
  • Create and migrate your database with mix do ecto.create, ecto.setup
  • Install Node.js dependencies with cd assets && npm install && cd ..
  • Start Phoenix endpoint with iex -S mix phx.server

Now you can visit localhost:4000 from your browser.

Ready to run in production? Please check our deployment guides.

Local

  • Install Elixir
  • mix do local.hex --force, local.rebar --force
  • mix archive.install hex phx_new
  • Clone Repo: git clone git@github.com:naramore/highstorm.git
  • Open Project in VSCode
  • Install all Recommended VSCode Extensions when prompted

devcontainer

NOTE: if you have issues with ElixirLS losing connection, add more memory to Docker

  • Install Docker
  • Clone Repo: git clone git@github.com:naramore/highstorm.git
  • Open Project in VSCode
  • Create environment file: echo "EARTHLY_GLOBAL_RUNPATH=${HOME}/.earthly" > .env
  • Install Remote - Containers Extension
  • Click the Remote "Quick Access" status bar item (green, bottom-left corner) and select: Remote-Containers: Reopen in Container, or select the Reopen in Container when prompted by VSCode.
  • Wait for container to build and load...

Gitpod

CI/CD

Install Docker and earthly.dev

  • Run analyses: earthly +analyses
  • Run tests: earthly +test

TODO

  • meddle (interceptors)
  • oath (data contracts/specifications)
  • entry (Access shortcuts)
  • stream_data_utils
    • investigate? whatyouhide/stream_data#97
    • utilities: functions, datetimes, shrinking
    • stateful: fsm, statem, component, cluster, dynamic_cluster
    • targetted: target, sa
    • misc: suite, symbolic, temporal, mocking, grammar
  • diff (List.myers_difference/3-ish for all data)
    • types:
      • String -> String.myers_difference/2
      • List -> List.myers_difference/3
      • MapSet -> {a_only, b_only, both} (treat elements atomically)
      • Tuple -> List.myers_difference/3
      • Map -> ???
      • Keyword -> similar to Map, but ordered?
      • Improper List -> {proper_myers_difference, improper_diff}
      • Struct -> {struct, map_only_a, map_only_b, map_both}
      • Any -> ???
      • Others? -> Range, Date.Range, Date, Time, (other time related structs),
  • annex (git)
  • delve (pathom)
  • basis (datalog)
  • ivy (ETS + datalog)

Followups