Linux: Executando comandos em looping no shell

Como fazer o seu shell ficar rodando um comando qualquer sempre?  Utilizando os laços while e until.

Exemplo:
Para o shell executar o comando “netstat -nat” a cada um segundo podemos fazer o seguinte:

$ while true; do netstat -nat; sleep 1; clear; done;

Esse comando executa “netstat -nat” enquanto a expressão true for verdadeira, como a expressão true SEMPRE será verdadeira, o laço se repetira infinitamente.
Com isto podemos executar qualquer comando, fica a critério do usuário e isto também não impede o uso de auxiliares como o “pipe” (|) ou “&&”.#

Também podemos fazer a mesma coisa com o comando until:

$ until false; do netstat -nat; sleep 1; clear; done;

Da mesma forma que o exemplo anterior, este laço repetirá o comando infinitamente enquanto a expressão false for falsa.

Converter rmvb2avi on Ubuntu

I recently had to convert some RMVB-videos to AVI. I searched for a way to accomplish this and found a blog entry about MEencoder. I tried the exact procedure described using Ubuntu 10.10 and it worked like a charm.

First of all, install MEncoder

sudo apt-get install mencoder

After that, as follow below…

mencoder -oac mp3lame -lameopts cbr:br=64:vol=2 -srate 22050 -ovc xvid -sws 1 -xvidencopts bitrate=500:max_key_interval=120:vhq=4 -ofps 30 -vf scale=640:360 /you_path/file.rmvb -o /your_path/file.avi

That’s it!

Java HTTPS client – HttpsURLConnection example

Here’s a simple Java HTTPS client to demonstrate the use of HttpsURLConnection class to print a https URL content and certificate detail.

Access https URL : https://www.google.com/

package br.com.ziben.client;
 
import java.net.MalformedURLException;
import java.net.URL;
import java.security.cert.Certificate;
import java.io.*;
 
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException;
 
public class HttpsClient{
 
   public static void main(String[] args)
   {
        new HttpsClient().testIt();
   }
 
   private void testIt(){
 
      String https_url = "https://www.google.com/";
      URL url;
      try {
	     url = new URL(https_url);
	     HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
 
	     //dump all cert info
	     print_https_cert(con);
 
	     //dump all the content
	     print_content(con);
 
      } catch (MalformedURLException e) {
	     e.printStackTrace();
      } catch (IOException e) {
	     e.printStackTrace();
      }
 
   }
 
   private void print_https_cert(HttpsURLConnection con){
 
    if(con!=null){
 
      try {
 
	System.out.println("Response Code : " + con.getResponseCode());
	System.out.println("Cipher Suite : " + con.getCipherSuite());
	System.out.println("\n");
 
	Certificate[] certs = con.getServerCertificates();
	for(Certificate cert : certs){
	   System.out.println("Cert Type : " + cert.getType());
	   System.out.println("Cert Hash Code : " + cert.hashCode());
	   System.out.println("Cert Public Key Algorithm : " + cert.getPublicKey().getAlgorithm());
	   System.out.println("Cert Public Key Format : " + cert.getPublicKey().getFormat());
	   System.out.println("\n");
	}
 
	} catch (SSLPeerUnverifiedException e) {
		e.printStackTrace();
	} catch (IOException e){
		e.printStackTrace();
	}
     }
   }
 
   private void print_content(HttpsURLConnection con){
	if(con!=null){
 
	try {
 
	   System.out.println("****** Content of the URL ********");			
	   BufferedReader br = 
		new BufferedReader(
			new InputStreamReader(con.getInputStream()));
	   String input;
 
	   while ((input = br.readLine()) != null){
	      System.out.println(input);
	   }
	   br.close();
 
	} catch (IOException e) {
	   e.printStackTrace();
	}
       }
   }
}

Output…

Response Code : 200
Cipher Suite : SSL_RSA_WITH_RC4_128_SHA
 
Cert Type : X.509
Cert Hash Code : 7810131
Cert Public Key Algorithm : RSA
Cert Public Key Format : X.509
 
Cert Type : X.509
Cert Hash Code : 6042770
Cert Public Key Algorithm : RSA
Cert Public Key Format : X.509
 
****** Content of the URL ********
<!doctype html><html><head><meta http-equiv="content-type" ......

That’s it!

Legi, intellexi, condemnavi.

Caberia muito bem a frase do Apóstata Juliano II, para apresentar o Ágil para os gerentes da “escola normal”. Após oito anos trabalhando no desenvolvimento de software de missão crítica e num mundo ágil, ninguém me tirava da cabeça que aquela abordagem poderia de fato ir para o mundo corporativo, área para a qual “me mudei” após o Estado iniciar o processo de sucateamento das Armas.

Pergunto-me frequentemente os tantos “li, entendi, rejeitei” que ouvi ao explicar técnicas ágeis. Veio-me à mente meu próprio passado, onde tantas vezes me fiz um Juliano, quando me apresentavam um VSAM, com suas “trees”, DBase e Clipper e seus DBFs,… rejeitava-os por achar que sistemas de tempo real não combinava com Database (storages) e comecei a ter ojeriza dos coitados, e de fato comecei a usá-los em meados de 1994. Quase dez anos trabalhando em software de controle e automação industrial (PLC, Realtime, microkernel, assembler, C) e o Ágil (XP) era um companheiro, e, acredito piamente que ele nunca me traiu.

Normalmente os testes de missão crítica (sistemas de defesa, reatores nucleares e suporte à vida) são minuciosamente programados e visando o preditivo, que seria algo como “quando acontecer”, em oposição ao “se acontecer”. Normalmente um sujeito (observe que não uso a palavra desenvolvedor) treinado em ágil vai engolir sem mastigar qualquer outra técnica, e por que? Simples, o cérebro do agilista não questiona modelos, ele simplesmente age incondicionalmente; nesse momento todo um organismo, braços, olhos, cabeça, fala, se coordena automaticamente na solução; o agilista não pensa no problema. Um bom agilista sem nenhum esforço, atinge, num momento de crise qualquer um, pois sua abordagem deixa perplexos os observadores e “chama pra dentro” os capazes, todos querem de alguma forma dar sua contribuição, todos querem dar um pouco de si, todos estariam dispostos a sacar fora um pedaço de banha (pigs?) e também a quebrar os ovos (chickens?), afinal a atmosfera é funesta, estamos em risco de vida, ou acerta ou morre… e o tempo é pouco, e as penas vão literalmente pelos ares; comprometimento implícito. Assustados? A narrativa acima aconteceu, e tantas vezes me questiono se outra abordagem não Ágil, me deixaria agora escrever esse.

Ok, esqueçamos o drama ilustrativo e diminuamos a escala de perigo e demo-nos somente os últimos quatro anos, assim a gente começa um cenário Ágil mais ameno, moderno. Continuo afirmando que existe espaço para todos e uma futura convergência é inevitável e já acontece (PMI Ágil), e isso é bom. Isso mostra que estamos sempre errados, já que buscamos sempre uma melhora nesses processos.

Agora a célebre frase seria “li, não compreendi, rejeitei” – e fico triste -, “li, compreendi, fiquei com medo”… do modismo, dessa inferência a olhos vistos?

Ao surgir uma ideia nova que simplifica e funciona, que agiliza, e principalmente porque simplifica e agiliza, encontra uma resistência compreensível, pois implica quase que afirmar a obviedade, e o óbvio é uma coisa muito, mas muito complexa de entendimento. Pior, o óbvio implica uma aceitação de uma cultura, de um novo modus operandi, e isso não é pouco. Absorver uma cultura nova implica em mudança de hábitos, aquilo que nos faz, aquilo que nos identifica, isso é o que nos indica a conformidade, uma aliança, uma aceitação. Ao aceitar, passa-se a compreensão, logo em seguida procura-se os preceitos, para em seguida iniciar o processo de incorporação puro e simples. Agora você acredita, é um converso, faz parte de sua crença, com seus acertos e erros, está “doutrinado”. Incorporado então, ele começa um processo de maturação, e logo em seguida iniciar um processo preditivo individual, ora, isso implica em busca, em pesquisa, em treinos, simulações, ele se prepara para o “quando”.

Agilidade é algo inverso a uma zona de conforto,… por que mudar? As pessoas tendem a associar agilidade com adrenalina, com correria, com sandices e outras aberrações. É o inverso, acreditem. Como dito acima, o preditivo no Ágil, aquilo que era esperado, “quando acontecer”, aconteceu, eu estava preparado, esperando, não foi uma fatalidade… já existia algo, uma carta na manga, esperando o acontecimento, estava em hot stand by, não somente em stand by. O agilista observa o ecossistema, procurando algo que “encaixe” na sua cultura e até incorpora técnicas em artes marciais (dojo, kata), o inesperado é absorvido com impacto reduzido, concentrando esforço não no ataque, mas na defesa, o mais certeiro possível, rápido e preciso.

Aprecio essa pluralidade agilista, com suas adjetividades, que esbraveja jovialidade, criatividade e vontade de mudanças, de sair da mesmice, de um sistema ou modelo completamente comprometido com formalidades. Alguns itens devem ser ajustados ou melhor compreendidos, como o foco nos desejos do cliente, em detrimento à engenharia e arquitetura de software,… estamos focando o cliente e deixando esquecido o desenvolvimento de software? Não espero isso para o Scrum, por exemplo. Acho que alguns itens de qualidade deveriam ser incorporados, como um simples 5S, visando a organização pessoal e do próprio framework ágil. Algumas boas ideias estão se mantendo, outras sendo engolidas ou enquadradas por conjunto de conhecimentos em gerenciamento de projetos (PMI), que é algo mais abrangente em gerência de projetos, enquanto que o Ágil (quase) se limita ao desenvolvimento de software, apesar de ter raízes no Lean.

As vezes penso que o mal maior do agilista é o entusiasmo pela “religião” que ele agora é um converso e, qualquer afobação gera desconfiança para seus reais resultados. Também espero que essa exposição demasiada do Scrum não o deixe tão extasiado, levando-o a sucumbir sob o peso da própria agilidade, que é afinal, seu grande mérito. Leia, compreenda, aceite-o, mas deixe alguma água no poço, mostre-o como uma alternativa.

Wooof!

Convert WMV to AVI on Ubuntu

I recently had to convert some WMV-videos to AVI. I searched for a way to accomplish this and found a blog entry about MEencoder. I tried the exact procedure described using Ubuntu 10.10 and it worked like a charm.

sudo apt-get install mencoder
mencoder infile.wmv -ofps 23.96 -ovc lavc -oac copy -o outfile.avi

That’s it!