<?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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title></title>
	<atom:link href="http://imasters.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://imasters.com.br</link>
	<description></description>
	<lastBuildDate>Fri, 24 May 2013 00:00:08 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<copyright>Copyright ©  2013 </copyright>
	<managingEditor>wpinstall@apiki.com (iMasters)</managingEditor>
	<webMaster>wpinstall@apiki.com (iMasters)</webMaster>
	<ttl>1440</ttl>
	<image>
		<url>/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title></title>
		<link>http://imasters.com.br</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>iMasters podcast</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>iMasters</itunes:author>
	<itunes:owner>
		<itunes:name>iMasters</itunes:name>
		<itunes:email>wpinstall@apiki.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>Entrevista com Bert Bos, criador do padrão CSS</title>
		<link>http://imasters.com.br/front-end/css/entrevista-com-bert-bos-criador-do-padrao-css/</link>
		<comments>http://imasters.com.br/front-end/css/entrevista-com-bert-bos-criador-do-padrao-css/#comments</comments>
		<pubDate>Thu, 23 May 2013 18:00:26 +0000</pubDate>
		<dc:creator>Carine Roos</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html4]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://imasters.com.br/?p=42386</guid>
		<description><![CDATA[<p>Entre os dias 13 e 17 de maio, no Windsor Barra Hotel, Rio de Janeiro, ocorreu a 22ª Conferência da Web, a WWW2013, na qual estive presente e pude conferir workshops e palestras sobre visualização de dados, big data, data mining, análise de dados, web semântica, linked data, uso de dados para a saúde pública, [...]</p><p>O post <a href="http://imasters.com.br/front-end/css/entrevista-com-bert-bos-criador-do-padrao-css/">Entrevista com Bert Bos, criador do padrão CSS</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<p align="JUSTIFY">Entre os dias 13 e 17 de maio, no Windsor Barra Hotel, Rio de Janeiro, ocorreu a <a href="http://www2013.org/" target="_blank">22ª Conferência da Web</a>, a WWW2013, na qual estive presente e pude conferir workshops e palestras sobre visualização de dados, big data, data mining, análise de dados, web semântica, linked data, uso de dados para a saúde pública, futuro do jornalismo, entre outros temas.</p>
<p align="JUSTIFY">O evento contou com cerca de 500 atividades e todas de que participei foram interessantes e geraram debates produtivos. Na terça-feira, 14 de maio, participei de uma <a href="http://www.w3.org/Talks/2013/0516-CSS-WWW2013/" target="_blank">oficina tutorial sobre CSS3 com o Bert Bos</a>, um dos criadores do padrão CSS. Como o conheci pessoalmente, não podia perder a oportunidade de fazer uma entrevista com ele sobre algumas questões sobre as quais tenho curiosidade, como: o contexto que o levou a trabalhar nos primeiros rascunhos do padrão CSS, o que ainda falta ser aprimorado e a sua perspectiva para a evolução do CSS e do HTML em longo prazo.</p>
<p align="JUSTIFY"><a href="http://imasters.com.br/?attachment_id=42388" rel="attachment wp-att-42388"><img class="aligncenter size-full wp-image-42388" alt="me-and-bert-bos" src="http://imasters.com.br/wp-content/uploads/2013/05/me-and-bert-bos.jpg" width="225" height="300" /></a></p>
<p align="JUSTIFY">Confira a entrevista completa abaixo:</p>
<p align="JUSTIFY">Versão em inglês <a href="http://androidella.org/2013/05/19/an-interview-with-the-creator-of-the-css-standard/" target="_blank">aqui</a>.</p>
<p><strong>1. Quais eram as necessidades específicas e o contexto que o levaram a trabalhar nos primeiros rascunhos do padrão CSS ?</strong></p>
<p>Quando Tim Berners-Lee criou seu primeiro navegador Web, este possuía folhas de estilos, mas apenas para o usuário. A ideia era que o autor especificasse o conteúdo de um documento, mas que o navegador junto com o usuário determinassem como melhor exibi-lo.</p>
<p>Durante certo tempo, esse foi o modelo, afinal de contas, o usuário é quem melhor sabe qual tipo de tela ele tem, de quais cores ele gosta mais, o quão grande são as janelas em seu sistema. Foram criados diversos outros navegadores que permitiam ao usuário configurar a exibição do conteúdo, como o <a href="https://en.wikipedia.org/wiki/ViolaWWW" target="_blank">Viola</a> e o <a href="https://en.wikipedia.org/wiki/Mosaic_%28web_browser%29" target="_blank">Mosaic</a>. Eu mesmo criei também um navegador dessa forma, chamado <a href="https://en.wikipedia.org/wiki/Argo_%28web_browser%29" target="_blank">Argo</a>. As folhas de estilo no meu navegador eram mais poderosas, mas ainda assim apenas para o usuário, e não para o autor.</p>
<p>Os primeiros autores na Web eram em sua maioria cientistas. Eles estavam acostumados a escrever documentos e deixar outra pessoa decidir sua aparência: jornais científicos normalmente fornecem suas próprias folhas de estilo (em <a href="https://en.wikipedia.org/wiki/LaTeX" target="_blank">LaTeX</a>, por exemplo), assim o HTML se encaixou bem nesse modelo.</p>
<p>Mas conforme a Web se tornava mais popular, designers começaram a se interessar e a opinião deles era de que, por serem designers, eles sabiam com mais propriedade que os usuários como apresentar um documento da melhor forma. Assim como a aparência de um livro lhe informa sobre que tipo de livro se trata, a aparência de um documento deveria também lhe dizer algo sobre seu conteúdo.</p>
<p>Mas, naquela época, em 1994, isso era impossível de se fazer usando HTML. Assim, duas coisas aconteceram: os designers perceberam que o HTML permitia o uso de imagens, e então eles começaram a substituir textos por imagens, porque assim eles tinham total controle. E o Netscape, o primeiro navegador comercial, notando essa demanda dos designers, começou a adicionar extensões proprietárias ao HTML, como atributos de cor e de plano de fundo, um elemento &lt;center&gt;, e elementos de espaçamento.</p>
<p>Os usuários não estavam felizes com isso: você não pode redimensionar imagens ou recortar e colar partes delas, e imagens também não proviam acessibilidade. E os elementos proprietários faziam os documentos ficarem grandes e difíceis de serem mantidos, e mais difíceis para o usuário aplicar estilos. E, assim, pessoas na lista de discussão www-talk@w3.org começaram a procurar soluções.</p>
<p>Se você quiser ler a história completa do que aconteceu naquela época, você pode ler o <a href="http://www.w3.org/Style/LieBos2e/history/" target="_blank">capítulo relevante no livro que Håkon e eu escrevemos</a> ou a <a href="http://people.opera.com/howcome/2006/phd/" target="_blank">tese de PhD do Håkon</a>. Em suma: diversas pessoas propuseram linguagens de folhas de estilo, algumas vezes versões simplificadas do que já existia no mundo do SGML, por que o HTML foi derivado do SGML. Duas dessas linguagens eram a “Cascading HTML Style Sheets” do Håkon e a minha linguagem “Streaming Style Sheets”.</p>
<p>Quando eu olhei para a linguagem do Håkon, eu vi uma ideia interessante, que era a de que você poderia ter um tipo de negociação entre o que o autor propunha e o que o usuário queria. Nós começamos a trabalhar juntos, combinando as ideias dele e as minhas (por exemplo, seletores contextuais e a aplicação de folhas de estilos para outros tipo de documento além de HTML), nós inventamos uma nova sintaxe e logo nossa proposta (chamada “Cascading Style Sheets” omitindo o “HTML” do nome) se tornou a mais popular, e outras pessoas começaram a contribuir.</p>
<p>Em 1995, o novo grupo de trabalho de HTML assumiu a tarefa, de modo a torná-lo um padrão. E um pouco depois o grupo se separou, formando o grupo de trabalho de CSS existente ainda hoje.</p>
<p><strong>2. Você já considerou aplicar regras de estilo CSS em outros tipos de conteúdo (além de HTML)? Se isso já foi feito, você poderia fornecer um exemplo? Caso contrário, você poderia discutir em que outros conteúdos poderia ser útil o uso de CSS?</strong></p>
<p>Uma das ideias da minha proposta original de folhas de estilo era justamente isto: usar a mesma linguagem de folhas de estilo para uma ampla gama de documentos, não apenas para HTML (meu próprio navegador podia exibir muitos documentos SGML, e HTML era apenas uma subclasse destes).</p>
<p>Naquela época, ainda não existia XML, mas nós pensamos que deveríamos ter uma linguagem de folhas de estilo para SGML simples ou qualquer coisa que tivesse uma estrutura simples de árvore.</p>
<p>Quando o XML foi criado um pouco depois, acabou combinando muito bem com o que tínhamos em mente e assim o CSS pôde ser utilizado com grande parte de documentos XML também.</p>
<p>E o CSS pode ser usado, e está de fato sendo usado, para outras coisas também. Um exemplo é a biblioteca de interfaces gráficas <a href="http://qt-project.org/doc/qt-4.8/stylesheet.html" target="_blank">Qt</a>. Ela usa CSS para aplicar estilo aos componentes da interface gráfica.</p>
<p><strong> 3. Quais partes da atual versão da estecificação do CSS você acha que ainda precisa de mais aprimoramentos?</strong></p>
<p>Tem muitas coisas que ainda estão faltando, especialmente agora que editores estão usando CSS fortemente para editoração de livros, tanto em papel quanto para e-books.</p>
<p>Originalmente nós desenhamos o CSS para ser a linguagem de estilos simples, e adicionamos XSL (por exemplo, XSLT + XSL-FO) para as tarefas complexas, como edição de livros. Mas, no momento, o desenvolvimento do XSL parou, e nós não sabemos quando ele irá continuar, e então os editores estão migrando para o CSS.</p>
<p>Apenas para dar alguns exemplos de coisas que estão faltando no CSS: para o tratamento adequado de hipertexto, nós precisamos de elementos colapsantes (veja <a href="http://en.wikipedia.org/wiki/StretchText" target="_blank">aqui</a>) ou, de modo geral, uma forma de alternar o estado de elementos (e não apenas ‘checkboxes’) entre dois possíveis estilos. Nós também não temos ainda containers que formem uma pilha de páginas em abas.</p>
<p>E temos *muito* trabalho a ser feito para tudo que envolva texto paginado: notas de rodapé, elementos flutuantes no topo ou no pé da página, texto que se estenda atravessando colunas, divisão de texto em múltiplos fluxos e alinhamento desses fluxos de texto em um template de página baseado em uma grade, referências cruzadas (como “veja página 7″), índices alfabéticos, ‘copyfitting’ (fazer um texto caber exatamente em um espaço alocado), cabeçalhos e rodapés contendo texto bidirecional ou fórmulas matemáticas etc. Eu comecei a colecionar uma lista de requisitos que pode sr vista <a href="http://www.w3.org/Style/2013/paged-media-tasks" target="_blank">aqui</a>.</p>
<p><strong>4. Qual é a sua perspectiva para a evolução do CSS e do HTML em longo prazo? Como você acha que essas tecnologias evoluirão nas próximas décadas?</strong></p>
<p>Foi muito bom o HTML4 ter permanecido sem modificações por tanto tempo. Isso nos permitiu compreendê-lo e criar softwares interessantes. Nós esperávamos certos tipos de aplicações, mas algumas vezes levou muitos anos para que as pessoas se tornassem capazes de efetivamente criá-los. Por exemplo, nós esperávamos que algo como os microformatos fosse surgir, mas levou bastante tempo até algumas pessoas de fato descobrirem como fazê-lo corretamente. E algumas coisas foram inesperadas e apenas descobertas depois.</p>
<p>Então, de certa forma, é uma pena que agora nós tenhamos que migrar nossos softwares para o HTML5, mesmo que o HTML5 adicione novas funcionalidades interessantes. Eu estou lentamente migrando meus softwares, mas levará um bom tempo até que eu possa fazer com o HTML5 o que eu posso fazer com o HTML4. Assim, estou esperançoso de que grande parte de tudo o que é o HTML5, ou sua próxima revisão, volte a permanecer estável por 10 ou 15 anos.</p>
<p>Para o CSS, não tenho muita certeza sobre o que quero. Como visto acima, há várias coisas que precisamos adicionar para satisfazer os vários novos usos. Mas o CSS não foi desenhado para tarefas complexas. Ele foi feito para ser usado por usuários comuns para aplicação de estilos simples. Ao contrário do proposto, o CSS está se tornando complexo demais para a maioria das pessoas. Então talvez seja o momento de se recomeçar do zero criando duas novas linguagens: uma simples que todas as pessoas saibam usar, mas que talvez seja limitada na quantidade de controles detalhados que oferece, e uma avançada, adequada até mesmo para editoração complexa de livros e revistas. Mas eu ainda não vi nenhuma proposta que tenha me agradado.</p>
<p>É bom ver diversos pré-processadores de CSS para ajudar os usuários avançados, como o <a href="http://en.wikipedia.org/wiki/Sass_%28stylesheet_language%29" target="_blank">SASS</a> e o <a href="http://en.wikipedia.org/wiki/LESS_%28stylesheet_language%29" target="_blank">LESS</a>. Eu tinha esperança de eles aparecessem mais cedo. Espero que eles se desenvolvam e se tornem ainda melhores. Por outro lado, estou surpreso com o tamanho de algumas folhas de estilo que as pessoas têm criado. As mais complexas que eu mesmo criei têm 10 kbytes, e a maioria é bem menor que isso. Fico me questionando se eles estão fazendo a coisa certa…</p>
<p>Dessa forma, em termos práticos, acho que ainda iremos adicionar novas funcionalidades ao CSS durante os próximos poucos anos. Haverá, sem dúvidas, novos módulos no CSS3, e alguns módulos que já estão finalizados serão provavelmente estendidos ou substituídos por um módulo do CSS4.</p>
<p>Continuaremos mantendo a retrocompatibilidade do CSS, mas isso também significa se tornará gradativamente mais difícil de adicionar novas funcionalidades a ele, e suas sintaxes poderão não ser as mais intuitivas.</p>
<p><em>Tradução técnica: Felipe Sanches </em></p>
		<div class="apiki-wp-taxonomy-content-ads">
			<h6>Mensagem do anunciante:</h6>
			<p>
				Receba consultoria especializada em WordPress com os melhores profissionais do mercado.				<a href="http://wpconsultoria.apiki.com/?utm_source=iMasters&amp;utm_medium=Bloco_Texto&amp;utm_content=04_2013&amp;utm_campaign=ApikiWPConsultoria">Conheça o Apiki WP Consultoria.</a>
			</p>
		</div>
		<p>O post <a href="http://imasters.com.br/front-end/css/entrevista-com-bert-bos-criador-do-padrao-css/">Entrevista com Bert Bos, criador do padrão CSS</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/front-end/css/entrevista-com-bert-bos-criador-do-padrao-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP .NET 4.5 Web Forms &#8211; Tratamento de erros e registro de log &#8211; Parte 09</title>
		<link>http://imasters.com.br/framework/dotnet/asp-net-4-5-web-forms-tratamento-de-erros-e-registro-de-log-parte-09/</link>
		<comments>http://imasters.com.br/framework/dotnet/asp-net-4-5-web-forms-tratamento-de-erros-e-registro-de-log-parte-09/#comments</comments>
		<pubDate>Thu, 23 May 2013 17:00:56 +0000</pubDate>
		<dc:creator>José Carlos Macoratti</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://imasters.com.br/?p=42363</guid>
		<description><![CDATA[<p>Neste artigo aprendemos como manipular erros ao nível da aplicação, a nível da página, e do nível de código.</p><p>O post <a href="http://imasters.com.br/framework/dotnet/asp-net-4-5-web-forms-tratamento-de-erros-e-registro-de-log-parte-09/">ASP .NET 4.5 Web Forms &#8211; Tratamento de erros e registro de log &#8211; Parte 09</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Neste artigo, vamos incluir o tratamento de erros e o registro de erros em nossa aplicação.</p>
<p>O tratamento de erros vai permitir que o aplicativo lide de forma mais amigável com os erros, exibindo mensagens de erros adequadas em cada situação. O registro de erros permitirá que possamos encontrar e corrigir os erros que ocorreram durante a execução da aplicação.</p>
<p>O que você vai aprender:</p>
<ul>
<li>Como adicionar manipulação de erro global para a configuração do aplicativo;</li>
<li>Como adicionar o tratamento de erros a nível de aplicação, de página e de código;</li>
<li>Como registrar erros para posterior análise;</li>
<li>Como exibir mensagens de erro que não comprometam a segurança;</li>
<li>Como implementar módulos registro de erros e manipuladores (ELMAH) de registro de erros;</li>
</ul>
<p>Este artigo foi integralmente baseado no artigo original: <a href="http://www.asp.net/web-forms/tutorials/aspnet-45/getting-started-with-aspnet-45-web-forms/aspnet-error-handling">http://www.asp.net/web-forms/tutorials/aspnet-45/getting-started-with-aspnet-45-web-forms/aspnet-error-handling</a> (com algumas alterações e portado para a linguagem VB .NET).</p>
<h2>Conceitos</h2>
<p>As aplicações ASP.NET devem ser capaz de lidar com os erros que ocorrem durante a execução de uma forma consistente. A ASP.NET usa o Common Language Runtime (CLR), que fornece uma maneira de notificar as aplicações de erros de uma maneira uniforme. Quando ocorre um erro, uma exceção é lançada. Uma exceção é qualquer erro, condição ou comportamento inesperado que um aplicativo encontra durante sua execução.</p>
<p>Na plataforma .NET, uma exceção é um objeto que herda da classe System.Exception. Uma exceção é lançada a partir de uma área de código onde ocorreu um problema. A exceção é passada para a pilha de chamadas, um lugar onde a aplicação fornece código para manipular a exceção. Se o aplicativo não tratar a exceção, o navegador é forçado a exibir os detalhes do erro.</p>
<p>Como melhor prática, lidamos com os erros ao nível do código usando blocos try/catch /finally dentro do código. Geralmente, colocamos esses blocos de modo que o usuário possa corrigir problemas no contexto em que eles ocorrem. Se os blocos de tratamento de erros estiverem muito longe de onde ocorreu o erro, torna-se mais difícil fornecer aos usuários a informação do que ele precisa para corrigir o problema.</p>
<h2>Classe de exceção</h2>
<p>A classe Exception é a classe base da qual as exceções herdam. A maioria dos objetos de exceção são instâncias de alguma classe derivada da classe Exception, como a classeSystemException, a classe IndexOutOfRangeException, ou a classe ArgumentNullException. A classe Exception tem propriedades, tais como a propriedade StackTrace, a propriedadeInnerExceptio e a propriedade Message, que fornecem informações específicas sobre o erro que ocorreu.</p>
<h2>Hierarquia de herança de exceção</h2>
<p>O runtime tem um conjunto base de exceções que derivam da classe SystemException, que ele lança quando uma exceção for encontrada. A maioria das classes que herdam da classe de exceção, como a classe IndexOutOfRangeException e a classe ArgumentNullException, não implementam membros adicionais. Portanto, a informação mais importante para uma exceção pode ser encontrada na hierarquia das exceções, o nome da exceção, e as informações contidas no exceção.</p>
<h2>Hierarquia manipulação de exceção</h2>
<p>Em uma aplicação ASP.NET Web Forms, exceções podem ser tratadas com base em uma hierarquia de tratamento específico. Uma exceção pode ser tratada nos seguintes níveis:</p>
<ol>
<li>Nível de aplicação;</li>
<li>Nível de página;</li>
<li>Nível de código.</li>
</ol>
<p>Quando um aplicativo lida com exceções, informações adicionais sobre a exceção que é herdada da classe Exception muitas vezes podem ser recuperadas e exibidas para o usuário. Além do nível de aplicativo, página e código, você também pode lidar com exceções no nível de módulo HTTP e/ou usando um manipulador personalizado IIS.</p>
<h3>Tratamento de erros a nível de aplicação</h3>
<p>Você pode lidar com erros padrão no nível do aplicativo, quer seja modificando a configuração de seu aplicativo ou adicionando um manipulador Application_Error no arquivoGlobal.asax de sua aplicação.</p>
<p>Você pode lidar com erros padrão e erros de HTTP adicionando uma seção customErrors no arquivo Web.config. A seção customErrors permite que você especifique uma página padrão para a qual os usuários serão redirecionados quando ocorrer um erro. Ele também permite que você especifique páginas individuais para erros de código específicos de status.</p>
<p>A seguir, temos um exemplo de configuração feita no arquivo web.config que define o tratamento de erro neste escopo:</p>
<pre class="brush: vbnet; gutter: true">&lt;configuration&gt;
 &lt;system.web&gt;
 &lt;customErrors mode=&quot;On&quot; defaultRedirect=&quot;ErrorPage.aspx?handler=customErrors%20section%20-%20Web.config&quot;&gt;
 &lt;error statusCode=&quot;404&quot; redirect=&quot;ErrorPage.aspx?msg=404&amp;amp;handler=customErrors%20section%20-%20Web.config&quot;/&gt;
 &lt;/customErrors&gt;
 &lt;/system.web&gt;
&lt;/configuration&gt;</pre>
<p>Infelizmente, quando usamos a configuração para redirecionar o usuário para uma página diferente, não temos os detalhes do erro que ocorreu.No entanto, podemos capturar os erros que ocorrem em qualquer lugar na aplicação, adicionando código para o manipulador Application_Error no arquivo Global.asax, conforme mostra o exemplo a seguir:</p>
<pre class="brush: vbnet; gutter: true">Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        &#039; dispara quando um erro ocorrer
        Dim exc As Exception = Server.GetLastError()

        If TypeOf exc Is HttpUnhandledException Then
            &#039; Passa o erro para a página de erro.
            Server.Transfer(&quot;ErrorPage.aspx?handler=Application_Error%20-%20Global.asax&quot;, True)
        End If
    End Sub</pre>
<h3>Tratamento de erro a nível de página</h3>
<p>Um manipulador a nível de página retorna o usuário para a página onde o erro ocorreu, mas como as instâncias dos controles não são mantidas, não haverá mais nada na página. Para fornecer os detalhes do erro para o usuário, devemos escrever especificamente os detalhes do erro na página.</p>
<p>Devemos usar um manipulador de erro a nível de página para registrar erros sem tratamento ou para levar o usuário para uma página que pode exibir informações úteis.</p>
<p>Este exemplo de código mostra um manipulador para o evento de erro em uma página ASP.NET. Este manipulador captura todas as exceções que não estão sendo tratadas dentro do bloco try/catch na página.</p>
<pre class="brush: vbnet; gutter: true">Private Sub Page_Error(sender As Object, e As EventArgs)

Dim exc As Exception = Server.GetLastError()
&#039; Trata o erro
If TypeOf exc Is HttpUnhandledException Then
     ErrorMsgTextBox.Text = &quot;Ocorreu um erro nesta página &quot; 
End If
    &#039; LImpar ao erro a partir do servidor
    Server.ClearError()
End Sub</pre>
<p>Depois de tratar um erro, você deve limpá-lo, chamando o método ClearError do objeto Server (classe HttpServerUtility); caso contrário, você vai ver um erro que tenha ocorrido anteriormente.</p>
<h3>Tratamento de erro a nível de código</h3>
<p>A instrução try-catch consiste em um bloco try seguido de uma ou mais cláusulas de captura, que especificam os manipuladores para exceções diferentes. Quando uma exceção é lançada, o Common Language Runtime (CLR) procura a instrução catch que trata esta exceção.</p>
<p>Se o método atualmente em execução não contém um bloco catch, a CLR olha para o método que chamou o método atual, e assim por diante, até a pilha de chamadas. Se nenhum bloco catch é encontrado, a CLR exibe uma mensagem de exceção não tratada para o usuário e para a execução do programa.</p>
<p>O exemplo de código a seguir mostra uma maneira comum de usar try/catch/finally para manipular erros:</p>
<pre class="brush: vbnet; gutter: true">Try
    file.ReadBlock(buffer, index, buffer.Length)
Catch e As FileNotFoundException
    Server.Transfer(&quot;NoFileErrorPage.aspx&quot;, True)
Catch e As System.IO.IOException
    Server.Transfer(&quot;IOErrorPage.aspx&quot;, True)
Finally
    If file IsNot Nothing Then
 	file.Close()
   End If
End Try</pre>
<p>No código acima, o bloco try contém o código que precisa ser protegido contra uma possível exceção. O bloco é executado até que uma exceção é lançada ou o bloco é concluído com êxito. Se uma excepção FileNotFoundException ou uma exceção IOException ocorre, a execução é transferida para uma página diferente. Em seguida, o código contido no bloco finally é executado, se ocorreu um erro ou não &#8211; o código do bloco finally sempre será executado.</p>
<h2>Incluindo o suporte ao registro de erros</h2>
<p>Antes de adicionar a manipulação de erros em nossa aplicação, vamos adicionar o suporte ao registro de erros, adicionando uma classe ExceptionUtility na pasta de Logic do nosso projeto.</p>
<p>Ao fazer isso, cada vez que o aplicativo tratar um erro, os detalhes do erro serão adicionados ao arquivo de log de erros.</p>
<p>Clique com o botão direito do mouse sobre a pasta Logic e selecione Add -&gt; New Item;</p>
<p>A seguir, selecione Visual Basic -&gt; Code e o template Class e informe o nome ExceptionUtility.vb e clique no botão Add;</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42364" rel="attachment wp-att-42364"><img class="aligncenter  wp-image-42364" alt="aspn_4591" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4591.gif" width="595" height="335" /></a></p>
<p style="text-align: left">A seguir, digite o código abaixo neste arquivo:</p>
<pre class="brush: vbnet; gutter: true">Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.IO

Namespace WingtipToys.Logic
    &#039; Creia o nosso utilitário de tratamenteo de exceptions
    Public NotInheritable Class ExceptionUtility
        &#039; Todos os métodos são estativiso 
        Private Sub New()
        End Sub

        &#039; Registra uma exceção
        Public Shared Sub LogException(exc As Exception, source As String)
            &#039; Inclui a logica para as registrar as exceções
            &#039; Pega o caminho absoluto para o arquivo de log
            Dim logFile As String = &quot;App_Data/ErrorLog.txt&quot;
            logFile = HttpContext.Current.Server.MapPath(logFile)

            &#039; Abre o arquivo de log para acnexar e escrever o log
            Dim sw As New StreamWriter(logFile, True)
            sw.WriteLine(&quot;********** {0} **********&quot;, DateTime.Now)
            If exc.InnerException IsNot Nothing Then
                sw.Write(&quot;Inner Exception Type: &quot;)
                sw.WriteLine(exc.InnerException.[GetType]().ToString())
                sw.Write(&quot;Inner Exception: &quot;)
                sw.WriteLine(exc.InnerException.Message)
                sw.Write(&quot;Inner Source: &quot;)
                sw.WriteLine(exc.InnerException.Source)
                If exc.InnerException.StackTrace IsNot Nothing Then
                    sw.WriteLine(&quot;Inner Stack Trace: &quot;)
                    sw.WriteLine(exc.InnerException.StackTrace)
                End If
            End If
            sw.Write(&quot;Exception Type: &quot;)
            sw.WriteLine(exc.[GetType]().ToString())
            sw.WriteLine(&quot;Exception: &quot; + exc.Message)
            sw.WriteLine(&quot;Source: &quot; + source)
            sw.WriteLine(&quot;Stack Trace: &quot;)
            If exc.StackTrace IsNot Nothing Then
                sw.WriteLine(exc.StackTrace)
                sw.WriteLine()
            End If
            sw.Close()
        End Sub
    End Class
End Namespace</pre>
<p>Quando ocorre uma exceção, ela pode ser gravada em um arquivo de log de exceção chamando o método LogException. Este método tem dois parâmetros: o objeto da exceção e uma string contendo detalhes sobre a origem da exceção. O log de exceção é gravado no arquivo ErrorLog.txt na pasta App_Data.</p>
<h2>Adicionando uma página de erro</h2>
<p>Em nossa aplicação usaremos uma página para exibir erros. A página de erro é projetada para mostrar uma mensagem de erro segura para os usuários do site. No entanto, se o usuário for um desenvolvedor fazendo uma solicitação HTTP que está sendo servida localmente na máquina onde reside o código, iremos exibir detalhes de erro adicionais na página de erro que serão vistas apenas pelo desenvolvedor.</p>
<p>Clique com o botão direito do mouse sobre o nome do projeto e selecione Add -&gt; New Item. Selecione Visual Basic -&gt; Web e, a seguir, o template Web Form using Master Page e informe o nome ErrorPage.aspx e clique no botão Add.</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42366" rel="attachment wp-att-42366"><img class="aligncenter  wp-image-42366" alt="aspn_4592" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4592.gif" width="610" height="333" /></a></p>
<p>Selecione o arquivo Site.Master como a página principal e, em seguida, escolha OK.</p>
<p>A seguir, substitua a marcação existente pelo código a seguir:</p>
<pre class="brush: vbnet; gutter: true">&lt;%@ Page Title=&quot;&quot; Language=&quot;vb&quot; AutoEventWireup=&quot;false&quot; MasterPageFile=&quot;~/Site.Master&quot; CodeBehind=&quot;ErrorPage.aspx.vb&quot; Inherits=&quot;WingTipToys.ErrorPage&quot; %&gt;
&lt;asp:Content ID=&quot;Content1&quot; ContentPlaceHolderID=&quot;HeadContent&quot; runat=&quot;server&quot;&gt;
&lt;/asp:Content&gt;
&lt;asp:Content ID=&quot;Content2&quot; ContentPlaceHolderID=&quot;FeaturedContent&quot; runat=&quot;server&quot;&gt;
     &lt;h2&gt;Erro:&lt;/h2&gt;
    &lt;p&gt;&lt;/p&gt;
    &lt;asp:Label ID=&quot;FriendlyErrorMsg&quot; runat=&quot;server&quot; Text=&quot;Label&quot; Font-Size=&quot;Large&quot; style=&quot;color: red&quot;&gt;&lt;/asp:Label&gt;

    &lt;asp:Panel ID=&quot;DetailedErrorPanel&quot; runat=&quot;server&quot; Visible=&quot;false&quot;&gt;
        &lt;p&gt;
            Erro Detalhado:
            &lt;br /&gt;
            &lt;asp:Label ID=&quot;ErrorDetailedMsg&quot; runat=&quot;server&quot; Font-Bold=&quot;true&quot; Font-Size=&quot;Large&quot; /&gt;&lt;br /&gt;
        &lt;/p&gt;
        &lt;p&gt;
            Tratamento Erro:
            &lt;br /&gt;
            &lt;asp:Label ID=&quot;ErrorHandler&quot; runat=&quot;server&quot; Font-Bold=&quot;true&quot; Font-Size=&quot;Large&quot; /&gt;&lt;br /&gt;
        &lt;/p&gt;
        &lt;p&gt;
            Mensagem de erro Detalhada:
            &lt;br /&gt;
            &lt;asp:Label ID=&quot;InnerMessage&quot; runat=&quot;server&quot; Font-Bold=&quot;true&quot; Font-Size=&quot;Large&quot; /&gt;&lt;br /&gt;
        &lt;/p&gt;
        &lt;pre&gt;
            &lt;asp:Label ID=&quot;InnerTrace&quot; runat=&quot;server&quot;  /&gt;
        &lt;/pre&gt;
    &lt;/asp:Panel&gt;

&lt;/asp:Content&gt;
&lt;asp:Content ID=&quot;Content3&quot; ContentPlaceHolderID=&quot;MainContent&quot; runat=&quot;server&quot;&gt;
&lt;/asp:Content&gt;</pre>
<p>No arquivo code-behind ErrorPage.aspx.vb inclua o código abaixo:</p>
<pre class="brush: vbnet; gutter: true">Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports WingTipToys.WingtipToys.Logic

Public Class ErrorPage
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        &#039; Cria as mensagens de erro seguras
        Dim generalErrorMsg As String = &quot;Ocorreu um problema na aplicação web. Tente novamente. &quot; + &quot;Se o ocorre persistir contacte o suporte técnico.&quot;
        Dim httpErrorMsg As String = &quot;Ocorreu um erro HTTP. Página não encontrada. Tente novamente.&quot;
        Dim unhandledErrorMsg As String = &quot;O erro não foi tratado pelo código da aplicação.&quot;

        &#039; exibe as mensagens de erro
        FriendlyErrorMsg.Text = generalErrorMsg

        &#039; Determina onde o erro foi tratado
        Dim errorHandler__1 As String = Request.QueryString(&quot;handler&quot;)
        If errorHandler__1 Is Nothing Then
            errorHandler__1 = &quot;Error Page&quot;
        End If

        &#039; pegao ultimo erro do servidor.
        Dim ex As Exception = Server.GetLastError()

        &#039; Pega o numero do erro passado como um valor querystring 
        Dim errorMsg As String = Request.QueryString(&quot;msg&quot;)
        If errorMsg = &quot;404&quot; Then
            ex = New HttpException(404, httpErrorMsg, ex)
            FriendlyErrorMsg.Text = ex.Message
        End If

        &#039;Se a exceção não existe mais, cria uma exceção genérica
        If ex Is Nothing Then
            ex = New Exception(unhandledErrorMsg)
        End If

        &#039; exibe os detalhes de erro somente para o desenvolvedor.SOMENTE ACESSO LOCAL
        If Request.IsLocal Then
            &#039;mensagem de erro detalhada
            ErrorDetailedMsg.Text = ex.Message

            &#039; mostra onde o erro foi tratado
            ErrorHandler.Text = errorHandler__1

            &#039; mostra o acesso local 
            DetailedErrorPanel.Visible = True

            If ex.InnerException IsNot Nothing Then
                InnerMessage.Text = ex.[GetType]().ToString() + &quot;&lt;br/&gt;&quot; + ex.InnerException.Message
                InnerTrace.Text = ex.InnerException.StackTrace
            Else
                InnerMessage.Text = ex.[GetType]().ToString()
                If ex.StackTrace IsNot Nothing Then
                    InnerTrace.Text = ex.StackTrace.ToString().TrimStart()
                End If
            End If
        End If

        &#039; registra a exceção
        ExceptionUtility.LogException(ex, errorHandler__1)

        &#039; limpa o erro do servidor
        Server.ClearError()
    End Sub

End Class</pre>
<p>Quando a página de erro for exibida, o evento Page_Load é executado. No manipulador Page_Load, o local onde o erro foi primeiro tratado é determinado. Então, o último erro que ocorreu é obtido através do método GetLastError do objeto Server.</p>
<p>Se a exceção não existir mais, uma exceção genérica será criada. Então, se o pedido HTTP foi feita localmente, todos os detalhes do erro serão mostrados. Neste caso, apenas a máquina local executando a aplicação web vai ver esses detalhes do erro. Depois que as informações do erro forem exibidas, o erro é adicionado ao arquivo de log e o erro é eliminado do servidor.</p>
<h2>Exibindo mensagens de erro não tratadas para a aplicação</h2>
<p>Ao adicionar uma seção customErrors no arquivo Web.config, você pode rapidamente tratar erros simples que ocorrem na aplicação. Você também pode especificar como lidar com erros com base no seu valor de código de status, como 404 &#8211; Arquivo não encontrado.</p>
<p>Abra o arquivo web.config da raiz do projeto e inclua a seção customErrors no interior do nó conforme abaixo:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42369" rel="attachment wp-att-42369"><img class="aligncenter  wp-image-42369" alt="aspn_4593" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4593.gif" width="587" height="172" /></a></p>
<p>A seção customErrors especifica o modo, o que é definido como &#8220;On&#8221; (mode=&#8221;On&#8221;). Também especifica o defaultRedirect, que diz à aplicação para qual página navegar quando ocorrer um erro.</p>
<p>Além disso, adicionamos um elemento de erro específico que define como lidar com um erro 404 quando uma página não for encontrada. Mais adiante, vamos adicionar o tratamento de erro adicional que irá capturar os detalhes de um erro a nível de aplicação.</p>
<h2>Testando a aplicação</h2>
<p>Execute a aplicação pressionando CTRL+F5 (ou clicando no botão do menu que executa a aplicação). O navegador irá abrir e apresentar a página Default.aspx:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42371" rel="attachment wp-att-42371"><img class="aligncenter  wp-image-42371" alt="aspn_4584 (1)" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4584-1.gif" width="591" height="347" /></a></p>
<p>Informe a seguinte URL no navegador para provocar um erro: http://localhost:674846/NoPage.aspx (o número da porta para sua aplicação será diferente).</p>
<p>A página de erro ErrorPage.aspx será exibida conforme a figura a seguir:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42372" rel="attachment wp-att-42372"><img class="aligncenter  wp-image-42372" alt="aspn_4594" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4594.gif" width="536" height="336" /></a></p>
<p>Quando você solicita a página NoPage.aspx que não existe, a página de erro irá mostrar a mensagem de erro simples e as informações de erro detalhadas (se detalhes adicionais estiverem disponíveis).</p>
<p>No entanto, se o usuário solicitou uma página inexistente a partir de um local remoto, a página de erro só vai mostrar a mensagem de erro em vermelho.</p>
<h2>Incluindo uma exceção para testes</h2>
<p>Para verificar como o aplicativo irá funcionar quando ocorre um erro, você pode deliberadamente criar condições de erro. Vamos lançar uma exceção de teste quando a página padrão for carregada para ver o que acontece.</p>
<p>Abra o arquivo code-behind Default.aspx.vb e no evento Load da página inclua o código abaixo:</p>
<pre class="brush: vbnet; gutter: true">Public Class _Default
    Inherits Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        Throw New InvalidOperationException(&quot;O Erro : InvalidOperationException &quot; + &quot;õcorreu no evento Page_Load ná página Default.aspx.&quot;)
    End Sub
End Class</pre>
<p>No código acima estamos criando uma exceção do tipo InvalidOperationException, que irá ocorrer quando a página Default.aspx for carregada.</p>
<h3>Testando a aplicação</h3>
<p>Execute a aplicação novamente pressionando CTRL+F5 (ou clicando no botão do menu que executa a aplicação). O navegador irá abrir e apresentar a página Default.aspx.</p>
<p>A página exibirá a mensagem de erro conforme abaixo:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42373" rel="attachment wp-att-42373"><img class="aligncenter  wp-image-42373" alt="aspn_4596" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4596.gif" width="547" height="349" /></a></p>
<h2>Adicionando o tratamento de erros a nível de aplicativo</h2>
<p>Em vez de capturar a exceção usando a seção customErrors no arquivo Web.config, onde você ganha pouca informação sobre a exceção, você pode interceptar o erro no nível da aplicação e recuperar detalhes do erro.</p>
<p>Abra o arquivo Global.asax e atualize o código do evento Application_Error conforme abaixo:</p>
<pre class="brush: vbnet; gutter: true"> Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        &#039; pega o último erro do servidor
        Dim exc As Exception = Server.GetLastError()

        If TypeOf exc Is HttpUnhandledException Then
            If exc.InnerException IsNot Nothing Then
                exc = New Exception(exc.InnerException.Message)
                Server.Transfer(&quot;ErrorPage.aspx?handler=Application_Error%20-%20Global.asax&quot;, True)
            End If
        End If

    End Sub</pre>
<p>Quando ocorre um erro na aplicação, o manipulador Application_Error é chamado. Nesse manipulador, a última exceção é recuperada e revisada. Se a exceção ocorreu sem um tratamento e a exceção contém detalhes de uma exceção interior (InnerException não é nulo), a aplicação transfere a execução para a página de erro onde os detalhes da exceção são exibidos.</p>
<h3>Testando a aplicação</h3>
<p>Execute a aplicação novamente pressionando CTRL+F5 (ou clicando no botão do menu que executa a aplicação). O navegador irá abrir e apresentar a página Default.aspx.</p>
<p>A página exibirá a mensagem de erro conforme abaixo:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42374" rel="attachment wp-att-42374"><img class="aligncenter  wp-image-42374" alt="aspn_4595" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4595.gif" width="538" height="373" /></a></p>
<h2>Adicionando o tratamento de erros a nível de página</h2>
<p>Podemos adicionar a manipulação de erros a nível de página para uma página, seja adicionando um atributo ErrorPage na diretiva @Page da página, ou pela adição de um manipulador de eventos Page_Error ao código-behind da página. Vamos adicionar um manipulador de eventos Page_Error que irá transferir a execução para a página ErrorPage.aspx.</p>
<p>Abra o arquivo code-behind Default.aspx.vb e inclua o código para o evento Page_Error() conforme abaixo:</p>
<pre class="brush: vbnet; gutter: true">Private Sub Page_Error(sender As Object, e As EventArgs)
        &#039; pega o ultimo erro do servidor.
        Dim exc As Exception = Server.GetLastError()

        &#039; trata o erro
        If TypeOf exc Is InvalidOperationException Then
            &#039; Passa o erro para pagina de erro
            Server.Transfer(&quot;ErrorPage.aspx?handler=Page_Error%20-%20Default.aspx&quot;, True)
        End If
    End Sub</pre>
<p>Quando ocorre um erro na página, o manipulador de eventos Page_Error é chamado. Nesse manipulador, a última exceção é recuperada e revisada. Se um erro do tipo InvalidOperationException ocorrer, o manipulador de eventos Page_Error transfere a execução para a página de erro onde os detalhes da exceção são exibidos.</p>
<h3>Testando a aplicação</h3>
<p>Execute a aplicação novamente pressionando CTRL+F5 (ou clicando no botão do menu que executa a aplicação). O navegador irá abrir e apresentar a página Default.aspx.</p>
<p>A página exibirá a mensagem de erro conforme abaixo:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42375" rel="attachment wp-att-42375"><img class="aligncenter  wp-image-42375" alt="aspn_4597" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4597.gif" width="554" height="358" /></a></p>
<p>Após essa bateria de testes, remova ou comente o código usado no evento Load da página Default.aspx para lançar deliberadamente um erro.</p>
<h2>Usando ELMAH</h2>
<p>ELMAH (módulos de registro de erros e manipuladores) é uma unidade de registro de erros que você conecta em sua aplicação ASP.NET como um pacote NuGet. A ELMAH oferece os seguintes recursos:</p>
<ul>
<li>Registro de exceções não tratadas;</li>
<li>Uma página da Web para exibir todo o log de exceções não tratadas;</li>
<li>Uma página da Web para exibir os detalhes de cada exceção logada;</li>
<li>Uma notificação por e-mail de cada erro no momento em que ocorre;</li>
<li>Um feed RSS dos últimos 15 erros do registro.</li>
</ul>
<p>Antes de trabalhar com o ELMAH, temos que instalá-lo. Isto é fácil usando o instalador de pacotes NuGet.</p>
<p><strong>Obs:</strong> O NuGet é uma extensão do Visual Studio que faz com que seja fácil de instalar e atualizar bibliotecas de código aberto e ferramentas no Visual Studio.</p>
<p>Com o projeto aberto no Visual Web Developer for Web, clique no menu TOOLS  e a seguir selecione Library Package Manager -&gt; Manage Nuget Packages for Solution.</p>
<p><a href="http://imasters.com.br/?attachment_id=42376" rel="attachment wp-att-42376"><img class="aligncenter size-full wp-image-42376" alt="aspn_4598" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4598.gif" width="612" height="272" /></a></p>
<p>A janela - Manage Nuget Packages - será exibida. Selecione o item OnLine e digite na caixa de busca a palavra ELMAH. O pacote ELMAH deverá ser exibido no topo da lista de itens encontrados. Clique no botão Install para instalar o pacote ELMAH. A instalação apresentará uma tela solicitando a confirmação para instalar o pacote no projeto. Confirme clicando em OK.</p>
<p><strong>Obs:</strong> Você deve estar conectado para poder baixar o pacote.</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42377" rel="attachment wp-att-42377"><img class="aligncenter  wp-image-42377" alt="aspn_4599" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_4599.gif" width="543" height="296" /></a></p>
<p>Se for solicitado, recarregar os arquivos abertos, selecione &#8220;Sim para Todos&#8221; (Yes to All).</p>
<p>O pacote ELMAH adiciona entradas na seção &lt;modules&gt; do nó &lt;system.webServer&gt; no arquivo Web.config. Se o sistema solicitar se você deseja recarregar o arquivo Web.config modificado, clique em Sim(Yes).</p>
<p>Com essa etapa concluída, estamos pronto para usar o pacote ELMAH.</p>
<h2>Visualizando o log ELMAH</h2>
<p>Ver o log ELMAH é fácil, mas primeiro vamos criar uma exceção não tratada que será gravada no log ELMAH.</p>
<p>Pressione CTRL + F5 para executar nossa aplicação. A seguir, digite a seguinte URL (usando o seu número de porta) no navegador para provocar uma exceção não tratada no log ELMAH: localhost:64786/NoPage.aspx.</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42378" rel="attachment wp-att-42378"><img class="aligncenter  wp-image-42378" alt="aspn_459a" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_459a.gif" width="612" height="302" /></a></p>
<p style="text-align: center">
<p style="text-align: left">A página de erro será exibida conforme abaixo:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42379" rel="attachment wp-att-42379"><img class="aligncenter  wp-image-42379" alt="aspn_459b" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_459b.gif" width="603" height="364" /></a></p>
<p style="text-align: center">
<p>Para visualizar o log de erros ELMAH digite a url no navegador: http://localhost:64786/elmah.axd</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42380" rel="attachment wp-att-42380"><img class="aligncenter  wp-image-42380" alt="aspn_459c" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_459c.gif" width="576" height="160" /></a></p>
<p>O log de erros ELMAH será exibido indicando informações sobre a ocorrência:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42381" rel="attachment wp-att-42381"><img class="aligncenter  wp-image-42381" alt="aspn_459d" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_459d.gif" width="594" height="211" /></a></p>
<p>Se você clicar no link Details, irá obter os detalhes da exceção:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42382" rel="attachment wp-att-42382"><img class="aligncenter  wp-image-42382" alt="aspn_459e" src="http://imasters.com.br/wp-content/uploads/2013/05/aspn_459e.gif" width="577" height="407" /></a></p>
<p><strong>Atenção!!!</strong> Cuidado ao usar o recurso ELMAH, pois qualquer um pode ler o código de erro acessando a página, e existem exploits (um exploit é um programa de computador ou uma sequência de comandos que se aproveita das vulnerabilidades de um sistema) que exploram isso.</p>
<ul>
<li>Veja como hackear Elmah <a href="http://www.troyhunt.com/2012/01/aspnet-session-hijacking-with-google.html">aqui</a>.</li>
<li>Para implementar seguro (não testei): <a id="yui_3_7_2_1_1365635417613_6259" href="http://haacked.com/archive/2007/07/24/securely-implement-elmah-for-plug-and-play-error-logging.aspx" target="_blank" rel="nofollow">http://haacked.com/archive/2007/07/24/securely-implement-elmah-for-plug-and-play-error-logging.aspx</a></li>
</ul>
<p>***</p>
<p>Colaboração de Vitor Hugo.</p>
<p>Neste artigo aprendemos como manipular erros ao nível da aplicação, a nível da página, e do nível de código. Aprendemos também a registrar erros tratados e sem tratamento para posterior análise. Além disso, aprendemos  sobre a importância das mensagens de erro seguras.</p>
<p>E com isso encerramos essa série de tutoriais onde acompanhamos a criação de uma aplicação ASP .NET Web Forms usando o Visual Studio Express For Web 2012.</p>
<p>Embora a aplicação possa ser melhorada em muitos aspectos, o objetivo foi mostrar como podemos criar aplicações dinâmicas com acesso a dados usando recursos integrados do Visual Studio.</p>
<p>Espero que esses artigos tenham contribuído para aguçar o seu desejo em aprender mais sobre a tecnologia ASP .NET, pois o que vimos foi só a ponta do Iceberg.</p>
<p>Bom estudo!!!</p>
<p>O post <a href="http://imasters.com.br/framework/dotnet/asp-net-4-5-web-forms-tratamento-de-erros-e-registro-de-log-parte-09/">ASP .NET 4.5 Web Forms &#8211; Tratamento de erros e registro de log &#8211; Parte 09</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/framework/dotnet/asp-net-4-5-web-forms-tratamento-de-erros-e-registro-de-log-parte-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aparelho gerencia dois cartões SIM e sintoniza TV Digital no Android 4.1.2</title>
		<link>http://imasters.com.br/tecnologia/aparelho-gerencia-dois-cartoes-sim-e-sintoniza-tv-digital-no-android-4-1-2/</link>
		<comments>http://imasters.com.br/tecnologia/aparelho-gerencia-dois-cartoes-sim-e-sintoniza-tv-digital-no-android-4-1-2/#comments</comments>
		<pubDate>Thu, 23 May 2013 16:13:59 +0000</pubDate>
		<dc:creator>Info Online</dc:creator>
				<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://imasters.com.br/desenvolvimento/aparelho-gerencia-dois-cartoes-sim-e-sintoniza-tv-digital-no-android-4-1-2/</guid>
		<description><![CDATA[<p>					
							   Seguindo o mesmo padrão de layout aplicado no Razr D3, o Motorola Razr D1 é um smartphone compacto, com preço competitivo e bons recursos. Equipado com TV digital,...						
							</p><p>O post <a href="http://imasters.com.br/tecnologia/aparelho-gerencia-dois-cartoes-sim-e-sintoniza-tv-digital-no-android-4-1-2/">Aparelho gerencia dois cartões SIM e sintoniza TV Digital no Android 4.1.2</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<p><img src="http://imasters.com.br/wp-content/uploads/2013/05/130548-razr-d1-250.jpg" alt="" width="250" height="153" class="align size-large wp-image-42600" />							</p>
<p>Seguindo o mesmo padrão de layout aplicado no <b><a href="http://info.abril.com.br/reviews/smartphones/motorola-razr-d3.shtml" title="" target="_blank">Razr D3</a></b>, o Motorola Razr D1 é um smartphone compacto, com preço competitivo e bons recursos. Equipado com TV digital, dois cartões SIM e processador de 1 GHz, o gadget roda o Android 4.1.2 sem muitos engasgos e com desempenho acima da média para a categoria.</p>
<p>Custando 529 reais, o D1 é uma opção mais econômica para quem precisa gerenciar duas linhas e não abre mão de maior velocidade nas tarefas básicas. O processador ARMv7 com um núcleo de 1 GHz, somado à memória RAM de 1 GB, garantiu em nossos testes uma boa experiência de uso. O smartphone rodou os principais aplicativos, como Facebook, Instagram e games sem grandes problemas. Há lentidão em alguns pontos, como na gestão do app de TV digital e com muitos aplicativos abertos simultaneamente, mas nada acima do normal para um smartphone de entrada.</p>
<p><strong>Benchmark Quadrant (em pontos)</strong><br />
Barras maiores indicam melhor desempenho<br />
<!-- compini --></p>
<div class="comparativo">
<p>Motorola / Razr D1</p>
<div class="bar" style="width:80%">2.450</div>
<p>Positivo/YPY 400</p>
<div class="bar" style="width:85%">2.557</div>
<p>Sony / Xperia J</p>
<div class="bar" style="width:65%">1.844</div>
</div>
<p><!-- compfim --></p>
<p><strong>Benchmark AnTuTu (em pontos)</strong><br />
Barras maiores indicam melhor desempenho<br />
<!-- compini --></p>
<div class="comparativo">
<p>Motorola / Razr D1</p>
<div class="bar" style="width:85%">6.739</div>
<p>Positivo/YPY 400</p>
<div class="bar" style="width:72%">5.586</div>
<p>Sony / Xperia J</p>
<div class="bar" style="width:45%">3.755</div>
</div>
<p><!-- compfim -->
</p>
<p>Ao contrário de outros modelos com TV digital, o D1 não possui uma antena retrátil. A sintonia dos canais é feita quando os fones de ouvido estão conectados. Dessa forma, assim como para a sintonia de rádio, o cabo dos fones assume o papel da antena. Na prática isso resulta em uma redução na força de sinal. Em nossos testes, isso não significou perda em qualidade ou recepção de menos canais, mas houve demora na sintonia. O aplicativo de TV exibe guia de programação, grava trechos dos programas direto no cartão microSD e salva capturas de tela. O layout é muito similar ao do Atrix TV Dual, também da Motorola.</p>
<p>Com 3,5 polegadas, a tela do D1 oferece 480 por 320 pixels. O brilho intenso e a fidelidade nas cores compensam a resolução baixa. É possível reparar serrilhados em menus e ícones do sistema. O resultado com vídeos também não é dos melhores. Por outro lado, há precisão nos toques e, no geral, a interface da Motorola, que se aproxima do Android em sua versão pura, causa boa impressão.</p>
<p>Com 5 megapixels, a câmera do Razr D1 faz fotos medianas em boas condições de luz. Durante a noite ou em ambientes pouco iluminados, o excesso de ruído e a falta de flash LED tornam o registro de imagens inviável. Os vídeos são gravados em 480p a 30 quadros por segundo.</p>
</p>
<p><strong>Fonte:</strong> <a href="http://info.abril.com.br/reviews/smartphones/motorola-razr-d1.shtml">http://info.abril.com.br/reviews/smartphones/motorola-razr-d1.shtml</a></p>
<p>O post <a href="http://imasters.com.br/tecnologia/aparelho-gerencia-dois-cartoes-sim-e-sintoniza-tv-digital-no-android-4-1-2/">Aparelho gerencia dois cartões SIM e sintoniza TV Digital no Android 4.1.2</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/tecnologia/aparelho-gerencia-dois-cartoes-sim-e-sintoniza-tv-digital-no-android-4-1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
			<media:content url="http://imasters.com.br/wp-content/uploads/2013/05/130548-razr-d1-250.jpg" medium="image" />
	</item>
		<item>
		<title>Você conhece o Supersumer?</title>
		<link>http://imasters.com.br/tecnologia/e-commerce/voce-conhece-o-supersumer/</link>
		<comments>http://imasters.com.br/tecnologia/e-commerce/voce-conhece-o-supersumer/#comments</comments>
		<pubDate>Thu, 23 May 2013 14:00:33 +0000</pubDate>
		<dc:creator>Armindo Ferreira</dc:creator>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[consumidor]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[prosumer]]></category>
		<category><![CDATA[supersumer]]></category>

		<guid isPermaLink="false">http://imasters.com.br/?p=42517</guid>
		<description><![CDATA[<p>O Supersumer é um consumidor bem diferente do que vemos hoje. Ele está conectado 24h/dia e quer atendimento a qualquer hora e em qualquer lugar.</p><p>O post <a href="http://imasters.com.br/tecnologia/e-commerce/voce-conhece-o-supersumer/">Você conhece o Supersumer?</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Primeiro veio o consumidor, depois o prosumer – um termo em inglês que junta as palavras producer (produtor) com consumer (consumidor).</p>
<p>Se antes o consumidor que tinha um problema com um produto dependia de um grande veículo de comunicação, agora basta estar conectado à internet para ele possa fazer barulho nas redes sociais. Este é o Prosumer.</p>
<p>Mas as empresas mal se acostumaram a este novo cenário e vem aí a evolução disso tudo que é o Supersumer. É um consumidor bem diferente do que vemos hoje. Ele está conectado 24 horas por dia e quer atendimento a qualquer hora e em qualquer lugar.</p>
<p>É o consumidor que usará Google Glass e outros gadgets que nem conhecemos ainda. Quase um consumidor cibernético que poderá transmitir falhas ou reclamações em tempo real e sua rede de contatos irá reverberar este problema até em alguns casos causar dores fortes de cabeça nos gestores.</p>
<p>Mas como podemos nos preparar para estes novos cenários que virão? Pode parecer clichê mas não vamos resolver novos problemas com soluções antigas. É preciso que os SACs se renovem urgentemente. Sistemas de informação de marketing, BI – Business Inteligence e SAC totalmente integrados farão toda a diferença.</p>
<p>E para um superconsumidor vamos precisar de um SuperSAC que use referenciamento geográfico, dispositivos móveis e vídeo-chamadas. Dei uma palestra recentemente sobre o tema:</p>
<p><iframe src="http://www.slideshare.net/slideshow/embed_code/19983360" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/armindoferreira/estamos-preparados-para-o-super-consumidor-supersumer-ou-superprosumer" title="Estamos preparados para o super consumidor (Supersumer ou SuperProsumer)" target="_blank">Estamos preparados para o super consumidor (Supersumer ou SuperProsumer)</a> </strong> from <strong><a href="http://www.slideshare.net/armindoferreira" target="_blank">Armindo Ferreira</a></strong> </div>
<p>E se você acha tudo isso muito utopia dê uma olhada no vídeo abaixo:</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/SS_aR99Nxrg?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>O vídeo está em inglês mas basicamente uma consumidora recebe a câmera quebrada, entra em contato com o SAC que já identifica o defeito e fala que irá trocar o produto, porém como a cliente precisa do produto o quanto antes a equipe localiza uma loja que tem a câmera nas imediações da casa da cliente. Pode parecer tudo muito utópico para a realidade brasileira, mas sinto que precisamos pelo menos discutir estas novas relações você não acha?</p>
<p>O post <a href="http://imasters.com.br/tecnologia/e-commerce/voce-conhece-o-supersumer/">Você conhece o Supersumer?</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/tecnologia/e-commerce/voce-conhece-o-supersumer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Business Intelligence para pequenas empresas</title>
		<link>http://imasters.com.br/gerencia-de-ti/business-intelligence-para-pequenas-empresas/</link>
		<comments>http://imasters.com.br/gerencia-de-ti/business-intelligence-para-pequenas-empresas/#comments</comments>
		<pubDate>Thu, 23 May 2013 13:00:37 +0000</pubDate>
		<dc:creator>Marcos Abellón</dc:creator>
				<category><![CDATA[Gerência de TI]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[business intelligence]]></category>
		<category><![CDATA[empresas]]></category>

		<guid isPermaLink="false">http://imasters.com.br/?p=42409</guid>
		<description><![CDATA[<p>Muita gente ainda vê o BI como algo que só serve para grandes empresas. Mas ele pode ser adaptado para o tamanho de qualquer empresa.</p><p>O post <a href="http://imasters.com.br/gerencia-de-ti/business-intelligence-para-pequenas-empresas/">Business Intelligence para pequenas empresas</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<p>De acordo com dados do IBGE, as pequenas e médias empresas são responsáveis por 20% da riqueza produzida no país. Isso significa algo em torno de 700 bilhões de dólares. Além disso, 60% dos empregos no Brasil são gerados pelas pequenas e médias empresas. Inserir as ferramentas de Business Intelligence nesSe nicho pode influenciar muito a economia do País!</p>
<p>Entretanto, muita gente ainda vê o Business Intelligence como algo distante, que só serve para as grandes empresas. Mas essa é uma visão equivocada. Na verdade o BI é uma ferramenta que pode ser adaptada para o tamanho de qualquer empresa.</p>
<p>Uma pesquisa realizada pela ComputerWorld Brasil, em 2010, mostrou que na América Latina foram investidos cerca de us$ 504 milhões em BI, sendo que metade dessa quantia veio para o Brasil. Segundo a consultoria IDC, em pesquisa do mesmo ano, as pequenas e médias empresas já estavam optando por essa solução, mas utilizando versões mais simples. Ou seja, pode-se afirmar que implementação do BI nesSas empresas é apontada como responsável por diversos resultados positivos, entre eles: redução de custos, melhoria de processos e aumento da retenção de clientes.</p>
<p>Mas se ainda assim você não está convencido, proponho que imagine a seguinte situação: uma rede de três mercadinhos que precisa saber quais são os produtos mais vendidos no começo do mês (momento de mais compra pelos consumidores em virtude do recebimento do salário). Essa informação é muito importante e interfere automaticamente no departamento de compras, logística, estoque e até na exposição dos produtos na loja, e o gestor precisa tomar uma decisão rapidamente para atender bem e não ficar sem produtos ou ficar com muitos produtos que não vendem em estoque. E é aí que entra o BI para resolver isso tudo.</p>
<p>Um sistema de Business Intelligence ajuda na tomada de decisão, e as possibilidades são muito maiores do que acabei de citar. Com as métricas e os KPIs corretos, é possível enxergar e entender melhor o cenário de atuação de qualquer empresa, seja grande ou pequena, e como agir de maneira correta e assertiva.</p>
<p>Uma pequena fábrica de sapatos, por exemplo, precisa saber quais são os clientes que mais compram sapatos masculinos bico fino na região Sudeste? Quais os modelos mais vendidos de sandálias para o Nordeste e quanto isso representa das vendas totais da empresa? As respostas dessas perguntas influenciam na elaboração da próxima coleção e, se a empresa não tem isso nas mãos, fica muito complicado decidir e garantir sucesso.</p>
<p>Podem ser perguntas simples, mas difíceis de serem respondidas em um primeiro momento. EsSas informações, no entanto, podem gerar <em>insights</em> valiosíssimos para a sua pequena empresa, capazes de gerar uma economia de tempo e custos. E ainda pode e deve influenciar na estratégia de vendas dos seus produtos ou serviços.</p>
<p>E isso tudo já pode ser acessado pelo tablet ou smartphone do dono da empresa. Com uma ferramenta de BI móvel, é possível acessar, analisar e cruzar dados estando em qualquer lugar.</p>
<p>Enfim, as possibilidades de utilização do Business Intelligence são inúmeras. Será que não é isso o que está faltando para a sua pequena ou média empresa crescer cada vez mais?</p>
<p>O post <a href="http://imasters.com.br/gerencia-de-ti/business-intelligence-para-pequenas-empresas/">Business Intelligence para pequenas empresas</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/gerencia-de-ti/business-intelligence-para-pequenas-empresas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15×2 – Gestão de crises com Israel Degásperi</title>
		<link>http://imasters.com.br/midia-e-marketing-digital/redes-sociais/15x2-episodio-1-gestao-de-crises-com-israel-degasperi/</link>
		<comments>http://imasters.com.br/midia-e-marketing-digital/redes-sociais/15x2-episodio-1-gestao-de-crises-com-israel-degasperi/#comments</comments>
		<pubDate>Thu, 23 May 2013 12:00:01 +0000</pubDate>
		<dc:creator>Camila Porto de Camargo</dc:creator>
				<category><![CDATA[Redes Sociais]]></category>
		<category><![CDATA[gestão de crises]]></category>
		<category><![CDATA[redes sociais]]></category>
		<category><![CDATA[tendências]]></category>

		<guid isPermaLink="false">http://imasters.com.br/?p=42359</guid>
		<description><![CDATA[<p>O 15×2 é meu mais novo projeto de conteúdo, para trazer o que há de mais relevante em vários campos de forma objetiva e rápida: 15 minutos.</p><p>O post <a href="http://imasters.com.br/midia-e-marketing-digital/redes-sociais/15x2-episodio-1-gestao-de-crises-com-israel-degasperi/">15×2 – Gestão de crises com Israel Degásperi</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<p>No dia 15 de abril, lancei meu novo projeto de conteúdo, o 15×2. Além da numerologia, 15×2 no dia 15, a ideia deste projeto é disseminar a informação de forma objetiva, como se fossem pílulas de conhecimento. Meu primeiro convidado para participar do videocast foi o <a href="https://www.facebook.com/idegasperi?fref=ts">Israel Degásperi</a>, profissional da área de mídias sociais que já teve passagens pela Tecnisa e Evoke.</p>
<p>Hoje o Israel atua em uma agência em São Paulo que atende contas de grandes marcas do varejo online. O Israel participou do 15×2 falando sobre um tema muito importante e delicado para empresas de todos os portes: gestão de crises nas mídias sociais.</p>
<h2>O que é na verdade o 15×2?</h2>
<p>O 15×2 é o meu mais novo projeto de conteúdo. Meu objetivo com ele é trazer o que há de mais relevante em vários campos de forma objetiva e rápida: em 15 minutos.  Irei conversar com pessoas de vários segmentos e, a partir de algumas perguntas, apresentar para você o que há de mais relevante em cada área. Tudo em 15 minutos. Isso mesmo, pá-pum!</p>
<p>O nome 15×2 surgiu justamente pelo formato do videocast: 15 minutos, um tema e duas pessoas. As pessoas serão eu, Camila Porto, e meus convidados a conversar sobre várias coisas. As conversas serão em vídeo, podem ser gravadas ou transmitidas ao vivo pelo YouTube. Espero que você goste e que o conteúdo visto aqui, seja um grande impulsionador para que você busque mais conhecimento.</p>
<p>Vamos ao que interessa?</p>
<p>A seguir você encontra o 15×2 Episódio 1: Gestão de crises nas mídias sociais com o Israel Degásperi</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/E13j4r3CGhI?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Links comentados no 15×2</p>
<ul>
<li>Martha Gabriel: <a href="http://www.slideshare.net/marthagabriel/gesto-de-crises-em-mdias-sociais-by-martha-gabriel">Gestão de Crises em Mídias Sociais</a>;</li>
<li>Marcelo Vitorino: <a href="http://presencaonline.com/">Presença Online</a>;</li>
<li><a href="http://www.bondfaro.com.br/livros--gratidao-vaynerchuk-gary-8563066730.html">Gratidão – Vaynerchuk, Gary</a>;</li>
<li><a href="http://www.bondfaro.com.br/livros--marketing-de-relacionamento-total-evert-gummesson-8536304960.html">Marketing de Relacionamento Total – Evert Gummesson</a></li>
</ul>
<p>Até mais!</p>
<p>O post <a href="http://imasters.com.br/midia-e-marketing-digital/redes-sociais/15x2-episodio-1-gestao-de-crises-com-israel-degasperi/">15×2 – Gestão de crises com Israel Degásperi</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/midia-e-marketing-digital/redes-sociais/15x2-episodio-1-gestao-de-crises-com-israel-degasperi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bug é algo terrível para se desperdiçar</title>
		<link>http://imasters.com.br/desenvolvimento/bug-e-algo-terrivel-para-se-desperdicar/</link>
		<comments>http://imasters.com.br/desenvolvimento/bug-e-algo-terrivel-para-se-desperdicar/#comments</comments>
		<pubDate>Wed, 22 May 2013 18:00:35 +0000</pubDate>
		<dc:creator>Jim Bird</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[desperdício]]></category>

		<guid isPermaLink="false">http://imasters.com.br/?p=42267</guid>
		<description><![CDATA[<p>Usar um sistema para rastrear bugs pode ser a única forma eficaz de gerir os problemas de equipes que não podem se encontrar face a face.</p><p>O post <a href="http://imasters.com.br/desenvolvimento/bug-e-algo-terrivel-para-se-desperdicar/">Bug é algo terrível para se desperdiçar</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Algumas equipes de desenvolvimento, <a href="http://accurev.com/blog/2008/01/02/is-defect-tracking-dead-in-an-agile-world/" target="_blank">especialmente equipes de Agile, não se incomodam com erros de rastreamento</a>. Em vez de usar um <a href="http://fragile.org.uk/2010/04/why-i-dont-use-bug-tracking-software/" target="_blank">sistema de rastreamento de bugs</a>, quando os testadores encontram um bug, eles falam para o desenvolvedor e o consertam, ou escrevem um teste de falha que precisa ser corrigido e o adicionam ao conjunto de testes de integração continua ou, se necessário, escrevem uma <a href="http://www.mountaingoatsoftware.com/blog/bugs-on-the-product-backlog" target="_blank">bug story</a> em um cartão e o colocam na parede para que a equipe saiba sobre ele e alguém se comprometa a corrigi-lo.</p>
<p>Outras equipes <a href="http://www.joelonsoftware.com/articles/fog0000000029.html" target="_blank">vivem por seus sistemas de rastreamento de bugs</a>, usando ferramentas como <a href="http://www.atlassian.com/software/jira/overview" target="_blank">Jira</a>, <a href="http://www.bugzilla.org/" target="_blank">Bugzilla</a> ou <a href="http://www.fogcreek.com/fogbugz/" target="_blank">FogBugz</a> para registrar erros, bem como alterações e outros trabalhos. Há argumentos a serem feitos para ambas as abordagens.</p>
<h2>Argumentos para rastreamento de bugs &#8211; e para não rastrear bugs</h2>
<p>Em <a href="http://www.amazon.com/Agile-Testing-Practical-Guide-Testers/dp/0321534468" target="_blank">Agile Testing: A Practical Guide for Testers and Agile Teams</a>, Lisa Crispin e Janet Gregory examinam os prós e os contras do uso de um sistema de rastreamento de falhas.</p>
<p>Usar um sistema para rastrear bugs pode ser a única forma eficaz de gerir os problemas de equipes que não podem se encontrar face a face &#8211; por exemplo, equipes distribuídas e espalhadas por diversos fusos horários. Também pode ser útil para equipes que herdaram bugs abertos em um sistema legado; e um mal necessário para as equipes que são forcadas a acompanhar bugs, por razões de compliance. As informações em um banco de dados de bugs é uma base de conhecimento potencial para testadores e desenvolvedores novos na equipe &#8211; eles podem rever os erros que foram encontrados antes na área do código em que eles estão trabalhando para compreender os problemas com os quais têm que lidar. E os dados de bugs podem ser usados para coletar métricas e criar tendências sobre erros &#8211; <a href="http://gojko.net/2011/05/17/bug-statistics-are-a-waste-of-time/" target="_blank">se você acha que as métricas de erros são úteis</a>.</p>
<p>Mas a <a href="http://lisacrispin.com/downloads/NDCDefects.pdf" target="_blank">visão Lean/Agile é que o uso de um sistema de rastreamento de falhas<strong></strong> em sua maioria atrapalha</a> e atrasa as pessoas. A equipe deve manter o foco na busca por erros, corrigi-los, e depois esquecê-los. Os erros são os <a href="http://agile.dzone.com/articles/lean-avoiding-waste" target="_blank">resíduos</a>, e tudo sobre ele é desperdício &#8211; informações mortas, e o tempo morto que seria melhor usado para entregar valor. Pior, usar um sistema de rastreamento de falhas impede testadores e desenvolvedores de falar uns com os outros e incentiva os testadores a terem uma <a href="http://agile.dzone.com/news/what-do-you-mean-dont-submit" target="_blank">&#8220;Política de Qualidade&#8221; mental</a>. Sem uma ferramenta, as pessoas têm de falar umas com as outras, e têm que aprender a andar bem juntos.</p>
<p>Esse é um ponto de vista tático, a curto prazo, com foco no que é necessário para obter o software correto e funcionando. É um<a href="http://evan.bottch.com/2010/08/29/projects-are-evil-and-must-be-destroyed/" target="_blank"> pensamento no projeto, e não no produto</a>.</p>
<h2>Bugs a longo prazo</h2>
<p>Mas se você está trabalhando em um sistema por um longo tempo, como nós, se você está administrando um produto ou executando um serviço, você sabe que não é assim tão simples. Você não pode apenas olhar para o que está diante diante de você, e onde você quer estar em um ano ou mais. Você também tem que olhar para trás, para o trabalho que foi feito antes, os problemas que aconteceram antes, as decisões que foram tomadas antes, para entender por que você está onde está hoje e para onde você pode ir no futuro.</p>
<p>Devido a alguns problemas que nunca vão embora. E outros problemas que voltarão, a não ser que você faça alguma para impedi-los. E você vai descobrir que outros problemas que você pensou que havia liquidado nunca foram embora realmente. As informações de bugs antigos, o que aconteceu e o que foi feito para corrigi-los (ou por que não puderam ser corrigidos), que soluções alternativas trabalhadas (ou não) podem ajudá-lo a continuar a melhorar o sistema e como você pode construí-lo e mantê-lo funcionando.</p>
<p>Porque você deve entender o histórico de alterações e correções no código se você for modificá-lo. Se você gosta da forma como o código está hoje, você pode querer saber como e por que ele ficou assim. Se você não gostar, você vai querer saber como e por que ficou dessa forma &#8211; é arrogante supor que você não vai cometer os mesmos erros ou ser forçado para os mesmos tipos de situações. Controle de revisão irá dizer-lhe o que foi alterado, quando e quem fez isso, o sistema de reastreamento de bugs vai dizer por quê.</p>
<p>Porque você precisa saber onde você tem instabilidade e risco no sistema. Você precisa identificar um código <a href="http://swreflections.blogspot.com.br/2012/02/technical-debt-how-much-is-it-really.html" target="_blank">propenso a bugs</a> &#8211; código que contem muitos erros, o código que lhe irá custar muito para manter e causará muitos problemas, o código que é muito caro para manter funcionando da maneira como está hoje. O código que você deve rescrever o mais rápido possível para melhorar a estabilidade e reduzir seus custos . Mas você não consegue identificar esse código sem saber o histórico de problemas no sistema.</p>
<p>Porque você pode precisar provar aos auditores, reguladores, clientes e investidores que está fazendo um trabalho responsável de testar e encontrar os erros, corrigi-los e acabar com as correções.</p>
<p>E porque você quer saber o quão eficaz a equipe é em encontrar, corrigir e prevenir erros. Você está vendo menos bugs hoje? Ou mais bugs? Você está vendo os mesmos tipos de erros &#8211; você está cometendo os mesmo erros? Ou erros diferentes?</p>
<h2>Você precisa controlar todos os bugs?</h2>
<p>Enquanto os bugs são encontrados cedo o suficiente, há pouco valor em monitorá-los. É quando os erros escapam que eles precisam ser monitorados: erros que o desenvolvedor não encontra de imediato por conta própria, ou em emparelhamento, ou através do controles automáticos padrão e os testes que são executados em <a href="http://www.martinfowler.com/articles/continuousIntegration.html" target="_blank">Integração Continua</a>.</p>
<p>Não fazemos log de</p>
<ul>
<li>defeitos encontrados em testes unitários ou outros testes automatizados &#8211; a menos que, por algum motivo, o problema não possa ser corrigido imediatamente;</li>
<li>problemas encontrados em <a href="http://sqa.stackexchange.com/questions/5516/is-it-common-to-track-defects-found-during-code-reviews" target="_blank">avaliações pelos pares</a> &#8211; a menos que algo na revisão seja considerado significativo e não possa ser abordado imediatamente. Ou um problema é encontrado em uma revisão final, após os testes começarem, e o código terá que ser testado novamente. Ou o revisor encontra algo errado no código que não foi alterado, um bug antigo &#8211; ainda é um problema que precisa ser olhado, mas ele pode estar preparado para lidar com ele agora. Todos os problemas encontrados nas revisões externas, como uma revisão de segurança ou uma auditoria, são registrados;</li>
<li><a href="http://www.klocwork.com/blog/static-analysis/static-analysis-is-not-bugzilla/" target="_blank">resultados de analise estática</a> &#8211; a maioria dos problemas capturados por essas ferramentas são <a href="http://swreflections.blogspot.ca/2009/06/value-of-static-analysis-tools.html" target="_blank">simples erros de codificação</a> que podem ser vistos e corrigidos imediatamente, e também costuma haver uma boa quantidade de ruídos (<a href="http://www.cs.umd.edu/~pugh/BugWorkshop05/papers/34-chou.pdf" target="_blank">falsos positivos</a>) que deve ser filtrada. Nós executamos verificações de análise estática e as revisamos diariamente, e registramos apenas os resultados se concordamos que a descoberta é real, mas o desenvolvedor não está preparado para corrigi-lo imediatamente (o que quase nunca acontece, a menos que estejamos executando uma nova ferramenta contra uma base de dados já existente pela primeira vez). De qualquer forma, muitas ferramentas de análise estática têm seus próprios sistemas para rastrear resultados de análise estática, por isso sempre podemos voltar e rever questões pendentes depois;</li>
<li>erros encontrados quando os desenvolvedores e testadores <a href="http://www.kohl.ca/articles/pairtesting.pdf" target="_blank">decidem se juntar para testar</a> mudanças no início do desenvolvimento, principalmente quando estão explorando como algo deveria funcionar &#8211; não costumamos registrar erres erros, a menos que não possam ser/não serão corrigidos (podem ser reproduzidos mais tarde, por exemplo)</li>
</ul>
<h2>Bug é algo terrível de se desperdiçar</h2>
<p>Nós registramos todos os outros erros, independentemente de eles serem encontrados em produção, em testes internos, testes de parceiros, testes de aceitação do usuário, ou teste externo (como um pen test). Porque na maioria das vezes, quando o software é entregue a um testador, ele deveria estar funcionando. Se o testador encontra bugs, especialmente sérios, então essa é uma informação importante para o testador, para o desenvolvedor, e para o resto da equipe. Ele destacar os riscos. Ele pode mostrar onde são necessários mais testes e opiniões. Ele pode destacar problemas mais profundos no projeto, a falta de compreensão que poderia causar outros problemas.</p>
<p>Se você acredita que o <a href="http://swreflections.blogspot.com.br/2012/04/you-dont-need-testers-or-do-you.html" target="_blank">teste fornece informações importantes</a> não apenas sobre o estado do seu software, mas também sobre como você o está projetando e construindo &#8211; então todo mundo precisa ser capaz de ver essa informação, e compreendê-la ao longo do tempo. Alguns problemas podem não ser vistos ou compreendidos de imediato, ou no tempo de 1 ou 2 semanas. Pode demorar um pouco antes de você reconhecer que tem uma grave deficiência no projeto ou que algo está quebrado em sua abordagem de desenvolvimento ou em sua cultura. Você precisa experimentar alguns problemas antes de começar a encontrar relações entre eles e antes que você possa olhar para a raiz de seu problema. Você vai precisar de dados do passado, afim de resolver os problemas no futuro.</p>
<p>Rastrear bugs não é um desperdício se você aprender com os bugs. Jogar fora as informações sobre bugs é o verdadeiro desperdício.</p>
<p>***</p>
<p><em>Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em</em>   <em><a href="http://swreflections.blogspot.com.br/2013/02/a-bug-is-terrible-thing-to-waste.html">http://swreflections.blogspot.com.br/2013/02/a-bug-is-terrible-thing-to-waste.html</a></em></p>
<p>&nbsp;</p>
<p>O post <a href="http://imasters.com.br/desenvolvimento/bug-e-algo-terrivel-para-se-desperdicar/">Bug é algo terrível para se desperdiçar</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/desenvolvimento/bug-e-algo-terrivel-para-se-desperdicar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testando o Oculus Rift</title>
		<link>http://imasters.com.br/design-ux/acessibilidade/testando-o-oculus-rift/</link>
		<comments>http://imasters.com.br/design-ux/acessibilidade/testando-o-oculus-rift/#comments</comments>
		<pubDate>Wed, 22 May 2013 17:00:57 +0000</pubDate>
		<dc:creator>Mauro Pichiliani</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Tendências]]></category>
		<category><![CDATA[Usabilidade]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[CHI]]></category>
		<category><![CDATA[HMD]]></category>
		<category><![CDATA[Oculus]]></category>
		<category><![CDATA[Realidade Virtual]]></category>

		<guid isPermaLink="false">http://imasters.com.br/?p=42207</guid>
		<description><![CDATA[<p>Mauro Pichiliani conta sua experiência ao experimentar o Oculus Rift: quais as vantagens, o que precisa melhorar e quais as funcionalidades.</p><p>O post <a href="http://imasters.com.br/design-ux/acessibilidade/testando-o-oculus-rift/">Testando o Oculus Rift</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Olá, pessoal. Recentemente tive a oportunidade de testar a versão para desenvolvimento do Oculus Rift, o HMD (Head Mounted Display) que permite a visualização de conteúdo geral e de realidade virtual. Neste artigo vou contar um pouco sobre como foi a minha experiência com este dispositivo.</p>
<p><img class="aligncenter size-full wp-image-42210" alt="OculusRift1" src="http://imasters.com.br/wp-content/uploads/2013/05/OculusRift1.jpg" width="510" height="286" /></p>
<p>Durante a conferência <a href="http://chi2013.acm.org/">CHI 2013</a>, a principal conferência acadêmica que envolve interação com computadores realizada em Paris, havia um estande de uma empresa que estava demonstrando este produto. Não era exatamente a produtora do Oculus, mas consegui experimentar o mundo virtual que eles estavam demonstrando.</p>
<p>A primeira impressão não foi das melhores. Tive um pouco de dificuldade para colocar o Oculus, pois apesar das duas tiras laterais ajudarem a fixar o aparelho, a tira que vai sobre a cabeça é a mais complicada de se colocar. Acredito que esta tira possa dificultar a colocação do aparelho em algumas pessoas, especialmente aquelas que não querem tirar o boné ou o chapéu. Contudo, me pareceu que o uso desta terceira tira é para evitar um peso considerável na cara do usuário, que acabaria forçando o pescoço, e não para ajudar o correto posicionamento do aparelho.</p>
<p>Além disso, fiz questão de experimentar este HMD sem tirar meus óculos de grau. Não tenho um caso muito grave de miopia e por isso quis experimentar a resolução do dispositivo sem nenhum tipo de obstáculo visual. Após alguns ajustes e com ajuda do pessoal do stand que demonstrava o mundo virtual, consegui colocaro dispositivo como mostra a figura abaixo:</p>
<p><a href="http://imasters.com.br/?attachment_id=42208" rel="attachment wp-att-42208"><img class="aligncenter size-full wp-image-42208" alt="EU_OCULUS" src="http://imasters.com.br/wp-content/uploads/2013/05/EU_OCULUS.jpg" width="640" height="480" /></a></p>
<p>Outro detalhe que notei e que pode ser percebido na imagem acima é que a tira lateral encobre parte da orelha. Esta configuração é necessária, pois como pode ser visto a tira não é fina. Deste modo é provável que o usuário sinta algum desconforto após o uso prologando do Oculus, especialmente se ele for utilizado em conjunto com fones de ouvido do tipo headset que tentam isolar o máximo de ruído externo pela pequena pressão que almofadas do headset fazem na cabeça.</p>
<p>O peso do aparelho não foi algo que me incomodou, porém destaco que isso é devido à tira que vai sobre a cabeça. Novamente, é provável que alguns usuários possam sentir o pescoço cansado depois do uso prolongado.</p>
<p>Logo que comecei a visualizar as imagens, alguém me auxiliou para segurar um controle que seria utilizado para a navegação no mundo virtual. Como o HMD é apenas um display, é necessário empregar algum tipo de controle de alta precisão para a interação com o modo como o conteúdo que está sendo exibido. O expositor escolheu o <a href="http://www.razerzone.com/gaming-controllers/razer-hydra">Razer Hydra</a>, que é um controle de movimento com muita precisão voltado para o mercado de PCs. Como este controle é muito preciso e de ótima qualidade, muitos profissionais que estão avaliando e montando produtos com o Oculus estão empregando de forma quase unânime o Razer Hydra.</p>
<p><a href="http://imasters.com.br/?attachment_id=42209" rel="attachment wp-att-42209"><img class="aligncenter size-full wp-image-42209" alt="EU_OCULUS_2" src="http://imasters.com.br/wp-content/uploads/2013/05/EU_OCULUS_2.jpg" width="678" height="507" /></a></p>
<p>A resolução do Oculus não é a das melhores &#8211; algo que foi confirmado pela equipe que está trabalhando com ele. Por se tratar de um produto enviado para desenvolvedores, ele ainda vai sofrer algumas modificações antes de chegar ao consumidor final; incluindo melhorias na resolução. De qualquer maneira, mesmo com o as lentes adequadas (sim, é possível escolher entre alguns pares de lentes de acordo com caraterísticas do usuário) pude notar que dentro dele é possível observar o vão entre os buracos que contém as lentes responsáveis por mostrar o conteúdo. Isso não me incomodou, mas serve como um lembrete que a experiência de visão não é totalmente imersiva e é diferente de uma tela contínua. Um dos motivos para se utilizar duas lentes é a possibilidade de projetar conteúdo diferente nelas e fornecer a sensação de paralax e possivelmente aplicações esteroscópicas.</p>
<p>Do ponto de vista de desenvolvimento, ainda é preciso que o fabricante forneça recursos para que os designers e programadores possam utilizar o dispositivo de modo que ele forneça algo além da visão que uma televisão pode proporcionar em aplicações novas e já existentes. Por exemplo, o Oculus capta razoavelmente bem movimentos de cabeça e adapta o seu conteúdo a ele. Em um jogo pode ser que o personagem esteja com as mãos amarradas e com uma mordaça na boca. Neste cenário o personagem precisa dar ‘cabeçadas’ em uma estante para cair uma faca que ele pegue com o pé para conseguir escapar. Neste exemplo, a movimentação da cabeça pode ser uma técnica de gameplay que, se utilizada de forma correta, pode tornar mais interessante as interações proporcionadas no jogo.</p>
<p>Ainda falando sobre a movimentação da cabeça do usuário, quando mexi minha cabeça de um lado para o outro notei uma nítida falta de resolução. Algo que também havia percebido quando assisti no cinema o filme O Hobbit em uma sala onde a projeção que não foi em 48 quadros por segundo, quando muita coisa acontecia ao mesmo tempo. Neste caso, fica claro o evento de motion blur que acontece, ou seja, a tela fica embaçada quando se movimenta a câmera. Este tipo de efeito pode ser suavizado e tratado de forma melhor uma vez que existem sensores que captam o movimento da cabeça do usuário no Oculus.</p>
<p>Também notei o fato que o Oculus utiliza um fio ligado a uma pequena caixa contendo conectores HDMI e USB. Bem, com novas tecnologias de transmissão e compressão de dados é possível imaginar que futuras versões possam ser utilizadas sem fio, mas acredito que isso ainda vai demorar um pouco. Em geral, o aparelho é interessante, mas cabe principalmente aos desenvolvedores trabalhar corretamente o conteúdo para que a experiência do usuário seja superior a, por exemplo, o uso de uma televisão com resolução 4k.</p>
<p>Para finalizar, destaco o vídeo clip da música Amazing, da banca Aerosmith (uma das minhas preferidas e que está sempre ligada em tecnologia) que mostra como era a perspectiva de realidade virtual nos início dos anos noventa. Não sei quanto a vocês, mas para mim as aplicações de realidade virtual, realidade aumentada e realidade mista que temos hoje estão caminhando para uma direção um pouco diferente desta visão apresentada neste clip.</p>
<p><iframe width="500" height="375" src="http://www.youtube.com/embed/zSmOvYzSeaQ?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>O post <a href="http://imasters.com.br/design-ux/acessibilidade/testando-o-oculus-rift/">Testando o Oculus Rift</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/design-ux/acessibilidade/testando-o-oculus-rift/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instagram para vendas e negócios</title>
		<link>http://imasters.com.br/tecnologia/e-commerce/instagram-para-vendas-e-negocios/</link>
		<comments>http://imasters.com.br/tecnologia/e-commerce/instagram-para-vendas-e-negocios/#comments</comments>
		<pubDate>Wed, 22 May 2013 14:00:32 +0000</pubDate>
		<dc:creator>Felipe Spina</dc:creator>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Redes Sociais]]></category>
		<category><![CDATA[ecommerce instagram]]></category>
		<category><![CDATA[instagram]]></category>
		<category><![CDATA[instagram business]]></category>
		<category><![CDATA[instagram marketing]]></category>
		<category><![CDATA[instagram vendas]]></category>

		<guid isPermaLink="false">http://imasters.com.br/?p=42300</guid>
		<description><![CDATA[<p>As melhores práticas para o Instagram no e-commerce, o aplicativo de fotos mais efetivo nas publicações focada em negócios e engajamento.</p><p>O post <a href="http://imasters.com.br/tecnologia/e-commerce/instagram-para-vendas-e-negocios/">Instagram para vendas e negócios</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<p style="text-align: left">Apenas criar uma conta no Instagram, sem atualizar com frequência ou postar fotos de banco de imagem não é recomendável, porque não fica transparente para seu público contar a história da marca e envolver-se com seus seguidores. Você deveria incluir informações sobre sua marca, uma imagem ou um logotipo e um link para seu site em seu perfil. Postar imagens que dão seguidores e que falam vislumbrar quem você, construindo uma conexão com a sua marca.</p>
<p>Dicas para publicar conteúdo atraente:</p>
<ul>
<li>Mostre aos usuários por trás das cenas, os bastidores de como funciona um e-commerce, por exemplo;</li>
<li>Apresente aos seus seguidores o que você está trabalhando ou o que te inspira, suas referências;</li>
<li>Informar seguidores sobre a história da marca.</li>
</ul>
<h2>Instagram API</h2>
<p>Utilize a API para acessar o seu próprio conteúdo e/ou conteúdo gerado pelo usuário com base no nome de usuário, hashtag ou localização. Os usuários estão postando milhões de fotos no Instagram a cada dia. Aproveite para utilizar a API e ver onde e como os usuários estão falando sobre sua marca.</p>
<p>Dicas de como usar a API:</p>
<ul>
<li>Criar uma galeria de fotos relacionadas com a sua marca, produto ou causa;</li>
<li>Mostrar fotos em tempo real durante os eventos ao vivo;</li>
<li>Imprimir fotos para usar em telas ou para presentear aos usuários em eventos;</li>
<li>Criar um mapa digital de suas próprias fotos ou de onde os usuários estão marcados em sua marca;</li>
<li>Incentive que os usuários enviem fotos para concursos ou campanhas.</li>
</ul>
<h2>Comunidade e pessoas no Instagram</h2>
<p>A comunidade no Instagram é extremamente ativa. Encontre maneiras de se conectar com seus seguidores e oportunidades para se envolver com eles para falar sobre a sua marca.</p>
<p>Dicas de como se envolver com a comunidade:</p>
<ul>
<li>Organizar um InstaWalk ao redor da cidade ou nos bastidores de um evento;</li>
<li>Promover um <a href="http://www.meetup.com/Instagram/">Instagram MeetUp</a>;</li>
<li>Criar desafios hashtag semanais.</li>
</ul>
<h2>Melhores práticas</h2>
<p style="text-align: center"><img class="aligncenter" alt="" src="http://www.jimmyti.com.br/blog/wp-content/uploads/2012/08/intagram-horizontal.jpg" width="500" height="233" /></p>
<h2>Mudança de perspectiva</h2>
<p>Cadastre-se em uma conta pessoal, bem assim você pode experimentar as experiências de um usuário. Você vai descobrir como você deseja consumir conteúdo, como você interage com outros usuários e que tipo de imagens que você encontra são interessantes.</p>
<h2>Experiência</h2>
<p>Cada marca tem um público diferente e quer envolve-lo de diferentes formas. Experiência com tipos de fotos para compartilhar e quantas fotos são publicadas por dia ou semana. Ouça o feedback de seus usuários para ajustar as ações. É preciso saber quem é seu público e entender o que ele gosta para começar a usar uma nova plataforma.</p>
<h2>Compartilhe conteúdo atraente</h2>
<p>Publicar fotos que os usuários não possam ver em outro lugar – por trás das cenas ou fotos sneak peeks do que está por vir. Não tenha medo de experimentar, e prestar atenção no que os usuários gostam e comentar mais.</p>
<h2>Conte sua história</h2>
<p>As fotos que você postar podem contar uma história sobre a sua marca. Os usuários podem dizer o que acham quando você posta uma foto. Ser autêntico sobre o conteúdo que você compartilha irá ajudá-lo a construir conexões genuínas com seus seguidores.</p>
<h2>Expandir o seu público</h2>
<p>Conectando sua conta do Instagram para suas outras redes sociais é uma ótima maneira de deixar seus seguidores sabendo que você se juntou ao Instagram, e isso ajudará a fazer crescer o seu público-alvo. Também torna mais fácil compartilhar o conteúdo que você postar no Instagram para suas outras contas a fim de aumentar seu alcance e exposição.</p>
<h2>Publicar constantemente</h2>
<p>Os usuários geralmente gostam de ver uma variedade de fotos a partir de diferentes contas em seu feed. Publicar muitas vezes o suficiente para manter usuários envolvidos, mas mantê-los querendo mais. Espalhe suas mensagens ao longo do dia ou ao longo de vários dias.</p>
<h2>Envolver-se com a comunidade</h2>
<p>Interagir com a comunidade Instagram, tanto no aplicativo quanto em pessoa. Faça perguntas em sua legenda e responda aos comentários. Promover eventos locais <a title="MeetUP" href="http://www.meetup.com/Instagram/">Grupos Meetup</a> . Incentivar os usuários a usarem hashtags nas fotos em seus eventos, é muito importante.</p>
<p>Algumas dicas e recursos para começar a usar o Instagram para sua marca ou empresa.</p>
<ol>
<li><a href="http://help.instagram.com/454502981253053/">Central de Ajuda Negócios</a> O Centro de Ajuda fornece recursos e respostas às perguntas mais frequentes;</li>
<li><a href="http://business.instagram.com/blog/">Blog Empresas</a> O blog destaca grandes contas da marca, o envolvimento da comunidade, exemplos exclusivos API e dicas gerais de como gerenciar uma conta da marca;</li>
<li><a href="http://instagram.com/developer/">API para desenvolvedor</a>.</li>
</ol>
<p>O post <a href="http://imasters.com.br/tecnologia/e-commerce/instagram-para-vendas-e-negocios/">Instagram para vendas e negócios</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/tecnologia/e-commerce/instagram-para-vendas-e-negocios/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Utilizando o novo PayPal Sandbox</title>
		<link>http://imasters.com.br/apis/apis-paypal/utilizando-o-novo-paypal-sandbox/</link>
		<comments>http://imasters.com.br/apis/apis-paypal/utilizando-o-novo-paypal-sandbox/#comments</comments>
		<pubDate>Wed, 22 May 2013 13:00:13 +0000</pubDate>
		<dc:creator>João Batista Neto</dc:creator>
				<category><![CDATA[APIs PayPal]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[api paypal]]></category>
		<category><![CDATA[paypal]]></category>

		<guid isPermaLink="false">http://imasters.com.br/?p=42306</guid>
		<description><![CDATA[<p>O Sandbox do PayPal é um ambiente onde podemos testar os recursos do PayPal e integrar aplicações com as APIs. Conheça a nova versão!</p><p>O post <a href="http://imasters.com.br/apis/apis-paypal/utilizando-o-novo-paypal-sandbox/">Utilizando o novo PayPal Sandbox</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></description>
				<content:encoded><![CDATA[<h2 id="sb1">O quê é o PayPal Sandbox?</h2>
<p>O Sandbox do PayPal é um ambiente onde podemos testar os recursos do PayPal e integrar aplicações com as APIs. O Sandbox é praticamente um clone do ambiente de produção e seu objetivo é oferecer um ambiente para testar os recursos e integrações para se evitar problemas que poderiam existir se os testes fossem feitos no ambiente de produção.</p>
<p>O ambiente Sandbox é, de fato, uma das ferramentas mais importantes durante o processo de integração. Nesse artigo, usaremos como base todo o conteúdo descrito no artigo anterior, porém, para o público brasileiro.</p>
<h2 id="sb2">Diferenças entre os dois ambientes do PayPal Sandbox</h2>
<p>O Sandbox do PayPal é composto por dois ambientes distintos:</p>
<h3 id="sb2-1"><a href="https://developer.paypal.com/" target="_blank">PayPal Developer</a></h3>
<p>O ambiente PayPal Developer é onde o desenvolvedor pode gerenciar as contas de teste, verificar os emails enviados pelo PayPal para seus clientes, testar as notificações de pagamento e, até, criar novas contas de teste.</p>
<h3 id="sb2-2"><a href="https://sandbox.paypal.com/" target="_blank">PayPal Sandbox</a></h3>
<p>O ambiente PayPal Sandbox é o equivalente ao ambiente de produção. Toda a interface e usabilidade do PayPal Sandbox foi desenvolvida para oferecer a mesma experiência e funcionalidade do ambiente de produção, facilitando assim o processo de teste.</p>
<h3 id="sb2-3">Características do ambiente Sandbox</h3>
<p>Abaixo algumas características específicas do ambiente PayPal Sandbox, ao compará-lo com o ambiente de produção</p>
<ul>
<li>Sandbox é um ambiente de teste, desenvolvido para que o desenvolvedor possa verificar a integração, antes de colocá-la em produção.</li>
<li>Dentro do Sandbox é possível criar quantas contas forem necessárias, sejam elas com perfil de indivíduos ou de empresas.</li>
<li>Os valores das transações são fictícios. Nenhum saldo ou débito acontecerá de fato. Todas as transações são apenas para fins de teste e, como tal, são meramente demonstrativos.</li>
<li>Todos os dados utilizados nas contas criadas no Sandbox podem ser fictícios. Não é necessário informar documentos válidos ou números de cartão de crédito existentes.</li>
<li>As contas criadas no PayPal Developer existem apenas no ambiente Sandbox.</li>
</ul>
<h2 id="sb3">Utilizando o PayPal Sandbox</h2>
<p>O primeiro passo para utilizar o PayPal Sandbox, é ter uma conta PayPal. Para isso, o desenvolvedor deverá ir até a página principal <a href="https://paypal.com/" target="_blank">a página principal da PayPal</a> e criar uma conta ou, se já possuir uma conta PayPal, ir até <a href="http://developer.paypal.com/" target="_blank">PayPal Developer</a> e fazer login utilizando sua conta PayPal.</p>
<p>Assim que o desenvolvedor abrir a página do PayPal Developer, a seguinte interface será exibida:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42307" rel="attachment wp-att-42307"><img class="aligncenter  wp-image-42307" alt="sandbox1" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox1.png" width="610" height="461" /></a></p>
<p style="text-align: center">
<p style="text-align: left">No topo, do lado direito, o desenvolvedor verá o botão <em>Log in with PayPal</em>. Ao clicar nesse botão, uma janela solicitando o email e senha da conta PayPal será exibida e, ao informar as credenciais, a tela do PayPal Developer será atualizada com o nome do desenvolvedor:</p>
<p style="text-align: left"><a href="http://imasters.com.br/?attachment_id=42308" rel="attachment wp-att-42308"><img class="aligncenter  wp-image-42308" alt="sandbox2" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox2.png" width="720" height="86" /></a></p>
<p>Assim que estiver logado, o desenvolvedor já poderá utilizar todas as ferramentas oferecidas pelo PayPal Developer e também pelo PayPal Sandbox.</p>
<h3 id="sb3-1">Criando contas de teste</h3>
<p>Uma das tarefas mais comuns dentro do PayPal Developer, é a criação de contas de teste. Essas contas são importantes para a integração pois, somente através delas, o desenvolvedor conseguirá testar sua integração, seja com uma conta de vendedor, ou com uma conta de cliente.</p>
<p>Para se criar uma conta de teste, o desenvolvedor deverá seguir os passos abaixo:</p>
<ul>
<li>Clicar em <em>Applications</em> no menu principal do PayPal Developer:</li>
</ul>
<p><a href="http://imasters.com.br/?attachment_id=42310" rel="attachment wp-att-42310"><img class="aligncenter size-full wp-image-42310" alt="sandbox3" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox3.png" width="446" height="57" /></a></p>
<ul>
<li>Clicar em <em>Sandbox accounts</em> no menu lateral do PayPal Developer:</li>
</ul>
<p style="text-align: left"><a href="http://imasters.com.br/?attachment_id=42311" rel="attachment wp-att-42311"><img class="aligncenter size-full wp-image-42311" alt="sandbox4" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox4.png" width="178" height="179" /></a></p>
<ul>
<li>Clicar no botão <em>Create Account</em> na tela <em>Sandbox test accounts</em>:</li>
</ul>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42312" rel="attachment wp-att-42312"><img class="aligncenter  wp-image-42312" alt="sandbox5" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox5.png" width="693" height="37" /></a></p>
<ul>
<li>Preencher o formulário de criação de conta com <em>dados fictícios</em>:</li>
</ul>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42314" rel="attachment wp-att-42314"><img class="aligncenter  wp-image-42314" alt="sandbox6" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox6.png" width="584" height="737" /></a></p>
<p style="text-align: left">Assim que o formulário tiver sido preenchido e o desenvolvedor tiver clicado no botão <em>Create account</em>, a nova conta de teste será listada na página <em>Sandbox accounts</em>:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42316" rel="attachment wp-att-42316"><img class="aligncenter  wp-image-42316" alt="sandbox7" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox7.png" width="655" height="43" /></a></p>
<p style="text-align: center">
<p style="text-align: left">A partir desse momento, o desenvolvedor conseguirá fazer login no PayPal Sandbox utilizando a conta recém criada. Para isso, o desenvolvedor pode clicar sobre a nova conta e, então, clicar no link<em>Sandbox Site</em> ou acessar <a href="https://sandbox.paypal.com/" target="_blank">https://sandbox.paypal.com</a> e fazer login utilizando o e-mail e a senha cadastrada no formulário de criação de conta:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42317" rel="attachment wp-att-42317"><img class="aligncenter  wp-image-42317" alt="sandbox8" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox8.png" width="672" height="56" /></a></p>
<p style="text-align: center">
<h3 id="sb3-2">Gerando as credenciais da API</h3>
<p>Após fazer login em <a href="https://sandbox.paypal.com/" target="_blank">https://sandbox.paypal.com</a> com a conta de teste, o desenvolvedor perceberá que o ambiente é idêntico ao de produção. Assim, da mesma forma que gerenciamos as contas no ambiente de produção, podemos fazê-lo no ambiente Sandbox</p>
<p>Para utilizar uma conta para testar uma integração, o desenvolvedor precisará gerar as credenciais da API. Para isso, os seguintes passos deverão ser seguidos:</p>
<ul>
<li>Fazer login <a href="https://sandbox.paypal.com/" target="_blank">https://sandbox.paypal.com</a> utilizando uma conta de teste:</li>
</ul>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42318" rel="attachment wp-att-42318"><img class="aligncenter  wp-image-42318" alt="sandbox9" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox9.png" width="610" height="522" /></a></p>
<p style="text-align: center">
<ul>
<li>No menu principal, clicar em <em>Profile</em>:</li>
</ul>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42319" rel="attachment wp-att-42319"><img class="aligncenter  wp-image-42319" alt="sandbox10" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox10.png" width="570" height="48" /></a></p>
<ul>
<li>Na tela de ferramentas de venda, clicar em <em>Request API credentials</em>, no grupo <em>Account Information</em>:</li>
</ul>
<p><a href="http://imasters.com.br/?attachment_id=42320" rel="attachment wp-att-42320"><img class="aligncenter size-full wp-image-42320" alt="sandbox11" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox11.png" width="202" height="270" /></a></p>
<p>&nbsp;</p>
<ul>
<li>Na nova tela, escolha a opção 2 da opção 1:</li>
</ul>
<p><a href="http://imasters.com.br/?attachment_id=42321" rel="attachment wp-att-42321"><img class="aligncenter size-full wp-image-42321" alt="sandbox12" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox12.png" width="389" height="298" /></a></p>
<ul>
<li>Na nova tela, clique em <em>View API Signature</em> da opção 2:</li>
</ul>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42322" rel="attachment wp-att-42322"><img class="aligncenter  wp-image-42322" alt="sandbox13" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox13.png" width="616" height="303" /></a></p>
<ul>
<li>Copie os dados exibidos na última tela:</li>
</ul>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42323" rel="attachment wp-att-42323"><img class="aligncenter  wp-image-42323" alt="sandbox14" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox14.png" width="611" height="274" /></a></p>
<p style="text-align: left">Após criada as credenciais da API, elas também estarão disponíveis através do PayPal Developer. Para visualizá-la, basta clicar sobre a conta de vendedor e, então, no link profile:</p>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42324" rel="attachment wp-att-42324"><img class="aligncenter  wp-image-42324" alt="sandbox15" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox15.png" width="655" height="35" /></a></p>
<p style="text-align: left">Ao clicar em <em>profile</em>, uma janela popup será exibida com dados da conta e as credenciais da API:</p>
<p style="text-align: left"><a href="http://imasters.com.br/?attachment_id=42325" rel="attachment wp-att-42325"><img class="aligncenter size-full wp-image-42325" alt="sandbox16" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox16.png" width="574" height="341" /></a></p>
<p style="text-align: left">
<h2 id="sb4">PayPal Sandbox para o público brasileiro e outras localizações</h2>
<p>Na seção anterior vimos como podemos criar contas para diversos países apenas clicando no botão <em>Create account</em>. Porém, diversos países não estão listados entre as opções de criação de conta ao utilizar o processo anterior, como é o caso do Brasil.</p>
<p>Apesar de não estar listado, o desenvolvedor conseguirá criar contas de teste para qualquer uma das localizações abaixo:</p>
<ul>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_AU_22x14.gif" border="0" /><a href="http://www.paypal.com.au/">Australia</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_AT_22x14.gif" border="0" /><a href="http://www.paypal.at/">Austria</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_BE_22x14.gif" border="0" /><a href="http://www.paypal.be/">Belgium</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_BR_22x14.gif" border="0" /><a href="http://www.paypal.com.br/">Brazil</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_CA_22x14.gif" border="0" /><a href="http://www.paypal.ca/">Canada</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_C2_22x14.gif" border="0" /><a href="https://www.paypal.com/c2/cgi-bin/webscr?cmd=xpt/general/CNPayPalComparison-outside">China</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_DK_22x14.gif" border="0" /><a href="http://www.paypal.dk/">Denmark</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_FR_22x14.gif" border="0" /><a href="http://www.paypal.fr/">France</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_DE_22x14.gif" border="0" /><a href="http://www.paypal.de/">Germany</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_HK_22x14.gif" border="0" /><a href="http://www.paypal.com.hk/">Hong Kong</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_IL_22x14.gif" border="0" /><a href="http://www.paypal.co.il/">Israel</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_IT_22x14.gif" border="0" /><a href="http://www.paypal.it/">Italy</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_JP_22x14.gif" border="0" /><a href="http://www.paypal.jp/">Japan</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_MX_22x14.gif" border="0" /><a href="http://www.paypal.com.mx/">Mexico</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_NL_22x14.gif" border="0" /><a href="http://www.paypal.nl/">Netherlands</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_NO_22x14.gif" border="0" /><a href="http://www.paypal.no/">Norway</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_PL_22x14.gif" border="0" /><a href="http://www.paypal.pl/">Poland</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_RU_22x14.gif" border="0" /><a href="http://www.paypal.ru/">Russia</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_SG_22x14.gif" border="0" /><a href="http://www.paypal.com.sg/">Singapore</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_ES_22x14.gif" border="0" /><a href="http://www.paypal.es/">Spain</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_SE_22x14.gif" border="0" /><a href="http://www.paypal.se/">Sweden</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_CH_22x14.gif" border="0" /><a href="http://www.paypal.ch/">Switzerland</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_TR_22x14.gif" border="0" /><a href="http://www.paypal.com.tr/">Turkey</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_GB_22x14.gif" border="0" /><a href="http://www.paypal.co.uk/">United Kingdom</a></li>
<li><img alt="" src="https://www.paypalobjects.com/en_US/i/icon/icon_US_22x14.gif" border="0" /><a href="https://www.paypal.com/">United States</a></li>
</ul>
<h3 id="sb4-1">Criando contas de teste</h3>
<p>Tudo o que o desenvolvedor precisa fazer para criar uma conta de teste para qualquer um dos países acima, é seguir os passos abaixo:</p>
<ul>
<li>Acessar <a href="https://www.sandbox.paypal.com/br/webapps/mpp/home">https://sandbox.paypal.com</a> e clicar no botão <em>Criar conta</em>:</li>
</ul>
<p><a href="http://imasters.com.br/?attachment_id=42326" rel="attachment wp-att-42326"><img class="aligncenter size-full wp-image-42326" alt="sandbox17" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox17.png" width="538" height="52" /></a></p>
<ul>
<li>
<p>Na nova tela, selecione Brasil em Seus país ou região e escolha entre Para você para criar contas de clientes, ou Para sua empresa para criar contas de vendedores:</p>
</li>
</ul>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42327" rel="attachment wp-att-42327"><img class="aligncenter  wp-image-42327" alt="sandbox18" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox18.png" width="533" height="475" /></a></p>
<ul>
<li>Após selecionar o país, uma tela com um formulário de cadastro será exibida. <em>Lembre-se de preencher o formulário com dados fictícios.</em></li>
</ul>
<p style="text-align: center"><a href="http://imasters.com.br/?attachment_id=42328" rel="attachment wp-att-42328"><img class="aligncenter  wp-image-42328" alt="sandbox18" src="http://imasters.com.br/wp-content/uploads/2013/05/sandbox181.png" width="610" height="542" /></a></p>
<ul>
<li>Após preencher o formulário, clique no botão <em>Continuar</em></li>
</ul>
<p>Assim que a conta brasileira tiver sido criada, siga os passos descritos na seção <b>&#8216;</b>Gerando as credenciais da API&#8217; para gerar as credencias da API.</p>
<p>O post <a href="http://imasters.com.br/apis/apis-paypal/utilizando-o-novo-paypal-sandbox/">Utilizando o novo PayPal Sandbox</a> apareceu primeiro em <a href="http://imasters.com.br"></a>.</p>]]></content:encoded>
			<wfw:commentRss>http://imasters.com.br/apis/apis-paypal/utilizando-o-novo-paypal-sandbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
