Feliz 2011!

Como resolução de fim de ano, resolvi criar uma planilha de Excel com o resumo dos meus gastos de 2010.

Para tanto, tive que pegar um extrato por mês no meu banco (pois ele só deixa listar extratos de 60 em 60 dias).

Depois desse trabalho hercúleo (12 trabalhos, na verdade) o resultado foi que fiquei com 12 arquivos (01.txt…12.txt) com o formato tosco do extrato, como pode ser visto na figura #1.

Continue reading

DNS do Google

Esta é uma dica para configurar seu DNS em casa. Não mexa no computador do trabalho a não ser que você seja o administrador da rede :)

Há pouco tempo atrás (se não me engano foi em 2009), o Google lançou seu servidor de DNS gratuito. Mas que diabos é um servidor de DNS? Domain Name Server, ou “servidor de nomes de domínio” é um computador que, dado um endereço de internet (ex.: www.google.com, twitter.com, irc.efnet.com) ele retorna o endereço IP (ex.: 192.168.0.1) deste nome. Somente com o endereço IP seu computador consegue se conectar a outro.

Logo, o DNS é um computador que precisa ser bem rápido estar sempre à nossa disposição. Aí entra a galera do Google querendo aprimorar a internet de todos. A idéia deles é oferecer um servidor de DNS rápido.

Já que o DNS é o computador que traduz nomes para endereços nós temos que saber o endereço IP dele de cabeça. Não coincidentemente o IP do Google é bem fácil de memorizar: 8.8.8.8 e o secundário é 8.8.4.4

Configurando o IP no Windows:

Configurando o IP no Mac:

Moleza, né? Qualquer dúvida, grita lá nos comentários.

Pseudo-RAII em Java

Quando vejo um código nesse padrão:

InputStream is = getSomeInputStream();
try {
  // use 'is'
} catch(IOException ex) {
  // log ex
} finally {
  try {
    if (is != null) is.close();
  } catch(IOException ex) {}
}

Me dá náusea, vertigem, urticária! Comparem com este padrão:

try {
  final InputStream is = getSomeInputStream(); // se der exception vai lá pro catch
                                               // sem passar pelo finally
  try {
    // use 'is'                                // se der exception vai lá pro catch
                                               // passando pelo finally
  } finally {
    is.close();                                // certeza de que 'is' não é null
  }
} catch(IOException ex) {
  // log ex
}

Ele espelha a keyword ‘using’ do C#, só loga a exception uma vez e garante que ‘is’ é diferente de null no bloco ‘finally’ (e caso o close dispare uma exception, tem o catch logo abaixo).

Críticas?