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!

Como o Java recebeu esse nome?

De: James Gosling
Data: 24 de Agosto de 2007 – 20:16:58
Para: Jonathan Schwartz
Assunto: Como o Java recebeu esse nome?
A história é a seguinte:
Nós precisávamos de um nome. Estávamos usando “oak” (que eu escolhi randomicamente), e embora o time tenha se apegado e ele, os advogados responsáveis pelo registro de marcas o descartaram. Tivemos muitos debates por email sobre nomes, mas nada era resolvido. Acabamos na estranha posição em que a única coisa que nos impedia de fazer o lançamento era o nome. Nosso líder de marketing conhecia alguém que era um “consultor de nomes” (eu não lembro o nome dele, mas ele era ótimo). Nós não podíamos pagar o preço nem tínhamos tempo para fazer um processo completo de criação de nome de produto. Ele concordou em fazer algo bem atípico, mas efetivo e rápido: ele atuou como um facilitador em uma reunião onde uma dúzia de nós nos trancamos em uma sala por uma tarde. Neste momento ele começou perguntando questões como “Como esta coisa faz vocês se sentirem?” (Animados!) “O que mais faz com que vocês se sintam assim?” (Café, Java!*). Chegamos a um quadro coberto de palavras aleatórias. Então, ele nos conduziu em um processo de ordenação onde finalizamos com um ranking de nomes. Acabamos com uma dúzia de nomes candidatos e os enviamos para os advogados: eles trabalharam na lista de cima para baixo até que chegaram a um nome que passou pela pesquisa deles. “Java” era o quarto nome na lista. O primeiro nome era “Silk”, que eu odiei, mas todos os outros gostaram. Meu favorito era “Lyric”, o terceiro na lista, mas ele não passou pelo teste dos advogados. Eu não lembro quais eram os outros candidatos.
Então, quem deu o nome Java? Uma reunião organizada pelo marketing, o consultor que a organizou, e um monte de nós gritando várias palavras aleatórias. Eu honestamente não tenho certeza absoluta de quem disse “Java” primeiro, mas acredito que tenha sido Mark Opperman.
Com certeza não foi nenhuma mente brilhante de marketing usando um processo coerente e bem pensado.
* “Java” é uma gíria norte-americana para café (NT).