Arduino – Função MAP – Regra de três

Olá pessoal,
A um tempo atrás achei uma função bem útil no Arduino, chamada: map

Ela basicamente faz uma regra de 3 e te retorna o valor de X (na regra de três). Vou mostrar um exemplo:

// lê os dados qualquer da porta 0
int valor = analogRead(0);

// faz o mapeamento da faixa inicial e faixa final do valor 1 com a faixa inicial e faixa final do valor 2, através do valor passado no primeiro parâmetro
valor = map(valor, 0, 1023, 0, 255);

// escreve na porta 9 o valor gerado
analogWrite(9, valor);

 

Explicação detalhada:

Parâmetro 1:
É o valor que temos em mão, e que queremos que o mapeamento use como referência

Parâmetro 2:
Faixa inicial do “parâmetro 1”, ou seja, o menor valor possível para ele

Parâmetro 3:
Faixa final do “parâmetro 1”, ou seja, o maior valor possível para ele

Parâmetro 4:
Faixa inicial do valor a ser retornado em relação ao “parâmetro 2”, ou seja, o menor valor possível em relação ao “parâmetro 2”

Parâmetro 5:
Faixa final do valor a ser retornado em relação ao “parâmetro 3”, ou seja, o maior valor possível em relação ao “parâmetro 3”

Resumindo: O resultado desta função é um valor entre os “parâmetros 4 e 5” em relação aos parâmetros “2 e 3”.

Obrigado e até o próximo post pessoal.

C++ – QtCreator + Mac OSX + SFML

Olá,

Recentemente criei um projeto no github onde irá facilitar a vida de muita gente.

Quem desenvolve jogos, sabe que é chato ficar configurando a IDE e também as bibliotecas e pensando nisso, criei um repositório onde quem usa a biblioteca Qt poderá facilmente fazer um clone desse repositório e sair usando a SFML independente da plataforma, seja Mac, Linux ou Windows.

 

Mas no que isso irá me ajudar?

Se você desenvolve em C++ e usa a SFML, basta você baixar o QtCreator (http://qt.nokia.com/downloads) que é gratuito e logo após instalar o QtCreator, faça um clone do projeto (https://github.com/prsolucoes/sfml-project) em uma pasta qualquer, abra o arquivo .pro e clique em “Run” no QtCreator e o projeto já estará configurado e funcionando.

 

O que foi implementado?

1 – Configuração independente de plataforma (windows, linux e mac)
2 – Código básico de teste de uma aplicação com SFML
3 – Todos os arquivos de include e lib para cada plataforma
4 – Ícone padrão para seu aplicativo – basta mudar o arquivo na pasta “resources” e recompilar
5 – Nome do binário gerado também é configurável
6 – As configurações do projeto são definidas em um único arquivo “sfml-project.pro”

Para baixar o projeto, acesse:
https://github.com/prsolucoes/sfml-project

Espero poder facilitar a vida de todos assim.

Obrigado!

C++ – Separando ou explodindo uma String

Olá pessoal,

Vejo muitas pessoas com dúvida em relação a como fazer um split ou explodir uma string em partes usando um delimitador.

Vou então mostrar algumas técnicas possíveis de executar isso.

Vamos usar uma frase de exemplo:

O rato roeu a roupa do rei de roma.

Nossa intenção é separar cada palavra contida na frase usando o caracter [espaço] como delimitador e com isso ter uma lista em memória com todas as palavras encontradas.

Vou mostrar agora 3 métodos de fazer isto em C++ de forma prática e fácil.

1 – Se você usa a biblioteca Boost, use o código abaixo para em 3 linhas obter um vetor de strings com as palavras:

#include <boost/algorithm/string.hpp>
int main()
{
    vector<string> results;
    boost::split(results, line, boost::is_any_of(";"));
}

2 – Usando agora uma função antiga para saber o ponteiro na string de onde começa cada palavra:

#include
#include 

int main() {
    char s[] = "one, two,, four , five,"; /* mutable! */ const char* p;
    for (p = strtok( s, "," ); p; p = strtok( NULL, "," )) {
        printf( "\"%s\"\n", p );
    }
    return 0;
}

3 – E por último, uma função simples que funciona basicamente como o método #1:

#include 
#include 

void split(string str, string separator, vector* results)
{
    int found;
    found = str.find_first_of(separator);

    while(found != string::npos)
    {
        if(found > 0)
        {
            results->push_back(str.substr(0,found));
        }
		
        str = str.substr(found+1);
        found = str.find_first_of(separator);
    }

    if(str.length() > 0)
    {
        results->push_back(str);
    }
}

int main()
{
    vector results;
    split("O rato roeu a roupa do rei de roma", " ", &results);
}

É isso ai. Espero que com estes códigos um pouco simples, ajudem a todos.

Git – Como fazer push na mesma branch em que estou trabalhando?

Olá pessoal,

Vejo muita gente irritada com o Git pelo fato de ter que passar o nome da “branch” toda vez que vamos fazer um ” push”.

Hoje vou mostrar como é simples mudar o comportamento local do Git em relação a isso, e para isso vamos usar o utilitário de configuração interno do Git chamado “git config”.

Existem vários comportamentos de como o Git faz o push, segue a lista dos possíveis comportamentos que podemos usar:

  • nothing – não faz nenhum push
  • matching – faz push de todas as branchs que tenham o mesmo nome local e remotamente
  • upstream – faz o push da branch atual para a sua branch remota correspondente (mesmo nome)
  • simple – parecido com a “upstream”, porém se a branch remota tiver um nome diferente, nenhum push é feito
  • current – talvez seja a opção para a maioria, envia o branch local para o branch de mesmo nome no servidor remoto

Agora que você já sabe o que cada opção representa, basta configurar o Git para usar a opção que melhor se encaixa no seu caso com o comando (exemplo):

git config push.default current

Para usar qualquer outra opção, substitua o “current” no comando, pela opção desejada dentre as opções da lista acima.

Agora que você configurou o comportamento padrão de como o Git faz o “push”, basta usar “git push” e ser feliz.

Um abraço. Que o Senhor vos abençoe!

Git – Como adicionar automaticamente os arquivos apagados no seu commit

Olá a todos,

Um problema comum entre os usuários do Git, se deve ao fato de que toda vez que você apaga um arquivo do seu projeto, você precisa executar o comando de remoção do Git e só depois de remover todos eles, é que você pode efetuar o commit, ex:

git rm arquivo.txt
git rm arquivo2.txt
git rm arquivo3.txt arquivo4.txt
git commit -m "remocao de arquivo"

 

Porém existe dois meios fáceis e rápidos de fazer o Git adicionar a remoção desses arquivos automaticamente. O primeiro é:

git add -u .

 

E o segundo é:

git add -A .

 

Ao executar este comando último comando “-A .”, você está na verdade executando:

git add .
git add -u .

 

O comando com parâmetro “-u .”, adiciona os arquivos que você apagou do seu projeto no stage, ou seja, é como se você estivesse executando um  “git rm [arquivo]” automaticamente para cada arquivo apagado.

Então ao invés de usar o “git rm [aquivo]”, use apenas os comandos:

git add -A .
git commit -m "meu novo commit"

 

Agora, para quem quiser algo mais rápido e mais prático, caso você vá fazer um commit direto, tem um outro atalho, que é o comando:

git commit -a -m "meu mais novo commit"

 

O parâmetro “-a” do commit, executa vários comandos comuns antes de fazer o commit efetivamente, e uma das coisas é executar o “git add -u”.

 

Obs: A única coisa que estes comandos não fazem é adicionar um novo arquivo ao stage, isso tudo só funciona para arquivos que já são do stage.

 

Espero ter ajudado pessoal.

Mobile – Aplicativo da Beija-Flor é elogiado e aparece em várias mídias

Olá,

O aplicativo da escola de samba Beija-Flor alcança elogios na loja do Google e é divulgado em várias mídias para que as pessoas façam o download e usem o recurso de “Mandar um beijo para a Beija”.

Eu desenvolvi o aplicativo para Android, todo o backend para servir aos aplicativos e o painel administrativo. Pelo painel administrativo você gerencia a agenda, fantasias, desfile, upload de fotos pelo aparelho (Android ou iOS) e galeria de fotos.

Confira algumas matérias sobre o aplicativo.

 Um grande abraço.

PHP – Usar aspas simples ou duplas para criar uma String?

Olá pessoal,

A um tempo atrás estava pesquisando sobre performance e um dos pontos levantados foi o fato de usar aspas duplas, pois para o interpretador do PHP custa muito mais processamento exibir uma frase do tipo:

"Nome: $nome"

Do que:

'Nome: ' . $nome

E para comprovar isso, usei o codepad.org para executar e medir o tempo de processamento de um script bem simples que realiza o teste nestes dois cenários.

O primeiro script que usa no teste aspas duplas está aqui:

https://gist.github.com/prsolucoes/bbb047c320f9e50e875f

O segundo script que usa no teste aspas simples está aqui:

https://gist.github.com/prsolucoes/7677b60d600feb6b091c

 

Resultado (média de tempo em MS para 3 execuções):

Com aspas duplas: 76ms

Com aspas simples: 60ms

 

São 16ms acrescentados no tempo de execução do script, simplesmente por suar aspas duplas. Imagina isso multiplicado por N em um sistema cheio de códigos utilizando aspas duplas por todo lado.

Espero que tenha ajudado.

Mobile – Últimos aplicativos mobile que criei

Olá,

Recentemente consegui desenvolver e aprovar diversos aplicativos mobile. Segue lista de alguns deles para divulgação:

Android:
# Aplicativo interno do IngressoCerto para leitura de ingressos
iPhone: