Aplicativos que seu Android precisa ter – RemoteControl for Earphones

Resolvi iniciar uma seção no site chamada “Aplicativos que seu Android precisa ter”, nesta seção publicarei dicas e “reviews” de aplicativos úteis que ajudarão a extrair todo o potencial de seu Smartphone Android.

Começarei com o RemoteControl for Earphones, pois ele simplesmente acaba com uma vantagem enorme que o iPhone possuía sobre o Android, que é o controle do player de música através de comandos no botão do fone de ouvido.

O comportamento padrão do botão de lapela da maioria dos Smartphones com Android é pausar e tocar músicas, além de atender ligações. O RemoteControl for Earphones possibilita que você use quase todos os comandos do player padrão apenas com este botão. Por exemplo, para dar play ou pause em uma música, basta apertar o botão uma vez, para ir para a próxima música, basta apertar duas vezes, para voltar, quatro vezes e por aí vai.

RemoteControl for Earphones

Tela do aplicativo (Android Market)

O aplicativo é gratuito e, ao contrário de quase todos os aplicativos gratuitos encontrados no Android Market, não possui aquelas propagandas chatas.

O único problema é que ele não é compatível com todos os players, funcionou perfeitamente no player padrão do Motorola Milestone e Songbird, porém não funcionou no Winamp, no player padrão do Motorola Atrix e do Samsung Galaxy S.

Link para o aplicativo:  RemoteControl for Earphones
Preço: Gratuito
Propaganda: Não


Instalando multifuncional Epson Stylus CX5600 no Ubuntu 10.04

Procurando pela Web encontrei vários tutoriais que explicavam como instalar a multifuncional Epson Stylus CX5600 no Linux, todos sem sucesso. Após meses de procura, encontrei este tutorial, do Luis Gallardo, que explica como fazer.

Como o tutorial explica a instalação no Ubuntu 9.10 não foi preciso seguir alguns passos. Então mostrarei abaixo os passos que utilizei para a instalação na versão 10.04 do Ubuntu.

Será necessário baixar os drivers da Avasys, para isso acesse este link, role a página para baixo, escolha a opção “Epson Stylus CX4300/CX4400/CX4450/CX5500/CX5600/DX4400/DX4450“, distribuição “Ubuntu” e versão “10.04” e clique em “Next“.

Na próxima página, baixe os arquivos “iscan-data_1.9.0-1_all.deb“, “iscan_2.26.4-2.ltdl7_i386.deb” e “iscan-plugin-cx4400_2.1.3-1_i386.deb“. Em seguida, execute os comandos abaixo:

sudo dpkg -i iscan-data_1.9.0-1_all.deb
sudo dpkg -i iscan_2.26.4-2.ltdl7_i386.deb
sudo dpkg -i iscan-plugin-cx4400_2.1.3-1_i386.deb

Tudo certo, certifique-se que o scanner está ligado e execute o comando

lsusb

Deverá aparecer uma lista de dispositivos conectados às portas USB, como esta:

Bus 003 Device 004: ID 04b8:083f Seiko Epson Corp. Stylus DX4450
Bus 003 Device 003: ID 04fc:05d8 Sunplus Technology Co., Ltd
Bus 003 Device 002: ID 04f3:0216 Elan Microelectronics Corp.
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 18e3:9101 Fitipower Integrated Technology Inc
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

A primeira linha “Bus 003 Device 004: ID 04b8:083f Seiko Epson Corp. Stylus DX4450” significa que a multifuncional foi detectada no endereço 003:004.

Este passos foram suficientes para que o scanner fosse detectado pelo XSane, mas só o usuário root conseguia usar o programa.

Para resolver este problema, edite o arquivo /lib/udev/rules.d/40-libsane.rules e acrescente as linhas abaixo:

# Epson CX5600
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="083f", MODE="0664", GROUP="saned", ENV{libsane_matched}="yes"

Desligue e ligue a impressora novamente. Para saber se deu certo, execute o comando lsusb. A saída deverá ser parecida com a saída abaixo:

Bus 003 Device 004: ID 04b8:083f Seiko Epson Corp. Stylus DX4450

Repare no Bus 003 e no Device 004 (os números poderão ser diferentes). Com estes números execute o comando

ls -l /dev/bus/usb/<BUS>/<DEVICE>

Substituia o <BUS> e <DEVICE> pelos respectivos números, neste caso:

ls -l /dev/bus/usb/003/004

Você verá algo parecido com

crw-rw-r--+ 1 root saned 189, 129 2011-07-01 14:01 /dev/bus/usb/003/004

Neste ponto é possível ver que todos os usuários pertencentes ao grupo saned estão aptos para usar o scanner.


Corrigindo o erro “Allowed memory size of…” do WordPress

Acabei de atualizar meu WordPress para a versão 3.2, ao terminar a atualização o servidor retornada a página de erro 500. Vasculhando o arquivo de log do WP descubri que estava dando o erro Fatal error: Allowed memory size of 33554432 bytes exhausted, aliás, vários erros assim.

Para descobrir se este é o seu problema, acesse o arquivo error_log que está no diretório wp-admin do WordPress e cheque as últimas linhas.

O procedimento abaixo resolveu o problema, mas, dependendo do servidor de hospedagem, talvez as configurações do PHP não permita o redimensionamento de memória em tempo de execução.

Edite o arquivo wp-settings.php que está na raiz do WordPress e adicione a linha abaixo após “<?php”

define('WP_MEMORY_LIMIT', '64M');

Aqui eu aloquei 64MB para o PHP, mas como saber quanto de espaço foi e deve ser alocado?

Na mensagem de erro ele mostra a quantidade que está sendo alocada, é o número comprido da mensagem “Fatal error: Allowed memory size of 33554432…”. Aqui ele diz que foi alocado 32MB (para converter bytes em megabytes faça o cálculo 33554432 / (1024^2) = 32).

Dependendo do resultado do cálculo, indique um valor superior.


Como está a briga entre Firefox, Internet Explorer e Google Chrome?

Vendo os gráficos de estatísticas de acesso do blog, resolvi analisar como anda a briga entre os browsers mais usados no mercado.

A briga entre o Firefox e Internet Explorer já é antiga e há pouco tempo, vimos a posição do browser na Microsoft cair de primeiro para o segundo lugar no ranking. Com o browser da gigante Google mais estável e acessível, as três primeiras posições poderão ser alteradas mais uma vez.

No período de um ano, o blog teve 35.738 acessos, onde o Firefox foi o browser mais utilizado, responsável por 14.705 (41,75%) acessos, seguido de longe pelo Internet Explorer (10.542 acessos, ou 29,5%) e Google Chrome (8.679 acessos, ou 24,29%). O Opera vem em 4º e Safari 5º.

Abaixo o gráfico obtido pelo Google Analytics com a lista completa dos browsers e quantidade de acessos de cada:

Gráfico extraído entre os dias 07/06/2010 e 07/06/2011 (clique para ampliar)

Pelo andar da carruagem, não demorará muito para o Internet Explorer perder a segunda posição para o Google Chrome.


Como recuperar e escrever campos CLOB

O Character Large Object (ou CLOB), como o próprio nome já diz, é um tipo de campo muito comum em Bancos de Dados usado para armazenar textos com uma quantidade enorme de caracteres.

No MySQL, por exemplo, o tipo CLOB está descrito como MEMO, mas a função é a mesma.

Estes dias precisei recuperar um valor de um campo CLOB que era retornado por um SELECT, como nunca tinha utilizado este campo no Java, resolvi escrever este pequeno tutorial como um memorando e, também, ajudar a quem precisar.

Escrevendo valores em campo CLOB

O método do PreparedStatement utilizado para a gravação de um CLOB é o setAsciiStream, passando a posição do campo CLOB, o InputStream dos dados e o ponto final de leitura do InputStream.

ps.setAsciiStream(posicaoClob, inputStream, tamanhoDoTexto);

Exemplo funcional:

String sql = "INSERT INTO TESTE (texto) VALUES(?)";
		try{
			String txt = leArquivoTxt();
			ByteArrayInputStream bais = new ByteArrayInputStream(txt.getBytes());

			PreparedStatement ps = conexao.prepareStatement(sql);
			//Campo CLOB é a '?' que está na posição 1 do INSERT
			ps.setAsciiStream(1, bais, txt.length());

			ps.execute();

			ps.close();
		}catch (Exception e) {
			e.printStackTrace();
		}

Recuperando valor de um campo CLOB

Como executamos um SELECT, será necessário capturar o ResultSet , iterar as linhas e chamar o método para a recuperação de um CLOB é o getClob, passando a posição em que o campo se encontra na query ou, simplesmente, o nome da coluna.

rs.getClob("xml");

Exemplo funcional:

String sql = "SELECT xml FROM TESTE";
		try{
			PreparedStatement ps = conexao.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();

			while(rs.next()){
				Clob clob = rs.getClob("xml");
				BufferedReader reader = new BufferedReader(clob.getCharacterStream());
				StringBuffer strBuf = new StringBuffer();

				String linha = null;
				while((linha = reader.readLine()) != null){
					strBuf.append(linha);
//Character.LINE_SEPARATOR insere a quebra de linha
					strBuf.append((char)Character.LINE_SEPARATOR);
				}

				System.out.println("=========== CLOB ===========");
				System.out.println(strBuf.toString());
			}

			rs.close();
			ps.close();
		}catch (Exception e) {
			e.printStackTrace();
		}

É isso aí. Simples, fácil e indolor. ;)

Caso queiram, podem baixar a aplicação de exemplo aqui

Para recuperar um campo BLOB veja este tópico.


  • AdSense

  • Copyright © 1996-2010 André L. S.. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress