Google Maps

Como procurar locais próximos usando SQL

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

E aí, galera! Tudo certo?

Estou fazendo alguns estudos com a API do Google Maps e isso me levou pensar de que maneira é possível encontrar endereços próximos utilizando SQL. Conduzindo minhas pesquisas, encontrei algumas coisas e gostaria de compartilhar.

Antes de mais nada, a Fórmula de Haversine!

Você deve estar se perguntando: o que diabos é Fórmula de Haversine? Não tema, pois a resposta está aqui!

A fórmula de Haversine é uma importante equação usada em navegação, fornecendo distâncias entre dois pontos de uma esfera a partir de suas latitudes e longitudes. É um caso especial de uma fórmula mais geral de trigonometria esférica, a lei dos Haversines, relacionando os lados a ângulos de uma esfera “triangular”.

Fonte: Wikipedia – Fórmula de Haversine

Basicamente, essa fórmula serve para fazer uma triangulação em uma esfera e ajuda encontrar pontos próximos de determinada coordenada geográfica. Leia mais sobre ela no artigo da Wikipedia.

Montando a consulta de triangulação

De posse da fórmula, precisamos convertê-la em SQL. Com base em um estudo disponibilizado na própria documentação da API do Google Maps, fiz algumas adaptações e montei a estrutura que apresento a seguir.

O primeiro passo é montar a tabela que irá armazenar os dados referente aos endereços. Para este exemplo, vamos utilizar uma tabela bastante simples, contendo apenas idnomeenderecolat (latitude) e lng (longitude). O endereço, neste caso, serve muito mais para complementação dos dados (ou para uma eventual busca pela geolocalização) do que propriamente para o cálculo. Continue Lendo

PHP 7 (RC 3) já está disponível!

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Já faz alguns dias que foi lançada terceira versão release candidate do PHP7.

Conforme anúncio publicado no site do PHP, já é possível baixar a RC3 para testá-la. Algumas das novidades do PHP 7 incluem: Continue Lendo

[FISL 16] PHP no Campo de Batalha – Slides da Palestra

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

PHP no Campo de Batalha

Acabei de publicar os slides da minha palestra no 16º Fórum Internacional de Software Livre (FISL).

Você pode acessar no SlideShare: PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva – Slides da Palestra.

Também é possível assistir ao vídeo na TV Software Livre.

Nessa palestra procurei apresentar os mais variados tópicos a respeito de segurança no desenvolvimento de aplicações PHP.

[slideshare id=50353365&doc=phpnocampodebatalha-150709152827-lva1-app6891]

 

Abraços a todos e fiquem com Deus!

 

Seminário PHP em Porto Alegre – 25/04/15

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Seminário PHP

Dia 25 de Abril tem Seminário PHP: O melhor da PHP Conference Brasil em Porto Alegre!

O Rio grande do Sul será o primeiro de 5 estados Brasileiros a receber o evento que traz destaques da edição mais recente da PHP Conference Brasil!

O evento contará com palestras de Jackson Mafra, Ari Stopassola Jr., Nick Vidal, Vitor Mattos e Felipe Wecx. Temas como Phalcon, Drupal, Behat, MongoDB e Big Data.

Inscrições já estão abertas e as vagas são LIMITADAS! Corre lá! Valores promocionais até dia 10 de abril.

Confirma a programação completa e informações sobre inscrição no site: http://www.temporealeventos.com.br/?area=278-Seminario-PHP-Rio-Grande-do-Sul-2015-em-comemoracao-aos-dez-anos-da-PHP-Conference-Brasil

Configurando SSL

Configurando SSL no servidor de desenvolvimento (Apache)

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Você já deve ter se perguntado como funciona o protocolo HTTPS ou então como configurá-lo na sua máquina.

Antes de levar um sistema ao servidor de produção, é essencial testá-lo em um ambiente o mais semelhante possível ao servidor de produção. Muitas pessoas já perguntaram como é possível disponibilizar uma conexão HTTPS com o localhost do Apache.

Pois bem, hoje vou ensinar como configurar o HTTPS no Apache a partir de um certificado SSL auto-assinado.

Neste exemplo eu estou utilizando uma distro Linux chamada Crunchbang (Debian-based – assim como Ubuntu e Mint), mas deve funcionar em qualquer sistema Unix-like. Para os que usam Windows, infelizmente, vou ficar devendo…

Antes de começar, é importante ter um conhecimento básico do Terminal e o openssl instalado. Também usarei o gedit, mas você pode utilizar qualquer alternativa, como vimnanokate etc.

Gerando um certificado SSL auto-assinado

Abra o terminal e preste atenção em qual diretório você está. Se estiver com o usuário normal, provavelmente estará na sua home. Os comandos vão gerar os certificados no diretório corrente. Não há problema em gerá-los na sua home, já que esses arquivos servirão apenas para o servidor de testes. Se alguém tiver acesso a eles, nada extraordinariamente ruim deverá acontecer. Mas, enfim, você está avisado! :)

Todos os comandos neste tutorial assumem que você esteja autenticado como root. Para isso, basta utilizar o comando sudo su, ou apenas su (dependendo da sua distro).

Vamos começar gerando um certificado SSL de 1024 bits. A sua chave pública será X.509 (PKI). Meus nomes de arquivo serão todos phpit, para ficar mais fácil de visualizar. Você pode utilizar o nome que quiser, mas cuide para não se perder!

Utilize os seguintes comandos:

$ openssl genrsa -out phpit.key 1024
$ openssl req -new -key phpit.key -x509 -out phpit.crt

Guardando o certificado no diretório do Apache

Depois de gerar o certificado e a chave pública, precisamos guardar esses arquivos em um diretório do Apache.

Caso ainda não exista (o que é bastante provável), vamos criar esse diretório.

$ mkdir /etc/apache2/ssl/

Agora é só mover os dois arquivos para o novo diretório:

$ mv phpit.key phpit.crt /etc/apache2/ssl/

Por fim, precisamos gerar um arquivo pem para que nosso certificado seja compatível com todos os navegadores. A diferença entre o arquivo crt e o pem é apenas a extensão, o conteúdo é o mesmo. Vamos então, apenas copiar:

$ cd /etc/apache2/ssl/
$ cp phpit.crt phpit.pem

Configurando o certificado SSL para permitir o tráfego HTTPS na porta 443

Agora precisamos criar um VHost que aceite o tráfego via HTTPS. Para isso, precisaremos do certificado que foi criado.

A porta padrão do HTTP é a 80. Já a porta padrão do tráfego HTTPS é 443. O navegador irá automaticamente trafegar por essa porta quando o protocolo for definido para HTTPS. Caso o servidor não esteja escutando nessa porta, o servidor não receberá os dados.

É bastante provável que o Apache já esteja configurado para escutar na porta 443 mas, por via das dúvidas, vamos conferir o arquivo de portas.

$ cd /etc/apache2/ports.conf

Por padrão, o Apache já vem configurado para escutar na porta 443 caso o mod_ssl esteja habilitado. Você deve ver algo semelhante nesse arquivo:

<IfModule mod_ssl.c>
Listen 443
</IfModule>

Se não houver nada semelhante, pode adicionar.

O próximo passo é configurar o caminho dos arquivos de SSL. Aqui vou usar o gedit, mas você pode utilizar o editor que preferir.

$ gedit /etc/apache2/sites-enabled/000-default

Ao acessar o arquivo, você deve ter algo parecido com isso (destaquei as linhas mais importantes):

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  <Directory "/var/www/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>

  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

  <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Essa é a configuração para porta 80. Precisamos configurar a porta 443. O que eu fiz foi duplicar o conteúdo do arquivo e apenas modificar a porta 80 para 443, ficando, assim, com VirtualHosts.

Agora precisamos configurar três diretivas (mas só no VHost 443):

SSLEngineSSLCertificateFile e SSLCertificateKeyFile.

Logo após o fechamento da última declaração de diretório, vamos adicionar as seguintes linhas:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/phpit.pem
SSLCertificateKeyFile /etc/apache2/ssl/phpit.key

Com essas três diretivos nós ativamos o SSL apenas para a porta 443 (visto que estamos editando o VHost dessa porta) e apontamos para os dois arquivos do certificado.

Ao final, o arquivo deve ficar mais ou menos assim:

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
  </Directory>
  ErrorLog ${APACHE_LOG_DIR}/error.log
  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
  </Directory>
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/phpit.pem
  SSLCertificateKeyFile /etc/apache2/ssl/phpit.key
  ErrorLog ${APACHE_LOG_DIR}/error.log
  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Salve o arquivo e estamos prontos.

Agora só resta ativar o módulo SSL no Apache:

a2enmod ssl

Importante (dica do leitor Jardel Rodrigues): se o seu sistema não reconhecer o comando a2enmod, você deve instalar essa funcionalidade. Em distribuições baseadas em Debian (Mint, Ubuntu, Crunchbag etc.), você pode utilizar o comando apt-get install apache2.2-common para instalar o pacote básico de funcionalidades do Apache.

Só falta reiniciar o apache:

/etc/init.d/apache2 restart

Para verificar que tudo está OK, você deve tentar acessar https://localhost/.

Pelo fato de o certificado ser auto-assinado, ele não pertence a nenhuma entidade certificadora confiável. Sendo assim, a primeira coisa que o navegador vai acusar é isso. Basta adicionar uma exceção e tudo estará OK para trafegar utilizando criptografia SSL.

Considerações finais

Caso não tenha conseguido fazer funcionar, tente refazer os passos e verificar se fez tudo certinho. Se, mesmo assim, não rolar, deixe um comentário e vamos tentar te ajudar.

Fazia tempo que eu queria escrever um artigo desse tipo, mas nunca tirei tempo para esmiuçar o processo. Espero que possa ajudar vocês a tornarem o ambiente local o mais parecido possível com o servidor de produção.

Um abraço a todos e até a próxima.
Fiquem com Deus.
Rafael Jaques

25 classes e bibliotecas PHP para desenvolvimento eficiente

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

PHP é uma das mais populares linguagens de programação na internet. Por conta disso, são desenvolvidas “toneladas” de aplicações, classes e bibliotecas na linguagem e para a linguagem.

Neste artigo, faço um levantamento de classes, bibliotecas, ferramentas e documentações que podem lhe auxiliar durante o desenvolvimento. Vamos lá!

Gráficos

pChart

Se você precisa de uma classe para gerar gráficos em PHP, pChart é uma das melhores opções.

pchart

Gantii

Gráficos de Gantt são muito importantes para detalhamento de processos em calendário. Essa classe gera esse tipo de gráfico.

Gantti

Manipulação de imagens

PHP Image Cache

Classe para compressão instantânea e cache de imagens em PHP.

Php-Image-Cache

Wideimage

Biblioteca para manipulação de imagens.

Wideimage

Imagine

Biblioteca para manipulação de imagens, escrita em PHP 5.3.

Imagine

ImageWorkshop

Utiliza a GD para auxiliar na manipulação de imagens. É possível até criar layers como no GIMP e no Photoshop.

Php-Image-Workshop

Phpthumb

Biblioteca que utiliza a GD para aplicar diversos filtros, recortar e redimensionar imagens em tempo real.

Phpthumb

Gerenciamento de erros

Whoops

É um framework de gerenciamento de erros para PHP. É simples de usar e auxilia no processo de debug.

Whoops

PHP Error

Ferramenta para auxiliar na depuração de código. Possui mensagens de erro melhoradas, syntax highlight, snippets de código e funciona com AJAX.

PHP-Error

Detecção de usuário/navegador

Detector

Classe para detecção de navegador e as características disponíveis em cada um.

Detector

MobileDetect

Esta classe utiliza o User-agent para detectar se a sua página está rodando em um computador ou em um dispositivo móvel.

Mobile-Detect

Country from IP

Utilize essa classe para identificar o país de origem do acesso a partir do IP.

Country-From-IP

Pacote Office

PHPWord

Ferramenta para ler, escrever e criar arquivos em formato Word.

phpword

PHPExcel

Ferramenta para ler, escrever e criar arquivos em formato Excel.

Php-Excel

PHPPowerPoint

Ferramenta para ler, escrever e criar arquivos em formato PowerPoint.

Php-powerpoint

Diversas

Ratchet

Biblioteca no PHP para criação de sockets de comunicação em tempo real entre servidor e cliente, utilizando WebSockets. Torna o processo bem mais simples.

Ratchet-Websocket-For-Php

Munee

É uma biblioteca para compilação instantânea de LESS, SCSS, CoffeeScript e redimensionamento de imagens.

Munee

Opauth

Biblioteca para autenticação em diversos provedores de serviço na web.

Opauth

Swift Mailer

Ferramenta excelente para envio de e-mail no PHP. Permite ajustar propriedades, opções e cabeçalhos com facilidade e é bastante fácil de aprender.

Swift-Mailer

Htmlpurifier

Ferramenta para filtrar HTML, removendo códigos maliciosos que possam estar presentes.

Htmlpurifier

FPDF

Excelente classe para gerar PDF. Não precisa de nenhuma biblioteca extra instalada.

Fpdf

Requests

Uma classe para enviar requisições HTTP e interagir com outras páginas e sistemas.

Requests

Gaufrette

Biblioteca de camada de abstração para o sistema de arquivos.

Gaufrette

GeSHi

Biblioteca para colorização de código-fonte.

Highlighter

PHPUnit

Framework PHP para testes unitários.

Phpunit

 

Adaptado do original: http://inspiretrends.com/35-useful-php-classes-libraries-for-efficient-development/