logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Fev 24

Android – Configurações iniciais e “Hello, world!”

Escrito por DClick Team em 1, 4, 6, Android, Aplicativos, AR, BI, blog, class, configuração, control, Curso, Cursos, Desenvolvimento, developer, development, Dica, dll, Download, Eclipse, err, exemplo, for, Google, html, IE, image, int, Java, Linux, lista, Mercado, mg, mobile, O, on, Outros, print, processo, reference, RIA, Ria’s Geral, SDK, Segurança, ssl, Sun, TAT, Tema, Teste, tool, Tutoriais, Tutorial, Twitter, UI, uint, update, UX @ 02 24th, 2011 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Este tutorial é o primeiro de uma série de tutoriais sobre o sistema operacional Android. Inicialmente falarei um pouco sobre o que é o android, para que os iniciantes entendam um pouco melhor o que está por trás deste Sistema Operacional que, em tão pouco tempo, conquistou uma fatia tão grande do mercado de mobiles.


O Android

É uma plataforma open source criada, como muitos devem saber, pelo Google. Mas não apenas por ele. Do desenvolvimento deste SO participou o grupo Open Handset Alliance, que conta com outros 47 grandes nomes, como: HTC, LG, Samsung, Motorola, Toshiba, Sprint Nextel, T-Mobile, Asus, Intel, e muitos outros (Mais informações sobre a OHA podem ser encontradas em: http://www.openhandsetalliance.com/).

O SO e a máquina virtual

Baseado no kernel 2.6 do Linux, o SO do Android é responsável por gerenciar a memória, os processos, segurança de arquivos e pastas e também redes e drivers. Cada aplicativo dispara um processo no sistema operacional e cada processo possui uma thread dedicada. O sistema operacional tem total controle sobre os processos e pode, se necessário, encerrá-los e reiniciá-los para liberar recursos.

A linguagem utilizada para desenvolvimento de aplicações em Android, como muitos devem saber, é Java. Mas o que poucos sabem é que o SO não possui uma JVM, e sim uma máquina virtual chamada Dalvik, otimizada para mobile.

Configuração inicial

A seguir está um tutorial passo-a-passo sobre como instalar o SDK do Android no Eclipse para que possamos começar a desenvolver para esta plataforma.

Assumirei que o Eclipse já está instalado e configurado na sua máquina. Desta forma, a primeira coisa que deve-se fazer é o download do SDK do android. Que pode ser obtido no seguinte endereço:

http://developer.android.com/sdk/index.html

Após fazer o download do SDK, extraia-o para alguma pasta do seu sistema, como “D:/Android_SDK”, por exemplo. Utilize o update manager do Eclipse para instalar os plug-ins disponíveis para o Android Development Tools (ADT) pela URL: https://dll-ssl.google.com/android/eclipse

Em seguida deve-se configurar o “caminho” para onde você salvou o SDK na guia “preferences” do seu Eclipse:

O próximo passo é instalar os pacotes do SDK disponíveis através do ADT:

Após selecionar os pacotes desejados, clique em “Install Selected” e confirme as licenças para cada um deles. O passo seguinte é instalar um AVD (Android Virtual Device) para que você possa testar seus aplicativos.

Na mesma janela do ADT, selecione a aba “Virtual Devices” , clique em “New”, configure como desejar e clique em “Create AVD”:

Em seguida teste seu AVD. Selecione-o na lista, clique em “Start…” e em seguida em “Launch”:

Parabéns! Seu Eclipse agora está configurado para que você comece a desenvolver aplicativos para Android.

Hello, World!

Agradecimentos ao @eduardohorvath pelo apoio e auxílio na estruturação do post.

Fev 4

Iniciando com Adobe AIR for Android

Escrito por Leonardo França em 1, 4, 6, action, Actionscript, Actionscript 3.0, Adobe, Adobe Air, Air, Android, api, aplicacao, Aplicativos, app, apple, AR, Artigo, Artigos, BI, blog, Blogs, builder 4, case, class, Componente, Componentes, Curso, Cursos, Desenvolvedor, desenvolvedores, Desenvolvimento, development, err, exemplo, Exemplos, Ferramenta, flash, flash builder, Flash Builder 4, Flash Platform, Flash Player, Flex, for, Google, html, ide, IE, if, image, Iniciando, iphone, labs, mg, mobile, NaN, News, newsletter, O, on, padrão, PHP, platform, player, pt, RIA, Ria’s Geral, runtime, SDK, site, SmartPhone, Tech, Tecnologia, Tema, Tutoriais, Tutorial, UI, update, Ved, Widget @ 02 4th, 2011 | via http://www.leonardofranca.com.br | Sem comentários
Leonardo França
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »



Já temos há algum tempo a possibilidade de criar aplicativos para Android com a Flash Platform, usando o Adobe AIR ou Flash Player. Além disso o Android vem se tornando a cada dia mais popular, diariamente surgem varios aparelhos cada vez mais poderosos rodando o sistema operacional do Google e a Android Market foi reformulada para facilitar os usuarios e desenvolvedores.
Um detalhe importante é que não são todas as versões do Android que suportam o Adobe AIR e o Flash Player, é necessario que o smartphone tenha o Android 2.2(Froyo) ou posterior, e as versões do AIR deve ser a 2.5 ou Flash Player 10.1.

O desenvolvimento de aplicativos com a Flash Platform para o Android só é possivel a partir do Android 2.2(Froyo) e usando Adobe AIR 2.5 e Flash Player 10.1

Ferramentas de desenvolvimento
Adobe Flash CS5 Professional – É possivel desenvolver aplicativos para Android usando o Adobe Flash CS5 Professional, na ultima versão foi adicionado um profile “AIR for Android”, gerando o arquivo ja com o tamanho padrão de 480?800. Por enquanto não existem componentes pré-programados para Android e não é recomendado usar os já existentes no Flash.

Adobe Flash Builder 4 (burrito) – A Adobe disponilibizou juntamente com o Flash Builder 4 (burrito), o SDK do Flex versão 4.5, com componentes otimizados para dispositivos moveis, para quem se recordar, a Adobe tinha um projeto de uma versão do Flex para mobile chamado “Slider”, em virtude do rápido crescimento do processamento do smartphones atuais, a Adobe decidiu juntar esse projeto ao SDK padrao do Flex.

Qualquer editor de texto – Você pode usar qualquer editor de texto salvando na extensão .as ou seu editor ActionScript favorito.

Runtime Adobe AIR
Para que seu aplicativo rode em um dispotivo com Android, é necessario que seja instalado o runtime do Adobe AIR para logo em seguida você instalar seu aplicativo.

Distribuição
Você pode gerar o instalador do seu aplicativo pelo Flash Builder, Flash CS5 ou por linha de comando usando o ADT. É gerado um aplicativo com a extensão .apk. A distribuição pode ser feita atraves da Android Market, para se tornar um publisher da Android Market, basta pagar a inscrição de 25 dolares.
Acompanhe esse tutorial sobre como publicar seu aplicativo na Android Market
Caso você crie algo para rodar no Flash Player, basta rodar pelo navegador do smartphone, a Adobe tem uma página para que você possa ver alguns sites que usam Flash Player e que foram otimizados para mobile. Acesse o Adobe Flash Showcase for Mobile

Acompanhe alguns tutoriais:
Exemplos no Adobe Labs
Advanced Android development
Creating mobile apps for Android using Flash Builder “Burrito” and Flex SDK “Hero”
Test Drive for Mobile: Style the application

Nos proximos artigos, mostrarei como usar alguns recursos do AIR for Android :D

Jan 29

Trabalhando com SQLite em aplicações Flex Mobile (android) usando o Flash Builder Burrito

Escrito por Willian Mano em .NET, 1, 2.0, 4, 6, Air, Android, aplicacao, aplicaçoes, app, AR, arte, Artigo, auto, Banco de Dados, BI, blog, botão, C#, case, class, classe, código, código fonte, Componente, Componentes, CRUD, dados, Desenvolvimento, Download, DRE, email, event, Evento, flash, flash builder, Flex, fonte, for, function, IE, if, image, imasters, int, lite, mg, mobile, O, on, pt, redeRIA, RIA, Ria’s Geral, S+S, screen, Screencast, screencasts, site, SQLite, state, Sun, TAT, Teste, Tutoriais, Tutorial, Twitter, UI, uint, update, XP @ 01 29th, 2011 | via http://blog.willianmano.eti.br/ | Sem comentários
Willian Mano
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Depois de muito tempo fora dos palcos estou de volta, dessa vez com uma série de tutoriais focados principalmente no desenvolvimento de aplicações para android utilizando o flash builder burrito.

Neste primeiro tutorial eu irei mostrar como criar algumas operações do CRUD em uma aplicação android utilizando um banco de dados local, neste caso o SQLITE. Não vou explicar como criar um novo projeto ou mesmo os componentes de uma aplicação android, para isso assista aos screencasts no site do Igor costa e também no blog da dclick.

Primeiramente vamos criar no nosso arquivo principal a conexão com o banco e também a criação de uma tabela.


protected function createDb():void 

var sqlConnection:SQLConnection = new SQLConnection();

sqlConnection.open(File.applicationStorageDirectory.resolvePath("testeDb.sqlite"));

var stmt:SQLStatement = new SQLStatement();

stmt.sqlConnection = sqlConnection;

stmt.text = "CREATE TABLE IF NOT EXISTS contatos (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"nome VARCHAR(200) NOT NULL," +
"telefone VARCHAR(45) NOT NULL," +
"email VARCHAR(200) DEFAULT NULL)";

stmt.execute();

A função createDb é executada na método initialize da aplicação.
A variável sqlConnection na linha 3 é responsável pela conexão.
Na linha 5 é criado o arquivo SQLite para a aplicação
Na linha 7 a varável stmt é responsável pelas instruções SQLite.
É criada a conexão na linha 9.
Na linha 11 é a instrução SQLite que será executada, nesse caso a criação da tabela na nossa base testeDb.sqlite.
Na linha 17 é executada a instrução SQLite da linha 11.

Pronto, depois da tabela criada vamos criar a nossa view para poder cadastrar dados nela.

A função para salvar os dados é bem simples. Adicione um evento para o clique do botão e nele adicione o seguinte código.


var sqlConnection:SQLConnection = new SQLConnection();
sqlConnection.open(File.applicationStorageDirectory.resolvePath("testeDb.sqlite"));

var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = sqlConnection;

stmt.text = "INSERT INTO contatos (nome, telefone, email) VALUES" +
"('" + txiNome.text + "', '" + txiTelefone.text + "', '" + txiEmail.text + "')";

stmt.execute();

navigator.popView();

Bom para quem já desenvolveu alguma app em Air utilizando o SQLite percebe que a conexão é feita da mesma forma. Se você deseja melhorar seu código (assim como eu) sugiro a leitura do post do Andre Casertano no site da Imasters. Ele mostra como criar uma classe de conexão com o SQLite e também explica um pouco melhor sobre como é feita essa conexão no primeiro posto sobre o assunto.

No código fonte eu coloquei também as operações de update e delete. Esta bastante simples. No próximo post eu prometo melhorar um pouco… =D

Download do fonte.

Post to Twitter

Jan 19

O Adobe Flex

Escrito por SamuelFacchinello em .NET, 1, 4, 6, Adobe, Adobe Flex, Air, Animações, app, AR, BI, blog, Blogs, C#, chrome, comunicação, Dica, Dicas, Download, efeito, efeitos, empresas, err, exemplo, Exemplos, explorer, Ferramenta, firefox, flash, flash builder, Flex, for, free, gc, Google, grátis, html, ide, IE, int, interface, internet, Java, labs, mg, Microsoft, O, on, online, Pessoal, PHP, player, Plugin, produto, programação, RIA, Ria’s Geral, S+S, serviço, Serviços, TAT, Tech, Tema, Teste, Treinamento, Tutoriais, UI, Vídeo, Vídeos, web, Webservice, window, windows, XML, XP @ 01 19th, 2011 | via http://desenvolvendoemflex.blogspot.com/ | Sem comentários
SamuelFacchinello
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá!!

Bom, vamos começar do começo!!! Aqui vou explicar um pouco sobre o Adobe Flex e suas maravilhas.
Començando…

  • O que é o Adobe FLEX??
É uma linguagem de programação baseada na plataforma Flash da Adobe (mas não se engane, o Flex não é para fazer animações com “linha de tempo”, Adobe Flex é para fazer Sistemas Web).
Hoje, o flex não é uma ferramenta muito conhecida entre as empresas que utilizam sistemas na web, mas isso já está mudando, graças a empresas e/ou pessoas que estudam mais e mais para sempre inovar com seus produtos e serviços.

  • O que o Flex tem de bom?

O Flex é famoso pela sua rica interface gráfica, pela sua facilidade de aprendizado, também pela facilidade de comunicação com outras linguagens (JAVA, PHP, etc) seja por Xml, WebService, RemoteObject, etc. Ele tem efeitos e transições que deixam o usuário final maravilhado com a interface das aplicações desenvolvidas com essa ferramenta.

  • Como começo??

É muito fácil de aprender a desenvolver em Flex, para começar você deve fazer o download do Flash Builder (versão teste por 60 dias) aqui (você também pode solicitar uma licença estudante para não comerciais aqui).
É só instalar e começar a se divertir. :D
*Para rodar as aplicações desenvolvidas em Flex, precisa de um navegador (firefox, chrome, ie, opera, etc) e o plugin do FlashPlayer instalado.
A própria Adobe disponibiliza um treinamento grátis (em inglês) das funções básicas do Flex, esses vídeos podem ser visto aqui.

  • Exemplos de aplicações

A muitos exemplos espalhados pela internet, mas existe o Tour de Flex que pode ser instalado logo abaixo (versão em AIR) ou então clicar aqui e ver a versão online.

<p>&amp;amp;amp;lt;p&amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Con&amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;lt;/p&amp;amp;amp;gt;</p>

  • Conclusão

A principio é isso pessoal, em breve novos posts com dicas e tutoriais.
Qualquer dúvida é só entrar em contato.

Abraço, Obrigado.

Jan 3

Alterando a senha de um usuário do Active Directory usando Java

Escrito por DClick Team em .NET, 1, 4, 6, abas, AR, Artigo, auto, BI, class, classe, Diversos, err, exemplo, for, Google, html, ide, if, int, internet, Java, library, Microsoft, O, on, padrão, Password, print, problema, problemas, pt, rest, RIA, Ria’s Geral, Segurança, server, servidor, Software, ssl, string, Sun, TAT, Tema, Teste, tool, Tutoriais, Twitter, UI, utils, UX, window, windows, XP @ 01 3rd, 2011 | via http://blog.dclick.com.br/pt/ | 1 comentário
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

link temos os passos para se fazer isso. Veja que para importar o certificado temos que usar um comando parecido com sudo keytool -import -keystore ./jre/lib/security/cacerts -file server-certificate.crt, dependendo do seu sistema operacional e onde está o seu certificado (.crt).

Nas pesquisas que fizemos, usamos alguns softwares que nos auxiliaram. Usamos o Portcle (aplicação Java para gerenciar certificados) para ter certeza que o certificado estava importado no meu “cacerts” e uma outra aplicação Java para fazer browse no AD, o JXplorer. O JXplorer é importante para acharmos o DN (Distinguished Name) de um usuário para podermos fazer os testes.

Por fim, o que tínhamos que fazer era permitir que um usuário ou um grupo de usuários tivesse o privilégio de trocar a senha de qualquer usuário. Basta seguir este artigo para conseguir isso.

Abaixo temos um exemplo de uma classe simples que possui um método para trocar a senha e outro método para dar “unlock” do usuário.

Classe de teste:

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
38
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.naming.NamingException;
import javax.naming.ldap.LdapContext;

import br.com.dclick.utils.ad.ADUtil;

public class test {

? ? /**
? ?? * @param args
? ?? * @throws NamingException
? ?? * @throws IOException
? ?? * @throws UnsupportedEncodingException
? ?? */

? ? public static void main(String[] args) throws NamingException, UnsupportedEncodingException, IOException {
? ? ? ? // TODO Auto-generated method stub
? ? ? ? ? ? ? ?
? ? ? ? ADUtil adUtil = new ADUtil();
? ? ? ?
? ? ? ? LdapContext context = adUtil.createUserContext(
? ? ? ? ? ? ? ? “CN=modifyad, OU=domain, DC=com, DC=com, DC=br”,
? ? ? ? ? ? ? ? “senha”,
? ? ? ? ? ? ? ? “/Library/Java/Home/lib/security/cacerts”,
? ? ? ? ? ? ? ? “ldap://x.x.x.x:636″);
? ? ? ?
? ? ? ? adUtil.unlockAccount(context,
? ? ? ? ? ? ? ? “CN=usuario, OU=DClick, DC=domain, DC=com, DC=br”);
? ? ? ? adUtil.changePassword(context,
? ? ? ? ? ? ? ? “CN=usuario, OU=DClick, DC=domain, DC=com, DC=br”,
? ? ? ? ? ? ? ? “nova-senha”);
? ? ? ?
? ? ? ?
? ? }

}

Classe Java:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package br.com.dclick.utils.ad;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

/**
?* @author rafael.martinelli (rafael.martinelli@dclick.com.br)
?*
?*/

public class ADUtil {

? ?
? ? /**
? ?? * Método que retorna o contexto de conexão do usuário
? ?? * com poder de troca de senha. Deve-se registrar o certificado
? ?? * do AD na VM Java
? ?? *
? ?? * @param adminCN Ex: “CN=modifyad, OU=domain, DC=com, DC=com, DC=br”
? ?? * @param adminPassword
? ?? * @param keystore Ex: “/Library/Java/Home/lib/security/cacerts”
? ?? * @param ldapUrl Ex: “ldap://x.x.x.x:636″
? ?? * @return javax.naming.ldap.LdapContext
? ?? * @throws NamingException
? ?? */

? ? public LdapContext createUserContext(String adminDN,
? ? ? ?
? ? ? ? String adminPassword, String keystore,
? ? ? ? String ldapUrl) throws NamingException {
? ? ? ?
? ? ? ? Hashtable env = new Hashtable();
?
? ? ? ? System.setProperty(“javax.net.ssl.trustStore”, keystore);
?
? ? ? ? env.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.ldap.LdapCtxFactory”);
? ? ? ? env.put(Context.SECURITY_AUTHENTICATION, “simple”);
? ? ? ? env.put(Context.SECURITY_PRINCIPAL, adminDN);
? ? ? ? env.put(Context.SECURITY_CREDENTIALS, adminPassword);
? ? ? ? env.put(Context.SECURITY_PROTOCOL, “ssl”); // para poder modificar password y grupos del usuario.
? ? ? ? env.put(Context.PROVIDER_URL, ldapUrl);
? ? ? ? env.put(Context.REFERRAL, “ignore”);
? ? ? ?
? ? ? ? return new InitialLdapContext(env, null);
? ? ? ?
? ? }
? ??
? ? /**
? ?? * Troca a senha de um usuário no AD
? ?? *
? ?? * @param ldapContext
? ?? * @param userCN Ex: “CN=usuario, OU=DClick, DC=domain, DC=com, DC=br”
? ?? * @param newPassword
? ?? * @throws NamingException
? ?? * @throws UnsupportedEncodingException
? ?? * @throws IOException
? ?? */

? ? public void changePassword(LdapContext ldapContext, String userCN, String newPassword) throws NamingException, UnsupportedEncodingException, IOException {
? ? ? ? ? ?
? ? ? ? modifyAdAttribute(ldapContext, userCN, “unicodePwd”, getPassword(newPassword));
? ? ? ? System.out.println(“Password changed for “ + userCN);
? ? }
? ?
? ? /**
? ?? * Destrava um usuário do AD
? ?? *
? ?? * @param ldapContext
? ?? * @param userDN Ex: “CN=usuario, OU=DClick, DC=domain, DC=com, DC=br”
? ?? * @param newPassword
? ?? * @throws NamingException
? ?? * @throws UnsupportedEncodingException
? ?? * @throws IOException
? ?? */

? ? public void unlockAccount(LdapContext ldapContext, String userDN) throws NamingException, UnsupportedEncodingException, IOException {
? ? ? ?
? ? ? ? modifyAdAttribute(ldapContext, userDN, “lockoutTime”, “0″);
? ? ? ? System.out.println(“Account “ + userDN + ” unlocked”);
? ? ? ?
? ? }
? ?
? ?
? ?
? ??
? ? /**
? ?? * Modifica um atributo de um usuário/group no AD
? ?? *
? ?? * @param ldapContext
? ?? * @param userCN Ex: “CN=usuario, OU=DClick, DC=domain, DC=com, DC=br”
? ?? * @param attribute Ex: “unicodePwd”
? ?? * @param value Valor do attributo
? ?? * @throws NamingException
? ?? */

? ? private void modifyAdAttribute(LdapContext ldapContext, String userCN, String attribute, Object value) throws NamingException{
? ? ? ? ModificationItem[] modificationItem = new ModificationItem[1];
? ? ? ? modificationItem[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
? ? ? ? ? ? ? ? new BasicAttribute(attribute, value));
? ? ? ? ldapContext.modifyAttributes(userCN, modificationItem);
? ? }
? ?
? ?
? ? /**
? ?? * Gera o password no formato binário e com aspas, respeitando
? ?? * o que o AD precisa
? ?? *
? ?? * @param password
? ?? * @return
? ?? * @throws UnsupportedEncodingException
? ?? */

? ? private static byte[] getPassword(String password) throws UnsupportedEncodingException{
? ? ? ? String newQuotedPassword = “““ + password + “““;
? ? ? ? return newQuotedPassword.getBytes(“UTF-16LE”);
? ? }

}

Dez 2

Tutorial Flex4 + BlazeDS + Java do zero #1

Escrito por Mário Santos em Action Script & MXML, Air, Blazeds, configuração, flash, flash builder, Flex, Flex4, Java, Ria’s Geral, Source Code, Tutoriais, Tutorial @ 12 2nd, 2010 | via http://msdevstudio.com/blog | Sem comentários
Mário Santos
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Como já tinha falado antes, entrei numa nova fase de alargar um pouco mais os meus conhecimentos; Quem conhece o blog sabe que o meu principal foco sempre foi o desenvolvimento em flash / flex com php / mysql. Tudo tecnologias completamente gratuitas, mas decidi entrar no mundo do java principalmente devido a um projeto no qual estou envolvido e que tive que criar uma aplicação de playlists em java para o servidor de streaming Red5. Para aqueles que desconhecem o red5, ele é um servidor de streaming e remoting feito em java (baseado em grande parte no tomcat) com funcionalidades especificas para streamming.

Depois de muitas cabeçadas la consegui fazer o que se pedia e mais, ainda ganhei o tal bichinho do Java. Foi aqui que tudo começou!

Nesta primeira parte vou falar do que mais me deu voltas à cabeça a quando de isolar por completo o red5 e começar do zero no java com o flex. Acreditem que as configurações podem ser a maior dor de cabeça a quando de iniciar no java, principalmente no remoting.

Todos os passos que aqui vou apresentar com certeza serão alvo de criticas, desagrado, más interpretações e até maus hábitos, no entanto esta foi a forma que consegui, por isso se acharem que não está correto eu até agradeço que me informem da forma correta de o fazer. Então Aqui vamos nós deste a instalação, configuração primeira app java e primeira app flex!

#1 . Requesitos

São necessários alguns procedimentos antes de iniciarmos a integração entres estas tecnologias, pelo que o primeiro passo é fazer o download de:

  • Eclipse IDE for java Developers, Pagina de download aqui.
  • Java Development Kit, Versão Atual JDK6, Pagina de download aqui.
  • Adobe Flhas Builder 4 Trial, Pagina de download aqui. Versão Stand Alone.
  • BlazeDS Turnkey, Pagina de download aqui. (Necessita uma conta gratuita na adobe). Download da versão “BlazeDS turnkey” de 47 MB que já traz consigo o servidor tomcat, desta forma não necessitamos de o configurar à parte.
  • No meu caso eu uso o Windows 7 32 bits, mas funcionará em qualquer versão do windows 32bits, no entanto se for 64bits devem fazer atenção nos downloads e escolherem a versão correta pro vosso sistema.

#2. Instalação e Configuração do JDK6

Bom, o ficheiro que vai terminar o seu download primeiro, é provavelmente o JDK, e é por esse mesmo que vamos começar. Abram o arquivo, siga os passos de instalação normais (clicando duas ou 3 vezes no Next / Seguitne). A instalação do java far-se-à automaticamente nas pastas por defeito e com as opções por defeito, aqui nada precisamos de alterar. (Deixem o caminho por defeito: C:Program FilesJavajre6) ou então mais tarde lembrem-se de usarem os caminhos corretos da vossa instalação.

No final precisamos de confirmar duas variaveis do sistema, o JAVA_HOME e o PATH que pode parecer complicado mas não o é. O JAVA_HOME aponta para a localização do Java no sistema operativo e o PATH para a localização do executàvel da maquina virtual do java.

(…)
Leia o resto de Tutorial Flex4 + BlazeDS + Java do zero #1 (1,432 palavras)


© msdevweb for TSW – That Should Work Blog, 2010. | Permalink |No comment | Add to del.icio.us

Post tags: blazeds, config, configuração, flash builder, flex4, java, tomcat, Tutorial



Nov 30

Ícones da Barra de Status

Escrito por DClick Team em 1, 4, 6, Adobe, Android, Aplicativos, AR, arte, bar, blog, class, dados, efeito, efeitos, err, exemplo, Exemplos, Ferramenta, for, fundo, Gráfico, ide, IE, if, image, imagens, menu, mg, O, on, photoshop, procura, pt, RIA, Ria’s Geral, Segurança, TAT, Tema, Tutoriais, Twitter, UI, XP @ 11 30th, 2010 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Os ícones da barra de status servem para representar as notificações que acontecem no sistema operacional ou de seus aplicativos.

Graficamente eles são semelhantes aos ícones do menu, mas são menores e possuiem maior contraste, portanto não se deixe enganar e siga a Guideline.

Não esqueça das dimensões que são sempre pequenas, médias e grandes, tal como descrito nos primeiros posts, e que tem suas resoluções descritas na tabela 1.

.

Estrutura

.

  • Os cantos arredondados não devem ser muito extensos, devem respeitar uma margem máxima de 2px, para entender verifique a Figura 9 (o número das figuras não é de acordo os nossos posts e sim de acordo com a Guideline oficial) e perceba no canto direito superior esse detalhe e de como fazer o canto arredondado corretamente.
  • Todas as dimensões possuem 25 x 25px, e com um área de segurança (safeframe) de 2px, tal como na Figura 9.
  • Detalhe importante, os ícones da barra status podem vazar essa área de segurança na direita e na esquerda caso necessário, mas jamais poderá vazar nos cantos superior e inferior.
  • Como você já deve saber, a arte deve ser exportada com um PNG transparente, para isso eu sugiro o Fireworks como ferramenta para desenvolver esses ícones, ele é fácil de mexer para criar ícones com esses padrões.
  • Porém, o pacote enviado pela Android é em PSD, e você poderá editar e fazer seus ícones através do Photoshop.

.

Luzes, Efeitos e Sombras

.

Observe que os ícones da barra de status são ligeiramente menores, por isso eles possuem um alto contraste, para facilitar a sua visualização, dando um aspecto mais clean e objetivo das suas formas. Eu não sei se você usa um Photoshop ou outro programa gráfico em português, eu espero que não, vide que a maioria dos tutoriais não dão suporte a esses programas, ainda mais que as traduções ficam péssimas, mas, vou procurar deixar alguns detalhes em inglês e fazer comentários, o motivo é um só, imagine Depth, traduzido como profundidade, a gente sabe bem o que é um Depth em um gráfico, mas profundidade pode ter outro sentido, então tome cuidado com isso, as imagens ajudam a você entender o que é cada coisa.

.

Passo a Passo

.
1.  Em uma ferramenta como o Adobe Photoshop, crie uma forma base em uma imagem de 25?25 px com fundo transparente. Cuidado com o safeframe, e mantenha o superior e inferior de 2 pixels livre, recorde-se do que foi citado acima
2. Adicione cantos arredondados, conforme especificado na Figura 9.
3. Adicione luz, efeitos e sombras, conforme especificado na Figura 10.
4. Exportar o ícone com tamanho 25?25 como um arquivo PNG com fundo transparente.
.

“O que fazer e o que não se deve fazer”

.

Abaixo segue alguns exemplos do que se deve e não se deve fazer, ou seja, seguir os padrões é importante.

Nov 26

OpenSUSE Linux + Dropbox Shell Backup Script

Escrito por redeRIA em Linux, Notícias, Ria’s Geral, Tecnologia, Tutoriais, Tutorial @ 11 26th, 2010 | via http://rederia.net | Sem comentários
redeRIA
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Vou aqui deixar um pequeno script que fiz para linux para fazer o backup diário de algumas bases de dados criticas inicialmente para o Dropbox (que sem duvida é a melhor forma de backup e sincronização de dados; dropbox.com) e depois para um disco externo. Um dos maiores problemas mesmo foi conseguir montar um disco de rede (PackardBell Netstore 3500) no openSUSE. A coisa ficou feia e apenas o consegui montar via ftp com a ajuda do curlftpfs (http://curlftpfs.sourceforge.net/), um pequeno software que me fez matar a charada e me permitiu montar o ftp como uma pasta no linux e a partir daí aceder a ela como se fizesse parte do proprio linux.

Bom, tive que recorrer a um pouco do que estudei sobre linux, e a algumas dicas que encontrei pela net e discuti com amigos, até que cheguei a um script bem simples mas que me permite fazer sem rodeios o que eu precisava. (Backup de algumas bases de dados mysql e de algumas pastas no servidor).

#!/bin/sh
# Simple backup script
# Backups mysql databases and folders to dropbox and external disk
# by Mário Santos – msdevstudio.com
# admin [ at ] msdevstudio.com
# ————————————–
mkdir /root/Dropbox/Backups > /dev/null 2>&1
mkdir /root/Dropbox/Backups/`date +%Y%m%d` > /dev/null 2>&1
echo Backup Started `date` >> ~/backuplog
echo Backing up db_1 @ `date` >> ~/backuplog
mysqldump –user=root –password=mypass –lock-tables=false db_1 > /root/Dropbox/Backups/`date +%Y%m%d`/db_1.sql
echo Backing up db_1 Complete @ `date` >> ~/backuplog
echo MySql Backup Completed @ `date` >> ~/backuplog
?
echo Trying to copy to network disk? @`date` >> ~/backuplog
cp -r /root/Dropbox/Backups/`date +%Y%m%d` /home/net-backup/PUBLIC/Backups > /dev/null 2>&1
echo Copy to network disk done @ `date` >> ~/backuplog
?
# Using dates to delete the 3 days ago backup. Leave only 3 backups!
threeDaysAgo=`(date –date=‘3 days ago‘ ‘+%Y%m%d‘)`
threeDaysAgoPath=/home/net-backup/PUBLIC/Backups/$threeDaysAgo
?
echo Backing up folders @ `date` >> ~/backuplog
mkdir /home/net-backup/PUBLIC/Backups/`date +%Y%m%d`/Files > /dev/null 2>&1
cp -r /home/folder1 /home/net-backup/PUBLIC/Backups/`date +%Y%m%d`/Files > /dev/null 2>&1
cp -r /home/folder2 /home/net-backup/PUBLIC/Backups/`date +%Y%m%d`/Files > /dev/null 2>&1
echo Backing up folders complete @ `date` >> ~/backuplog
echo Removing old backup files @ `date` >> ~/backuplog
rm -r $threeDaysAgoPath > /dev/null 2>&1
echo Removing old backup files complete @ `date` >> ~/backuplog
echo Backing Complete @ `date` >> ~/backuplog

E voila! Gravem como .sh e criem um cron job para fazer correr este script!

Reparem que apenas copiei os backups das bases de dados para o Dropbox, porque como devem imaginar copiar pastas do sistema (que no meu caso poderiam chegar a 50GB ) não é boa ideia, a não ser que tenha a opção paga do dropbox!

Simples e eficaz. Claro que não dispensa por completo o uso de um software de backups, no entanto para certos casos é mais do que suficiente ;)

Talvez ajude alguem! :)
Abraço.


© msdevweb for TSW – That Should Work Blog, 2010. | Permalink |No comment | Add to del.icio.us

Post tags: arquivos, backup, dropbox, ficheiros, Linux, openSUSE, script, Tutorial



Nov 18

Estilos Infinitos com CSS Personalizado

Escrito por Silva Developer em 1, 4, 6, AR, arte, blog, class, css, custom, Desenvolvimento, Design, Estilo, exemplo, facebook, fonte, fundo, html, ide, if, image, layout, Links, menu, mg, O, on, padrão, Personalização, pt, RIA, Ria’s Geral, site, TAT, Tema, Tutoriais, Twitter, UI, web, Wordpress, XP @ 11 18th, 2010 | via http://silvadeveloper.wordpress.com | Sem comentários
Silva Developer
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Existem mais de 100 temas à escolha no WordPress.com, muitos deles com fundos, menus, layouts de conteúdo e cabeçalhos que pode personalizar a seu gosto (como o novo tema padrão Twenty Ten, por exemplo), e temos muitos mais em desenvolvimento ainda.

Pode também levar a personalização do seu site um passo mais à frente e definir totalmente o estilo de qualquer tema, alterando as fontes, cores, bordas, fundos e até mesmo o layout do site usando a opção de CSS Personalizado.

Muitos utilizadores fizeram belos sites para o seu conteúdo usando um dos nossos temas como base, juntando-lhe o seu próprio CSS .

Se não sabe por onde começar com o CSS (que necessita um pouco de experiência com HTML e vontade de aprender, é verdade), visite os links para a ajuda com CSS na página de suporte respectiva, que o levarão a tutoriais e explicações na web. Se tem um amigo que é bom em CSS, pode ser que seja um bom momento para lhe oferecer uma pizza e pedir uma lição!

Tal como acontece com todas as opções pagas do WordPress.com (excepto o registo de domínio), pode experimentar CSS Personalizado gratuitamente durante 30 dias e cancelar se não gostar.

Aqui estão alguns sites em WordPress.com que usam CSS Personalizado e que chamaram a nossa atenção:

Whole Lotta Lovely

 

Visite: http://wholelottalovely.wordpress.com/

Rafael Alburquerque, Vice-President da República Dominicana

 

Visite: http://rafaelalburquerque.com/

Kiss My Spatula

 

Visite: http://kissmyspatula.com

Things We Make

 

Visite: http://thingswemake.wordpress.com/

Fig & Fennel

 

Visite: http://figandfennel.wordpress.com/

Journey Photographic

 

Visite: http://journeyphotographic.com/

Foody Two Shoes

 

Visite: http://foodytwoshoes.com/

Adoramos ver a sua obra de arte em WordPress.com!

Nov 5

Scala – Primeiros Passos

Escrito por DClick Team em 1, 4, 6, análise, AR, arte, auto, back, BI, blog, boolean, break, bug, busca, case, class, classe, classes, codec, código, comparação, comunidade, control, Curso, Cursos, demo, Desenvolvimento, Design, Documentação, Download, Eclipse, err, erro, error, eval, exemplo, Exemplos, Ferramenta, for, futuro, Geral, git, ide, IE, if, image, int, internet, Java, Javascript, loop, Mac, mg, novidade, O, on, oop, Orientação, Orientação a Objetos, Otimização, Outros, padrão, print, problema, problemas, programação, Projetos, pt, rest, RIA, Ria’s Geral, RoR, string, Sun, tag, TAT, Tema, Teste, Tutoriais, Tutorial, Twitter, UI, uint, Vários, XP, zend @ 11 5th, 2010 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Twitter!


Aprendendo Scala

Estou começando uma série de posts sobre Scala para divulgar as minhas experências com a linguagem e suas aplicações. Vou tentar passar o funcionamento da linguagem e seus recursos, assim como também um pouco do paradigma de programação funcional, e tentar chegar em aplicações práticas no ambiente de desenvolvimento.

Existem alguns tutoriais disponíveis na internet bem interessantes mas que as vezes jogam muito conteúdo sem dar tempo para assimilar os conceitos. Nessa série de posts tentarei colocar os conceitos e ferramentas de Scala e linguagens funcionais de uma maneira natural, conforme eu mesmo for evoluindo na linguagem e também dando exemplos e exercícios para que você possa assimilar o que está sendo passado. Vou tentar explicar também conceitos mais teóricos do paradigma funcional, para que a linguagem que estamos falando seja a mesma.

Minha experiência com Scala é algo bem próximo do zero, por isso estou escrevendo esta série de posts com o intuito de me forçar a estudar a linguagem e também ajudar a divulgar uma das possíveis alternativas ao Java, afinal se trata de uma linguagem nova e que ainda não foi muito difundida na comunidade. Tratarei bem do básico nos primeiros posts com exemplos bem trivias apenas para ajudar na compreensão dos conceitos básicos. Também colocarei algumas bibliografias de onde se pode encontrar documentação sobre a linguagem.

Linguagens funcionais e Scala

Não é nova a ideia de se programar em um paradigma funcional. Linguagens funcionais existem a quanse tanto tempo quanto existe linguagens de programação. Com certeza na sua faculdade você viu, ou verá, linguagens como LISP, Scheme, Erlang, Clojure, etc… e atualmente que está ficando bem conhecida: Scala que roda em cima da JVM, a virtual machine do Java. Linguagens funcionais mudam o paradigma para focar em ‘funções’. Assim como em linguagens orientadas a objeto onde a unidade básica é uma intância de um objeto, em linguagens funcionais a unidade básica é uma função. Uma função nada mais é do que uma operação que recebe parâmetros, executa alguma ação e devolve um resultado. O funcionamento é muito parecido com o dos métodos em linguagens orientadas a objeto.

O interessante sobre Scala, é que a linguagem permite uma mescla do paradigma funcional com orientação a objeto. Existem conceitos de ambos implementados na linguagem e que fazem sentido quando aplicados em conjunto. Por exemplo, em scala existe o conceito de classe e de instâncias de classes, que são os objetos. Também existem funções que independem de uma classe para existirem. Se trata de um conceito muito poderoso, pois possibilita toda padronização e controle do design do sistema que as linguagens orientadas a objeto permitem, sem restringir o uso do dinamismo e abstração da linguagem funcional.

Mas claro que Scala e linguagens funcionais tem seus problemas. Por exemplo, não existe uma IDE sólida como o Eclipse ou o NetBeans para Scala. O que dificulta no momento de trabalhar com projetos muito grandes, com uma equipe com vários programadores. O dinamismo da linguagem também impede uma análise de código que por exemplo o PMD, ou o FindBugs disponibilizam no Java. Dessa forma, deveríamos garantir que as boas práticas e o design está sendo seguido com nossos testes unitários.

Chega de filosofar sobre a linguagem, vamos para a parte prática.

Instalando Scala

Para instalar o Scala basta acessar a página oficial de download neste link, e fazer o download de acordo com sua plataforma. Feito isso, descompacte o conteúdo em alguma pasta na sua máquina e adicione a pasta ‘bin‘ ao path do seu sistema operacional. Para se certificar que foi tudo instalado corretamente, abra um console e digite ‘scala‘, o terminal do scala deve abrir e aparecer uma tela como essa:

Agora que o terminal está sendo executado, digite ‘1 + 1‘ e repare na saída:

1
res0: Int = 2

É uma saída um tanto quanto confusa, mas que faz sentido no contexto do Scala. O que está acontecendo é que a unidade básica em Scala é uma função, portanto a operação + também é uma função, que foi executada no objeto ‘1‘, passando o parâmetro ‘1‘. Para se ter uma idéia melhor desse funcionamento, digite o seguinte no terminal:

1
scala> 1.+(1)

e aperte Enter. Repare na saída:

1
res1: Double = 2.0

Com exceção do tipo que era int e agora é Double, o funcionamento é exatamente o mesmo. Tal sintaxe já deve estar bem claro na cabeça da maioria dos programadores, mas a primeira sintaxe é só uma maneira difetente de se fazer a mesma chamada.

Conceitos básicos da linguagem

Vamos definir uma função para entender um pouco mais da sintaxe. Digite o seguinte:

1
2
scala> def a = 2 + 2
a: Int

Aqui estamos definindo uma função com o nome ‘a‘ que não recebe parâmetros, e devolve o resultado da soma ‘2 + 2‘. A palavra restrita return não é necessária, o compilador consegue inferir que a última expressão da função será o valor devolvido. Repare também que não precisamos definir o tipo que a função devolve, o qual também foi inferido pelo compilador. Portanto ao contrário do que possa parecer, Scala é uma linguagem tipada em tempo de compilação, portanto o seguinte trecho não compila:

1
2
3
4
5
6
7
8
9
scala> var b = “abc”
b: java.lang.String = abc

scala> b = a
<console>:7: error: type mismatch;
 found   : Int
 required: java.lang.String
       b = a
           ^

Repare que o compilador inferiu que o tipo da variável ‘b‘ é String (note que é o String do java), e que o tipo devolvido por ‘a‘ é Int, logo o código não compila. De certa forma esse comportamento é bom, pois garante uma maior integridade do código, sem que você tenha que programar para “deixar o compilador feliz“, ou seja, não existem tantas regras na escrita do código, porque muitas podem ser deduzidas a partir do contexto.

Um outro conceito de Scala é a diferença entre chamada por valor, e chamada por nome. Na chamada por valor é feita a evaluação da expressão assim que o código é executado, mesmo que não seja necessário usar o resultado da chamada. A vantagem é que evitamos executar outras vezes a expressão para obter o resultado, pois este já foi determinado. Na chamada por nome a evaluação da expressão ocorre apenas quando o resultado da chamada será usado, tendo um comportamento mais lazy. A desvantagem é a execução da expressão várias vezes para se obter o mesmo resultado, mas a vantagem é não fazer a execução quando não for necessário. Vamos ver um exemplo da diferença entre a chamada por valor e por nome. Volte no terminal e defina a seguinte função:

1
2
scala> def loop: Int = loop
loop: Int

Agora defina uma função que recebe dois inteiros e devolve o primeiro:

1
2
scala> def primeiro(x: Int, y: Int) = x
primeiro: (x: Int,y: Int)Int

Agora execute a chamada passando ‘loop‘ como segundo parâmetro e se prepare porque seu console irá travar na execução =):

1
2
scala> primeiro(0, loop)
_

Vamos fazer uma pequena modificação na definição de ‘primeiro‘ para tornar possível a execução de tal código:

1
2
scala> def primeiro (x: Int, y: => Int) = x
primeiro: (x: Int,y: => Int)Int

O que definimos agora foi que o segundo parâmetro de ‘primeiro‘ será uma função que devolve um Int. Assim seu resultado só será obtido quando for feita a chamada direta na expressão. Agora conseguimos fazer a chamada em nossa função:

1
2
scala> primeiro(0, loop)
res0: int = 0

Nossa função executou e finalizou sem problemas dessa vez, isso porque não foi necessário utilizar o segundo valor para obter o resultado. Essa é chamada por nome, e o primeiro exemplo é a chamada por valor.

Até agora vimos como invocar funções, como definir funções (def) e como definir variáveis (var). Vimos também o básico de inferência de tipo pelo compilador do scala e os primeiros conceitos da linguagem. Mas como eu havia dito, Scala também tem conceitos de orientação a objetos, portanto vamos definir nossa primeira classe em Scala:

1
2
scala> class AcumulaSoma { var acumulado = 0; def acumula(i: Int) = { acumulado = acumulado + i; acumulado } }
defined class AcumulaSoma

Lembre-se que não somos obrigados a definir o tipo devolvido pela função caso esteja explícito e também não precisamos da palavra reservada ‘return‘. O que fizemos foi definir uma classe que se chama ‘AcumulaSoma‘ que tem um atributo, que por padrão do Scala é de acesso privado, que se chama acumulado e que o compilador inferiu o tipo inteiro baseado no valor atribuído. Também definimos para a classe a função ‘acumula‘ que recebe um inteiro, guarda o valor acumulado até então da soma com o parâmetro passado e devolve tal valor. Vamos instanciar um objeto da nossa classe e fazer a chamada ao método:

1
2
scala> val ac = new AcumulaSoma
ac: AcumulaSoma = AcumulaSoma@cbbe37

Algumas diferenças com o Java (supondo que estamos mais acostumados com a sintaxe do Java) já podem ser notadas. Além da inferência do tipo de ‘ac‘ para ‘AcumulaSoma‘, criamos ‘ac‘ com a a palavra reservada ‘val‘, ou seja, estamos dizendo que diferente de ‘var‘ onde criamos uma variável, estamos criando um valor e estamos garantindo em tempo de compilação que este valor não pode ser alterado no código. No Java teríamos que usar a palavra ‘final‘ para obter o mesmo comportamento, em Scala temos que “satisfazer menos o compilador“. Também não foi necessário usar ‘()‘ para invocar o construtor de AcumulaSoma, e assim como no Java toda classe em Scala tem por padrão o construtor que não recebe parâmetros com acesso público. Continuando o exemplo:

1
2
3
4
5
scala> ac.acumula(2)
res0: Int = 2

scala> ac.acumula(1)
res1: Int = 3

Nada de novidade aqui, estamos invocando a função ‘acumula‘ no objeto ‘ac‘. Porém ‘acumula‘ é uma função que recebe um único parâmetro e devolve um valor. Dessa forma podemos executar a chamada da nossa função da outra forma que vimos anteriormente:

1
2
scala> ac acumula 4
res2: Int = 7

No Java conseguimos definir classes estáticas. Em Scala não existe exatamente o conceito de classes, atributos e parâmetros estáticos, porém existe um conceito mais bem definido: ‘object‘. Criamos um ‘object‘ igual criamos uma classe, com a diferença de que não é possível instanciarmos um object, afinal estamos definindo o próprio. Com essa diferença, estamos garantindo em tempo de compilação que o design do código, em que foi tomada a decisão de restringir a existência de apenas uma definição para determinada classe seja seguida. Em Java também é possível garantir tal critério em tempo de compilação, mas demanda a escrita de bem mais código e de uma compreensão um pouco maior do funcionamento e limitações da linguagem. Um exemplo de object:

1
2
3
4
5
scala> object Objeto { def valor = 5 }
defined module Objeto

scala> Objeto.valor
res3: Int 5

Existem os tipos primitivos básicos em Scala como Int, Long, Boolean, Float, Double, Short, Byte, Char e String, sendo que String é a String do ‘java.lang‘. Um fato interessante sobre Scala é que como a linguagem roda em cima da JVM, todas as bibliotecas disponíveis para Java também estão disponíveis para Scala.

O tipo que não vimos ainda é o ‘void‘. Em Scala não existe o conceito de void, toda função devolve um valor e quando não há um valor explícito a ser devolvido o compilador se encarrega de devolver um valor do tipo ‘Unit‘. Exemplo:

1
2
scala> def imprime = print(“Hello!”)
imprime: Unit

‘print’ é uma função que imprime um valor no terminal e não devolve valor, logo nossa função ‘imprime‘ também não devolve valor, portanto o tipo devolvido é ‘Unit‘, que também pode ser expressado/escrito como ‘()‘. A diferença básica entre void e Unit, é que Scala permite criar valores e variáveis do tipo Unit, e em Java por exemplo não é possível criar uma variável do tipo void. Também é possível analisar o valor devolvido por qualquer função mesmo que a função não devolva um valor definido e neste caso será um Unit. Um exemplo trivial de como usar este comportamento:

1
2
3
4
5
scala> def num = 9
num: Int

scala> def verificaUnit(f: => Any) = { f match { case x:Unit => print(“Eh Unit!”) case _ => print(“Nao eh Unit!”) } }
verificaUnit: (f: => Any)Unit

O tipo ‘Any‘ é análogo ao ‘Object‘ do Java, portanto pode ser qualquer valor, função ou objeto.

Nessa função estamos usando um tipo de switch case para obter o mesmo comportamento do ‘instanceof‘ em Java, afinal não existe tal operação em Scala. O que está acontecendo é que a função verificaUnit recebe uma função que não recebe argumentos e devolve um valor qualquer. A função ‘f‘ é então evaluada e o resultado da função é testado nos cases da operação ‘match‘. Caso seja do tipo Unit, imprimimos “Eh Unit!”, e no caso padrão imprimimos “Nao eh Unit!”. Repare que diferente do ‘switch‘, no ‘macth‘ não temos que chamar a operação ‘break‘ para não executar os outros casos. Para testar verificaUnit vamos fazer a chamada usando nossas outras duas funções que foram definidas:

1
2
3
4
scala> verificaUnit(num)
Nao eh Unit!
scala> verificaUnit(imprime)
Hello!Eh Unit!

Um exemplo mais prático

Vamos implementar um exemplo um pouco mais prático que calcula a raiz quadrada aproximada de um número. Para isso vamos usar o método de Newton de aproximações sucessivas. A idéia é bem simples, nada mais é do que uma busca binária entre os palpites que se aproximam cada vez mais da raiz quadrada do número passado. Vamos começar definindo uma função que diz se a raiz encontrada é boa o suficiente para ser o resultado:

1
2
3
4
5
scala> def abs (x: Double) = if (x > 0) x else -x
abs: (x: Double)Double

scala> def proximaOSuficiente(palpite: Double, x: Double) = abs((palpite * palpite) – x) < 0.0001
proximaOSuficiente: (palpite: Double,x: Double)Boolean

O bloco if é igual a sintaxe usada no Java, o mesmo vale para o else e o else if. Na segunda função estamos verificando se o número elevado ao quadrado é próximo o bastante do original. Agora vamos definir a função que faz um palpite melhor:

1
2
scala> def melhoraPalpite(palpite: Double, x: Double) = (palpite + x / palpite) / 2
melhoraPalpite: (palpite: Double,x: Double)Double

O que fizemos foi pegar um número para palpite que está entre o nosso palpite anterior e x dividido sobre o palpite anterior, onde x é o número que queremos obter a raiz quadrada. O método de Newton garante que para x >= 1 essa aproximação é sempre válida. Vamos agora a função que executa o método de Newton propriamente dito:

1
2
3
scala> def raizNewton(palpite: Double, x: Double): Double =
     | if (proximaOSuficiente(palpite, x)) palpite else raizNewton(melhoraPalpite(palpite, x), x)
raizNewton: (palpite: Double,x: Double)Double

Estamos calculando a raiz quadrada de modo recursivo até que o resultado seja bom o suficiente. Agora basta definir uma base para nossa função, para isso iremos pré-definir um valor para o palpite base, guardando a chamada nesse escopo em uma outra função:

1
2
scala> def raizQuadrada(x: Double) = raizNewton(1, x)
raizQuadrada: (x: Double)Double

Pronto, basta brincar com algumas chamadas para nossa função que calcula a raiz quadrada =).

1
2
scala> raizQuadrada(169)
res4: Double = 13.000000070110696

O resultado obtido não é muito preciso, mas também essa não é a melhor maneira de se calcular a raiz quadrada, inclusive para números muito grandes o algorítmo não funciona por restrições com a precisão do Double.

Algumas Considerações

A grande moda das linguagens funcionais está surgindo porque acreditasse que elas são o futuro para a programação concorrente e paralela, de que se o seu programa foi escrito em uma linguagem funcional você terá ganho o benefício da execução concorrente sem grandes esforços, bem, isso não é verdade. Linguagens funcionais como qualquer outro paradigma necessitam que o programa seja escrito de maneira que seu design seja voltado para execução concorrente ou paralela, a difenrença é que a sintaxe e as ferramentas disponíveis nas linguagens funcionais facilitam tal design.

Existem algumas técnicas de programação que surgiram com linguagens funcionais, como por exemplo Recursão em Cauda, que não entrarei no mérito nesse post mas que vale a pena pesquisar sobre o assunto. Tais técnicas facilitam a vida do compilador no momento em que for possível ser feita algum tipo de otimização.

Uma comparação que logo surge na cabeça dos programadores é: qual linguagem é melhor, Scala ou Java? A resposta é fácil… nenhuma. Cada linguagem tem um escopo e paradigma de atuação diferente, não tem como comparar ambas. O que talvez faça sentido comparar sejam fatores mais fora do domínio da linguagem, como por exemplo o tamanho da comunidade que utiliza efetivamente a linguagem, o tipo de suporte, a documentação disponível, as restrições de uso, mas em geral depende do caso de uso específico para o seu problema, e principalmente do gosto do programador.

Por enquanto é isso, em um próximo post tratarei de alguns outros tipos de funções e falarei um pouco mais sobre currying. Também darei exemplos de tipos diferentes de declarações de classes e objetos.

Referência: Scala By Example, Martin Odersky

« Entradas anteriores | Entradas recentes »

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2791 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com