Validacao de NIF em Ruby

#!/home/void/.rbenv/shims/ruby

nif = ARGV[0].strip rescue ""

# Structure validation
if nif == nil || nif.length != 9
puts "NIF Invalido: #{nif}"
exit(1)
end

# Control digit
digits = nif.chars
control_digit = 0
9.downto(2).each_with_index do |v, index|
control_digit += v * digits[index].to_i
end
control_digit = 11 - (control_digit % 11)
control_digit = 0 if control_digit >= 10
valid = control_digit == digits[8].to_i

puts "NIF #{valid ? 'V' : 'Inv' }alido: #{nif}"
Importante: Substituir o caminho para o ruby no cabecalho do script.

Liberalização, legislação, e coisas

Cá está o que tenho dito desde sempre, desta vez dito pelo grande Ruben Tiago Qualquer Coisa: As drogas deviam ser legais, regulamentadas, e taxadas. Não vai haver mais pessoas a consumir pelo facto de ser legal. E ao menos sempre o estado metia mais dinheiro nos cofres.

Casa de ferreiro, espeto de pau

Outro dia pus-me1 a pensar sobre o significado desta expressão tão antiga e decidi tentar esmiuçá-la no sentido de tentar “perceber-le-a” melhor. Da forma que vejo, existem algumas hipóteses para o facto do senhor ferreiro possuir um espeto de pau, em oposição a um espeto de ferro: 

  1. Falta de tempo. O senhor tem tanto trabalho durante a sua actividade de ferreiro que acaba por não ter tempo para fazer um espeto para sua utilização pessoal. Se este é o caso, acho que a melhor solução é juntar-se a um sindicato de ferreiros, no sentido de diminuir a sua elevadíssima carga de trabalho que não lhe permite a criação de um espetozinho para si e para os seus. Se o senhor ferreiro for entrepreneur pode até criar o seu próprio sindicato. Dessa forma até é capaz de arranjar maneira de se dedicar a esta nova actividade a 100% e não ter de trabalhar no duro o resto dos seus dias. Por outro lado talvez não tenha tempo para fazer espetos de ferro, mas não se pode ter tudo.
  2. Falta de motivação. Depois de um dia inteiro a trabalhar o ferro quem é que quer ver mais ferro à frente? Talvez o problema do senhor seja que ao fim do dia quer é pensar noutras coisas que não ferro e, por isso mesmo, dedica-se à utilização de utensílios em madeira no sentido de se distrair da sua actividade principal. Se calhar este ferreiro devia pensar em fazer outra coisa da vida, digo eu.
  3. Falta de jeito. Vamos supor que este ferreiro em particular não tem jeito para trabalhar o ferro. Todo e qualquer espeto que tenta fabricar lhe sai torto e a mulher não pára de lhe atazanar o juízo. A solução é simples embora bipartida: Matar a mulher e arranjar outro trabalho.
  4. Iluminação pauliteira. Imaginemos que o nosso amigo, num estado de meditação profunda, descobriu que na realidade a madeira produz um espeto mais eficiente que o ferro. O que é que ele vai fazer quanto aos seus clientes? Dizer-lhes a verdade e perder uma batelada de dinheiro? O tipo não é parvo. Vai mas é ficar caladinho e continuar a produzir em ferro que é o que lhe enche os cofres e, em casa, utiliza a ferramenta mais eficiente. Neste caso a solução é um dos clientes descobrir a verdade, arranjar um espeto de pau, e ir a casa dele matar-lhe a mulher, o cão, e empalar o ferreiro numa cruz de madeira… oh wait…
  1. Sou só eu ou isto soa a um gajo cobrir-se de pús? 

Como construir um quadcóptero

Este é o primeiro artigo de uma série onde irei mostrar tudo o que é necessário (espero eu) para ter um quadcopter a voar. Talvez no fim, e à medida que completo o meu próprio projecto, explique como utilizá-lo para filmagem aérea, mas tudo a seu tempo.

Um quadcopter é uma variação dos tradicionais helicópteros telecomandados (RC) que, ao invés dos seus primos, possui quatro hélices para propulsão e navegação. Ao contrário dos helis o controlo é totalmente conseguido através da variação da velocidade de cada uma dessas hélices. Para o efeito, um quadcopter necessita de uma placa controladora de vôo (Flight Controller - FC) que é responsável, por um lado, por garantir a estabilidade contínua do aparelho e, por outro, de executar as ordens do rádio transmissor do piloto.

Fig.1 - Exemplo de FC.

O quad precisa portanto de um conjunto de transmissor (TX) e receptor (RX). O primeiro geralmente acoplado a um rádio (um rádio pode ter um transmissor logo lá dentro, ou ser modular e ser possível trocar de transmissor) e o RX no próprio quad para transmitir os comandos do piloto ao FC.

Fig.2 - Kit de receptor e módulo transmissor.

Fig.3 - Um rádio modular.

Para além disto, e devido a questões de amperagem e voltagem em que não vou entrar agora, são necessários 4 controladores electrónicos de velocidade (ESC), um por motor, que são responsáveis por dizer ao seu respectivo a velocidade a que deve girar a todo o instante. Obviamente também precisamos dos motores, 4 deles :)

Fig.4 - Um controlador electrónico de velocidade (ESC).

Fig.5 - Um motor brushless.

Os motores precisam de hélices para gerar força (quem diria), uma por motor. O tamanho e sentido de rotação são importantes, mas fica para um dos próximos posts :)

Fig.6 - Uma hélice.

Vamos precisar ainda de um cabo para distribuir energia da bateria para os ESCs e para todo o resto da electrónica do nosso quad.

Fig.7 - Um cabo de distribuição de energia.

Fig.8 - Uma bateria.

Para ligar o receptor (RX) ao FC, bem como este último aos ESCs precisamos de uns cabos de 3 ligações como os da imagem apresentada. Vamos precisar de 4 para os ESCs, mais um por cada canal de transmissão que precisemos para controlar o nosso quad. O mínimo para um quad são 4 canais (throttle, pitch, roll, e yaw), mas podemos ter mais por exemplo para alterar modos de vôo com switches no comando. Mínimo dos mínimos, precisamos de 8 cabos destes.

Fig.9 - Um cabo de ligação ao FC, ESC, e receptor.

E finalmente, mas não menos importante, precisamos de um corpo (ou frame) onde montar isto tudo. Dependendo da configuração que escolhermos assim escolheremos o tipo de frame que queremos. Para um quad existem 2 versões básicas: H-Quad (a da imagem), e X-Quad (mais tradicional, em cruz). Ambas têem vantagens e desvantagens, mas lá chegaremos.

Fig.10 - Uma frame/corpo.

Resumindo tudo numa imagem bestial: