• mail@brunobrito.pt

Terminal

Como Converter Imagens para AVIF (com o Automator)

Como Converter Imagens para AVIF (com o Automator) 1240 700 Bruno Brito

O Automator, apesar de pouco popular, é uma das ferramentas mais úteis do macOS. Muitas das tarefas aborrecidas do dia-a-dia podem ser simplificadas com esta aplicação.

Exemplo disso é a conversão de imagens (por exempo, de HEIC para JPG), como tinha mencionado neste artigo. Como sou também grande fã do formato de imagem AVIF, decidi investigar se seria possível converter imagens para este formato através de uma Quick Action do Automator, ao invés de abrir o terminal.

Pelo caminho, aprendi a executar comandos da shell através do Automator e descobri que é até bastante fácil! 😎

Convertendo Imagens para AVIF no Terminal

Comecei por instalar este encoder através do Homebrew, correndo o comando brew install joedrago/repo/avifenc. Se precisares de ajuda com o Homebrew, sugiro que leias este pequeno guia.

Uma vez instalado, converter uma imagem para AVIF é bastante simples. Basta escrever avifenc -q 55 NOME-DO-FICHEIRO.JPG NOME-DO-FICHEIRO.AVIF para obter o ficheiro desejado.

De notar que o ficheiro original não tem que ser um JPG (é apenas um exemplo) e o valor “55” é a qualidade que definimos para o ficheiro final. Tenho obtido ótimos resultados com este valor.

Convertendo para AVIF através de uma Quick Action do Automator

Vamos criar uma Quick Action para que possamos converter para AVIF através do Finder, fazendo simplesmente right-click na imagem pretendida.

Para tal, abrimos o Automator e clicamos em New > Quick Action.

Queremos criar um Workflow que recebe ficheiros a partir de qualquer aplicação. Até podias ser mais específico aqui e definir que só queres ficheiros de imagem, mas no código que vamos inserir já vamos realizar essa filtragem.

De seguida, insere uma acção do tipo “Run Shell Script”. Define a tua shell (provavelmente a /bin/zsh) e altera o “Pass input” para “as arguments”. Este passo é super importante!

Finalmente, copia este código:

for f in "$@"
do
    if file --mime-type "$f" | grep -q "image"; then
        filename="${f%.*}"
        /opt/homebrew/bin/avifenc -q 55 "$f" "$filename.avif"
    else
        echo "Skipping non-image file: $f"
    fi
done

Para garantir que o código funciona, confirma onde ficou instalado o avifenc no teu sistema, escrevendo which avifenc no terminal. No meu caso, está em /opt/homebrew/bin/avifenc. Deves inserir a localização na totalidade—se só correres o comando escrevendo avifenc, não funcionará.

Sobre o Código

Como queremos a conveniência de converter vários ficheiros em simultâneo, vamos ter de encapsular tudo isto dentro de um loop. Mas como chegamos aos ficheiros? 🤔

Serão passados por parâmetros. "$@" é uma sintaxe especial em scripts de shell que representa todos os parâmetros posicionais passados para um script ou uma função.

Conjugando estes 2 conceitos, chegamos afor f in "$@": um loop que vai iterar sobre todos os ficheiros, onde a variável f assume o valor de cada arquivo em cada iteração.

Acrescentei ainda uma condição para a conversão só ocorrer se o tipo de ficheiro for uma imagem. Isso significa que podes selecionar uma pasta inteira que tenha imagens, PDFs e ficheiros de texto, e a conversão só acontecerá nos ficheiros de imagem.

Esta magia acontece com o código if file --mime-type "$f" | grep -q "image"; then que valida o tipo de imagem pelo MIME type.

Por fim, criei uma nova variável para ficar com o nome do ficheiro sem a extensão da imagem (PNG, JPG, etc): filename="${f%.*}"

Agora, a parte fácil, e que já tínhamos visto no terminal: correr a conversão propriamente dita:
/opt/homebrew/bin/avifenc -q 55 "$f" "$filename.avif"

O resultado final será este:

Testando a nossa Quick Action

Podes gravar a tua Quick Action (eu gravei como Image/Convert to AVIF) e testá-la de imediato no Finder:

Após uns segundos, o ficheiro AVIF gerado surgirá na mesma página. Está feito! ✌️

Como sincronizar 2 pastas em macOS com o Rsync

Como sincronizar 2 pastas em macOS com o Rsync

Como sincronizar 2 pastas em macOS com o Rsync 1240 700 Bruno Brito

Como tantos outros, tenho o hábito de manter algumas pastas do meu macOS sincronizadas com um disco externo, para efeitos de backup.

Depois de vários anos a fazer o habitual drag and drop, decidi ir à procura de uma alternativa melhor… e ainda bem que o fiz!

Procurava uma aplicação que preenchesse os seguintes requisitos:

  • verificar se existem ficheiros em falta na diretoria de destino (e transferi-los);
  • verificar se existiram alterações nos ficheiros da diretoria de origem (e, se sim, atualizar esses mesmos ficheiros na diretoria de destino);
  • apagar eventuais ficheiros que já não existissem na pasta de origem (requisito bónus, visto ser uma necessidade rara no meu caso).

A solução, curiosamente, já estava instalada no meu macOS desde que o comprei. Falo do Rsync.

O Rsync é uma ferramenta para o terminal que já deverá estar instalada no teu macOS. Podes ver a versão que tens instalada escrevendo rsync --version.

Rsync no iTerm

O mais provável é que a tua versão esteja desatualizada – a Apple deixou de incluir ferramentas com a licença GPLv3 ou similar, como é o caso desta. No entanto, atualizá-la é um processo simples.

Para o fazer, vais precisar do Homebrew, que menciono em maior detalhe neste artigo, visto ser uma solução fantástica para automatizar a instalação de aplicações.

Para atualizares o Rsync (eu ainda tinha a versão 2), bastará correres o comando brew install rsync.

Agora sim, está na hora de ficares a conhecer os comandos mais populares desta poderosa ferramenta de sincronização de pastas e ficheiros.

Explorando o Rsync

Imaginando um cenário em que tens a dir1 (que é a diretoria de origem) e a dir2 (a diretoria de destino), bastará correres o seguinte comando:

rsync dir1/ dir2

Aquela / é importante que utilizes. Se só escreveres rsync dir1 dir2, ficarás com uma estrutura do tipo dir2/dir1/ficheiro em vez de dir2/ficheiro. Na maior parte das situações, não é o que se pretende.

Se quiseres que as subdiretorias dentro de dir1 também sejam sincronizadas, podes acrescentar a flag -r, mas a opção mais popular é a flag -a, que também preserva as permissões, o grupo, data de modificação e outras informações. Opto praticamente sempre pela segunda.

Podes também acrescentar -v se quiseres um relatório do que foi transferido, e -P para que tenhas uma barra de progresso para as transferências e a possibilidade de continuar transferências interrompidas.

Juntando as peças, ficarias com este comando, que diria que é o mais popular:

rsync -avP dir1/ dir2

Para testares o comando sem transferir realmente os ficheiros (a chamada dry run), podes acrescentar -n.

Este comando é particularmente importante se quiseres acrescentar --delete, que é o comando que apaga ficheiros na diretoria de destino, se os mesmos já não existirem na diretoria de origem.

Se tiveres essa necessidade, aconselho-te a simular sempre primeiro o comando, visto que existem inúmeras histórias de terror de malta que perdeu dados importantes desta forma!

Corre algo deste género primeiro:

rsync -avn --delete dir1/ dir2

E se estiver tudo OK no relatório, retira o n e volta a corrê-lo.

Não te esqueças também que podes utilizar o Rsync entrando numa máquina remota via SSHrsync -a ~/dir1 username@host:diretorio – ou aceder a um disco externo.

No meu caso, visto que o meu disco se chama “Elements”, escreveria algo deste género:

rsync -av dir1/ /Volumes/Elements/dir2"

Estes são os comandos mais populares, mas podes sempre consultar o manual para casos mais específicos.

Para mais comandos no terminal, passa os olhos por este artigo!

Como automatizar a instalação de aplicações em macOS

Como automatizar a instalação de aplicações em macOS

Como automatizar a instalação de aplicações em macOS 1240 700 Bruno Brito

Há muitos anos atrás, quando a minha plataforma de eleição ainda era Windows, era grande fã do Ninite – uma aplicação gratuita para Windows que permitia a escolha de vários programas populares, para que fossem depois instalados silenciosamente (leia-se, sem necessidade de estar à frente do monitor a clicar “Seguinte” vezes sem conta) num novo computador.

Essa aplicação era muito útil naquela altura em que tinha de formatar o disco, ou quando era necessário configurar o computador de um familiar, sem ficar “enfiado” num computador todo o tempo da visita.

Para macOS, tanto quanto sei, não existe propriamente uma alternativa ao Ninite, mas com a ajuda de algumas aplicações para a linha de comando, acabei por criar algo que deverá funcionar de igual forma.

Para este artigo, convém estares minimamente confortável em utilizar o terminal (ou linha de comando). Tens também algumas dicas para o terminal aqui.

O que criei foi simplesmente um script para a shell que, ao ser corrido, instala uma série de aplicações em série, sem fazer perguntas pelo meio. Felizmente, quase todas as aplicações que necessito diariamente permitem ser instaladas desta forma.

O que é necessário então para começarmos? No fundo, de 3 coisas:

#1: Homebrew

O Homebrew é a peça mais importante neste processo, e se já mexeste no terminal de macOS algumas vezes, até é possível que já o tenhas instalado.

Homebrew

O Homebrew é uma forma muito popular de instalação de aplicações open source para macOS, bastando escrever /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" para o instalar.

A partir daí, poderás instalar uma série de aplicações recorrendo ao comando brew install [app].

Desta forma, poderás de imediato instalar algumas ferramentas essenciais, como o node ou o yarn se programas em JavaScript, ou o ffmpeg e o youtube-dl para manipular vídeo (como menciono neste artigo).

#2: Homebrew Cask

O Homebrew Cask é uma extensão do Homebrew que permite que instales aplicações populares como o Google Chrome, Spotify ou Skype correndo apenas uma linha de comando, como brew cask install [app].

Podes fazer uma pesquisa pela aplicação que pretendes recorrendo ao comando brew search, mas também podes ver a lista das centenas de aplicações compatíveis visitando esta página.

Brew Cask

A aplicação será sempre instalada na sua última versão. O Homebrew Cask não se restringe a aplicações gratuitas ou open sourceapps de todo o tipo estão lá, incluindo várias que são pagas.

Este é um comando que utilizo frequentemente quando quero testar uma nova aplicação, em vez de visitar o site e descarregar o installer. Também podes facilmente desinstalar uma aplicação fazendo brew cask uninstall [app].

Por fim, de referir que podes ainda instalar Fonts (ou tipos de letra) com o homebrew-cask-fonts – como eu uso um par de fonts para programar, automatizo até isso, com um comando do género brew cask install [font].

Podes consultar a lista de fonts disponíveis, e respetivo nome, visitando esta página.

#3: Mac App Store command line interface

Neste momento já conseguimos automatizar uma boa parte da instalação das nossas aplicações para macOS, mas falta ainda uma peça importante do puzzle: as aplicações da App Store.

O mas-cli entra em ação para resolver esse problema; instalado com o Homebrew, permite-te listar todas as aplicações pertencentes à App Store que estão instaladas na tua máquina, bem como a instalação de outras.

Podes listar todas as aplicações que já tens instaladas escrevendo mas list. Repara que a aplicação é listada juntamente com um número, que é o ID da aplicação, e a versão que tens instalada.

mas list

A instalação de uma app não é tão direta quanto o Homebrew Cask, porque precisas de saber o ID da aplicação primeiro.

Se quiseres instalar por exemplo o Pixelmator, terás que primeiro escrever mas search pixelmator para encontrar o ID da app que desejas.

mas search pixelmator

Depois, mas install [ID] instalará a última versão da aplicação disponível na App Store.

O mas-cli também te permite atualizar aplicações que não estejam na última versão, correndo o comando mas upgrade.

Juntando as 3 peças…

Todos os comandos que te apresentei poderão ser corridos quando precisares de instalar uma aplicação, mas o propósito deste artigo é ensinar-te a automatizar uma instalação de aplicações “em massa”.

Como exemplo, podes pegar no meu script e alterá-lo para as aplicações que utilizes!

Como instalar o WordPress com o Docker

Como instalar o WordPress com o Docker

Como instalar o WordPress com o Docker 1240 700 Bruno Brito

Esta é a minha nova forma preferida de instalar o WordPress localmente para os meus projetos.

Existem várias alternativas, como o XAMPP ou o VVV (Varying Vagrant Vagrants), mas esta solução com o Docker parece-me a mais rápida.

Vamos diretos ao assunto. O que é necessário?

  • Algum espaço em disco (cerca de 10 GB);
  • Conhecimentos de como configurar o WordPress;
  • Alguma confiança em utilizar a linha de comandos.

Vamos a isto!

#1: Descarregar o Docker

Deves começar por descarregar o Docker Desktop, disponível tanto para Windows como para macOS.

Vais precisar de criar uma conta no Docker para tal (o registo é gratuito).

Em macOS, o download é cerca de 500 mb, e uma vez instalado, ocupa cerca de 2 GB.

Após a instalação, verifica que o Docker Desktop está a correr, conforme esta imagem:

Docker Desktop is running

#2: Criar o ficheiro docker-compose.yaml

Cria a pasta onde queres instalar o teu site WordPress, e de seguida, cria o ficheiro docker-compose.yaml – responsável por definir as dependências do container.

Para além do WordPress temos que instalar o MySQL para termos uma base de dados e o phpMyAdmin para a gerirmos facilmente.

Copia e cola o código que coloco em baixo no teu editor de texto preferido (eu recomendo o VS Code ou o SublimeText).

Tem atenção à indentação, que tem que ser respeitada.

#3: Configurar tudo com um só comando

É tempo de navegar até à pasta do projeto no terminal e correr o comando docker-compose up -d.

O Docker vai de seguida fazer a sua magia, instalando na pasta a última versão do WordPress e colocando o site imediatamente disponível na máquina local.

A primeira vez demora algum tempo, porque o Docker terá que descarregar e configurar o WordPress, MySQL e phpMyAdmin. Das próximas vezes já será um processo bem mais célere.

Docker Compose

#4: Visitar o site

E já está! O site está já disponível em http://localhost:8000/ com o habitual ecrã de configuração do WordPress.

Idioma do WordPress

Podes também aceder ao phpMyAdmin para gerires as bases de dados, indo a http://localhost:8080/ – todas estas portas foram definidas no docker-compose.yaml e podes claro definir outras, se preferires.

O login/password do phpMyAdmin será wordpress/wordpress e poderás também alterar esses parâmetros no docker-compose.yaml.

#5: E como desligo a máquina?

Quando já não precisares de ter este container activo, o melhor será correres o comando docker-compose down --volumes na pasta do projecto.

Não poderás ter vários sites WordPress a correr em simultâneo sem alterares as portas – portanto cerfica-te que ou as alteras no docker-compose.yaml, ou que desligas esse contentor antes de passar para outro.

A lista dos melhores Comandos de Terminal para OSX

Os melhores Comandos de Terminal para OSX

Os melhores Comandos de Terminal para OSX 1240 700 Bruno Brito

Para utilizares o terminal, não tens que ser um daqueles nerds dos filmes de ficção científica ou do Michael Bay. E, se quiseres alterar algumas definições do OSX, esta será mesmo a melhor via.

Nos últimos dias, tenho compilado uma lista de comandos que utilizo com frequência, e tentarei actualizar este artigo à medida que encontrar mais.

Podes correr qualquer um destes comandos com a app Terminal que vem pré-instalada no OSX. Eu estou a utilizar o iTerm2 v3, que é grátis e traz alguns extras, mas funcionará exactamente da mesma forma.

Vamos a isto!

Actualizações do Sistema

Sempre que fazes uma actualização ao OSX pela App Store, tens de aguardar alguns minutos até que o sistema esteja pronto a ser novamente utilizado. No entanto, se utilizares estes comandos no terminal, podes continuar a trabalhar e só terás que fazer um restart – a actualização ocorre no background.

Começa por escrever softwareupdate -l para saberes as actualizações que estão disponíveis (está sincronizado com o que surgir na App Store).

Actualizações disponíveis via Terminal

Depois, sudo softwareupdate -i -a descarregará e instalará as actualizações encontradas.

É natural combinar vários comandos, recorrendo ao && – o 2º comando só corre se o 1º for completado com sucesso. Podes então solicitar, numa só linha, um restart automático após a instalação das actualizações, com sudo softwareupdate -ia && sudo reboot.

Se quiseres desligar a máquina em vez de um reboot, sudo poweroff em vez de sudo reboot.

Capturas de Ecrã

O OSX é fantástico para screenshots – raramente precisarás de software adicional. Ainda assim, existem algumas definições que poderás querer alterar:

  1. Queres alterar o endereço das imagens para ~/Desktop? defaults write com.apple.screencapture location ~/Desktop && \ killall SystemUIServer.

  2. As imagens são gravadas como PNG, mas podes alterar o formato – para BMP, GIF, JPG, JPEG, TIFF ou até PDF. Basta colocares a extensão correcta no final deste comando – defaults write com.apple.screencapture type -string "png".

  3. Queres tirar a sombra que surge nas screenshots que surgem quando usas a barra de espaços? defaults write com.apple.screencapture disable-shadow -bool true && \ killall SystemUIServer.

  4. Que tal gravar uma screenshot como JPG após 3 segundos, e abri-la no Preview? screencapture -T 3 -t jpg -P delayedpic.jpg.

Brincando com o Mac

O comando cal mostra o calendário do mês em que te encontras. Queres todos os meses do ano de 2018? cal 2018.

Calendário no Terminal

Podes pedir ao OSX que diga o que quiseres com o comando say. Podes alterar a voz do sistema indo às definições de Acessibilidade. Até podes gravar num ficheiro audio o que quiseres que ele diga, se tiveres o “guião” num ficheiro de texto – say -o audio.aiff -f FILENAME.txt!

Queres descarregar um ficheiro sem abrir o browser? Se souberes o endereço, basta acrescentares curl -O antes do URL.

Se a tua doca estiver a precisar de um restartkillall Dock.

Podes criar um pacote DMG de uma pasta com o comando hdiutil create -volname "Volume Name" -srcfolder /pasta/que/pretendas -ov diskimage.dmg.

Queres gerar uma palavra-passe segura de 20 caracteres e copiá-la para o clibpoard? O LastPass resolvia-te isso, mas este comando também: LC_ALL=C tr -dc "[:alpha:][:alnum:]" < /dev/urandom | head -c 20 | pbcopy.

Gestão de Energia

Queres saber há quanto tempo é que foi o teu último restart? Usa o uptime!

Uptime no Terminal

Queres que o Mac fique “acordado” durante 1 hora? Isso são 3600 segundos, portanto: caffeinate -u -t 3600.

Queres que o ecrã fique desligado após 15 minutos de inactividade? sudo pmset displaysleep 15.

Queres que o computador adormeça após 30 minutos de inactividade? sudo pmset sleep 30.

Velocidade da Repetição das Teclas

De origem, o OSX é algo lento no Key Repeat, e este nem sempre vem activado. Podes ligá-lo com defaults write -g ApplePressAndHoldEnabled -bool false e desligá-lo escrevendo true em vez de false.

O número deste comando vai impactar a velocidade do Key Repeatdefaults write -g KeyRepeat -int 2.

Para onde a seguir?

Se te sentes “em casa” quando estás no Terminal, talvez queiras investigar um pouco mais o que podes fazer por aqui.

Podes começar por este excelente curso gratuito do Wes Bos para aprender a navegar pelas directorias e manipular ficheiros.

Depois, instala o Homebrew, para poderes descarregar todo o tipo de apps mais tarde.

Aqui ficam algumas das minhas aplicações preferidas:

  1. Podes gravar vídeos do YouTube (ou só o audio) com facilidade recorrendo ao youtube-dl.

  2. Se trabalhas muito com WordPress, o WP-CLI vale muito a pena. O mesmo se pode dizer ao Google Font Installer, se quiseres instalar as fonts da Google na tua máquina.

  3. Se gostas de criar GIFs mas queres reduzir a dimensão do ficheiro final, experimenta o Gifify.

Existem centenas de apps disponíveis – esta lista talvez te ajude a encontrar algumas que sejam úteis para o teu caso.

Alguma que recomendes?

    Se quiser entrar em contacto comigo, pode enviar-me um e-mail para mail@brunobrito.pt ou preencher o formulário abaixo.

    NOTA: Todos os campos são de preenchimento obrigatório.