I have been a big fan of Elixir for several years, but until recently I had never done any Real Programming™ in it. However, I’m happy to say that I have now published about 25K lines of code (mostly Elixir) and data (mostly TOML).
Pete’s Alley is an early public prototype of a web server for the disabled community. At present, it consists of two main areas, Catalog and Content. The Catalog indexes relevant resources; the Content includes articles (e.g., Essays, HowTos, Overviews).
The architecture and coding style are strongly influenced by Dave Thomas. For example:
- APIs are defined by files of
- Functions and modules tend to be short and cohesive.
- The Phoenix app contains almost no “business logic”.
- White space is used freely in the code and data files.
The user interface is intended to be accessible, consistent, and simple. So, for example, it should play nicely with most screen readers and respond reasonably to changes in resolution.
Although Pete’s Alley is implemented in Phoenix, it does not currently use Ecto or a conventional database. Instead, it stores persistent information in the system file tree and keeps transient data in Actors.
The server’s basic data structure is a tree of TOML-encoded maps, with text strings (including some Markdown) as the leaf nodes. This is loaded (initially and as desired) from the file tree.
Various checking, indexing, and optimization tasks are performed at this time, in an effort to increase efficiency and reduce error. For example, the keys in each TOML file are checked against a schema and cross-file references are checked for consistency. There is also a custom web crawler that checks both internal and external links.
Almost every function has a
@spec declaration and most of the public functions have
@doc declarations. Several dozen
doctest entries and some explicit test files provide a good start on a sanity check for the code.
As the prototype is rolled out, various issues will no doubt emerge. There are also some back-burner issues such as adding tests and keeping Dialyzer happy. It would also be great to get some design and implementation feedback; as a solo developer, I only get feedback on occasional decisions.
There are clearly a number of ways that Pete’s Alley could be extended. For example, adding support for user accounts could enable persistent session history, user preferences, etc. A graph database (e.g, Neo4j) could leverage the metadata (e.g., references, tags) in the data.
There also some nascent sub-projects, such as Perkian (a turnkey distribution of blind-friendly applications). Finally, because Pete’s Alley is intended as a crowd-sourced effort,
a great deal of outreach and social interaction is on the horizon.
Please feel free to contact me with comments and questions. I would also be happy to discuss contracting opportunities in development, documentation, etc.