set 16

Boalista para Android

Mais uma vez vou promover um aplicativo, mas esse precisa ser promovido, pois se baseia em informações muito voláteis e colaborativas.

É o boalista, eu ainda não o utilizei muito, mas pretendo. Ele é um aplicativo de compras, onde você pode criar listas de compras, e ele  calcula o total antes de chegar no caixa. Mas isso não é o principal dele, a melhor funcionalidade dele a meu ver, é a pesquisa de preços,  onde você pode ver as ofertas , com opções também de filtrar  por rede de supermercado, ou por categorias, assim você economiza na hora de fazer suas compras. Ele também tem a funcionalidade de barcode scanner, que, caso possua o produto cadastrado,  mostra onde está mais barato e o preço do produto. (Use isso antes de ir no mercado, uma vez que ficar saltando de um para outro é meio inviável).

 

Mas, porém, contudo, no entanto, nem tudo são flores, como os produtos são cadastrados pelos próprios usuários, não necessariamente refletem a realidade do dia, nem tem todos os produtos possíveis e imagináveis. Portanto quanto mais gente usar, melhor para todos!

Vai lá no market, baixe e experimente, não custa nada.

jul 25

Criando WebServices RESTful com Jersey, Maven e Tomcat no eclipse

Longo título, mas é isso que vou passar aqui nesse post. Se você procurar no google vai achar o passo-a-passo de introdução ao Jersey com maven. Porém em todos os tutoriais falta um detalhe que só consegui resolver depois de algumas muitas consultas ao google e tentativas frustradas.

Antes de tudo você deve instalar no seu eclipse o m2eclipse , é só copiar o update site e no seu eclipse ir em install new software e adicionar o update site.

Primeiramente a documentação do Jersey é muito boa, lá você tem tudo o que precisa para aprender a usá-lo. Portanto não vou falar detalhe a detalhe de como começar. Porém a introdução não mostra como integrar com Tomcat ( se você for na página de dependências ele mostra um link para como integrar com Servlets) .

Mas um tutorial bom e de fácil entendimento você encontra no MKYONG . Mas, porém contudo no entanto pule o passo 2, ao invés disso, crie um Dynamic Web Project no seu eclipse, e escolha como runtime environment o tomcat 6. Em seguida, clique com o botão direito no seu projeto e lá no finalzinho vai ter a opção Configure, escolha Convert to Maven Project . Após feito isso seu build path será todo desconfigurado. Você deverá então acessá-lo e reconfigurar a JRE, e apontar a pasta de códigos fontes na aba Source.

O build path agora está OK, porém ainda falta um passo, apontar para onde será feito o deploy dos fontes e das bibliotecas do maven.

Vá nas Propriedades do seu projeto e escolha Deployment Assembly, selecione add -> folder e escolha a pasta de códigos fonte , depois selecione add -> Java Build Path Entries e escolha Maven Dependencies . A pasta de códigos fontes deve ficar com o deploy path como WEB-INF/classes e a Maven Dependencies com o deploy path WEB-INF/lib como na figura abaixo.

 

Feito isso agora é só adicionar sua aplicação ao Tomcat e dar start.

jul 05

Upload de arquivos com primefaces

Quem usa JSF sabe que ele não tem tag nativa para upload de arquivos, para fazer funcionar , é preciso usar a tag html input e utilizar uma biblioteca da apache a commons-fileupload.

Porém algumas suites de componentes como richfaces , trinidad e tobago , e primefaces possuem essas tags. Nesse post vou focar no primefaces, pois considero a melhor dentre as apresentadas.

Antes é necessário que você baixe as seguintes bibliotecas e as adicione no classpath do seu projeto:

Em seguida você deve configurar seu web.xml caso você esteja usando Servlet 2.5, no caso do Servlet 3 eu não testei, mas acredito que não precise (quem usar, teste e comente por favor), adicionando o seguinte código abaixo:

        
	
        <filter>
                <filter-name>PrimeFaces FileUpload Filter</filter-name>
                <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
        </filter>
        <filter-mapping>
                <filter-name>PrimeFaces FileUpload Filter</filter-name>
                <servlet-name>Faces Servlet</servlet-name>
        </filter-mapping>

No sua página você deve usar a tag  p:fileUpload , ela possui vários atributos que podem ser setados, mas os principais são :

  • mode – que pode ser simple ou advanced, onde o simple ele renderiza um input file html comum; e o advanced (que é o default) ele renderiza apenas o botão de pesquisar e ao selecionar o arquivo ele já o valida, além de oferecer as opções de upload ou descartar.
  • allowTypes – lista-se as extensões que deverão ser aceitas
  • sizeLimit – tamanho máximo do arquivo
  • fileUploadListener – método do managed bean que quando for escolhido o mode advanced , trata o evento de upload( explicarei em seguida )
  • value – propriedade do tipo UploadedFile do managed bean que será feito o upload do arquivo, utiliza-se no caso do mode = simple

Exemplo:

    
<p:fileUpload fileUploadListener="#{mb.upload}"
     allowTypes="png,gif,jpg,jpeg" sizeLimit="10000"
     value="#{mb.arquivo}" mode="advanced"  />

Por fim deve-se no managed bean criar o método para o fileUploadListener :

     
private UploadedFile arquivo;
public void upload(FileUploadEvent event) {
    arquivo = event.getFile();
   /* implementação*//
}

E pronto. No labs do primefaces tem alguns exemplos de utilização, e usando você também descobre outras funcionalidades.

jun 14

Runtastic

Pessoal, venho neste post apresentar uma ferramenta para quem gosta de se exercitar e também tem um smartphone com android, um blackberry ou iphone!

É o Runtastic, que é um app para dispositivos móveis, além de possuir o site em estilo de rede social, que permite que você rastreie seus exercícios, seja corridas a céu aberto, caminhadas, etc. Ele utiliza o GPS para calcular distância percorrida, velocidade, é integrado ao google maps, calcula as calorias gastas, mostra o histórico das suas atividades, pode ser integrado ao monitor cardíaco da polar que possui bluetooth, dentre outras funcionalidades.

Se você já utiliza algum desses softwares de treino, deve estar se perguntando: ” Por que devo parar de usar o que já uso e usar esse tal de runtastic, se pelo que você disse ele faz as mesmas coisas?”.

Pra mim o grande diferencial do runtastic é a possibilidade de adicionar treinos manualmente. O que isso proporciona? Para você que corre na esteira da academia, faz spinning, ou qualquer outra atividade que o GPS não adiante,  ele é perfeito, pois permite que você adicione seus treinos indoor!

Além disso no site, você consegue visualizar estatísticas sobre suas atividades, como calorias por sessão , distância percorrida por semana, dentre outros. Você também pode convidar seus amigos a participar e assim  pode comparar suas estatísticas com a de seus amigos, é bem interessante, dá um bom ânimo para fazer atividades físicas regularmente( algo essencial para quem trabalha o dia inteiro sentado numa cadeira em frente a um computador que nem eu).

É isso, um overview sobre o runtastic se quiserem mais info entrem no site deles. Ele possui uma versão gratuita e uma paga, esta última com algumas funcionalidades extras! Fica então a dica!

jun 06

Substituindo window.confirm() por jquery dialog

Para quem não conhece, jQuery é uma biblioteca javascript que simplifica e muito a programação em tal linguagem, com componentes visuais já prontos e fáceis de usar, além de interação ajax fácil e raidamente implementáveis. Tanto é bom que no framework primefaces, que pra mim é o melhor framework para jsf2 no momento, o utiliza.

Apresentações a parte, vou falar nesse post sobre como substituir as janelinhas de confirm nativas do javascript por outras mais agradáveis visualmente utilizando o jQuery junto com a jQuery UI.

Primeiramente você deve baixar os arquivos .js necessários e também ao baixar o jQuery UI escolher o tema de sua preferência para baixar o css necessário. Nesses links abaixo você poderá baixar aa útimaa versões  do jQuery e jQuery UI, podendo baixar a versão completa com comentários e identada, ideal para desenvolvimento e a minificada, ideal para ambientes de produção.

Após feitos os downloads você deverá adicionar ao seu projeto esses 3 arquivos no mínimo para funcionar (As versões aqui apresentadas são as últimas minificadas até esse post):

  • jquery-1.6.1.min.js
  • jquery-ui-1.8.13.custom.min.js
  • jquery-ui-1.8.13.custom.css

Com os arquivos baixados será necessário importá-los em suas página:

<link rel="stylesheet" href="css/jquery-ui-1.8.13.custom.css" type="text/css" media="all" />
<script src="js/jquery-ui-1.8.13.custom.min.js" type="text/javascript"></script>
<script src="js/jquery-1.5.1.min.js" type="text/javascript"></script>

Agora vamos ao que indica o título do post,  para que não sabe  confirm() é uma função javascript que exibe uma tela de confirmação, nossa! Como é óbvio,  com as opções de OK e Cancelar, retornando true ou false segundo o que foi selecionado. É bem simples, bastando usar dentro de um bloco de script o seguinte código:

var resposta = confirma("Tem certeza que deseja fazer isso?");


Porém essas janelinha mostrada pelo navegador não possui um layout muito bonito digamos assim, que coisa afeminada, mas cliente é cliente, e normalmente como diz o ditado peixe morre pela boca, levando para o lado da computação:  usuário  gosta mais do visual do sistema do que de suas funcionalidades.
Com isso utilizando jQuery, você consegue agregar um valor muito grande ao seu produto final, pois as interfaces são muito ricas e, o melhor de tudo, muito simples de se utilizar (para nós programadores).  Para substituir o confirm você pode utilizar o componente dialog do jQuery UI, mais precisamente um do tipo modal confirmation, não deixa de ser um dialog, mas com os devidos parâmetros setados ele fica com a cara de um confirm.Abaixo segue o código para tal:

function confirmJquery(message, titulo, f) {

	$("#dialog-confirm").dialog( {
		modal : true,
		resizable : false,
		width : 450,
		title : titulo,
		buttons : {
			"Sim" : function() {

				
				f(true);
				$(this).dialog("close");

			},
			"Nu00E3o" : function() {

				
				f(false);
				$(this).dialog("close");
			}

		}
	});
	$("#dialog-confirm").html("<p><span class='ui-icon ui-icon-help' style='float:left; margin:0 7px 50px 0;'></span>"+ message+"</p>");

}

Explicando o código, essa função deve ser chamada passando como parâmetro a mensagem a ser exibida, o título da caixa de diálogo e uma função javascript que receba como parametro uma variável booleana. E agora você se pergunta, mas por que isso? Seguinte, como o confirm() pára o processamento, o código que vem após ele não é executado enquanto o usuário não selecionar uma opção. Porém ao se utilizar o dialog do jQuery, ele vai criar o modal panel e continuar executando, portanto caso você tenha algo que dependa da resposta dada pelo usuário, quando o usuário clicar na resposta já terá passado pelo código, daí a necessidade de se continuar a lógica em outra função.

Por fim é necessário adicionar uma div no corpo da página com o id, no caso do meu exemplo , dialog-confirm:

<div id="dialog-confirm" >
</div>

e pronto, agora é só chamar a função confirmJquery(“mensagem”,”Titulo”,f), e você terá o funcionamento do dialog como um confirm.

abr 25

Adicionando itens a uma listagem de itens na tela no Android

Vou exemplificar nesse post como adicionar itens a uma listagem em um aplicativo android.

Para começar definamos nosso XML de layout: Você pode tanto utilizar o main.xml, ou criar o seu, crie sempre na pasta: nomeDoProjeto/res/layout e sempre crie-o com letras minúsculas senão a classe R não será gerada e seu programa não funcionará com o layout criado.

&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"&gt;
&lt;ScrollView android:layout_height="200dip" android:id="@+id/scrollView1"
android:layout_width="fill_parent"&gt;
&lt;LinearLayout android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/listas"&gt;
&lt;/LinearLayout&gt;
&lt;/ScrollView&gt;
&lt;LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"  android:id="@+id/addLista" android:orientation="horizontal"&gt;

&lt;TextView android:layout_height="wrap_content" android:text="@string/nome_lista" android:id="@+id/textView1" android:layout_width="wrap_content"&gt;&lt;/TextView&gt;
&lt;EditText android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="2" android:id="@+id/nome_lista"&gt;&lt;/EditText&gt;
&lt;Button android:layout_height="wrap_content" android:text="@string/adicionar" android:layout_width="wrap_content" android:id="@+id/adicionar_lista"&gt;&lt;/Button&gt;

&lt;/LinearLayout&gt;

&lt;/LinearLayout&gt;

Neste arquivo de XML eu defini um ScrollView para a listagem dos itens da lista em um pedaço da tela que possua rolagem e abaixo dele um LinearLayout que contem as views necessárias para inserir um novo item .

Agora vamos ao código Java, onde teremos uma Activity principal que utilizará o layout definido acima e fará o que desejamos.

package br.lista;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Lista extends Activity    {
	/** Called when the activity is first created. */

	private Context ctx = this;
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layoutlistas);

        //adição de novos itens
        Button adicionar = (Button) findViewById(R.id.adicionar_lista);
        adicionar.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				LinearLayout layout = (LinearLayout) findViewById(R.id.listas);
				EditText eTNomeLista = (EditText) findViewById(R.id.nome_lista);
				if(eTNomeLista.getText() != null &amp;&amp; !eTNomeLista.getText().toString().equals("")) {
					TextView text = new TextView(ctx);
					text.setText(eTNomeLista.getText().toString());
					eTNomeLista.setText("");
					layout.addView(text);
					layout.requestLayout();
				}

			}
		});

    }

}

O código acima é simples de se entender, basicamente ele faz com que ao clicar no botão de adicionar novo item , o valor do campo editText (se houver algo escrito nele) seja atribuido a um novo TextView e este seja adicionado ao layout que está contido dentro do ScrollView, por fim chamo o método  requestLayout(), que é comum a todos os objetos que herdam da classe View,  para que seja refeito o layout da tela.

É isso, fica aí um exemplo simples de adicionar itens a uma lista na tela do android!

abr 20

Sorteios web

Todos vão dizer que já existe por aí, mas o único que eu conheço mesmo é o sorteie.me que faz sorteios no twitter.

Este aplicativo, que pode ser acessado clicando aqui, eu desenvolvi para sanar um problema da minha digníssima namorada, que possui um blog de maquiagens: o Beauty Blog, e tinha muita dificuldades de realizar sorteios no blog, pois os sorteios eram contabilizados a partir dos comentários dos posts, para então colocar em um aplicativo desktop que fazia o sorteio.

Com o sorteios web você pode gerenciar seus sorteios, criar um grupo, pois no caso dela são 2 pessoas que participam da autoria dos posts do blog, e deve ser o caso de muitos outros. E ao criar seus sorteios é disponibilizado um link para acoplar em seu blog ou site utilizando-se de iframes,  para wordpress há um plugin, o embed-iframe, ou então pode apenas disponibilizar o link para acessar através do site do Sorteios Web mesmo. Os sorteios são automáticos, no dia e hora de término que o criador estipular, e ele só vale a partir da data de início estipulada também.

Esse foi um overview, ainda está em beta, portanto bugs podem ocorrer, qualquer coisa é só entrar em contato com sorteiosweb@gmail.com .

É de graça, e pretendo manter assim pra sempre, pois sou a favor da política do google, de dispobilizar aplicações gratuitas ao público em geral!

mar 22

Logs no console usando android

Pra quem usa java está acostumdo ao famost System.out.println(), porém ao se programar para android, simplesmente esse comando não faz muita coisa, já que a máquina virtual do android  redireciona essa saída para a pasta dev/null . Então como logar sua aplicação? Simples utilizando a classe LOG do próprio android, fazendo com que todo log seja exibido no LogCat, que é a ferramenta do android para visualizar o log, para ver o LogCat basta selecionar no eclipse Window> ShowView>Other>Android>LogCat , no motodev normalmente essa view já é mostrada por default.

Para logar as informações o ideal é você criar sua própria categoria, para poder depois filtrar por tal e recuperar só o que lhe interessa. Abaixo segue um trecho de código de exemplo com os possível logs do android:

<blockquote>
public class Atividade extends Activity {

    private static final String CATEGORIA = "minhaCategoria";
    public void onCreate(Bundle savedInstance) {

        super.onCreate(savedInstance);
        setContentView(R.layout.main);

       Log.v(CATEGORIA, "verbose");
       Log.d(CATEGORIA,"debug");
       Log.i(CATEGORIA, "info");
       Log.w(CATEGORIA,"warning");
       Log.e(Categoria,"erro");
    }

}</blockquote>

Cada tipo de log é representado de uma cor diferente, e no próprio LogCat você também pode filtrar por tipo.

mar 22

Habilitar o java no firefox em linux

Para você que usa linux, no meu caso é ubuntu, e utiliza firefox, percebeu já que ao baixar uma nova versão do site da mozilla os applets java param de funcionar. Eu acabei de baixar o firefox 4, muito bom, visual mais limpo e a primeira impressão é que está mais rápida a navegação, e mais uma vez ( pois não anotei como fiz da última) tive que perder alguns minutinhos configurando o plugin do java,  já que o que acho na internet logo de cara é criar um link do plugin libjavaplugin_oji.so que se encontra em /jdkXXX/jre/plugin/i386/ns7 , porém achei em outro lugar que não é mais essa a biblioteca necessária e sim a libnpjp2.so que fica em /jdkXXX/jre/lib/i386.

Para fazer funcionar crie um diretório com o nome plugins na pasta onde possui o arquivo de execução do firefox e então crie um link da biblioteca libnpjp2.so e o coloque nesta pasta. Para criar tal link você tem duas opções (Eu fiz no ubuntu, portanto se em alguma outra distribuição for diferente, desculpe-me):

1) Visualmente, selecionando com o botão direito do mouse a lib e escolhendo a opção criar link, em seguida recortar e colá-lo na pasta plugins do firefox que você criou.

2) Via terminal com o comando ln -s [endereço fonte]/libnpjp2.so [endereço destino]    . Onde o endereço fonte é o citado anteriormente onde se encontra a biblioteca,  e o destino é a pasta plugins criada.

mar 16

Plugin para visualizar wordpress em smartphones

Para o pessoal que tem blogs e deseja ampliar seu público, nada melhor do que mostrar de uma maneira melhor o conteúdo para os usuários de smartphones, pois acessar um blog pelo navegador de tal não fica tão legal.

Para isso tem o WP touch, que é um plugin para que seu blog  fique com cara de aplicativo para Iphone, ficando mais rápida a navegação em dispositivos móveis e mais agradável também.

Fica aí a dica!