README.md

# Erlang Utility Modules

[![build](https://github.com/saleyn/util/actions/workflows/erlang.yml/badge.svg)](https://github.com/saleyn/util/actions/workflows/erlang.yml)

**Author** Serge Aleynikov <serge(at)gmail.com>

## Installation

- Add dependency in `rebar.config`:
```erlang
{deps,
 [% ...
  {util, "~> 1.0"}
 ]}.
```

## Content

| Module                    | Description                                                                          |
| ------------------------- | ------------------------------------------------------------------------------------ |
| decompiler                | decompiles modules and functions (useful for verifying accuracy of code generation)  |
| csv                       | CSV parsing and loading data to MySQL                                                |
| env                       | environment variables substitution, path normalization                               |
| file_log_reader           | Periodically read an append-only log file and parse newly added data                 |
| iif                       | Ternery if function including `iif/3`, `iif/4`, `ife/3`, `ife/4` parse transforms    |
| io_lib_pretty_limited     | Print term to binary by constraining the output size                                 |
| gin                       | Convenient parse transform for `in(Value, [A,B,C])` type of guards                   |
| hex                       | Hex to bin conversion                                                                |
| listx                     | Miscelaneous list handling functions                                                 |
| osx                       | Execution of os commands with returned stdout and exit status                        |
| pcap                      | reader/writer of packet capture files (tcpdump, wireshark)                           |
| restrict_remsh_mod        | to be used for remote shells to restrict `q()`, `init:stop()`, `erlang:halt()`, etc. |
| smtp                      | SMTP client supporting tcp and ssl protocols                                         |
| sntp                      | simple SNTP client                                                                   |
| str                       | stringification functions including `str/1` and `str/2` parse transforms             |
| stringx                   | miscelaneous string functions                                                        |
| throttle                  | implements a rate limitting algorithm                                                |
| user_default              | extending shell with useful debugging and profiling commands                         |
| build-aux/md-to-edoc.awk  | AWK script for converting `README.md` files to `overview.edoc`                       |

Additionally, the following Elixir modules are included:

| Module       | File             | Description                                                                    |
|--------------|------------------| -------------------------------------------------------------------------------|
| CompileTime  | compile_time.ex  | Evaluate lambdas at compile time                                               |

## Documentation

* See [project documentation](https://saleyn.github.io/util)

This project implements an extension of `EDoc` documentation by using the color scheme similar
to `GitHub`, and generate the `overview.edoc` from the `README.md`.

In order to use this feature, modify your `Makefile` to include:

```
-include build-aux/docs-addon.mk

build-aux/docs-addon.mk:
	@echo "Fetching build-aux/docs-addon.mk" && \
		mkdir -p build-aux && \
		curl -s -o build-aux/docs-addon.mk https://raw.githubusercontent.com/saleyn/util/master/build-aux/docs-addon.mk
```
Also in your `rebar.config` add:
```
{edoc_opts, [{overview,        "build-aux/overview.edoc"},
             {stylesheet_file, "build-aux/edoc.css"},
             {title,           "Project title used by rebar and also inserted as title to the index.html"},
             {keywords,        "HTML meta keywords (comma-delimited) for search engine crawlers"}, 
             ...]}.
```
NOTE: the `keywords` option is not specific to `EDoc` but used by the HTML reformatting make
file `docs-addon.mk`.

This will add the following targets to your `Makefile`:

- `docs` - Make documentation from source code
- `gh-pages` - Create GitHub pages for the current project
- `get-version` - Show application release version from the `*.app.src` and `rebar.config`
- `set-version` - Set the version number for the above `(make set-version version=X.Y.Z)`
- `clean-docs`  - Remove the generated files in the `doc` directory

## Elixir

To add functions from `user_default.erl` to Elixir's `iex` shell, add `~/.iex.exs` file
containing:
```
import :user_default
```

## Download

* [GitHub](http://saleyn.github.io/util)