Archive by Author | ElaineCRO

Android – Erro de keytool x Fingerprint Google Maps

Pois bem, se você chegou até este post é sinal de que você já deve saber que para trabalhar com mapas do google em aplicativos Android é necessário gerar uma chave que vai identificar a sua solicitação de mapa pelo seu aplicativo.

Para gerar esta chave, é necessário realizar o seguinte comando. No windows, talvez seja necessário que você esteja dentro da pasta bin da sua instalação do Java.

keytool -list -alias androiddebugkey -keystore "<pasta_do_debug.keystore>" -storepass android -keypass android

No lugar de “<pasta_do_debug.keystore>”, coloque o endereço da pasta que possui o arquivo debug.keystore. Para localizar este arquivo, se você usa o eclipse, acesse o menu ‘Window’ > ‘Preferences’. Expanda o item ‘Android’ e em ‘Build’ copie o caminho especificado em ‘Default debug keystore’.

O que eu realmente quero falar, é que se você estiver usando o Windows em Português, você pode receber a seguinte mensagem de erro após tentar executar o comando acima:

erro de keytool: java.lang.IllegalArgumentException: unknown format type at

Este erro aconteceu aqui comigo, e no caso eu resolvi isto trocando ‘Formato’ e ‘Local’ em ‘Região e Idioma’ para Inglês (Estados Unidos).

Anúncios

PHP (Erro: Allowed memory size)

Olá queridinhos,

Estava eu, linda e pomposa, gerando meus relatórios em PDF utilizando a biblioteca mPDF. O caso não é o PDF, mas se quiserem conhecer melhor esta biblioteca clique aqui #indico.

O caso é que em um determinado momento eu gerei uma listagem grande (18 páginas em PDF), mas ao invés de visualizar o PDF lindo eu recebi o erro abaixo:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261904 bytes) in caminhoTal on line numeroTal

E aí? O que houve?

Aconteceu que o script que está sendo processado estourou o limite de memória indicado na configuração do PHP (php.ini). Sim, existe uma diretiva no php.ini chamada memory_limit que vai definir o máximo de memória que os seus scripts podem gastar. Até o PHP 5.2.0 o padrão desta variável era “8M” e a partir do PHP 5.2.0 ela recebe “16M” como padrão.

No momento eu estou com a versão 5.3.5 do PHP, mas mesmo assim a minha rotina extravazou o limite de memória.

Qual a solução?

Existe uma função do PHP que se chama ini_set e ela nos permite definir um novo valor para uma opção de configuração. Ela recebe dois parâmetros (string $varname, string $newvalue), no primeiro informamos a opção de configuração que queremos alterar e no segundo passamos o novo valor dessa configuração. Mais detalhes sobre a função ini_set aqui.

Claro que vale lembrar que alguns servidores não permitem que você altere as configurações do PHP e também bloqueiam a alteração de algumas configurações pela função ini_set, então vale verificar!

Então, antes do meu script eu inseri a seguinte linha:

<?
ini_set('memory_limit', '-1');
?>

Percebam que o meu $varname é igual a ‘memory_limit‘ e o meu $newvalue é igual a ‘-1’.

No lugar de ‘-1’ eu poderia ter informado um valor em megabytes, por exemplo “32M”, “64M” ou até “1024M”.

Acontece que neste caso eu estou gerando um relatório (listagem de dados), e essa listagem pode variar e muito no seu tamanho. Neste momento se trata de uma listagem de 18 páginas, mas futuramente ela pode ser 20, 30 ou mais páginas.

Então o $newvalue igual a ‘-1’ informa à minha configuração que eu NÃO quero impor um limite de memória neste momento.

 

Bom.. o que eu queria mostrar é isso. Espero poder ajudar alguém com isso.

Para conhecer mais algumas diretivas do php.ini leia isso.

😉

jQuery UI (Buttonset)

Não é de hoje que o JQueryUI vem ajudando a nossa vida né?? \o/

Pois bem, venho falar hoje sobre um item muito interessante que eu trabalhei recentemente que é o “ButtonSet”. Ele nada mais é que um grupo de checkboxes com o visual de botão, isso aí… aqueles grupos de ‘botões’ que você aperta e ele permanece pressionado!

Primeiramente, faz o favor de baixar o JQueryUI lá no site oficial. Descompacta na sua pastinha de trabalho e vamos lá.
Hoje o JqueryUI está na sua versão 1.8.20 e já trás junto o JQuery versão 1.7.2.

Eu criei uma pastinha de trabalho chamada ‘ExemploBuuttonSet’ e descompactei os arquivos do JQueryUI dentro de uma outra pasta chamada ‘jquery-ui’.

Depois criei um arquivo html ‘buttonSet.html’ para importar os arquivos necessários para o JQueryUI funcionar, da seguinte forma:


<link type="text/css" href="jquery-ui/css/ui-darkness/jquery-ui-1.8.20.custom.css" rel="stylesheet" />
<script type="text/javascript" src="jquery-ui/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.20.custom.min.js"></script>

Após importar os arquivos do JQueryUI vamos criar uma div que conterá todos os checkboxes do nosso exemplo:

<div id="format">
  <input type="checkbox" id="check1" value="check1" />
    <label for="check1">Elaine</label>
  <input type="checkbox" id="check2" value="check2"/>
    <label for="check2">Cristina</label>
  <input type="checkbox" id="check3" value="check3" />
    <label for="check3">Rocha</label>
  <input type="checkbox" id="check4" value="check4" />
    <label for="check4">Oliveira</label>
</div>

Para ativar o buttonSet nos meus checkboxes que estão dentro da div ‘format’, eu faço o seguinte código. Este código pode ser inserido logo abaixo do código de importação dos arquivos do jQueryUI:

<script>
  $(function(){
    $("#format").buttonset();
  });
</script>

Pronto! Com esse código nós já temos o seguinte resultado.

Exemplo ButtonSet JQueryUI

Exemplo ButtonSet JQueryUI

Neste caso eu baixei o JQueryUI com o tema ‘ui-darkness’. Então a cor cinza representa os botões não clicados, o azul aparece quando colocamos o mouse sobre o botão e o laranja representa o botão clicado/marcado.

Para o sistema que estou desenvolvendo, eu utilizei esta série de botões para que o meu usuário pudesse selecionar as colunas que ele quer que um relatório exiba. Então ao marcar ou desmarcar um botão, eu tenho que atualizar uma tabela temporária e para isso eu chamo uma função javascript que vai disparar todo o processo.

Enfim… no fim das contas eu precisava que ao clicar em qualquer um destes botões, uma função fosse chamada para que eu pudesse pegar o id do checkbox clicado para disparar minha função.

Para fazer isso eu fiz o seguinte código:

<script>
  $(function() {
    $("format input:checkbox").click(function() {
      alert(this.id);
    });
  });
</script>

E olha só que legal! Ao clicar em cada um dos meus botões, eu consigo pegar o id dele por exemplo. Com isso e mais um pouco de trabalho já dá pra fazer muita coisa legal no seu sistema.

Para quem quiser… Baixe o exemplo aqui!

É isso aí! Espero ter ajudado…
😉

Variáveis (JavaScript x PHP)

Pois é, pode parecer até gambi né mas às vezes nós precisamos pegar o valor de uma variável PHP e jogar para uma variável JavaScript e vice-versa.

Até que é simples, veja o primeiro exemplo de pegar uma variável PHP e jogar para JavaScript:

<?
//variavel php
$variavelPHP = 'Oliveiras CGI';
?>

 

<script>
//pegando a variável php e jogando numa variável javascript
var variavelJS = '<?=$variavelPHP?>';
alert(variavelJS);
</script>

Agora vamos fazer o contrário e escrever uma variável JavaScript através do nosso código PHP:

<script>
//criando variável JS
var variavelParaPHP= 'Elaine Cristina';
</script>

 

<?
//escrevendo a variável JS pelo PHP
echo "<script>document.write(variavelParaPHP);</script>"
?>

É uma bobeirinha, mas que muitos demoram a entender. Eu mesma quando estava começando a programar demorei um bocado para saber usar isso.

Confesso que utilizo mais a primeira opção, de passar uma variável PHP numa chamada JavaScript. Então fica aí disponível pra qualquer pessoa que estiver precisando de uma luzinha.

Espero que sirva pra alguém…rsrs

😉

Html5 e Geolocalização

Recentemente eu me deparei com a necessidade, de saber a localização de um usuário no momento em que ele está preenchendo uma tela de cadastro. E graças ao HTML5, hoje nós podemos fazer esse tipo de monitoramento.

Primeiro, vamos entender que existem três maneiras do agente de usuário descobrir a nossa posição:

  • Geolocalização IP – essa forma é usada pela maioria dos navegadores nos nossos computadores. Utilizam-se de consultas whois e serviços de localização de IP que permitem determinar a cidade ou a região em que você está.
  • Triangulação GPRS – basicamente para celulares sem GPS ou com GPS desligado. Para estes casos, é possível determinar a sua posição através da triangulação das antenas GPRS mais próximas. Mais preciso do que a Geolocalização IP, consegue mostrar em qual parte do bairro você está.
  • GPS – é a forma de localização mais precisa, com margem de erro de apenas uns 5 metros. Pode ser usada por celulares ou tablets com o GPS ligado.

Pois bem, conhecendo melhor internamente as várias formas de se localizar o nosso usuário. Vamos ao que interessa…. como saber onde ele está enquanto está navegando ou fazendo um cadastro no meu sistema web?

Basicamente, em primeiro lugar precisamos saber se o agente do usuário tem suporte à geolocalização do Html5 e se possuir, eu chamarei o script que busca a geolocalização.

if (navigator.geolocation){
  navigator.geolocation.getCurrentPosition(getPosicao, displayError);
}

Percebam que eu chamei a função ‘getCurrentPosition’ e que ela recebe dois parâmetros (getPosicao e displayError). Esses dois parâmetros, são funções callback.

  • A primeira função recebe um objeto de posicionamento, e é através dele que conseguimos pegar a latitude e longitude da minha localização.
function getPosicao(position){
  lat = position.coords.latitude;
  lon = position.coords.longitude;
  alert('Sua posicao: '+ lat + ' - ' + lon);
 }
  • A segunda função serve para fazer o tratamento de erro. O nosso usuário pode escolher por não compartilhar sua posição, ou qualquer outra coisa pode dar errado na hora de pegar a geolocalização. Cada erro possui um código que vai de 0 a 3. É possível ver os significados dos erros na função abaixo.
function displayError(error) {
  var errors = {
    0: 'Erro Desconhecido',
    1: 'Permissão negada',
    2: 'Posição indisponível',
    3: 'Timeout'
  };
  alert('Ocorreu um erro: ' + errors[error.code]);
}
  • Ainda é possível enviar para a função ‘getCurrentPosition’, um terceiro parâmetro que é um objeto de configuração. Esse objeto não será utilizado neste exemplo, mas ele pode ter três propriedades: enableHighAccuracy (true/false para o modo de alta precisão), timeout (tempo máximo em milissegundos para esperar pela posição), maximumAge (tempo máximo em milissegundos que o navegador pode cachear a posição).

Pronto! Com isso você já consegue pegar a localização do seu usuário. A partir daí você pode exibir essas informações na tela, usar a api do google maps e exibir um mapa, mandar essa informação para algum campo hidden no seu formulário e salvar essa informação no seu banco de dados. Enfim, com essas informações você já pode desenvolver a situação que for necessária.

😉

SEO – Otimização Externa

Dando continuidade ao post anterior, onde tratamos de identificar o que é SEO e os principais fatores de otimização interna, vamos falar agora sobre os fatores de Otimização Externa, ou OffPage SEO.

Trata-se  de todos os fatores que estão fora do site mas que ao serem bem trabalhados podem ser o que vai realmente alavancar o seu site para as principais posições nos resultados de pesquisa.

 

Vamos listar então os principais fatores de Otimização Externa:

  • Apontamento de sites – refere-se à quantidade e qualidade dos sites que apontam para o site que está sendo otimizado. Quanto mais links externos, melhor será para o seu posicionamento nos resultados.
  • Textos dos links externos – tem a ver com o texto que está descrevendo o site apontado. O mais indicado é que  os links externos citem a sua palavra-chave.
  • Page Rank – quanto maior o page rank do site externo que está apontando para o seu, melhor.
  • Quantidade de links
  • Popularidade dos links
  • Endereços IP – quanto mais endereços IPs diferentes estiverem apontando para o site, melhor será para a sua otimização.
Além de observar a boa utilização desses fatores, é interessante fazer um levantamento dos fatores mais trabalhados pelos sites concorrentes ao seu. Pois assim será possível saber em que ponto você terá que focar mais para ultrapassar o seu concorrente nos resultados de pesquisa.
#ficadica

GridView – Exibindo cabeçalho mesmo quando não há dados

Oláa,

Essa dica é muito simples, porém se trata de um detalhe “besta” que eu custei a descobrir como que se fazia. Quando eu estive precisando disso, ao pesquisar no Google encontrei diversos tipos de gambiarras… algumas muito feias por sinal!!!rsrs..

Quando estamos fazendo uma tela em C#, ao utilizar o GridView logo percebemos que quando o DataSource ligado a este gridview não está retornando nenhum registro o grid simplesmente não aparece. E nem sempre isso é o ideal, às vezes precisamos deixar a vista pelo menos o cabeçalho do grid que em algum momento será preenchido com um lista de informações.

Para isso, basta alterar duas propriedades de aparência do grid: ‘ShowHeaderWhenEmpty’ e ‘EmptyDataText’.

ShowHeaderWhenEmpty recebe true/false que neste caso deve receber true.

EmptyDataText recebe o texto que deve ser exibido no grid caso ele não tenha dados, por exemplo ‘Não há registros’.

Como resultado, teremos um grid com esta aparência quando não houverem dados.

Simples né?? São pequenos detalhes que fazem o diferencial na sua aplicação… 😉

%d blogueiros gostam disto: