Oibaf's Tech Corner

Alguns posts técnicos com experiências minhas nessa indústria vital que é a T. I.

#desabafo

As relações de trabalho têm tensões entre aqueles que fazem e aqueles que mandam. Inspirados por Taylor, os gestores tentam se apossar do tempo e do trabalho, extirpando o quanto for possível o poder detido pelos trabalhadores. Há várias formas disso se manifestar: desde ditar o tempo que uma tarefa deve ser feita, tratando pessoas como máquinas precisas e inequívocas, a remover o conhecimento sobre o trabalho dos trabalhadores, reduzindo suas atividades a tarefas repetitivas, tornando-os substituíveis. A sociedade moderna tem um nome bonito para a última forma citada anteriormente: automação. Minha profissão – desenvolvedor de software – é uma das que mais colabora para que a automação se concretize e transforma o mercado de trabalho há décadas, eliminando postos de trabalho com a justificativa de incremento de eficiência.

Hoje, tenho a facilidade de entrar em contato com centrais de atendimento diversas da comodidade da minha casa graças à automação. Hoje, também, tenho a dificuldade de ser atendido em meus pedidos mais simples por essas mesmas centrais de atendimento graças à automação. No que isso aumentou a eficiência do atendimento para mim? Em nada. Preferia me deslocar até o banco, até a operadora de internet ou telefone e falar com uma pessoa, como faziam os Maias, que resolveria meu problema com uma simples conversa. Tenho essa opção hoje, mas o atendente da loja utiliza o mesmo sistema do atendente da central telefônica, a eficiência da empresa tornou ambos os atendimentos igualmente ineficazes para resolução do meu problema.

Meus antepassados das eras do COBOL, Clipper, Delphi e outras línguas quase mortas da TI faziam apenas o seu trabalho ao especificar e implementar sistemas corporativos, tornando obsoletos, um a um, papéis da força de trabalho que os gestores diziam ser ineficientes. Minha geração seguiu de forma acelerada essa mesma prática, pois esse é o nosso trabalho: sistematizar, otimizar. Nos tornamos importantes para as corporações, muitos gestores dizem até que nos tornamos “importantes demais”, algumas vezes chegando a exigir das organizações volumosas (e cada vez maiores) somas financeiras, que talvez extrapolem pelas dezenas de vezes o valor dos empregos que automatizamos, para desgosto e simultâneo deleite dos gestores. Lembremo-nos do caso das centrais de atendimento, a eficiência pode ser medida por diferentes dimensões, e dinheiro não é a única. Sistemas digitais são particularmente eficientes em aumentar o controle, a vigilância e a impessoalidade.

Todo esse contexto me traz ao assunto principal (que a prolixidade me fez circundar um pouco): vibe coding. Há décadas os gestores propagam mágicas para substituir os programadores, esses sanguessugas de dinheiro arrogantes e complicados, que sempre colocam alguma dificuldade para a evolução das organizações. Foram diversas promessas de aplicações para gerar aplicações com pouco ou nenhum conhecimento de programação, vendidas como balas de prata a gestores menos cautelosos, que pagaram por seu arrojo com decepção. Ao longo dos anos mudaram de nome, mudaram de forma, low-code, no-code, everyone should learn to code. Todas são tentativas de destruir a carreira de programador.

Mas essa indústria da tecnologia aprende e se adapta muito rápido, sabem que ideias que não dão certo devem ser descartadas e substituídas por novas, tudo é hype e a pressa é criar o novo hype para ganhar dinheiro, mesmo que mentindo, aproveitar e surfar a onda enquanto a maré estiver propícia, ao mesmo tempo procura outra praia menos frequentada para o próximo verão. Embora as tentativas de acabar com a carreira de programador não tenham dado certo, o objetivo continua vivo e à espera de uma nova desculpa ou técnica avassaladora, eis que as LLMs chegam e começam a criar código. Aí está, vamos inventar uma nova forma de programar: vamos comandar uma LLM e deixar que ela transforme nossa linguagem natural em código.

CEOs de empresas de tecnologia alegam que isso vai diminuir custos, aumentar produtividade, aumentar eficiência, fazem layoff de engenheiros de software, contratam menos pessoas inexperientes, tudo para alimentar a ideia de que essa é a bala de prata que vai “democratizar” o desenvolvimento de software.

Paro por aqui, meu estômago ronca, não sou uma máquina :)

por Oibaf Ilosamart

LinkedIn | GitHub | GitLab | Mastodon

Estava desenvolvendo uma aplicação com python+alembic e utilizando PostgreSQL como banco de dados. No meio do caminho foi necessário mudar para Oracle e adicionar uma coluna a um modelo do banco. Até aqui, nada de anormal, eis que tento gerar as database migrations automaticamente com o alembic e ele gera o comando para criar a tabela inteira novamente...

Googles, Bings, Stacks Overflows e outros links depois, nenhum deles resolvia o meu problema. Tanto o Oracle quanto o PostgreSQL no ambiente de desenvolvimento local rodam em conteineres, no PostgreSQL esse problema não se manifestava, somente no Oracle.

Bem... eis que vou ao código-fonte do alembic para ver o que poderia ser e me deparo com a consulta feita para detectar as tabelas já existentes e suas colunas, índices e outros itens, executo a consulta no banco Oracle local e nada é retornado... estranho.

Pois bem, o Oracle em docker utiliza o tablespace system sempre... e a consulta do alembic desconsidera esse tablespace... bingo!

A solução foi simples, no script de inicialização da base de desenvolvimento, criei um tablespace específico e problema resolvido. O script compartilho abaixo:

-- Coloque scripts iniciais aqui
ALTER SESSION SET container=APPDBDEV;

-- Alembic FIX :)
CREATE TABLESPACE dbuser 
  DATAFILE 'dbuser.dbf' 
  SIZE 200M 
  autoextend ON maxsize 2000M
  ONLINE
;

CREATE USER dbuser identified BY dbuser DEFAULT tablespace dbuser;
ALTER USER dbuser quota UNLIMITED ON dbuser;

GRANT CONNECT, RESOURCE TO dbuser;
GRANT CREATE SESSION TO dbuser;

por Oibaf Ilosamart

LinkedIn | GitHub | GitLab | Mastodon

Aviso: não sou expert em economia, sociologia, filosofia, história, marxismo, socialismo ou afins, essa é uma visão particular sobre um tópico corriqueiro e, acredito, mal interpretado, na comunidade Free Libre Open Source (FLOSS).

Fortemente influenciado pelo seguinte artigo: How to Be an Anticapitalist Today .

Antes de entrarmos no cerne da questão, ressalto que me considero um socialista e estou envolvido com free software (prefiro esse termo ao open source, daí se deriva alguma coisa) há vinte anos, quase sempre como entusiasta e usuário (majoritariamente com Linux e seu ecossistema).

Isso esclarecido, pergunto: seria o movimento free software um movimento socialista? Acredito que haja muita desinformação em ambos, disso, e do fato de muitas pessoas entusiastas do free software também serem entusiastas (ou envolvidas mais diretamente) de causas socialistas, resulta uma certa confusão.

Essa confusão não se faz por acaso, eu mesmo já fui enganado por ser técnico e não perceber com clareza certos aspectos filosóficos. O termo mais correto que define o movimento software livre é libertário e sua definição não possui somente aspectos técnicos ou jurídicos, é composta também por aspectos filosóficos que são indissociáveis dela. O movimento preza por quatro liberdades, que devem ser todas garantidas aos usuários do software (aspectos técnicos e jurídicos), geralmente são o destaque de qualquer artigo tratando do movimento, da licença ou da entidade software livre, mas aqui pretendo me ater ao aspecto filosófico, o parágrafo escrito logo após a listagem e explicação das liberdades, cito (destaques meus):

Um programa é software livre se ele dá aos usuários todas essas liberdades de forma adequada. Do contrário, ele é não livre. Enquanto nós podemos distinguir vários esquemas de distribuição não livres em termos de eles falham em serem livres, consideramos todos eles igualmente antiéticos.

Vejamos, enquanto podemos distinguir em que aspecto a distribuição falha em ser livre, não podemos, pelos termos da definição de software livre, fazer qualquer distinção ética entre eles. Todos são “igualmente antiéticos”. Esse parágrafo é importante porque nele está contido, principalmente na última sentença, o espírito e a intenção do movimento: ser ético e ético é quem dá liberdade ao usuário do software de fazer com ele o que bem entender (inclusive ganhar dinheiro).

Aqui, paramos um momento para falarmos sobre socialismo, muitas vezes confundido (ou intercambiado) com comunismo, não para fins desse artigo. Socialismo, basicamente, prega que os meios de produção e distribuição dos bens devem ser de propriedade e regulação da comunidade e não de indivíduos e privados. Ao contrário do senso comum, o socialismo é, portanto, libertário, pois:

  1. iguala a todos como trabalhadores (não há mais a figura do capitalista, que se apropria da força de trabalho)
  2. reforça a democracia (dá aos trabalhadores poder sobre os meios de produção)

Fora esses aspectos, o socialismo reconhece as conquistas do capitalismo: avanço tecnológico, melhoria das condições básicas e expectativa de vida; mas ele reconhece também as falhas do sistema e as considera antiéticas: desigualdade social (profunda ou não, igualmente antiéticas), condicionamento de trabalhadores a vontades da burguesia (que controla os meios de produção e distribuição bem como o sistema de governo – mesmo que democrático e bem estabelecido).

Nesse momento, podemos ter uma ideia de que ambos os movimentos são, sim, em essência, a mesma filosofia libertária, mas incorporados por diferentes propósitos. Enquanto o software livre tem como objetivo retirar o controle do sistema de empresas de software e dá-lo ao usuário, o movimento socialista pretende retirar o controle do capital e dá-lo ao coletivo (chame como quiser: sociedade, comunidade, trabalhadores). Outro paralelo possível diz respeito à deturpação dos valores filosóficos ressaltados até aqui. A exemplo do que aconteceu na Rússia no começo do século XX, quando Stálin tomou o movimento socialista para si, a indústria do software cooptou o movimento software livre e o repaginou sob o nome open source.

Note-se que muitas vezes isso, em termos práticos, resulta em produtos software livre, mas nem sempre. Já sob a ótica filosófica, são completamente distintos. Infelizmente, assim como associamos o socialismo somente à Rússia ou à URSS, também associamos o software livre e seu movimento somente ao open source. E isso faz com que a confusão citada no início do artigo surja, já que o “comunismo soviético” é uma outra roupagem de um sistema que aprisiona os trabalhadores (e do pior tipo: autoritário, diametralmente oposto aos ideais libertários do movimento original); já o open source é uma nova roupagem para o free software, uma palatável ao mercado e aos capitalistas, meramente um modelo de negócios, que não se preocupa com as liberdades dos usuários, mas somente com os lucros das empresas (deriva-se daí o open core e produtos como Google Chrome, Android, Visual Studio Code, onde temos no executável entregue ao usuário final código diverso ao disponível em repositórios públicos e removido o direito do usuário descompilar esses binários).

Finalizando, podemos pensar ser melhor o open core do que o modelo de código proprietário, mas voltemos à filosofia do movimento: são igualmente antiéticos. Em tempos onde o open source é um termo mais utilizado do que o original, free software, a ponto de sermos obrigados a cunhar um terceiro (utilizado nesse artigo: free libre open source software), é ainda mais importante que saibamos a diferença entre os dois, que entendamos a filosofia motriz de cada um e que não caiamos em falácias, principalmente as técnicas, cito do artigo um exemplo:

A ideia do código aberto é que permitir aos usuários mudar e redistribuir o software irá torná-lo mais poderoso e confiável. Porém, isso não é garantido. Desenvolvedores de software proprietário não são necessariamente incompetentes. Às vezes, eles produzem um programa que é poderoso e confiável, ainda que ele não respeite a liberdade dos usuários. Os ativistas do software livre e entusiastas do código aberto irão reagir de modo bem diferente a isso.

por Oibaf Ilosamart

LinkedIn | GitHub | GitLab | Mastodon