<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fábio Tomio # Web Analyst &#38; Developer &#187; Softwares</title>
	<atom:link href="http://www.fabiotomio.com.br/blog/category/softwares/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fabiotomio.com.br/blog</link>
	<description>Internet and continuous evolution!</description>
	<lastBuildDate>Wed, 21 Jul 2010 16:16:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Amf/Rest WebServices com PHP e Zend Framework &#8211; Conceitos!</title>
		<link>http://www.fabiotomio.com.br/blog/2009/04/06/amfrest-webservices-com-php-e-zend-framework-conceitos/</link>
		<comments>http://www.fabiotomio.com.br/blog/2009/04/06/amfrest-webservices-com-php-e-zend-framework-conceitos/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 00:38:57 +0000</pubDate>
		<dc:creator>Fábio Tomio</dc:creator>
				<category><![CDATA[Arquitetura de Softwares]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[amf]]></category>
		<category><![CDATA[Arquitetura de Software]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.fabiotomio.com/blog/?p=242</guid>
		<description><![CDATA[Olá pessoal, faz tempo, mas estou de volta! Esse ano tem TCC e além disso resolví fazer um curso de Java nos finais de semana, é, as coisas estão corridas, mas interessantes. Isso tirando o trabalho, parece que quanto mais &#8230; <a href="http://www.fabiotomio.com.br/blog/2009/04/06/amfrest-webservices-com-php-e-zend-framework-conceitos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, faz tempo, mas estou de volta! Esse ano tem TCC e além disso resolví fazer um curso de Java nos finais de semana, é, as coisas estão corridas, mas interessantes. Isso tirando o trabalho, parece que quanto mais fecho jobs mais eles surgem. Por falar em jobs estou precisando de um profissional que tenha programado uma aplicação pra MP4 playes, esses chineses genéricos, estou com um projeto e me liberaram contrar um profissional que desenvolva os firmwares pra esses dispositivos. Bom o convite está feito, quem tiver alguma experiência com esses dispositivos é só mandar email pra fabio.tomio@mindsetfilms.com.br.</p>
<p>Mas vamos falar do assunto do post!</p>
<p>Chega um certo momento em que suas aplicações alcançam uma dimensão na qual é preciso fazer umas conversarem com as outras, nem sempre isso acontece, vai muito das necessidades, mas quando isso acontece, você se depara com ambientes distintos, datacentes distintos, banco de dados distintos, frameworks distintos, tecnologias distintas, arquiteturas distintas, problemas com performance, lógicas sem lógica&#8230; E como fazer seus mini-monstros conversarem? Foi essa a minha necessidade nos últimos meses. Como conseguir melhorar a qualidade no desenvolvimento de aplicativos web, e fazer a integração entre eles, se os mesmos não permitem fazer isso? Várias realidades, várias variáveis, que muitas vezes descobrimos somente quando alguma coisa é alterada, um ninho de abelhas.</p>
<p>Vendo esse senário a primeira saída era estudar. Entendi com a realidade na qual estava imerso que as coisas estavam grandes de uma forma, que não podia mais trabalhar com sistemas e sites distintos, tudo estava pulverizado em vários lugares diferentes, se um domínio caía, não impactava somente o mesmo, várias coisas paravam. Muita coisa devia ser refeita, mas refazer da mesma maneira não seria a solução, como fazer então? Só o MVC não estava me ajudando a organizar as coisas, muita coisa não era aproveitada.</p>
<p>As coisas são mais ou menos assim.<a href="http://www.fabiotomio.com.br/blog/wp-content/uploads/2009/04/old-archtecture2.png"><img class="aligncenter size-full wp-image-253" title="old-archtecture" src="http://www.fabiotomio.com.br/blog/wp-content/uploads/2009/04/old-archtecture2.png" alt="old-archtecture" width="351" height="437" /></a></p>
<p>A figura ilustra de uma forma resumida como estão estruturadas as aplicações. Aplicações independentes e que em um determinado ponto precisavam consumir informações de outras aplicações. A figura não leva em consideração os datacenters, que em alguns dos casos eram distintos.</p>
<p>Como dá pra perceber na figuram existem <em>n</em> aplicações consumindo os mesmo bancos de dados, essas aplicações muitas vezes executavam processos iguais, por esse motivo mesmos processos precisavam ser reescritos em aplicações direrenres, ou pelo menos portados de um framework para outro quando fosse possível. Sem documentação, como lembrar onde o mesmo processo é executado para efetuar uma manutenção?</p>
<p>Comecei a estudar Ruby on Rails, gostei muito do que aprendí, muito rápido e objetivo, mas minha equipe iria demorar um pouco pra conseguir absorver essa nova linguagem e como as coisas são a 1000 por hora, não seria viável, espero um dia ainda poder trabalhar essa linguagem = Ruby / framework = Rails. Comecei também a ver Java e no momento que escrevo este post ainda estou fazendo um curso aos finais de semana, está me abrindo a mente pra OOP avançada e Design Patterns, o professor é muito bom, trabalha à muitos anos com o Java, a &#8220;turma&#8221; é de 3 pessoas, estou aproveitando muito, recomendo! Se forem de Curitiba mandem um e-mail que passo o contato. Depois da merchan, e muito estudo, quase espanei os parafusos, e acabei refletindo muito, levei em consideração os seguintes ítems:</p>
<ul>
<li>Equipe de desenvolvimento 100% PHP (limitador);</li>
<li>Datacenter terceirizado sem suporte à Ruby on Rails e Java (não limitador, mas burocrático/perda de agilidade);</li>
<li>Tempo necessário pra disseminar a metodologia, padrões e conhecimento necessários extremamente curto;</li>
<li>Tempo e complexidade do deployment;</li>
<li>Infraestrutura contratada, PHP + MySQL + PostgreSQL e DB2;</li>
<li>Necessidade em lidar com Flash, Flex e FMS sem traumas (prover serviços para Flash e Flex).</li>
<li>Integração com o ERP da Microsiga acessando direto o Database e/ou utilizando WebServices;</li>
</ul>
<p>Creio que esses foram os principais fatores, a minha infraestrutura é um problema, não gerencio os servidores, é tudo atravéz de chamados, isso deixa tudo muito interativo, no sentido de precisar trocar no mínimo umas 3 mensagem com o pessoal de infraestrutura da empresa pra eles interagirem com o pessoal do Datacenter, e aí o ticket ser executado. Minhas aplicações começaram a apresentar problemas, estão crescendo, e enfrento graves problemas de desempenho. Existem várias aplicações em Flex e Flash consumindo serviços desenvolvidos em PHP, um know-how que já possuímos, não seria interessante ter que reaprender tudo!</p>
<p>Sem alternativas, adivinha qual foi a minha saída? Acertou, PHP!!! É&#8230;, mas como nada nessa vida é em vão, como executar e planejar a nova arquitetura de desenvolvimento? Pensei, pensei, quando estava quase tudo meio que alinhado na minha cabeça, chamei os dois melhores programadores de equipe e joguei o desafio &#8211; Como desenvolver um webservices utilizando PHP de uma forma simples e direta?</p>
<p>Mas por que WebServices? Você vai entender mais a frente.</p>
<p>Pensaram e logo veio a ideia, trabalhar com rotas e serviços publicados utilizando WSDL e SOAP. Bem lógica a resposta. Fui mais longe, porque não implementar um Rest WS? Seguindo a idéia de &#8211; por que complicar se podemos fazer as coisas de uma forma mais simples? Se não me engano foi em um podcast do <a href="http://www.akitaonrails.com" target="_blank">Fabio Akita</a> onde ele falava de Restful e routes no Ruby on Rails que eu entendi, porque complicar uma coisa se podemos utilizar recursos já consolidados na Internet como o HTTP e suas actions? Isso pra mim iria descomplicar muita coisa, não haveria a necessidade de aprendizado de WSDL, SOAP do PHP ou o nuSOAP, sem serviços de descobertas de serviços e todas essas coisas. Existe cases melhores que o Amazon, Twitter e o Facebook pra entender que o Rest dá conta do recado no que diz respeito à aplicações com milhões de page views e que precisam de segurança?</p>
<p>Resolví o meu problema do WS, mas ainda não tinha terminado. Como mudar o resto da arquitetura a fim de conseguir consumir os serviços disponibilizados pelo WS? Como facilitar a atualização, implementação de novas funcionalidades sem ter que portar pedaços de views de uma aplicação para outra?  Pois as regras de negócios estariam no WS, cada aplicação trabalharia com as suas interfaces com o usuário, caso a funcionalidade fosse a mesma, ainda teria repetições de &#8220;pedaços&#8221; de processos, nesse caso Views repetidas.</p>
<p>Me deparei com o conceito de portlets, apresentado pela minha amiga Desirre, adaptei pra minha realidade essa idéia. Não montar uma aplicação pra cada portlet (como o Java implementa), mas montar uma aplicação com vários módulos, cada módulo com os comportamentos necessários, por exemplo, módulo de notícias, vou programar ele pra consumir os serviços das notícias necessários para exibição, paginação, busca por exemplo, e eu iria conseguir disponibilizar o mesmo módulo em aplicações distintas sem traumas sem a necessidade de replicar a mesma coisa em lugares diferentes.</p>
<p>A arquitetura como um todo ficou assim.</p>
<p><a href="http://www.fabiotomio.com.br/blog/wp-content/uploads/2009/04/new-archtecture1.png"><img class="aligncenter size-full wp-image-259" title="new-archtecture" src="http://www.fabiotomio.com.br/blog/wp-content/uploads/2009/04/new-archtecture1.png" alt="new-archtecture" width="551" height="206" /></a></p>
<p>Cabia a mim agora decidir entre utilizar um framework ou codificar tudo do zero com PHP &#8220;puro&#8221;, comecei a estudar alguns frameworks em PHP, não muitos, Code Igniter e Zend. Parei a minha busca por um framework com o Zend, mas por que um framework se possuo na minha equipe bons programadores? Simples! frameworks ajudam o desenvolvimento provendo funcionalidades testadas, em constante manutenção e evolução, mais que isso, eles provém um &#8220;conceito&#8221; de desenvolvimento, uma forma já pré definida de como codificar, cada framework define formas de como programar, como consumir as funcionalidades disponibilizadas entre outras coisas. Sabendo que no PHP o que se escreve funciona, independente da arquitetura, orientação, formatação, e conhecendo os prazos dos projetos, a idéia de utilizar um framework para o nosso desenvolvimento é obter uma fonte de recursos e funcionalidades de uma forma mais rápida e segura, além disso, ajudar a definir um conjunto de boas práticas.</p>
<p>O que mais me chamou atenção a princípio no Zend foi a quantidade de recursos disponíveis, muita coisa, dei uma olhada na sua documentação e fiquei surpreso, mais ainda por suportar publicação de serviços em Amf  e Rest, a primeira supriria a minha necessidade por prover serviços a aplicativos com tecnologia Flex e Flash a segunda era brinde&#8230;. =)</p>
<p>Me deparei então em montar o início de tudo, como trabalhar com o Zend? Um livro me ajudou em entender como as coisas funcionavam no Zend, e como as coisas não funcionavam também, minha preocupação era sempre em escalar, precisava montar um provedor de serviços em Amf/Rest com alto desempenho, já que estaria centralizando tudo, a idéia de fazer um LB (load balance) no Apache teria que ser algo simples e rápido, já que a proposta da empresa é de crescimento. Foi aí que percebí que tinha feito uma boa escolha, vindo de uma experiência com o Code Igniter (CI), Expression Engine e afins, o Zend era totalmente diferente, um novo conceito pra mim, uma lógica diferente em utilizar uma frameworrk, eu teria que montar a aplicação de acordo com as minhas necessidades, fazer o load das bibliotecas necessárias para a minha aplicação na medida que eu fosse precisando, diferente do CI onde já vem tudo estruturado e você só precisa configurar a sua aplicação, o Zend é tudo do zero, ele disponibiliza uma Library e só, você se encarrega de utilizar da forma que precisar, bem coisa do PHP isso&#8230;.</p>
<p>Depois de idealizado e estruturado e implementado o Web Services ficou como a figura abaixo.</p>
<p style="text-align: center;"><a href="http://www.fabiotomio.com/blog/wp-content/uploads/2009/04/zend-rest-amf-webservices1.png"><img class="aligncenter size-full wp-image-255" title="zend-rest-amf-webservices" src="http://www.fabiotomio.com.br/blog/wp-content/uploads/2009/04/zend-rest-amf-webservices1.png" alt="zend-rest-amf-webservices" /></a></p>
<p>Vou explicar mais ou menos como fizemos.</p>
<p>Todos as requisições dos módulos aos serviços chegam no WS no Facade, ele é responsável por pegar todas as requisições, ele valida para qual serviço foi feita a requisição e qual sua Action (POST, GET, PUT ou DELETE), em seguida valida o Token, que é um código que os modulos passam para se identificarem, como uma chave pública de criptografia. O token faz parte da camada Security, estudamos a implementação também nessa camada de validação de IP`s, como o sistema roda ditribuído no datacenter, é possível fazer a validação das máquinas que estão consumindo os serviços, melhorando ainda mais a segurança do WS. Seguindo a sequência, após a validação do token e IP, é feito o load do Server requisitado, conseguimos implementar um serviço genérico, o mesmo pode ser &#8220;rodado&#8221; pelo Zend_Rest_Server ou pelo Zend_Amf_Server sem nenhum problema, creio que essa foi uma característica muito interessante do nosso projeto, com um mesmo conjunto de classes, conseguimos disponibilizar serviços em Rest e Amf escrevendo somente uma vez. Por último um conjunto de DAO`s (Data Access Object), que nos auxiliam com o IO de dados a Bases de Dados, outros Web Services e Envio de e-Mails por exemplo.</p>
<p>No momento que escrevo este post faz mais ou menos um mês que o Amf/Rest está em funcionamento, ainda tem muita coisa pra evoluir&#8230;</p>
<p>No próximo post entro em detalhes, de como implementar o Amf e Rest Servers com exemplos e afins. Esse post foi mais a viagem do oriental aqui em como resolver o grande problema enfrentado por mim e pela equipe de desenvolvimento em manter as coisas organizadas e como conseguir um melhor aproveitamento dos funcionalidades implementadas.</p>
<p>Caso tenha alguma idéia ou dúvida fique a vontade de comentar esse post, será muito bem vindo. E caso não tenha entendido nadinha de nada comente também, posso explicar de uma outra forma em um outro post&#8230;..</p>
<p>É isso, ótima semana a todos e até mais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiotomio.com.br/blog/2009/04/06/amfrest-webservices-com-php-e-zend-framework-conceitos/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Perceptron</title>
		<link>http://www.fabiotomio.com.br/blog/2008/08/20/perceptron/</link>
		<comments>http://www.fabiotomio.com.br/blog/2008/08/20/perceptron/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 17:15:54 +0000</pubDate>
		<dc:creator>Fábio Tomio</dc:creator>
				<category><![CDATA[Estudando]]></category>
		<category><![CDATA[Inteligência Artificial]]></category>
		<category><![CDATA[Softwares]]></category>
		<category><![CDATA[artificial]]></category>
		<category><![CDATA[inteligência]]></category>
		<category><![CDATA[neurônio]]></category>
		<category><![CDATA[perceptron]]></category>

		<guid isPermaLink="false">http://fabiotomio.wordpress.com/?p=49</guid>
		<description><![CDATA[Tudo muito corrido&#8230; mas vamos que vamos&#8230; Dando continuidade aos estudos de Inteligência Artificial&#8230;. dessa vez vou publicar o Perceptron, tendo como base o neurônio no post anterior, efetuando alguns cálculos para isolarmos a Limiar, com isso chegamos a um &#8230; <a href="http://www.fabiotomio.com.br/blog/2008/08/20/perceptron/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tudo muito corrido&#8230; mas vamos que vamos&#8230;</p>
<p>Dando continuidade aos estudos de Inteligência Artificial&#8230;. dessa vez vou publicar o Perceptron, tendo como base o neurônio no post anterior, efetuando alguns cálculos para isolarmos a Limiar, com isso chegamos a um outro modelo de neurônio chamado Perceptron, não vou entrar em detalhes com relação aos cálculos, o objetivo aqui é demonstrar a prática do funcionamento do Perceptron, pra isso abaixo segue a aplicação desenvolvida por mim utilizando o Adobe Flex 3.</p>
<p>Qual a diferença desse Perceptron para o Neurônio postado anteriormente? O Perceptron através de cálculos consegue calcular seus pesos (Weight) para que sua saída seja a saída pretendida, contrário do neurônio que mantinha todos os seus parâmetros fixos.</p>
<p>Não sei se fui claro, para mais detalhes;</p>
<p><a href="http://en.wikipedia.org/wiki/Perceptron" target="_blank">http://en.wikipedia.org/wiki/Perceptron</a></p>
<p><a href="http://pt.wikipedia.org/wiki/Rede_neural" target="_blank">http://pt.wikipedia.org/wiki/Rede_neural</a></p>
<p>O Perceptron abaixo foi desenvolvido com o objetivo de se comportar como funções lógicas conhecidas.</p>
<p>OBS: O XOR não pode ser resolvido através de um único Perceptron por não ser linearmente divisível, ou seja é necessário no mínimo dois Perceptrons para que consigamos convergir.</p>
<p>Abraços a todos, até mais&#8230;.</p>
<p><span style="text-decoration:line-through;"><a href="http://www.fabiotomio.com/perceptron/" target="_blank">http://www.fabiotomio.com/perceptron/</a></span></p>
<p><a href="http://www.fabiotomio.com/projects/perceptron/" target="_blank">http://www.fabiotomio.com/projects/perceptron/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiotomio.com.br/blog/2008/08/20/perceptron/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neurônio artificial</title>
		<link>http://www.fabiotomio.com.br/blog/2008/08/01/neuronio-artificial/</link>
		<comments>http://www.fabiotomio.com.br/blog/2008/08/01/neuronio-artificial/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 03:55:59 +0000</pubDate>
		<dc:creator>Fábio Tomio</dc:creator>
				<category><![CDATA[Inteligência Artificial]]></category>
		<category><![CDATA[Softwares]]></category>
		<category><![CDATA[a.i.]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[i.a.]]></category>
		<category><![CDATA[neuronio artificial]]></category>

		<guid isPermaLink="false">http://fabiotomio.wordpress.com/?p=47</guid>
		<description><![CDATA[Desenvolvi um neurônio artificial com 3 entradas (dentritos) e a saída (axônio)&#8230;. Para quem está estudando Inteligência Artificial/Redes neurais é uma boa&#8230;. Semana que vem vou precisar desenvolver um algorítimo que calcule os pesos e a limiar, em outras palavras, &#8230; <a href="http://www.fabiotomio.com.br/blog/2008/08/01/neuronio-artificial/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Desenvolvi um neurônio artificial com 3 entradas (dentritos) e a saída (axônio)&#8230;.</p>
<p>Para quem está estudando Inteligência Artificial/Redes neurais é uma boa&#8230;.</p>
<p>Semana que vem vou precisar desenvolver um algorítimo que calcule os pesos e a limiar, em outras palavras, um neurônio que &#8220;aprende&#8221;&#8230;</p>
<p>Posto aqui também o resultado&#8230;..</p>
<p>Abraços e até mais.</p>
<p><span style="text-decoration:line-through;">Segue o link: <a href="http://www.fabiotomio.com/neuronio/" target="_blank">http://www.fabiotomio.com/neuronio/</a></span></p>
<p>Segue o link: <a href="http://www.fabiotomio.com/projects/neuronio/" target="_blank">http://www.fabiotomio.com/projects/neuronio/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiotomio.com.br/blog/2008/08/01/neuronio-artificial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe Flex, RED5 e Streaming</title>
		<link>http://www.fabiotomio.com.br/blog/2008/06/25/adobe-flex-red5-e-streaming/</link>
		<comments>http://www.fabiotomio.com.br/blog/2008/06/25/adobe-flex-red5-e-streaming/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 02:28:07 +0000</pubDate>
		<dc:creator>Fábio Tomio</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Softwares]]></category>
		<category><![CDATA[Streaming]]></category>
		<category><![CDATA[1080p]]></category>
		<category><![CDATA[adobe flex 3]]></category>
		<category><![CDATA[flash media server]]></category>
		<category><![CDATA[full hd]]></category>
		<category><![CDATA[HDV]]></category>
		<category><![CDATA[red5]]></category>
		<category><![CDATA[web cam]]></category>

		<guid isPermaLink="false">http://fabiotomio.wordpress.com/?p=15</guid>
		<description><![CDATA[Introdução Ainda lembro a minha primeira quase &#8220;transmissão&#8221; de um evento pela Internet, um festival de dublagem na minha cidade natal (litoral do Paraná) em meados de 1997/1998, o objetivo era enviar para o site do colégio imagens das apresentações. &#8230; <a href="http://www.fabiotomio.com.br/blog/2008/06/25/adobe-flex-red5-e-streaming/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Introdução</strong></p>
<p>Ainda lembro a minha primeira quase &#8220;transmissão&#8221; de um evento pela Internet, um festival de dublagem na minha cidade natal (litoral do Paraná) em meados de 1997/1998, o objetivo era enviar para o site do colégio imagens das apresentações. Na época a conexão mais rápida era de 56Kbps, é isso mesmo, linha discada, um modem externo US. Robotics que se conectava com o PC pela porta paralela, um servidor Linux para compartilhamento da conexão. Conexões USB`s não eram muito utilizadas, a Web Cam utilizava a interface paralela e também a conexão do teclado, nem perto da qualidade da imagem das Web Cams atuais. Bom, com toda essa limitação tecnológica e os meus 15 anos o que consegui foi, fazer capturas das apresentações utilizando a Web Cam, (demorava um bocadinho), e com um programa FTP eu enviava essas imagens para o host onde o site do colégio estava hospedado. Só foi possível porque o software de captura da câmera podia ser configurada para capturar as imagens quando detectava movimento, e o software FTP possibilitava o agendamento de upload toda vez que um arquivo era modificado. Foi divertido, um desafio, que foi solucionado com o pouco conhecimento e os poucos recursos disponíveis na época.</p>
<p><strong>Por que tudo isso?</strong></p>
<p>Em um passeio para ir pegar café, e dar um out do computador pra respirar um pouco, fui informado que o próximo evento da empresa que será em setembro será transmitido pela Internet, e que a responsabilidade de levantar o Know How estava nas minhas mãos. Gostei, mais um desafio para ser superado, e mais conhecimento para ser adquirido. Voltei pra minha mesa já pensando em mil possibilidade e entendendo a complexidade de concretizar tudo isso.</p>
<p><strong>Realidade</strong></p>
<p>Muitas pessoas já pensaram, é fácil, mas vamos a realidade, fatos que devemos levar em consideração:</p>
<ul>
<li>A captura da imagens é feita em HD (High Quality), 1080p pra ser mais preciso;</li>
<li>O evento não tem um local fixo para acontecer;</li>
<li>Levar em consideração a possibilidade de envio de audio/vídeos simultâneos (vários &#8220;canais&#8221;);</li>
<li>Prever como enviar ao servidor de Streaming o conteúdo (acesso à Internet);</li>
<li>A mesa de corte utilizada não possui saida de vídeo em FireWire, somente em Y,B,R e SDI;</li>
<li>Custos tendendo a zero, principalmente no que se diz respeito à Infra-estrutura e Softwares.</li>
</ul>
<p><strong>Tecnologia</strong></p>
<p>Levando em consideração esses pontos semana passada, mais exatamente na quinta-feira comecei um estudo sobre transmissão de audio/vídeo utilizando FMS (Flash Media Server), já tinha visto a algum tempo o RED5 (<span class="a">osflash.org/<strong>red5</strong></span>) achei interessante pois é Open Source (custos reduzidos) e utilizando o Java, é possivel criar os serviços e mais, montar serviços que interajam com outras aplicações, interfaces, dispositivos, tudo que o Java possibilita, isso é interessante quando se precisa de flexibilidade, característica essa que o Open Source carrega no sangue.</p>
<p>Comecei o estudo, baixei sua versão para o MAC OSX, e instalei. Sua instalação no Mac é simples, não tive problemas, o RED5 vem com uns demos, todos funcionaram perfeitamente. Bom o servidor estava rodando, agora faltava a aplicação.</p>
<p>Para a construção das aplicações decidí utilizar o Adobe Flex 3, pois já desenvolvo aplicações com ele a algum tempo, isso facilita bastante =). Não achei muita documentação do RED5 e o Flex, foi dificil fazer com que a aplicação conversasse com o RED5, mas funcionou. Primeiramente tentei reescrever as classes que vieram nos exemplos do RED5 de (Flash) ActionScript2 para (Flex) ActionScript3, foi sinistro e frustrante, dai pesquisando um pouco mais, consegui somente a classe de conexão pro RED5 em ActionScript3 (<a href="http://www.vadus.de/uni/red5/AS_red5_Connection.zip" target="_blank">http://www.vadus.de/uni/red5/AS_red5_Connection.zip</a>). Foi aí que a conexão funcionou.</p>
<p><strong>Transmissão</strong></p>
<p>Com a conexão em pé era a hora de tentar enviar o vídeo, trabalhar com as classes Video, Camera, NetStream no Flex não foi tão complicado, o Google ajudou bastante, foi atravéz dele que cheguei ao site <a href="http://www.rafaeldohms.com.br/2007/04/16/transmitindo-um-evento-ao-vivo-com-fms-os-bastidores/pt/" target="_blank">www.rafaeldohms.com.br</a> muito bom o artigo, e o Source Code disponibilizado pelo Rafael me ajudou muuuuito. Utilizei o código do Rafael como base pra montagem da classe de envio de recepção de audio/vídeo.<br />
Mas faltava uma coisa ainda, o serviço no RED5 que ficaria responsável recebimento e distribuição do audio/vídeo. Tentei algumas vezes montar um novo serviço, sem sucesso. Foi então que tive a brilhante, ou nem tão brilhante idéia de utilizar o serviço da apicação demo. Um Chat com Vídeo que vem junto com o RED5. Depois de ler e re-ler o Java do serviço identifiquei o funcionamento do serviço e consegui enviar o conteúdo. Utilizei a própria interface do chat pra ver o resultado da transmissão. Faltava a última coisa agora, a parte de recepção do conteúdo. Essa não foi tão difícil, mais um pouco de leitura do Java do serviço do RED5 e, pronto, funcionando.</p>
<p><strong>Testes</strong></p>
<p>Testes de preformance e consumo de banda, na rede da minha casa, apontaram uma boa qualidade e um consumo de banda próximo a 250Kbps, isso efetuando a transmissão de uma camera (Web Cam) com audio. Mais testes, dessa vez na empresa, conectei uma camera de vídeo no meu note utilizando a interface FireWire, o sinal que estava sendo injetado era HDV, 60fps, [16:9]. O Flash Player não detectou o sinal, tive que configurar a camera pra DV, 60 fps, 16:9, menos qualidade, e o Flash Player detectou. Comecei as transmissões, não sei se é pelo fato da minha aplicação pegar a imagem gerada pela câmera e reduzir o tamanho dela, mas a imagem ficou bem ruim, o interlaçado quando o movimento era rápido, era mais do que visível. Fiz vários testes esperimentando reconfigurar o FPS da aplicação, o Bandwidth, a qualidade do vídeo, o Frame Interval, e quando cheguei a um resultado satisfatório, fui verificar a utilização da banda. É definitivamente não vai dar pra utilizar o RED5. Se fosse uma Web Cam as coisas já estariam resolvidas, mas como a realidade é outra, vou ter mais trabalho pela frente.</p>
<p><strong>Encoder</strong></p>
<p>Comecei pesquisas sobre a utilização de um Encoder no RED5 e ví que não é possivel a utilização de um.<br />
Vou seguir com o projeto e pesquisar agora o Flash Media Server (<a href="http://www.adobe.com/products/flashmediaserver/" target="_blank">Adobe</a>) e o Wonza Media Server (<a href="http://www.wowzamedia.com/" target="_blank">Wonza</a>) esses possibilitam a utilização de um Encoder.</p>
<p><strong>Código</strong></p>
<p>Vou disponibilizar o código das aplicações pro pessoal que precisar montar uma aplicação Flex utilizando recursos de audio/vídeo e o RED5, como por exemplo um software de Vídeo conferência. Eu montei a aplicação pra suportar vários streams, a qualidade é setada toda na aplicação, dando flexibilidade pra configurar como quizer.</p>
<p>Vai aqui o meu agradecimento ao Rafael por disponibilizar o conteúdo da aplicação dele, achei uma ótima iniciativa e seguindo este exemplo, também vou disponibilizar os códigos.</p>
<p>Abraços a todos&#8230;. qualquer dúvida estou a disposição&#8230;. <a href="mailto:fabiotomio@gmail.com">fabiotomio@gmail.com</a></p>
<p>Source Code</p>
<p><strong>Links:</strong></p>
<p><a href="http://osflash.org/red5" target="_blank">http://osflash.org/red5</a></p>
<p><a href="http://www.adobe.com/products/flashmediaserver/" target="_blank">http://www.adobe.com/products/flashmediaserver/</a></p>
<p><a href="http://www.rafaeldohms.com.br/pt/" target="_blank">http://www.rafaeldohms.com.br/pt/</a></p>
<p><a href="http://www.wowzamedia.com/" target="_self">http://www.wowzamedia.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiotomio.com.br/blog/2008/06/25/adobe-flex-red5-e-streaming/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adobe Media Player</title>
		<link>http://www.fabiotomio.com.br/blog/2008/05/26/adobe-media-player/</link>
		<comments>http://www.fabiotomio.com.br/blog/2008/05/26/adobe-media-player/#comments</comments>
		<pubDate>Mon, 26 May 2008 05:58:45 +0000</pubDate>
		<dc:creator>Fábio Tomio</dc:creator>
				<category><![CDATA[Softwares]]></category>
		<category><![CDATA[adobe media player]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://fabiotomio.wordpress.com/?p=8</guid>
		<description><![CDATA[Não, não é mais um player comum! Primeiro começa com sua tecnologia de desenvolvimento, ele foi desenvolvido com o Adobe Air, tive que instalar o suporte ao meu Mac pro Air, o qual foi feito automaticamente, em seguida veio um &#8230; <a href="http://www.fabiotomio.com.br/blog/2008/05/26/adobe-media-player/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Não, não é mais um player comum! Primeiro começa com sua tecnologia de desenvolvimento, ele foi desenvolvido com o Adobe Air, tive que instalar o suporte ao meu Mac pro Air, o qual foi feito automaticamente, em seguida veio um Wizard bem simples perguntando o destino da instalação e algumas coisinhas mais. Logo pensei que teria que me inscrever ou me cadastrar, mas isso não foi necessário. Ao final de instalação ele abriu automaticamente eee&#8230;.</p>
<p>É ele funciona muito bem, meu primeiro vídeo foi sobre o Photoshop no canal da Adobe, a qualidade da resolução é muuuito boa se comparado com os vídeos que estamos acostumados a assistir na Internet.</p>
<p>Minha reclamação nessa primeira impressão que tive é que alguns dos canais não disponiblizam os vídeos para o nosso país (MTV News &#8211; CSI &#8211; Survivor &#8211; MTV Cribs), isso é realmente muito frustrante, tentei vários, alguns tem um aviso em texto, alguns tem uma voz falando que não está disponível.</p>
<p>Pela qualidade do vídeo e pelo tempo que foi preciso pra armazenar o buffer mínimo, acho que a Adobe esta trabalhando com o novo Flash Server.</p>
<p>Então, minha primeira impressão foi: bom aplicativo, seguindo as novas tecnologias da Adobe o Air, um player que possui vários canais e programas, onde a navegação é simples e intuitiva, a qualidade do vídeo é boa, dá até pra assistir em fullscreem sem a imagem ficar horrível, o problema são os conteúdos, não estão todos disponíveis para o Brasil. Tem bastaaaante vídeos.</p>
<p>Esses foram meus primeirs 20 minutos no Adobe Media Player&#8230;..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiotomio.com.br/blog/2008/05/26/adobe-media-player/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
