Arquivo mensais:setembro 2014

MySQL – Como obter o tamanho de todos os seus bancos de dados?

Olá pessoal,

Hoje vou mostrar como é simples e fácil agente obter o tamanho de todos os nossos bancos de dados em MegaBytes.

Para isso, basta conectar no seu servidor do MySQL e executar a query:

SELECT table_schema "Banco de dados", 
ROUND(sum( data_length + index_length ) / 1024 / 
1024) "Tamanho em MB", 
ROUND(sum( data_free )/ 1024 / 1024) "Espaço livre em MB" 
FROM information_schema.TABLES 
GROUP BY table_schema;

Obs: Você pode remover a função ROUND e ver o tamanho em um formato mais preciso, sem arredondamento.

Obrigado e até o próximo post pessoal.

PHP – Configurando o PHPStorm 7/8 para reconhecer o YiiFramework

Olá pessoal,

Tenho visto que algumas pessoas que usam o PHPStorm 7/8 não estão conseguindo acessar recursos dinâmicos e interno do framework Yii (www.yiiframework.com) em seus projetos. Vou usar como exemplo para este post o projeto open-source que disponibilizei no GitHub e que também usa o Yii Framework:  https://github.com/prsolucoes/PHPDefaultProject/.

Para resolver este problema, a solução é simples e só demanda configuração diretamente pela IDE, porém de forma resumida precisamos “dizer” a IDE aonde está a pasta raiz do nosso projeto e excluir o arquivo “yiilite.php” da indexação do PHP.

Para isso acesse as configurações/settings do seu projeto e procure pelo menu “PHP > Framework Integration”. Marque a caixa “Enable framework integration” e ao lado selecione na lista a opção “Yii”.

Abaixo disso você terá uma treeview contendo as pastas e arquivos do seu projeto. Procure pela pasta “protected” e ao lado do nome da pasta(na coluna da direita da treeview) se você clicar aparecerá uma série de opções possíveis para você dizer à IDE o que esta pasta representa na integração com o YiiFramework, marque a opção “application base directory”.

Agora do lado esquerdo, procure pelo menu “File Types > PHP files (PHP)”. Na parte inferior do lado direito terá uma caixa de texto com a informação “Ignore files and folders”. Edite indo até o final dos arquivos já ignorados, acrescente um ponto e vírgula (caso já não tenha) e adicione o texto “yiilite.php;” (sem as aspas, claro).

Clique em OK na parte inferior da IDE e espere o índice do PHP ser refeito.

Faça um teste com o código de exemplo:

Yii::app()->db->create[aperte control+espaço ou command+espaço se for mac e verifique se aparece os possíveis comandos do Yii]

Segue algumas imagens do processo:

 

Um abraço e até o próximo post pessoal.

Javascript – Usando o sistema de notificações do WebKit com o Chrome

Olá pessoal,

Não sei se já perceberam, mas no Gmail existe um recurso de notificações, que só funciona no Google Chrome.

Essas notificações aparecem quando você recebe um novo email, por exemplo.

Estas notificações não foram inventadas exclusivamente para o Google Chrome, na verdade é um padrão W3C que está sendo implementado aos poucos nos navegadores, mas somente no Chrome já está funcionando.

Referência: http://dev.w3.org/2006/webapi/WebNotifications/publish/Notifications.html

Mas como podemos usufruir deste recurso em nossos websites?

É bem simples, usando obviamente os novos recursos do Javascript, temos acesso a todas essas APIs. Os passos básicos para implementar são:

1 – Verificar se o navegador tem suporte

2 – Pedir permissão para exibir notificações

3 – Exibir as notificações

Vamos ao que interessa, o código:

function verificarSuporte()
{
    var c = ( window.webkitNotifications !== undefined );
if (!c)
{
    alert("Seu navegador não suporta notificações desktop. Por favor, use o Google Chrome!");
}
    return c;
}

Esta função é a que verifica se o seu navegador tem suporte a notificações desktop ou não. Se o navegador não suportar, a função exibe um alert.

function verificarPermissao()
{
    if ( !verificarSuporte() ) return;

    switch ( webkitNotifications.checkPermission() )
    {
        case 0: // PERMITIDO
        alert( "Permitido" );
        break;
        
        case 1: // NÃO PERMITIDO
        alert("Não permitido");
        break;

        case 2: // PERMISSÃO NEGADA
        alert( "Permissão negada" );
        break;
    }
}

Esta função é a que verifica a permissão de exibir as notificações que seu navegador definiu para a sua página. Para cada caso de permissão, é exibido um alert com a descrição.

function solicitarPermissao()
{
    if (!verificarSuporte()) return;
    webkitNotifications.requestPermission();
}

Esta função que solicita ao navegador a permissão de exibir as notificações. Assim que ela é chamada, o navegador exibe uma caixa de confirmação.

function testeDeNotificacao()
{
    if ( !verificarSuporte() ) return;
    if ( webkitNotifications.checkPermission() == 0 )
    {
        var icone = "http://www.prsolucoes.com/downloads/logo_notificacao.png";
        var titulo = "Mensagem de PRSoluções";
        var subTitulo = "Eu irei desaparecer em 10 segundos!";
        var notificacao = webkitNotifications.createNotification( icone, titulo, subTitulo );
        
        notificacao.show();
        
        setTimeout( function() { notificacao.cancel() }, 10000 );
    }
    else
    {
        alert( "Por favor, solicite permissão primeiro." );
    }
}

Esta função exibe a notificação em si. É bem simples, basta passar a url do icone, o título e o subtítulo.

Obrigado pessoal e até o próximo post.

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.