Latest Entries »

Se você usa o Firefox no Ubuntu com a extensão Firefox Sync, já deve ter visto esse bug…

Para corrigi-lo, basta fazer o seguinte:

Vá em Editar -> Preferências -> Conteúdo, e na seção de Idioma clique em Selecionar…

na janela que abrir, adicione o idioma pt-br e coloque ele como o primeiro. Dê OK. Resolvido!

vide https://bugzilla.mozilla.org/show_bug.cgi?id=580833

 

Anúncios

O .NET já tem embutido uma facilidade para compressão de dados com algoritmo Deflate e Gzip. Neste exemplo mostrarei como compactar e descompactar dados com Deflate, mas com GzipStream o processo é o mesmo.

A princípio parece complicado realizar essa compactação utilizando streams, mas na realidade é bem simples. O DeflateStream é um wrapper stream, ele envolve um outro stream que é onde os dados serão salvos; você grava os dados no DeflateStream, o DeflateStream grava compactado no stream de destino. Para descompactar, o processo é o inverso, você lê do DeflateStream, e o DeflateStream lê do stream de origem realizando a descompactação on-the-fly.

Para exemplificar o processo, deixo aqui dois métodos, um que realiza a compactação de um array de bytes através do DeflateStream e do MemoryStream, e um que faz a descompactação.

private static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[32768];
while (true)
{
int read = input.Read(buffer, 0, buffer.Length);
if (read <= 0) return;
output.Write(buffer, 0, read);
}
}

public static byte[] Compactar(byte[] arrayOrigem)
{
byte[] arrayComprimido;
using (MemoryStream origem = new MemoryStream(arrayOrigem, false))
{
using (MemoryStream destino = new MemoryStream())
{
using (DeflateStream compress = new DeflateStream(destino, CompressionMode.Compress))
{
CopyStream(origem, compress);
}
arrayComprimido = destino.ToArray();
}
}
return arrayComprimido;
}

public static byte[] Descompactar(byte[] arrayOrigem)
{
byte[] arrayDescomprimido;
using (MemoryStream origem = new MemoryStream(arrayOrigem, false))
{
using (MemoryStream destino = new MemoryStream())
{
using (DeflateStream decompress = new DeflateStream(origem, CompressionMode.Decompress))
{
CopyStream(decompress, destino);
}
arrayDescomprimido = destino.ToArray();
}
}
return arrayDescomprimido;
}

Recebendo SMS em aplicativos J2ME

Se você quer desenvolver um aplicativo Java que fique esperando alguém enviar um SMS para você e então fazer alguma ação (como por exemplo responder automaticamente), saiba que não é possível.

Bem, é possível, mas a API do J2ME só permite receber SMS que sejam direcionadas à aplicação, ou seja, foram enviadas para a porta que a aplicação está escutando. SMSs comuns são enviadas sem número de porta, e aplicações J2ME não podem recebê-las. E SMSs com número de porta especificado só podem ser enviados a partir de… outra aplicação J2ME! Não dá pra setar número de porta com o aplicativo de SMS que já vem no celular.

O sonhado foguete de usar um celular boqueta para receber SMS de clientes, processar e retornar uma resposta não irá acontecer.

Levei mais de uma hora buscando na net, sem acreditar, até que baixei a documentação oficial da API WMA 1.1, e li com os próprios olhos, aplicações Java só poderão receber SMS com números de porta.

Pôxa, por que não permitir esta funcionalidade, com autorização do usuário? São coisinhas como esta que fazem ficar difícil usar Java…

Mas há uma saída: algum fabricante pode ter implementado essa funcionalidade em SDKs proprietárias. Se tiver paciência de buscar no site do fabricante….

Segue o link para a especificação da WMA 1.1:

https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_JCP-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=7339-wma-1.1-mr-spec-oth-JSpec@CDS-CDS_JCP

Pegando seu IP externo em C#

Às vezes você precisa saber qual IP sua aplicação está usando para sair para a internet, principalmente quando uma máquina tem vários IPs.
Este métodozinho foguete usa o site www.meuip.com.br para pegar seu IP de saída:

public static string PegarIPExterno()
        {
            System.Net.WebClient t = new System.Net.WebClient();
            string meuip = t.DownloadString("http://meuip.datahouse.com.br");
            return meuip
                .Substring(
                meuip.IndexOf("o Meu IP? ") + "o Meu IP? ".Length,
                meuip.IndexOf("</title>") - meuip.IndexOf("o Meu IP? ")
                - "o Meu IP? ".Length);
        }

Calculando MD5 sums em C#

O .NET já tem embutido um hasher MD5, mas ele gera array de bytes, e não aquela string hexadecimal bonitinha (ex. 7285a29ee745d94a6335d0d986438bad).

Segue então uma classezinha foguete que faz isso:

public static class CalculadoraHash

{

public static string CalcularMD5 (string caminho)

{

FileStream fs = new System.IO.FileInfo (caminho).OpenRead ();

try

{

MD5 md5 = new MD5CryptoServiceProvider ();

// Constrói a string final convertendo cada byte para hex

// e colocando numa string

string resultado = "";

foreach (byte b in md5.ComputeHash (fs)) {

resultado += b.ToString ("x2");

}

return resultado;

}

finally

{

fs.Close ();

}

}

}

Configurando meu Ubuntu na máquina virtual percebi que a cedilha não estava funcionando, em vez de ç ele colocava ć.

Solução foguete segundo o blog http://gpupo.com/c-cedilha-no-ubuntu-910-resolvido :

No arquivo

/usr/lib/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules

modificar a linha abaixo, adicionando o :en no final

 "cedilla" "Cedilla" "gtk20" "/usr/share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa:en"

Depois, no arquivo

/etc/environment

adicionar a linha:

export GTK_IM_MODULE=cedilla

E então no arquivo

/usr/share/X11/locale/en_US.UTF-8/Compose

trocar todos os ć e Ć para ç e Ç (são três ocorrências de cada um no arquivo).

Faça logout e depois logon, e deve estar funcionando.

Echofon dropa suporte ao Linux

Update: o twitter agora não aceita mais que aplicativos utilizem autenticação básica, só via OAuth. Isso significa que a versão do echofon que funcionava no Linux agora parou de funcionar também.

 

Echofon, a famosa extensão para firefox que permite acompanhar o twitter, retirou o suporte a autenticação básica, o que significa que não vai funcionar mais em builds customizados e em plataformas “menores”, mas afirmam estar estudando uma solução para isso.

Foguete para solucionar o problema:

Baixem a última versão do Echofon que funcionou:
https://addons.mozilla.org/en-US/firefox/addon/5081/eula/88620?src=version-history%20%22

Fonte: http://itechlog.com/itechfeed/2010/09/06/echofon-shamefully-drops-firefox-for-linux/

Foguete

foguete (ê)

s. m.
1. Fig. Gambiarra, solução rápida.
2. Fig. Algo bom ou interessante.
3. Fig. Descompostura.
4. Peça pirotécnica que, subindo alto, estraleja ou verte fogos de cores.
5. Mar. Foguetão.
6. Pop. Cartucho comprido e esguio, cheio de confeitos.
7. Mad. Estrada ou caminho íngreme calcetado com seixos, em degraus, para facilitar a subida ou descida.
8. Mil. Peça pirotécnica destinada a incendiar a praça inimiga.
9. Bras. Indivíduo trêfego, irrequieto, alegre.