Goodbye, (native) Chrom{e,ium} on Linux

Chrom{e,ium} (now referred to as Chrom*) is a little beast that loves to eat up your system memory. And don’t even try to put the blame on add-ons, a vanilla version of the browser will equally consume up your system RAM all the way down [citation needed].

There was a problem, though. I’ve been using it as my main web browser for several months. So I have bookmarks, configs, … and so on, everything in there. So what?

For months, I’ve been searching for a “solution” to this. Not sure if I should call it a solution, because it is just a fancy way of approaching the problem. Anyways…Jeez [1], it works flawlessly and awesomely (does this expression exist?).

VIRTUALIZATION

docker comes to the rescue. Inspired by this ([1]) post, I’m now running Chrom* inside docker. This works across any operating system that supports docker, and makes it unnecessary to install Chrom* natively in your host platform.

Yeah, of course there is an example: https://www.youtube.com/watch?v=S9_pDMC0ses

Under the scenes:

  • I have an alias “t-dc-chromium” which starts chromium under docker.  There is no “chromium” executable on my system. Of course, I could have aliased this to “chromium”, but there is a reson for it to have a “t-dc” prefix, it is mainly to be consistent with my dotfiles workflow. Here is the alias. “t-” stands for “template” and “dc” is “docker container”. Aliasing makes it effortlessly to remember otherwise long commands.
  • I run Arch Linux, but this chromium is running under a debian docker container. It could be running under any other operating system I would like; it would be just a matter of creating an appropriate Dockerfile for it.
  • Docker containers are very inexpensive in terms of performance cost and memory consumption.
  • Also, docker provides an additional layer of isolation / security for me. It makes chrome run completely isolated from the other applications in my desktop. In particular, I can kill it this way: docker rm -f “chromium”. In theory, it doesn’t lock up other desktop apps — at least not in the same way as it would if it were running natively.
  • Finally, docker has a ‘–memory’ switch. I’m using ‘–memory 1gb’, which means this piece of memory eater won’t bother me anymore. Yaaaay! It is also possible to limit other resource usages [citation needed].

Tutorial?

Okay, if you want to do that too, and supposing you’re running any (decent) Linux distribution…you should:

  1. install docker. Usually with apt-get, yum, and so on. Maybe your distro doesn’t have a docker package. In this case, consult the official docker documentation for a suitable installation method for you.
  2. start the docker daemon. Usually a ‘sudo systemctl start docker’ or a ‘sudo /etc/init.d/docker start’ would do it. That depends on your system.
  3. pull the jess/chromium [2] docker image. This way: docker pull jess/chromium. It will consume some disk space, but disk is cheap nowadays. However, if you’re using a small SSD, beware.
  4. now, it is just a matter of running the container you just pulled using the appropriate switches for docker. I use the one I indicated in a previous link, but you could adapt it for your own needs.

In a future reboot, you will only need to repeat step 4 (supposing you enabled docker to start automatically with your system). Using an alias makes it a breeze.

Wrapping up

This idea is by no means original. As I said, I “lended” it from here. However, unlike this post, I have no intentions of running everything in my desktop under docker. Yeah, it is fun, but not really necessary for my workflow.

Finally, you wonder, does this resolve the memory problem? Of course not, this is inerent to Chrom*. However, I find this makes it better in terms of “damage control” (by limiting the available memory for Chrom*) and for isolation of the main system.

Footnotes

  • [1]: pun intended, can you spot it?
  • [2]: there is also a chrome image (jess/chrome), should you want it
Advertisements
Goodbye, (native) Chrom{e,ium} on Linux

Journal #15: (Removendo) Bloatware @ Android

Recentemente tive contato com um Stock Android 4.4.x (KitKat) e, whooooa, como eu tinha me esquecido o quanto um Android novo era bloated, cheio de firulas e coisas desnecessárias, que só complicam a usabilidade e a compreensão do usuário.

Vou utilizar um vocabulário relativamente mais amigável, já que esse post pretende dar alguma luz a um usuário não experiente (ou experiente).

Motivação

Vejamos, em primeiro lugar eu vou reforçar o que eu acabei de falar: qual o objetivo disso, pra quê?? Se o público alvo for usuários experientes, eles vão ficar extremamente descontentes e insatisfeitos, porque serão expostos a firulas as quais eles não querem. Você poderia argumentar o seguinte: “ah, então é só eles removerem essas coisas. Certo?” Não. Errado. Quer dizer, estaria certo, o problema é que não dá para desinstalar programas “de fábrica” por default — a menos que você ganhe acesso root no seu Android. Então, porque não a) distribuir smartphones com acesso root out-of-the-box (=por padrão) ou b) fazer com que os aplicativos que já vêm instalados não tenham status “de  fábrica”, o que significa que eles poderiam ser facilmente removidos.

Por outro lado, se o público alvo for usuários não experientes (e é, essa é a maior parte do market share do Android), então para que ficar incluindo um monte de funções, aplicativos e firulas que esses usuários nunca usarão? Pior ainda, muitos deles em inglês (estamos falando de usuários não experientes, nem todos sabem inglês). Naturalmente, não se pode agradar a todos, sempre vai haver alguma parcela dos usuários que terá que se descontentar um pouquinho, isso em si seria extremamente natural. O problema é que a parcela é enorme, e o descontentamento não é só um pouquinho. Bom, você pode dizer que a maioria das pessoas não está nem aí / não liga para isso (é verdade). Então, justamente por não ligarem é que esses “extras” (a partir de agora me refiro a isso como bloat/bloatware) poderiam (deveriam?) ser reduzidos ao mínimo possível. Aí não tem como falar disso sem falar no KISS (~ Keep it Simple); provavelmente esse é o acrônimo que eu mais uso aqui, mas é porque é um conceito que a maioria das pessoas e dos fabricantes parecem ignorar completamente. Como Albert Einstein disse uma vez, ~”mantenha as coisas o mais simples possível, mas não simplórias”. Não se trata de disponibilizar só o kernel para o usuário, não é, caramba, mas também não há a necessidade de incluir um monte de funções só para complicar a vida dele. Aí você diz: ah, mas a maioria dos Androids possui algum aplicativo “helper”, que vem com um tutorial e instruções de uso das funções mais importantes do aparelho. Mas esse é outro erro, parece ajudar, mas na verdade só complica. Segundo Donald Norman, um produto com um design bom é um produto que dispensa tutoriais, textos explicativos e/ou manuais. Ele é intuitivo, de forma que o usuário consegue perceber o objetivo de seu uso e como usá-lo “automagicamente” (pequena analogia: imagine um elevador, você entra nele, aperta o botão, e vai para o andar que você quer. Isso é um exemplo de bom design. Agora, se em determinado elevador você precisar parar para ler as instruções de como operá-lo, isso é (em geral) um design ruim. Exceções existem, cuidado para não generalizar esse argumento!).

Vou parar por aqui, esse assunto está longe de ser exaustado apenas com dois parágrafos, mas acho que isso já resume a minha motivação por trás desse post.

Algumas guidelines

Nessa seção: algumas coisas que você pode fazer (ou pelo menos tentar fazer, ou se informar sobre) para reduzir o bloat. 

Note que eu também vou incluir algumas features. Dependendo do seu ponto de vista, elas também podem ser bloat (isto é, você apenas estaria trocando um bloat por outro). No final, o produto perfeito não é genérico, mas sim tailored e adaptado para as necessidades de cada usuário (mesmo que o próprio usuário não esteja ciente do que ele mesmo quer).

  • Primeiro de tudo: REMOVA todos os aplicativos default que você não instalaria caso eles não viessem nativamente. Por exemplo: você baixaria o jogo XXXX sag[?] ou o aplicativo da rede social YYYY caso ele não viesse junto com o seu Android? Não? Então remova ele!
  • Aí vem o problema do tópico anterior: você não vai conseguir (em geral) remover esses aplicativos. Então, o que você pode fazer? a) root (apenas se o seu aparelho for suficientemente popular, e você for um usuário mais experiente, disposto a se arriscar um pouquinho) ou b) desativar os aplicativos. Não é tão bom quanto remover, mas pelo menos eles não ficarão rodando em segundo plano, nem aparecerão na sua app drawer.
  • Instale o Notification Toggle. Ótimo design, isso deveria ser nativo em todos os Androids.
  • Instale um launcher! O Launcher nativo do Android é limitado até demais. Agora, cuidado aqui. Dependendo do launcher que você instalar e das configurações que vocẽ for tweakar depois, isso pode acabar trazendo mais bloat pro seu smartphone. Eu gosto do Apex.
  • Aprenda como limpar a cache do seu dispositivo. Dá para fazer isso através de um aplicativo, ou manualmente. Não convém fazer isso com muita frequência, mas de vez em quando é uma boa ideia.
  • Desative a localização (GPS, Wi-Fi e redes móveis). A menos que você use com frequência algum aplicativo relacionado a isso. Sério, não ‘venda’ seus dados de localização tão facilmente.
  • Instale um browser decente! O Stock Browser do Android é muito ruim. Dentre as recomendações, Chrome, Firefox ou Dolphin (não necessariamente nessa ordem). O Opera Mini ainda é útil para navegar no 3G e economizar mais dados.
  • Desative o bluetooth. Quase ninguém usa isso hoje em dia. A única vez que eu usei isso foi para se comunicar com o meu notebook. Economiza bateria.
  • Retire todos os widgets que vieram por padrão na sua Home Screen. A menos que você realmente precise deles… (é tão importante assim saber o clima / a temperatura toda hora?)
  • Desative o Google Now. Ser interrompido toda hora com notificações é contraprodutivo. A menos que isso seja importante para você…
  • Perceba, esses itens são apenas recomendações, pode ser que um aspecto ou outro seja importante para você, eu não vou mais ficar repetindo isso, acho que já deu para captar a mensagem.
  • Adblock! Funciona bem pra caramba, um dos aplicativos que eu mais prezo. Precisa de root!
  • Desative as transições / animações / haptic feedback / audio feedback. Traduzindo: desativar os efeitos visuais quando você muda de tela, desativar a vibração quando você toca em um botão (virtual) ou numa tecla (do teclado virtual), desativar o barulho de quando você toca em algo. Procure isso na configurações (settings). Geralmente está lá para o final, nas últimas opções.
  • Revise os aplicativos que vieram por padrão na sua Home Screen. Você não precisa usar os que vieram (mas, provavelmente você irá querer alguns, como o dos contatos e o do telefone, assim como o web browser — senão, eu me pergunto qual é o objetivo do seu smartphone).
  • Sincronização upstream com o fabricante: você não precisa disso, desative isso. Explicando melhor: geralmente os fabricantes disponibilizam algum aplicativo para sincronizar ou ajudar você a fazer alguma coisa. Isso varia bastante de um para o outro, e até mesmo o mesmo fabricante costuma mudar o nome desses aplicativos de uma versão do Android para outra. Note que eu não me refiro à sincronização do Google.
  • Instale uma “store” alternativa, com softwares livres! F-Droid. Se você, além disso, puder utilizar algum software de lá (em vez de um closed source), melhor ainda.

Vou parar por aqui. Esse post pode muito bem ter uma continuação no futuro, ainda daria para falar de outras coisas. Tenho certeza de que você não conhecia pelo menos um item que estava aí em cima. Assim como eu ainda não conheço outros que não estão aí em cima. Sempre tem alguma coisinha nova para aprender, ou alguma dica nova para melhorar a usabilidade. Aceito sugestões!

Se você quiser listar algum item não presente aí em cima, poste um comentário ou me envie uma mensagem para que eu possa incluí-lo na lista original. Valeu!

Journal #15: (Removendo) Bloatware @ Android

Journal #11: Cansei de guardar tantos arquivos do SIGA

Isso aqui é o tremendo caos:

Tremendo caos, olá
Tremendo caos, olá

Resultado de 2 anos de documentos, isso porque alguns foram deletados manualmente de uns tempos para cá. OK, eu devo ter aprendido algo de útil em 2 anos, certo?

tar zcvf siga-2012-2013.tar.gz "SIGA and stuff"

Se você não tiver nada a perder, mande o seu rm -rf. Mas, por uma questão de consciência, ainda não vou deletar documentos antigos. Mas isso não significa que eu precise manter tudo bagunçado…vamos usar controle de versão!

$ hg init
$ hg add doc.pdf boletim.pdf
$ hg commit -m "first commit"

Resultado mais limpo, obrigado:

Screenshot from 2014-01-12 00:12:46

OK, agora vou repetir o que eu falei de forma mais amigável: se você não quiser ter vários PDFs amontoados, você pode começar compactando tudo (zip, rar, tar, você escolhe). A partir de então, vamos passar a ter um único PDF de cada elemento  (histórico, boletim, BOA …). Ao baixar um histórico ou boletim, vamos substituir (= deletar o antigo e colocar o novo no lugar, tanto faz) o anterior com o novo. Mas, caso seja necessário recuperar o anterior numa data posterior, ele estará sempre guardado no nosso sistema de controle de versão (que pode ser o mercurial, o git, etc — BTW, usualmente eu uso o git, só estou usando o mercurial agora para fins de hobby/aprendizado). Resumindo: você passa a externalizar o trabalho de manter múltiplas versões de arquivos, e basta.

Tá bom, se alguém realmente tenha se interessado por essa baboseira toda e seguiu os comandos acima =P, caso você baixe um novo histórico e boletim e queira atualizá-los no Mercurial, faça o seguinte:

  • substitua os arquivos anteriores — certifique-se de sempre usar o mesmo nome, exemplo: hist.pdf.
  • atualize seu repositório local:
  • hg commit -m "minha nota de física foi adicionada"

Agora, se você realmente precisar recuperar um arquivo antigo algum dia…bom, é só pesquisar como fazer isso, não é difícil. A menos que você já esteja acostumado a utilizar controle de versão, não vale a pena decorar isso agora (mas sim aprender, quando você realmente precisar…).

Journal #11: Cansei de guardar tantos arquivos do SIGA

9 melhores apps para Android – Parte 1 – KISS

Resumo: recentemente testei muitos apps para Android, então vou começar a escrever uma série de posts recomendando quais achei mais interessantes e / ou melhores. Cada post incluirá um punhado de apps, separados por categorias.

android_kiss

OBS.: esses posts seguirão dois princípios básicos: a) só serão listados aplicativos os quais tendem a valer a pena deixar instalados de forma permanente no sistema. Isto é, vou evitar listar aplicativos os quais só vale a pena “ver como é” e depois desinstalá-los. A ideia não é essa; na verdade, o objetivo é apresentar um conjunto de aplicativos que seja relativamente útil / interessante a tal ponto de mantê-los instalados no sistema e b) não pretendo descrever esses aplicativos de forma extensiva. A ideia de testar um aplicativo é DIY (= do it yourself / faça você mesmo).  Vamos lá:

Continue reading “9 melhores apps para Android – Parte 1 – KISS”

9 melhores apps para Android – Parte 1 – KISS