AbsolutoBrasil/ Actionscript Frameworks/ Comunidade

Chamada de colaboradores para o AbsolutoBrasil

Estou precisando de colaboradores para o projeto AbsolutoBrasil.

Semana passada eu retomei o projeto AbsolutoBrasil que visa fortalecer o desenvolvimento de aplicações RIA em Flex de forma fácil.

Nesta nova versão existe uma série de aproveitamentos e novidades, entre elas um MVC. Sendo assim fácil a criação de Model, View e Controller para sua aplicação, muitos componentes de controle, várias classes utilitarias, integração com outras API, Dentre outras idéias.

É um projeto inteiramente Open-source, que você pode encontrar aqui.

Eu não sei se foi por falta de conhecimento dos desenvolvedores ou se não atingiu a forma esperada como eu achei que fosse atingir, mais estou em busca de colaboradores para o projeto.

Se você tem um tempo livre, 2 horas por dia e quer entrar para o time do AbsolutoBrasil, entre em contato.

Estamos precisando de desenvolvedores, novas idéias, snippets,beta testes, implementações. Tudo será bem vindo na medida do possível.

Entre em contato direto comigo. igorcosta@igorcosta.com

AbsolutoBrasil/ Actionscript Frameworks/ AS 3.0/ Flex/ Flex 3/ Flex 3 Documentação/ Flex 3 Open-Source/ Flex Componentes/ frameworks/ Labs/ Open-source

Adicionando um TabManager ao TabNavigator de seu projeto

Em um dos projetos que estamos desenvolvendo chegadou-se a uma certa necessidade de usar um manager para algumas views. Controlar isso via interface é horrível, quanto maior genérico fique sua view melhor.
Gostaria de compartilhar com vocês esta classe que faz justamente isso, organizar e administrar melhor as abas do TabNavigator. Que inclusive estará fazendo parte dos managers do novo AbsolutoBrasil 1.5 que está vindo por ai. Porém como vai demorar um pouquenho para sair segue a classe bem documentada.

Caso de uso:

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
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application applicationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
 
	</mx><mx :Script>
		< ![CDATA[
			import mx.controls.Alert;
			import mx.containers.Canvas;
			import mx.events.ItemClickEvent;
 
			import br.absolutobrasil.managers.TabManager;
 
			private function init():void {
					TabManager.tabNavigator = minhaTabNav;
			}
			public function switchBotoes(event:ItemClickEvent):void {
					switch(btns.selectedIndex) {
						case 0:
								TabManager.createNewTab(Canvas,"Nova Aba","001");
								break;
						case 1:
								TabManager.removeSelectedTabByIndex(minhaTabNav.selectedIndex);
								break;
						case 2:
								Alert.show(TabManager.getUniqueTab("001").toString());
								break;
					}
			}
		]]>
	</mx>
	<mx :Array id="arr">
			<mx :Object label="Criar Aba"/>
			<mx :Object label="Deletar Aba" />
			<mx :Object label="Pegar Id da Aba"/>
	</mx>
	<mx :TabNavigator id="minhaTabNav" width="695" height="375" x="213" y="67">
		</mx><mx :Canvas label="" width="100%" height="100%">
		</mx>
 
 
	<mx :ButtonBar itemClick="switchBotoes(event)" id="btns" dataProvider="{arr}" x="213" y="20">
	</mx>

Classe para adicionar à sua biblioteca

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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package br.absolutobrasil.managers
{
    /**
    * 	http://www.mozilla.org/MPL/
        THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT
        ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
        BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
        FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  ALSO, THERE IS NO WARRANTY OF
        NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT.  IN NO EVENT SHALL MACROMEDIA
        OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
        EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
        PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
        OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
        WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
        OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF
        ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        *
        * Parte original http://coenraets.org/blog/
        * Modificações - http://www.igorcosta.com
 
	*/
	import mx.containers.TabNavigator;
	import mx.core.Container;
	import mx.events.ChildExistenceChangedEvent;
 
	public class TabManager
	{
		/**
		 * @Constructor
		 *
		 */
		public function TabManager()
		{
		}
 
		private static var _tab:TabNavigator;
 
		private static var uniqueTabs:Object = new Object();
 
		/**
		 * Seta o manager ao valor de um TabNavigator existente na aplicacao para iniciar as operacoes
		 * @param tabNavigator
		 *
		 * @example of uses:
		 * <listing version="3.0">
		 *              import br.absolutobrasil.managers.*;
		 * 				var minhaAba:TabNavigator = new TabNavigator();
		 *              private function init():void {
		 *                  TabManager.tabNavigator = minhaAba;
		 *              }
		 * </listing>
		 *
		 */
		public static function set tabNavigator(tabNavigator:TabNavigator):void
		{
			_tab = tabNavigator;
			_tab.addEventListener(ChildExistenceChangedEvent.CHILD_REMOVE,
				function (event:ChildExistenceChangedEvent):void
				{
					for (var uniqueId:String in uniqueTabs)
					{
						if (uniqueTabs[uniqueId] == event.relatedObject)
						{
							uniqueTabs[uniqueId] = null;
							return;
						}
					}
				});
		}
		/**
		 *  Cria uma nova Aba
		 *
		 * @param tabClass - o alvo ou componente que será criado
		 * @param label - Label que aparecerá na aba;
		 * @param uniqueId - Caso você queira definir um id único para a aba
		 * @return uma nova aba criada ao container posicionado como target
		 *
		 */
		public static function createNewTab(tabClass:Class,label:String='', uniqueId:String=null):Container
		{
			if (uniqueId && uniqueTabs[uniqueId])
			{
				_tab.selectedChild = uniqueTabs[uniqueId];
				return uniqueTabs[uniqueId];
			}
 
			var tab:Container = new tabClass();
 
			if (uniqueId)
			{
				uniqueTabs[uniqueId] = tab;
			}
 
			_tab.addChild(tab);
			_tab.label = label;
			_tab.selectedChild = tab;
			return tab;
		}
		/**
		 *Seta um id Unico para a aba desejada, passando obrigatoriamente o id que você deseja setar e o alvo que receberá.
		 * @param uniqueId
		 * @param tab
		 *
		 */
		public static function setUniqueTab(uniqueId:String, tab:Container):void
		{
			uniqueTabs[uniqueId] = tab;
		}
		/**
		 * Remove a aba desejada.
		 * @param tab
		 *
		 */
		public static function removeTab(tab:Container):void
		{
			_tab.removeChild(tab);
		}
		/**
		 *Remove a aba passando a posicao dela necessária, caso não queria controlar isso por id.
		 * @param index
		 *
		 */
		public static function removeSelectedTabByIndex(index:int):void {
			_tab.removeChildAt(index);
		}
		/**
		 * Remove todas as abas existentes no TabNavigator
		 * @param tabNavigatorTarget
		 *
		 */
		public static function removeAllTabs(tabNavigatorTarget:TabNavigator):void {
				_tab = tabNavigatorTarget;
				_tab.removeAllChildren();
		}
		/**
		 *Pega o Id único da aba desejada, não precisa selecionar.
		 * @param uniqueId
		 * @return
		 *
		 */
		public static function getUniqueTab(uniqueId:String):Container
		{
			return uniqueTabs[uniqueId];
		}
	}
}
AbsolutoBrasil/ Comunidade

Comunidade colaborativa primeiro passo dado

A Datasul no ultimo dia 31 de março realizou um encontro de software houses do Brasil, para falar de uma das melhores idéias que eu presenciei em termos de “colaboração ativa para desenvolvedores de software”.

Para mim, foi sem dúvida foi muito importante, além de ter apenas “peixes grandes” no encontro, pude participar à convite da Datasul presencialmente; O que de fato me deixou muito contente por poder opinar e debater sugestões e implementações corriqueiras da idéia.

O que eu não imaginava era que grande parte do público foi on-line, muita gente de todo o Brasil participando e dando suas opiniões e idéias.

Nós aqui na igorcosta.com apoiamos fortemente a idéia e já demos o ponta pé inicial para a idéia, sendo ai um dos primeiros colaboradores da comunidade colaborativa.

Uma das nossas criações que irá parar no portal DataSul Open-source é o AbsolutoBrasil. Como também outros novos componentes que estamos desenvolvendo.

Ainda sem muita divulgação, cada um pode participar da comunidade colaborativa proposta pela DataSul. Como posso?

Para desmificar algumas de suas dúvidas à isso, leia o F.A.Q abaixo.

P:Quem pode participar da comunidade?

R: Pessoa física ou jurídica, empresa ou profissional liberal ou de quintal com qualidade em seus códigos ou idéias arrasadoras.

P: Sou um desenvolvedor com pouca experiência em desenvolvimento de código (júnior), mais tenho ótimas idéias na cabeça para componentes ou soluções, Como posso participar dessa forma?

R: Idéias, São a alma das ações, se você tem idéias, você pode participar sugerindo-as no fórum da comunidade, debatendo com o resto dos membros sobre essas idéias.

P: Quais as tecnologias que podem participar da comunidade como forma de colaboração de código fonte?

R: Atualmente a DataSul está apenas suportando Adobe Flex e Java, por serem ambas tecnologias open-source e uma delas por serem mais usadas em território nacional. Futuramente terá suporte a outras tecnologias open-source.

P: Quanto custa para participar da comunidade?

R: Zero reais, gratuitamente você pode participar.

P: Okay, Contribuo com meu código fonte ou idéia única, qual o retorno que eu vou ter com isso?

R: Sem dúvida foi uma das perguntas mais comentadas no primeiro encontro com os principais softwaréouses e participantes presentes.
Quando se tem uma mente de comunidade, você tem que abrir fogo para todos os lados, mostrar seu código fonte não te dá um retorno imediato, porém se você for esperto e saber enxergar a oportunidade mesmo quando outros não. Esta é a razão pela qual você vai publicar seu código fonte e expor sua idéia.
Trabalhando-se com comunidade em um modelo que até a FGV tem que é open-source marketing. Veja o google, mysql, fedora, ubuntu, são todos gratuitos de código livre e estão fazendo o maior sucesso na comunidade de desenvolvedores mundiais. Por que não o seus?

Facilmente percebível a oportunidade a publicar seu código fonte é a venda de serviços, uma vez que você dá gratuitamente o código fonte, pode-se vender ou o cliente que pegar seu código lhe chamar para uma consultoria que valerá à pena.

Mais ponha em mente que colaborar com comunidade é trabalho sem retorno imediato, são os dividendos em mercado de ações.

P: Quais outras formas de participação?

R:
Participando das discussões em fóruns;
Sugerindo melhorias na documentação;
Usando os componentes e sugerindo melhorias;
Usando os componentes e reportando bugs;
Lendo o manual de como fazer o build de um componente e melhorando o processo de empacotamento;
Sugerindo como testar e melhorar os componentes;
Enviando testes unitários;
Olhando os códigos e sugerindo melhorias na estrutura interna;

P: Ainda tenho dúvidas, onde posso conseguir informações diretas?

R: Envie um e-mail para : contato@opensource.datasul.com.br

Lembre-se que a peça fundamental para isso funcionar é você.

AbsolutoBrasil

AbsolutoBrasil 1.0 grandes novidades e mais uma atualização

Agora o AbsolutoBrasil pode ser acessado via SVN. Agora você tem a chance de ver em tempo real as mudanças na biblioteca e ficar sempre com a ultima versão atualizada.

Ainda continuaremos distribuindo com formatos .SWC para as versões 2.0.1 e 3.0 do Flex.

Acesse a página do Google Code do projeto, e comece a sincronizar os fontes.

Como usar o SVN para sincronizar com o código fonte do AbsolutoBrasil?

Primeira coisa a fazer é baixar o TortoiseSVN ou SubEclipse, para ser breve e de fácil absorção por todos, vamos basear os próximos passos no Tortoise.

1. Baixe o Tortoise.

2. Depois de baixar e instalar, você vai criar uma pasta comum.

3. Selecione a pasta e clique com o botão direito e escolha a opção SVN CheckOut

4. Insira a seguinte URL no campo ( URL Repository ) https://absolutobrasil.googlecode.com/svn/trunk/absolutobrasil

5. Clique OK e pronto ele vai fazer o download do código fonte do AbsolutoBrasil em segundos.

Ai agora é só você usar dentro de seu projeto.


Visite a página do Projeto no Google
, estamos adicionando mais conteúdo explicativo para o projeto.

Novidades Adicionadas

novas classes adicionadas

CSSUtil
StringUtil
NavegadorUtil
ContainerUtil

Classes alteradas

EventParam

Futuras mudanças

Estamos estudando uma maneira mais fácil de agregar chamadas de processos remotos dentro da biblioteca que torne mais fácil esse projeto.
Outras idéias e que vamos adicionar pre-formularios configurados para criação de telas ( Cadastro de PF e PJ ), já estão em nossas listas.

Precisamos de mais idéias a agregar a biblioteca.

AbsolutoBrasil/ AS 3.0/ Dev. Software/ Dicas/ Flex/ Flex 3/ frameworks/ Labs/ Open-source

AbsolutoBrasil 1.0 update 1, Uma nova atualização baixem.

Em 24 horas depois do lançamento AbsolutoBrasil, fizeram o download para agilizar certas tarefas na hora do desenvolvimento.

E para essas 276 pessoas que baixaram e as próximas que forem baixar, o AbsolutoBrasil sofreu mais uma alteração e para melhor. Mais classes e mais componentes.

Pacotes alterados/Adicionados/Removidos:

1
2
3
4
                  import br.absolutobrasil.eventos
		  import br.absolutobrasil.intelli
		  import br.absolutobrasil.intelli.autofill
		  import br.absolutobrasil.utils

Pacotes de utilidades foram adicionados como todas as tabelas de pesos e medidas de acordo com as regras Brasileiras do INPE. Agora você ja tem embutido conversões para m3 para dm3, cm para km, km para metro, kg para grama, polegada para metros,…,etc. Muita coisa.

E mais, agora todos os municipios do Brasil, que são ao total 5800+ está disponível via API fácil assim, você utilizando pelo lado cliente sem a chateação de esperar respostas do servidor, você pode economizar cerca de 2kb por tráfego.

Como acessar? Veja o exemplo abaixo onde carrego todas as cidades(municipios do estados do Acre e São Paulo.

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
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
	</mx><mx :Script>
		< ![CDATA[
			import br.absolutobrasil.intelli.autofill.MunicipiosSudeste;
			import br.absolutobrasil.intelli.autofill.MunicipiosNorte;
 
				public function carregaMunicipios():void
				{
							var muniacre:MunicipiosNorte = new MunicipiosNorte();
							var munisp:MunicipiosSudeste = new MunicipiosSudeste();
 
							if(cbx.selectedIndex == 0){
										// carrego cidades do Acre
											lista.dataProvider = muniacre.cidadesACRE;
							}else {
									// carrego cidades de SP
											lista.dataProvider = munisp.cidadesSAOPAULO;
							}
 
				}
		]]>
	</mx>
	<mx :List id="lista" x="216" y="45"></mx>
	<mx :ComboBox  prompt="escolha a estado" change="carregaMunicipios()" id="cbx" x="48" y="105">
			</mx><mx :Array>
						</mx><mx :String>Acre</mx>
						<mx :String>São Paulo</mx>

Fácil né?

Ah!, e sem falar que agora você conta com um comoBox para preenchimento de ano, sabe aquiles componentes que geram o ano de nascimento e você escolhe o ano. Ele é bem inteligente, pega o ano corrente da máquena do usuário e gera o resto para você. Ficou com dúvida, veja exemplo abaixo:

1
2
3
4
5
6
7
8
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="br.absolutobrasil.intelli.*">
	</mx><mx :HBox x="78" y="81"  >
		<mx :Label text="Data Nascimento"/>
		<mx :TextInput width="42"/>
		<mx :TextInput width="42"/>
		<ns1 :ComboBoxAno/>
	</mx>

Uma das limitações do Framework do Flex é na hora de passar parâmetros para eventListeners, sejam eles de qualquer tipo, e para contornar esse problema nós também adicionamos uma solução que achamos bacana na hora de fazer isso, e melhor, sem deixar você mudar a maneira de como adicionar listeners ao seus objetos . Como? Veja o exemplo abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application creationComplete="aplicarEventoListener()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
	</mx><mx :Script>
		< ![CDATA[
			import mx.controls.Alert;
 
						import br.absolutobrasil.eventos.EventListenerParam;
 
						public function aplicarEventoListener():void
						{
									botao.addEventListener(MouseEvent.CLICK,EventListenerParam.executar(novaFuncao,"Exemplo de Passagem"));
						}
						public function novaFuncao(event:MouseEvent,texto:String):void
						{
									mx.controls.Alert.show(texto);
						}
		]]>
	</mx>
 
		<mx :Button label="Executar Comandos" id="botao"/>


Download dos SWC

Para usar o AbsolutoBrasil para Flex 3, baixe esse pacote especialmente feito para o Flex 3.

Para usar o AbsolutoBrasil para o Flex 2, basta usar esse pacote especial feito para o Flex 2.

Download dos Exemplos com códigos fontes disponíveis

* Para Flex 2
* Para Flex 3

Muito mais exemplos foram colocados dentro do projeto tanto na versão do Flex 3 quando para o Flex 2.

Baixem, usem é gratuito. Vai ajudar muito você a economizar tempo. Se você quer participar em alguma idéia ainda não implementada, envie sua sugestão para nós, teremos orgulho e o prazer de colocá-la no framework.

[Update] Alguns códigos exibidos neste post podem não aparecer corretamente, devido a um problema antigo em um plug-in para exibir código fonte. Pedimos desculpas.