CocoaPods

março 12th, 2016

O CocoaPods é um gerenciador de dependências para Swift e Objective-C, assim como o Maven, Ivy e Gradle são no mundo Java. O CocoaPods é feito em Ruby e seu uso é bem simple, para instalá-lo basta rodar o comando no prompt:

sudo gem install cocoapods

Após instalado basta criar o arquivo Podefile na raiz do seu projeto iOS ou Mac com as dependências do projeto e rodar o comando via prompt e baixar e copiar as dependências para dentro do projeto:

pod install

Segue abaixo um exemplo de Podfile:

pod 'SBJson', '~> 4.0.1'
pod 'InstagramKit', '~> 3.7'

No site do CocoaPods você pode pesquisar várias bibliotecas e frameworks para Swift e Objective-C: https://cocoapods.org

Nesse tópico veremos como criar um sistema de login em nossa aplicação Rails usando a gem Devise.

Instalando o Devise

O 1º passo devemos adicionar a seguinte linha em nosso arquivo Gemfile do nosso projeto:

gem 'devise'

Após isso devemos instalar a gem executando o comando gem install.

Execute o comando rails generate devise:install, para instalar o todas as configurações disponíveis do Devise.

Gerando o model

Agora geraremos o nosso model e logo após aplicar as mudanças no nosso banco:

rails generate devise User
rake db:migrate

Verificando se há usuário logado

Precisamos verificar se o usuário está logado, para criaremos o arquivo _user_is_logged.html.erb, no diretório views/layouts com seguinte código:

<% if user_signed_in? %>
  <p>Welcome <%= current_user.email %></p>
  <%= link_to 'Logged In [click to logout]', destroy_user_session_path, :method => :delete %>
<% else %>
  <p>You are not signed in.</p>
  <%= link_to 'Login', new_user_session_path %>
<% end %>

Agora chamaremos esse arquivo no nosso arquivo de layout views/layout/application.html.erb.

<%= render 'layouts/user_is_logged' %>

Pronto, agora é só executar a aplicação!

Biblioteca Picasso

maio 12th, 2015

Nesse post irei falar sobre a biblioteca Picasso, que se trata de uma biblioteca open-source para trabalhar com imagens em projetos Android. Ela faz todo o trabalho de carregamento e cache de fotos que serão usadas nas telas de sua app.

Se você usa gerenciador de dependências no seu projeto, segue como configurar a lib como dependência do projeto:

<dependency>
  <groupId>com.squareup.picasso</groupId>
  <artifactId>picasso</artifactId>
  <version>2.5.2</version>
</dependency>
compile 'com.squareup.picasso:picasso:2.5.2'

Mas se você não usa nenhum gerenciador de dependências, não tem problema você também pode baixar o jar pelo site da lib que está no final desse post.


É bastante simples de se trabalhar com essa biblioteca, como veremos nos exemplos a seguir:
Nesse 1º exemplo é de uma imagem que é carregada a partir de uma URL, onde o método width() recebe o contexto(a Activity ou Fragment) onde a imagem será carregada, o método load() recebe a URL da imagem e o método into() que recebe o componente que irá exibir a imagem que nesse exemplo será um ImageView.

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);



Exemplo é o mesmo que vimos no código acima, porém estamos configurando o tamanho que a imagem terá através do método resize() e centralizando através do método centerCrop().

Picasso.with(context).load(url).resize(50, 50).centerCrop().into(imageView)



Nos exemplos abaixo veremos como a carregar fotos que estão dentro do app ou salvas no aparelho:

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.with(context).load(new File(...)).into(imageView3);

Links:
Site do Picasso

Nesse post irei demostrar como se cria componentes com bordas arredondadas no Android, creio que vários desenvolvedores Android já tiveram vontade ou menos curiosidade de como fazer bordas arredondadas.

Vamos ao código, primeiro precisamos criar o arquivo de layout que nosso exemplo chamará exemplo_layout.xml que ficará na pasta /res/layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="Olá mundo!"/>
 
    <Button
        android:id="@+id/btOk"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="OK"/>
</LinearLayout>

Agora criaremos o arquivo responsável por adicionar o efeito arredondado nos componentes que queremos, chamaremos ele de screen_border.xml, atenção ele ficará dentro da pasta /res/drawable:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:shape="rectangle">
 
    <solid android:color="@color/peach" />
 
    <corners
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp"
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" />
 
</shape>

Nesse arquivo vemos algumas tags que não estamos acostumados a ver nos arquivos XML do Android que são as tags: shape, solid e corners. Mais para server cada uma delas? Vamos ver a explicação abaixo:

- shape: Essa tag é usada para definir a forma que se quer aplicar no componente, no nosso exemplo definimos uma forma bem simples que foi rectangle.

- solid: Essa tag é usada para definir as propriedades do componente como a cor de fundo, cor da fonte, etc.

- corners: Essa tag é tag que define a propriedades do cantos do componente, é essa tag que irá de fato aplicar as bordas arredondadas.

Para aplicarmos de fato o efeito arredondado nos componentes que queremos basta adicionar o atributo background no componente que queremos, como mostra o código a a seguir.

<Button
    android:id="@+id/btOk"
    android:background="@drawable/screen_border"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="OK"/>

Framework Play no MacOS

maio 29th, 2014

play
A configuração do Framework Play no MacOS é um pouco diferente do que Linux que é só descompactar o arquivo zip que baixado do site do Play em um diretório e configurá-lo no PATH. Primeiro tem que descompactar o arquivo no diretório do Applications que fica dentro do diretório home do usuário e depois disso adicionar a linha /Applications/play-x.x.x no arquivo /etc/paths, o segundo passo é executar o comando brew install play no prompt e esperar o processo instalação.

Biblioteca GSon

maio 23rd, 2014

Todo programador hoje em dia já trabalhou ou pelo menos já ouviu falar no formato Json, principalmente depois que houve a febre do desenvolvimento mobile. Hoje há diversas bibliotecas para se fazer o parser de uma reposta em Json para um objeto, nesse tópico irei mostrar um exemplo bem simples e rápido de com o Json usando a biblioteca GSon, uma lib bem simples criada pelo Google para facilitar a vida dos desenvolvedores Java na hora de trabalhar com o formato JSon.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.ArrayList;
import java.util.List;
 
import com.exmaplegson.domain.Person;
import com.google.gson.Gson;
 
public class ExampleGson {
	public static void main(String[] args) {
		String json = parserPersonToJson();
		System.out.println(json);
 
		Person person = parserJsonToPerson(json);
		System.out.println("Hello, i am "+person.getName()+" and i have "+person.getAge()+" years.");
	}
 
	private static String parserPersonToJson() {
		List books = new ArrayList();
		books.add("Book 1");
		books.add("Book 2");
		books.add("Book 3");
 
		Person person = new Person();
		person.setAge(20);
		person.setBooks(books);
		person.setEmail("john@email.com");
		person.setId(1);
		person.setName("John");
 
		Gson gson = new Gson();
		return gson.toJson(person);
	}
 
	private static Person parserJsonToPerson(String json) {
		Gson gson = new Gson();
		return gson.fromJson(json, Person.class);
	}
}

Links:
Download do Gson: Download do Gson
Código do exemplo no meu GitHub: Código-fonte do Exemplo

Retornando JSON no PHP

maio 16th, 2014

Esse tópico será bem breve, nele mostrarei como retornar um JSON em PHP.
O PHP tem uma função a partir a versão 5.3 chamado json_encode que transforma uma string normal em um JSOM, vejamos em um breve exemplo:

1
2
3
4
5
//Código para seleção do banco de dados.
 
mysql_query('SET CHARACTER SET utf8');//Para evitar que haja erros com acentuação.
$result = mysql_query($query)or die(mysql_error());
json_encode($result);//Transformação do resultado em JSON.

Links:
Documentação da função json_encode no site do PHP: http://www.php.net/manual/pt_BR/function.json-encode.php

Apache IVY

outubro 25th, 2013


O Apache Ivy é gerenciador de dependências, que se originou a partir de um sub-projeto do Ant. O uso do Ivy é muito mais simples que Mavem.
Para usar o Ivy é preciso colocar o jar o Ivy no projeto, colocaremos na pasta ivy-lib como mostra a figura.

Feito isso, precisamos colocar as configurações do Ivy no arquivo build.xml na raiz do projeto:

<?xml version="1.0" encoding="UTF-8"?>
<project name="MultiSocial" xmlns:ivy="antlib:org.apache.ivy.ant">
    <path id="ivy.lib.path">
        <fileset dir="ivy-lib" includes="*.jar"/>
    </path>
 
    <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
 
    <target name="retrieve">
        <ivy:retrieve pattern="WebContent/WEB-INF/lib/[artifact]-[revision].[ext]" conf="webapp" />
    </target>
</project>

As dependências no Ivy são declaradas no arquivo ivy.xml que fica na raiz do projeto.

Como o Ivy usa o Ant, podemos criar tarefas no buil.xml. No exemplo acima criamos a target chamada retrieve, nela contém as seguintes tags:


A tag ivy:retrieve é a tag do Ivy responsável por baixar as dependências do seu projeto e colocá-las no diretório definido atrávez do parametro pattern, onde há alguns atributos que se pode colocar para definir o nome dos arquivos baixados:
[artifact] – É o nome da dependência.
[revision] – É a versão da dependência.
[ext] – É a extensão da dependência.

E o atributo conf na tag ivy:retrieve é para definir um nome para a configuração passada em pattern, isso é útil para quando se tem dependências que serão utilizadas para o desenvolvimento da aplicação e outras para realizar os testes como o jUnit por exemplo e se que mante-las em diretórios separados.

Agora veremos como colocamos as dependências as serem baixadas com Ivy, elas ficam declaradas no arquivo ivy.xml na raiz do projeto.

<configurations>
    	<conf name="webapp" />
</configurations>
 
<dependencies>
       <dependency org="org.apache.struts" name="struts2-parent" rev="2.3.15.2" conf="webapp->default"/>
       <dependency org="org.hibernate" name="hibernate-core" rev="4.2.6.Final" conf="webapp->default"/>
</dependencies>
 
<conflicts>
       <manager name="latest-revision"/>
</conflicts>

No exemplo acima, está as dependências do Hibernate e do Struts 2, onde:
org – É o pacote da dependência.
name – É o nome da dependência.
rev – É a versão da dependência que se deseja baixar.
conf – É dizemos onde as dependências serão colocadas, lembre-se que webapp definimos no build.xml que guarda o diretório onde queremos que as dependências sejam baixadas, a a palavra default após webapp diz ao Ivy apenas para as dependências diretas das nossas dependências que são essências para as nossas dependências funcionarem.

As dependências ficam dentro da tag dependencies, a tag conflicts é utilizada para gerenciar possíveis conflitos ao baixar as dependências das dependências, no exemplo configurei o Ivy para baixar a última versão no caso de conflito.

Note cada dependência possui apenas uma linha, bem mais simples que o Maven, onde cada dependência possui cinco linhas.

Depois de colocada todas as dependências é só entrar no diretório raiz do projeto via linha de comando e executar retrieve, que é o nome da target que configuramos no build.xml responsável por baixar as dependências.

MobileConf RJ 2013

outubro 21st, 2013

MobileConf
No dia 19/10 rolou o MobileConf 2013 no Rio de Janeiro, foi um ótimo evento sobre desenvolvimento Mobile organizado pela Caelum. O evento contou com ótimas palestras dívidaidas em três temas: Android, iOS e HTML5

Segue um breve review das palestras em assisti.
Palestra 1: Como suportar telas de alta resolução eficientemente na Web – Sérgio Lopes (Caelum)
A 1° palestra do evento foi sobre como projetar o layout da aplicação seja ela Web ou Mobile para se ajustar automaticamente a diferentes resoluções e tamanhos de tela. A palestra foi ótima tanto para desenvolvedores quanto para designers, pois o Sérgio passou dicas e Passos valiosos para montar uma aplicação com layout ajustável.

Palestra 2: Angular JS – Abraçando o MVC Client Side – Sergio Azevedo (Intelie)
Nessa Sérgio Azevedo deu uma breve introdução sobre o AngularJS mostrando sua principais diretivas e conceitos, mostrando em exemplos simples um pouco do que pode ser feito com o framework.

Palestra 3: Desenvolvendo Mobile Seguro segundo a proposta da OWASP – Augusto Marinho (M4U)
Essa foi dada dicas de como proteger seu app Android de possíveis ataques e brechas para diminuir o risco de roubo de dados e possíveis hackeamentos do App por terceiros.

Palestra 4: O que você precisa para iniciar no iOS e Objective-C – Fábio Pimentel (Caelum)
Nessa Fábio Pimentel deu uma breve introdução sobre como desenvolver para iOS, mostrando sobre como surgiu a linguagem e um breve exemplo como um classe de domínio com um atributo String e outro inteiro e o seus respectivos método getters e stters.

Palestra 5: Explorando os recursos de tela do App Resources. – André Silva (Caelum)
A 5º palestra que assisti foi sobre como tornar o desenvolvimento para Android mais simples e rápido e também de como tornar o código mais limpo e mais fácil de manter aproveitando o recurso do App Resources, uma propriedade do Android que gerência os layout, as strings e mensagens que aparecem na tela, imagens e outras coisas.

Palestra 6: AeroGear: Cinto de utilidades do desenvolvedor Android – Daniel Passos (Red Hat)
A palestra do Daniel Passos foi sobre o AeroGear um framework que facilita o desenvolvimento Android, fazendo com que o desenvolvedor se foque mais na regra de negócio do app. Entre suas funções estão a comunicação com Webservices Rest e o parse automático da resposta em json para objeto Java que o que foi amostrado na palestra.

Palestra 7: Principais diferenças de implementação iOS e Android – Fabrício Fujikawa e Alexandre Marones (InfoGlobo)
A última palestra que assisti no evento foi a do Fabrício Fujikawa e Alexandre Marones da InfoGlobo que amostraram as principais diferenças entre os desenvolvimento para Android e iOS como as diferenças dos padrões de tela entre cada plataforma, as diferenças entre o comportamento dos usuários de cada S.O e as diferenças entre a distribuições de cada versão de cada S.O

Eu sei que esses review pode ter sido breve, mais foi jeito de ilustrar um pouco o que rolou no evento.

Desenvolvimento de Jogos para Android

Desenvolvimento de Jogos para Android


Eu comprei alguns meses atrás o livro Desenvolvimento de Jogos para Android do Anderson Leite lançado pela editora Casa do Código disponível tanto na versão impressa quanto na versão digital, e resolvi escrever um post fazendo um breve review sobre o mesmo.

O livro possui um linguagem fácil de se ler sem ser prender em questões muito técnicas, pois o objetivo do mesmo é dar uma introdução sobre o assunto, explicando alguns conceitos básicos no mundo de desenvolvimento do jogos como: Splites, Colições, Scene, Engine e o funcionamento básico do Cocos 2D. Para isso o autor criou um jogo simples chamado 14-Bis VS 100 Meteoros e vai explicando passo-a-passo de como construí-lo e explicando como funciona cada trecho do código.

No final da leitura o leitor consegue desenvolver jogos 2D para Android sem enrolação e sem dificuldades, para mim valeu a pena a compra.

Links:
Link do Livro
Site da Casa do Código
Projeto do Livro no GitHub
Projeto do Livro no Google Play
Twitter Anderson Leite