Assim que comecei a me interessar pelo Interplanetary File System procurei verificar se na lista das linguagens das implementações da API estava o Smalltalk. Não estava.
Este post marca o início das publicações do meu canhestro esforço para prover uma implementação usando Pharo Smalltalk. IFPS (Interplanetary File System) fornece uma orientação sobre como usar um gateway local que expõe um serviço RESTFul que pode ser usado para implementar a API em outras linguagens. A implementação de referência usa a linguagem Go (golang). A API REST cobre a quase totalidade(?) dos comandos.
P.S.: Há uma proposta similar para a GSoC:
Inicialmente foram implementados os comandos #version e #cat:. A seguir vamos dar uma breve introdução prática sobre como são usados estes comandos no IPFS e no Pharo Smalltalk. Para um mergulho mais extenso na teoria leia a documentação do Pharo e do IPFS.
Para instalar o IPFS siga as instruções em Install IPFS. A instalação é bem simples e não exige que você seja um administrador. Instalei no Mac OSX e também no Windows sem nenhum problema.
Vamos experimentar um pouco no command shell.
No diretório ipfs já havíamos criado o subdiretório test_dir.
Neste diretório existem vários arquivos. Para colocá-los todos de uma vez no repositório do ipfs usamos o comando add -r.
Cada arquivo é representado por um digest (hash). Vamos nos fixar no arquivo linhas.txt.
Observe que o conteúdo do arquivo (representado pelo hash QmVWCXgVq48rG38jpBP79NdSSFLxpvS8B9yVopDk7CfN61) agora também aparece no repositório do ipfs (o que é revelado pelo comando ipfs cat).
Você pode pensar no repositório como sendo distribuído. Isto significa que o seu arquivo não está apenas no seu nó ipfs mas já está disponível na rede peer to peer do ipfs e pode ser acessado através do gateway da Internet. Basta usar, por exemplo, a URL mostrada abaixo:
Para usar o gateway local temos que iniciar o servidor:
No gateway local pode-se obter o conteúdo conforme mostrado abaixo:
Este gateway local é que servirá de ponte entre o Smalltalk e o ipfs do nó local.
Abaixo mostramos a implementação do comando #cat: na classe InterplanetaryFileSystem. Usamos o framework Zinc na implementação do método.
[Atualização em 23/05/2018]Abaixo o comando é usado em um exemplo:
Sua execução mostra o conteúdo na janela do Transcript:
No próximo post mostraremos a implementação do comando #version.
O repositório de SmallIPFS pode ser encontrado no endereço http://smalltalkhub.com/#!/~chicoary/SmallIPFS/.