A intenção é ser extremamente permissivo na aceitação de patches. Para privilégios de commit, basta enviar sua primeira solicitação pull ou perguntar no Arc Language Forum .
Primeiro instale o Racket (v7.7 ou posterior) e, em um terminal, execute:
$ raco pkg install sha
$ git clone http://github.com/arclanguage/anarki
$ cd anarki
Você pode iniciar a resposta interativa com:
$ ./arc.sh
Ou comece as notícias (e a resposta) com:
$ cd apps/news
$ ./run-news
Se você é novo no Arc ou no Lisp em geral, um bom ponto de partida é o Tutorial .
Se você tiver problemas, verifique
(help)
no repl Anarki vem com News , um aplicativo estilo Hacker News .
Para executar News , primeiro escolha seu nome de usuário (do administrador),
$ cd anarki/apps/news
$ mkdir www
$ echo __username__ > www/admins
Você pode ter vários administradores. Adicione todos eles a www/admins
, separados por espaço em branco.
Aviso : se você já administra um site de notícias , a migração para esta bifurcação pode atrapalhar os dados do seu site. Venha falar conosco primeiro e certifique-se de fazer um backup antes da migração.
Agora abra o servidor,
$ ./run-news
Haverá uma pausa enquanto o servidor carrega, com algumas mensagens, então você verá o prompt arc>
.
Acesse http://localhost:8080. Clique em login e crie a conta com seu nome de usuário. Agora você deve estar logado como administrador.
(Não se preocupe com user break
ou error writing
mensagens.)
Para personalizar News , altere as variáveis na parte superior de apps/news/news.arc
. Para alterar a porta em que seu servidor é executado, modifique apps/news/run-news.arc
.
Quaisquer alterações interativas no prompt serão refletidas imediatamente no servidor, sem a necessidade de reiniciá-lo. Portanto, se você fizer alguma alteração em apps/news/news.arc
, poderá carregá-las digitando (load "apps/news/news.arc")
no repl. Se você parar o servidor ou ele morrer por algum motivo, os comandos inseridos anteriormente estarão disponíveis no histórico de comandos (pelo menos se você tiver o Readline instalado).
Você pode querer veicular notícias com segurança por HTTPS . Um exemplo de configuração para executar o Nginx com SSL como proxy reverso para notícias pode ser encontrado em anarki/extras/news.nginx.conf
.
Para que e-mails de redefinição de senha sejam enviados, você deve configurar uma conta de e-mail para enviá-los,
$ echo "[email protected]" > www/app-email ; email
$ echo "smtp.example.com" >> www/app-email ; smtp server
$ echo "[email protected]" >> www/app-email ; user
$ echo "1234" >> www/app-email ; password
Anarki possui testes automatizados completos.
# start in the anarki directory
$ ./arc.sh
arc> (load "tests.arc")
Anarki explicitamente não é restrito a manter a compatibilidade com versões upstream, e o status de compatibilidade pode variar muito de commit para commit, dependendo de quem tem interesse. Para ver uma lista das diferenças, digite (incompatibilities)
no repl. Se você fizer uma alteração incompatível, atualize esta lista.
Qualquer pessoa pode fazer alterações no Anarki, mas certifique-se de que os testes continuem sendo aprovados. Como contamos com o equipamento de teste unit-test.arc, execute também seus testes antes de confirmar qualquer alteração:
$ ./arc.sh (require 'lib/unit-test.arc/unit-test.arc) (carregar "unit-test.arc/tests.arc") (teste e erro em caso de falha)
Expressões de raquete podem ser avaliadas com a sintaxe ($ ...)
. Por exemplo, (($ crypto-random-bytes) 16)
obtém a função crypto-random-bytes
do Racket e faz uma chamada para ela.
Se você escreve muitos códigos Racket e deseja apenas usar o Anarki para parte de um projeto maior, você pode raco pkg install anarki
e usar o Anarki para escrever módulos Racket :
#lang anarki
(:provide function-for-use-in-racket)
(= racket-import ($.dynamic-require ...))
(load "relative/path.arc")
(def utility-for-use-in-racket (x)
(* x (racket-import x))
Observe que o Anarki não possui escopos de módulos privados; a seção (:provide ...)
existe apenas para facilitar a require
de uma biblioteca baseada em Anarki do Racket .
Anarki tem alguns problemas ao passar argumentos de palavras-chave para funções Racket , mas keyword-apply
de Racket pode ser usada para isso.