Change WordPress uploads URL

In some occasions may be necessary that file uploads URL points to somewhere else different of standard place. This can be done by using the option upload_url_path.

To change the path http://example.com/wp-content/uploads and let it like http://static.example.com/wp-content/uploads, the option upload_url_path should be set like below.

Reference

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

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/

WordPress development with Docker Compose

Last post I told you about how to setup two dockers to run WordPress and MariaDB together. So, in this post I will show thow to use the docker-compose, that is a tool to help you setup run your dockers with one single command.

Installing

In cool distros you should be able to install docker-compose with command below.

In other distros, you should have the pip installed to have docker-compose. With pip, try the command below

Setup

The docker-compose utility rely on a file named docker-compose.yml. This file stores information about how to run one or more docker containers. You can quickly start, stop and remove a set of dockers with docker-compose.

For example, you can have a docker-compose.yml at root of your theme project and with a single command, start a set of dockers to start wordpress and mysql with your plugin already installed in plugins folder. Check the docker-compose.yml below.

  1. web: and db: There are 2 dockers declared, one named web and other named db
  2. image: A custom WordPress image[1] is used for web container
  3. volumes: The local folder is flagged to be mounted inside plugins folder of web container
  4. environment: a variable is declared to turn on debug in WordPress
  5. links: db is linked with web, but inside web container the db is called mysql
  6. ports: the port 80 is exposed and published from web to host
  7. In db container, the official maridb image is used

With this file placed at your theme folder, anyone with docker-compose can quickly setup a environment for test and develop the plugin.

Using

All commands should be run at same folder of docker-compose.yml.

To create and run containers try the command below and point your browser to http://localhost.

To stop containers you can type Ctrl+C at terminal running docker-compose or in another terminal in same folder, you can use the command below.

To start your already created containers, the command is:

To stop and destroy your containers:

Conclusion

Using docker-compose you can run and develop your WordPress stuff right after clone. You don’t need to worry about setup a webserver, database, setup permissions. With docker you can get all running quickly.

References

  1. https://hub.docker.com/r/montefuscolo/wordpress/~/dockerfile/
  2. https://github.com/hacklabr/mapasdevista/blob/master/docker-compose.yml
  3. https://docs.docker.com/compose/reference/

WordPress development with Docker

I started to learn about Docker[1] and how to use it. Docker let you run an application inside a container. This container pretends to be an operating system, but it uses the kernel shared by the host running docker. It’s a kind of light virtualization.

Here at Hacklab, we start our WordPress projects by copying the WordPress source code to a git repository and after, we create our themes and plugins. It’s horrible, I know, but everybody here knows how to do their jobs if we play in this way.

But now, with Docker, I can imagine a different way to work. I did a test forking[2] official WordPress[3] docker and making possible to mount my stuff inside wp-content. It works nicely! I can have different containers with different WordPress version to test my themes and plugins.

To work in this way, it’s necessary to have docker software and a container running mysql or mariadb.

Getting the images

The command to get docker images from docker hub is docker pull. Docker images lives on a registry, like hub.docker.com. But it’s possible to host own docker registry.

Create and run a MariaDB container

The command to create and run containers from images is docker run. It’s necessary run a database like MariaDB before run WordPress. The MariaDB[4] instructions at docker hub has more detailed options for example below.

Parameter Meaning
--name mariadb will be the container name
-e MYSQL_ROOT_PASSWORD=topsecretpassword define variable that stores root password
-p 3306:3306 forward port 3306 on host to port 3306 on container
-i interactive, do not dettach from shell
mariadb the name of image pulled from docker hub

Create and run a WordPress container

The example below refers to project called Awesome Site. A wordpress container will be created and linked with mariadb running container.

Parameter Meaning
--name awesomesite will be the container name
--link mariadb:mysql link containers, but wordpress will call mariadb of mysql
-e WORDPRESS_DB_USER=awesomeuser database user that will be inserted on wp-config.php
-e WORDPRESS_DB_NAME=awesomedbname database name that will be inserted on wp-config.php
-e WORDPRESS_DB_PASSWORD=awesomepassword database password that will be inserted on wp-config.php
-e WORDPRESS_WP_DEBUG=true turns WP_DEBUG=true and disables opcache
-v $PWD/src/wp-content:/var/www/html/wp-content will mount host folder over container folder
-p 80:80 forward port 80 on host to port 80 on container
-i interactive, do not dettach from shell
montefuscolo/wordpress the name of image pulled from docker hub

Now is possible to access a WordPress site at http://localhost on your web browser. You can also modify your content on you favorite editor and refresh browser to see modifications.

References

1 – https://www.docker.com/
2 – https://hub.docker.com/montefuscolo/wordpress/
3 – https://hub.docker.com/_/wordpress/
4 – https://hub.docker.com/_/mariadb/

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/

Sed – como apagar linhas?

sed é uma ferramenta GNU para tratamento de textos. É possível fazer operações sobre arquivos textuais e saídas de outros programas. Para usar o sed é recomendável saber um pouco de expressões regulares para encontrar padrões, mas é possível usá-lo com simples strings.

Para as experiências a seguir, será usado um arquivo texto com alguns nomes de pessoas, chamada nomes.txt, que contém dois nomes por linha. As alterações feitas pelo sed não persistem no arquivo sem a opção -i, então o mesmo arquivo será usado para todos os comandos.

 Apagar linhas

Em um script para o sed a letra d significa a deleção de uma linha.

Apagar a linha número 2

Apagar da linha 1 até a linha 3 (inclusive)

Apagar da linha 3 (inclusive) até o fim do arquivo

Apagar linhas com o primeiro nome terminando em o

Padrões no sed devem ficar entre duas barras /.

Apagar da linha que começa com Lucas até a linha que termina com Amanda

Apagar a linha que termina com Beatriz e também a próxima linha

É possível realizar mais de um comando para o mesmo padrão que o sed encontrou no texto de entrada. Os comandos ficam entre chaves. O comando N seleciona a linha seguinte junto a linha do padrão encontrado para serem apagadas pelo comando d.

Referências

Resolvendo a falta da tecla ‘/’ na instalação do Arch Linux

Eu não estava conseguindo começar a instalação do Arch Linux no meu notebook, pois eu não conseguia digitar o caracter ‘/‘. Tenho um Samsung Chronos 7, e a ‘/‘ fica junto com a letra Q.

Em alguns dos fóruns que visitei, uma cara mencionou um comando que se chama showkey, que quando executado mostra o código da tecla pressionada. Com esse programinha, descobri que a tecla Q tem o código 16. A saída do comando é mais ou menos essa:

Esse número 16, que é o keycode do Q, deve ser usado para mapear a ‘/‘ em um arquivo que será  lido pelo comando loadkeys. Para isso foi necessário alterar o arquivo com o mapa do meu teclado, que é do tipo br-abnt2.

Encontrei a linha 15 dizendo "altgr   keycode  19 = registered" e assumi que devia fazer algo parecido com o keycode 16. Então antes dessa linha, inseri um nova linha e nesse trecho, o arquivo ficou mais ou menos assim:

Depois bastou compactar o arquivo novamente e usar o comando loadkeys para ter a ‘/‘ funcionando.

Agora é só continuar a instalação. 🙂

Java e Google Chrome

UPDATE: A extensão NPAPI foi removida do Chrome 35 em diante. Essa extensão era necessária para rodar o plugin Java necessário para os bancos. O tutorial abaixo não vai servir para quem usar Chome na versão 35 em diante. Use o Firefox para pagar suas contas.

Formatei meu computador recentemente. Reinstalei tudo bonitinho, mas quando fui pagar minhas contas me deparei com a falta do plugin java funcionando no Chrome.

Sinceramente, ainda não sei o jeito certo de instalar o java na minha máquina. Os passos a seguir foram os que funcionaram pra mim no Ubuntu Server 12.10.

Download do Java

Baixe o pacote tar.gz da JDK ou JRE a partir da página de downloads Oracle[1]. Eu baixei a versão 64bits e a aplicação do Itaú funcionou. Talvez algumas aplicações de outros bancos rodem somente na versão 32bits.

Descompactando o pacote

Eu gosto de deixar essas coisas no /opt.

Instalando plugin java no Chrome

Para isso basta um link simbólico. Se você instalou o Chrome através pacote deb fornecido pelo Google, talvez os caminhos de pastas no seu computador sejam iguais aos meus.

Esses passos foram o bastante para que eu pudesse usar o Internet Banking do Itaú para pagar minha contas. Talvez estes passos sejam semelhantes para outras distribuições também. Boa sorte!

Referências

[1] – http://www.oracle.com/technetwork/java/javase/downloads/index.html