quinta-feira, 30 de julho de 2026

Importância da escolha do Character Set e Collation no Firebird e MariaDB

Um dos erros mais comuns e com maior potencial de dor de cabeça na modelagem de um banco de dados é negligenciar a escolha do Character Set e do Collation no momento de sua criação. Ajustar isso tardiamente em um banco de produção exige migrações complexas, reindexação de tabelas e pode quebrar consultas já existentes.

Neste artigo, vamos entender a fundo o papel de cada um desses conceitos e ver como configurá-los corretamente no Firebird e no MariaDB.

1. Desmistificando: Character Set vs. Collation

💡 Em resumo:
Character Set (Conjunto de Caracteres): Determina quais símbolos e letras o banco é capaz de armazenar e quantos bytes cada caractere consome.
Collation (Colação / Ordenação): Determina como esses caracteres são comparados, ordenados e pesquisados em cláusulas como WHERE, ORDER BY e GROUP BY.

O Character Set (Armazenamento)

Cada caractere armazenado precisa ser traduzido em bytes no disco. Se você escolher um conjunto limitado como o ASCII clássico, não conseguirá guardar acentos (á, ç, õ). Se escolher ISO8859_1 ou WIN1252 (comuns em legado), conseguirá armazenar o português, mas falhará ao tentar salvar símbolos em grego, cirílico ou emojis.

Atualmente, o padrão recomendado mundialmente é o UTF-8 (no MariaDB/MySQL conhecido como utf8mb4 e no Firebird como UTF8), pois ele aceita qualquer caractere do planeta.

O Collation (Regras de Comparação)

O Collation define o comportamento do banco em buscas de texto. Por exemplo:

  • Jose é igual a jose? (Diferenciação de Maiúsculas/Minúsculas)
  • Jose é igual a José? (Diferenciação de Acentuação)

No MariaDB e em outros bancos relacionais, os nomes das collations frequentemente trazem sufixos que explicam esse comportamento:

  • _ci (Case Insensitive): Não diferencia maiúsculas de minúsculas. Ex: 'MARIA' = 'maria'.
  • _cs (Case Sensitive): Diferencia maiúsculas de minúsculas. Ex: 'MARIA' ≠ 'maria'.
  • _ai (Accent Insensitive): Não diferencia acentos. Ex: 'João' = 'Joao'.
  • _bin (Binary): Compara byte a byte estritamente (máximo desempenho, mas diferencia tudo).

2. Definição em Níveis de Hierarquia

Tanto no MariaDB quanto no Firebird, você pode definir essas configurações em três níveis:

  1. Nível de Banco de Dados: O padrão herdado por novas tabelas.
  2. Nível de Tabela: O padrão para os campos daquela tabela específica.
  3. Nível de Coluna: Substitui a regra da tabela para um campo individual (útil para chaves de integração, hashes MD5/SHA, etc.).

3. Exemplos Práticos no MariaDB

Criação do Banco de Dados

Recomendado para suporte completo a Unicode e emojis no MariaDB:

CREATE DATABASE sistema_db
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

Tabela com Exceção na Coluna

Note como a coluna hash_senha utiliza um collation binário para comparações exatas e performance:

CREATE TABLE usuarios (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100), -- Herda utf8mb4 / utf8mb4_unicode_ci do banco
  codigo_iso VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_cs,
  hash_senha VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
) ENGINE=InnoDB;

4. Exemplos Práticos no Firebird

Criação do Banco de Dados

Para suporte a acentuação do português do Brasil com compatibilidade UTF-8:

-- Opção com UTF8 (Moderna e recomendada)
CREATE DATABASE '/caminho/banco.fdb'
  DEFAULT CHARACTER SET UTF8
  COLLATION PT_BR;

-- Opção legada em ISO8859_1 (Caso utilize sistemas legados como Delphi antigo/VCL)
CREATE DATABASE '/caminho/banco_legado.fdb'
  DEFAULT CHARACTER SET ISO8859_1
  COLLATION PT_BR;

Tabela com Coluna Customizada

CREATE TABLE CLIENTES (
  ID INT NOT NULL PRIMARY KEY,
  NOME VARCHAR(100), -- Herda do banco
  SIGLA_ESTADO VARCHAR(2) CHARACTER SET WIN1252
);

5. O Impacto Direto no Desempenho e Armazenamento

A escolha incorreta pode afetar a saúde e o tempo de resposta do servidor de banco de dados:

Fator Single-Byte (ex: ISO8859_1 / Latin1) Multi-Byte (ex: UTF-8 / utf8mb4)
Espaço em Disco 1 byte por caractere fixo. 1 a 4 bytes por caractere (variável).
Uso de Memória/Índices Menor consumo em índices de texto. Índices ocupam mais espaço na RAM e em disco.
Indexação Mais simples de calcular ordens. Regras complexas de ordenação exigem mais CPU.
Compatibilidade Limitada a regiões geográficas. Universal (Sistemas Web, APIs REST, JSON).
⚠️ Cuidado com conversões implícitas (Cast):
Fazer um JOIN entre duas tabelas onde as colunas envolvidas possuem Character Sets ou Collations diferentes faz com que o banco de dados ignore os índices e realize a conversão em memória para cada linha lida (type coercion), o que pode deixar consultas centenas de vezes mais lentas.

Conclusão

Para novas aplicações web e desktop modernas, prefira sempre o padrão UTF-8 (com utf8mb4 no MariaDB e UTF8 no Firebird) utilizando collations insensíveis a maiúsculas/acentos para campos de busca de usuários (como PT_BR ou unicode_ci). Guardar dados com o charset adequado garante a integridade da sua informação e evita gargalos de desempenho difíceis de rastrear no futuro.

Compactação / Descompactação

Trabalhar com o terminal Linux exige dominar a manipulação de arquivos compactados. Se você já se deparou com extensões como .tar.gz, .tar.xz, .7z ou .bz2 e ficou em dúvida sobre qual comando utilizar para compactar ou extrair os dados, este guia completo vai resolver seu problema de vez.

💡 Entendendo a diferença: Arquivar vs. Compactar
No Linux, ferramentas como o tar apenas juntam múltiplos arquivos em um único pacote (arquivamento). Já algoritmos como gzip, bzip2 e xz fazem a compressão (redução de tamanho). Por isso é tão comum ver extensões combinadas como .tar.gz!

Guia Rápido de Referência

Para quem busca agilidade, confira a tabela com os comandos mais comuns do dia a dia:

Extensão Comando para Compactar Comando para Descompactar
.tar.gz / .tgz tar -czvf arq.tar.gz pasta/ tar -xzvf arq.tar.gz
.tar.bz2 / .tbz2 tar -cjvf arq.tar.bz2 pasta/ tar -xjvf arq.tar.bz2
.tar.xz tar -cJvf arq.tar.xz pasta/ tar -xJvf arq.tar.xz
.zip zip -r arq.zip pasta/ unzip arq.zip
.7z 7z a arq.7z pasta/ 7z x arq.7z
.rar rar a arq.rar pasta/ unrar x arq.rar

Detalhamento de cada formato

1. O utilitário TAR (Sem compressão)

Cria um único pacote sem reduzir o tamanho dos arquivos.

# Compactar (Arquivar):
tar -cvf arquivo.tar /caminho/da/pasta

# Descompactar:
tar -xvf arquivo.tar

2. Formatos GZIP (.gz, .tar.gz, .tgz)

É o formato mais tradicional no ecossistema Unix. Rápido e com boa taxa de compressão.

# Arquivo simples (.gz)
gzip arquivo.txt             # Compacta (gera arquivo.txt.gz)
gunzip arquivo.txt.gz        # Descompacta

# Tarball comprimido (.tar.gz ou .tgz)
tar -czvf arquivo.tar.gz pasta/    # Compactar
tar -xzvf arquivo.tar.gz          # Descompactar

3. Formatos BZIP2 (.bz2, .tar.bz2, .tbz2)

Oferece uma taxa de compressão maior que o GZIP, porém consome um pouco mais de processamento.

# Arquivo simples (.bz2)
bzip2 arquivo.txt            # Compacta (gera arquivo.txt.bz2)
bunzip2 arquivo.txt.bz2      # Descompacta

# Tarball comprimido (.tar.bz2 ou .tbz2)
tar -cjvf arquivo.tar.bz2 pasta/   # Compactar
tar -xjvf arquivo.tar.bz2         # Descompactar

4. Formatos XZ e LZMA (.xz, .lzma, .tar.xz)

Ideal para distribuição de código e arquivos grandes. Garante taxas de compressão altíssimas (usado no código-fonte do Kernel Linux).

# Arquivo simples (.xz e .lzma)
xz arquivo.txt               # Compacta .xz
unxz arquivo.txt.xz          # Descompacta .xz

lzma arquivo.txt             # Compacta .lzma
unlzma arquivo.txt.lzma      # Descompacta .lzma

# Tarball comprimido (.tar.xz)
tar -cJvf arquivo.tar.xz pasta/    # Compactar
tar -xJvf arquivo.tar.xz          # Descompactar

5. Formato ZIP (.zip)

Muito utilizado para manter compatibilidade com o Windows.

# Compactar (o parâmetro -r compacta pastas recursivamente):
zip -r arquivo.zip pasta/

# Descompactar:
unzip arquivo.zip

6. Formato 7-Zip (.7z)

Excelente taxa de compressão e suporte a criptografia forte.

# Compactar:
7z a arquivo.7z pasta/

# Descompactar (mantendo a estrutura de pastas original):
7z x arquivo.7z

7. Formatos RAR e Unix Z (.rar e .Z)

Formatos menos comuns nativamente no Linux, mas frequentemente encontrados para download.

# Formato .rar
rar a arquivo.rar pasta/     # Compactar
unrar x arquivo.rar          # Descompactar

# Formato antigo Unix (.Z)
compress arquivo.txt         # Compacta
uncompress arquivo.Z         # Descompacta
# Ou para arquivos .tar.Z:
tar -xZvf arquivo.tar.Z

Download e Extração Direta (Sem salvar em disco)

É possível realizar o download e a extração imediata de arquivos nos formatos tar, tar.gz e tar.bz2 diretamente via terminal, sem a necessidade de salvar o arquivo compactado no disco local. Isso economiza espaço em disco e acelera o processo.

Exemplos com `wget`:

wget http://example.com/archive.tar -O - | tar -x
wget http://example.com/archive.tar.gz -O - | tar -xz
wget http://example.com/archive.tar.bz2 -O - | tar -xj

A diretiva -O - indica que o comando wget deve enviar o conteúdo baixado para a saída padrão (stdout), que por sua vez é redirecionada através de um pipe (|) para o comando tar. Desta forma, em vez de ser gravado em disco, o arquivo é automaticamente expandido em tempo real.

Exemplos com `curl`:

Podemos obter o mesmo resultado utilizando o utilitário curl:

curl http://example.com/archive.tar | tar -x
curl http://example.com/archive.tar.gz | tar -xz
curl http://example.com/archive.tar.bz2 | tar -xj

A diretiva -x do comando tar, em ambos os casos, realiza a extração dos arquivos. As opções complementares (-z para arquivos .gz/gzip e -j para arquivos .bz2/bzip2) realizam a descompactação do fluxo de dados antes de expandir a estrutura do tar.

⚠️ Pré-requisitos de Instalação:
Alguns utilitários como unzip, p7zip e unrar podem não vir instalados por padrão na sua distribuição. Caso algum comando falhe, instale os pacotes via terminal:
sudo apt install zip unzip p7zip-full unrar xz-utils (Debian/Ubuntu) ou
sudo dnf install zip unzip p7zip p7zip-plugins unrar xz (Fedora/RHEL)

Dica Bônus: O truque definitivo com `tar`

Nas versões modernas do utilitário tar, você não precisa memorizar a letra do tipo de compressão (z, j, J) para extrair arquivos! O tar consegue identificar o algoritmo de compressão automaticamente.

Você pode descompactar qualquer pacote .tar.gz, .tar.bz2 ou .tar.xz usando simplesmente:

tar -xvf nome-do-arquivo.tar.*

Conclusão

Guardar essa referência vai te poupar bastante tempo no terminal. Para a maioria das rotinas de servidores e desenvolvimento no Linux, focar nos comandos tar e zip — somado às técnicas de transmissão direta via pipe — cobrirá praticamente todas as suas necessidades diárias.

terça-feira, 28 de julho de 2026

Corrigindo o Erro do chrome-sandbox no Linux (Antigravity, Kiro, Cursor e Electron)

Se você utiliza Linux e tentou rodar programas como Google Antigravity, Kiro IDE, Cursor ou VS Code após descompactar manualmente o arquivo (como .tar.gz), provavelmente se deparou com o seguinte erro no terminal:

FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured correctly.
You need to make sure that /path/to/chrome-sandbox is owned by root and has mode 4755.

Esse erro impede que o aplicativo abra. Veja abaixo o porquê isso ocorre e como resolver em poucos segundos.

Por que esse erro acontece?

Esses editores são desenvolvidos sobre o Electron, que utiliza o motor do Chromium. Para proteger o seu sistema contra códigos maliciosos, o Chromium utiliza um recurso de isolamento (sandbox).

No Linux, para que o arquivo chrome-sandbox funcione corretamente, ele precisa ser de propriedade do usuário root e possuir a permissão especial SUID (4755). Quando baixamos o app compactado e extraímos com nosso usuário comum, ele perde essa permissão especial.

Passo a Passo para Resolver

Siga os comandos abaixo no terminal para ajustar o arquivo da sua aplicação:

1. Acesse a pasta do aplicativo

Navegue até onde você extraiu a pasta do programa (exemplo do Antigravity ou Kiro):

cd /caminho/da/pasta/do/app/

2. Mude o proprietário do arquivo para root

sudo chown root:root chrome-sandbox

3. Aplique a permissão 4755

sudo chmod 4755 chrome-sandbox

4. Teste e confirme

Verifique se as permissões foram alteradas corretamente executando:

ls -l chrome-sandbox

O resultado deve exibir algo como -rwsr-xr-x 1 root root (repare na letra s em rws).

⚠️ Evite usar --no-sandbox:
Muitos tutoriais sugerem rodar o programa com a flag --no-sandbox. Embora funcione, isso desativa a segurança do aplicativo. Sempre dê preferência ao método dos comandos acima.

Solução Global (Opcional)

Em distros mais recentes (Ubuntu 24.04+, Debian 12+), você também pode permitir que o kernel crie sandboxes sem exigir privilégios SUID executando:

sudo sysctl -w kernel.unprivileged_userns_clone=1

segunda-feira, 18 de agosto de 2025

Dica Rápida. Erro:
*** [Makefile(3168,0) Error: linker: ide] Error 2 lazarus.pp(170,1) Error: Error while linking

Se você usa a IDE de programação Lazarus e alguma distribuição Linux e está tentando instalar a suite de componentes BGRAControls, pode não estar conseguindo, recebendo uma mensagem parecida com a que está no título.

A causa deste problema pode ser a falta de algum pacote instalado em seu sistema.

Segundo a documentação, 2 pacotes que você deve ter instalado, são: libxtst-dev e libgl-dev.

Realizando a instalação dessas 2 libs, o problema provavelmente será resolvido.

 Abraços
 Terence!

segunda-feira, 21 de abril de 2025

Alterar menu de contexto do Windows Explorer do Windows11

A Microsoft alterou o menu de contexto (click com o botão direito) do Windows Explorer no Windows 11. Ficou mais bonitinho, mas limitado. Se quiser algo mais deve clicar na opção de "Mostrar Mais Opções", então abrirá o menu de contexto clássico.

Detalharei os passos para retornar ao Menu de Contexto clássico.

Para alterar o menu de contexto do Windows 11 e voltar ao estilo anterior do Windows 10, usarei o Registro do Windows. No entanto, é importante lembrar que mexer no Registro exige cuidado, pois alterações inadequadas podem causar problemas no sistema. Aqui está como fazer isso:

  1. Abrir o Editor do Registro:
    • Pressione Win + R para abrir o diálogo Executar.
    • Digite regedit e pressione Enter.
  2. Navegar até a chave correta:
    • No Editor do Registro, vá para: HKEY_CURRENT_USER\Software\Classes\CLSID
  3. Criar uma nova subchave:
    • Clique com o botão direito na chave CLSID e selecione Novo > Chave.
    • Nomeie a nova chave como {86ca1aa0-34aa-4e8b-a509-50c905bae2a2}.
  4. Criar outra subchave:
    • Dentro dessa nova chave, clique com o botão direito e selecione Novo > Chave.
    • Nomeie essa segunda subchave como InprocServer32.
  5. Editar o valor padrão:
    • Dentro da chave InprocServer32, clique duas vezes em (Padrão) no painel à direita.
    • Certifique-se de que o campo "Dados do valor" esteja vazio e clique em OK.
  6. Reiniciar o Explorer:
    • Pressione Ctrl + Shift + Esc para abrir o Gerenciador de Tarefas.
    • Encontre o processo Explorador do Windows, clique com o botão direito e selecione Reiniciar.

Depois de reiniciar o Explorer, o menu de contexto deverá voltar ao estilo antigo. Caso deseje reverter as alterações, basta excluir a chave que foi criada.

Se preferir não mexer no Registro, existem ferramentas de terceiros que podem fazer isso de forma mais simples e segura, para isto basta dar uma procurada na internet. 😊

Espero ter ajudado.

Abraços a todos