Alterar URL de uploads no WordPress

Em algumas ocasiões pode ser necessário que a URL dos arquivos de uploads seja modificada para apontar para outro endereço diferente do padrão. Isso pode ser feito usando a opção upload_url_path.

Para alterar o caminho http://example.com/wp-content/uploads e deixar como http://static.example.com/wp-content/uploads, a opção upload_url_path deve ser definida como abaixo.

Referência

  • https://developer.wordpress.org/reference/functions/wp_upload_dir/

Manipulando arquivos com NodeJS

Estes exemplos foram feitos a partir dos exercícios disponíveis no nodeschool, pelo workshopper learnyounode.

Lendo um arquivo de forma síncrona

A ideia aqui era fazer um programa em node que pudesse contar o número de linhas em um arquivo cujo caminho foi fornecido via parâmetro.

Lendo arquivo de forma assíncrona

Listando arquivos de um diretório

O programinha abaixo funciona mais ou menos como o comando ls do linux. O primeiro parâmetro é o diretório que se quer listar arquivos e o segundo parâmetro é a extensão dos arquivos que serão listados.

Referências

  • http://nodeschool.io/#workshopper-list
  • https://github.com/rvagg/learnyounode

Hello World com NodeJS

NodeJS é uma plataforma para programação de Javascript no lado do servidor. Foi construído sobre o interpretador Javascript que é usado no Chrome, o V8.

Instalando no Archlinux

Depois de instalado é possível acessar um shell interativo através do comando node.

Um ‘Hello World

Para executar o arquivo acima, basta digitar no console:

Algo mais elaborado que isso poderia ser uma mensagem vinda por parâmetro, quando o comando é invocado.

A execução do arquivo ficaria da seguinte forma:

Referências

  • http://nodeschool.io/
  • https://github.com/rvagg/learnyounode

Ambiente de desenvolvimento Django

O Django é um framework de desenvolvimento Web escrito em Python. Toda vez que começo um novo projeto em Django, eu sigo quase sempre as mesmas etapas. Algumas etapas são auxiliadas por outros programinhas bem bacanas que são o pip, o virtualenv e o virtualenvwrapper.

O pip é um gerenciador e instalador de pacotes Python.  Uso o pip para baixar as dependências dos meus projetos. Eu costumo guardar os nomes das dependência em um arquivo de texto, na raiz do projeto, para aqueles que forem instalar o projeto saberem o que devem instalar com o pip.

O virtualenv é uma ferramenta que permite isolar um ambiente Python. Para cada projeto, eu crio um ambiente Python e uso o pip para instalar as dependências do meu projeto nesse ambiente isolado.

O virtualenvwrapper é um facilitador de uso do virtualenv. Ele já define o lugar onde serão criados os ambientes isolados e provê alguns atalhos para ativar, desativar e apagar esses ambientes.

Instalação das ferramentas

Mostro a seguir como eu instalo o pip, virtualenv e virtualenvwrapper em minha estação de desenvolvimento.

Instalando do pip

Eu costumo instalar o pip através do gerenciador de pacotes do sistema operacional. Eu uso o Archlinux, então instalo da seguinte forma:

Se a versão do pip que foi instalada é muito antiga, você pode usar o próprio pip para atualiza-la.

Instalando o virtualenv

No mesmo estilo acima, eu uso o gerenciador de pacotes do sistema operacional para instalar o virtualenv. Como eu uso o Archlinux, instalo da seguinte forma:

Dependendo do seu sistema operacional, alguns pacotes podem estar mais velhos do o que o desejado. Caso você desconfie disso, você pode instalar o virtualenv através do pip.

Instalando o virtualenvwrapper

Da mesma forma que os pacotes acima, eu uso o gerenciador de pacotes do Archlinux para instalar o virtualenvwrapper.

Só que esse pacote precisa de um passo a mais, que é para carregá-lo automaticamente quando você faz login em um terminal. Para isso tente:

Criação de um projeto com um novo ambiente python

Meu ponto de partida agora é a pasta ~/devel, onde eu guardo todos os meus projetos.

Criando o virtualenv

Eu acho importante ser explícito em relação a versão de Python que vou usar. O Archlinux tem o python na versão 3 por padrão. No caso abaixo, quero criar um ambiente isolado com python 2.

Instalando o Django

Depois que você ativa o virtualenv, seu shell ganha o prefixo com o nome do projeto que você deu, no caso ‘meu_novo_projeto’. Tendo isso, vamos instalar o Django.

Tá demorando né? Sim, o pip é um bocado demorado pra baixar as coisas. Como lição de casa, procure no Google por PIP_DOWNLOAD_CACHE.

Começando o projeto com o Django

Legal, temos o Django instalado no nosso ambiente, agora vamos começar nosso projeto, com o mesmo nome do ambiente que criamos, só pra sermos organizados.

Vamos iniciar o Django pra saber se tudo deu certo.

Agora veja em seu navegador no endereço http://localhost:8000. Se estiver vendo a telinha inicial do Django, tudo deu certo.

Referências

  • https://docs.djangoproject.com/en/1.6/
  • https://pip.pypa.io/en/latest/installing.html#using-package-managers
  • http://virtualenvwrapper.readthedocs.org/en/latest/

Nginx e php5-fpm

Eu precisava rodar no meu servidor uma aplicação PHP, sem que isso despendesse muito esforço e tempo em configurações complicadas, mas que ao mesmo tempo fosse flexível o suficiente para compartilhar o webserver com outras aplicações que rodam em Python.

A solução foi usar o php-fpm, que para minha alegria está no repositório do Ubuntu 12.10. A ideia é instalar o pacote php5-fpm e configurar a diretiva fastcgi_pass no Nginx. Eu fiz o seguinte para começar com uma configuração básica:

Pode ser que ao invés de um arquivo sock, o php5-fpm esta rodando em uma porta TCP, pois depende de como ele vem pré-configurado. Neste caso a configuração da diretiva fastcgi_pass pode ser um pouco diferente, como a seguinte:

Para descobrir isso você pode consultar o arquivo de configuração do php-fpm em /etc/php5/fpm/pool.d/www.conf, procurando pela linha que começa com listen.

Depois desses passos consegui uma página imprimindo ‘oi mundo’ em http://teste.montefuscolo.com.br/.

Referências

O ‘git revert’

Eu precisava fazer com que minha cópia local do git ficasse com o conteúdo igual estava há uns 4 commits atrás. Esses 4 commits no meio do caminho já estavam no servidor remoto, então não posso simplesmente jogá-los fora. Então tive de aprender o comando ‘git revert‘.

O ‘git revert‘ cria um ou mais commits com as alterações que desfazem o conteúdo dos commits indesejados. Abaixo escrevi sequências de códigos que ilustram o uso ‘git revert‘.

Desfazendo 1 commit

Quero desfazer o commit 23a10ce que cria o arquivo de nome “CCC”.

Desfazendo um conjunto de commits

Quero desfazer desde agora (HEAD) até o commit 23a10ce. Vão sobrar em meu diretório os arquivos AAA e BBB.

O ‘git revert’ não volta na história nem reposiciona ponteiros, como faz o ‘git reset’. Ao invés disso, o ‘git revert‘ desfaz alterações que estão no histórico de commits. As alterações feitas pelo ‘git revert‘ podem ser vistas através do log.

Referências

  • https://www.kernel.org/pub/software/scm/git/docs/git-revert.html