pharo-chapo_vignettedecks  

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.

Introdução

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:

Comandos

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.

Instalação

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.

Adicionando o conteúdo de um diretório

Vamos experimentar um pouco no command shell.

ipfs-shell

No diretório ipfs já havíamos criado o subdiretório test_dir.

ipfs-shell-2.png

Neste diretório existem vários arquivos. Para colocá-los todos de uma vez no repositório do ipfs usamos o comando add -r.

ipfs-shell-3

Exibindo um conteúdo

Cada arquivo é representado por um digest (hash). Vamos nos fixar no arquivo linhas.txt.

ipfs-shell-4

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:

ipfs-internet-gateway

Iniciando o gateway local

Para usar o gateway local temos que iniciar o servidor:

ipfs-daemon

No gateway local pode-se obter o conteúdo conforme mostrado abaixo:

ipfs-local-gateway

Este gateway local é que servirá de ponte entre o Smalltalk e o ipfs do nó local.

Implementando o comando #cat: no Smalltalk

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]

pharo-ipfs-cat

pharo-ipfs-byteArrayFromHashKey pharo-ipfs-streamFromHashKey

Executando um exemplo

Abaixo o comando é usado em um exemplo:

ipfs-cat-example

Sua execução mostra o conteúdo na janela do Transcript:

ipfs-cat-transcript

No próximo post mostraremos a implementação do comando #version.

Todos os posts.

Repositório do projeto no SmalltalkHub

O repositório de SmallIPFS pode ser encontrado no endereço http://smalltalkhub.com/#!/~chicoary/SmallIPFS/.