<?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>codificando.com &#187; agile</title>
	<atom:link href="http://codificando.com/category/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://codificando.com</link>
	<description>Desenvolvimento de Software com qualidade</description>
	<lastBuildDate>Tue, 31 Jan 2012 09:49:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Experiência do Usuário sob a ótica do usuário</title>
		<link>http://codificando.com/2011/04/experincia-usurio-sob-tica-usurio/</link>
		<comments>http://codificando.com/2011/04/experincia-usurio-sob-tica-usurio/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 18:40:10 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[pensamentos]]></category>
		<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[reflexao]]></category>
		<category><![CDATA[experiencias]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=843</guid>
		<description><![CDATA[Na última semana, estive passeando de férias em Natal/RN. Foi uma semana de muita diversão. Apesar disso, vivi algumas situações que me fizeram refletir sobre a experiência do usuário, mas não somente focado na nossa área de TI, mas num &#8230; <a href="http://codificando.com/2011/04/experincia-usurio-sob-tica-usurio/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Na última semana, estive passeando de férias em Natal/RN. Foi uma semana de muita diversão. Apesar disso, vivi algumas situações que me fizeram refletir sobre a experiência do usuário, mas não somente focado na nossa área de TI, mas num âmbito geral, atuando como o próprio usuário/cliente.</p>
<p>Em um dos dias do passeio, resolvi jantar com a minha esposa e um casal de amigos numa pizzaria famosa da região. A pizzaria era bem indicada, tem um website bem legal e tudo que tem direito. Com uma estrutura linda, uma faixada de dar inveja, toda em madeira, com um lugar bem estilizado e com direito a música ao vivo. Para minha surpresa, a pizza não era a das melhores. Eu até sai satisfeito, mas a minha esposa não gostou e acabou nem comendo tudo. De fato a pizza não era tão boa.</p>
<p>No dia seguinte, saímos novamente para comer a noite, mas dessa vez tinha que ser algo rápido, pois era necessário dormir cedo devido ao voo ser as 5 da manhã do dia seguinte. Perguntamos ao recepcionista da pousada se havia algum lugar por perto onde tinha lanche e ele nos indicou comer uma Pizza (novamente ?!?) ali bem próximo, no quarteirão seguinte. Ele também disse que os donos da pousada eram frequentadores. Depois que ele nos explicou onde ficava a pizzaria, saímos a pé mesmo pois era muito perto. Chegando em frente ao local, percebemos ser um lugar bem simples, ao ponto de nos fazer pensar se era aquele realmente o lugar que os donos da pousada frequentavam. Para ter uma idéia, nem lembro de como era a fachada/letreiro/etc. O recepcionista do hotel havia dito que esse lugar servia apenas pizzas individuais (um pouco maior que uma pizza brotinho) e confirmamos isso, tenho assim certeza que estávamos no lugar certo. Olhei o cardápio e vi que tudo era bem barato. Fizemos o pedido e aguardamos. A pizza era simplesmente muito gostosa. Muito mesmo. Em poucos lugares eu comi uma pizza tão gostosa por um preço tão barato. E olha que não é questão de custo/benefício. Se a pizza fosse mais cara que na outra pizzaria eu pagaria certamente, mesmo sendo uma pizza menor. Saímos dali muito satisfeitos e entendi o motivo que fazia os donos da pousada frequentarem aquele local. Por sinal, nem lembro o nome do lugar, mas lembro exatamente onde fica e se eu voltar algum dia a Natal certamente irei nessa pizzaria. E o que raios essa pizza tem a ver com experiência do usuário?</p>
<p>Essa minha passagem pelas pizzarias não foi premeditada, simplesmente aconteceu. Como cliente (ou usuário se você preferir), fiquei mais satisfeito com a pizzaria mais simples do que com a pizzaria mais bonita, requintada, que tinha website e tudo mais. E por que eu gostei da mais simples? Será que é por que eu não gosto de coisas requintadas? Claro que não. Eu gostei do lugar simples porque eles me serviram uma pizza melhor. O mais importante de uma pizzaria é a pizza ser gostosa ora bolas. Não adianta ter uma cadeira linda, usar um iPad pra fazer pedidos, guardanapo imperial e talher de outro se a pizza não for saborosa. É simples assim. E o que isso tem a ver com a nossa área?</p>
<p>Vamos pensar nas aplicações que fazemos no dia a dia. O Youtube, por exemplo, tem um site bem simples. Não considero o site deles uma obra de arte, muito pelo contrário. O player de vídeos deles provavelmente é um dos mais simples e feios que existem na web. Então por que será que ele é um produto de sucesso? Simples: o youtube da muita importância para o que tem realmente valor para o usuário do site deles, que é ver e compartilhar vídeos. É muito simples enviar um vídeo e mais simples ainda ver videos. Qualquer leigo consegue fazer isso. O player de vídeos deles funciona perfeitamente bem, apesar de não ter uma aparência linda. E o usuário se importa com essa aparência não muito bonita? Alguma vez você pensou em deixar de acessar o Youtube porque o site não é lá tão bonito? Acredito que não. Eu poderia citar diversos exemplos de produtos de sucesso que são extremamente simples e as vezes feios mas que são sucesso exatamente por focarem na necessidade do usuário, mas nem preciso citar porque acho que já deu pra entender onde eu quero chegar.</p>
<p>Parece chover no molhado, mas é impressionante o número de vezes que me pego discutindo ou observando discussões sobre se um site/aplicação precisa de borda arredondada, gradiente, se o cinza está um pouco mais claro ou escuro, ou se o botão está 1 píxel pra direita ou pra baixo, quando por vezes o que tem mais valor para o usuário nem está ótimo ainda. Não que esses detalhes não tenham importância, muito pelo contrário. O ponto aqui é que o foco deve estar primeiro no core business e depois nos acessórios. É o exemplo da pizzaria. Me lixei pra decoração linda, música ao vivo e requinte da primeira pizzaria, pois a pizza não era tão boa (se fosse certamente eu voltaria). Ao meu ver eles se preocuparam demais com coisas secundárias e esqueceram de contratar ótimos pizzaiolos. Certamente me lembrarei muito mais da segunda pizzaria, que era um lugar bem mais simples mas tinha uma deliciosa pizza.</p>
<p>Pra finalizar, pense um pouco sobre os motivos que fazem do iPhone um produto de sucesso. Provavelmente você perceberá que um dos menos relevantes é a sua beleza.
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2011/04/experincia-usurio-sob-tica-usurio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Os desafios do Novo Player de Vídeos da Globo.com</title>
		<link>http://codificando.com/2010/12/os-desafios-novo-player-de-vdeos-da-globocom/</link>
		<comments>http://codificando.com/2010/12/os-desafios-novo-player-de-vdeos-da-globocom/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 02:14:44 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[engenharia]]></category>
		<category><![CDATA[gestão]]></category>
		<category><![CDATA[infra]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[pensamentos]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=698</guid>
		<description><![CDATA[Faz aproximadamente 4 meses que mudei para a equipe de Webmedia da globo.com. Nessa ida, eu esperava alguns desafios um pouco diferentes, o que acabou acontecendo logo no começo. Indo direto ao ponto, meu primeiro projeto importante foi desenvolver junto com &#8230; <a href="http://codificando.com/2010/12/os-desafios-novo-player-de-vdeos-da-globocom/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Faz aproximadamente 4 meses que mudei para a equipe de <a href="http://video.globo.com/">Webmedia</a> da <a href="http://globo.com">globo.com</a>. Nessa ida, eu esperava alguns desafios um pouco diferentes, o que acabou acontecendo logo no começo.</p>
<p><a href="http://codificando.com/wp-content/uploads/2010/12/player_globo.jpg"><img class="size-full wp-image-701" title="Novo Player Globo.com" src="http://codificando.com/wp-content/uploads/2010/12/player_globo.jpg" alt="Novo Player Globo.com" width="638" height="359" /></a></p>
<p>Indo direto ao ponto, meu primeiro projeto importante foi desenvolver junto com meu time um novo player de vídeos para a <a href="http://globo.com">globo.com</a>, o qual chamamos de Player 2.0. Pra mim isso era algo totalmente novo, pois <a href="http://codificando.com/2009/02/bbb9-e-o-brother-que-voce-nao-gosta-no-ar/" target="_blank">meu contato com desenvolvimento Flash/ActionScript havia sido muito pouco, num projeto no início de 2009</a>. Como a maioria já sabe, o desenvolvimento de um Player de Vídeos hoje em dia precisa necessariamente ser feito em flash, pois é o runtime que tem o maior alcance de usuários. A parte de vídeos do <a href="http://www.w3.org/TR/html5/">html5</a> ainda tem diversas lacunas a serem preenchidas e é necessário ainda um bom tempo para que a &#8220;massa&#8221; de usuários tenham seus browsers atualizados com suporte a essa tecnologia.</p>
<p>Nesse desenvolvimento do Player, pude perceber juntamente com meu time que desenvolver na <a href="http://www.adobe.com/flashplatform/">plataforma do Flash</a> já é o um grande desafio, pois a plataforma e o runtime tem alguns detalhes que você precisa entender e saber lidar, caso contrário você vai ter muita dor de cabeça.</p>
<h2>Runtime e Sistema Operacional</h2>
<p>Quando você desenvolve alguma coisa em Flash, especialmente um Player de Vídeos, um ponto onde é preciso tomar bastante cuidade é com o <a href="http://en.wikipedia.org/wiki/Adobe_Flash_Player">Runtime do Flash (vulgo Flash Player)</a>. O Runtime pode ter comportamentos diferentes em diferentes versões do próprio runtime e também do sistema operacional. Por algumas vezes nós passamos por situações onde percebemos que o Player não estava funcionando em uma versão específica do Runtime no Internet Explorer 6 no Windows XP. Isso causou uma certa correria, mas felizmente conseguimos resolver o problema antes de colocar no ar e não houve impacto.</p>
<p>Lições aprendidas e tivemos tomar algumas medidas, entre elas testar em Linux, Windows e Mac e nos principais browsers e Runtimes do Flash como parte do nosso Definition of Done (DoD). Na prática, hoje uma estória não é dada como pronta se não tivermos certeza que o que foi feito funciona nos diversos environments pré estabelecidos. No início isso era parte do DoD do Sprint, mas após passarmos por uma situação, onde achamos um problema no IE6 (pra variar) bem no último dia do sprint, e que iria colocar todo esse Sprint por água abaixo, movemos esse item do DoD do Sprint para o DoD das estórias. Acabamos resolvendo o problema sem impactar no sprint, mas o desfecho poderia ter sido outro.</p>
<h2>Testes Automatizados</h2>
<p>Nos tempos atuais, é quase unânime a importância de testes automatizados no desenvolvimento de software. Todo programador deveria saber os princípios de testes automatizados e aplicá-los no seu dia a dia. Infelizmente, existem alguns environments que não facilitam muito esse tipo de prática. Nesses casos, é necessário lidar com o problema de maneira pragmática, caso contrário as coisas não andam. Diferentemente de outras tecnologias, neste caso não podemos escolher alguma opção diferente, pois a opção é uma só (o Flash).</p>
<p>No desenvolvimento do Player, nós usamos o <a href="http://flexunit.org/">FlexUnit</a> como ferramenta principal de testes automatizados. Dentro do que ele se propõe, faz seu trabalho bem feito, e facilita bastante os testes. Tem suporte a <a href="http://docs.flexunit.org/index.php?title=Writing_an_AsyncTest">testes assíncronos</a>, e sua <a href="http://docs.flexunit.org/">documentação explica bem as principais funcionalidades</a>.</p>
<p>Uma coisa que tem nos atrapalhado bastante são os frameworks de <a href="http://xunitpatterns.com/Test%20Double.html">test doubles</a>. Nenhum dos frameworks que testamos funcionou no nosso ambiente. Aqui, algo que percebemos no densenvolvimento para Flash foi que cada tutorial na internet pode funcionar numa minor/revision version do runtime e na outra aquele tutorial já não funciona. É bem complicado e custei a aceitar, mas é assim que funciona nesse environment. Ainda não descarto a possibilidade de que poderiamos insistir mais pra conseguir alguma coisa melhor, ou que não soubemos fazer direito, mas não poderiamos ficar empacados nisso, sem mover nosso projeto pra frente.</p>
<p>Mesmo com essas dificuldades, estamos conseguindo fazer uma quantidade boa de testes e isso tem nos ajudado muito.</p>
<h2>Continous Integration Server</h2>
<p>Outro desafio bem complicado que tivemos foi ter um build server funcionando bem e rodando nossos testes automatizados. Mais uma vez os tutoriais da internet acabam não funcioando direito. Pra piorar, pra você rodar testes ActionScript 3, que é a linguagem do Flash, é necessário levantar uma instância do FlashPlayer, que precisa de um <a href="http://en.wikipedia.org/wiki/X_Window_System">Servidor X</a>. Essa instância vezes não fecha, fica travada, ou apresenta alguns problemas que nada tem a ver com os testes da aplicação. Custamos a perceber isso, mas foi o que aconteceu.</p>
<p>No fim das contas, hoje temos nosso servidor de build e integração contínua funcionando bem, e com poucos problemas.</p>
<h2>Estratégia de Migração</h2>
<p>Fazer uma mudança no Player de Vídeos da <a href="http://globo.com">globo.com</a> não é uma tarefa simples. Não poderíamos simplesmente colocar um Player novo no lugar do antigo e ver o que aconteceria. Além de ser um baita risco seria uma baita irresponsabilidade. Precisavamos então pensar numa estratégia &#8230;</p>
<p>Antes  do momento de colocar o primeiro release no ar, decidimos usar um catálogo de vídeos com acesso bem pequeno. Para isso, criamos uma opção que ativa/desativa a versão nova em cada catálogo, individualmente. Dessa forma, poderiamos voltar para a versão antiga IMEDIATAMENTE, em caso de algum problema.</p>
<p>Essa estratégia foi perfeita, pois conseguimos pegar diversos pontos de melhoria, e fazer os ajustes necesários sem gerar impacto para os usuários. Com os ajustes feitos e uma nova versão no ar, resolvemos então <a href="http://ascariocas.globo.com/videos/" target="_blank">colocar em mais um catálogo de vídeos</a>, dessa vez um com mais acessos. Nesse momento nosso player ainda não suportava vídeos ao vivo, portanto ainda não podiamos colocar em catálogos como o do <a href="http://globonews.globo.com/videos/v/globo-news-ao-vivo/61910" target="_blank">Globo News</a>, pois caso contrário teriamos problemas. Isso provou como a nossa escolha de criar uma opcão de ir habilitando sob demanda se mostrou bastante acertada, pois assim que terminamos a funcionalidade de vídeos ao vivo, habilitamos essa nova versão do Player para o <a href="http://globonews.globo.com/videos/v/globo-news-ao-vivo/61910" target="_blank">Globo News</a>.</p>
<p>Hoje, estamos já com quase todos os catálogos de vídeos usando esse Novo Player. Em breve, todos os vídeos da Globo.com serão servidos por ele. Isso só não aconteceu ainda porque temos algumas estórias com alguns detalhes que tornam viável a substituição completa do Player que está no ar hoje. O mais interessante de tudo é que estamos tendo impacto e stress zero, graças e estratégia bem traçada por todo nosso time.</p>
<h2>Conclusão</h2>
<p>Esse começo na equipe de Webmedia está sendo ótimo. Criar um Player de Vídeos do zero tem sido uma experiência fantástica, apesar de todas as dificuldades.</p>
<p>Algumas das coisas mais importantes que estou tirando de lição desse projeto é que (1) nem sempre dá pra fazer tudo certinho com todos os testes automatizados, etc, etc etc, (2) as vezes estamos num vendor lock-in onde não dá pra sair e ai você tem que saber superar com os problemas do enviroment dessa tecnologia e (3) migrar uma aplicação que afeta quase todos os sites de uma empresa do tamanho da <a href="http://globo.com">globo.com</a> sem causar impacto em ninguém é difícil, mas não impossível.
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2010/12/os-desafios-novo-player-de-vdeos-da-globocom/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Gerencie seu ambiente Ruby com RVM</title>
		<link>http://codificando.com/2010/07/gerencie-ambiente-ruby-rvm/</link>
		<comments>http://codificando.com/2010/07/gerencie-ambiente-ruby-rvm/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 03:52:05 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ferramentas]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=461</guid>
		<description><![CDATA[Introdução Ruby 1.8, Ruby 1.9, Rails 2, Rails 3, cada projeto usando diversas gems. Como isolar esses ambientes para evitar conflitos? Em Outubro de 2007, surgiu uma ferramenta chamada RVM, com o objetivo de criar ambientes isolados para desenvolver software &#8230; <a href="http://codificando.com/2010/07/gerencie-ambiente-ruby-rvm/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3><strong>Introdução</strong></h3>
<p>Ruby 1.8, Ruby 1.9, Rails 2, Rails 3, cada projeto usando diversas gems. Como isolar esses ambientes para evitar conflitos?</p>
<p>Em Outubro de 2007, surgiu uma ferramenta chamada <a href="http://rvm.beginrescueend.com/">RVM</a>, com o objetivo de criar ambientes isolados para desenvolver software em Ruby, permitindo que programadores pudessem usar várias versões de Ruby e Gems numa mesma máquina de forma limpa e sem conflitos. O projeto vem se tornando mais popular este ano, e de fato tem se mostrado muito útil. A lista dos autores pode ser conferida <a href="http://beginrescueend.com/authors" target="_blank">aqui</a>.</p>
<h3><strong>Instalação</strong></h3>
<p>Para instalar o RVM, não é preciso muita coisa além de um ambiente POSIX (linux, bsd, etc). Eu instalei no meu Mac sem problemas. Eu acho que a única coisa que não vem por padrão que você precisa instalar é o <a href="http://git-scm.com/" target="_blank">git</a>, que é usado para instalar/atualizar o RVM e instalar/atualizar as versões de Ruby.</p>
<p>Dito isso, abra o terminal e execute o seguinte comando:</p>
<p><strong>$ bash &lt; &lt;( curl http://rvm.beginrescueend.com/releases/rvm-install-head )</strong></p>
<p>O procedimento não deve demorar mais que alguns minutos, dependendo da sua conexão. Em seguida, abra seu profile (.bash_profile, .profile, .bashrc, etc) e adicione as seguintes linhas:</p>
<p><strong>[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;&amp; source &#8220;$HOME/.rvm/scripts/rvm&#8221;<br />
PS1=&#8221;\$(~/.rvm/bin/rvm-prompt) $PS1&#8243;<br />
</strong><br />
A segunda linha é para que a versão do Ruby que você estiver usando apareça no prompt, caso contrário você vai precisar ficar verificando a todo momento qual versão você está usando e isso pode ser bem chato.</p>
<p>Em seguida, carregue o rvm (da próxima vez que abrir o shell isso não será mais necessário):</p>
<p><strong>$ source ~/.rvm/scripts/rvm</strong></p>
<p>Pronto, o RVM está instalado e é hora de começar a arrumar nosso ambiente.</p>
<h3><strong>Instalando versões de Ruby</strong></h3>
<p>A partir do RVM, é possível instalar qualquer implementação Ruby. Por exemplo, podemos instalar o Ruby, Ruby Enterprise e o Jruby. Para uma lista completa acesse <a href="http://rvm.beginrescueend.com/interpreters/" target="_blank">aqui</a>.</p>
<p>Nesse tutorial, vamos instalar o ruby 1.8.7 . Execute o comando abaixo no terminal:</p>
<p><strong>$ rvm install 1.8.7</strong></p>
<p>1.8.7 é um atalho para o último patchlevel da verão 1.8.7 do Ruby. Em geral, isso funciona para todas as versões. A instalação demora um pouquinho, mas nada absurdo, portanto vá tomar um café e volte. Após o termino, &#8220;entre&#8221; no ambiente do Ruby instalado.</p>
<p><strong>$ rvm &#8211;default 1.8.7</strong></p>
<p>Nesse momento, você entrou no Ruby 1.8.7 e definiu essa VM como default no RVM.</p>
<p>Para voltar ao Ruby do systema (fora da RVM), basta ir no shell e digital:</p>
<p><strong>$ rvm use system</strong></p>
<p>Para listar as VMs instaladas (ou Rubies como preferem os criadores e como chamaremos a partir de agora), basta digitar:</p>
<p><strong>$ rvm list</strong></p>
<p>Escolha a Rubie e use-a conforme o exemplo abaixo:</p>
<p><strong>$ rvm use 1.8.7</strong></p>
<h3><strong>Instalando as Gems</strong></h3>
<p>Uma das manias que a maioria dos Rubistas tem é instalar as gems usando sudo. Isso hoje em dia é considerado má prática. Ainda mais com RVM, já que a intenção é criar uma espécie de SANDBOX por usuário/aplicação, conforme veremos a seguir.</p>
<p>Primeiramente vamos ver as gems que estão instaladas na nova Rubie. O comando é o já conhecido gem list. Ao rodar esse comando na Rubie instalada pelo RVM, você pode ter a impressão que suas gems sumiram, mas na verdade isso é exatamente o esperado, pois cada Rubie tem seu ambiente totalmente isolado. Para ter uma idéia, rode o seguinte comando e veja o output:</p>
<p><strong>$ rvm info</strong></p>
<p>O output fornece toda a informação sobre o ambiente dessa Rubie que está sendo usada no momento. Observe bem a linha home: \n gem:. Nela você verá onde estão sendo instaladas as gems. Repare que ele cria uma estrutura de diretórios sugestiva para você manter suas gems bem isoladas. A estrutura é a seguinte:</p>
<p><strong>~/.rvm/gems/{Rubie@Gemset}/</strong></p>
<p>Todas as gems serão instaladas nesse diretório. Não estranhe o <strong>@Gemset</strong>, falaremos dele adiante.</p>
<p>Vamos então instalar o Rails nessa Rubie. Não use sudo pelo amor de Deus <img src='http://codificando.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>$ gem install rails &#8211;no-ri &#8211;no-rdoc</strong></p>
<p>Depois execute um gem list para ver seu ambiente instalado. Se quiser, execute rvm system e veja que suas gems no ruby do sistema provavelmente são totalmente diferentes.</p>
<h3><strong>Gemsets</strong></h3>
<p>Vamos falar agora do tal @Gemset que eu coloquei na estrutura. Gemsets é uma forma de criar uma SANDBOX mais &#8220;profunda&#8221;. Em um primeiro momento pode parecer desnecessário, mas se você pensar que pode ter mais de um projeto por Rubie e não quer que as gems deles se misturem nem gerem algum tipo de conflito, essa estrutura passa a fazer todo sentido.</p>
<p>Supunha que você tenha um projeto chamado blog. Para criar uma gemset (e entrar nele) para esse projeto basta executar o seguinte comando:</p>
<p><strong>$ rvm gemset create blog &amp;&amp; rvm gemset use blog</strong></p>
<p>Feito isso você verá que no seu prompt (se você fez essa configuração de instalação) estará aparecendo da seguinte forma: <strong>rubie@gemset</strong>. Rode o comando gemlist e verá que novamente suas gems que foram instaladas na Rubie sumiram. Mais uma vez isso é esperado, pois acabamos de criar uma nova SANDBOX para esse projeto específico. Nesse momento, basta instalar suas gems nessa gemset que seu projeto terá um ambiente totalmente isolado.</p>
<p>Se você executar o rvm info, verá que a home das suas gems está com um path diferente do anterior, pois o rvm criou um diretório para a Ruby com a nova Gemset, deixando tudo muito bem organizado.</p>
<p>Existem algumas gems que todos os projetos podem precisar, como Rake e Capistrano. Não seria uma boa idéia instalar essas gems em cada gemset. O RVM nos dá uma ajuda nesse sentido, criando uma gemset global, permitindo compartilhar gems entre todas as gemsets de uma Rubie. Para instalar uma gem nessa gemset basta mudar para ela e installar, como já vimos anteriormente. Vamos a um exemplo:</p>
<p><strong>$ rvm gemset use global<br />
$ gem install capistrano capistrano-ext &#8211;no-ri &#8211;no-rdoc</strong></p>
<p><span style="color: #000000;">Pronto, essas gems não precisam mais ser instaladas para cada projeto novo que você for rodar nessa Rubie.</span></p>
<h3><strong>Conclusão</strong></h3>
<p>O Ruby Version Manager é uma ferramenta muito interessante para gerênciar seu ambiente Ruby. Ter vários Rubies instalado se torna cada vez mais comum, pois os projetos antigos precisam ser mantidos e novos projetos surgem, usando Rubies mais novos. O uso dos gemsets para isolar as gems também faz toda a diferença, evitando diversas dores de cabeça e deixando o ambiente organizado e limpo. Vale a pena experimentar.</p>
<h3><strong>&lt;&lt; UPDATE &gt;&gt;<strong> </strong></strong></h3>
<p><strong><strong><span style="font-weight: normal;">Tem um comando importante que não abordei que é o </span>rvm list known<span style="font-weight: normal;"> que mostra as opções de Rubies disponíveis para instalação. Créditos ao <a href="http://twitter.com/rodvlopes" target="_blank">Rodrigo Lopes</a>.</span></strong></strong></p>
<p><strong><strong> </strong></strong>
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2010/07/gerencie-ambiente-ruby-rvm/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Computação Ubíqua e Dispositivos móveis</title>
		<link>http://codificando.com/2010/07/computacao-ubiqua-dispositivos-moveis/</link>
		<comments>http://codificando.com/2010/07/computacao-ubiqua-dispositivos-moveis/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 03:32:03 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[futuro]]></category>
		<category><![CDATA[gestão]]></category>
		<category><![CDATA[pensamentos]]></category>
		<category><![CDATA[reflexao]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[produto]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=445</guid>
		<description><![CDATA[Introdução É fato que nos dias de hoje muitas tecnologias novas surgiram no cenário mundial. Temos sido inundados por celulares, smartphones, notebooks, netbooks e outros mais. Hoje em dia existe internet 3G nas principais grandes cidades do mundo. Internet WIFI &#8230; <a href="http://codificando.com/2010/07/computacao-ubiqua-dispositivos-moveis/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Introdução</h2>
<p>É fato que nos dias de hoje muitas tecnologias novas surgiram no cenário mundial. Temos sido inundados por celulares, smartphones, notebooks, netbooks e outros mais. Hoje em dia existe internet 3G nas principais grandes cidades do mundo. Internet WIFI já é algo comum faz tempo. Esses recursos estão começando a mudar nossas vidas de uma forma surpreendente. Mas será que essa idéia é nova? Quando será que começaram as pesquisas sobre essas tecnologias? Qual será o impacto futuro em nossas vidas? Acredito que estamos realmente num caminho onde a computação fará parte de quase todos os objetos que usamos no dia a dia.</p>
<h2>Definição</h2>
<p><a href="http://www.priberam.pt/dlpo/default.aspx?pal=ub%C3%ADquo" target="_blank">Ubíquo</a> não é uma palavra muito usada em nosso cotidiano. Portanto, vale a pena apresentarmos alguns significados para nos ajudar a aprofundar mais no assunto.</p>
<p><a href="http://www.priberam.pt/dlpo/default.aspx?pal=ub%C3%ADquo" target="_blank">Ubíquo</a> significa algo universal, ou seja, algo que todos entendem, conhecem. Ubíquo também pode ser interpretado como aquilo que esta presente em todos os lugares, ao mesmo tempo. É como onipresença. Essa segunda definição tem mais a ver com o conteúdo desse artigo.</p>
<h2>História</h2>
<p>Em 1991, Mark Weiser <a href="http://sandbox.xerox.com/want/papers/ubi-sciam-sep91.pdf" target="_blank">escreveu um artigo</a> chamado “O Computador do Século 21 (The Computer for the 21st Century). Weiser era cientista chefe do <a href="http://www.parc.com/" target="_blank">Centro de Pesquisa Xerox PARC</a>. Nesse artigo, ele definiu o termo Computação Ubíqua, que define um contexto onde  a presença computacional em algum objeto é totalmente transparente para quem usa e em alguns cenários totalmente invisível. Weiser também exemplifica a escrita, que foi provavelmente a primeira tecnologia de informação e que se tornou Ubíqua em países industrializados. Ele usa esse exemplo para definir que as tecnologias que são mais profundas são as aquelas que “desaparecem”. Por desaparecer, acho que Weiser quis dizer que a tecnologia fica tão arraigada no nosso dia a dia tornando seu uso automático, deixando de ser aquele algo novo e surpreendente. Vislumbrando como seria a computação do nosso século, Weiser também fala sobre redes gigabits, armazenamento de terabytes e sobre Tabs e Pads, que seriam os palms, smartphones, <a href="http://en.wikipedia.org/wiki/Kindle" target="_blank">Kindles</a> e <a href="http://www.apple.com/ipad/" target="_blank">iPads</a> que temos hoje. Quase no fim do artigo, ele conta uma estória ilustrativa de uma pessoa vivendo nesse mundo todo conectado e apresenta diversos protótipos feitos por ele e sua equipe de alguns desses equipamentos e tecnologias.</p>
<p>No que diz respeito a tecnologias, lembro-me bem que <a href="http://java.sun.com" target="_blank">Java</a> era uma dessas que originalmente foi criada para ser usada em <a href="http://www.java.com/en/javahistory/" target="_blank">dispositivos embarcados</a>, especialmente na informatização da casa, mas era algo muito avançado para época. Isso surgiu no mesmo ano em que Weiser escreveu seu artigo. No fim das contas a linguagem <a href="http://java.sun.com" target="_blank">Java</a> tomou outro rumo, muito bem sucedido por sinal.</p>
<h2>Contexto atual e futuro</h2>
<p>É impossível negar que a computação Ubíqua tem afetado nosso dia a dia. Hoje temos Hotspots WIFI em diversos lugares. A internet 3G está presente nos celulares modernos, possibilitando infinitas formas de comunicação. Serviços de Voz sobre IP tornaram possível usarmos ferramentas como <a href="http://www.skype.com/intl/en/home" target="_blank">Skype</a>, que permite obter um número de um País e utilizar em qualquer lugar do mundo. Cada vez mais fazem parte do nosso dia a dia tecnologias como as de automóveis com computador de bordo, <a href="http://www.apple.com/iphone/" target="_blank">iPhones</a>, <a href="http://www.apple.com/ipad/" target="_blank">iPads</a>, totem para compra de ingressos no cinema, totem para check-in de voos, e outros mais.</p>
<p>Outra tecnologia que está acelerando o processo da computação Ubíqua é o <a href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank">Cloud Computing</a>. Há alguns anos, milhares de pessoas tem suas contas de email online em serviços como gmail, yahoo mail e similares, de forma a não precisarem mais de um cliente de email como ferramenta obrigatória em seus computadores. Essa modalidade é conhecida como <a href="http://en.wikipedia.org/wiki/Software_as_a_service" target="_blank">SaaS</a> (Software as a Service). Outra modalidade é o <a href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank">IaaS</a> (Infrastructure as a Service), onde existe uma infraestrutura transparente para quem contrata servidores, podendo adicionar mais recursos computacionais ao invés de mais um computador ou hardware físico.  Mais recentemente surgiram também plataformas para desenvolvimento de software totalmente na web como o <a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a>, <a href="http://heroku.com/" target="_blank">Heroku</a> e outros. Esse é o modelo <a href="http://en.wikipedia.org/wiki/Platform_as_a_service" target="_blank">PaaS</a> (Platform as a Service).</p>
<p>Hoje em dia fala-se muito também em casas inteligentes, um conceito onde toda a casa está interligada e conectada, permitindo que luzes acendam com comando de voz, geladeiras enviem pedidos de compras ao supermercado quando estiverem perto de esvaziar,  cafeteiras saberem o horário do seu café da manhã e prepararem o café sem você precisar fazer nada, e por ai vai. Esse conceito está ligado a <a href="http://www.gta.ufrj.br/~rezende/cursos/eel879/trabalhos/smarthouses/introd.html" target="_blank">Computação Pervasiva</a>, que é uma espécie de subárea da Computação Ubíqua. Quem assistiu o filme <a href="http://www.imdb.com/title/tt0106697/plotsummary" target="_blank">“O Demolidor&#8221; (1993)</a>, com os atores Silvestre Stalone e Welsey Snipes, lembra que esses conceitos estão presentes no filme. Embora atualmente existam algumas <a href="http://www.youtube.com/user/SmartHouseLt" target="_blank">iniciativas de empresas</a> nesse ramo de <a href="http://www.gta.ufrj.br/~rezende/cursos/eel879/trabalhos/smarthouses/introd.html" target="_blank">Computação Pervasiva</a>, essa tecnologia ainda está bem distante de uma adoção em massa.</p>
<p>Falando de futuro, é bem verdade que ainda não chegamos no nível onde Weiser aponta em seu artigo, mas afinal, ainda estamos no início do século, tendo passado apenas uma década. Uma das frases ditas por ele nesse artigo que chamou muito a atenção sobre esse futuro foi: <em><strong>“Não precisamos de nenhuma revolução na inteligência artificial, apenas incorporar a computação no cotidiano”</strong></em>.</p>
<h2>Conclusão</h2>
<p>O Caminho para Computação Ubíqua tem avançado muito nos últimos anos. As pesquisas e previsões de Mark Weiser tem se concretizado, quase que como uma profecia. Como profissionais de TI, nos resta estar atentos as oportunidades de negócio que essas tecnologias tem a nos oferecer e tirar proveito disso.
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2010/07/computacao-ubiqua-dispositivos-moveis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

