28 de fevereiro de 2016

Godot Engine: Visualizando o log do android com o Adb

A história é a seguinte: você está desenvolvendo um jogo utilizando a Engine Godot e precisa dar uma olhada no log do aplicativo que está rodando no celular. 

O log pode ser visualizado através do adb:

adb logcat [options] [filterspecs]

onde [options] são as opções do comando e [filterspecs] são os filtros a serem utilizados.

Para obter apenas o log do Godot deve-se silenciar a saída de log:

adb logcat -s

e filtrar pela Tag do godot

"godot"

O comando completo fica da seguinte forma:

adb logcat -s godot

O mesmo pode ser obtido pelo seguinte comando:

adb logcat *:S godot:V



PS: uma introdução à Engine Godot pode ser visualizada neste vídeo


25 de janeiro de 2016

Automatização do Navegador utilizando o IMacros - 2ª parte

Voltando ao exemplo do Imacros para preencher automaticamente um formulário. Vamos supor que você queira responder várias vezes o formulário, sendo que cada preenchimento vão ser colocadas informações ligeiramente diferentes no formulário (Figura 1). 



Figura 1: Minions - ligeiramente diferentes mas tudo igual 


A melhor forma de realizar esta tarefa é colocar as respostas em um arquivo csv, sendo cada linha do arquivo vai conter um preenchimento das respostas (colunas) do formulário. O arquivo contendo as respostas vai ter a seguinte estrutura (Figura 2).


Pergunta 1 Pergunta 2 Pergunta 3 Pergunta 4
Da Padoca da Esquina Por que eu quero Com açúcar Sou programador: por volta de 7 litros
Requentado Café de ontem é melhor Sem açúcar Duas
Feito na hora Não tem nada melhor do que o café feito na hora Filtrado com meia velha Uma

Figura 2: Formato do arquivo csv contendo os dados a serem utilizados

Após criar este arquivo csv basta fazer o IMacros obter as respostas deste arquivo. Portanto, a partir do script do artigo anterior:


TAB T=1
URL GOTO=https://docs.google.com/forms/d/1nXuAGqskiTm8vU1Gm8bEMUpe9NSTgrtHhqlcsQgzgis/viewform?fbzx=-5150429435447904810
TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1925481785&&VALUE:Da<SP>padoca<SP>da<SP>esquina CONTENT=YES
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:ss-form ATTR=ID:entry_1632006682 CONTENT=Por<SP>que<SP>sim
TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1254744817&&VALUE:Com<SP>açúcar CONTENT=YES
TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.753234863&&VALUE:Sou<SP>programador:<SP>por<SP>volta<SP>de<SP>7<SP>litros CONTENT=YES
WAIT SECONDS=6
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:ss-form ATTR=ID:ss-submit


Vamos alterar o script para retirar os dados a serem preenchidos no formulário a partir do arquivo csv criado anteriormente. 

Inicialmente vamos indicar a localização do arquivo (exemplo.csv) contendo os dados a serem inseridos no formulário. Neste exemplo o arquivo se encontra na pasta
"C:/temp".

SET !DATASOURCE "C:/temp/exemplo.csv"

Agora indicamos para o IMacros ignorar a primeira linha do arquivo. Vamos utilizar esta linha como cabeçalho (header) do arquivo csv. 

SET !LOOP 2
SET !DATASOURCE_LINE {{!LOOP}}

Finalmente vamos utilizar as colunas do arquivo csv para preencher os campos do formulário.

Para a pergunta nº1 a resposta se encontra na 1ª coluna do arquivo csv (COL1).

TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1925481785&&VALUE:{{!COL1}} CONTENT=YES

Para a pergunta nº2 a resposta se encontra na 2ª coluna do arquivo csv (COL2).

TAG POS=1 TYPE=INPUT:TEXT FORM=ID:ss-form ATTR=ID:entry_1632006682 CONTENT={{!COL2}}

Para a pergunta nº3 a resposta se encontra na 3ª coluna do arquivo csv (COL3).

TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1254744817&&VALUE:{{!COL3}} CONTENT=YES

Para a pergunta nº4 a resposta se encontra na 4ª coluna do arquivo csv (COL4).

TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.753234863&&VALUE:{{!COL4}} CONTENT=YES

Apenas para visualização do funcionamento do script indicamos para o IMACROS esperar alguns segundos antes de submeter o formulário:

WAIT SECONDS=6

E na última etapa submetemos o formulário:

TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:ss-form ATTR=ID:ss-submit


E o script completo fica da seguinte  forma:

TAB T=1
URL GOTO=https://docs.google.com/forms/d/1nXuAGqskiTm8vU1Gm8bEMUpe9NSTgrtHhqlcsQgzgis/viewform?fbzx=-5150429435447904810

SET !DATASOURCE "C:/temp/exemplo.csv"
SET !LOOP 2
SET !DATASOURCE_LINE {{!LOOP}}

TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1925481785&&VALUE:{{!COL1}} CONTENT=YES
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:ss-form ATTR=ID:entry_1632006682 CONTENT={{!COL2}}
TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1254744817&&VALUE:{{!COL3}} CONTENT=YES
TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.753234863&&VALUE:{{!COL4}} CONTENT=YES
WAIT SECONDS=6
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:ss-form ATTR=ID:ss-submit

Para rodar o script basta utilizar a opção Play (Loop) do Imacros (Figura 3)



Figura 3: Print screen da tela do Imacros com a opção Play (Loop)

14 de janeiro de 2016

Automatização do Navegador utilizando o IMacros



A história é sempre a mesma. Todo dia você abre o navegador e realiza sempre o mesmo conjunto de atividades nele. Seja checar o site de notícias, dar uma olhada na cotação dos Títulos do Tesouro Direto, ou testar uma aplicação que você está desenvolvendo.

Nessas horas o IMacros cai como uma luva para realizar essas tarefas repetitivas. O IMacros é um gerador de macro, com ele você pode gravar/escrever uma macro para executar um conjunto de comandos no navegador (Figura 1). 


Figura 1: SkyNet - Um executor de macro: matar John Connor


Indo para a parte prática vamos imaginar a seguinte situação:

Você está desenvolvendo aquele sisteminha web porreta onde existe um formulário enorme para o usuário preencher. Você vai ter que testar a funcionalidade deste formulário, mas convenhamos, ficar preenchendo o formulário a cada teste é um pouco estressante (Figura 2).

Figura 2: Testando o formulário manualmente


Para o exemplo ficar mais didático, vamos reduzir o formulário do sistema para algo mais simples (Figura 3) e a partir disto vamos construir a macro para preencher os dados do formulário. 



Figura 3: formulário a ser preenchido

O formulário de exemplo é formado por 4 perguntas simples relacionadas com o café, sendo 3 delas de alternativas e 1 dissertativa. 


O primeiro comando do script a ser gerado é escolher a aba do navegador onde a macro irá rodar, no nosso caso vamos escolher a aba atual do usuário:

TAB T=1

Agora vamos indicar para o navegador qual a URL a ser visitada: 


Finalmente vamos preencher as respostas do formulário. Vamos colocar as seguintes respostas para as perguntas: 

1) Que tipo de café você gosta? 
Da padoca da esquina  

2) Qual o motivo da escolha anterior?
Por que sim

3) E como o café deve ser feito?
Com açúcar

4) Quantas xícaras de café você bebe por dia?
Sou programador, por volta de 7 litros


Os seguintes comandos devem ser adicionados no script: 

TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1925481785&& VALUE:Da<SP>padoca<SP>da<SP>esquina CONTENT=YES

TAG POS=1 TYPE=INPUT:TEXT FORM=ID:ss-form ATTR=ID:entry_1632006682 CONTENT=Por<SP>que<SP>sim

TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1254744817&&VALUE:Com<SP>açúcar CONTENT=YES

TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.753234863&&VALUE:Sou<SP>programador:<SP>por<SP>volta<SP>de<SP>7<SP>litros CONTENT=YES

onde: 

TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form 

busca um elemento do tipo radio no formulário de id ss-form

TAG POS=1 TYPE=INPUT:TEXT FORM=ID:ss-form

busca um elemento do tipo text no formulário de id ss-form

ATTR=NAME:entry.1925481785&&VALUE:Da<SP>padoca<SP>da<SP>esquina 

é a restrição do radio a ser selecionado: deve possuir o nome entry.1925481785 e valor "Da padoca da esquina" (lembre-se que três radio's são identificados por este nome, mas apenas um deles possui o valor indicado)

CONTENT=YES 

indica que o radio vai ser selecionado

O mesmo ocorre para as outras duas questões envolvendo radio's: 

a restrição na seleção: 

ATTR=NAME:entry.1254744817&&VALUE:Com<SP>açúcar
ATTR=NAME:entry.753234863&&VALUE:Sou<SP>programador:<SP>por<SP>volta<SP>de<SP>7<SP>litros

e a seleção do radio:

CONTENT=YES 


ATTR=ID:entry_1632006682 

é a restrição do elemento de texto a ser selecionado: o que possui o ID igual a entry_1632006682 

CONTENT=Por<SP>que<SP>sim

Indica o valor que vai ser colocado no elemento de texto


Só para visualizarmos os campos preenchidos vamos colocar o IMacros para esperar durante uns segundos:

WAIT SECONDS=6

Por último vem o comando para submeter o formulário 

TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:ss-form ATTR=ID:ss-submit


Com isto o preenchimento do formulário está automatizado e você pode tomar um cafézinho enquanto o IMacro realiza o preenchimento do formulário (Figura 5)



FIGURA 5: Você aceita uma xícara de café?



E o script fica da seguinte forma:

TAB T=1
URL GOTO=https://docs.google.com/forms/d/1nXuAGqskiTm8vU1Gm8bEMUpe9NSTgrtHhqlcsQgzgis/viewform?fbzx=-5150429435447904810
TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1925481785&&VALUE:Da<SP>padoca<SP>da<SP>esquina CONTENT=YES
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:ss-form ATTR=ID:entry_1632006682 CONTENT=Por<SP>que<SP>sim
TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.1254744817&&VALUE:Com<SP>açúcar CONTENT=YES
TAG POS=1 TYPE=INPUT:RADIO FORM=ID:ss-form ATTR=NAME:entry.753234863&&VALUE:Sou<SP>programador:<SP>por<SP>volta<SP>de<SP>7<SP>litros CONTENT=YES
WAIT SECONDS=6
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:ss-form ATTR=ID:ss-submit