Criando um site de notícias personalizado no WordPress

pensamento-comportamento
Padrão

Decidi criar uma página para o site que contivesse notícias atualizadas de forma que eu pudesse as ler de uma só fonte e de qualquer lugar ou dispositivo que estiver usando.

O melhor protocolo para receber as notícias é claro que é o RSS, sem sombras de dúvidas, já que a maioria utilização este padrão. No passado, havíam projetos opensource que faziam este trabalho bem, como o projeto do SourceForge Gregarius, mas infelizmente foi descontinuado em 2013.

Estudei alguns frameworks e optei pela versão gratuita do plugin WP RSS Aggregator para fazer o trabalho mais complicado de obter organizadamente as notícias e cadastrá-las no wordpress. O WP RSS Aggregator me poupou todo o trabalho de fazer a leitura e de gerar atividades para o gestor de tarefas da plataforma. Só que ao iniciar a utilização percebi que são necessários plugins adicionais para poder ter mais controle da camada de apresentação. Recorri ao site deles para melhorar a apresentação usando as classes CSS, que ajudaram muito, mas ainda não tinha as informações que eu queria: IMAGEM e DESCRIÇÃO, para ampliar a auto-interpretação da notícia e, decisão, se farei ou não a leitura, in loco, clicando no link. Normalmente os add-ons oferecidos no site resolvem a grande maioria dos casos.

Foi aí que veio o insight de obter tais informações diretamente das publicações através do Protocolo OpenGraph, que tanto tem ajudado nas otimizações SEO. Para usar o OpenGraph, sem ter que re-inventar a roda, usei a classe php do projeto github OpenGraph do Scott MacVicar.

Criei uma rotina em javascript acessando actions do wordpress, em php, por ajax, de forma que pudesse manipular a informação depois da página toda completa, causando um efeito de lazy-loading para as imagens e para a descrição da notícia, enquanto já posso ir lendo.

Para usar o protocolo OpenGraph no worpress é preciso, primeiramente, declarar a classe do Scott no arquivo functions.php do tema ativo:

require_once(‘/caminho-completo/opengraph-master/OpenGraph.php’);

Feito isso já pode ser criada a action no wordpress. Eu poderia (e deveria) ter feito uma action, mas por fins de depuração, separei as duas, como você pode ver abaixo.

A primeira action, obterImagemOpenGraph, obtém o link da imagem, a partir de uma URL:

add_action(‘wp_ajax_obterImagemOpenGraph’,’obterImagemOpenGraph’);
add_action(‘wp_ajax_nopriv_obterImagemOpenGraph’,’obterImagemOpenGraph’);
function obterImagemOpenGraph(){
$urlParam = $_POST[‘URL’];
$graph = OpenGraph::fetch($urlParam);
$retorno = ”;
foreach ($graph as $key => $value) {
if ($key == ‘image’) {
$retorno .= “$value”;
}
}
echo $retorno;
}

A segunda action, obterDescricaoOpenGraph, obtém a descrição, também usando a url como parâmetro.

add_action(‘wp_ajax_obterDescricaoOpenGraph’,’obterDescricaoOpenGraph’);
add_action(‘wp_ajax_nopriv_obterDescricaoOpenGraph’,’obterDescricaoOpenGraph’);
function obterDescricaoOpenGraph(){
$urlParam = $_POST[‘URL’];
$graph = OpenGraph::fetch($urlParam);
$retorno = ”;
foreach ($graph as $key => $value) {
if ($key == ‘description’) {
$retorno .= “$value”;
}
}
echo $retorno;
}

Por fim, o código javascript que realiza a leitura após a página estar toda carregada.

<?php
$script = ‘<script>’;
$script .= ‘var ajaxurl = “‘ . admin_url(‘admin-ajax.php’) . ‘”;’;
$script .= ‘</script>’;
echo $script;
?>

<script>
window.onload = function() {
var list = document.getElementsByClassName(“rss-aggregator”)[0];
Array.prototype.forEach.call(list.childNodes, function(el) {
var texto = el.innerHTML;
var urlNews = el.childNodes[0].href;
var img = urlNews;
jQuery.ajax({ url: ajaxurl, type: ‘POST’,
data: { ‘action’: ‘obterImagemOpenGraph’, ‘URL’: urlNews },
success: function( data ){
jQuery.ajax({ url: ajaxurl, type: ‘POST’,
data: { ‘action’: ‘obterDescricaoOpenGraph’, ‘URL’: urlNews },
success: function( data2 ){
var retorno = data2.substring(0,data2.length-1);
el.innerHTML = “<div class=’wprss-avm-img’><img class=’img-responsive’ src='”+ data +”‘></div>” + “<div class=’wprss-avm-text’>”+ retorno +”</div><br><span class=’wprss-avm-leiamais’>Leia Mais: </span>” + texto;
},
error: function (response){
console.log(response);
}
});
},
error: function (response){
console.log(response);
}
});
});
};
</script>

 

A integração completa por ser vista diretamente na página:

Notícias Atualizadas

Espero que esta pequena implementação e integração de códigos ajude.

 

 

 

 

 

Tenha seu site WordPress com certificado SSL gratuitamente

LetsEncrypt-Free-SSL-for-All
Padrão

Certificados SSL gratuitos estão sendo gerados aos montes pela internet. A Let’s Encrypt é um órgão autônomo, livre e realiza a gestão de certificados públicos seguros de confiança. O serviço é provido através do Internet Security Research Group.

Qual a diferença em si? É o prazo de validade e o órgão que garante que as informações trocadas são verdadeiras. Os certificados gratuitos não validam as instituições em si, apenas o sítio da internet. Os certificados gratuitos possuem validade de até 3 meses e, a cada ciclo, precisam ser renovados.

O programador alemão Felix Arntz resolveu facilitar a vida dos programadores e administradores criando um plugin, também gratuito, para ambientes wordpress, o WP Encrypt, que não só executa a geração do certificado SSL como efetua sua auto-renovação.

A regra de certificação é simples. Se o seu domínio existir tanto no www como no endereço desejado, a certificação ocorrerá sem problemas.  Descrevi dois casos sobre a regra que me acompeteram durante as execuções em ambientes de tipos diferentes.

Por exemplo:

  • Uma vez que precise configurar um domínio raiz, DOMINIO.COM, necessariamente este também deve ser alcançado em WWW.DOMINIO.COM.
  • Caso o certificado seja para um sub-domínio, por exemplo, SUB.DOMINIO.COM, necessariamente também deva ser alcançado em WWW.SUB.DOMINIO.COM.

Tendo a resposta correta através das duas etapas anteriores, clique no botão para registrar sua conta e, posteriormente, faça a geração através do último botão.

Ao final serão apresentados os caminhos reais do conjunto de arquivos necessários para o funcionamento da certificação. Use esta informação para preencher a informação de certificação. No servidor apache, por exemplo, a configuração do certificado Let’s Encrypt, ficou assim:

avm-ssl-wpencrypt

Realizada esta etapa, reinicie o seu servidor de páginas (sudo service apache2 restart).

Para finalizar a configuração do wordpress sob o ambiente seguro, indico também a utilização do plugin Really Simple SSL. Ele faz os updates necessários para o sistema rodar todo em SSL, multisite ou não, sem dor-de-cabeças.

Espero que ajude.

Quaisquer dúvidas, estou à disposição.

Grande abraço!

 

OutSystems

outsystems
Padrão

Já ouviu falar em OutSystems?

Segundo a própria fabricante portuguesa:

The OutSystems Platform is a high-productivity platform as a service (PaaS) intended for developing and delivering enterprise web and mobile applications, which run in the cloud, on-premises or in hybrid environments. The current version is 10, for both the paid and unpaid versions – developers are permitted personal cloud environments to use the platform without charge.

Ainda estou no início do estudo mas imagine a capacidade de, a partir de um modelo de dados sólido, e bem construído, gerar um aplicativo pronto.

Em meados de 2005, diante da necessidade de aumentar a produção para gerar aplicativos que atendessem a campanhas de telemarketing específicas da Embratel, cheguei a criar uma ferramenta parecida, em Delphi, que gerava códigos-fonte Delphi para novas aplicações. Era basicamente o mesmo engine, mas bem mais limitado porque não era um projeto e sim uma ferramenta de produção.

A partir do meu modelo de dados, realizava a leitura do dicionário de dados diretamente do banco de dados e gerava automaticamente um novo sistema, com controladores, gerentes de negócio, modelos e views, em Delphi, a partir do schema.

Mas porque será que remeti minha lembrança ao meu engine? Porque a OutSystems resolveu alguns dilemas e criou uma interface pronta para a edição do sistema, bem representado e dividido, facilitando a manutenção e evolução, minimizando a ocorrência de erros semânticos e lógicos, totalmente na nuvem.

No YouTube existem inúmeros vídeos explicativos no canal da OutSystems.

Senhor Programador, se tiver um tempinho, não deixe ler sobre ele. É bem interessante. Se tiver interesse em aprender, acesse a plataforma de treinamento.

Grande Abraço

Recuperando o Windows 10 de um ghost mal sucedido

gasparzinho
Padrão

Recuperando o Windows 10 depois de um ghost mal sucedido

Na última sexta-feira levei meu notebook para uma verificação no sistema de ventilação para diminuir o aquecimento com processamento excessivo, principalmente pelo processamento de vídeo. Aproveitei e solicitei ao técnico que migrasse meu HD para um SSD. Ledo engano! Quando fui pegar fiquei mais uma hora esperando que ele fizesse tentativas de recuperação. Ele chamou outros técnicos que condenaram o computador dizendo que só formatando. Técnico tem uma dificuldade em se comprometer com dados do cliente. Para eles, formatar é sempre a melhor solução.

Fui pra casa com note “morto”. Fazer tentativas no HD do cliente sem entender qual foi o problema que o afetou pode ser pior que o problema inicial. Depois de muita pesquisa para primeiro entender o problema, consegui resolver.

O Problema

Ao resolver clonar o HD, o técnico optou pelo famigerado Norton Ghost (pessoalmente seria minha última opção, mas…).   Para fazer isso, o ghost desmonta os volumes para fazer cópia segura. Como iria demorar muito, pedi para ele cancelar a clonagem. Ao invés de cancelar o processo, com ESC ou outra tentativa, o técnico optou por desligar o computador. Foi aí que o problema foi gerado. Se ele tivesse cancelado o ghost normalmente, pela opções do software, o ghost teria deixado o volume pronto para uso. Ao desligar, o sistema tornou-se inoperante.

Evidência

A principal evidência do problema é o erro que diz:

Falha em carregar o \windows\system32\winload.exe

Observe que não há indicação de qual unidade (C:, D:, E:) no caminho  do arquivo. Essa é a evidência! O Windows 10 usa uma partição inicial para dar o boot e depois se move para a partição onde está realmente o sistema operacional. O problema é que ele não conseguia atribuir letra para esta unidade e, consequentemente, o boot tornou-se impossível.

A maioria das fontes na internet atribuem 4 comandos para esta recuperação em modo administrador:

bootrec /fixboot
bootrec /scanos
bootrec /fixmbr
bootrec /rebuildbcd

Se mesmo depois disso não funcionar, aí você vai precisar de um pouco mais de perícia para executar o utilitário BCDBoot Utility.

  1. Digite diskpart e pressione Enter.
  2. Digite list volume e pressione Enter.
  3. Observe a tabela e localize a linha que estiver com indicação “Reservado para o Sistema” e anote o número do volume.
  4. Digite select Volume=N e pressione Enter, onde N é o número do volume anotado no passo anterior.
  5. Digite assign letter=w e pressione Enter.
  6. Digite exit e pressione Enter.
  7. Digite bcdboot c:\Windows /s w: /f uefi e pressione Enter.

Este processo fará uma nova verificação dos sistemas operacionais instalados e remontará a lista para que funcione. Onde está “c:\windows” você deverá substituir pela unidade que o windows 10 está. No fim, o que esse comando faz é encontrar seu windows e remontar na unidade W uma lista de sistemas operacionais disponíveis, permitindo que seu computador inicie.

Reinicie o computador e aguarde até que tudo volte como estava.

Para maiores detalhes, deixe seu comentário para que outras pessoas como você possam sanar dúvidas parecidas ou escreva diretamente ao Kevin Arrows no excelente artigo FIX: Steps to Fix Winload.EFI Error, que me ajudou muito no entendimento do problema e montagem da solução.

Ah, e se estiver procurando uma ótima opção para migrar seu HD para SSD, não deixe de visitar o Rene.E Laboratory e usar a ferramenta gratuita por 14 dias Renee Becca. A versão paga custa somente US$ 24,95. É simples, prático, intuitivo e barato para um recurso tão útil.

Grande abraço e até a próxima!

Importando MaxMind IP para SQL Server

geoip
Padrão

Não é de hoje que vemos uma expansão comercial e um marketing sem limites. Mas como obter isso? Como sabe onde seu cliente está? Quais os hábitos dele? Ele compra de casa ou quando está em trânsito? Essas e outras perguntas são respondidas quando você passa a armazenar a informação dele desde sua chegada. A essa informação chamamos de Business Intelligence, ou inteligência de negócios.

Continue lendo

Google Cloud Print

google-cloud
Padrão

À primeira vista é sempre complicado, como qualquer outra coisa de tecnologia, mas vou compilar aqui o entendimento e o passo-a-passo para quem quiser simplificar a utilização de impressoras na nuvem.

Definindo impressora:
– Impressora é aquele dispositivo que quando você mais precisa, não consegue imprimir. Seja quando nova ou já instalada, sempre tem alguma coisa que não fica muito boa, um driver que some, etc.

Continue lendo

Backup do MySQL para Amazon S3

backup-aws-s3
Padrão

Backup do MySQL para Amazon S3

Integração tem sempre aquele porém. Será que preciso comprar um software que resolva os problemas ou seja que conseguimos propor uma solução mais barata que atenda?

Com isso em mente, decidi me aventurar pelas APIs e clientes da Amazon para construir algo que não aumentasse o preço que o cliente já paga. Ora, se a proposta, da Amazon é “pague somente pelo que usar”, quem sou para contrariar.
Continue lendo