Colaboração: Alessandro de Oliveira Faria
Data de Publicação: 19 de setembro de 2018
Neste século XXI a profissão mais solicitada é a programação, que agora parece receber uma excelente ferramenta, a inteligência artificial. Veremos neste documento como utilizar um projeto de software livre que recorre aos recursos de inteligência artificial para criar programas, mais especificamente sub-rotinas, métodos e/ou funções.
O projeto denominado BAYOU foi criado por cientistas da computação da Universidade de Rice com o financiamento da Google e militares. A técnica utilizada é deep learning, tomando como princípio computacional a pesquisa para codificação baseado em tags/palavras-chave para o sistema desenvolver o software solicitado. O resultado do processamento é um código java criado pelo sistema conforme requisitado pelo “operador”.
Linux: A Inteligência Artificial que escreve programas
A tecnologia foi construída por técnicos da Universidade de Rice com verbas disponibilizadas pelo exército americano e Google. Resumidamente o sistema analisa cerca de 1500 código fontes de aplicativos Android, com aproximadamente 100 milhões de linhas.
Com toda esta base de informação, alimentou-se a inteligência artificial e o resultado foi um software para elaborar outro software. O aprendizado da informação contextual é o diferencial do projeto que permite obter linhas de código baseado apenas em tags/palavras chaves. Acredito ser uma excelente notícia, para o mundo da tecnologia, para melhorar cada vez mais a qualidade de código, obter ganhos de produtividade e utilizar o talento dos programadores para resolver problemas realmente complexo e não tarefas que exige uma simples CRTL+C CRTL+V.
O projeto ainda é embrionário, mas promissor e não tem o propósito de substituir programadores, como um corretor de texto não substituiu um escritor. Pelo menos neste momento, o projeto gera rascunho /sugestões de linhas de código relevantes para o trabalho que um desenvolvedor precisa elaborar. Mesmos assim acredito ser um passo muito importante para a ciência da computação e o projeto pode servir como base para um conceito muito inovador.
MÃO NA MASSA
Aqui veremos o que será necessário para executar o projeto BAYOU, desde os seus requisitos até a instalação e execução.
Requisitos:
- Linux (CLARO!)
- Maven
- Mavn-jansi
- Tensorflow
- Scikit-learn
Para o texto tornar extenso, assumirei que o ambiente Linux com Java, Python e Maven está devidamente instalado e configurado.
Instalando os pacotes Tensorflow e Scikit-learn
Com o ambiente python funcionando corretamente, utilize os comandos abaixo como super-usuário para resolver as dependências python do projeto Bayou:
# pip install tensorflow # pip install scikit-learn
Para testar o funcionamento adequado do tensorflow, utilize as instruções a seguir. Se o resultado for similar, significa que o ambiente python está devidamente configurado.
$ python >>> import tensorflow as tf >>> hello = tf.constant('Hello, TensorFlow!') >>> sess = tf.Session() >>> print(sess.run(hello)) b'Hello, TensorFlow!'
Agora efetue o download a partir do código fonte.
$ git clone https://github.com/capergroup/bayou.git
Após o download, siga o exemplo a seguir para resolver as dependências java:
$ cd bayou/tool_files/build_scripts $ sudo ./install_dependencies.sh
A compilação é efetuada com o comando build:
./build.sh
Agora para executar o motor principal, entre na pasta out e execute o comando start_bayou.sh:
$ cd out/
$ ./start_bayou.sh
2018-09-08 20:53:52.604:INFO::main: Logging initialized @2482ms to org.eclipse.jetty.util.log.StdErrLog
2018-09-08 20:53:52.896:INFO:oejs.Server:main: jetty-9.4.z-SNAPSHOT
2018-09-08 20:53:52.992:INFO:oejs.AbstractConnector:main: Started ServerConnector@2cbb3d47{HTTP/1.1,[http/1.1]}{0.0.0.0:8081}
2018-09-08 20:53:52.993:INFO:oejs.Server:main: Started @2871ms
2018-09-08 20:53:52.994:INFO:oejs.Server:main: jetty-9.4.z-SNAPSHOT
2018-09-08 20:53:52.995:INFO:oejs.AbstractConnector:main: Started ServerConnector@7ea37dbf{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2018-09-08 20:53:52.995:INFO:oejs.Server:main: Started @2873ms
===================================
Loading Model. Please Wait.
===================================
INFO:tensorflow:Restoring parameters from model49.ckpt
===================================
Bayou Ready
===================================
* Serving Flask app "ast_server" (lazy loading)
* Environment: production
Use a production WSGI server instead.
* Debug mode: off
Agora crie um arquivo .java onde desejamos que a inteligência artificial atue, coloque a TAG FILEWRITE para escrita de arquivo utilizando BUFFER.
import java.io.*; import java.util.*; public class Test { void write(File file, String toWrite) { { /// call:write type:FileWriter type:BufferedWriter } } }
Agora utilize o comando synthesize para o sistema devolver o resultado do problema proposto:
./synthesize.sh exemplo/Test.java
Veja o resultado:
---------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.File; import java.io.IOException; import java.io.BufferedWriter; import java.io.FileWriter; public class Test { void write(File file, String toWrite) { { FileWriter fw1; BufferedWriter bw1; try { fw1 = new FileWriter(file); bw1 = new BufferedWriter(fw1); bw1.write(toWrite); bw1.close(); } catch (IOException _e) { } return; } } } —-------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.IOException; import java.io.BufferedWriter; import java.io.FileWriter; public class Test { void write(File file, String toWrite) { { FileWriter fw1; BufferedWriter bw1; try { fw1 = new FileWriter(toWrite); bw1 = new BufferedWriter(fw1); bw1.write(toWrite); bw1.close(); } catch (IOException _e) { } return; } } } —-------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.File; import java.io.IOException; import java.io.BufferedWriter; import java.io.FileWriter; public class Test { void write(File file, String toWrite) { { FileWriter fw1; BufferedWriter bw1; try { fw1 = new FileWriter(file); bw1 = new BufferedWriter(fw1); bw1.write(toWrite); } catch (IOException _e) { } return; } } } —-------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.File; import java.io.IOException; import java.io.BufferedWriter; import java.io.FileWriter; public class Test { void write(File file, String toWrite) { { FileWriter fw1; BufferedWriter bw1; try { fw1 = new FileWriter(file); bw1 = new BufferedWriter(fw1); bw1.write(toWrite); bw1.newLine(); } catch (IOException _e) { } return; } } } —-------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.IOException; import java.io.FileWriter; public class Test { void write(File file, String toWrite) { { FileWriter fw1; try { fw1 = new FileWriter(toWrite); fw1.write(toWrite); fw1.close(); } catch (IOException _e) { } return; } } } —-------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.File; import java.io.IOException; import java.io.FileWriter; public class Test { void write(File file, String toWrite) { { FileWriter fw1; try { fw1 = new FileWriter(file); fw1.write(toWrite); fw1.close(); } catch (IOException _e) { } return; } } } —-------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.IOException; import java.io.BufferedWriter; import java.io.FileWriter; public class Test { void write(File file, String toWrite, boolean _arg11) { { FileWriter fw1; BufferedWriter bw1; try { fw1 = new FileWriter(toWrite, _arg11); bw1 = new BufferedWriter(fw1); bw1.write(toWrite); bw1.newLine(); bw1.flush(); bw1.close(); } catch (IOException _e) { } return; } } } —-------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.File; import java.io.IOException; import java.io.BufferedWriter; import java.io.FileWriter; public class Test { void write(File file, String toWrite, boolean _arg11) { { FileWriter fw1; BufferedWriter bw1; try { fw1 = new FileWriter(file, _arg11); bw1 = new BufferedWriter(fw1); bw1.write(toWrite); bw1.close(); } catch (IOException _e) { } return; } } } —-------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.File; import java.io.IOException; import java.io.BufferedWriter; import java.io.FileWriter; public class Test { void write(File file, String toWrite, boolean _arg11) { { FileWriter fw1; BufferedWriter bw1; try { fw1 = new FileWriter(file, _arg11); bw1 = new BufferedWriter(fw1); bw1.write(toWrite); bw1.newLine(); bw1.flush(); bw1.close(); } catch (IOException _e) { } return; } } } —-------- BEGIN PROGRAM ---------- import java.io.*; import java.util.*; import java.io.File; import java.io.IOException; import java.io.BufferedWriter; import java.io.FileWriter; public class Test { void write(File file, String toWrite, boolean _arg11) { { FileWriter fw1; BufferedWriter bw1; try { fw1 = new FileWriter(file, _arg11); bw1 = new BufferedWriter(fw1); bw1.write(toWrite); bw1.newLine(); } catch (IOException _e) { } return; } } }
Resumidamente, recebemos diversos exemplos de como escrever um método para escrever um arquivo! Genial…
A seguir um vídeo demonstrativo da implementação do Bayou no meu projeto Modoki de código aberto.