Alertas de sistema no Actor IM

Se você ainda não conhece o Actor IM, então a hora é essa. Trata-se de um Instant Messenger 100% livre nos moldes dos famigerados WhatsApp e Telegram (não sei qual dos dois é mais devasso). Por ter seu servidor livre, também, ele te permrite instalar suas próprias instâncias cliente+servidor. Maiores informações você encontra no site deles: ACTOR IM

Nunca usei o WhatsApp, e abandonei o Telegram assim que descobri o Actor. Então no último ano venho aprendendo mais e integrando ele cada vez mais no meu cotidiano pessoal e profissional. Há algum tempo postei um artigo sobre virtualização com OpenVZ, e chegou a hora de automatizar a criação e ativação de containers (máquinas virtuais) em função do número de acessos que o site recebe.

Funciona muito bem, assim quando a quantidade de acessos chega a X por servidor do cluster, o programa ativa ou cria um novo container, baixando a média de acessos que cada servidor atende, balanceando dinamicamente a carga, distribuindo-a igualmente para todos os servidores do cluster. Mas fazer isso e não avisar não é aceitável, então ativei minha “velha” rotina de alertas por e-mail. Foi então que me passou pela cabeça: que legal seria receber alertas como esse no Actor!

Fiz uma pesquisa e achei este link da documentação do Actor chamado Web Hooks – Integration token for groups onde ele explica que via POST pode-se enviar uma mensagem para um grupo do Actor. Não era exatamente o que eu tinha em mente, pois a ideia era enviar uma mensagem para mim mesmo e não para um grupo, mas, sou brasileiro e não desisto NUNCA! 🙂

  1. Criei uma segunda conta no Actor usando o e-mail de envio de alertas. Assim, agora tenho duas contas no Actor: uma via número de telefone e outra via e-mail;
  2. Com duas contas pude criar um grupo;
  3. No grupo, no final da lista de membros, está o “Integration Token”. Trata-se de uma URL que nos permite interagir diretamente com um grupo do Actor;
  4. Me certifiquei de ter o comando curl instalado no meu GNU.

P.S. O Alessandro Feitosa AKA PHP com Rapadura, percebeu que pode-se criar um grupo contendo só a sua conta padrão. Como não sabemos se é um bug ou não, aproveitem!

Com esses “ingredientes” era hora de testar:


# curl -H "Content-Type: application/json" -X POST -d '{ "text": "Alerta" }' URL_do_integration_token_aqui

Lindo, simples e muito funcional!

Usem Software Livre, 100% Livre!

Saudações Livres!

Livros em CC BY

No ano passado decidi publicar dois livros que eu tinha basicamente prontos. Acreditem, o desafio é muito maior do que o esperado. Em 2012 publiquei o livro OpenLDAP Extreme pela Editora Brasport e confesso que não fiquei muito feliz com o contrato que assinei, foi um daqueles que limitam a liberdade. Eu basicamente perdi toda a autonomia sobre minha obra pelos dez anos seguintes. Assim me prometi que nunca mais faria uma publicação seguindo os moldes tradicionais. Não acredito no Direito Autoral como forma de limitar a liberdade do pŕoximo. Foi bacana como primeira experiência, com lançamento oficial numa livraria e tudo mais. Divertido, mas depois que passa a euforia me senti tolhido. Que fique claro que estou depositando apenas em mim a responsabilidade por esse sentimento, afinal de contas ninguém me obrigou a assinar o contrato.

Em 2015 decidi que podia ser uma boa ideia tirar da gaveta um outro livro de OpenLDAP e fazer uma apanhado dos artigos que publique nos últimos anos e dai ter outro livro. Mas desta vez seria sob licença Creative Commons BY SA, ou seja, com permissão plena de uso, reprodução, derivativas, e inclusive uso comercial. Fiz contato com uma editora gaúcha chamada Buqui e eles toparam fazer a edição em CC BY mas eu teria que pagar pelos serviços de diagramação e registro ISBN. A capa eu contratei um designer e a correção foi feita pela linda Josilda Silva. No final desembolsei R$ 2.000,00 para ter as versões prontas e publicáveis.

Os livros estavam guardados, enquanto eu avaliava qual seria o melhor momento para publicá-los, quando fui avisado de que eles já estavam a venda no Google Play. Quanta ironia, justamente onde? Mas assim é a vida. As obras foram licenciadas para serem públicas e exploráveis por todos os humanos, inclusive a minha Editora que escolheu essa plataforma para comercialização sem ter me informado. Perceba que não estou me queixando, apenas esclarecendo que eu não tive nada haver com a comercialização dos dois livros no Google Play ou em nenhuma outra loja ou livraria on-line. Felizmente eles foram retirados de lá.

DRM?

O mais incrível é que plataformas on-line como a do Google Play clamam ter proteção DRM que visa, exatamente, limitar a distribuição livre de conteúdo digital. Mas como eles pretendem fazer isso se eu mesmo licenciei os livros sob CC BY?

Os livros

Então, hoje decidi publicar aqui meus dois livros de forma gratuita para todos. Divirtam-se:

OpenLDAP Ultimate

mini_capa

Este é um material introdutório sobre o renomado protocolo LDAP. Está é uma fera que deve ser dominada por todos os profissionais de redes, mas os primeiros passos são um grande desafio. Linguagem cotidiana, comparativos criativos e exemplos práticos são a base deste guia para entender, usar, debugar e evoluir no entendimento teórico de um serviço de diretórios e sua aplicação como central de autenticação dos principais serviços de rede.

Aos que já deram os primeiros passos e desejam ir muito além, não deixem de conferir OpenLDAP Extreme em: http://www.openldap.com.br

Páginas: 219
ISBN: 9788583381853
Idioma: português

PDF 
ePUB 

Cronicas de um Tetranacional do Software Livre

mini_capa

Pequenos diários de bordo, autodefinições e muita controvérsia em 29 crônicas escritas nos últimos dois anos. Eventos de Software Live, conceitos de economia meritocrática, contradições dos ditos ativistas convertidos e suas redes sociais devassas, e um novo olhar sobre as nefastas intenções do Open Source Initiative.

Em tempos de vigilância massiva, ter noções claras sobre o papel do mercado, dos governos e da sociedade civil organizada é fundamental. Sem poupar nenhum dos atores envolvidos expusemos todos os interesses e até mesmo o fogo amigo dos ativistas cibernéticos.

Páginas: 122
ISBN: 9788583381877
Idioma: português

PDF
ePUB

 

 

 

 

 

Saudações Livres!

Servidor VPS com OpenVZ

openvz-logo-150px_new_4Esta última semana foi muito intensa. Novos clientes surgiram com uma demanda incomum: escalabilidade para sites de conteúdo.

Os clientes são portais de notícias regionais da Paraíba e o seu volume de acessos quadruplicou nos últimos anos, provocando instabilidade e lentidão nos acessos. A fórmula básica de instalar um WordPress em um servidor com configuração mais generosa já não resolvia o problema. Chega um momento em que não adianta ter RAM demais e cores extras se eles não forem utilizados 100%.

Estruturas monolíticas tem capacidade limitada de responder a muitas requisições, mesmo que a maquina seja poderosa. É uma questão de enfileiramento e é para isso que os serviços de VPS, Proxy reverso e balanceamento de carga entram em cena: forçar o uso máximo do hardware e permitir escalabilidade.

Tecnologias utilizadas

Neste cenário usamos as seguintes tecnologias:

  • OpenVZ para servidor VPS;
  • HA Proxy para proxy e balanceamento de carga
  • Nginx + PHP5-fpm como servidor HTTP
  • Mount bind para compartilhamento de arquivos

Descrição do fluxo

As requisições chegam na porta 80 (HTTP) e são atendidas pelo HA Proxy que verifica se a página está em seu cache ou não. Se estiver ele fornece o conteúdo sem requisitar nada dos servidores internos. Isso faz dele uma super ferramenta que reduz drasticamente o consumo de recursos computacionais. Se a página não estiver em cache ele faz a solicitação para um dos servidores internos. Mas essa solicitação é feita de forma inteligente e balanceada para não sobrecarregar apenas um.

Internamente há varias maquinas virtuais ou VPS’s que foram criadas com o servidor OpenVZ. Estas maquinas tem configurações similares e isolam várias instalações do WordPress e outras do MySQL. Neste cenário são 8 máquinas virtuais que respondem às requisições, sendo 6 com WordPress e duas com Mysql.

As VPS’s tem a mesma configuração e os mesmos softwares instalados: Nginx+PHP5-Fpm, além de todas as dependências para que o WordPress funcione.

O conteúdo a ser mostrado, ou seja, o próprio WordPress está gravado na maquina hospedeira e é compartilhado via a montagem linkada para cada uma das VPS’s, usando-se a opção bind do comando mount. O OpenVZ tem uma forma própria de fazer isso e que está bem documentada no wiki do projeto. Dessa forma, uma alteração qualquer de configuração ou adição de um plugin, por exemplo, ganha efeito imediato para todas as VPS’s. Importante lembrar que todas elas usam o mesmo servidor MySQL que está instalado em uma outra VPS’s.

O resultado final é estonteante. Onde antes o servidor não era capaz de atender as solicitações agora ela sobra e está pronta para atender mais que o triplo de requisições.

O layout é como descreve a figura abaixo apesar de termos usado o “layer 7”.

Tutorial para começar

Observações:

  • A distribuição escolhida foi Debian;
  • Não usamos o glusterfs por problemas de performance.

Portais

Links

Agradecimentos

Quero agradecer imensamente os amigos João Gabriel e Rodolfo Pilas pela ajuda, inspiração e especialmente aquelo olho clínico para apontar as vírgulas e espaços fora do lugar.

Saudações Livres!

is it base64?

 

Introduction

There is a long time that I was trying to find out how to figure if a string is base64 encoded or not, in Shell Script.

Looking all over the Internet I see that this is a problem with no real solution on to many programming languages. After a lot of work and a lot of collaboration (@homembit, @ysidorito, @smailli, @kretcheu, @smailli, @pauloeferreira, @rgou, @natanschultz and probably someone else I forgot) I figure it out.

I’ll try to explain how.

The problem

There are two conditions that makes a string a base64 encoded string:

  1. Its length must be perfectly divisible by 4;

  2. It must contain only [A-Za-z0-9+/]+[=]{0,2} chars;

But respect only this two conditions don’t guarantee that this string is a base64 encoded string. To show that there are exceptions lets take a look on the strings below:

  • S1=”FarmaciaCido”

  • S2=”BoniattiCorbelia”

  • S3=”PrefCorbelia”

Each one of this strings fits those two conditions and they are not base64 encoded string. Well in a strictly sense they are, but the result of they decoded are non-ascii, so it doesn’t mean nothing. Thats why identify if a string is base64 encoded string or not is so hard.

The solution

The most common solution I have seen out there talks about run some decode function and expect by it’s return code. If its ok, then it must be a base64 encodes string, otherwise its not. But as we explained before there are many possible false positives, that make this a not reliable solution.

In the most of cases what we need is to know if the base64 decoded string is ascii, to get our regular string. So, the solution is test the base64 decode to figure if it contains non-ascii characters or not. If it does, then it’s not what we want.

The code

This is my is_base64() shell script function:

With comments:

# $BASE_STRING

is_base64 () {

# Get string length

STR_LENGTH=${#BASE_STRING}

# Test if it is perfectly divisible by 4

TEST1=`echo $STR_LENGTH % 4 | bc`

if [ “$TEST1” = “0” ] ; then

#Test if it have only the allowed chars

TEST2=`echo “$BASE_STRING” | egrep “^[A-Za-z0-9+/]+[=]{0,2}$”`

if [ “$TEST2” != “” ] ; then

# Test if the result is non-ascii free

TEST3=`echo “$BASE_STRING” | base64 -d | grep -v [:ascii:]`

# If it is, return true, otherwise, return false

if [ “$TEST3” = “” ] ; then

echo 0

else

echo 1

fi

else

echo 1

fi

else

echo 1

fi

}

Without comments:

# $BASE_STRING

is_base64 () {

STR_LENGTH=${#BASE_STRING}

TEST1=`echo $STR_LENGTH % 4 | bc`

if [ “$TEST1” = “0” ] ; then

TEST2=`echo “$BASE_STRING” | egrep “^[A-Za-z0-9+/]+[=]{0,2}$”`

if [ “$TEST2” != “” ] ; then

TEST3=`echo “$BASE_STRING” | base64 -d | grep -v [:ascii:]`

if [ “$TEST3” = “” ] ; then

echo 0

else

echo 1

fi

else

echo 1

fi

else

echo 1

fi

}