sábado, 20 de abril de 2013

Pandoc

Pandoc é um conversor universal de documentos disponível em Linux, Windows, Mac, etc. Você pode escrever um documento em sua linguagem favorita: markdown, reStructuredText, textile, HTML, DocBook, LaTeX, ou MediaWiki markup e converter automaticamente para quase qualquer formato que quiser.

Atualmente estou usando para escrever meus posts. Eu escrevi esse post em markdown e o converti para HTML usando o Pandoc. Copiei o colei o fonte no blogger, depois fiz uns pequenos ajustes.

Por que eu faço isso? Bem, primeiro que nem sempre consigo tempo para ficar escrevendo direto no blogger. Escrever HTML diretamente é chato, trabalhoso e te deixa muito suscetível a erros. Escrever somente o texto do post, gera um trabalho grande depois de inserir os links e formatações necessárias.

Então, escrevo em markdown que é uma linguagem de marcação que me permite escrever um texto com diretivas de formatação que são simples, bonitas de ler e fáceis de entender por serem humanos mas que consigo converter em código HTML com um comando.

Além de coisas simples como _itálico_ --> itálico e __negrito__ --> negrito existe um tratamento especial para links.

Por exemplo, vamos tomar o primeiro parágrafo em markdown:

[Pandoc][1] é um conversor universal de documentos disponível em Linux, Windows, Mac, etc. Você pode escrever um documento em sua linguagem favorita: [markdown][2], [reStructuredText][3], [textile][4], [HTML][5], [DocBook][6], [LaTeX][7], ou [MediaWiki markup][8] e converter automaticamente para quase qualquer formato que quiser.

No final do arquivo eu tenho:

[1]: http://johnmacfarlane.net/pandoc/
[2]: http://daringfireball.net/projects/markdown/

O pandoc, ao converter para HTML constrói os links corretamente buscando as referências no final do arquivo. Existem muitas outras formas de criar links mas essa e a minha favorita.

Outro recurso que uso bastante do pandoc é a geração de PDF. Guardo os arquivos como markdown, pois são mais fáceis de ler e editar, mas quando preciso enviar a alguém converto para PDF. E como o pandoc aplica a formatação indicada no markdown, sai um PDF bonito de se apresentar.
Para converter um documento usando pandoc basta fazer:

$ pandoc arquivo_original.md -o arquivo_convertido.pdf

O pandoc cuida de adivinhar os formatos e converter tudo para você.

Para funcionar conversão para pdf o pandoc depende do latex.
Por fim, um recurso muito legal é o de templates personalizados. Com ele, você consegue configurar a formatação do seu documento convertido. Primeiro você obtém uma cópia do tempalte padrão:

$ pandoc -D html > template.html

Então você edita o template ao seu gosto. As palavras cercadas por $ são variáveis. O pandoc substituirá essas variáveis para você. Você também verá uns if da vida que verificam se uma variável existe antes de colocar o conteúdo dela em alguma lugar. E também há loops através do for para variáveis com mais de um valor.

Algumas variáveis são criadas pelo próprio pandoc ao analisar o seu documento, como a variável $body$, outras podem ser configuradas via linha de comando, por exemplo, agora vamos colocar tudo junto:

$ pandoc arquivo_original.md -o arquivo_convertido.html --template template.html -Vauthor="Fulano Silva"

Nesse exemplo estamos definindo um template a ser usado e estamos passando a variável $author$.

Outra opção legal é a --toc (table of tontents/tabela de conteúdos) que lista no começo do documento um link para todos os títulos, criando um índice.

Atualmente estou fazendo alguns experimentos para gerar páginas HTML simples a partir de algumas notas que tomo para uso próprio. Como configurar um sistema, usar outro, trechos de shell scripting e etc. Eu anoto tudo em markdown para consumo próprio, mas tenho um script automaticamente gerando essas notas em HTML e compartilhando como páginas de internet a partir do meu computador.

sexta-feira, 19 de abril de 2013

Dica para o fim se semana - Worms Revolution

Até domingo você pode jogar de graça via Steam o jogo mais recente de uma das franquias de jogos mais divertidas, o Worms Revolution. Além disso o jogo também está com 50% de desconto, saindo por R$ 12,49 uma cópia ou R$ 37,49 pelo pacote com quatro cópias (aproximadamente R$ 9,38 cada cópia).

Esse novo jogo traz algumas novidades interessantes como a presença de água nas fases (você pode arrebentar uma parede e afogar alguém), apesar do jogo ainda ser em plataforma 2D os gráficos estão um pouco mais 3D e as minhocas agora estão divididas em classes e não são mais todas iguais.

A física do jogo foi melhorada e como no jogo anterior chapéus! Além de outros acessórios para personalizar suas minhocas. Dentre vários outros acessórios. O jogo conta com uma campanha single player para você que quer jogar sozinho e, como sempre, batalhas contra seus amigos num mesmo computador ou online.

Não dói jogar de graça então instale e divirta-se esse fim de semana, e se a experiência foi boa um 4-pack sempre vale a pena.

quinta-feira, 18 de abril de 2013

Gerenciador de contas inativas

Vamos falar de algo sério agora. O que acontece com a sua vida online quando você abandona uma conta? Talvez porque você tenha se cansado, esquecido ou mesmo morrido.

Pensando nisso, a Google disponibilizou um serviço (já faz um tempinho, eu sou lento para escrever posts) que permite você dizer o que fazer com a sua conta caso você nunca mais entre nela.

Primeiro você cadastra o seu celular (vai que você está vivo) para que o sistema te avise com um mês de antecedência que a sua conta será cancelada.

Então você define o período durante o qual não houve nenhum acesso a sua conta e ela pode ser considerada inativa. Esse período vai de três meses a um ano.

Depois você pode definir uma resposta automática para os emails que chegarem para essa conta e, o mais importante, pode escrever emails a pessoas de confiança que serão enviados quando a conta se tornar inativa. Além desse email você também pode compartilhar alguns dados da sua conta do Google (quase como um testamento).

Por fim, ao invés de disponibilizar os seus dados à pessoas de confiança, você pode escolher simplesmente apagar toda a sua conta, isso inclui email, youtube, blogger, enfim, todos os serviços do Google que você utiliza.

Por que acredito que isso seja importante? Bom, para começar, você para quem não sabe que a sua conta não é mais utilizada, continuaria te enviando emails e te xingando por nunca responder. Você continuaria aparecendo nas redes sociais e em resultados de busca. Alguém mal intencionado poderia se apoderar da sua conta, roubar seus dados, e/ou se passar por você.

Sua vida na internet é tão importante quando a sua vida no mundo real e deve-se cuidar dela tão bem quanto.

sábado, 30 de março de 2013

Sobre RSS e a morte do Google Reader

A situação é a seguinte: A google anunciou que vai abandonar o Google Reader (GR) junto com outros produtos menos conhecidos. Mas o que é o GR? O GR é um agregador de notícias na nuvem. Você registra sites e blogs e o GR coleta as últimas notícias e postagens e exibe para você no seu navegador ou celular. Como ele fica na nuvem  você possui uma visão única do seu conteúdo, ou seja, você pode começar a ver as notícias de manhã pelo seu celular e continuar pelo navegador quando chegar ao trabalho e terminar vendo no seu computador a noite. O GR se preocupa em sumir com o que você já leu e apresentar só as notícias não lidas. Além disso, o GR também permite aos usuários compartilhar essas notícias.

Por que matar o GR?

De acordo com a Google, eles estão sem planos para o produto, como o GR é um leitor de RSS, não é possível aplicar o modelo de negócios da Google (propagandas) de forma adequada. O GR também se transformou em uma rede social e isso não estava nos planos (talvez isso ameace um pouco o Google+), e como o GR, apesar de muito utilizado, não atingiu a escala mínima de usuários que o Google acha justificável (que é gigantesca) para ter uma equipe técnica alocada (leia mais aqui), então, resolveram cancelar o projeto.

Existe alguma alternativa ao GR?

Desde que surgiu a notícia da morte do GR, andei procurando alternativas e devo dizer que fiquei muito satisfeito. Eu estava acomodado com o GR, pois era integrado ao Google e fazia o que eu queria de forma minimalista.

Agora encontrei o Feedly e com ele temos:
  1. Importação automática de todos os feeds do GR;
  2. Armazenamento online dos feeds de forma que podem ser acessados via web;
  3. Plugins para Firefox e Chrome (Estou sendo omisso de propósito com o IE e o Safari, fica a dica);
  4. Interface bem construída, confortável de usar e bonita de se ver;
  5. Aplicativos para Android e iOS;
  6. Compartilhamento por email e nas principais redes sociais (Google+, Twitter, Facebook, etc)
Mesmo se as petições no change.org para que a Gogole não mate o GR, acredito que vou ficar com o Feedly. Poder ler meus feeds do PC de casa, trabalho e smarthphone sem esforço é muito bom, e fazer isso em uma interface legal é melhor ainda.

RSS

Como o LeGauss também é cultura, vamos falar um pouco mais sobre RSS.

O RSS (Really Simple Syndication), ou também 'RSS feed', 'webfeed' ou 'Atom', é um arquivo de texto, em formato XML, que descreve as novidades em um site ou blog. Normalmente, ele é gerado e atualizado automaticamente pelo site assim que surge algo novo. Ele contém informações a respeito das últimas postagens, contendo título, um resumo, um link para o artigo, comentários sobre o artigo postado pelos outros leitores do blog e algumas outras informações extras que não valem a pena de serem mencionadas.

Você passa o endereço desse arquivo para o seu leitor RSS e ele fica responsável por verificar, de tempos em tempos, quais as últimas notícias, o que você já leu, compartilhar o que você mais gostou e etc. Todo o esquema é inteligente o suficiente para que, para alguns sites, basta que você passe o endereço do site para o leitor de RSS que ele acha o arquivo RSS para você (viva a padronização) e cadastra o feed de notícias.

Os leitores do LeGauss podem adicionar o este maravilhoso blog em seu feed de noticias (se ainda nõa fizeram, claro) através do botão no lado direito (->) na caixa intitulada "Use seu leitor de RSS para nos seguir!". Se você já instalou o Feedly e clicar nesse botão e escolher a opção "Atom" ele vai abrir o blog no Feedly automaticamente e, a partir daí, é só apertar o botão +add no topo. Você também pode simplesmente passar o endereço do legauss para o Feedly e deixar ele se virar.

Fica a dica para o feriadão, grandes jogos com 75% de desconto...

Somente neste final de semana, dois grandes jogos com 75% de desconto no Steam.

Hitman: Absolution (R$ 17,49)


Jogo mais recente da série Hitman, novamente você joga como o famoso agente 47, assassino profissional. Não vou entrar em detalhes da história para não estragar o jogo, mas basta dizer que coisas deram muito errado e agora 47 é um agente renegado enfrentando um mundo de inimigos.

Em questão de gameplay, esse jogo traz diversas mudanças que podem agradar ou não os fãs antigos da série. A mais importante é como as fazes são apresentadas ao jogador. Nas versões anteriores, os mapas eram enormes e você era livre para explorar e observar, aprender rotas, descobrir formas de causar acidentes, e etc. Agora as fases são menores e mais lineares, porém ainda mantém o resto: explorar, observar e memorizar. Com isso, o jogador está livre para experimentar mais e poder re-jogar apenas partes específicas dos mapas. Você acaba jogando em uma mesma parte diversas vezes, em busca de conquistas, pontos ou apenas observar o que acontece se você fizer aquilo diferente.

Um ponto negativo dessa nova versão é que foi retirado o planejamento antes da missão, você não mais escolhe com quais armas começar e estuda os mapas e objetivos. Isso faz sentido dentro do jogo (lembre que você agora é um agente renegado) mas é um pouco triste.

Outra adição muito bem vinda é um pseudo modo multiplayer. Jogadores podem criar contratos e disponibilizar isso para outros jogadores para que possam competir por pontos. Um contrato é algo como: Na fase A matar os inimigos B1 e B2 com a arma C em D minutos sem ser visto e vestido como uma galinha. Sim, você pode colocar restrições nos contratos como com qual disfarce o jogador deve estar na hora de matar o alvo.

Em suma, Hitman: Absolution é um grande jogo e por R$ 17,49 é garantia de horas de diversão e consciência limpa por ter gastado tão pouco em um jogo tão bom! 

Grand Theft Auto IV: Complete Edition (R$ 11,24)


Você é um russo mau encarado tentando uma nova vida nos Estados Unidos. Você veio a convite de seu irmão, que já estava morando nos EUA faz um tempo e se gabava de uma boa vida. Ao chegar, descobre que tudo é uma mentira e ainda por cima descobre-se envolvido com a máfia russa.

Esse é o mesmo famigerado GTA de sempre. Você é livre para andar pela cidade fazendo o que bem entende, arrumando muita confusão, fugindo da polícia e, de vez em quando, parando para fazer as missões da história principal e avançando o jogo um pouco.

Os gráficos e a mecânica do jogo evoluíram bastante mas não há muito o que se falar, GTA é sempre GTA, muito divertido, mas dirigir pela cidade sempre cansa um pouco (odeio trânsito, mesmo que virtual). Mas por esse preço, vale muito a pena!

sexta-feira, 29 de março de 2013

Compre grandes jogos por preços incríveis e ainda ajude crianças e outras pessoas

Boas novas no mundo dos jogos. Dois novos The Humble Bundle estão no ar.
Para quem não sabe, o The Humble Bundle é uma coleção de jogos, que normalmente são excelentes, em que você paga o quanto quiser (a partir de um dólar americano) e escolhe como o dinheiro será usando: se doado para caridade ou indo direto para o criador do jogo. Normalmente, a maior parta da venda dos jogos vai para as empresas que publicam e não para os desenvolvedores. Você pode pagar usando tanto o Google Wallet quanto o Paypal e recebe um link para baixar os jogos, sem DRM para instalar onde e quando bem entender, sem as normais restrições. No caso dos jogos da THQ, também são fornecidas chaves para você adicionar os jogos na sua conta do Steam.

Sobre os jogos nesses bundles vale a pena destacar a Franquia do Darksiders (jogos 1 e 2) que são jogos excelentes de aventura, com uma história interessante e um gameplay fantástico. Já o bundle para Android conta com o famoso Plants vs Zombies, Metal Slug 3 e Anomaly Korea, além de muitos outros. No caso dos jogos de Android, o The Humble Bundle conta com um aplicativo próprio que gerencia todos os jogos já comprados por você e permite que você baixe e instale seus jogos facilmente.

Dentre as instituições ajudadas pelo The Humble Bundle estão a Child's Play que, através dos jogos eletrônicos, tenta melhorar a vida de crianças em hospitais, a Red Cross (Cruz Vermelha), que dispensa qualquer apresentação e a The Electronic Frontier Foundation que é uma organização que briga pelos direitos das pessoas no mundo digital.

Recapitulando, excelentes jogos, excelente preço e caridade, tudo num lugar só. Só cuidado que essas campanhas possuem um prazo de validade, corram e aproveitem!

quarta-feira, 27 de março de 2013

Django - Processadores de contexto

Sempre que vamos processar um template por meio de uma view precisamos especificar diversas variáveis em todas as views. Por exemplo, é uma boa prática especificar as urls completas nos templates ao invés de só o caminho relativo. Para isso, precisaríamos recuperar o endereço base do seu site em todas as views manualmente. Ou então, dados processados relativos ao usuário atual. Teríamos que, na melhor das hipóteses, chamar um mesmo método em todas as views. Não seria muito mais fácil especificar isso uma vez só e o django carregar isso como valores "globais" em suas views? Pois bem, é exatamente isso que os processadores de contexto fazem.

Os processadores de contexto te permitem especificar diversas variáveis que são definidas automaticamente em todos os contextos automaticamente - sem precisar ficar as especificando em cada chamada ao método render_to_response(). Mesmo que os valores armazenados por essas variáveis necessitem ser processados para serem gerados, ou recuperados de um banco de dados.


terça-feira, 26 de março de 2013

Django admin: inlines obrigatórios

Um problema recorrente nos projetos em que trabalhei com Django foi tornar inlines obrigatórios no admin. Fiz diversas gambiarras, conforme a situação,  para tentar resolver isso, mas nunca havia encontrado uma forma satisfatória de resolver esse problema, até agora. Pois sabemos como os usuários são: você avisa que se não fizer de tal modo vai dar problema. O que acontece? Eles ignoram, isso causa um monte de problema e, claro, no final nós desenvolvedores somos os culpados. Enfim.

Depois de bastante tempo de procura, acabei caindo nesta discussão sobre o assunto que me levou a um snippet, um fragmento de código, que resolve o problema. O código a seguir foi obtido aqui. Ele altera o comportamento padrão da classe BaseInlineFormSet que é usada pelo admin para montar seus formulários, fazendo com que obrigue o usuário a salvar ao menos um inline.

segunda-feira, 25 de março de 2013

Dica rápida: Como obter o IP a partir de uma URL

Qualquer coisa online tem um endereço IP associado, seja um computador extra poderoso ou uma calculadora, eles terão endereços associados para poderem se comunicar. Assim como cada um de nós tem um nome, um rg, um cpf, etc para nos identificar unicamente no mundo.

Bem, para que não tenhamos que lembrar esses endereços para navegar na internet foram criados os servidores DNS. Estes servidores fazem a tradução de uma url como http://www.legauss.blogspot.com.br para o IP 74.125.234.235. O primeiro é muito mais simples para nós, mas os computadores não o entendem. Só entendem o segundo.

quarta-feira, 13 de março de 2013

Dica rápida: Como remover entidades HTML no MySQL?

Trabalhando com uma migração me deparei com o problema de ter de substituir entidades HTML por seus respectivos caracteres. Melhor ainda se fossem removidos acentos e caracteres especiais, pois esse valor é usado para gerar links permanentes.

domingo, 10 de março de 2013

Como gerar sitemaps a partir dos modelos do Django

Antes de qualquer coisa, o que é um sitemap?

É um formato de arquivo XML, definido aqui, que possui links para as páginas do seu site. Seu objetivo é facilitar o trabalho dos crawlers (bots de sistemas de busca que varrem os sites para indexação de conteúdo). Um dos critérios principais que todo crawler usa é não dar muita relevância para páginas muito profundas do seu site, ou melhor, páginas em que o usuário deve clicar em muitos links para chegar. Para essas páginas o sitemap é especialmente importante, pois ele ajuda a dar uma relevância muito maior a essas páginas, que poderiam ser consideradas pouco significantes para o crawler.

Sitemaps também facilitam muito o trabalho dos crawlers, os quais vão poder indexar um volume grande de páginas de seu site rapidamente, pois não vão precisar ficar varrendo página por página em busca de links. Porém, para sites muito grandes é aconselhável fazer múltiplos sitemaps, divididos em seções, para que não haja muitos links em uma página.

sexta-feira, 15 de fevereiro de 2013

Aumente o número de acessos a seu site - Sistemas de busca

Vamos explicar o básico para que seu site ganhe bastante com o uso de sistema de buscas. Como sabemos, os sistemas de buscas aumentam a visibilidade do seu site ao indexá-lo e exibir nos resultados de buscas. Porém, eles utilizam diversos critérios para definir quais sites são mais relevantes para a busca, ou seja, quanto mais relevante seu site, maiores as chances de aparecer na primeira página de resultados das buscas.

Quais são os critérios usados para definir essa relevância? Eles variam muito de um sistema para outro, mas sempre funcionam em torno de um conjunto de pontos chaves. Que, vamos resumir todos dentro de visibilidade. Um conceito importantíssimo, pois um site com grande visibilidade, da forma que abordamos aqui, será muito visitado por si só através da famosa propaganda boca a boca.

terça-feira, 29 de janeiro de 2013

Sites com vários idiomas em Django - Rosetta

Já faz algum tempo que entrei em contato com um pacote chamado Rosetta. Mas não mexi com ele. Fiz tudo que precisava no sistema e ficou esquecido lá. Só agora que fui trabalhar com ele de novo. E o achei que interessante.
Como o nome sugere, o Rosetta serve para tradução em vários idiomas. Como ele faz a tradução? Ele gerencia os arquivos de tradução do django. O que deixa tudo muito mais organizado e fácil de traduzir, pois tudo que você vai precisar fazer é preencher os campos para tradução no admin do Rosetta. Bem mais simples que lidar diretamente com os arquivos de idioma do Django, não é mesmo?

Antes de usarmos o Rosetta, precisamos gerar os arquivos de tradução do Django. Isso pode ser feito automaticamente. Primeiro, temos que configurar algumas coisas no settings.py. Pra começar temos que ativar o módulo i18n, que é o módulo de internacionalização do Django. Pelo que notei até na versão 1.4 do Django já vem ativado, caso não, ative-o no seu settings.py:
USE_I18N = True

terça-feira, 11 de dezembro de 2012

O algoritmo de Berlekamp

A teoria de corpos finitos é bastante importante, tanto em questões teóricas, ligadas principalmente à Teoria dos Números, bem como em aplicações práticas envolvendo criptografia e códigos corretores de erros. Frequentemente, é necessário saber se um dado polinômio sobre um corpo finito é irredutível (por exemplo, para construir explicitamente outros corpos finitos) ou até mesmo encontrar uma fatoração completa para tal polinômio. Neste último caso, uma aplicação corrente é para resolver o problema do logaritmo discreto, essencial em criptografia: certos algoritmos envolvem fatorações de elementos de um corpo finito, cujos elementos podem ser representados como classes de equivalência de polinômios sobre o corpo primo, daí a utilidade de um algoritmo para fatorar polinômios.

Em geral, em se tratando de um corpo qualquer, testar irredutibilidade é uma tarefa complicada, e fatorar um polinômio em irredutíveis é mais complicado ainda. No entanto, em se tratando de corpos finitos, existe um algoritmo bastante simples e inteligente! Neste post vou explicar a ideia deste algoritmo, como sempre, do ponto de vista matemático, sem me envolver com questões de implementação (embora não seja difícil) ou de complexidade.

sábado, 10 de novembro de 2012

Algoritmos tontos - Só pra distrair um pouco

Este é um post só para distrair um pouco. Esses dias estava vendo umas bobeiras (pra variar), cai em no mais famoso solucionador de problemas universal e resolvi dar uma olhada para ver se encontrava outros no gênero. Achei o original o melhor deles, mas os outros também são legais. ;)


Nota: na verdade, não são algoritmos, são diagramas de fluxo, fluxogramas ou, para os que gostam de estrangeirismo, FlowCharts. Eles servem para elaborar a lógica e organizar o funcionamento de um programa antes de começarmos a programação de fato.