segunda-feira, 25 de novembro de 2019

Correção de tela inicial no AppInventor2

Aposto que já aconteceu com você: "Você fez um aplicativo da hora no AppInventor2 e quando está dando os retoques iniciais percebe que esqueceu de fazer a tela inicial ou introdutória". Isso é uma situação extremamente incomoda no AppInventor2 pois por padrão ele inicial sempre na tela "Screen1" sem possibilidade de alterar qual sera a tela inicial do aplicativo. Se você procurar no Youtube, existem vídeos falando em como baixar essa versão em um .apk e ao abrir o código no bloco de notas você pode fazer a alteração via código, porém dá um trabalhinho. Mas no post de hoje vamos apresentar uma possibilidade um pouco mais elegante que depende apenas de você programar via blocos de códigos.
Para usar esse método de mudança de screen inicial vamos usar o TinyDB, que é uma ferramenta de armazenamento de dados dentro do próprio aplicativo, da qual você pode saber um pouco mais nesse post: https://vemfazermatematicaegames.blogspot.com/2018/06/appinventor-2-construindo-um-placar.html. Para usar o TinyDB você "arrasta" ele para dentro do celular em programação conforme a figura abaixo:


Para esse exemplo, teremos duas telas sendo trabalhadas em paralelo: "Screen1" (tela inicial padrão do AppInventor2 que não será mais a padrão no aplicativo construído) e "Inicio" (tela criada posteriormente que no aplicativo construído se tornará a inicial). Dito isso, você deve ter o TinyDB presente nessas duas telas e construir a programação exatamente como a mostrada na figura abaixo:


Note que na parte indicada pela seta laranja é onde você deve encaixar o início da programação anteriormente construída na "Screen1". Sugiro inclusive que você deixe na forma de procedimento para não carregar por demais esse bloco pois ele precisa ser ágil.
Mas afinal de conta o que essa construção faz? Ela apenas criou um contador entre as duas telas (usando o TinyDB) na qual sempre que o aplicativo iniciar obrigatoriamente pela "Screen1", ela irá redirecionar automaticamente para a tela "Inicio" por não ter o valor armazenado no TinyDB igual a 1. Esse valor é gerado apenas na situação em que estamos na tela "Inicio" e ao apertar o botão de Iniciar (Botão1) temos esse valor igual a 1 no Tiny DB. Após clicado no botão Iniciar voltamos a tela "Screen1" executando as ações previamente construídas que estão designadas no "se então" construído. Simples, não é mesmo? Essa construção pode ser utilizada sempre, desde que respeitado os nomes construídos ou fazer as adaptações necessárias.
Espero que essa dica seja útil para você assim como está sendo para mim e até a próxima!

quinta-feira, 14 de novembro de 2019

Comandando seu personagem por voz usando o ML

Que tal construir um game no Scratch  em que você possa dar as instruções por comandos de voz? Gostou da ideia? Então esse post é para você. Usando o MachineLearningForKids (ML abreviado) é possível gravar sons (além de reconhecimento de fotos, textos, etc.) cuja integração é realizada com o Scratch e viram blocos do tipo Extensão. Para acessar você deve ir no site do ML (https://machinelearningforkids.co.uk/) e criar a sua conta (é possível usar sem registro, mas não fica salvo deu projeto depois que fechar o navegador), em seguida você deve clicar em "Projetos" (destacado em vermelho), conforme figura abaixo:


Em seguida, clique no bloco "Adicionar um novo projeto" (destacado em azul) dando o nome do projeto e o tipo, no caso, aqui usaremos a voz. Após salvar, clique no nome do projeto escolhido (flecha azul) e você irá para a próxima janela (na figura acima a direita) onde temos duas opções destacadas: "Treinar" (em verde) que é o local onde você irá gravar os sons de comandos) e "Faça" (em laranja) que é a janela que irá redirecionar para abrir os blocos no Scratch.
Na primeira opção "Treinar" você irá gravar dois tipos de sons: 
  • Background Noise (destacado em azul): é responsável por gravar sons de fundo que serão ignorados na hora de fazer o reconhecimento de voz;
  • Bloco Customizado (destacados em vermelho): esses blocos são criados na opção "Adicionar um novo rótulo" (flecha verde) no qual você dá o nome do bloco e depois em "adicionar exemplo" (flecha vermelha) você grava os sons de entrada (que vão ser reconhecidos) para o game.


Após gravar os sons desejados, volte para a página anterior e clique na opção "Faça" (destacado em laranja na primeira figura desse post), onde você deve clicar na opção "Scratch 3" e será redirecionado para uma nova página do Scratch, como podemos ver abaixo:


Em extensões (flecha em laranja) se encontram os blocos de comando de voz prontos para serem usados, porém é necessário seguir a construção destacada em vermelho, pois ela é responsável pela inicialização e carregamento das opções de reconhecimento de voz. As programações em verde são os blocos de voz criados anteriormente e com os valores de passo para o ator gato andar para a esquerda e para a direita.
Tome cuidado ao gravar os sons em ambientes com barulho excessivo pois mesmo com o "background noise", pode acontecer de novos sons aparecerem e dar ruim no seu projeto! Na hora de executar os comandos de voz fale calmamente e respeite o delay da programação pois senão o personagem pode não conseguir fazer o que você pede ou mesmo te ignorar.
Existem outros projetos prontos no site do ML que podem ser acessados nesse link: https://machinelearningforkids.co.uk/#!/worksheets. Agora é a sua vez de por a mão na massa e fazer seus projetos ficarem mais interativos. Até a próxima.

terça-feira, 12 de novembro de 2019

Criando enredos de games com o Twinery

Um dos fatores essenciais em um game de sucesso é um bom roteiro e normalmente são dadas escolhas para o jogador (enredo não-linear) que podem alterar significamento o final da história (você pode ver um exemplo em um post anterior na construção de uma história gamificada em Scratch da Chapeuzinho Vermelho: https://vemfazermatematicaegames.blogspot.com/2018/11/scratch-voce-decide.html). 
Se você já programou games com enredos, pode ter utilizado um editor de texto ou até mesmo inserido diretamente dentro da programação do game, pulando uma parte muito importante que é justamente a organização e a estrutura desse enredo. Uma possibilidade para ajudar nessa construção é usar o Twinery (http://twinery.org/2/#!/welcome), uma ferramenta on-line de criação de histórias não-lineares.
Para ilustrar a criação de um enredo vamos usar o fluxograma de enredo usado no post de Criação de um RPG de mesa (https://vemfazermatematicaegames.blogspot.com/2019/04/construindo-seu-rpg-de-mesa-elaborando.html) aqui do blog, que podemos ver abaixo:


Como podemos ver abaixo, você cria postites (destacado em laranja) onde em cada um deles tem um determinado acontecimento e você os liga por meio de uma programação simples (vamos ver ela mais abaixo) para criar as possibilidades de roteiros que serão ilustradas por meios dessas setas. Para executar o enredo, você clica em jogar (destacado em azul) e aparece uma nova aba com a execução do roteiro e as possibilidades criadas que irão direcionar para outras ações (destacado nas cores verde, roxo e rosa), conforme a imagem abaixo: 


Mas você deve estar se perguntando: E como eu faço essa programação para ligar os postites? Bem simples, dê um clique duplo no postite que será responsável por gerar novas possibilidade (destacado acima em vermelho) e após escrever o texto do enredo use "[[texto da opção -> título do próximo postite]]". Isso irá automaticamente criar o próximo postite e fazer a ligação entre eles (veja os destaques abaixo):


E assim por diante, cada um desses postite pode gerar outros e ir construindo o ramos de possibilidade na criação do enredo não-linear do seu game. No link a seguir você tem o exemplo semi-construído do enredo proposto acima para usar como exemplo: https://drive.google.com/drive/folders/1744KWO6sRURSQJH57LD_QO-wXCPZzz_r?usp=sharing). Além disso, como essa ferramenta não cria contas é necessário você sempre salvar (destacado em vermelho) o arquivo que é gerado em HTML e carregar ele na próxima vez que necessitar (destacado em verde):


Se você quiser saber um pouco mais sobre essa ferramenta, recomendo esse tutorial no Youtube que apresenta um pouco mais do que foi tratado aqui:  https://www.youtube.com/playlist?list=PLklITFhXtPCCKadv-0Gcbqoj3OCev695D. Agora é a sua vez! Arregace as mangas e ponha a mão-na-massa para criar seus enredos não-lineares de games e até a próxima! 

sexta-feira, 8 de novembro de 2019

O uso do module e do for no OpenSCAD

No OpenSCAD existe uma estrutura de organização denominada "module nome (parâmetros) {ação}" que além dessa função mencionada, ela possui parâmetros de entrada que ao ser alterados migram essas informações para dentro da estrutura de ação, como podemos ver abaixo:



Faça um teste, mude os valores da entrada espira (destacado em azul) para (8,45,30) e você notará que temos menos degraus na escada (porque o primeiro valor é relacionado a quantidade de degraus), e o formato dos degraus se alterou (porque o segundo e o terceiro valor estão relacionados as dimensões dos cubos, exceto pela altura que é fixa em 1). Com isso vemos uma possibilidade de programação e modelamento no OpenSCAD que aceita diferentes valores e mantem a estrutura que foi planejada.
Agora você deve ter notado o uso da repetição "for" dentro da estrutura do module que é responsável pela repetição da construção de cada um dos degraus. No exemplo acima temos "for (n=[0:quantidade])" onde o valor de repetição de n varia de 0 até o máximo colocado na entrada final e gera as repetições numéricas de 1 em 1. Porém é possível fazer esse incremento no for com um valor delimitado diferente (exemplo 0,5) usando "for (n=[0:0.5:quantidade])", conforme o exemplo abaixo:

Outra forma de usar o for é com o auxílio de vetores que delimitam a regra de formação, conforme observamos na figura abaixo:


Agora é com você! Use esses novos conhecimentos para suas construções e deixe nos comentários suas impressões e descobertas. Até a próxima!

quinta-feira, 7 de novembro de 2019

Criando o seu MathWords: o aplicativo-dicionário para a Matemática.

Resolver problemas matemáticos é sempre desafiador e um dos pontos mais críticos é quando precisamos "retirar os dados do problema", que no fundo trata-se de uma "tradução" das palavras em língua materna (português) para os símbolos da linguagem matemática. E uma possibilidade para auxiliar nesse processo de tradução é criar um dicionário português-matemático na forma de um aplicativo: o MathWords!


Nesse link (ai2.appinventor.mit.edu/?galleryId=5335630650933248) você tem disponível o projeto do MathWords desenvolvido no appinventor2 e cuja customização e inserção dos novos termos é você quem fará. Em primeiro lugar, estamos criando um aplicativo que usa o TinyDB, um recurso que armazena dados e que vai nos ajudar a economizar a criação de telas (ao invés de ter uma tela por letra, teremos apenas uma única tela para todas as letras do alfabeto). Ele já foi explorado anteriormente no post de criação de criação de histórias (https://vemfazermatematicaegames.blogspot.com/2018/09/appinventor2-criando-seu-aplicativo-de.html), mas ele voltou a ser usado de uma forma bem simplificada. O TinyDB é um componente invisível que está listado no menu de Armazenamento e que deve ser inserido nas duas telas, a inicial (Screen1) e a dos significados (TelaA). Após isso, cada botão (de cada letra do alfabeto) criado na tela inicial (Screen1) irá dar um valor numérico diferente (A é 1, B é 2, C é 3, e assim por diante conforme destacado em vermelho abaixo) para a variável global "Letras" que irá armazenar esse valor no TinyDB dessa tela. Na tela dos significados (TelaA) tem-se um inicializador da tela onde o TinyDB ali presente possui o valor armazenado anteriormente sendo chamado e torna-se o valor da variável global "Letra". Conforme o valor adquirido, os SE abaixo na programação irão dizer qual os significados (conforme a relação letra e número, por exemplo, se vier o valor 4 é a letra D e seus significados) que deverão ser apresentados na tela:


O MathWords foi construído para ser personalizado, isto é, você quem irá colocar os termos matemáticos que mais necessita consultar. Para inserir os termos você deve ir na TelaA e substituir os textos exemplos já construídos com a sua definição (cada linha de programação é um conceito) e respeitando a ordem de classificação das palavras de acordo com cada opção dos botões:


Fácil não é mesmo!? Mas e se você quiser inserir mais do que dez termos (o modelo vem com essa quantidade)? Nesse caso você deve inserir uma nova caixa de texto (arraste ela para cima do celular) e use as opções destacadas em vermelho: Ativado desabilitado (para não ser possível fazer edição), Largura 90 porcento (para padronizar o tamanho da exibição) e Multilinha (para ter a quebra de linhas caso a frase seja grande demais). Em seguida,  na parte de programação basta apertar com o botão direito em cima da programação "ajustarCaixaDeTexto" e a duplique, encaixando-a abaixo dessa programação (dentro do SE) e alterando a numeração conforme a caixa de texto criada anteriormente (segue ordem numérica). Atente-se apenas que você deve fazer isso para todos os SE da programação (cada SE é um número que corresponde a uma letra do dicionário), pois senão irá aparecer texto apenas nos que você fazer a edição:


E assim finalizamos o MathWords. Agora é hora de por a mão na massa e trazer para dentro desse aplicativo os seus verbetes matemáticos que você utiliza no dia-a-dia. Deixe nos comentários abaixo o seu MathWords personalizado e até a próxima!

terça-feira, 5 de novembro de 2019

Rotações de objetos no OpenSCAD.

Ao modelar objetos no OpenSCAD nem sempre sua construção é linda e maravilhosa a ponto de estar lá no ponto zero dos eixos cartesianos e não necessitar de nenhuma movimentação. No post anterior vimos o uso do translate (https://vemfazermatematicaegames.blogspot.com/2019/03/movendo-solidos-no-openscad.html) para transladar objetos pelo plano. Hoje iremos ver formas de rotacionar esse sólido construído pelo plano.
A forma mais simples de rotacionar um objeto é usando o comando "rotate ([x,y,z])", onde as entradas são valores numéricos dos ângulos nos eixos x, y e z respectivamente, conforme a figura abaixo:


Tome cuidado ao fazer rotações parciais para ter uma soma final de uma rotação única, pois elas não são comutativas. No exemplo abaixo, o comando "rotate ([45,45,45])" não tem a mesma posição que as demais rotações usando valores x,y,z iguais a 45 e que a soma desses rotações não dá o original, ou seja, a rotação linear não é comutativa:


Se você quiser saber mais do porque a decomposição da rotação não funciona, leia a página 04 do texto a seguir: https://webserver2.tecgraf.puc-rio.br/~mgattass/Quaternios.pdf.
Outra possibilidade de usar rotação é usando como eixo um vetor posição (ao invés dos eixos cartesianos). Usando o comando "rotate (a=ângulo, v=[x,y,z])" é possível ter um eixo personalizado a partir de um vetor posição e por meio dele fazer a rotação:


Existem outras possibilidade de rotações como o multimatrix, mas esse será abordado futuramente. Por hoje é isso! Agora suas construções já podem ser rotacionadas pelo plano 3D e trazer novos desafios. Não esqueça de deixar suas impressões nos comentários e até a próxima!

Como não perder nenhum compromisso: Meu App Agenda

No nosso dia a dia a agenda é um instrumento de grande importância que as pessoas utilizam para fazer anotações de compromissos ou informaçõ...