Blog

Scroll natural do mouse no Windows 10/11

Se você também alterna o uso entre desktops Linux/Mac/Windows já percebeu que o único sistema que inverte a ordem do scroll no mouse é o Windows.

Graças a esse comando abaixo, executado no power shell em modo administrador, você pode alterar esse comportamento.

$mode = Read-host "How do you like your mouse scroll (0 or 1)?"; Get-PnpDevice -Class Mouse -PresentOnly -Status OK | ForEach-Object { "$($_.Name): $($_.DeviceID)"; Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Enum\$($_.DeviceID)\Device Parameters" -Name FlipFlopWheel -Value $mode; "+--- Value of FlipFlopWheel is set to " + (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Enum\$($_.DeviceID)\Device Parameters").FlipFlopWheel + "`n" }

Não esqueça de reiniciar seu Windows após a execução desse comando.

Fonte: https://gist.github.com/gagarine/d313ee6510009b3f3973c6e0929b1e1c

Alternando entre versões do PHP no MacOS

Você pode se deparar com a necessidade de executar um código baseado em uma versão específica do PHP no MacOS. Para tal podemos recorrer ao Docker ou a uma máquina virtual. Mas se você simplesmente quer usar o PHP direto no próprio sistema operacional, essa dica pode te ajudar.

A instalação das versões suportadas do PHP pode ser feita pelo brew e a troca das versões pode ser feita da seguinte maneira dentro do prompt de comando:

brew unlink php@8.2
brew link php@7.4

Para versões não mais suportadas do PHP, podemos utilizar o repositório shivammathur/php:

brew tap shivammathur/php
brew install shivammathur/php/php@7.3

Happy coding!

Oracle Cloud Free Tier

A Oracle oferece uma faixa gratuita de máquinas virtuais com recursos limitados que podem ajudar muito para pequenos projetos ou serviços temporários de avaliação.

https://www.oracle.com/cloud

Basta fazer um cadastro com fornecimento de um cartão de crédito (caso você ultrapasse a faixa gratuita, será debitado) para ter acesso ao painel de configuração.

Em Compute -> Instances podemos criar as máquinas virtuais. Atente para o selo “Always Free” ao lado de cada opção que fizer.

Juntamente com as instâncias, as redes (net e sub-net) são criadas.

Podemos escolher uma imagem de SO e uma plataforma de hardware. Essa combinação pode ou não ser gratuita de acordo com os recursos selecionados.

Nas configuração da rede criada, as configurações de portas do firewall deverão ser habilitadas bem como dentro do SO instalado.

Lembrando que a imagem Ubuntu fornecida é modificada pela Oracle e precisa da configuração do iptables para abrir portas. Exemplo:

sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save

Migrando um site WordPress

Existem várias formas de migrar um site em WordPress entre servidores diferentes.

Aqui seguem alguns passos sobre uma forma de executar esse processo.

  1. Certifique-se de que o sistema de recuperação de senha está funcionando no site origem. Após a migração a conta do administrador pode sofrer alteração de senha e você pode ficar com dificuldade em logar novamente no servidor destino.
  2. Instalar o plugin UpdraftPlus WordPress Backup na origem. Esse plugin também poderá ser usado para backup com armazenamento nos serviços de nuvem.
  3. Faça um backup dentro desse plugin em Backup/Restauração.
  4. Em Backups Existentes, baixe o arquivo de cada recurso para sua máquina local (Banco de dados, Plugins, Temas, etc).
  5. No servidor destino, crie um site padrão WordPress que vai receber o backup. Atenção para o detalhe da senha do administrador que será alterada após a restauração do backup para o valor usado no site de origem.
  6. Altere o registro DNS para apontar para o IP do servidor destino.
  7. Ative a versão ssl do site com o comando:
    certbot –apache –redirect -d site.com -m user@mail.com –agree-tos
  8. Acesse o site destino e instale o plugin UpdraftPlus WordPress Backup.
  9. Enviar os arquivos de backup para o servidor e executar a restauração.
  10. Deletar as pasta antigas (delete old folders).
  11. Verifique se os links estão funcionando. Caso necessário, altere os links permanentes para o formato padrão.

GIT – Push to Production

Uma das formas de publicar um branch local para um servidor de produção é usar o recurso de hooks nativo do git.

Vamos aqui listar os passos para configurar esse recurso e conseguir enviar as alteração para o servidor usando apenas um único comando na máquina local.

No lado de produção vamos acessar o servidor e criar uma pasta para abrigar os arquivos do projeto. Eu prefiro utilizar o nome do branch que está associado ao ambiente de produção (nesse caso será o main) mas você pode usar qualquer nome, inclusivo o nome do seu projeto.

ssh user@server
mkdir pasta-do-branch

Em seguida, vamos criar um ambiente git vazio para abrigar os comando de hook necessários.

git init --bare ~/projeto.git

Na pasta hooks desse ambiente criado (entre na pasta nome-do-projeto.git) vamos criar o arquivo post-receive e inserir o código nele por esse abaixo.

#!/bin/bash
TARGET="/pasta-do-branch"
GIT_DIR="/projeto.git"
BRANCH="main"

while read oldrev newrev ref
do
  if [ "$ref" = "refs/heads/$BRANCH" ];
  then
    echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
    git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
  fi
done

Esse arquivo, post-receive, deve ser marcado como executável.

chmod +x post-receive

Na máquina local vamos adicionar o branch remoto.

git remote add branch user@server:/path/project.git

Dessa forma, de agora em diante, para publicar o código do branch basta executar o comando abaixo.

git push projeto main

Para se aprofundar nos detalhes desse recurso, consulte a página desse link:
https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

Utilitários Open Source no macOS

Segue minha lista de aplicativos utilitários essenciais no macOS.

AltTab

Alterne entre aplicativos abertos com uma experiência próxima à do Windows.

Rectangle

Coloque as janelas dos aplicativos em áreas específicas do seu display com atalhos de teclado.

App Eraser

Exclua arquivos que poderiam ficar sobrando ao se desinstalar um aplicativo.

Easy Move+Resize

Mova ou redimensione janela de aplicativo clicando em qualquer lugar da mesma junto com uma combinação de teclas para ativar a função.

Keka

Compactador/Descompactador mais completo e com capacidade de integração ao Finder.

Maccy

Histórico da área de transferência.

Hidden Bar

Esconda ícones de aplicativos em segundo plano da barra superior.

CotEditor

Editor de texto com recursos avançados.

Docker MySQL 5.7 Crash de Memória

Essa imagem específica do MySQL (tag 5.7) pode fechar inesperadamente após a inicialização caso, por exemplo, ocorra uma alteração no tamanho da memória ou swap do host.

Para resolver essa questão, o exemplo abaixo indica o caminho.

docker run -e MYSQL_ROOT_PASSWORD=password \
  --name mysql57 --ulimit nofile=262144:262144 \
  -d -p 3306:3306 -v mysql57-volume:/var/lib/mysql \
  mysql:5.7 --sql-mode=""

Descobrindo um arquivo de configuração de um serviço no MacOS

Para descobrir, por exemplo, onde o arquivo de configuração usado pelo MySQL está armazenado, em um terminal digite:

mysql --verbose --help | grep my.cnf

Em outro terminal, reinicie o serviço:

brew services restart mysql@5.7

Retorne ao primeiro terminal e observe o output com os dados usados pelo serviço.

* Essa dica provavelmente funciona em sistemas *nix trocando o comando de restart do serviço pelo específico da plataforma.

Configurando Apache/PHP no Scoop para CodeIgniter

O Scoop é um sistema de gerenciamento de pacotes para Windows similar ao APT para Linux e BREW para MacOS onde a manutenção do processo de instalação/remoção de aplicativos é feito diretamente no prompt de comando com poucos ou apenas um único comando.

CodeIgniter é um framework PHP para desenvolvimento de aplicativos WEB.

Com o scoop é possível instalar o Apache Web Server junto com uma versão específica do PHP para configurar um ambiente de desenvolvimento.

A instalação do Scoop pode ser feita seguindo essa documentação: https://scoop-docs.vercel.app/

Importante habilitar os buckets php, extras e versions no scoop:

  • scoop bucket add extras
  • scoop bucket add php
  • scoop bucket add versions

Após a instalação os seguintes comandos são utilizados para instalar Apache/PHP:

  • scoop install apache php7.4
  • scoop install sudo
  • iex (new-object net.webclient).downloadstring('https://gist.githubusercontent.com/nilkesede/c98a275b80b6d373131df82eaba96c63/raw/apache-php-init.ps1')
  • sudo httpd -k install -n Apache2.4
  • sudo net start apache

A configuração do PHP através do arquivo php.ini deve ser feita dentro da pasta persist\php7.4 do scoop para que as modificações permaneçam inalteradas após atualizações do PHP.

Por padrão, o apache não  configurou o caminho do php.ini para a pasta persist, então, troque a linha

PHPIniDir "D:\Aplicativos\Scoop\apps\php7.4\current"

por

PHPIniDir "D:\Aplicativos\Scoop\persist\php7.4"

no httpd.conf de acordo com o caminho na sua máquina.

Dicas:

  1. é necessário reiniciar o Windows para receber as alterações  feitas no PATH do sistema durante o processo
  2. qualquer alteração em  httpd.conf ou php.ini, o serviço do apache deve ser reiniciado
  3. para ver algum erro de configuração no php, use o phpinfo e também o comando php -v no prompt
  4. inclua o caminho do php corrente no path do sistema (necessário para a carga das extensões). ex: D:\Aplicativos\Scoop\apps\php7.4\current
  5. carregue a extensão intl (necessária para o CodeIgniter)

Apache

Em httpd.conf da pasta persist, habilite o módulo rewrite e remove o comentário da linha

Include conf/extra/httpd-vhosts.conf

para habilitar a leitura dos hosts virtuais em httpd-hosts.conf da pasta persist.

Adicionar a linha abaixo no http.conf dentro de <IfModule dir_module>

 DirectoryIndex index.php

Exemplo de vhost para um projeto:

<VirtualHost *:80>
ServerAdmin rdconsolo@gmail.com

ErrorLog "D:\Projetos\logs\error_log"
CustomLog "D:\Projetos\logs\access_log" common

Alias "/project-root" "D:\Projetos\project-root\public"
<Directory "D:\Projetos\project-root">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted

RewriteEngine On
RewriteBase /project-root/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</Directory>
</VirtualHost>