Writing Um blog. Viagem, diversão, cultura, curiosidades, dia-a-dia. Papo à toa.


Esqueci que o meu home estava encriptado com o ecryptfs. E agora?

otavio publicou em 13/11, 01:58 hs , e editou pela última vez há mais de 5 anos atrás.

Uso Linux há cerca de 15 anos. Meu notebook só tem Linux desde o Ubuntu 5.04. Nesse tempo (haja tempo), já fiz mais de 20 instalações, mais de 10 upgrades no mesmo notebook, seguramente.

Durante esse tempo desenvolvi alguns protocolos de atualização:

  • Separe o disco /home com vários giga (no meu caso deixo 80Gb no /, 4Gb de swap e o restante fica com o /home)
    • NUNCA formate seu /home. É por isso que mantenho ele separado
  • Nunca esqueça da sua chave SSH!
    • Isso é menos importante se você separa o /home
  • Mantenha um swap pequeno e muito RAM (8Gb pelo menos, hoje em dia).
    • Um swap grande fará seu sistema lento, a não ser que seu disco seja SSD.
  • Sempre faço upgrade formatando o / e instalando do zero
  • Sempre uso o pen drive de boot usando o Live (tks Ubuntu!!!!) para ter certeza de que não há risco de não funcionar meu notebook após a instalação
    • Isso é principalmente importante com notebooks novos
    • Isso é cada vez mais importante porque a capacidade de atualização do Ubuntu é fantástica (mas vai que….)
  • Faça backup do seu /etc
    • Configuração de serviços, hosts, ficam mais fáceis de serem mantidos assim
    • Isso é irrelevante para mim hoje, porque só uso docker para minhas instalações (base, serviço http, …), mas ainda acho uma boa dica, em geral.

Coisas inteligentes à parte, aqui vai mais um pro checklist: não esqueça que seu home pode estar encriptado!


(continua...)

Panorama de projetos - uma visão gerencial para acompanhamento de projetos

otavio publicou em 10/06, 23:12 hs , e editou pela última vez há mais de 6 anos atrás.

Durante o ano de 2017 temos realizado diversas alterações no acompanhamento gerencial de projetos na Fidelize

Nossa principal entrega foi a entrega do “Panorama de projetos”. É algo bem recente (a primeira publicação foi em Abril desse ano), mas mudou a forma como a alta gerência. Entre os ganhos tivemos:


(continua...)

Usando o Fabric para fazer deploy de uma aplicação Yii

otavio publicou em 03/04, 19:40 hs , e editou pela última vez há mais de 8 anos atrás.

Por alguns meses estivemos buscando uma forma prática de fazer o deploy de nossas aplicações em múltiplos servidores. Por se tratar de uma aplicação em PHP, a opção natural seria algo na mesma linguagem.

Tentamos então o Phing:http://www.phing.info. Se arrependimento matasse….


(continua...)

Usando o Dojo como ferramenta de projetos

otavio publicou em 25/10, 03:36 hs , e editou pela última vez há mais de 9 anos atrás.

Recentemente contamos com a consultoria da K21 para mudar a forma como desenvolvemos para nosso portfólio de projetos. Um dos processos que implantamos, como sugestão da consultoria, foi o Dojo .

O Dojo tem como objetivo a reunião de grupo de desenvolvedores com foco nas boas práticas de desenvolvimento. Dentro da visão de gerenciamento de projetos, estamos usando o Dojo para:

  • Difusão de bons padrões de programação
    • que gera qualidade de código do desenvolvedor, difunde os critérios de aceitação e diminui o número de correções;
  • Funciona como uma ferramenta para ensino de regras de negócio
    • que gera reflexos no time como maior capacidade de análise do time e;
    • sugestões para melhorias nos projetos ou para melhor definição de funcionalidades
  • Motivação do time
    • Programador de verdade gosta de aprender e evoluir sempre
  • O time fica mais coeso e amigo
  • Aumento de produtividade do time no longo prazo

Vou colocar algumas regras para depois discutir o porquê de cada uma. Estamos em constante evolução nesse aspecto, essa é a terceira versão dessa lista:


(continua...)

Redis - entendendo e configurando, com high availability (HA)

otavio publicou em 28/01, 02:49 hs , e editou pela última vez há mais de 10 anos atrás.

O Redis é um banco de dados do tipo par de chaves e valores. Sua principal característica é a velocidade de acesso e gravação. Isso por ser, basicamente um banco em memória. Mas isso é outras coisas já foram explicadas em outro post.

Ser um banco em memória não quer dizer que não há persistência de dados (como pode ser visto aqui ). O que acontece é que o Redis salva as transações em um formato append only e, quando o tamanho do arquivo cresce muito, ele cria um dump da base e volta ao modelo append only.


(continua...)

O Redis, seu uso e seus tipos de dados

otavio publicou em 13/12, 03:26 hs , e editou pela última vez há mais de 10 anos atrás.

O Redis é uma base chave/valor (key/value) rápido, muito rápido. Coisas com muito volume e pouca informação.

Para caching e sessões ele é ainda melhor por seus recursos de expiração automática (veja expire e ttl no Redis).

Além disso, fazer sharding é fácil. E o modo cluster está quase pronto para produção (em testes já está há algum tempo).


(continua...)

Page Caching com dependências de expiração

otavio publicou em 22/10, 02:45 hs , e editou pela última vez há mais de 10 anos atrás.

Criando page caching com dependências ao invés de controle de tempo apenas

Além da expiração por tempo, uma forma útil é expirar por dependência. A dependência pode ser por alteração de um arquivo (no Rails se usava muito um touch em tmp/restart.txt para recarregar uma aplicação em produção) ou uma consulta que retornava um valor (ver mais aqui). Todas são interessantes e úteis em algum momento.


(continua...)

Caching no Yii - usando o cache dinâmico

otavio publicou em 04/10, 21:28 hs , e editou pela última vez há mais de 10 anos atrás.

Um dos melhores recursos de caching do Yii é o page caching, por seu padrão não obstrusivo do código. Mas esse recurso sozinho, em ambientes logados, é difícil de ser implementado. É comum (quase padrão) que aplicações tenham diferentes tipos de usuários (user roles).

Com isso, informações como o menu, a sidebar de usuário logado e informações específicas do mesmo caducariam com o uso simples do page caching. Ou passariamos a ter uma página de cache por cada tipo de usuário, e, às vezes, usuário por usuário.


(continua...)

Caching no Yii

otavio publicou em 04/10, 04:08 hs , e editou pela última vez há mais de 10 anos atrás.

O Yii, como todos os bons frameworks de desenvolvimento modernos, possui um conjunto de mecanismos para tornar o processo de cache mais simples.

A grande vantagem do uso de componentes de caching integrados não está na criação do cache. Criar, por exemplo, uma tabela de resumo de dados não é, nem de perto, ciência espacial. A grande vantagem é usar com agilidade a grande capacidade de mecanismos de expiração (seja por tempo total, seja por alguma trigger externa, como a atualização de algum dado usado no cache).

Não vamos aqui falar de aplicações como o Varnish , que funcionam como um proxy e muito usado em sites de alto tráfego com páginas abertas (como grandes sites de e-Commerce e de notícias).

Aqui vamos falar um pouco sobre o quando, o que e o como do uso de cache em sua aplicação, direcionado à solução proposta pelo Yii. Para que não fique muito extenso, alguns aspectos mais avançados serão colocados em posts subsequentes.

Algo importante é: cache é dado descartável e que pode ser gerado novamente a qualquer momento. Informações como: “quantos usuários existiam na base em janeiro?” ou “Com quantas lojas o vendedor X trabalhava em abril de 2012?” são informações que devem ser persistidas adequadamente para consulta futura.


(continua...)

Caching no Yii e Internacionalização (I18n)

otavio publicou em 04/10, 02:48 hs , e editou pela última vez há mais de 10 anos atrás.

Um recurso importante em seu projeto pode ser a Internacionalização (ou, abreviando, I18n). Em casos como esse, o caching de páginas deixa de ser simples. Ele tem que suportar as diferentes línguas do seu sistema.

Para que seu usuário americano não enxergue a página em português, uma dica é usar o varyByExpression comparando o atributo de linguagem da sessão do usuário. Como no exemplo abaixo:

public function filters()
{
 return array(
  'accessControl',
  array(
   'COutputCache + index, search',
   'duration' => 3600,
   varyByExpression => Yii::app()->language,
  ),
 );
}

if(typeof jQuery == 'undefined'){ document.write("