sábado, 22 de dezembro de 2012

PHP: Separando textos delimitados com a função explode()

Hoje é uma dica rápida: Suponhamos que o banco de dados retornou uma data. Só que a data é uma string no formato 0000-00-00 (por exemplo, 2012-12-21). Como separá-las para que eu possa mexer com dia, mês e ano separadamente? Utilizamos a função explode() do PHP.

A função explode tem a seguinte sintaxe:

Javascript: Fazendo Javavascript executar um código PHP com XMLHttpRequest

Algo bem útil, uma vez que o Javascript não pode fazer coisas, como conectar ao um banco de dados. Usando o PHP como um intermediário, você pode fazer com que o Javascript consulte um banco de dados sem precisar recarregar a página.

O que precisamos fazer é usar o objeto XMLHttpRequest. Nós já falamos dele uma vez no artigo sobre carregar um arquivo XML, portanto, não vou me prender nos detalhes já ditos:

sexta-feira, 21 de dezembro de 2012

PHP: Conexão e Manipulação de Banco de Dados (MySQL)

Esse é um tutorial muito comum, mas é sempre bom juntar tudo em um lugar somente. Hoje vamos ver como criar e manipular o banco de dados. O Banco de dados que estou usando é o MySQL, que é o mais usado. Vou explicar passo a passo, na ordem em que as coisas tem que ser feita.

1. Conexão
A primeira coisa que deve ser feita é a conexão com o banco de dados. Para isso, precisamos informar ao PHP, as informações sobre o banco. Para isso, usamos a função mysql_connect():

quinta-feira, 20 de dezembro de 2012

GameMaker: Adaptando a tela para dispositivos móveis utilizando View

Esse é o meu novo brinquedo! Uma engine de jogo, que apesar de ser uma das mais simples, satisfaz minhas necessidades. E o melhor dela é o fato de poder unificar o projeto, não necessitando fazer diversos projetos, sendo exclusivo para Android, outra para iOS e outra para Mobile. E ainda posso exportat também para Windows, Mac, HTML5 e Windows 8 e para projetos de brincadeira: Steam Workshop.

Mas com essa versatilidade, chega ao mesmo problema que falei ontem: tamanhos de telas e suas diversificadas resoluções. Então, as dicas que usei no outro post continuam valendo, entretanto, temos outra abordagem que podemos utilizar usando um dos recursos que o GameMaker permite utilizar: as View.

quarta-feira, 19 de dezembro de 2012

iOS, Android: Tamanhos de Tela

Um dos grandes problemas, quando trabalha com telefones celulares comuns (leia-se programar com J2ME) era o tamanho de tela: diversos aparelhos com tamanho de telas totalmente diferentes. Então veio a oportunidade para programar para iOS: Eba!!! Só existe 1 tamanho de tela! O tempo passou e lançaram o iPad. Até aí tudo bem, são só dois tamanhos diferentes.... e o tempo passou e agora temos o iPhone 5 e o iPad Mini.... Fuuuuuuuuuuuuuuuuuuuuuuuuuuuu... basicamente temos 4 telas diferentes para trabalhar, e ainda fora de proporção, como no caso do iPhone 5. Enquanto isso, temos a Google lançando o Android e diferente do iOS, nunca se estabeleceu um padrão de telas com medidas exatas, sendo apenas classificadas como small, normal, large e x-large ou ldpi, mdpi, hdpi e xhdpi.

terça-feira, 18 de dezembro de 2012

Algoritmos de Seleção: Método da Roleta

Falar um pouco sobre métodos de seleção. Basicamente método de seleção é um método utilizado para selecionar ou "sorteiar" alguma coisa e são bastante usados nos algoritmos genéticos, na parte de selecionar os melhores soluções.

Quanto aos algoritmos genéticos, falo outro dia, mas os métodos de seleção pode ser útil em outras áreas, principalmente em jogos. Por exemplo, imagine um jogo de quiz para um jogo educacional. Você quer focar as perguntas em uma só pergunta, mas sempre colocando perguntas algumas perguntas de assuntos passados, para fins de estar sempre relembrando. Ou seja, é um quiz que sorteará as perguntas, mas algumas perguntas tem que ter uma chance maior de aparecer do que as outras. É nesse caso que uso o método da roleta.

segunda-feira, 17 de dezembro de 2012

JavaScript: Estruturas de Repetição

Algo bem básico para os programadores, mas sempre bom estar lembrando: as estruturas de repetições. No Javascript nós temos quatros estruturas:

1. while

O primeiro delas é o while (Enquanto). a estrutura dela. Ela tem a seguinte estrutura.

while( /*uma condição aqui*/ ){
    /* Seu código aqui */

}

domingo, 16 de dezembro de 2012

iOS: Restaurar Transações

Algum tempo atrás trabalhei para aplicar o in-app purchase num aplicativo, entretanto foi uma experiência muito frustrante. Era para eu ter escrito aqui, mas os projetos ficaram tão atrasado nesse caso que nem tive tempo de documentar aqui no blog essa experiência. Enfim, precisei retomar o código do in-App Purchase devido a uma exigência da Apple: tem que haver um botão para restaurar todas as compras de uma só vez. 

Como era de se esperar, pouca documentação decente sobre isso, mas consegui fazer. Vamos então ao procedimento:

Primeiro vamos programar a função do botão que vai ativar o processo:

-(IBAction)restaurarInAppPurchase:(id)sender{

}

sábado, 15 de dezembro de 2012

HTML5: Armazenamento Persistente de Dados

Com o HTML5 podendo fazer sites e aplicativos mais complexos, é natural que precise armazenar os dados . A ideia é semelhante aos Cookies e Sessões, mas com a diferença é que esses dados não expiram e também são armazenadas no cliente, sem precisar de comunicação com o servidor.

Bem, assim como temos cookies e sessões, o HTML5 suporta as duas formas:
  • sessionStorage: os dados são armazenados até que a página seja fechada;
  • localStorage: os dados são armazenados indefinidamente, mesmo que feche a janela, desliga o computador e jogue na fogueira (menos, por favor). 
Ambos utilizam um sistema de pares com chaves, ou seja, associo um valor para uma palavra-chave. Para inserir o valor, utilizamos o método setItem. Vejamos o exemplo:

sessionStorage.setItem("minhaChave","Meu Valor");
localStorage.setItem("minhaChave2","Meu Valor 2");

Neste caso, se eu fechar a aba da página, o valor de "minhaChave" não vai existir, mas o valor de "minhaChave2" vai continuar armazenado. Outra coisa importante é que os valores armazenados são strings. Se você for armazenar números, por exemplo, vai precisar fazer a conversão de String para um tipo numérico.

Agora, para recuperar o valor, utilizamos o getItem:

var valor1 = sessionStorage.getItem("minhaChave");
var valor2 = localStorage.getItem("minhaChave2");

 Bem, já vimos para guardar e para recuperar, mas lembra que disse que, no caso do localStorage, os dados ficarão armazenados por tempo indefinido. Então se preciso apagar os valores, tem como? Tem até dois modos! Usamos os métodos removeItem para remover um item específico e o clear para limpar todos os dados:

sessionStorage.removeItem("minhaChave");
localStorage.clear();

Então pessoal, antes de fechar, só lembrando que as únicas páginas que podem acessar esses valores são aquelas do mesmo domínio. Durante a pesquisa, vi que alguns relatam que só do fato da página estiver em subdomínio diferente, os dados armazenados já não podem mais ser acessados.

Então até mais pessoal.

Javascript: Temporizador

As vezes, queremos que um certo algoritmo seja executado em intervalos de segundos, como um relógio virtual. Ou então queremos que o algoritmo espere um determinado tempo para dar alguma resposta para o usuário. Esses dois casos podem ser resolvidos usando um temporizador.

No Javascript tem dois tipos de temporizadores. O primeiro é o setInterval, que executa uma função a cada intervalo de tempo. Ele leva dois parâmetros: a função que queremos que seja executada e o segundo parâmetro, o intervalo de tempo em milisegundos. Vamos olhar um exemplo:

quinta-feira, 13 de dezembro de 2012

HTML5: Tamanho do Texto no Canvas

Mais um artigo sobre Canvas e Texto. O caso de hoje é bem interessante: Digamos que eu esteja criando um botão para usar no Canvas, e na aparência do botão, quero que tenha um rótulo. Mas eu quero que o botão se adapte ao tamanho do texto que vou inserir. Como faço isso? Para nossa alegria, o contexto possui um método para fazer essa medida, o método measureText
Sempre que for usar esse método, faça depois de configurar a fonte, conforme o código embaixo:

ctx.font = "30px Arial";
var tam = ctx.measureText("Olááá Enfermeiraaa");
ctx.strokeRect(10, 10, tam.width, 30);

Esse código cria um retângulo que é capaz de envolver o texto que eu quero. O método measureText retorna um objeto que possui a largura (atributo width) do texto. Sim, somente a largura, pois a altura do texto é definida pela fonte, que neste caso é 30.

Então pessoal, espero que esse tutorial rápido possa ser útil.

quarta-feira, 12 de dezembro de 2012

HTML5: Alinhamento de Texto no Canvas

Já vimos uma vez que podemos inserir textos em uma Canvas, mas eu só mostrei como mudar a fonte e como usar os métodos fillText e strokeText. Mas suponhamos que você queira que o seu texto fique exatamente no centro da Canvas, como faria isso?

Isso não é complicado. Podemos alterar a linha base do texto para deixar no meio. Então, a posição y que indicamos nos métodos fillText ou strokeText vai estar indicando o meio da imagem quanto a posição vertical.

terça-feira, 11 de dezembro de 2012

HTML5: Criando Elementos Clicáveis no Canvas

Uma das grandes problemas de quem está começando a fazer jogos no HTML5. Para fins de navegador, Canvas é como uma imagem qualquer, e qualquer coisa que é desenhada nessa imagem, vira parte da mesma. Agora, a grande pergunta: como é que vou clicar naquele botão que coloquei no Canvas, se ele é apenas um monte de pixels?

Aí entra a importância de criarmos objetos para descrever o que queremos. Vamos supor que queremos um botão retangular. Para isso, vamos criar uma classe para descrever esse botão:

function Botao(x,y,w,h){
   this.x = x;
   this.y = y;
   this.w = w;
   this.h = h;
}

segunda-feira, 10 de dezembro de 2012

Javascript: Javascript e a tag Body

Hoje vou explicar a relação entre o elemento <Body> do HTML e o Javascript. Já aconteceu algumas vezes de eu tentar manipular elementos do <body> antes do mesmo estar carregado, uma vez que a maioria das vezes que insiro um Javascript, ele geralmente é inserido no <head>

Inserir no <head> é aconselhável para funções, pois os mesmos tem que estar carregado antes do usuário poder mexer. Entretanto, na hora do teste esquecemos que o script ocorre logo que o navegador faz o download, então ocorre o erro. 

domingo, 9 de dezembro de 2012

Javascript: Problemas com Atributos de um Classe

Um problema que demorei, mas foi bem simples de resolver. O caso é o seguinte: criei uma classe no Javascript, como exemplo abaixo:

function minhaClasse(a,b){
   this.a = a;
   this.b = b;
   this.c = 0;

 
   function calculaC(){

   }
   
   obj.onload = calculaC;
   obj.src = "oi.html"

}

HTML5/Javascript: Importando outro arquivo JS por Script

A maioria das linguagens de programações permite que você crie scripts ou código fontes em arquivos separados e com uma só palavra, você pode importar esse código externo para o seu código. E havendo uma grande vantagem que é você poder alterar em um lugar e todos os outros códigos que o utilizam é alterado também. 

Entretanto, Javascript não tem essa funcionalidade por padrão, o que complica essa versatilidade. Então pesquisei e descobri uma forma de implementar essa funcionalidade. Vamos para o código:


function include(file_path, feedback){
    var j = document.createElement("script");
    j.type = "text/javascript";

    j.async = true;
    j.onload = feedback;
    j.src = file_path;
    document.head.appendChild(j);
}


sábado, 8 de dezembro de 2012

Javascript: Carregando e Usando Arquivos XML

1. Carregando um Arquivo XML

Para carregar um arquivo XML é simples, basta utilizar um objeto XMLHttpRequest e isso facilitará seu trabalho. Veja o código abaixo:

function xmlLoader(url){
  var Loader = new XMLHttpRequest(); 

  Loader.open("GET", url, false);
  Loader.send();
  return Loader.responseXML;
}

sexta-feira, 7 de dezembro de 2012

Javascript: Criando um Objeto Anônimo

Objetos anônimos são objetos que não são definidos formalmente com uma classe e geralmente são criados on-the-fly. A grande vantagem de utilizar um objeto anônimo é a agilidade de criar uma estrutura e já inserindo valores nela. Por exemplo, vamos dizer que quero criar um objeto que cadastre uma pessoa, podemos simplesmente criar uma estrutura assim:

quinta-feira, 6 de dezembro de 2012

Javascript: Array

Vetores sempre deixam a programação muito mais prática, mas quando você sabe tudo o que pode fazer com um vetor numa linguagem de programação fica muito mais prática ainda. Então vou deixar aqui um material de referência para as operações básicas de Array do Javascript, então tire bons proveitos deles:

Propriedades:
  •  length: indica a quantidade de elementos que o vetor possui;

terça-feira, 4 de dezembro de 2012

HTML5: Usando o Canvas


1. Conhecendo a Tag <Canvas>
Hoje comecei meus estudos para desenvolvimento de jogos em HTML5. A primeira coisa que aprende é a tag Canvas, que é onde o jogo vai ser desenhado. Vamos pegar um exemplo de código:

<!DOCTYPE HTML>
<html>
    <body>
        <canvas id="game" width=800 height=600>
            Seu navegador não suporta HTML 5
        </canvas>
    </body>

</html>


segunda-feira, 3 de dezembro de 2012

HTML5: Definindo a Codificação da Página

Bem, para deixar contextualizado o motivo dessa pesquisa: estou criando um jogo para me ajudar a decorar os caracteres japonês e estou fazendo esse jogo em HTML5. Obviamente, chegaria a esse ponto que preciso deixar claro para o navegador que eu vou precisar usar caracter japonês através de alguma tag, para que eu não precise ficar toda hora modificando a codificação pelo navegador.

Para fazer isso em HTML 5 é simples, basta inserir o seguinte código entre as tags <head>:

<meta charset = "shift-jis" />


Esse código indica para o navegador para usar a codificação Shift-Jis, a codificação que permite visualisar caracteres japonêses. No lugar do Shift-Jis, poderia estar UTF-8 ou qualquer outra codificação.

domingo, 2 de dezembro de 2012

PHP: Manipulação de Arquivo ZIP

Hoje vamos aprender a manipular arquivos ZIP, compactando ou descompactando arquivos em tempo de execução.

1. Abrindo/Criando um arquivo ZIP
Para começar a utilizar o arquivo ZIP vamos instanciar um objeto ZipArchive:

$zip = new ZipArchive();

Aqui instanciamos um objeto ZipArchive na variável $zip. Agora nós vamos abrir o arquivo, semelhante o que fizemos no artigo Manipulação de Arquivos:

Experiências: Política da Apple e programação para iOS

Esse é um artigo para relatar experiências que tive, mas que não se encaixa em um lado totalmente técnico. Neste caso, vou contar duas experiências ruins envolvendo a Apple.

A primeira é a obsolescência planejada da Apple, em apenas dois anos, tenho que, além de pagar os U$99,00 anuais, ter que gastar em atualização de Sistema Operacional para poder receber as novas versões do XCode. Se não fazer a atualização, você não consegue atualizar e para piorar, os novos aparelhos da Apple não tem compatibilidade com a antiga arquitetura disponibilizada. E o mesmo vale para o aparelho de teste, que em dois anos já, porque as novas versões do XCode não tem suporte para a arquitetura antiga. Enfim, se quer distribuir para a Apple, vai ter que desembolsar bastante para a mesma, e se não fizer, é capaz de ficar um bom tempo até descobrir o porquê do seu aplicativo funcionar nos aparelhos antigos, mas não funcionar nos novos.

sábado, 1 de dezembro de 2012

Algoritmo: Merge Sort

Assim como o Quick Sort, o Merge Sort também utiliza a estratégia dividir para conquistar. Entretanto, a estratégia do Merge Sort é dividir o vetor em vários subvetores já no início e ordenar enquanto reconstrói o vetor. 

Esse método possui duas funções,  a que faz as divisões (neste caso, a função MergeSort()) e a função que a reconstrói (a função Merge()).
A função que faz a divisão, faz de modo recursivo, sempre dividindo o vetor ao meio até que não seja possível dividí-lo. 

Depois de dividido, utiliza-se a função de união que irá pegar os dois vetores e unirá ambos vetores, já ordenando seus elementos. E assim vai reconstruindo até que todos os elementos estejam unidos novamente. Veja o psudocódigo abaixo: