jhn_stdlib [(γ)][5] Build Status

A few thought experiments solidified as code.

Introduction ------------ This library consists mainly of code that arose out of my curiosity, either about Erlang and coding in general or concerning a pericular protocol or technique. So there is little of cohesion in purposes between the different library modules. But having published these I will continue to support these since the road to enlightenment is one without terminus. <a name='features'> Features/Modules -------- * String Processing Functions for binary encoded strings * blist -- drop in replacement for the lists module in stdlib * bstring -- drop in replacement for the string module in stdlib * mustache -- Mustache template rendering * Protocols * Encoding/decoding JSON/Erlang -- json [rfc4627][6], [rfc7159][7] * Encoding/decoding/evaluation JSON Pointer/Erlang -- json [rfc6901][8] * Validation JSON schema -- json [draft-zyp-json-schema-04][10], [draft-fge-json-schema-validation-00][11] * MessagePack -- msgpack [MessagePack][12]/Erlang * Bencoding -- bencoding * Encoding/decoding Syslog/Erlang -- syslog [rfc5424][13], [rfc5427][14] * Standards * Encoding/decoding URI/Erlang -- uri [rfc3986][15] * Encoding/decoding IP addresses/Erlang -- ip_addr [rfc4291][16], [rfc5952][17], [rfc4632][18] * Generating/encoding/decoding Timestamps Posix/Erlang -- timestamp [rfc3339][19] * Clients * A simple HTTP client -- shttpc [rfc7230][20], [rfc7231][21], [rfc7538][22], [rfc5789][23], [rfc2818][24] * Server/client for Syslog -- syslog [rfc5425][25], [rfc5426][26], [rfc6587][27] * Pull oriented data source abstraction * lazy -- abstracts different data sources as uniform lazy data * Data structures * Bloom filters -- bloom * Property lists -- plist * Prefix trees -- p_tree * Range trees -- r_tree * T-trees -- t_tree * Algorithms * Levenshtein distance -- levenshtein <a name='build'> Build ----- jhn_stdlib requires [rebar][1] to build, but provides make support to download and install rebar. To build jhn_stdlib, go to the jhn_stdlib directory and type: ```sh make ``` To make sure jhn_stdlib works on your platform, run the tests: ```sh make test ``` Two things might seem alarming when running the tests: 1. Warnings emitted by cover 2. En exception printed by SASL Both are expected due to the way Erlang currently prints errors. The important line you should look for is `All XX tests passed`, if that appears all is correct. <a name='install'> Install ------- If you want to install your own built version of jhn_stdlib add the ebin directory to your Erlang code path or move the jhn_stdlib folder into your release folder and make sure that folder is in your `ERL_LIBS` environment variable. <a name='contribute'> Contribute ---------- Should you find yourself using jhn_stdlib and have issues, comments or feedback please [create an issue here on GitHub.] [2] Patches are greatly appreciated, but since these libraries reflect my learning process and I have rather peculiar notions of code hygiene I may do extensive rewrites that does not in any way diminish the appreciation I feel or indeed [express.] [3] For a much nicer history, please [write good commit messages][4]. I know I really should. [1]: http://github.com/rebar/rebar "Rebar - A build tool for Erlang" [2]: http://github.com/JanHenryNystrom/jhn_stdlib/issues "jhn_stdlib issues" [3]: http://github.com/JanHenryNystrom/jhn_stdlib/blob/master/THANKS "thanks" [4]: http://github.com/erlang/otp/wiki/Writing-good-commit-messages "Erlang/OTP commit messages" [5]: http://en.wikipedia.org/wiki/Software_release_life_cycle "Software release life cycle" [6]: http://www.ietf.org/rfc/rfc4627.txt "The application/json Media Type for JavaScript Object Notation (JSON)" [7]: http://www.ietf.org/rfc/rfc7159.txt "The JavaScript Object Notation (JSON) Data Interchange Format" [8]: http://www.ietf.org/rfc/rfc6901.txt "JavaScript Object Notation (JSON) Pointer" [10]: http://tools.ietf.org/id/draft-zyp-json-schema-04.txt "JSON Schema: core definitions and terminology" [11]: http://tools.ietf.org/id/draft-fge-json-schema-validation-00.txt "JSON Schema: interactive and non interactive validation" [12]: http://msgpack.org/ "An efficient binary serialization format" [13]: http://www.ietf.org/rfc/rfc5424.txt "The Syslog Protocol" [14]: http://www.ietf.org/rfc/rfc5427.txt "Textual Conventions for Syslog Management" [15]: http://www.ietf.org/rfc/rfc3986.txt "Uniform Resource Identifier (URI): Generic Syntax" [16]: http://www.ietf.org/rfc/rfc4291.txt "IP Version 6 Addressing Architecture" [17]: http://www.ietf.org/rfc/rfc5952.txt "A Recommendation for IPv6 Address Text Representation" [18]: http://www.ietf.org/rfc/rfc4632.txt "Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan" [19]: http://www.ietf.org/rfc/rfc3339.txt "Date and Time on the Internet: Timestamps" [20]: http://www.ietf.org/rfc/rfc7230.txt "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing" [21]: http://www.ietf.org/rfc/rfc7231.txt "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content" [22]: http://www.ietf.org/rfc/rfc7538.txt "The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)" [23]: http://www.ietf.org/rfc/rfc5789.txt "PATCH Method for HTTP" [24]: http://www.ietf.org/rfc/rfc2818.txt "HTTP Over TLS (rfc2818)" [25]: http://www.ietf.org/rfc/rfc5425.txt "Transport Layer Security (TLS) Transport Mapping for Syslog" [26]: http://www.ietf.org/rfc/rfc5426.txt "Transmission of Syslog Messages over UDP" [27]: http://www.ietf.org/rfc/rfc6587.txt "Transmission of Syslog Messages over TCP"