REBOL + Android : Configurando um ambiente para desenvolvimento no tablet.

Tenho um tablet Galaxy 10.1 que é utilizado basicamente em viagens. No resto do tempo ele fica bem paradão. Como existe uma versão de REBOL para Android, resolvi configurar um ambiente de desenvolvimento no tablet. Não é necessário nada de especial para a instalação dos programas. É possível configurar no celular mas, como não sou masoquista …

São quatro programinhas para instalar:

  1. O r3-droid.apk. É necessário baixar e instalar manualmente pois ainda não está disponível no Google Play.
  2. Um teclado para quem pretende programar. O Hacker’s Keyboard é uma boa pedida. Basta acessar o link e mandar instalar.
  3. Um editor de texto que possua algumas facilidades para o programador. A minha escolha recaiu sobre o Jota Text Editor. Também é só acessar o link e mandar instalar. Possui uma certa integração com REBOL, desde salientar a sintaxe (não é perfeita mas é melhor que nada e pode ser alterada/melhorada)até abrir o texto por uma aplicação (que pode ser escolhido o R3/Droid).
  4.  Como uso Linux e é mais complicado acessar os arquivos do tablet, uma solução simples seria o WiFi File Transfer que permite a transferência dos arquivos pela rede. Também é só baixar e instalar.

E é tudo. Podem existir outros programas melhores, mas foram as opções gratuitas que eu testei. No tablet, com o novo teclado e a integração do editor é relativamente confortável a criação e execução de programas. Algumas capturas de tela para mostrar como ficou:

A área de trabalho para o desenvolvimento ficou assim.O R3/Droid para testar os programas, o editor, um navegador (algumas páginas salvas na memória para recorrer em caso de dúvida) e um gerenciado de arquivos.

O R3/Droid sendo executado. Mais para testes já que ele aceita apenas uma linha para ser interpretada.

Teclado e o editor com sintaxe salientada (médio mas melhor que nada)

Acessando menu > file

temos acesso a opção “Open by Application”

… e podemos utilizar R3/Droid para que o programa sendo digitado seja enviado e executado (interpretado). É claro que optei por “Sempre”.Vale constar que é possível criar um atalho Ctrl+R > Open by Application.

Para a tranferências de arquivos entre o table e o desktop. Basta acessar pelo navegador no desktop para ler ou enviar arquivos do tablet.

Não é um desktop mas é um ambiente bem interessante.

Este artigo foi publicado primeiro em: Rebol (pt_BR)

Anúncios

REBOL – Mudança temporária

Passa a ser: http://guaracy.vacau.com/

Como a ideia era disponibilizar os scripts em REBOL de forma que os leitores(?) pudessem testar sem a necessidade de digitar (mesmo que fosse apenas copiar e colar) e já que a linguagem permite a facilidade, criei uma conta no 000webhost . Não sei se existem outros gratuitos melhores ou não, mas me pareceu legalzinho. Só na hora da instalação do wordpress de forma automatizada, não foi possível pois estavam atualizado os scripts. Nada que a forma manual não resolva. Se bem que achei legalzinho o Nibbleblog pela simplicidade e ter a opção de utilizar Markdown para digitar as entradas.

Como a versão 3 ainda possui alguns bugs no console e não permite copiar e colar um script com várias linhas que não sejam completas (a versão 2 não possui esse problema). não era muito legal ter que colar em um arquivo texto, salvar e executar pelo console. É claro que existe a opção (e algumas vezes poderá ser a melhor) de salvar o script em um arquivo para rodar posteriormente.

Por enquanto era isso.

REBOLution

Quando se apresenta uma nova linguagem (apesar de REBOL não ser uma nova linguage no aspecto desenvolvimento já que teve sua primeira versão em 1997) é tendência de muitos é ficar comparando com a sua linguagem preferida. Não faça isso. Essa negócio de “Dãããã, a minha linguagem do coração também faz isso então não vou perder o meu tempo olhando.” é coisa de n00b. Mas…

Como a esmagadora maioria das linguagens, REBOL (Relative Expression Based Object Language) foi influenciada por outras linguagens, no caso por List, Forth, Logo e Self e projetada por Carl Sassenrath (se você não conhece, importante ler um pouco sobre ele). A versão 3 foi liberada recentemente (12/12/12) sob licença aberta (Apache) apesar de ser conhecida desde 2008. É possível utilizar a versão 2 gratuitamente porém ela é proprietária. Pretendo me deter a versão 3 e a expectativa é que possuas as mesmas funcionalidades da versão 2 mais as melhorias. O porte para Android deve ocorrer em um futuro próximo (ou distante, não é possível prever por enquanto).

No momento é necessario clonar o repositório e compilar mas, assim que as coisas estiverem mais estáveis, será possível baixar na página principal da linguagem. Por enquanto é possível baixar a última versão compilada antes da abertura do código.

Por suas influências, a linguagem mistura código e dados de uma forma transparente, é interpretada, reflexiva e, talvez, a parte mais interessante, é a facilidade de criar dialetos (DSLs).

É interessante salientar que a linguagem não faz distinção entre maiúsculas e minúsculas (foreach = FOREACH), o espaço é necessário (1 + 1 = 2 ; 2+3 = erro) e o resto fica por sua conta. Como ainda está em desenvolvimento, a linguagem ainda possui alguns probleminhas e o ambiente integrado (REPL) também. Por exemplo, não é possível digitar expressões em mais de uma linha ou caracteres especiais (UTF-8). Mas você pode criar um script em um processador qualquer e executá-lo sem problemas.

Estando no REPL, se desejarmos maiores informações sobre ‘foreach‘, basta digitar:

>> help foreach
USAGE:
 FOREACH 'word data body
DESCRIPTION:
 Evaluates a block for each value(s) in a series.
 FOREACH is a native value.
ARGUMENTS:
 word -- Word or block of words to set each time (local) (word! block!)
 data -- The series to traverse (series! any-object! map! none!)
 body -- Block to evaluate each time (block!)

Aproveitando, alguns exemplos do foreach (repare a ausência de delimitadores na série):

foreach x [1 2 3 4] [
print x
]
1
2
3
4
bloco: [print x] 
foreach x [1 2 3 4 5] bloco
1
2
3
4
5
Foreach [X Y] [1 2 3 4 6] [Print [x y]]
1 2
3 4
6 none

Nos dias atuais pode nem ser tanta novidade, mas na época, acredito que não existia uma linguagem com tamanha transparência para trabalhar em rede. Para ler um arquivo de um local qualquer bastaria escrever “read http://www.rebol.com” e para executar localmente um script que estivesse em outra máquina bastava “do ftp://servidor/script.r“. Diversas linguagens permitem tarefas semelhantes mas, a grande maioria, necessita de alguma biblioteca externa ou algum include/use.

Outra característica é a grande quantidade de tipos de dados existentes. Nativamente possui string, inteiros, data, hora, monetário, pares, tupla, etc.. Por exemplo 10:30 + 0:40 = 11:10. Isto facilita muitas coisas, principalmente na criação de DSLs.

>> 3x4 + 1
== 4x5
>> 3x4 + 1x2
== 4x6
>> 127.0.0.1 + 0.0.25.1
== 127.0.25.2

A parte para avaliar e trabalhar com expressoes é onde REBOL (por enquanto estou escrevendo tudo em maiúsculas mas já está em discussão se continuará assim ou não) se sai muito bem. Quem conhece expressões regulares vai sentir muita facilidade. Um avaliador simples para verificar a validade de um CPF, onde ele deve conter 3 dígitos, um ponto, 3 dígitos, um ponto, 3 dígitos pode seguir um hifem ou uma barra e mais 2 dígitos pode ser simplesmente resolvido da seguinte forma:

num: charset "0123456789"
regra_cpf: [3 num "." 3 num "." 3 num ["-" | "/"] 2 num]
cpf?: func [cpf] [parse cpf regra_cpf]

>> cpf? "111.222.333-88"
== true
>> cpf? "111.222.333/88"
== true
>> cpf? "111.222.333/8"
== false
>> cpf? "111-222-333/88"
== false

Bem, isso é o basiquinho. É possível, por exemplo, avaliar um texto do tipo:

Venda 2 calculadoras (preço antigo) por R$20
Venda 3 calculadoras (2 pelo preço antigo e 1 pelo preço novo) por R$40

E obter como resposta: Foram vendidas 5 calculadoras por R$60.

Mas fica para a próxima.

Editado: Alguns exemplos em REBOL 2 que coloquei há algum tempo.