anchor.diff:  %%%===================================================================
   %%% Internal functions
   %%%===================================================================
  +
  +try_connect(Node, #state{nodes=Ns} = State) ->
  +    case maps:is_key(Node, Ns) of
  +        true ->
  +            lager:info("node ~p is already known/connected", [Node]),
  +            {true, State};
  +        false ->
  +            case net_kernel:connect_node(Node) of
  +                true ->
  +                    lager:info("successfully connected to node ~p", [Node]),
  +                    Info = #node_info{node=Node, last_seen=statser_util:seconds()},
  +                    Ns0 = maps:put(Node, Info, Ns),
  +
  +                    % publish new/updated node
  +                    gen_server:cast(self(), {publish, Node}),
  +
  +                    {true, State#state{nodes=Ns0}};
  +                false ->
  +                    lager:warning("connecting to node ~p failed", [Node]),
  +                    {false, State};
  +                ignored ->
  +                    lager:warning("connecting to node ~p failed - local node not alive", [Node]),
  +                    {ignored, State}
  +            end
  +    end.
  
positive.code: %%                                  {stop, Reason, State}
  %% @end
  %%--------------------------------------------------------------------
  handle_cast(_Msg, State) ->
      {noreply, State}.
  
  
negative.code: %%                                   {stop, Reason, State}
  %% @end
  %%--------------------------------------------------------------------
  handle_call({connect, Node}, _From, State) ->
      lager:info("trying to connect to node ~p", [Node]),
  
      {Reply, State0} = try_connect(Node, State),
      {reply, Reply, State0};
  
  handle_call(get_nodes, _From, State) ->
      Nodes = maps:values(State#state.nodes),
  