segunda-feira, 26 de janeiro de 2009

Ajudando os amigos Anddev.org

Olá pessoal, hoje venho deixar um link de um blog parceiro www.anddev.org

Seu fundador é o diretor chefe do desenvolvimento do SDK Android.
A google tem um sistema de rancking de Blogs, assim distribuindo varios benefícios para seus usuários.
Então pessoal visitem AndDev.org.


terça-feira, 20 de janeiro de 2009

Palestra Floripa Flex

Devido ao grande numeros de inscritos para a palestra do dia 21/01 em Florianopolis, os organizadores do evento resolveram repetir a palestra no dia 22/01.


Sendo assim aproveitem a oportunidade.

segunda-feira, 19 de janeiro de 2009

Links de Projetos Flex - Parte 2

Daew pessoal blz, então segue abaixo uma lista de links que direcionam para projetos feitos em flex. Na verdade estes projetos são na realidade pequenos frameworks free.
ou seja se em algum projeto tiver a funcionalidade que você deseja fazer você pode baixar a lib, ou simplesmente olhar o código fonte disponível no site e aproveitar o que achar melhor.
É sempre bom lembrar que nem sempre é preciso reinventar a roda :)


Visitem Vale a pena.

Criando ToogleButton com imagem

Salve pessoal blz ?

Então olhando pelos foruns de Flex da vida percebi um dificuldade do novos desenvolvedores em criar ToogleButton com Imagem.
Então aí vai mais um Flex Fast Code

< xmlns:mx="http://www.adobe.com/2006/mxml" 
width="100%" height="100%"  horizontalAlign="center" verticalAlign="middle">
< ![ CDATA[
[Embed(source="../../../img/Error.png")]
         private static var erro: Class;
        
         [Embed(source="../../../img/Cadastro.png")]
         private static var cadastro: Class;
        
         [Embed(source="../../../img/Listar.png")]
         private static var listar: Class; 
]]>

< mx:togglebuttonbar direction="vertical">
< mx:dataProvider >
< mx:Array>
< mx:Object label="Attribute" icon="{erro}"/>
< mx:Object label="Attribute 2" icon="{cadastro}"/>
< mx:Object label="Attribute 3" icon="{listar}"/>
< /mx:Array>
< /mx:dataProvider>
< /mx:togglebuttonbar>

terça-feira, 13 de janeiro de 2009

Flex: o que pode fazer para nós

Na ocasão da criação do grupo de usuários Adobe Flex em Florianópolis (FloripaFlex), a Sofshore está promovendo a palestra "Flex: o que pode fazer para nós". 


A palestra é direcionada tanto a desenvolvedores e quadros técnicos quanto a gerentes de TI.

Mario júnior, membro eminente da comunidade Flex no Brasil apresentará a plataforma e sua integração nas arquiteturas atuais. Josiane Milanez, Analista Java/Flex sênior apresentará as vantagens da plataforma para os diversos cargos, desenvolvedores e gerentes.

Horário: 21/01, 19:00 
Endereço : ACATE (Associação Catarinense de Empresas de Tecnologia) 1o andar Rua Lauro Linhares, 589 88036-001 – Trindade Florianópolis - SC

Inscrição : gratuita pelo email info@sofshore.com.br. 

Movimento Atualize seu Browser -Imasters

Atualize seu navegador
Campanha para eliminar browsers antigos do mercado

Desenvolvedores ainda perdem muito em produtividade devido a navegadores desatualizados, sem suporte às funcionalidades e tecnologias atuais para alcançar seus clientes, limitando soluções e criando dores de cabeça desnecessárias.

O Internet Explorer 6.0 (lançado em 2001) ainda participa de 35% do mercado de navegadores. É um browser que não acompanha o estágio atual da Internet, possui falhas de segurança e limita todo o potencial de uma Internet melhor para todos nós.

Página da campanha: http://imasters.uol.com.br/crossbrowser/

Faça a sua parte
Ajude a tornar a Internet ainda melhor. Divulgue em seu website a faixa da campanha, avise os amigos.

segunda-feira, 12 de janeiro de 2009

Internacionalizando Aplicações Java

Bom pessoal sempre vejo iniciantes no desenvolvimento WEB, ter dificuldade em aplicar I18N em suas aplicações, hoje irei demonstrar um pequeno exemplo de como é simples.

package com.teste;

import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author Prestes
 */
public class MessageHelper {

private final static Log logger = LogFactory.getLog(MessageHelper.class);

/* "messages" é o nome do arquivo .properties que irá armazenar as mensagens */
private final static ResourceBundle messages =  ResourceBundle.getBundle("messages",
Locale.getDefault());
// Foram criadas constantes para armazenar as chaves das mensagens
public static final String CODE_CAN_NOT_BE_NULL = "InvalidCodeException.CodeCanNotBeNull";
public static final String NAME_CAN_NOT_BE_NULL = "InvalidNameException.NameCanNotBeNull";
/**
* Retorna a mensagem baseada na chave passada como parametro, caso nao encontre retorna a propria  * chave
* @param id the message identifier
* @return the localized string corresponding to the message identifier
*/
public static String getString(String id) {
String message = id;
try {
message = messages.getString(id);
} catch (MissingResourceException e) {
logger.warn("Não foi encontrado a mensagem para a chave \"" + id  + "\"");
}
return message;
}
}
 

A única atenção que deve-se ter na classe acima é que o nome do arquivo .properties "messages" irá ser apenas o pre fixo.  O porque disso é o seguinte, em aplicações WEB deve-se adicionar o Locale como parametro na Classe ResourceBundle, assim caso o Locale Default seja o inglês o nome do arquivo será da seguinte maneira: messages_en_US.properties; em portugues seria: messages_pt_BR.properties.

No meu caso eu coloquei os aquivos messages_pt_BR.properties. e messages_en_US.properties na raiz do projeto.


/* A classe abaixo irá testar a internacionalização */
package com.teste;

public class HelloWord {
public static void main(String[] argumentos) {
ResourceBundle resourceBundle = ResourceBundle.getBundle("com.teste.messages");
System.out.println(resourceBundle.getString("InvalidNameException.CodeCanNotBeNull"));
}

}


É isso pessoal não tem muito mistério apenas um pouco de atenção e estudo.
Caso tenham duvidas ou dificuldades postem suas dúvidas ou entre no site da SUN

sexta-feira, 9 de janeiro de 2009

Primeira release do Apache MyFaces Extensions Validator

O time do Apache MyFaces anunciou a primeira release do MyFaces Extensions Validator.

O MyFaces Extensions Validator é um framework de validação plugável para validações que utilizam annotations. Ele disponibiliza um conjunto avançado de features para as versões 1.1.x e 1.2.x do JSF.

Fonte: TheServerSide.com

quinta-feira, 8 de janeiro de 2009

Criando um Map no Flex similar ao do Java

Olá pessoal, hoje irei mostrar como criar um objeto Map no Flex similar ao do Java.



import mx.controls.Alert;
private var mapCustom:Object;
public function teste():void{
mapCustom = new Object();
pupuleMap();
Alert.show(acheObjetoNoMap("Feira").toString());
}
/**
 * Preenche o objeto map com dados ficticios.
 */
private function pupuleMap():void{
mapCustom["Feira"] = "Xuxu, Melão";
mapCustom["Escola"] = "Professores, Alunos";
}
/**
 * Retorna um objeto do Map caso exista uma chave com o valor passado como                                  * parametro
 */
private function acheObjetoNoMap(value:Object):Object{
return mapCustom[value];
}
]]>

quarta-feira, 7 de janeiro de 2009

Links de projetos Flex - pt 01

Daew pessoal blz, então segue abaixo uma lista de links que direcionam para projetos feitos em flex. Na verdade estes projetos são na realidade pequenos frameworks free.
ou seja se em algum projeto tiver a funcionalidade que você deseja fazer você pode baixar a lib, ou simplesmente olhar o código fonte disponível no site e aproveitar o que achar melhor.
É sempre bom lembrar que nem sempre é preciso reinventar a roda :)

* http://code.google.com/p/beni-as3-library
* http://code.google.com/p/flexforum
* http://code.google.com/p/mediacorelib/
* http://code.google.com/p/xpath-as3/
* http://code.google.com/p/flexstuff/

Salários na área de TI

Olá amigos hoje recebi este link de uma colega de trabalho, no qual este mostra uma tabela de cargos e sálarios dos profissionais de TI.

No papel tudo é bonito e atrativo, mais na vida real sabemos que ainda está muito longe desta realidade.

Livros Free

Daew pessoal, hoje eu estava vasculhando a net e encontrei um site bem legal que contém Livros Free. Vale a pena para um tempo e dar uma olhada.

Validador de Object

Daew pessoas tudo di boas, hoje trago um outro Flex Fast Code.

Este cara é responsavel por verificar se um object é do tipo Array

package validadores{

import mx.validators.Validator;
import mx.validators.ValidationResult;

public class ValidArray extends Validator {
public static var _ERRO_NAO_EH_ARRAY:String = "erroNaoEhArray";
public var msgNaoEhArray:String;
public var msgArrayVazio:String;
public function ValidArray() {
super();
this.msgNaoEhArray = "Objeto validado não é array!";
this.msgArrayVazio = "A lista não pode ficar vazia!";
this.requiredFieldError = this.msgArrayVazio;
}
/**
* Verifica se o Objeto "value" é um Array
* @param Object value
* @return Array
*/ 
override protected function doValidation(value:Object):Array {
var erros:Array = super.doValidation(value);
try {
if ( !(value is Array) )
erros.push( new ValidationResult(true, null, _ERRO_NAO_EH_ARRAY, this.msgNaoEhArray) );
} finally {
return erros;
}
}
}
}

terça-feira, 6 de janeiro de 2009

Formatador de moeda - Padrão Brasileiro

Daew pessoal blz,
Hoje estarei trazendo um fast code para Flex.
O codigo abaixo ensina como formatar moedas para o padrão brasileiro.



package validadores{

import mx.validators.NumberValidator;

public class ValidFloatBrasileiro extends NumberValidator {

//este validador validara a faixa de min e max value
//pois existe um BUG em NumberValidator, que nao consegue validar um numero em formato brasileiro

private var validadorRangeNumero:NumberValidator;

//indica uma string que mesmo nao sendo numero nao gerara msg de erro de validacao
public var textoValido:String;

public function ValidFloatBrasileiro() {
super();
this.decimalSeparator = ",";
this.thousandsSeparator = ".";
this.requiredFieldError = "Este campo é obrigatório!";
this.decimalPointCountError = "O ponto decimal só pode ocorrer uma vez";
this.exceedsMaxError = "O número informado é maior que o máximo permitido.";
this.integerError = "O número deve ser inteiro.";
this.invalidCharError = "O campo possui caracteres inválidos (não numéricos).";
this.lowerThanMinError = "O número informado é menor que o mánimo permitido.";
this.negativeError = "O número deve ser maior do que 0.";
this.precisionError = "O número possui mais casas decimais do que o máximo permitido.";
this.separationError = "O separador de milhar deve ser seguido de trás dígitos.";

this.validadorRangeNumero = new NumberValidator();
this.validadorRangeNumero.requiredFieldError = "Este campo é obrigatório!";
this.validadorRangeNumero.decimalPointCountError = "O ponto decimal só pode ocorrer uma vez";
this.validadorRangeNumero.exceedsMaxError = "O número informado é maior que o máximo permitido.";
this.validadorRangeNumero.integerError = "O número deve ser inteiro.";
this.validadorRangeNumero.invalidCharError = "O campo possui caracteres inválidos (não numéricos).";
this.validadorRangeNumero.lowerThanMinError = "O número informado é menor que o mánimo permitido.";
this.validadorRangeNumero.negativeError = "O número deve ser maior do que 0.";
this.validadorRangeNumero.precisionError = "O número possui mais casas decimais do que o máximo permitido.";
this.validadorRangeNumero.separationError = "O separador de milhar deve ser seguido de trás dígitos.";
}

/**
* Valida um numero em formato brasileiro e
* retorna uma Array de ValidationResult.
*
* @param Object value
* @return Array
*/

override protected function doValidation(value:Object):Array {
if (textoValido != "" && value == this.textoValido)
return new Array();

//primeiro faz as validacoes de formato...
var resposta:Array = super.doValidation(value);

if (resposta != null && resposta.length > 0) {
//se nao deu problema na validacao acima
//deve transformar o numero no padrao americano, para poder testar o min e max value

this.validadorRangeNumero.minValue = this.minValue;
this.validadorRangeNumero.maxValue = this.maxValue;
this.validadorRangeNumero.allowNegative = this.allowNegative;
this.validadorRangeNumero.domain = this.domain;
this.validadorRangeNumero.precision = this.precision;

var numeroIngles:String;
if (value is String) {
numeroIngles = (value as String).replace(".", "?");
numeroIngles = numeroIngles.replace(",", ".");
numeroIngles = numeroIngles.replace("?", ",");
var results:Array = this.validadorRangeNumero.validate(numeroIngles).results;
if (FuncoesArray.naoEstaVazio(results))
resposta = resposta.concat( results );
}
}
return resposta;
}
}
}