Revendo o “olá (mundo) de 1959”

cobol_code

O que poderia servir para ligar o Google Chrome e Grace Hopper? Ou melhor, sendo um pouco mais mais preciso, o engine V8 desenvolvido para este navegador web e a linguagem de programação concebida por esta marinheira com alma de pirata? Apesar do que possa parecer não estou falando de embarcações e sim de Node.js.

Acredite, isto aqui não é uma versão “requentada” da minha publicação sobre o mesmo assunto no Retrocomputaria Plus, coloquei mais algum conteúdo.

Cobol & Node.js

O programador romeno Bizău Ionică resolveu desenvolver uma forma de interligar as tecnologias (COBOL e Javascript) criando um módulo para o Node.js que envia os trechos de código diretamente ao GNU/COBOL que compila, executa e envia o resultado de volta.

Duvidam? Escrevi este pequeno servidor web usando  os módulos node-cobol e http do Node.js:

Funciona? Basta testar:

$ curl 127.0.0.1:8080
<H1>Hello from 1959!</H1>

Uma outra coisa, posso fazer isto em casa? Claro e ainda usando o Docker!

Criando o contêiner

A ideia é criar um contêiner do Docker que terá a estrutura necessária para executar este programa. Você precisará do arquivo acima (“mycobolwebserver.js”) e deste sujeito  (“runserver”):

#/bin/sh
$( which nodejs ) /mycobolwebserver.js

E também deste Dockerfile aqui:

FROM ubuntu:latest
RUN apt-get update && apt-get install --yes open-cobol nodejs-legacy npm
RUN npm i cobol
COPY mycobolwebserver.js /mycobolwebserver.js
COPY runserver /runserver
EXPOSE 8080
WORKDIR /
CMD /runserver

Depois é montar o contêiner com:

$ docker build --tag=mycobolws:latest .
Sending build context to Docker daemon 4.608 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:latest
 ---> 6d4946999d4f
Step 1 : RUN apt-get update && apt-get install --yes open-cobol
nodejs-legacy npm
 ---> Running in 37b9a877900e
...
 ---> 264d6dcb7dbb
Removing intermediate container 37b9a877900e
Step 2 : RUN npm i cobol
 ---> Running in bebe85b3fec5
...
Step 3 : COPY mycobolwebserver.js /mycobolwebserver.js
 ---> f338d2e14f51
Removing intermediate container 9d65f323d0ab
Step 4 : COPY runserver /runserver
 ---> 9dd272fc8617
Removing intermediate container e8a0ea2b3b4f
Step 5 : EXPOSE 8080
 ---> Running in 0bf9e3401373
 ---> 020a54d0b165
Removing intermediate container 0bf9e3401373
Step 6 : WORKDIR /
 ---> Running in f477ca9b9264
 ---> 4b08f1c74ecf
Removing intermediate container f477ca9b9264
Step 7 : CMD /runserver
 ---> Running in 9c9ca3518459
 ---> b930b4f7dd10
Removing intermediate container 9c9ca3518459
Successfully built b930b4f7dd1

E aguardar alguns instantes (aqui só dependerá da sua conexão).

Executando

Após montado, execute o contêiner com:

$ docker run --publish 8080:8080 --detach=true mycobolws:latest
d2242337e1945bab94d8ccb01884c6a782aca4ddb702ad0739444de924da114

O resultado, para lá de esperado, será:

cobol_hello

Também é possível acompanhar os logs (aquilo que o programa envia para STDOUT) com:

$ docker logs -f d2242«TAB»
1 visitor(s) since 1959 :)
2 visitor(s) since 1959 :)
3 visitor(s) since 1959 :)

O “-f” é análogo ao parâmetro do comando tail, para sair pressione «Ctrl»+«C».

Para interromper a execução do contêiner use:

$ docker stop d2242«TAB»

Justamente! Aquele número gigante que aparece após o “docker run” não é parte da decoração.

Claro, se a porta TCP/8080 já estiver em uso no seu sistema basta alterar primeira ocorrência para uma porta livre, por exemplo: “–publish 9000:8080”.

Finalizando

Este exemplo usando o Docker serve tanto para subir este meu servidor web que usa GNU/COBOL como também para levantar coisas (muito) mais sérias implementadas em Node.js como, por exemplo, um projeto completo de website escrito em frameworks como Ember.js ou Express.

Anúncios

Um comentário sobre “Revendo o “olá (mundo) de 1959”

  1. Pingback: Contêineres com LXC – parte 1 | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s