Postado em 4 de novembro de 2015
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 id
, nome
, endereco
, lat
(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
Postado em 29 de setembro de 2015
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
Postado em 9 de julho de 2015
[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!
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!
Postado em 24 de março de 2015
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!
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
Postado em 11 de novembro de 2014
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 vim, nano, kate 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):
SSLEngine
, SSLCertificateFile
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
Postado em 10 de novembro de 2014
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.
Gantii
Gráficos de Gantt são muito importantes para detalhamento de processos em calendário. Essa classe gera esse tipo de gráfico.
Manipulação de imagens
PHP Image Cache
Classe para compressão instantânea e cache de imagens em PHP.
Wideimage
Biblioteca para manipulação de imagens.
Imagine
Biblioteca para manipulação de imagens, escrita em PHP 5.3.
ImageWorkshop
Utiliza a GD para auxiliar na manipulação de imagens. É possível até criar layers como no GIMP e no Photoshop.
Phpthumb
Biblioteca que utiliza a GD para aplicar diversos filtros, recortar e redimensionar imagens em tempo real.
Gerenciamento de erros
Whoops
É um framework de gerenciamento de erros para PHP. É simples de usar e auxilia no processo de debug.
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.
Detecção de usuário/navegador
Detector
Classe para detecção de navegador e as características disponíveis em cada um.
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.
Country from IP
Utilize essa classe para identificar o país de origem do acesso a partir do IP.
Pacote Office
PHPWord
Ferramenta para ler, escrever e criar arquivos em formato Word.
PHPExcel
Ferramenta para ler, escrever e criar arquivos em formato Excel.
PHPPowerPoint
Ferramenta para ler, escrever e criar arquivos em formato 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.
Munee
É uma biblioteca para compilação instantânea de LESS, SCSS, CoffeeScript e redimensionamento de imagens.
Opauth
Biblioteca para autenticação em diversos provedores de serviço na web.
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.
Htmlpurifier
Ferramenta para filtrar HTML, removendo códigos maliciosos que possam estar presentes.
FPDF
Excelente classe para gerar PDF. Não precisa de nenhuma biblioteca extra instalada.
Requests
Uma classe para enviar requisições HTTP e interagir com outras páginas e sistemas.
Gaufrette
Biblioteca de camada de abstração para o sistema de arquivos.
GeSHi
Biblioteca para colorização de código-fonte.
PHPUnit
Framework PHP para testes unitários.
Adaptado do original: http://inspiretrends.com/35-useful-php-classes-libraries-for-efficient-development/