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

<channel>
	<title>seiti.eti.br &#187; web</title>
	<atom:link href="http://seiti.eti.br/blog/cat/web/feed" rel="self" type="application/rss+xml" />
	<link>http://seiti.eti.br/blog</link>
	<description>Programação e cacarecos tecnológicos</description>
	<lastBuildDate>Fri, 11 Nov 2011 21:14:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>WordPress 3.0</title>
		<link>http://seiti.eti.br/blog/2010/wordpress-3-0</link>
		<comments>http://seiti.eti.br/blog/2010/wordpress-3-0#comments</comments>
		<pubDate>Sat, 19 Jun 2010 05:02:58 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=1150</guid>
		<description><![CDATA[Atualizei o site para o WordPress 3.0, em PT-BR e, como sempre, sem problemas! E junto vem o novo tema default Twenty Ten, que finalmente substitui o tema anterior, Kubrick. E não é só para dar um tapa no visual, &#8230; <a href="http://seiti.eti.br/blog/2010/wordpress-3-0">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Atualizei o site para o WordPress 3.0, em PT-BR e, como sempre, sem problemas!  E junto vem o novo tema default <em>Twenty Ten</em>, que finalmente substitui o tema anterior, Kubrick.</p>
<p>E não é só para dar um tapa no visual, o novo tema mostra os novos recursos do WordPress, como podemos ver no vídeo.</p>
<p>Acho que está na hora de trocar a cara do site (se bem que, com o Google Reader e demais leitores de feeds,  ninguém mais visita blogs)</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="360" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="guid=BQtfIEY1&amp;width=640&amp;height=360&amp;locksize=no&amp;dynamicseek=false&amp;qc_publisherId=p-18-mFEk4J448M" /><param name="src" value="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.21" /><param name="wmode" value="transparent" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="360" src="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.21" allowfullscreen="true" wmode="transparent" flashvars="guid=BQtfIEY1&amp;width=640&amp;height=360&amp;locksize=no&amp;dynamicseek=false&amp;qc_publisherId=p-18-mFEk4J448M"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2010/wordpress-3-0/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cache e camadas no ArcGIS Server</title>
		<link>http://seiti.eti.br/blog/2010/cache-camadas-no-arcgis-server</link>
		<comments>http://seiti.eti.br/blog/2010/cache-camadas-no-arcgis-server#comments</comments>
		<pubDate>Mon, 08 Feb 2010 19:59:30 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[arcgis]]></category>
		<category><![CDATA[gis]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=956</guid>
		<description><![CDATA[Estou trabalhando com o ArcGIS Server 9.3.1 e tenho de inserir alguns serviços nele. Cada serviço corresponde à uma camada, ou  layer, em meu mapa. Para melhorar o  desempenho &#8211; sofrível se comparado com o MapServer &#8211; existe uma opção &#8230; <a href="http://seiti.eti.br/blog/2010/cache-camadas-no-arcgis-server">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Estou trabalhando com o ArcGIS Server 9.3.1 e tenho de inserir alguns serviços nele. Cada serviço corresponde à uma camada, ou <em> layer</em>, em meu mapa.</p>
<p>Para melhorar o  desempenho &#8211; sofrível se comparado com o <a href="http://mapserver.org/">MapServer</a> &#8211; existe uma opção para a utilização de <em>cache</em> no ArcGIS Server que funciona bem. Ao invés do servidor ter de reconstruir a imagem, toda vez que ela é requisitada, ele gera esta imagem apenas uma vez, grava em algum lugar e depois apenas a repassa para o servidor de aplicação.</p>
<p>Isto gerou um problema. Quando as imagens era geradas dinamicamente, havia a possibilidade do ArcGIS Server reprojetar e/ou reposicionar o mapa para  combiná-la com todos os layers.  Se um serviço usa EPSG:<a href="http://spatialreference.org/ref/epsg/4618/">4618</a> e outro usa <a href="http://spatialreference.org/ref/sr-org/95/">SR-ORG:95</a>,  por exemplo. Mas com o uso do cache, a imagem criada possui apenas o sistema de referenciamento definida no serviço, não podendo mudar.</p>
<p>Assim, ao combinar dois layers cujos sistemas de referenciamento espacial são diferentes, temos as seguintes situações:</p>
<ul>
<li>Os dois layers são dinâmicos:  um sistema é escolhido e os dois layers utilizam este;</li>
<li>Um dos layers é dinâmico e o outro possui cache: o dinâmico é projetado/adaptado ao sistema do que tem cache;</li>
<li>Os dois layers usam cache: apenas um deles é exibido. Não há reprojeção.</li>
</ul>
<p>O ideal então é manter um único sistema de referenciamento espacial nos serviços. E aproveitar para deixar todos no <a href="http://seiti.eti.br/blog/2010/sirgas-2000">SIRGAS2000</a>.
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2009/arcgis-javascript-dojo-e-o-metodo-require" rel="bookmark" title="16 de setembro de 2009">ArcGIS Javascript, Dojo e o método require</a></li>
<li><a href="http://seiti.eti.br/blog/2010/sirgas-2000" rel="bookmark" title="27 de janeiro de 2010">SIRGAS 2000</a></li>
<li><a href="http://seiti.eti.br/blog/2010/sistema-de-referenciamento-espacial" rel="bookmark" title="18 de janeiro de 2010">Sistema de Referenciamento Espacial</a></li>
<li><a href="http://seiti.eti.br/blog/2008/sig-sistema-de-informacao-geografica" rel="bookmark" title="23 de abril de 2008">SIG &#8211; Sistema de Informação Geográfica</a></li>
</ul>
<p><!-- Similar Posts took 4.825 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2010/cache-camadas-no-arcgis-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sincronizando a agenda do Google e a do Google Apps</title>
		<link>http://seiti.eti.br/blog/2009/sincronizando-a-agenda-do-google-e-a-do-google-apps</link>
		<comments>http://seiti.eti.br/blog/2009/sincronizando-a-agenda-do-google-e-a-do-google-apps#comments</comments>
		<pubDate>Tue, 29 Dec 2009 03:46:36 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[cacarecos]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[milestone]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=911</guid>
		<description><![CDATA[Após alguns problemas associando minhas duas contas do Google no Milestone, restou apenas o problema da agenda.  Recapitulando, tenho duas contas: uma do Google, comum, e outra do Google Apps for Your Domain (GAFYD ou apenas Google Apps). Cada uma &#8230; <a href="http://seiti.eti.br/blog/2009/sincronizando-a-agenda-do-google-e-a-do-google-apps">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Após alguns problemas associando minhas <a href="http://seiti.eti.br/blog/2009/nao-consegue-adicionar-outra-conta-google-no-motorola-milestone">duas contas do Google no Milestone</a>, restou apenas o problema da agenda.  Recapitulando, tenho duas contas: uma do Google, comum, e outra do Google Apps for Your Domain (GAFYD ou apenas <a href="http://seiti.eti.br/blog/2008/migrando-para-o-google-apps-gmail">Google Apps</a>).</p>
<p>Cada uma delas conta com sua própria agenda, mas eu só utilizo a do Google Apps.  Mas o Milestone  sincroniza a agenda com apenas <strong>uma conta</strong>, a <strong>primeira</strong> que você cadastrar. E para solucionar o problema do <a href="http://seiti.eti.br/blog/2009/nao-consegue-adicionar-outra-conta-google-no-motorola-milestone">post anterior</a> tive de cadastrar primeiro minha conta Google comum.</p>
<p>Algo estranho, deveria ser possível ao menos escolher com qual conta sincronizar. Bom, o jeito é remediar. Como? Primeiro entre na seção de configuração do calendário, na interface administrativa do Google Apps. O endereço é algo assim:</p>
<blockquote><p>https://www.google.com/a/cpanel/example.com/CalendarSettings</p></blockquote>
<p>Claro que você deve substituir <em>example.com</em> por seu próprio domínio.  Note o item &#8220;<em>Sharing options</em>&#8220;. Assegure-se de escolher o item &#8220;<em><label for="public_fullshare_write">Share all information, and outsiders can change calendars</label></em>&#8220;.</p>
<p>Atenção!  Para que esta configuração tenha efeito pode demorar alguns minutos. Caso os passos seguintes não dêem resultado, tnte novamente depois.</p>
<p>Bom, agora você pode compartilhar sua agenda do Google Apps e inserí-la na agenda do Google, através do  <em>My Calendars</em> → <em>Settings </em>→ <em>Sharing</em>.  Coloque seu email <strong>@gmail.com</strong> e escolha na caixa a opção <em>Make changes AND manage sharing</em>. Pronto!</p>
<p><a title="Compartilhando o Google Calendar por Seiti Yamashiro, no Flickr" href="http://www.flickr.com/photos/seiti/4224438288/"><img src="http://farm5.static.flickr.com/4032/4224438288_0fe3f2b355.jpg" alt="Compartilhando o Google Calendar" width="440" height="290" /></a></p>
<p>Agora você conseguirá visulizar ambas as agendas em seu Motorola Milestone. só espero que em um próximo update do Android isto deixe de ser necessário.
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2009/nao-consegue-adicionar-outra-conta-google-no-motorola-milestone" rel="bookmark" title="26 de dezembro de 2009">Não consegue adicionar outra conta Google no Motorola Milestone?</a></li>
<li><a href="http://seiti.eti.br/blog/2008/migrando-emails-do-gmail-para-o-google-apps" rel="bookmark" title="29 de junho de 2008">Migrando emails do Gmail para o Google Apps</a></li>
<li><a href="http://seiti.eti.br/blog/2008/migrando-para-o-google-apps-gmail" rel="bookmark" title="25 de junho de 2008">Migrando para o Google Apps Gmail</a></li>
<li><a href="http://seiti.eti.br/blog/2009/motorola-milestone-droid" rel="bookmark" title="15 de dezembro de 2009">Motorola Milestone (Droid)</a></li>
</ul>
<p><!-- Similar Posts took 7.238 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/sincronizando-a-agenda-do-google-e-a-do-google-apps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 3.5 disponível!!!</title>
		<link>http://seiti.eti.br/blog/2009/firefox-3-5-disponivel</link>
		<comments>http://seiti.eti.br/blog/2009/firefox-3-5-disponivel#comments</comments>
		<pubDate>Tue, 30 Jun 2009 18:19:47 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=700</guid>
		<description><![CDATA[Foi lançado hoje a nova versão deste formidável navegador. http://www.getfirefox.com Além de maior suporte aos padrões web mais atuais (HTML 5, CSS 2.1), aumentou bastante o desempenho, crucial para visitar sites Ajax: O Firefox mais rápido de todos As coisas &#8230; <a href="http://seiti.eti.br/blog/2009/firefox-3-5-disponivel">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Foi lançado hoje a nova versão deste formidável navegador.<br />
<a href="http://www.getfirefox.com">http://www.getfirefox.com</a></p>
<p>Além de maior suporte aos padrões web mais atuais (HTML 5, CSS 2.1), aumentou bastante o desempenho, crucial para visitar sites Ajax:</p>
<blockquote><p>O Firefox mais rápido de todos</p>
<p>As coisas mudam rapidamente na web, por isso melhoramos o motor do Firefox para assegurar que você possa acompanhá-las: o Firefox 3.5 é duas vezes mais rápido que o Firefox 3 e dez vezes mais rápido que o Firefox 2.* Dessa forma, aplicações Web como emails e sites de fotos estarão mais rápidas e sem atrasos.</p></blockquote>
<p>Meu uso indica que está tão rápido quanto o Chrome: super ligeiro! Agora tenho a velocidade do Chrome e os plugins indispensáeis do Firefox, como o Firebug.</p>
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2008/firefox-download-day" rel="bookmark" title="17 de junho de 2008">Firefox Download Day</a></li>
<li><a href="http://seiti.eti.br/blog/2008/vivo-online-no-firefox" rel="bookmark" title="25 de junho de 2008">Vivo Online no Firefox</a></li>
<li><a href="http://seiti.eti.br/blog/2008/eu-baixei-e-voce" rel="bookmark" title="25 de junho de 2008">Eu baixei, e você?</a></li>
</ul>
<p><!-- Similar Posts took 4.939 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/firefox-3-5-disponivel/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Local Business Center update</title>
		<link>http://seiti.eti.br/blog/2009/google-local-business-center-update</link>
		<comments>http://seiti.eti.br/blog/2009/google-local-business-center-update#comments</comments>
		<pubDate>Thu, 04 Jun 2009 22:11:14 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=650</guid>
		<description><![CDATA[Li um post interessante no meu RSS Reader: http://googleblog.blogspot.com/2009/06/local-business-center-dashboard-opens.html Atualizaram o serviço e incluíram mais opções. Se você não conhece, o Google Local Business Center, ou Google LBC,  permite ao proprietário de uma empresa que apareça  no mapa do Google &#8230; <a href="http://seiti.eti.br/blog/2009/google-local-business-center-update">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Li um <em>post </em>interessante no meu RSS Reader:</p>
<p><a href="http://googleblog.blogspot.com/2009/06/local-business-center-dashboard-opens.html">http://googleblog.blogspot.com/2009/06/local-business-center-dashboard-opens.html</a></p>
<p>Atualizaram o serviço e incluíram mais opções. Se você não conhece, o <em>Google Local Business Center</em>, ou Google LBC,  permite ao proprietário de uma empresa que apareça  no mapa do Google Maps,  editar os dados apresentados.</p>
<p>Assim pode-se atualizar o telefone de contato, adicionar informações e tudo mais. Para isto é necessário provar que você é realmente responsável pela empresa, e aí entra em campo, em uma das opções,  o velho e conhecido correio.  Aquele do envelope e selo, lembra?</p>
<p>Bom, parece que existem indicadores interessantes para aqueles que possuem empresas com localização física:</p>
<blockquote>
<ul>
<li> Impressions: The number of times the business listing appeared as a result on a Google.com search or Google Maps search in a given period.</li>
<li>Actions: The number of times people interacted with the listing; for example, the number of times they clicked through to the business&#8217; website or requested driving directions to the business.</li>
<li>Top search queries: Which queries led customers to the business listing; for example, are they finding the listing for a cafe by searching for &#8220;tea&#8221; or &#8220;coffee&#8221;?</li>
<li>Zip codes where driving directions come from: Which zip codes customers are coming from when they request directions to your location.</li>
</ul>
</blockquote>
<p>Em resumo, são estatísticas geradas pelo próprio Google e seu sistema<br />
Google Maps, quando seu uso faz referência à sua empresa. Eu diria que<br />
servem para complementar o Google Analytics.
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2008/gmail-tasks-e-google-maps" rel="bookmark" title="9 de dezembro de 2008">Gmail, Tasks e Google Maps</a></li>
<li><a href="http://seiti.eti.br/blog/2009/nao-consegue-adicionar-outra-conta-google-no-motorola-milestone" rel="bookmark" title="26 de dezembro de 2009">Não consegue adicionar outra conta Google no Motorola Milestone?</a></li>
<li><a href="http://seiti.eti.br/blog/2009/google-tasks-desktop" rel="bookmark" title="12 de maio de 2009">Google Tasks Desktop</a></li>
<li><a href="http://seiti.eti.br/blog/2008/migrando-para-o-google-apps-gmail" rel="bookmark" title="25 de junho de 2008">Migrando para o Google Apps Gmail</a></li>
</ul>
<p><!-- Similar Posts took 5.646 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/google-local-business-center-update/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Explicit construction of entity type &#8216;###&#8217; in query is not allowed</title>
		<link>http://seiti.eti.br/blog/2009/explicit-construction-of-entity-type-in-query-is-not-allowed</link>
		<comments>http://seiti.eti.br/blog/2009/explicit-construction-of-entity-type-in-query-is-not-allowed#comments</comments>
		<pubDate>Wed, 03 Jun 2009 04:44:38 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[linq to sql]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=645</guid>
		<description><![CDATA[Estava eu programando, feliz da vida, quando percebi subitamente que felicidade e programação não se misturam muito bem. Surge então esta mensagem de erro: A construção explícita do tipo de entidade &#8216;###&#8217; na consulta não é permitida. ou, em bom &#8230; <a href="http://seiti.eti.br/blog/2009/explicit-construction-of-entity-type-in-query-is-not-allowed">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Estava eu programando, feliz da vida, quando percebi subitamente que felicidade e programação não se misturam muito bem. Surge então esta mensagem de erro:</p>
<blockquote><p>A construção explícita do tipo de entidade &#8216;###&#8217; na consulta não é permitida.</p></blockquote>
<p>ou, em bom inglês <em>Google friendly</em>:</p>
<blockquote><p>Explicit construction of entity type &#8216;###&#8217; in query is not allowed</p></blockquote>
<p>O código que gerou a mensagem pouco agradável foi este:</p>
<pre class="prettyprint">var res =
    from m in MyDataContext.INSCRICAOs
    group m by m.PESSOA into p
    select new MAILING()
    {
        idMailingTexto = idMailingTexto,
        nomPessoa = p.First().PESSOA.nomPessoa,
        eMail = p.First().PESSOA.eMail,
        flaEnviado = false,
    };</pre>
<p>Minha intenção é de, a partir de dados extraídos da tabela <em>INSCRICAO</em>, criar entradas na tabela <em>MAILING</em>, usando o Linq To SQL (sem sermões sobre formas normais em banco de dados, por favor). Mas o Linq <strong>não deixa</strong> eu criar estes objetos MAILING, não a partir de uma consulta do próprio Linq. </p>
<p>O problema, que descobri ser um <em>feature </em>(como se traduz isto para o português?) parece <a href="http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/1ce25da3-44c6-407d-8395-4c146930004b?prof=required">ser antigo</a>, e a resposta é esta:</p>
<blockquote><p>This check was added because it was supposed to be there from the beginning and was missing.  Constructing entity instances manually as a projection pollutes the cache with potentially malformed objects, leading to confused programmers and lots of bug reports for us. In addition, it is ambiguous whether projected entities should be in the cache or changed tracked at all. The usage pattern for entities is that they are created outside of queries and inserted into tables via the DataContext and then later retrieved via queries, never created by queries.</p></blockquote>
<p>Para mim isto é nivelar por baixo, mas enfim. O jeito foi criar um objeto idêntico ao existente, que chamei de MAILINGCLONE:</p>
<pre class="prettyprint">
public class MAILINGCLONE
{
    public int idMailingTexto { get; set; }
    public string nomPessoa { get; set; }
    public string eMail { get; set; }
    public bool flaEnviado { get; set; }
    public DateTime datAtualiza { get; set; }
}
</pre>
<p>E trocar a consulta para:</p>
<pre class="prettyprint">var res =
    from m in MyDataContext.INSCRICAOs
    group m by m.PESSOA into p
    select new MAILINGCLONE()
    {
        idMailingTexto = idMailingTexto,
        nomPessoa = p.First().PESSOA.nomPessoa,
        eMail = p.First().PESSOA.eMail,
        flaEnviado = false
    };</pre>
<p>Isto até que não doeu. O que dói no coração é trocar isto:</p>
<pre class="prettyprint">
dc.MAILINGs.InsertAllOnSubmit(mails);
dc.SubmitChanges();
</pre>
<p>por isto:</p>
<pre class="prettyprint">
foreach (MAILINGCLONE mc in mails)
{
    MAILING m = new MAILING()
    {
        idMailingTexto = mc.idMailingTexto,
        nomPessoa = mc.nomPessoa,
        eMail = mc.eMail,
        flaEnviado = mc.flaEnviado,
        codPessoa = mc.codPessoa,
        datAtualiza = DateTime.Now
    };
    dc.MAILINGs.InsertOnSubmit(m);
}
dc.SubmitChanges();
</pre>
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2009/left-outer-join-em-linq-to-sql" rel="bookmark" title="17 de abril de 2009">Left Outer Join em Linq To Sql</a></li>
<li><a href="http://seiti.eti.br/blog/2009/boas-praticas-em-linq-to-sql" rel="bookmark" title="7 de maio de 2009">Boas práticas em Linq To Sql</a></li>
<li><a href="http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-i" rel="bookmark" title="13 de maio de 2009">Gerando boletos bancários em Asp.NET &#8211; Parte I</a></li>
<li><a href="http://seiti.eti.br/blog/2009/linq-to-sql" rel="bookmark" title="13 de abril de 2009">Linq to Sql</a></li>
</ul>
<p><!-- Similar Posts took 6.593 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/explicit-construction-of-entity-type-in-query-is-not-allowed/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Resolvendo o problema da busca no DSpace</title>
		<link>http://seiti.eti.br/blog/2009/resolvendo-o-problema-da-busca-no-dspace</link>
		<comments>http://seiti.eti.br/blog/2009/resolvendo-o-problema-da-busca-no-dspace#comments</comments>
		<pubDate>Thu, 28 May 2009 03:46:39 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=633</guid>
		<description><![CDATA[Ocorre um problema em minha instalação  do DSpace. As buscas realizadas contendo caracteres com diacríticos (acentuação e etc.) retornam resultados estranhos, pois os termos da busca ficam desfigurados. E não sou só eu que enfrento isto. Fui escarafunchar o código &#8230; <a href="http://seiti.eti.br/blog/2009/resolvendo-o-problema-da-busca-no-dspace">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ocorre um problema em minha <a href="http://seiti.eti.br/blog/2009/addon-de-estatisticas-do-dspace">instalação  do DSpace</a>. As buscas realizadas contendo caracteres com <a href="http://pt.wikipedia.org/wiki/Diacr%C3%ADtico">diacríticos</a> (acentuação e etc.) retornam resultados estranhos, pois os termos da busca ficam desfigurados. E <a href="http://seiti.eti.br/blog/2009/addon-de-estatisticas-do-dspace#comment-275">não sou só eu</a> que enfrento isto.</p>
<p>Fui escarafunchar o código fonte tentando encontrar alguma solução. Não encontrei nenhuma. Vamos apelar ao <strong><a href="http://www.google.com.br/search?q=dspace+diacritics+starts_with">onisciente</a></strong> então.</p>
<p>Um <a href="http://www.nabble.com/Acute-Accents----Searching-td23594758.html">post</a> me chamou a atenção para a configuração do Tomcat. É necessário editar o arquivo <tt>/etc/tomcat5/server.xml</tt> de formar que o elemento <em>Connector</em> em questão  tenha um atributo <strong>URIEncoding=&#8221;UTF-8&#8243;</strong>.</p>
<p>Embora este atributo seja sempre configurado no Connector padrão , que escuta na porta 8080,  me lembrei que eu havia configurado o <a href="http://seiti.eti.br/blog/2008/apache-tomcat">Tomcat</a> para funcionar em conjunto com o Apache, através do <em>mod_jk</em>, na porta <strong>8009 com o AJP Connector</strong>.</p>
<p>Fui verificar o arquivo server.xml e <strong>bingo</strong>! Foi só mudar de</p>
<pre>&lt;Connector port="8009" enableLookups="false"
    redirectPort="8080" protocol="AJP/1.3" /&gt;</pre>
<p>para</p>
<pre>&lt;Connector port="8009" enableLookups="false"
    redirectPort="8080" protocol="AJP/1.3"
    URIEncoding="UTF-8" /&gt;</pre>
<p>E a busca voltou a funcionar.</p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/resolvendo-o-problema-da-busca-no-dspace/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Conseguindo a URL completa de uma página</title>
		<link>http://seiti.eti.br/blog/2009/conseguindo-a-url-completa-de-uma-pagina</link>
		<comments>http://seiti.eti.br/blog/2009/conseguindo-a-url-completa-de-uma-pagina#comments</comments>
		<pubDate>Tue, 19 May 2009 12:21:12 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=611</guid>
		<description><![CDATA[O problema é como obter a URL completa, ou absoluta (absolute URL), em Asp.NET. public string ObtemUrl(Control c, string relativePath) { //relativePath deve conter algo como "~/meu/arquivo/no/servidor" return new Uri(c.Page.Request.Url, c.ResolveUrl(relativePath)).ToString(); } A chamada fica assim: string umaUrl = objeto.ObtemUrl(this, &#8230; <a href="http://seiti.eti.br/blog/2009/conseguindo-a-url-completa-de-uma-pagina">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O problema é como obter a URL completa, ou absoluta (<em>absolute URL</em>), em Asp.NET.</p>
<pre class="prettyprint">public string ObtemUrl(Control c, string relativePath)
{
    //relativePath deve conter algo como "~/meu/arquivo/no/servidor"
    return new Uri(c.Page.Request.Url, c.ResolveUrl(relativePath)).ToString();
}</pre>
<p>A chamada fica assim:</p>
<pre class="prettyprint">string umaUrl = objeto.ObtemUrl(this, "~/meu/arquivo/no/servidor");</pre>
<p>A variável <strong>umaUrl </strong>conterá<strong> algo como &#8220;http://www.example.com/meu/arquivo/no/servidor&#8221;.<br />
</strong></p>
<p>Não achei nenhum modo mais <a href="http://penyaskitodice.wordpress.com/2008/12/18/aspnet-getting-the-absolute-url-of-a-web-page/">simples</a>.
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2009/linq-to-sql" rel="bookmark" title="13 de abril de 2009">Linq to Sql</a></li>
<li><a href="http://seiti.eti.br/blog/2009/httppostedfile-ie-versus-firefox" rel="bookmark" title="17 de maio de 2009">HttpPostedFile: IE versus Firefox</a></li>
<li><a href="http://seiti.eti.br/blog/2009/compilando-seu-web-application-project-com-o-msbuild" rel="bookmark" title="6 de maio de 2009">Compilando seu Web Application Project com o MSBuild</a></li>
<li><a href="http://seiti.eti.br/blog/2009/encodings-e-charsets-em-aspnet" rel="bookmark" title="13 de maio de 2009">Encodings e charsets em Asp.NET</a></li>
</ul>
<p><!-- Similar Posts took 25.942 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/conseguindo-a-url-completa-de-uma-pagina/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HttpPostedFile: IE versus Firefox</title>
		<link>http://seiti.eti.br/blog/2009/httppostedfile-ie-versus-firefox</link>
		<comments>http://seiti.eti.br/blog/2009/httppostedfile-ie-versus-firefox#comments</comments>
		<pubDate>Sun, 17 May 2009 12:17:09 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[bug]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=601</guid>
		<description><![CDATA[Estou aqui programando, feliz da vida, e me enviam um bug para matar. Ao subir um arquivo em nosso sistema Asp.NET surge o erro: "The given path's format is not supported." ou "Não há suporte para o formato do caminho &#8230; <a href="http://seiti.eti.br/blog/2009/httppostedfile-ie-versus-firefox">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Estou aqui programando, feliz da vida, e me enviam um bug para matar.</p>
<p>Ao subir um arquivo em nosso sistema Asp.NET surge o erro:</p>
<pre>"The given path's format is not supported."</pre>
<p>ou</p>
<pre>"Não há suporte para o formato do caminho dado."
(maldita MS por traduzir mensagens de erro)</pre>
<p>Mas eu não conseguia reproduzir o problema de nenhuma maneira. Até testar no Internet Explorer. O método que utilizo para gravar o arquivo é este:</p>
<pre class="prettyprint">public string Grava(HttpPostedFile postedFile, string id)
{
    string newfilename = id + postedFile.FileName;
    string fullName = DirPath + newfilename;
    postedFile.SaveAs(fullName);

    return fullName;
}</pre>
<p>A chamada é realizada assim, onde fupAnexo é um controle <strong>FileUpload</strong>:</p>
<pre class="prettyprint">string path = anexo.Grava(fupAnexo.PostedFile, guid.ToString());</pre>
<p>O problema está nesta propriedade: <strong>postedFile.FileName</strong>. O conteúdo dela depende de qual navegador é utilizado pelo usuário.</p>
<p>No IE o conteúdo é o caminho completo do arquivo no computador do usuário: <em>C:\\Pasta\\Pasta\\Macarrao\\arquivo.xis</em>.</p>
<p>No Firefox apenas o nome do arquivo: <em>arquivo.xis</em>.</p>
<p>O framework deveria uniformizar o acesso aos recursos do sistema, mas aprendo cada vez mais que não dá para confiar em dados vindos do usuário <strong>nem do sistema</strong>. Não confie em nada.</p>
<p>Acertei o método para o que segue:</p>
<pre class="prettyprint">public string Grava(HttpPostedFile postedFile, string id)
{
    string[] filename = postedFile.FileName.Split('\\');
    string newfilename = id + filename[filename.Count() - 1];

    string fullName = DirPath + newfilename;
    postedFile.SaveAs(fullName);

    return fullName;
}</pre>
<p>Falta testar o caso em que o usuário acessa o sistema a partir do Linux (ou Mac OSX) usando o Internet Explorer. Mas acho que não existam tantos loucos por aí.
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2009/conseguindo-a-url-completa-de-uma-pagina" rel="bookmark" title="19 de maio de 2009">Conseguindo a URL completa de uma página</a></li>
<li><a href="http://seiti.eti.br/blog/2009/linq-to-sql" rel="bookmark" title="13 de abril de 2009">Linq to Sql</a></li>
<li><a href="http://seiti.eti.br/blog/2009/bug-no-plugin-de-estatisticas-do-uminho-para-o-dspace" rel="bookmark" title="14 de abril de 2009">Bug no Plugin de estatísticas do UMinho para o DSpace</a></li>
<li><a href="http://seiti.eti.br/blog/2009/net-assembly-versioning" rel="bookmark" title="17 de junho de 2009">.Net Assembly versioning</a></li>
</ul>
<p><!-- Similar Posts took 5.596 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/httppostedfile-ie-versus-firefox/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ligando um controle à um Enum</title>
		<link>http://seiti.eti.br/blog/2009/ligando-um-controle-a-um-enum</link>
		<comments>http://seiti.eti.br/blog/2009/ligando-um-controle-a-um-enum#comments</comments>
		<pubDate>Fri, 15 May 2009 12:50:47 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=567</guid>
		<description><![CDATA[As enumerações, ou simplesmente enums, são comumentes usados para substituir valores mágicos e deixando o código mais legível e auto-documentado. Mas em Asp.NET, às vezes se torna necessário listar os &#8220;valores&#8221; de um enum. &#8220;Valores&#8221; está entre aspas porque não &#8230; <a href="http://seiti.eti.br/blog/2009/ligando-um-controle-a-um-enum">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As <strong>enumerações</strong>, ou simplesmente <a class="ext" href="http://en.wikipedia.org/wiki/Enumerated_type">enums</a>, são comumentes usados para substituir <a class="ext" href="http://en.wikipedia.org/wiki/Magic_number_%28programming%29">valores mágicos</a> e deixando o código mais legível e auto-documentado.</p>
<p>Mas em Asp.NET, às vezes se torna necessário listar os &#8220;valores&#8221; de um enum. &#8220;Valores&#8221; está entre aspas porque não é necessariamente o valor que a gente quer ligar, pois <a href="http://msdn.microsoft.com/pt-br/library/sbbt4032(VS.80).aspx">este valor é um número inteiro</a>.</p>
<pre class="prettyprint">public enum CMYK
{
    CYAN,
    MAGENTA,
    YELLOW,
    KEY
}</pre>
<p>No caso, <em>CYAN = 0, MAGENTA = 1</em> e daí em diante. Seria legal então podermos <a href="http://geekswithblogs.net/jawad/archive/2005/06/24/EnumDropDown.aspx">ligar (através do DataSource/DataBind) este nosso enum em um controle</a>, por exemplo um <em>DropDownList</em>, que deve apresentar CYAN, MAGENTA, YELLOW e KEY como opções.</p>
<pre class="prettyprint">protected System.Web.UI.WebControls.DropDownList ddColorComponent;

private void Page_Load(object sender, System.EventArgs e)
{
    if(!IsPostBack)
    {
        ddColorComponent.DataSource = Enum.GetNames(typeof(CMYK));
        ddColorComponent.DataBind();
    }
}

private void ddColorComponent_SelectedIndexChanged(object sender, System.EventArgs e)
{
     Color selectedColor = (Color)Enum.Parse(ddColorComponent.SelectedValue);
}</pre>
<p>Podemos <a href="http://developcode.blogspot.com/2006/12/dropdownlists-with-enums-as-datasource.html">melhorar isto</a> e dar nomes mais descritivos aos nossos enums através de atributos:</p>
<pre class="prettyprint">using System.ComponentModel;

public enum CMYK
{
    [Description("Ciano")]
    CYAN,
    [Description("Magenta")]
    MAGENTA,
    [Description("Amarelo")]
    YELLOW,
    [Description("Preto")]
    KEY
}</pre>
<p>Nesta solução, no entanto, devemos escrever o código que fornece uma lista de elementos para ser usada como DataSource. Primeiro devemos extrair o conteúdo inserido como atributo do enum através de <em>reflection</em>:</p>
<pre class="prettyprint">using System.ComponentModel;
using System.Reflection;
...
...
public static string GetDescription(Enum value)
{
    FieldInfo fieldInfo = value.GetType().GetField(value.ToString());
    DescriptionAttribute[] attributes  = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
    return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
}</pre>
<p>Assim é possível iterar por todos os itens do enum, criando uma lista:</p>
<pre class="prettyprint">public static List> GetValuesAndDescription(System.Type enumType)
{
    List> kvPairList = new List>();

    foreach (Enum enumValue in Enum.GetValues(enumType))
    {
        kvPairList.Add(new KeyValuePair(enumValue.ToString(), GetDescription(enumValue)));
    }

    return kvPairList;
}</pre>
<p>O <em>DataBind</em> fica assim:</p>
<pre class="prettyprint">ddColorComponent.DataSource = EnumDescription.GetValuesAndDescription(typeof(CMYK));
ddColorComponent.DataTextField = "Value";
ddColorComponent.DataValueField = "Key";</pre>
<p>Fonte: <a href="http://developcode.blogspot.com/2006/12/dropdownlists-with-enums-as-datasource.html">http://developcode.blogspot.com/2006/12/dropdownlists-with-enums-as-datasource.html</a>
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2008/criando-um-metodo-de-log-em-aspnet" rel="bookmark" title="28 de agosto de 2008">Criando um método de log em Asp.NET</a></li>
<li><a href="http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-i" rel="bookmark" title="13 de maio de 2009">Gerando boletos bancários em Asp.NET &#8211; Parte I</a></li>
<li><a href="http://seiti.eti.br/blog/2009/conseguindo-a-url-completa-de-uma-pagina" rel="bookmark" title="19 de maio de 2009">Conseguindo a URL completa de uma página</a></li>
<li><a href="http://seiti.eti.br/blog/2008/framework-de-testes-funcionais-nexuslight" rel="bookmark" title="26 de setembro de 2008">Framework de testes funcionais NexusLight</a></li>
</ul>
<p><!-- Similar Posts took 7.053 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/ligando-um-controle-a-um-enum/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gerando boletos bancários em Asp.NET &#8211; Parte I</title>
		<link>http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-i</link>
		<comments>http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-i#comments</comments>
		<pubDate>Thu, 14 May 2009 00:54:15 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[boleto]]></category>
		<category><![CDATA[crystal reports]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[linq to sql]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=573</guid>
		<description><![CDATA[Estou em um projeto que necessita a criação de um boleto bancário para o pagamento de um serviço. Como gerá-lo, usando o Visual Studio 2008, Crystal Reports e o Linq To Sql ? Boleto? Vamos primeiro entender do que é &#8230; <a href="http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-i">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Estou em um projeto que necessita a criação de um boleto bancário para o pagamento de um serviço. Como gerá-lo, usando o Visual Studio 2008,  Crystal Reports e o <a href="http://seiti.eti.br/blog/2009/boas-praticas-em-linq-to-sql">Linq To Sql</a> ?</p>
<h3>Boleto?</h3>
<p>Vamos primeiro entender do que é composto basicamente um boleto:</p>
<ul>
<li><strong>Banco</strong>:  quem gerencia a transação;</li>
<li><strong>Cedente</strong>:  quem vai receber a grana;</li>
<li><strong>Sacado</strong>:  quem paga;</li>
<li><strong>Valor do documento</strong>: quanto será pago</li>
<li><strong>Data de vencimento</strong>: até quando pode ser pago;</li>
<li><strong>Modalidade</strong>:  com ou sem registro. O comum para vendas online é <em>sem registro</em>.  Se o sacado não pagar, a responsabilidade de correr atrás é do cedente.</li>
</ul>
<p>A entidade que padroniza os boletos no Brasil é  a Federação Brasileira de Bancos &#8211; <a href="http://www.febraban.com.br">FEBRABAN</a>.</p>
<p><span id="more-573"></span>É claro que o desenvolvedor deve conhecer mais que o básico, caso queira gerar um boleto.  Segue então o modelo do boleto do Itaú.  Mas note que ainda assim a descrição está resumida:<a class="flickr-image alignnone" title="Modelo de boleto Itaú" rel="flickr-mgr" href="http://www.flickr.com/photos/seiti/3525955045/"><img class="flickr-medium" src="http://farm4.static.flickr.com/3398/3525955045_d49dbcd0f5_o.png" alt="Modelo de boleto Itaú" /></a></p>
<p><strong>1</strong> &#8211; <em>Nome do banco</em>, que pode conter também seu logotipo;</p>
<p><strong>2</strong> -<em> Código do banco</em>, com seu respectivo DV;</p>
<p><strong>3</strong> &#8211; <em>Local de pagamento</em>;</p>
<p><strong>4</strong> &#8211; <em>Data do documento,</em> que é  quando ele foi gerado;</p>
<p><strong>5</strong> &#8211; <em>Número do documento</em>, obrigatório para carteiras sem registro</p>
<p><strong>6</strong> &#8211; <em>Carteira</em>, não utilizado pelo Itaú</p>
<p><strong>7</strong> &#8211; <em>Espécie</em>, use R$ para usar nossa moeda</p>
<p><strong>8</strong> &#8211; <em>Agência/Código Cedente</em>,  no formato 1234/56789-7 e  <em>Nosso Número</em>, no formato 123/45678901-5</p>
<p><strong>9</strong> &#8211; Uso exclusivo do funcionário caixa</p>
<p><strong>10</strong> &#8211; <em>Instruções</em>, condições para recebimento,  dados sobre multas por atraso, bancos autorizados etc.</p>
<p>A duas listagens acima já ajudam o programador a saber quais dados ele <strong>precisa</strong> ter à mão para gerar um boleto bancário. Alguns itens do boleto deverão ser <strong>criados automaticamente</strong> pelo sistema a partir destes dados, tais como a <em>linha digitável</em> e o <em>código de barras</em>.</p>
<p>Uma excelente fonte de documentação se encontra em <a href="http://www.phpboleto.com.br/">http://www.phpboleto.com.br/</a>. Lá existem outros modelos disponíveis para download.  E,  se seu projeto é em PHP, recomendo utilizá-lo!</p>
<p>Outro lugar legal para se informar é o site <a href="http://www.macoratti.net/boleto.htm">macoratti.com</a>.</p>
<h3>Criando um template</h3>
<p>Por meio do <em>Crystal Reports</em>, que já vem no Visual Studio 2008, criei o seguinte template:</p>
<p><a class="flickr-image alignnone" title="Template do boleto do Itaú no Crystal Reports" rel="flickr-mgr" href="http://www.flickr.com/photos/seiti/3528627827/"><img class="flickr-medium" src="http://farm4.static.flickr.com/3541/3528627827_0cc3fcfaee_o.png" alt="Template do boleto do Itaú no Crystal Reports" /></a></p>
<p>Note que ele contém só o esqueleto. Nenhum campo dinâmico foi adicionado (bom, talvez a <strong>espécie</strong>, que considerei ser sempre R$) ainda.</p>
<p>Template pronto,  precisamos dos dados para populá-lo. Criei uma classe cujas propriedades são os dados a serem inseridos no boleto:</p>
<pre class="brush: csharp; title: ; notranslate">namespace namespace Portal.Controles.Boleto
{
    public class Dados
    {
        public DateTime DataDocumento { get; set; }
        public DateTime DataVencimento { get; set; }
        public DateTime DataProcessamento { get; set; }

        public string Cedente { get; set; }
        public string SacadoResumido { get; set; }
        public string SacadoCompleto { get; set; }

        public string Agencia { get; set; }
        public string CodigoCedente { get; set; }

        public int NumeroDocumento { get; set; }
        public string EspecieDocumento { get; set; }
        public string Aceite { get; set; }
        public string NossoNumero { get; set; }
        public string Carteira { get; set; }

        public string Instrucoes { get; set; }

        public int Quantidade { get; set; }
        public decimal Valor { get; set; }
        public decimal ValorDocumento { get; set; }

        public string CodigoBaixa { get; set; }
        public bytes[] CodigoBarra { get; set; }
        public string LinhaDigitavel { get; set; }
    }
}</pre>
<p>Agora é preciso terminar o template do boleto. Ao compilar o projeto podemos inserir as propriedades da classe acima em nosso template.</p>
<p>Para adicionar  a classe recém criada como fonte de dados (<em>Data Source</em>) é só ir para <em>DataBase Fields → DataBase Expert</em>:</p>
<p><a class="flickr-image alignnone" title="DataBase Fields -&gt; Expert" rel="flickr-mgr" href="http://www.flickr.com/photos/seiti/3529470418/"><img class="flickr-medium" src="http://farm3.static.flickr.com/2384/3529470418_1d040bb663_o.png" alt="DataBase Fields -&gt; Expert" /></a></p>
<p>Na caixa de diálogo que se abre, é só escolher a classe recém criada.  Ficam à  disposição  todas as propriedades necessárias para popular o boleto:</p>
<p><a class="flickr-image alignnone" title="DataBase Fields" rel="flickr-mgr" href="http://www.flickr.com/photos/seiti/3529475678/"><img class="flickr-medium" src="http://farm4.static.flickr.com/3374/3529475678_9c499b492e_o.png" alt="DataBase Fields" /></a></p>
<p>Por meio do famigerado <em>arrastar e soltar</em>, é só terminar de criar o template, colocando os campos nos lugares corretos. Um trabalho simples, mas meio chato,  eu sei.</p>
<h3>Testando a geração do boleto</h3>
<p>Template pronto. Posso então criar uma classe encarregada de pegar os <strong>dados</strong>, pegar o <strong>template</strong>,<strong> </strong>juntá-los e serví-los. A classe não tem nada de mais, e está preparada para funcionar em ambiente Asp.NET:</p>
<pre class="brush: csharp; title: ; notranslate">namespace Portal.Controles.Boleto
{
    public enum Banco
    {
        ITAU
    }

    public class Boleto
    {
        CrystalDecisions.CrystalReports.Engine.ReportDocument rel;

        public Boleto(Banco banco, HttpServerUtility server)
        {
            rel = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
            rel.Load(GetTemplateFilePath(banco, server));
        }

        public void Baixa(HttpResponse response, IEnumerable dataSource)
        {
            rel.SetDataSource(dataSource);
            rel.ExportToHttpResponse(
                CrystalDecisions.Shared.ExportFormatType.PortableDocFormat,
                response,
                true,
                string.Format(&quot;Boleto_{0}.pdf&quot;, DateTime.Now.Date.ToShortDateString()));
        }

        protected string GetTemplateFilePath(Banco banco, HttpServerUtility server)
        {
            switch (banco)
            {
                case Banco.ITAU:
                    return server.MapPath(&quot;~/Controles/Boleto/TemplateItau.rpt&quot;);
                default:
                    throw new Exception(&quot;Este tipo de boleto não foi implementado ainda&quot;);
            }
        }
    }
}</pre>
<p>É claro que muita coisa na classe pode ser melhorada, como o caminho até o arquivo do template, que está <em>hardcoded</em>.  Mas já funciona e está preparado para funcionar com mais de um tipo de template.</p>
<p>Como testar então o danado?</p>
<p>Criei uma página ASPX contendo um botão. Vinculei um método ao evento <strong>OnClick</strong>. O corpo do método segue abaixo:</p>
<pre class="brush: csharp; title: ; notranslate">protected void botao_OnClick(object sender, EventArgs e)
{
   Portal.Controles.Boleto.Boleto boleto = new Portal.Controles.Boleto.Boleto(Portal.Controles.Boleto.Banco.ITAU, Server);

    List dados = new List ();

    dados.Add(
        new Portal.Controles.Boleto.Dados()
        {
            Aceite = &quot;N&quot;,
             Agencia = &quot;1234&quot;,
             Carteira = &quot;123&quot;,
             Cedente = &quot;Indústria ACME&quot;,
             CodigoBaixa = &quot;123/12345678-9&quot;,
             CodigoBarra = File.ReadAllBytes(Server.MapPath(&quot;~/Caminhp/para/uma/imagem.jpg&quot;)),
             CodigoCedente = &quot;12345-6&quot;,
             DataDocumento = DateTime.Now,
             DataProcessamento = DateTime.Now,
             DataVencimento = DateTime.Now.AddDays(5),
             EspecieDocumento = &quot;AB&quot;,
             Instrucoes =
@&quot;Sujeito a protesto se ñao for pago no vencimento
no vencimento pagavel em qualquer agenia bancaria
apos vencimento cobrar R$ 0,42 por dia de atraso
apos vencimento cobrar multa de R$ 6,66&quot;,
             LinhaDigitavel = &quot;12345.12345 12345.123456 12345.123456 1 1230000066600&quot;,
             NossoNumero = &quot;123/12345678-9&quot;,
             NumeroDocumento = 123456890,
             Quantidade = 0,
             SacadoCompleto =
@&quot;Dino da Silva Sauro                  CNPJ - 12.345.678/123-11
Rua das Casas, S/N
01111-111        Vl Das Ruas          Sao Paulo          SP&quot;,
             SacadoResumido = &quot;Dino da Silva Sauro&quot;,
             Valor = 0,
             ValorDocumento = 666
         });

    boleto.Baixa(Response, dados);
}</pre>
<p>Ou seja, crie uma lista, lhe adicione um objeto passe tudo e mais um pouco para a classe Boleto e chame o método <em>Baixa</em>. Um boleto em pdf será gerado e entregue ao usuário pelo navegador.</p>
<h3>E agora?</h3>
<p>Agora que já temos a geração de um boleto <em>dummy</em> funcionando, precisamos acertar os dados que o compõem.</p>
<p>Existem regras para a linha digitável, precisamos calcular alguns dígitos verificadores e ainda gerar a imagem correspondente ao código de barras.</p>
<p>Isto fica para a <strong>Parte II</strong>! Aguardem!<br />
[<strong>Atualização</strong>: <a href="http://dl.dropbox.com/u/2295190/blog/TemplateItau.zip">Template do boleto</a> no Crystal Reports]<br />
[<strong>Atualização</strong>: Segunda parte no ar!<br />
<a href="http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-ii">http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-ii</a>]
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-ii" rel="bookmark" title="16 de julho de 2009">Gerando boletos bancários em Asp.NET &#8211; Parte II</a></li>
<li><a href="http://seiti.eti.br/blog/2008/criando-um-metodo-de-log-em-aspnet" rel="bookmark" title="28 de agosto de 2008">Criando um método de log em Asp.NET</a></li>
<li><a href="http://seiti.eti.br/blog/2009/explicit-construction-of-entity-type-in-query-is-not-allowed" rel="bookmark" title="3 de junho de 2009">Explicit construction of entity type &#8216;###&#8217; in query is not allowed</a></li>
<li><a href="http://seiti.eti.br/blog/2009/boas-praticas-em-linq-to-sql" rel="bookmark" title="7 de maio de 2009">Boas práticas em Linq To Sql</a></li>
</ul>
<p><!-- Similar Posts took 7.223 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-i/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Encodings e charsets em Asp.NET</title>
		<link>http://seiti.eti.br/blog/2009/encodings-e-charsets-em-aspnet</link>
		<comments>http://seiti.eti.br/blog/2009/encodings-e-charsets-em-aspnet#comments</comments>
		<pubDate>Wed, 13 May 2009 12:00:10 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[net]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=565</guid>
		<description><![CDATA[Geralmente não precisamos nos preocupar com os Encodings em uma aplicação em .NET. Isto porque ao desenvolvermos um sistema .NET, utilizamos ferramentas uniformizadas, afinal, elas provêm de uma mesma fabricante: Microsoft. (Já quando desenvolvemos soluções LAMP, ou mesmo WAMP, nosso &#8230; <a href="http://seiti.eti.br/blog/2009/encodings-e-charsets-em-aspnet">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Geralmente não precisamos nos preocupar com os Encodings em uma aplicação em .NET. Isto porque ao desenvolvermos um sistema .NET, utilizamos ferramentas uniformizadas, afinal, elas provêm de uma mesma fabricante: Microsoft.</p>
<p>(Já quando desenvolvemos soluções LAMP, ou mesmo WAMP, nosso cuidado precisa aumentar e muito.)</p>
<p>O fato é que o framework Asp.NET provê uma facilidade incrível para lidar com esta questão que sempre perturba os desenvolvedores. Mesmo no momento de se gravar ou ler arquivos do sistema de arquivos o encoding é tratada de forma automática.</p>
<p>A regra então é: não se preocupe com isto, a menos que algo dê errado e surja algum caractere estranho. E é claro que algo sempre dará errado.</p>
<p>Bom, então quando precisamos mudar o encoding de alguma string em Asp.NET? Simples:</p>
<pre class="prettyprint">Encoding.UTF8.GetString(Encoding.GetEncoding("iso8859-1").GetBytes("Texto com acentuação e caracteres não-ANSI"));</pre>
<p>A código acima toma uma string em<strong> ISO-8859-1</strong> e tranforma-a em uma no formato <strong>UTF-8</strong>.
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2007/encodings-e-charsets" rel="bookmark" title="17 de maio de 2007">Encodings e charsets</a></li>
<li><a href="http://seiti.eti.br/blog/2010/fluent-nhibernate" rel="bookmark" title="19 de julho de 2010">Fluent NHibernate</a></li>
<li><a href="http://seiti.eti.br/blog/2009/gerando-boletos-bancarios-em-aspnet-parte-i" rel="bookmark" title="13 de maio de 2009">Gerando boletos bancários em Asp.NET &#8211; Parte I</a></li>
<li><a href="http://seiti.eti.br/blog/2009/conseguindo-a-url-completa-de-uma-pagina" rel="bookmark" title="19 de maio de 2009">Conseguindo a URL completa de uma página</a></li>
</ul>
<p><!-- Similar Posts took 5.813 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/encodings-e-charsets-em-aspnet/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Tasks Desktop</title>
		<link>http://seiti.eti.br/blog/2009/google-tasks-desktop</link>
		<comments>http://seiti.eti.br/blog/2009/google-tasks-desktop#comments</comments>
		<pubDate>Tue, 12 May 2009 12:47:59 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[organização]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=560</guid>
		<description><![CDATA[Os usuário do Gmail já devem conhecer o Google Tasks. Se não conhecem, basta habilitarem o dito cujo no Google Labs, e, de dentro das funções do Labs, habilitarem finalmente o Google Tasks. Se você possui mais de um monitor, &#8230; <a href="http://seiti.eti.br/blog/2009/google-tasks-desktop">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Os usuário do Gmail já devem conhecer o <a href="http://mail.google.com/mail/help/tasks/">Google Tasks</a>. Se não conhecem, basta habilitarem o dito cujo no <em>Google Labs</em>, e, de dentro das funções do <em>Labs</em>, habilitarem finalmente o Google Tasks.</p>
<p><a class="flickr-image alignnone" title="Google Tasks" rel="flickr-mgr" href="http://www.flickr.com/photos/seiti/3522527719/"><img class="flickr-medium" src="http://farm4.static.flickr.com/3370/3522527719_97b6db0f36_o.png" alt="Google Tasks" /></a></p>
<p>Se você possui <a href="http://seiti.eti.br/blog/2009/melhorando-a-mesa-de-trabalho-2">mais de um monitor</a>, deve saber como desktop widgets são úteis. Informação disponível com um rápido olhar.</p>
<p>Para conseguir transformar o Google Tasks em um widget de desktop, ou melhor, em um aplicativo desktop, você vai precisar do Google Chrome. Dentre <a href="http://www.makeuseof.com/tag/5-ways-to-access-your-google-tasks/">algumas maneiras</a> de se fazer isto, achei esta a mais simples:</p>
<ul>
<li>abra o Google Tasks standalone widget no Google Chrome. O enderço é  <a href="https://mail.google.com/tasks/ig">https://mail.google.com/tasks/ig</a>, ou <a href="https://mail.google.com/tasks/a/seiti.eti.br/ig">https://mail.google.com/tasks/a/seudominio.com.br/ig</a>, para quem usa o Google Apps (troque o seudominio.com por, bem, seu domínio;</li>
<li>clique na opção &#8220;Criar atalhos de aplicativo&#8221;; <a class="flickr-image alignnone" title="Google Chrome - Criando aplicativo desktop" rel="flickr-mgr" href="http://www.flickr.com/photos/seiti/3523396608/"><img class="flickr-medium" src="http://farm4.static.flickr.com/3541/3523396608_6f6fec7b09_o.png" alt="Google Chrome - Criando aplicativo desktop" /></a></li>
<li>pronto!</li>
</ul>
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2008/gmail-tasks-e-google-maps" rel="bookmark" title="9 de dezembro de 2008">Gmail, Tasks e Google Maps</a></li>
<li><a href="http://seiti.eti.br/blog/2009/sincronizando-a-agenda-do-google-e-a-do-google-apps" rel="bookmark" title="29 de dezembro de 2009">Sincronizando a agenda do Google e a do Google Apps</a></li>
<li><a href="http://seiti.eti.br/blog/2009/nao-consegue-adicionar-outra-conta-google-no-motorola-milestone" rel="bookmark" title="26 de dezembro de 2009">Não consegue adicionar outra conta Google no Motorola Milestone?</a></li>
<li><a href="http://seiti.eti.br/blog/2008/migrando-para-o-google-apps-gmail" rel="bookmark" title="25 de junho de 2008">Migrando para o Google Apps Gmail</a></li>
</ul>
<p><!-- Similar Posts took 5.519 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/google-tasks-desktop/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ext JS</title>
		<link>http://seiti.eti.br/blog/2009/ext-js</link>
		<comments>http://seiti.eti.br/blog/2009/ext-js#comments</comments>
		<pubDate>Tue, 12 May 2009 04:29:17 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=554</guid>
		<description><![CDATA[O Ext (http://extjs.com) trata-se de um framework JavaScript para criar objetos de interface com o usuário, ou UI gadgets, como grids, trees, layouts em tabs e muito mais. O legal é que os elementos criados com o ExtJS não ficam &#8230; <a href="http://seiti.eti.br/blog/2009/ext-js">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O <strong>Ext</strong> (<a class="ext" href="http://extjs.com/">http://extjs.com</a>) trata-se de um framework <a href="../../wiki/JavaScript">JavaScript</a> para criar objetos de interface com o usuário, ou <em>UI gadgets</em>, como <em>grids</em>, <em>trees</em>, layouts em <em>tabs</em> e muito mais.</p>
<p>O legal é que os elementos criados com o <a href="../../wiki/ExtJS">ExtJS</a> não ficam devendo nada às aplicações web que estamos acostumados a ver nos serviços do <em>Google</em>, <em>Yahoo</em> e <em>Microsoft</em>, sejam na funcionalidade, seja no visual.</p>
<p>Sua licença é dual: <strong>LGPL</strong> <em>ou</em> comercial, com preços iniciando em <strong>USD</strong> $289. Infelizmente nem todos os desenvolvedores precisam/querem/suportam <a href="../../wiki/JavaScript">JavaScript</a>.  Se for o caso recomendo ficar longe do <a href="../../wiki/ExtJS">ExtJS</a>.<br />
Mas caso queira se aventurar no mundo <a href="../../wiki/ExtJS">ExtJS</a>, nada melhor que baixar o dito cujo e dar uma olhada nos <em>samples</em>. Quem sabe não coloco um tutorial bem simples por aqui também&#8230;</p>
<h3>Padrões de projeto</h3>
<p>Para entender o funcionamento da <strong>API</strong> do <em>Ext</em> é muito importante ter conhecimento sobre os chamados <strong>padrões de projeto</strong>, ou <em>design patterns</em>. As referências nesta área são o livro do <em>Gang of Four</em> (<a class="ext" href="http://en.wikipedia.org/wiki/Design_Patterns">WikiPedia:Design_Patterns</a>) e o site <a class="ext" href="http://c2.com/cgi/wiki?WelcomeVisitors">C2</a>. Este último também é conhecido por ser o primeiro <em>wiki</em> do <strong>mundo</strong>.</p>
<p>O básico para você não se perder é entender que existem componentes Ext de <em>apresentação</em> e outros que fornecem <em>dados</em>. Os de apresentação são apresentados (não diga!) no navegador, requisitando dados aos componentes que fornecem dados (interessante&#8230;).</p>
<p>Um exemplo disto é um combobox, que podemos separar em algumas partes:</p>
<ul>
<li> um elemento <strong>DOM</strong> que servirá de contêiner para o combobox, um &lt;div&gt;, por exemplo;</li>
<li> o componente <strong>Ext.form.ComboBox</strong>;</li>
<li> um componente para os dados a serem apresentados pelo combobox.</li>
</ul>
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2008/campo-datefield-em-um-formulario-extjs" rel="bookmark" title="24 de julho de 2008">Campo DateField em um formulário ExtJS</a></li>
<li><a href="http://seiti.eti.br/blog/2008/gmail-tasks-e-google-maps" rel="bookmark" title="9 de dezembro de 2008">Gmail, Tasks e Google Maps</a></li>
<li><a href="http://seiti.eti.br/blog/2009/arcgis-javascript-dojo-e-o-metodo-require" rel="bookmark" title="16 de setembro de 2009">ArcGIS Javascript, Dojo e o método require</a></li>
<li><a href="http://seiti.eti.br/blog/2009/type-casting-no-javascript" rel="bookmark" title="11 de maio de 2009">Type &#8220;casting&#8221; no Javascript</a></li>
</ul>
<p><!-- Similar Posts took 26.435 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/ext-js/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Type &#8220;casting&#8221; no Javascript</title>
		<link>http://seiti.eti.br/blog/2009/type-casting-no-javascript</link>
		<comments>http://seiti.eti.br/blog/2009/type-casting-no-javascript#comments</comments>
		<pubDate>Mon, 11 May 2009 04:26:37 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=552</guid>
		<description><![CDATA[O Javascript possui uma característica que pode incomodar quem está acostumado à linguagens como C, Java, C++: ele é fracamente dinamicamente tipificado. Mas a possibilidade de modificar qual o tipo de uma variável é  útil.  Esta modificação de tipo é &#8230; <a href="http://seiti.eti.br/blog/2009/type-casting-no-javascript">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O Javascript possui uma característica que pode incomodar quem está acostumado à linguagens como C, Java, C++: ele é <em><span style="text-decoration: line-through;">fracamente</span> dinamicamente tipificado</em>.<br />
Mas a possibilidade de modificar qual o tipo de uma variável é  útil.  Esta modificação de tipo é o <em>casting</em>.</p>
<p>Podemos efetuar um <em>casting</em> de um <tt>float</tt> para <tt>int</tt> através da função <tt>parseInt</tt>:</p>
<pre class="prettyprint">
b = 3;
c = 2;
a_int   = parseInt(b/c); //a_int contém 1
a_float = b/c; //a_float contém 1.5
</pre>
<p>E o contrário também, através do <tt>parseFloat</tt>.</p>
<p>Note que essas funções, na verdade, efetuam o <em>parse</em> do parâmetro de entrada, que pode ser uma string, devolvendo o valor final no tipo identificado por seu nome.</p>
<p>Mais info: <a class="ext" href="http://www.w3schools.com/jsref/jsref_parseInt.asp">W3Schools:parseInt()</a>, <a class="ext" href="http://www.w3schools.com/jsref/jsref_parseFloat.asp">W3Schools:parseFloat()</a>
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2009/ext-js" rel="bookmark" title="12 de maio de 2009">Ext JS</a></li>
<li><a href="http://seiti.eti.br/blog/2010/carregando-bibliotecas-javascript-abertas" rel="bookmark" title="5 de fevereiro de 2010">Carregando bibliotecas Javascript abertas</a></li>
<li><a href="http://seiti.eti.br/blog/2009/arcgis-javascript-dojo-e-o-metodo-require" rel="bookmark" title="16 de setembro de 2009">ArcGIS Javascript, Dojo e o método require</a></li>
<li><a href="http://seiti.eti.br/blog/2008/campo-datefield-em-um-formulario-extjs" rel="bookmark" title="24 de julho de 2008">Campo DateField em um formulário ExtJS</a></li>
</ul>
<p><!-- Similar Posts took 4.728 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/type-casting-no-javascript/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quirks mode &#8211; que diabo é isto?</title>
		<link>http://seiti.eti.br/blog/2009/quirks-mode-que-diabo-e-isto</link>
		<comments>http://seiti.eti.br/blog/2009/quirks-mode-que-diabo-e-isto#comments</comments>
		<pubDate>Sun, 10 May 2009 04:14:01 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=542</guid>
		<description><![CDATA[Quirks mode (Wikipedia:Quirks_mode) é um modo de compatibilidade existente nos browsers, para que renderizem corretamente página antigas, escritas em uma época em que o CSS e o modelo de separação entre conteúdo e apresentação não estava disseminado. Ou seja, páginas &#8230; <a href="http://seiti.eti.br/blog/2009/quirks-mode-que-diabo-e-isto">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Quirks mode</em> (<a class="ext" href="http://en.wikipedia.org/wiki/Quirks_mode">Wikipedia:Quirks_mode</a>) é um modo de compatibilidade existente nos browsers, para que renderizem corretamente página antigas, escritas em uma época em que o CSS e o modelo de separação entre conteúdo e apresentação não estava disseminado.</p>
<p>Ou seja, páginas que foram escritas tendo em vista seu funcionamento em navegadores da época (Internet Explorer 4.x, Netscape Navigator 4.x), mas não seguiam os padrões ditados pela W3C, precisam rodar no quirks mode nos browsers modernos, a fim de manterem as mesmas características de antes.</p>
<p>Como abrir uma página em quirks mode?<br />
Simples. Basta <strong>deixar</strong> de colocar a tag indicando o  <tt>DOCTYPE</tt> logo no início do código da página. Como esta, retirada desta mesma página:<br />
<!--start GeSHi--></p>
<div class="code" style="font-family: monospace;"><span class="sc0">&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&gt;</span><br />
<span class="sc2"><a href="http://december.com/html/4/element/html.html"><span class="kw2">&lt;html&gt;</span></a></span><br />
&#8230;</div>
<p><!--end GeSHi--><br />
E para que a página funcione em <em>standard mode</em> é só <strong>incluir</strong> o <tt>doctype</tt> acima.<br />
Inclua sempre e use o standard mode. Evita <strong>MUITAS</strong> dores de cabeça.</p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/quirks-mode-que-diabo-e-isto/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compilando seu Web Application Project com o MSBuild</title>
		<link>http://seiti.eti.br/blog/2009/compilando-seu-web-application-project-com-o-msbuild</link>
		<comments>http://seiti.eti.br/blog/2009/compilando-seu-web-application-project-com-o-msbuild#comments</comments>
		<pubDate>Wed, 06 May 2009 21:44:03 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[compilação]]></category>
		<category><![CDATA[projeto]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=474</guid>
		<description><![CDATA[Programar em um IDE como o Visual Studio te dá muitas facilidades. O processo de compilação fica quase imperceptível para o desenvolvedor. O problema surge no momento em que você quer algo diferente, como compilar versões distintas do código a &#8230; <a href="http://seiti.eti.br/blog/2009/compilando-seu-web-application-project-com-o-msbuild">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Programar em um IDE como o Visual Studio te dá muitas facilidades. O processo de compilação fica quase imperceptível para o desenvolvedor.</p>
<p>O problema surge no momento em que você quer algo diferente, como compilar versões distintas do código a partir do mesmo fonte, automatizar o <em>build</em> no servidor etc .</p>
<p>Para os que já usam <strong>Makefile</strong> ou o <strong>Ant</strong>, isto é trivial. Mas isto também é simples para os que usam o Visual Studio!</p>
<p>Vamos ver como construir um simples arquivo para o <strong>MSBuild </strong>compilar nosso projeto.</p>
<p>Primeiro é necessário que você possua o MSBuild instalado. Não se preocupe,  o Visual Studio 2008 já o instala .</p>
<p>E onde está o diabo do <strong>msbuild.exe</strong>? Aqui:</p>
<pre>%windir%\Microsoft.NET\Framework\</pre>
<p>Ou melhor,  execute (com as aspas!) o seguinte comando em um terminal:</p>
<pre>"%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat"</pre>
<p>Teste digitando <strong>msbuild.exe /help</strong></p>
<p>Precisamos agora construir um <span style="text-decoration: line-through;">makefile</span> arquivo de instruções para o MSBuild, que chamarei de Makefile.proj:</p>
<pre class="code">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;Project DefaultTargets="Build"
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
  ToolsVersion="3.5"&gt;
  &lt;!-- aqui eu importo um projeto que já existe, contendo todos os
      arquivos e assemblies que fazem parte do processo de compilação--&gt;
  &lt;Import Project="MeuProjeto.csproj"/&gt;
  &lt;!-- aqui eu defino algumas variáveis úteis --&gt;
  &lt;PropertyGroup&gt;
      &lt;VersionNumber&gt;1.0.0&lt;/VersionNumber&gt;
      &lt;BuildRoot&gt;Deploy\Releases\$(VersionNumber)\&lt;/BuildRoot&gt;
      &lt;NewInstallDir&gt;$(BuildRoot)Install\&lt;/NewInstallDir&gt;
      &lt;UpgradeDir&gt;$(BuildRoot)Upgrade\&lt;/UpgradeDir&gt;
      &lt;CopyRoot&gt;..\EruditoHAOC_PROD_test\&lt;/CopyRoot&gt;
  &lt;/PropertyGroup&gt;
  &lt;ItemGroup&gt;
      &lt;SourceFiles Include="**\*.*" /&gt;
  &lt;/ItemGroup&gt;
  &lt;!-- Aqui entram as instruções para a compilação e cópia
      doas arquivos gerados para a pasta de deploy --&gt;
  &lt;Target Name="Build"&gt;
    &lt;MSBuild
        Projects="MeuProjeto.sln"
        Properties="OutputPath=$(NewInstallDir)bin\" /&gt;
    &lt;Copy
        SourceFiles="@(Content-&gt;'%(RelativeDir)%(FileName)%(Extension)')"
        DestinationFiles=
          "@(Content-&gt;'$(NewInstallDir)%(RelativeDir)%(FileName)%(Extension)')" /&gt;
    &lt;Copy
        SourceFiles="@(None-&gt;'%(RelativeDir)%(FileName)%(Extension)')"
        DestinationFiles=
          "@(None-&gt;'$(NewInstallDir)%(RelativeDir)%(FileName)%(Extension)')" /&gt;
    &lt;MakeDir
        Directories="@(Folder-&gt;'$(NewInstallDir)%(RelativeDir)')" /&gt;
    &lt;CreateItem
        Include="$(NewInstallDir)**"
        Exclude="**\App_Themes\**;**\Web.config"&gt;
        &lt;Output ItemName="UpgradeFiles" TaskParameter="Include" /&gt;
    &lt;/CreateItem&gt;
    &lt;Copy
        SourceFiles="@(UpgradeFiles)"
        DestinationFiles=
          "@(UpgradeFiles-&gt;'$(UpgradeDir)%(RecursiveDir)%(FileName)%(Extension)')" /&gt;
    &lt;MakeDir Directories="@(Folder-&gt;'$(UpgradeDir)%(RelativeDir)')" /&gt;
  &lt;/Target&gt;
  &lt;!-- Um exemplo de como copiar todo o projeto para outro lugar --&gt;
  &lt;Target Name="Deploy"&gt;
    &lt;Copy
      SourceFiles="@(SourceFiles)"
      DestinationFiles=
        "@(SourceFiles-&gt;'$(DeployRoot)%(RecursiveDir)%(FileName)%(Extension)')" /&gt;
  &lt;/Target&gt;
&lt;/Project&gt;</pre>
<p>Para compilar seu projeto agora basta rodar o comando <span style="text-decoration: line-through;">make</span> msbuild.exe, da seguinte forma:</p>
<pre class="code">MSBuild.exe Makefile.proj /target:Build</pre>
<p>Isto irá compilar e copiar o resultado da menira definida no xml Makefile.proj.</p>
<p>Referências:</p>
<ul>
<li><a href="http://www.writebetterbits.com/2008/02/deploying-aspnet-web-application.html">http://www.writebetterbits.com/2008/02/deploying-aspnet-web-application.html</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms164311.aspx">http://msdn.microsoft.com/en-us/library/ms164311.aspx</a></li>
</ul>
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2010/erro-no-deploy-automatico-hudson-versus-msbuild" rel="bookmark" title="11 de maio de 2010">Erro no deploy automático: Hudson versus MSBuild</a></li>
<li><a href="http://seiti.eti.br/blog/2009/httppostedfile-ie-versus-firefox" rel="bookmark" title="17 de maio de 2009">HttpPostedFile: IE versus Firefox</a></li>
<li><a href="http://seiti.eti.br/blog/2011/asp-net-web-forms-e-ninjas-parte-1" rel="bookmark" title="5 de setembro de 2011">Asp.Net, Web Forms e Ninjas &#8211; Parte 1</a></li>
<li><a href="http://seiti.eti.br/blog/2009/net-assembly-versioning" rel="bookmark" title="17 de junho de 2009">.Net Assembly versioning</a></li>
</ul>
<p><!-- Similar Posts took 6.395 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/compilando-seu-web-application-project-com-o-msbuild/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seu domínio no localhost</title>
		<link>http://seiti.eti.br/blog/2009/seu-dominio-no-localhost</link>
		<comments>http://seiti.eti.br/blog/2009/seu-dominio-no-localhost#comments</comments>
		<pubDate>Wed, 29 Apr 2009 00:21:59 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=304</guid>
		<description><![CDATA[Da série como não pensei nisto antes? Dica útil para quem desenvolve sistemas web e quer testar o tal sistema em condições mais próximas possíveis do ambiente de produção. Da série como não pensei nisto antes? Quem desenvolve sites e &#8230; <a href="http://seiti.eti.br/blog/2009/seu-dominio-no-localhost">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Da série <em>como não pensei nisto antes</em>?</p>
<p>Dica útil para quem desenvolve sistemas web e quer testar o tal sistema em condições mais próximas possíveis do ambiente de produção.</p>
<p>Da série <em>como não pensei nisto antes</em>?</p>
<p>Quem desenvolve sites e sistemas web precisa testar seu produto em sua própria máquina (é claro que você não desenvolve direto no servidor de produção, estou certo?). Para isto é bem útil e prático configurar um <strong>servidor Apache</strong> para rodar em seu computador, principalmente se você estiver programando em alguma <a href="../../wiki/EclipsePDT">linguagem server sided</a>.</p>
<p>O mais legal é que é possível criar uma <strong>URL</strong> <em>fictícia</em> para testar seu site. Esta dica me foi dada pelo <a class="ext" href="http://zaip.net/">Alex</a>.</p>
<p>Se você ainda não fez, instale o pacote <tt>apache2</tt> a partir dos repositórios do <a href="../../wiki/UbuntuLaptop">Ubuntu</a>.</p>
<p>Vamos então editar o arquivo <tt>hosts</tt>:</p>
<div class="code">
<pre>sudo gedit /etc/hosts</pre>
</div>
<p>Com o seguinte conteúdo:</p>
<div class="code">
<pre>127.0.0.1 localhost
127.0.0.1 www.meudominio.xyz</pre>
</div>
<p>Note que apenas adicionei a linha <strong>127.0.0.1 www.meudominio.xyz</strong><br />
Vamos então criar o arquivo de configuração <em>copiando</em> o <strong>default</strong>:</p>
<div class="code">
<pre>cd /etc/apache2/sites-available/
sudo cp default www.meudominio.xyz</pre>
</div>
<p>Depois edite o arquivo <tt>/etc/apache2/sites-available/www.dominio.xyz</tt> com o segunte conteúdo:</p>
<div class="code">
<pre>NameVirtualHost www.meudominio.xyz
&lt;VirtualHost www.meudominio.xyz&gt;
	ServerAdmin webmaster@localhost

	DocumentRoot /home/username/sites
	&lt;Directory /&gt;
		Options FollowSymLinks
		AllowOverride None
	&lt;/Directory&gt;
	&lt;Directory /home/username/sites/&gt;
	...
	...</pre>
</div>
<p>Trocando <em>/home/username/sites</em> pela pasta em que reside seu site. Note que o arquivo não está completo, coloquei apenas uma parte dele.</p>
<p>Depois <strong>habilite</strong> o site e <em>recarregue</em> o Apache:</p>
<div class="code">
<pre>sudo a2ensite www.meudominio.xyz
sudo  /etc/init.d/apache2 reload</pre>
</div>
<p><strong>Pronto</strong>! Teste entrando no site recém configurado: <a class="ext" href="http://www.meudominio.xyz/">www.meudominio.xyz</a>
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2008/um-open-id-para-todos-governar" rel="bookmark" title="14 de outubro de 2008">Um Open ID para todos governar</a></li>
<li><a href="http://seiti.eti.br/blog/2008/subversion-no-qnap-ts-109" rel="bookmark" title="6 de novembro de 2008">Subversion no Qnap TS-109</a></li>
<li><a href="http://seiti.eti.br/blog/2011/asp-net-web-forms-e-ninjas-parte-1" rel="bookmark" title="5 de setembro de 2011">Asp.Net, Web Forms e Ninjas &#8211; Parte 1</a></li>
<li><a href="http://seiti.eti.br/blog/2008/campo-datefield-em-um-formulario-extjs" rel="bookmark" title="24 de julho de 2008">Campo DateField em um formulário ExtJS</a></li>
</ul>
<p><!-- Similar Posts took 5.732 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/seu-dominio-no-localhost/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Google Docs no S60</title>
		<link>http://seiti.eti.br/blog/2009/google-docs-no-s60</link>
		<comments>http://seiti.eti.br/blog/2009/google-docs-no-s60#comments</comments>
		<pubDate>Tue, 17 Feb 2009 01:08:19 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[cacarecos]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[n95]]></category>
		<category><![CDATA[s60]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=318</guid>
		<description><![CDATA[Que Android que nada. Agora é possível editar planilhas de cálculo no Google Docs mobile! Disponível para IPhone, Windows Mobile e, o mais importante, S60! (o que quer dizer smartphones Nokia, como o N95 =) Posts relacionados Migrando para o &#8230; <a href="http://seiti.eti.br/blog/2009/google-docs-no-s60">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Que Android que nada. Agora é possível editar planilhas de cálculo no Google Docs mobile!</p>
<p><a href="http://googledocs.blogspot.com/2009/02/add-edit-sort-and-filter-improved.html"><img class="alignnone" title="Google Docs Mobile" src="http://4.bp.blogspot.com/_RAq5KuHSLq0/SZTllq4_WTI/AAAAAAAAAMQ/uq2Czgh9CXI/s400/4four.png" alt="" width="400" height="226" /></a></p>
<p>Disponível para IPhone, Windows Mobile e, o mais importante, S60! (o que quer dizer smartphones Nokia, como o N95 =)
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2008/migrando-para-o-google-apps-gmail" rel="bookmark" title="25 de junho de 2008">Migrando para o Google Apps Gmail</a></li>
<li><a href="http://seiti.eti.br/blog/2008/gmail-tasks-e-google-maps" rel="bookmark" title="9 de dezembro de 2008">Gmail, Tasks e Google Maps</a></li>
<li><a href="http://seiti.eti.br/blog/2009/google-tasks-desktop" rel="bookmark" title="12 de maio de 2009">Google Tasks Desktop</a></li>
<li><a href="http://seiti.eti.br/blog/2009/sincronizando-a-agenda-do-google-e-a-do-google-apps" rel="bookmark" title="29 de dezembro de 2009">Sincronizando a agenda do Google e a do Google Apps</a></li>
</ul>
<p><!-- Similar Posts took 5.663 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/google-docs-no-s60/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fontpark 2.0</title>
		<link>http://seiti.eti.br/blog/2009/fontpark-20</link>
		<comments>http://seiti.eti.br/blog/2009/fontpark-20#comments</comments>
		<pubDate>Wed, 28 Jan 2009 02:52:05 +0000</pubDate>
		<dc:creator>seiti</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[arte]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[jogo]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://seiti.eti.br/blog/?p=306</guid>
		<description><![CDATA[Para quem não sabe, no fim do ano passado, 2008, ocorreu o Japan Media Arts Festival. Olhando a lista de vencedores, me interessei por esta entrada: FONTPARK 2.0, de Nakamura Yugo. Entrei no site premiado e me surpreendi. Se trata &#8230; <a href="http://seiti.eti.br/blog/2009/fontpark-20">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Para quem não sabe, no fim do ano passado, 2008, <a href="http://plaza.bunka.go.jp/english/festival/2008/winner.php">ocorreu o Japan Media Arts Festival</a>. Olhando a lista de vencedores, me interessei por esta entrada: <a href="http://plaza.bunka.go.jp/english/festival/2008/entertainment/001062/">FONTPARK 2.0</a>, de Nakamura Yugo.</p>
<p>Entrei no site premiado e me surpreendi. Se trata de <em>arte interativa</em> da mais alta qualidade. E o que é melhor, é <strong>divertido</strong>!</p>
<p>A idéia é você criar alguma coisa visual:  um desenho, um logo, uma animação,  uma paisagem. Mas para isto utilizando apenas <strong>letras</strong>. E tais letras, ou <em>caracteres</em> para os colegas, podem ser do nosso alfabeto (que agora conta com 26 letras! ha!) ou do japonês! Milhares de opções para você montar sua ilustração,  desenho, paisagem ou o diabo que for.</p>
<p>Deixo com vocês minha criação:<br />
<script type="text/javascript"><!--
__fpbp_id='s60ginhlg3qmugv';__fpbp_w=400;__fpbp_h=300;
// --></script><br />
<script src="http://fontpark.morisawa.co.jp/js/blogparts.js" type="text/javascript"></script></p>
<p>(Já notaram que não tenho dom artístico?)</p>
<p>Tente você também: <a href="http://fontpark.morisawa.co.jp/">http://fontpark.morisawa.co.jp/</a>
<p><strong>Posts relacionados</strong>
<ul class="similar-posts">
<li><a href="http://seiti.eti.br/blog/2008/custom-fields-no-gallery2" rel="bookmark" title="29 de maio de 2008">Custom Fields no Gallery2</a></li>
<li><a href="http://seiti.eti.br/blog/2009/multiplas-imagens-no-topo-do-seu-blog" rel="bookmark" title="2 de maio de 2009">Múltiplas imagens no topo do seu blog</a></li>
<li><a href="http://seiti.eti.br/blog/2009/programar-e-arte" rel="bookmark" title="17 de setembro de 2009">Programar é arte</a></li>
<li><a href="http://seiti.eti.br/blog/2011/asp-net-web-forms-e-ninjas-parte-1" rel="bookmark" title="5 de setembro de 2011">Asp.Net, Web Forms e Ninjas &#8211; Parte 1</a></li>
</ul>
<p><!-- Similar Posts took 5.143 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://seiti.eti.br/blog/2009/fontpark-20/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

