You need a schedule, man
Overview
Have three kinds of projects/work:
-
money making (gotta buy bread)
-
first class (generally involves a large number of users and/or me having a lot of fun)
-
second class (satellite and toy projects)
PROJECT = ttt | |
DEPS = stuff | |
dep_stuff = git https://github.com/essen/stuff master | |
include erlang.mk | |
-include $(DEPS_DIR)/stuff/dist.mk | |
$(DEPS_DIR)/stuff/dist.mk: $(DEPS_DIR)/stuff ; |
== .erl .core | |
module.erl: header.hrl behavior.erl parse_transform.erl | |
module.core: | |
ebin/$(PROJECT).app:: $(ERL_FILES) $(CORE_FILES) | |
erlc ... $? | |
== .xrl .yrl |
% CI_OTP="OTP-17.4.1 OTP-17.5.3" make ci | |
/home/essen/ninenines/gun/kerl build git https://github.com/erlang/otp OTP-17.4.1 OTP-17.4.1 | |
Checking Erlang/OTP git repository from https://github.com/erlang/otp... | |
Building Erlang/OTP OTP-17.4.1 from git, please wait... | |
Erlang/OTP OTP-17.4.1 from git has been successfully built | |
/home/essen/ninenines/gun/kerl install OTP-17.4.1 /home/essen/erlang/OTP-17.4.1 | |
Installing Erlang/OTP git (OTP-17.4.1) in /home/essen/erlang/OTP-17.4.1... | |
You can activate this installation running the following command: | |
. /home/essen/erlang/OTP-17.4.1/activate | |
Later on, you can leave the installation typing: |
ERL_CFLAGS = -fPIC -I /usr/lib/erlang/erts-6.4/include -I /usr/lib/erlang/lib/erl_interface-3.7.20/include | |
ERL_LDFLAGS = -L /usr/lib/erlang/lib/erl_interface-3.7.20/lib -lerl_interface -lei | |
EPCAP_CFLAGS= -DHAVE_PCAP_CREATE | |
EXE_LDFLAGS = -lpcap $(ERL_LDFLAGS) | |
EXE_CFLAGS = $(EPCAP_CFLAGS) | |
EXE_CFLAGS = $(EPCAP_CFLAGS) -DEPCAP_RLIMIT_NOFILES=1 | |
all:: ../priv/epcap |
Have three kinds of projects/work:
money making (gotta buy bread)
first class (generally involves a large number of users and/or me having a lot of fun)
second class (satellite and toy projects)
-module(goldrush). | |
application:start(goldrush) | |
%% Start daemons under goldrush supervision tree. | |
start_daemon(Name, Module, Options) | |
stop_daemon(Name) | |
%% Daemons started this way must define: | |
start_link(Name, Options) |
-module(my_module). | |
-export([my_function/1, my_function/2]). | |
-export([infinite_loop/0, f/1, r/2, sort/1]). | |
-export([only_primes/1, is_prime/1]). | |
my_function(A) when is_integer(A) -> | |
my_function(A, 0); | |
my_function(A) when is_list(A) -> | |
my_function(list_to_integer(A), 0). |
-module(map_req). | |
-export([init/2]). | |
init(#{method := <<"GET">>} = Req, State) -> | |
cowboy_req:reply(204, Req), | |
{ok, Req, State}. |
A common concern with REST APIs is how do you version them? The answer is often something like put the version in the beginning of the URI path. But that’s a terrible advice. This prevents you to make small updates to your API, because you need to duplicate everything every time you increase the version.
A good way to version an API is to not do it. Instead, you can version the media types.