segunda-feira, 22 de março de 2010

Android News


Olá povo,

Estou numa correria danada esses dias (pra variar). Não bastasse as 8 horas de trabalho no C.E.S.A.R., estou tendo que (tentar) fazer o protótipo do trabalho do mestrado e ainda dando aula nos sábados o dia todo...

Cansado desse marasmo :) fui dar uma palestra sobre Android na Faculdade Joaquim Nabuco e durante a palestra me surgiu a idéia de compartihar uma coletânia de manchetes sobre o dito cujo com vocês. Com isso, vai dar para vocês conhecerem um pouquinho mais sobre esse fenômeno dos dispositivos móveis.

Crédito para Júlio Neves, aluno da primeira Turma de Android da Especializa Treinamentos. que mandou essas notícias pelo Buzz. Abraços Júlio.








4br4ç05,
nglauber

sábado, 6 de março de 2010

Microsoft's Courier 'digital journal'

Olá povo,

A moda dos Tablets parece que vai pegar mesmo. Depois do lançamento do iPad, agora é a vez da Microsoft apresentar o seu novo brinquedinho. Eu achei a idéia do Courier explêndida, será um MID (Mobile Internet Device) que além de ser "e-book-reader", também é uma agenda, um álbum de fotografias, tem câmera, browser e muito mais. Ele vem com uma caneta para o usuário escrever texto a mão livre e conta com tela multi-touch.


Nesse link vocês podem ver uma bela demonstração do que o Courier será capaz.

4br4ç05,
nglauber

Créditos da notícia para Bruno Vinícius. Valeu Ogro Gordo!

quinta-feira, 25 de fevereiro de 2010

Android, Especializa e eu na mídia

Olá povo,

O curso de Android da Especializa Treinamentos ministrado por mim está preparando profissionais para atuar no crescente mercado de desenvolvimento de aplicações móveis.

Nosso curso foi assunto de matéria divulgada na IDGNow e agora também fomos notícia no caderno de informática da Folha de Pernambuco.

E você, o que está esperando? Venha aprender essa nova e revolucionária plataforma para dispositivos móveis.

4br4ç05,
nglauber

domingo, 21 de fevereiro de 2010

ListActivity e emptyView

Olá povo,

Queria estar atualizando o blog com mais frequência, porém o mestrado está me tomando muito tempo. Além disso, nesses dois primeiros meses estava escrevendo dois artigos para a Revista Web Mobile que deve ser publicado nas próximas edições. Não bastasse o trabalho de 8 horas diárias, também estava dando aulas de Android na Especializa Treinamentos três vezes por semana. Ou seja, uma correria danada :)

Agora estou com uma turma aos sábados, e na última aula surgiu a dúvida de como colocar um texto caso uma ListActivity não tiver dados a serem exibidos. Procurei na própria aula e não achei. Então vou registrar aqui.

Basicamente o que precisamos fazer é criar um arquivo de layout que contenha um LinearLayout, e dentro dele uma ListView com o id @android:id/list para exibir os dados e qualquer subclasse de View com o id @android:id/empty para informar ao usuário que a lista está vazia. Veja a listagem abaixo:


<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/list" />

<TextView
android:id="@android:id/empty"
android:text="Lista vazia"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>


Pronto! Depois, basta chamar o método setContentView na sua ListActivity.


public class ExemploListActivity extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.lista_personalizada);
}
// Mais código aqui...
}


4br4ç05,
nglauber

segunda-feira, 11 de janeiro de 2010

Android: Passando objetos em Intents

Olá povo,

Algumas pessoas me perguntaram como passar objetos entre telas no Android ao invés de passar apenas primitivos. Um exemplo típico é uma tela que lista algum tipo de informação e quando algum item dessa lista é selecionado, o objeto da classe referente aquela informação deveria ser passado para uma tela de detalhes do mesmo.

Para resolver isso, eu passava para a tela de detalhamento apenas um identificador do objeto (um código, por exemplo) e lá eu fazia uma consulta ao controlador que me retornava o objeto desejado.

Essa é uma abordagem boa, e até aconselho. Mas quem quiser mesmo passar obejtos entre telas podemos utilizar a interface android.os.Parcelable. A classe que implementar essa interface pode ser adicionada a uma Intent.

Vamos fazer um pequeno exemplo aqui criando uma classe Cliente com dois atributos (código e nome) e ela implementará a interface Parcelable.
import android.os.Parcel;
import android.os.Parcelable;

public class Cliente implements Parcelable {
 private int codigo;
 private String nome;

 public Cliente(int codigo, String nome) {
   this.codigo = codigo;
   this.nome = nome;
 }

 private Cliente(Parcel p){
   codigo = from.readInt();
   nome = from.readString();
 }

 public static final Parcelable.Creator<Cliente>
   CREATOR = new Parcelable.Creator<Cliente>() {

   public Cliente createFromParcel(Parcel in) {
     return new Cliente(in);
   }

   public Cliente[] newArray(int size) {
     return new Cliente[size];
   }
 };

 public int getCodigo() {
   return codigo;
 }

 public void setCodigo(int codigo) {
   this.codigo = codigo;
 }

 public String getNome() {
   return nome;
 }

 public void setNome(String nome) {
   this.nome = nome;
 }

 @Override
 public int describeContents() {
   return 0;
 }

 @Override
 public void writeToParcel(Parcel dest, int flags) {
   dest.writeInt(codigo);
   dest.writeString(nome); 
 }
}
Vejam que a classe Cliente implementa a interface Parcelable que tem dois métodos que devem ser implementados: writeToParcel e describeContents. O primeiro método serve para serializar as informações da classe, já o segundo é um inteiro qualquer que identifica a classe :)

A segunda coisa importante a destacar é o atributo estático CREATOR que é do tipo Parcelable.Creator. Segundo a própria documentação, todas as classes que desejem implementar Parcelable devem ter essa variável. É ela que cria os objetos a partir de um Parcel, classe que a grosso modo, junta as funcionalidades de um DataInputStream e DataOutputStream para serializar e deserializar objetos. Veja que ela chama o construtor privado de Cliente que recebe um Parcel que nos permite ler dados dele e passando para os atributos.
Agora vamos ver como passar nosso objeto via Intent:
Cliente cliente = new Cliente(1, "Glauber");

Intent it = new Intent(this, Teste2Activity.class);
   
it.putExtra("cliente", cliente);
   
startActivity(it);
E para ler o conteúdo é tão simples quando enviar:
Cliente c = 
  getIntent().getExtras().getParcelable("cliente");

EDITADO em 08/08/2012:
Achei uma maneira muuuito mais simples (porém mais lenta em tempo de execução) de fazer a passagem de objetos entre Activities. Basta fazer com que eles implementem a interface java.io.Serializable.
public class Pessoa implements Serializable {
  // Seus atributos, gets e sets ...
}
Dessa forma você pode passar os objetos da classe Pessoa para outras activities via Intent normalmente, inclusive adicionando-os a listas (a classe ArrayList é serializada).
 
ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();
pessoas.add(new Pessoa(1, "Glauber"));
pessoas.add(new Pessoa(2, "Nelson"));
        
Intent it = new Intent(this, Tela2Activity.class);
// passando a lista
it.putExtra("pessoas", pessoas); 
// passando um objeto
it.putExtra("pessoa", pessoas.get(0)); 
startActivity(it);


E pra recuperar:
Pessoa pessoa = 
  (Pessoa) getIntent().getSerializableExtra("pessoa");

ArrayList<Pessoa> pessoas = (ArrayList<Pessoa>) 
  getIntent().getSerializableExtra("pessoas");
  
System.out.println("Pessoa: "+ pessoa.getNome());
System.out.println(
  "Pessoas: "+ pessoas.get(0).getNome());

4br4ç05,
nglauber

sábado, 2 de janeiro de 2010

Mac OS X Leopard no PC

Olá povo,

Desde 2005 quando Apple começou a utilizar a plataforma Intel em seus computadores o projeto OSX86 criou o Hackintosh, que consiste na alteração do sistema operacional da Apple para executar em PCs comuns. Isso se deve ao fato de que o hardware, diferentemente do que era no passado é bem similar ao do PC convencional.

Hoje, o que impede que um PC execute o Mac OS X vendido pela Apple é o fato de o sistema operacional ser homologado para um hardware específico, ou seja, ele não tem os drivers do hardware de vários modelos/fabricantes que são utilizados em um PC comum. Já o Hackintosh disponibiliza os drivers e o kernel que permitem essa execução em um PC comum. Assim como o Linux, o Hackintosh também tem distribuições, as mais conhecidas são a iATKOS, iDeneb, Kalyway e Leo4All.

Nesse post, vou mostrar como eu instalei o hackintosh no meu notebook, e falar dos problemas que tive e tenho. Quero deixar claro aos que quiserem se aventurar que você deve conhecer bem a marca e o modelo de cada componente do seu hardware e que o uma distribuição pode ser melhor para um tipo de hardware do que para outro.

Legalidade

Segundo o site Olhar Digital a utilização do Hackintosh não é ilegal. Desde que você tenha comprado uma versão do Mac OS X Original que custa R$79,00.
No entanto quero reiterar que a instalação que fiz foi apenas para fins educacionais e que não me resposabilizo por nada que der errado no seu PC :)

O computador


Requisitos

O primeiro e mais importante deles: PACIÊNCIA. Eu tive que tentar várias vezes até conseguir uma instalação bem sucedida. Então, vá com calma gafanhoto :)

É aconselhável estar com outro computador por perto para tirar as dúvidas e resolver os problemas que você venha a ter.

Utilizei a versão iATKOS 7. Infelizmente não tenho o link, mas baixei via torrent aproximadamente 3.6GB

Após baixar a imagem, grave-a no em um DVD (eu utilizei o Nero) em uma velocidade baixa (2 ou 4x) para evitar problemas de leitura.

O processo

Coloque o DVD no driver.

Configure na BIOS do seu computador para dar o boot pelo driver de DVD.

Quando o computador iniciar, ele pedirá pra pressionar qualquer tecla para iniciar o DVD ou pressionar F8 para mais detalhes. Eu aconselho pressionar F8 e digitar -v e pressionar ENTER isso fará com que o DVD inicie no modo de debug. Assim, caso algum erro ocorra... pesquise na internet como resolver :)

Se tudo correr bem, a interface gráfica será carregada com uma tela cinza com a logo da Apple. Essa tela demora em torno de 3 minutos para desaparecer, depois dela aparecerá uma tela pedindo para clicar no botão pra continuar.

Quando carregar a tela de boas vindas, você precisará criar a partição onde ficará o sistema operacional. Para isso, vá até o menu Utilities | Disc Utilities, lá selecione o seu HD e crie uma partiação Mac OS Extended. Depois de criar a partição, feche o utilitário.

Clique em Continue, abrirá um tela de licença, clique em Agree. Agora o instalador perguntará onde você deseja instalar o OSX, selecione a partição que criamos no passo anterior e clique em continuar.

A tela Install Summary é o passo mais importante. Clique em Customize, nessa tela selecionaremos o que será instalado. Lembrando que isso pode variar de máquina pra máqunia. Abaixo listo o que EU, selecionei (não desmarquei nenhuma opção padrão):
- Bootloader > Chamaleon v2
- X86 Patches > Kernel > 9.7.0 Kernel Vodoo
- Drivers > System > SATA/IDE > VIA SATA/IDE
- Languages > Português > Português
Clique em Done. Voltará para a tela de Install Summary. Clique em Install.

O processo de instalação inciará e demorará cerca de 45 minutos. Quando a barra de progresso chegar ao fim, será exibida uma tela de sucesso e solicitará que o computador seja reinicializado. Quando o computador reiniciar, retire rapidamente o DVD do driver para evitar o boot pelo DVD novamente.

Se tudo correr bem, aparecerá a tela do Chamaleon e o boot do Mac OS iniciará automaticamente. Isso demorará cerca de 2 minutos.

Quando a interface gráfica inciar, para concluir a instalação serão feitas algumas configurações como: localização regional, teclado, se você deseja enviar informações sobre seu Mac (não faça isso :) , seu tipo de conexão com a internet (configure isso depois), informações pessoais (nome, sobrenome, etc), onde você utiliza o Mac, criará a conta (usuário e senha) para acessar o computador, timezone, e por último data e hora.

Se você chegou até aqui, a instalação foi concluída com sucesso e você é um sortudo :)

Abaixo o screenshot do meu Mac :)





Abaixo mais algumas informações...

Problemas Resolvidos

Windows XP e o OS X no mesmo HD em partições diferentes (óbvio): consegui colocando a partição do OS X como a primeira do disco, de outra forma a instalação dava problema ao reiniciar o computador após a instalação.

Dual Boot com o Windows XP: foi simples, bastou instalar o Windows XP em outra partição, depois de ter instalado o Mac OS. Com isso o bootloader do Windows sobrepos o Chamaleon (gerenciador de boot utilizado no OSX86). Depois foi só seguir esse tutorial.

Drivers ausentes: Wireless e Bateria. Não consegui utilizar o driver disponibilizado no site da Realtek. Ao invés disso, baixei um torrent de um CD-PACK com vários drivers, entre eles o driver da minha placa, que funcionou perfeitamente.

A placa de vídeo: a que o OS X detectou suporta apenas a resolução 1024x768. No entanto, seguindo esses links (link1 e link2), dá pra modificar.

Telado ABNT: o teclado do note é o padrão brasileiro, daí eu baixei o Brasileiro.bundle na internet (não lembro de onde) e funcionou. Entretanto a interrogação, que no meu teclado fica entre o Alt e o Ctrl da direita, não funcionou. Daí eu baixei o Spark e criei um atalho para a interrogação.

Problema NÃO Resolvido

Não tive tempo de procurar o driver da placa de rede Wired. É uma SiS, mas não lembro o modelo ao certo.

Programas legais

Para que a mudança pro mundo Mac não seja tão dolorosa, instalei no OSX alguns programas que utilizo com frequência no Windows:

- Eclipse Galileo
- Real VNC
- Microsoft Office
- MSN Messenger
- Android SDK

E por último...

Espero que tenham gostado e que esse post seja últil pra alguém. E se alguém resolver algum dos problemas que citei acima ou tiver alguma sugestão de melhoria mail-me.

4br4ç05,
nglauber

terça-feira, 1 de dezembro de 2009

Acrobat Reader "reads" pra você

Olá povo,

O formato de documentos PDF já está mais do que consolidado no mercado. Artigos, apresentações, e-books, e muitos outros tipos de documentos estão na internet disponibilizados nesse formato.

Para ler esse tipo de documento precisamos de um programinha para interpretá-lo. O mais conhecido deles é o Adobe Acrobat Reader (apesar de haver outros como o Foxit). E ao ler um e-book na minha casa descobri uma funcionalidade desse programinha que eu acho que poucas pessoas conhecem: Ler em voz alta.

Isso mesmo. Essa funcionalidade faz com que o Reader leia o documento pra você :) Para isso, vá ao menu Visualizar / Ler em voz alta. Pronto! Agora só aumentar o som e acompanhar a leitura. Se você achar que ele está lendo muito rápido, vá no menu Editar / Preferências e depois escolha a opção Leitura. Lá você pode diminuir o número de palavras por minuto para tornar a leitura mais lenta.

Fiz esse teste no Windows XP e com a versão 7.0 do Acrobat Reader. Infelizmente essa funcionalidade é apenas para documentos em inglês, em português ele ainda ficou devendo.

4br4ç05,
nglauber