<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Blog do Bragil</title>
    <description>Tecnologia, programação e outras nerdices...</description>
    <link>http://bragil.net/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://bragil.net/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>My name</dc:creator>
    <dc:title>Blog do Bragil</dc:title>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/dotnetnapratica" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>[PostgreSQL] Paginação fácil fácil no PostgreSQL</title>
      <description>&lt;p&gt;
Trabalhar com pagina&amp;ccedil;&amp;atilde;o de dados no PostgreSQL &amp;eacute; muito f&amp;aacute;cil. As cl&amp;aacute;usulas usadas para pagina&amp;ccedil;&amp;atilde;o s&amp;atilde;o LIMIT e OFFSET. A f&amp;oacute;rmula b&amp;aacute;sica seria o seguinte:
&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; tabela 
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;LIMIT&lt;/span&gt; &amp;lt;n&amp;uacute;mero de itens por p&amp;aacute;gina&amp;gt; 
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;OFFSET&lt;/span&gt;(&amp;lt;p&amp;aacute;gina&amp;gt; - 1) * &amp;lt;n&amp;uacute;mero de itens por p&amp;aacute;gina&amp;gt;
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Agora, os exemplos&amp;hellip; Para trazer os 20 registros da p&amp;aacute;gina 2:
&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; tabela 
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;LIMIT&lt;/span&gt; 20
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;OFFSET&lt;/span&gt; (2 - 1) * 20
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
Muito f&amp;aacute;cil! :)
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/Jr2eYCX_fkk/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/PostgreSQL-Paginacao-facil-facil-no-PostgreSQL.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=78bb7365-685d-46d3-ba52-651977b1b81e</guid>
      <pubDate>Fri, 02 Oct 2009 07:15:00 -0200</pubDate>
      <category>PostgreSQL</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=78bb7365-685d-46d3-ba52-651977b1b81e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=78bb7365-685d-46d3-ba52-651977b1b81e</trackback:ping>
      <wfw:comment>http://bragil.net/post/PostgreSQL-Paginacao-facil-facil-no-PostgreSQL.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=78bb7365-685d-46d3-ba52-651977b1b81e</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=78bb7365-685d-46d3-ba52-651977b1b81e</feedburner:origLink></item>
    <item>
      <title>[PostgreSQL] Usando ORDER BY em cláusulas UNION</title>
      <description>&lt;p&gt;
Uma dica r&amp;aacute;pida, mas que pode poupar um bom tempinho. Usar ORDER BY em queries que usam a cl&amp;aacute;usula UNION &amp;eacute; bem mais simples do que parece. Suponhamos que temos duas tabelas, &lt;strong&gt;tb_cidades&lt;/strong&gt; e &lt;strong&gt;tb_paises&lt;/strong&gt;, e queremos trazer em uma &amp;uacute;nica query o id e o nome tanto de &lt;strong&gt;tb_cidades&lt;/strong&gt; quanto de &lt;strong&gt;tb_paises&lt;/strong&gt;. Para isso combinamos duas queries SELECT usando a cl&amp;aacute;usula UNION:
&lt;/p&gt;
&lt;pre&gt;
SELECT c.cidade_id, c.nome FROM tb_cidades c
UNION
SELECT p.pais_id, p.nome FROM tb_paises p
&lt;/pre&gt;
&lt;p&gt;
Teremos assim, em uma &amp;uacute;nica query, tanto cidades quanto pa&amp;iacute;ses. Mas, e a ordena&amp;ccedil;&amp;atilde;o?? &amp;Eacute; a&amp;iacute; que muita gente se atrapalha, mas a solu&amp;ccedil;&amp;atilde;o &amp;eacute; bem simples:
&lt;/p&gt;
&lt;p&gt;
1) Atribua um alias em comum para as colunas que ser&amp;atilde;o ordenadas. Se for a coluna de ID, coloque o mesmo alias tanto para cidades quanto para pa&amp;iacute;ses.
&lt;/p&gt;
&lt;p&gt;
2) Utilize este alias no ORDER BY.
&lt;/p&gt;
&lt;p&gt;
Ent&amp;atilde;o vamos alterar a query acima para ordenar pela coluna nome de tb_cidades e tb_paises:
&lt;/p&gt;
&lt;pre&gt;
SELECT c.cidade_id, c.nome AS coluna_nome FROM tb_cidades c
UNION
SELECT p.pais_id, p.nome AS coluna_nome FROM tb_paises p
ORDER BY coluna_nome
&lt;/pre&gt;
&lt;p&gt;
Simples assim. &lt;img src="/admin/tiny_mce/plugins/emotions/images/smiley-wink.gif" border="0" alt="Wink" title="Wink" /&gt; 
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/YR3A5RxM9H0/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/PostgreSQL-Usando-ORDER-BY-em-clausulas-UNION.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=4af050b1-be4c-4f79-93b0-746bed4fd7c9</guid>
      <pubDate>Tue, 15 Sep 2009 08:59:00 -0200</pubDate>
      <category>PostgreSQL</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=4af050b1-be4c-4f79-93b0-746bed4fd7c9</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=4af050b1-be4c-4f79-93b0-746bed4fd7c9</trackback:ping>
      <wfw:comment>http://bragil.net/post/PostgreSQL-Usando-ORDER-BY-em-clausulas-UNION.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=4af050b1-be4c-4f79-93b0-746bed4fd7c9</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=4af050b1-be4c-4f79-93b0-746bed4fd7c9</feedburner:origLink></item>
    <item>
      <title>Trabalhando com arquivos .INI em .Net com Nini</title>
      <description>&lt;p&gt;
Os arquivos de configura&amp;ccedil;&amp;atilde;o .INI h&amp;aacute; um bom tempo foram substitu&amp;iacute;dos no .Net pelos arquivos XML, muito mais flex&amp;iacute;veis e padronizados. Entretanto, quando trabalhamos com sistemas legados, seja para fazer integra&amp;ccedil;&amp;otilde;es, migra&amp;ccedil;&amp;otilde;es ou o que quer que seja, acabamos nos deparando com os saudosos arquivos .INI. Ao inv&amp;eacute;s de criar rotinas caseiras para trabalhar com estes arquivos, que tal uma biblioteca em C# que cumpra esse papel com louvor? A biblioteca &lt;a href="http://sourceforge.net/projects/nini/" target="_blank" title="Nini"&gt;Nini&lt;/a&gt; faz isto e muito mais: al&amp;eacute;m dos arquivos .INI, ela abstrai o acesso a arquivos de configura&amp;ccedil;&amp;atilde;o XML, .Net Config, Registry e argumentos de linha de comando. O &lt;a href="http://nini.sourceforge.net/" target="_blank" title="Nini"&gt;site do projeto&lt;/a&gt; n&amp;atilde;o possui nada, apenas os links para poder baixar, mas a documenta&amp;ccedil;&amp;atilde;o vem junto com o arquivo baixado.
&lt;/p&gt;
&lt;p&gt;
Segue um exemplo do pr&amp;oacute;prio manual da &lt;a href="http://sourceforge.net/projects/nini/"&gt;Nini&lt;/a&gt;:
&lt;/p&gt;
&lt;pre&gt;
&lt;font color="#800000"&gt;; MyApp.ini
&lt;strong&gt;[Logging]&lt;/strong&gt;
File Name = MyApp.log
MessageColumns = 5
MaxFileSize = 40000000000000&lt;/font&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;font color="#800000"&gt;&lt;/font&gt;
&lt;/pre&gt;
&lt;div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// Usando C#&lt;/span&gt;
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Nini.Config;
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; IConfigSource source = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; IniConfigSource(&lt;span style="color: #006080"&gt;&amp;quot;MyApp.ini&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fileName = source.Configs[&lt;span style="color: #006080"&gt;&amp;quot;Logging&amp;quot;&lt;/span&gt;].Get(&lt;span style="color: #006080"&gt;&amp;quot;File Name&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; columns = source.Configs[&lt;span style="color: #006080"&gt;&amp;quot;Logging&amp;quot;&lt;/span&gt;].GetInt(&lt;span style="color: #006080"&gt;&amp;quot;MessageColumns&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; fileSize = source.Configs[&lt;span style="color: #006080"&gt;&amp;quot;Logging&amp;quot;&lt;/span&gt;].GetLong(&lt;span style="color: #006080"&gt;&amp;quot;MaxFileSize&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="codeSnippetWrapper" style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;div id="codeSnippet" style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;#39;E usando VB.Net&lt;/span&gt;
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; Nini.Config
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; source &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; IniConfigSource(&lt;span style="color: #006080"&gt;&amp;quot;MyApp.ini&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;&amp;nbsp; 
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; fileName &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; = source.Configs(&lt;span style="color: #006080"&gt;&amp;quot;Logging&amp;quot;&lt;/span&gt;).&lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;(&lt;span style="color: #006080"&gt;&amp;quot;File Name&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: white; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; columns &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Integer&lt;/span&gt; = source.Configs(&lt;span style="color: #006080"&gt;&amp;quot;Logging&amp;quot;&lt;/span&gt;).GetInt(&lt;span style="color: #006080"&gt;&amp;quot;MessageColumns&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; direction: ltr; line-height: 12pt; font-family: 'Courier New',courier,monospace; background-color: #f4f4f4; text-align: left"&gt;
&lt;span style="color: #606060"&gt;   8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; fileSize &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Long&lt;/span&gt; = source.Configs(&lt;span style="color: #006080"&gt;&amp;quot;Logging&amp;quot;&lt;/span&gt;).GetLong(&lt;span style="color: #006080"&gt;&amp;quot;MaxFileSize&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/LOaXhAcuzEA/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/Trabalhando-com-arquivos-INI-em-Net-com-Nini.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=00bcb6c4-922d-40a6-b0d0-010a5117a800</guid>
      <pubDate>Wed, 19 Aug 2009 05:11:00 -0200</pubDate>
      <category>.Net</category>
      <category>C#</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=00bcb6c4-922d-40a6-b0d0-010a5117a800</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=00bcb6c4-922d-40a6-b0d0-010a5117a800</trackback:ping>
      <wfw:comment>http://bragil.net/post/Trabalhando-com-arquivos-INI-em-Net-com-Nini.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=00bcb6c4-922d-40a6-b0d0-010a5117a800</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=00bcb6c4-922d-40a6-b0d0-010a5117a800</feedburner:origLink></item>
    <item>
      <title>Álcool ou Gasolina? - Aplicativo para Windows Mobile 6 para tirar sua dúvida</title>
      <description>&lt;p&gt;
Neste post vou apresentar um aplicativo para &lt;strong&gt;Windows Mobile 6&lt;/strong&gt; que recebe como entrada o valor do litro do &amp;aacute;lcool, da gasolina e exibe uma mensagem dizendo qual dos dois &amp;eacute; mais vantajoso abastecer, bastante &amp;uacute;til quando o seu ve&amp;iacute;culo &amp;eacute; flex. Fa&amp;ccedil;a o download do c&amp;oacute;digo fonte do projeto: &lt;a rel="enclosure" href="http://bragil.net/file.axd?file=AlcoolGasolina.zip"&gt;AlcoolGasolina.zip (56,97 kb)&lt;/a&gt;. Caso voc&amp;ecirc; queira apenas o .cab do aplicativo para instalar em seu smartphone, ele est&amp;aacute; na pasta AlcoolGasolinaSetup/Release.
&lt;/p&gt;
&lt;p&gt;
Requisitos:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en" target="_blank" title="Windows Mobile 6 Professional SDK Refresh"&gt;Windows Mobile 6 Professional SDK Refresh&lt;/a&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en" target="_blank" title="Windows Mobile 6 Professional SDK Refresh"&gt; &lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Visual Studio 2005 com C#
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
O c&amp;oacute;digo &amp;eacute; bem simples, o valor do litro do &amp;aacute;lcool &amp;eacute; dividido pelo valor do litro da gasolina, se o resultado for maior ou igual a 0,7 compensa abastecer com gasolina, caso contr&amp;aacute;rio, abaste&amp;ccedil;a com &amp;aacute;lcool.
&lt;/p&gt;
&lt;p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; AlcoolGasolina
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   6:  &lt;/span&gt;{
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; frmPrincipal : Form
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; frmPrincipal()
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            InitializeComponent();
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="rem"&gt;/// M&amp;eacute;todo de valida&amp;ccedil;&amp;atilde;o da entrada. Considera inv&amp;aacute;lidos strings vazias e &lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="rem"&gt;/// valores menores ou iguais a zero.&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;valor&amp;quot;&amp;gt;O valor de entrada, formato string&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;True para v&amp;aacute;lido, False para inv&amp;aacute;lido.&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; isValid(&lt;span class="kwrd"&gt;string&lt;/span&gt; valor)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            &lt;span class="rem"&gt;// N&amp;atilde;o deve ser uma string vazia ou nula&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(valor))
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                &lt;span class="rem"&gt;// deve ser um valor num&amp;eacute;rico v&amp;aacute;lido&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                &lt;span class="kwrd"&gt;double&lt;/span&gt; num = Convert.ToDouble(valor);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="rem"&gt;// n&amp;atilde;o deve ser menor ou igual a zero&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (num &amp;gt; 0)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                &lt;span class="kwrd"&gt;else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  37:  &lt;/span&gt;            {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  39:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  41:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  43:  &lt;/span&gt;        &lt;span class="rem"&gt;/// Verifica se os valores digitados s&amp;atilde;o v&amp;aacute;lidos e, em caso positivo, &lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  44:  &lt;/span&gt;        &lt;span class="rem"&gt;/// faz o c&amp;aacute;lculo e apresenta a mensagem para o usu&amp;aacute;rio informando&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        &lt;span class="rem"&gt;/// qual &amp;eacute; mais vi&amp;aacute;vel abastecer, &amp;aacute;lcool ou gasolina. Se os valores &lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        &lt;span class="rem"&gt;/// n&amp;atilde;o forem v&amp;aacute;lidos para o c&amp;aacute;lculo, ser&amp;aacute; exibida uma mensagem de &lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  47:  &lt;/span&gt;        &lt;span class="rem"&gt;/// alerta, informando que os valores de entrada s&amp;atilde;o inv&amp;aacute;lidos.&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  48:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  49:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnCalcular_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  52:  &lt;/span&gt;        {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  53:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (isValid(txtAlcool.Text.Trim()) &amp;amp;&amp;amp; isValid(txtGasolina.Text.Trim()))
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  54:  &lt;/span&gt;            {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                &lt;span class="kwrd"&gt;double&lt;/span&gt; alcool = Convert.ToDouble(txtAlcool.Text.Trim());
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  56:  &lt;/span&gt;                &lt;span class="kwrd"&gt;double&lt;/span&gt; gasolina = Convert.ToDouble(txtGasolina.Text.Trim());
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  57:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  58:  &lt;/span&gt;                &lt;span class="kwrd"&gt;double&lt;/span&gt; resultado = alcool / gasolina;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (resultado &amp;gt;= 0.7)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  60:  &lt;/span&gt;                    lblResultado.Text = &lt;span class="str"&gt;&amp;quot;Abaste&amp;ccedil;a com Gasolina&amp;quot;&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                &lt;span class="kwrd"&gt;else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  62:  &lt;/span&gt;                    lblResultado.Text = &lt;span class="str"&gt;&amp;quot;Abaste&amp;ccedil;a com &amp;Aacute;lcool&amp;quot;&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  63:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  64:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  65:  &lt;/span&gt;            {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  66:  &lt;/span&gt;                MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Valores de entrada inv&amp;aacute;lidos.&amp;quot;&lt;/span&gt;, 
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  67:  &lt;/span&gt;                                &lt;span class="str"&gt;&amp;quot;Erro&amp;quot;&lt;/span&gt;, 
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  68:  &lt;/span&gt;                                MessageBoxButtons.OK, 
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  69:  &lt;/span&gt;                                MessageBoxIcon.Exclamation, 
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  70:  &lt;/span&gt;                                MessageBoxDefaultButton.Button1);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  71:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  72:  &lt;/span&gt;            txtAlcool.Text = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  73:  &lt;/span&gt;            txtGasolina.Text = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  74:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  75:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  76:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  77:  &lt;/span&gt;        &lt;span class="rem"&gt;/// Fecha a aplica&amp;ccedil;&amp;atilde;o.&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  78:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  79:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; mnuSair_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  80:  &lt;/span&gt;        {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  81:  &lt;/span&gt;            Application.Exit();
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  82:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  83:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  84:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  85:  &lt;/span&gt;        &lt;span class="rem"&gt;/// Menu &amp;quot;Sobre...&amp;quot;, exibe uma mensagem com o nome da aplica&amp;ccedil;&amp;atilde;o, &lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  86:  &lt;/span&gt;        &lt;span class="rem"&gt;/// nome do autor e endere&amp;ccedil;o do blog do autor.&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  87:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  88:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; mnuSobre_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  89:  &lt;/span&gt;        {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  90:  &lt;/span&gt;            StringBuilder mensagem = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(&lt;span class="str"&gt;&amp;quot;&amp;Aacute;lcool ou Gasolina\n\n&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  91:  &lt;/span&gt;            mensagem.Append(&lt;span class="str"&gt;&amp;quot;Por Rog&amp;eacute;rio Bragil\n\nBlog do Bragil - www.bragil.net&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  92:  &lt;/span&gt;            MessageBox.Show(mensagem.ToString(), 
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  93:  &lt;/span&gt;                            &lt;span class="str"&gt;&amp;quot;Sobre&amp;quot;&lt;/span&gt;, 
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  94:  &lt;/span&gt;                            MessageBoxButtons.OK, 
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  95:  &lt;/span&gt;                            MessageBoxIcon.None, 
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  96:  &lt;/span&gt;                            MessageBoxDefaultButton.Button1);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  97:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  98:  &lt;/span&gt;    }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  99:  &lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/o047F8S8MIg/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/Alcool-ou-Gasolina---Aplicativo-para-Windows-Mobile-6-para-tirar-sua-duvida.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=bbb80417-15bc-4e08-bf8a-4129626cd300</guid>
      <pubDate>Fri, 07 Aug 2009 07:28:00 -0200</pubDate>
      <category>.Net</category>
      <category>C#</category>
      <category>Windows Mobile</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=bbb80417-15bc-4e08-bf8a-4129626cd300</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=bbb80417-15bc-4e08-bf8a-4129626cd300</trackback:ping>
      <wfw:comment>http://bragil.net/post/Alcool-ou-Gasolina---Aplicativo-para-Windows-Mobile-6-para-tirar-sua-duvida.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=bbb80417-15bc-4e08-bf8a-4129626cd300</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=bbb80417-15bc-4e08-bf8a-4129626cd300</feedburner:origLink></item>
    <item>
      <title>Parsing de HTML em .Net com HTML Agility Pack</title>
      <description>&lt;p&gt;
Precisa fazer parsing de HTML em .Net? Experimente o &lt;a href="http://htmlagilitypack.codeplex.com" target="_blank" title="Html Agility Pack"&gt;HTML Agility Pack&lt;/a&gt;. Com ele voc&amp;ecirc; pode facilmente ler uma p&amp;aacute;gina HTML e acessar os seus elementos atrav&amp;eacute;s de express&amp;otilde;es XPath, ou ent&amp;atilde;o percorrer os n&amp;oacute;s da estrutura de &amp;aacute;rvore da p&amp;aacute;gina HTML. Vou mostrar aqui um exemplo pr&amp;aacute;tico, uma pequena aplica&amp;ccedil;&amp;atilde;o Windows Forms que, dada uma URL, retorna todos os elementos a (links) existentes na p&amp;aacute;gina. Voc&amp;ecirc; pode alterar o programa para poder extrair conte&amp;uacute;do de sites, efetuar buscas, etc. 
&lt;/p&gt;
&lt;p&gt;
Acesse o &lt;a href="http://htmlagilitypack.codeplex.com" target="_blank" title="Html Agility Pack"&gt;site do HTML Agility Pack&lt;/a&gt; e fa&amp;ccedil;a o download do c&amp;oacute;digo fonte. Descompacte, abra o projeto no Visual Studio (2005 ou superior) e compile o projeto HtmlAgilityPack, que dever&amp;aacute; gerar a dll com o mesmo nome na pasta bin do projeto. Com a dll criada, feche a solu&amp;ccedil;&amp;atilde;o atual (com o c&amp;oacute;digo do HTML Agility Pack) e crie um novo projeto &lt;strong&gt;Windows Application&lt;/strong&gt; usando a linguagem C#. Adicione a refer&amp;ecirc;ncia para a dll do HTML Agility Pack, criada anteriormente. Adicione os seguintes controles no form:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;TextBox&lt;/strong&gt;, ID &amp;quot;txtUrl&amp;quot;, onde ser&amp;aacute; digitada a URL.&lt;br /&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Button&lt;/strong&gt;, ID &amp;quot;btnBusca&amp;quot;, ao clicar esse bot&amp;atilde;o, vai buscar a URL e processar.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;ListBox&lt;/strong&gt;, ID &amp;quot;lsbResultado&amp;quot;, exibir os links encontrados na p&amp;aacute;gina.&lt;br /&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;Agora, vamos para o c&amp;oacute;digo:
&lt;/p&gt;
&lt;p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; HtmlAgilityPack;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; PegaLinks
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   6:  &lt;/span&gt;{
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Form1 : Form
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Form1()
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            InitializeComponent();
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnBusca_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt; 
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                HtmlWeb web = &lt;span class="kwrd"&gt;new&lt;/span&gt; HtmlWeb();
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                &lt;span class="rem"&gt;// O m&amp;eacute;todo Load da classe HtmlWeb busca a p&amp;aacute;gina HTML e faz o parsing, atribuindo a&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                &lt;span class="rem"&gt;// &amp;aacute;rvore do DOM (document object model) gerada ao objeto HtmlDocument&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                HtmlAgilityPack.HtmlDocument doc = web.Load(@txtUrl.Text.Trim());
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                &lt;span class="rem"&gt;// Aqui pegamos apenas o que interessa, os links (tags &amp;lt;a&amp;gt;), usando XPath&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes(&lt;span class="str"&gt;&amp;quot;/html/body//a&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (nodes != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                    &lt;span class="rem"&gt;// Percorremos a cole&amp;ccedil;&amp;atilde;o dos n&amp;oacute;s encontrados (elementos &amp;lt;a&amp;gt;) e pegamos apenas o &lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                    &lt;span class="rem"&gt;// atributo href e o inner text de cada n&amp;oacute;.&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (HtmlNode node &lt;span class="kwrd"&gt;in&lt;/span&gt; nodes)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                    {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                        HtmlAttribute att = node.Attributes[&lt;span class="str"&gt;&amp;quot;href&amp;quot;&lt;/span&gt;];
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                        &lt;span class="rem"&gt;// Colocamos cada elemento no ListBox&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                        lsbResultado.Items.Add(node.InnerText + &lt;span class="str"&gt;&amp;quot;  (&amp;quot;&lt;/span&gt; + att.Value + &lt;span class="str"&gt;&amp;quot;)&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                    }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                &lt;span class="kwrd"&gt;else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                    MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Nenhum link encontrado&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                MessageBox.Show(ex.Message);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            }   
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  46:  &lt;/span&gt;    }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  47:  &lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Com poucas linhas voc&amp;ecirc; tem o que precisa: a informa&amp;ccedil;&amp;atilde;o limpinha. Sem precisar mexer com complexas express&amp;otilde;es regulares ou parsing manual de strings... Tudo r&amp;aacute;pido e f&amp;aacute;cil! N&amp;atilde;o se esque&amp;ccedil;a de associar o evento Click do bot&amp;atilde;o com o m&amp;eacute;todo btnBusca_Click.
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/jdX9k2eb4lE/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/Parsing-de-HTML-em-Net-com-HTML-Agility-Pack.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=d058eed3-8372-43a5-9191-e06c5a9964fe</guid>
      <pubDate>Thu, 06 Aug 2009 10:12:00 -0200</pubDate>
      <category>C#</category>
      <category>.Net</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=d058eed3-8372-43a5-9191-e06c5a9964fe</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=d058eed3-8372-43a5-9191-e06c5a9964fe</trackback:ping>
      <wfw:comment>http://bragil.net/post/Parsing-de-HTML-em-Net-com-HTML-Agility-Pack.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=d058eed3-8372-43a5-9191-e06c5a9964fe</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=d058eed3-8372-43a5-9191-e06c5a9964fe</feedburner:origLink></item>
    <item>
      <title>NHibernate Validator - Validação simples e eficiente</title>
      <description>&lt;p&gt;
Valida&amp;ccedil;&amp;atilde;o &amp;eacute; algo de suma import&amp;acirc;ncia, e que muitas vezes &amp;eacute; colocada em segundo ou at&amp;eacute; terceito plano no desenvolvimento de aplica&amp;ccedil;&amp;otilde;es. O &lt;a href="http://nhforge.org/wikis/validator/default.aspx" target="_blank" title="NHibernate Validator"&gt;NHibernate Validator&lt;/a&gt; &amp;eacute; um poderoso framework de valida&amp;ccedil;&amp;atilde;o, que torna simples e objetiva a tarefa de validar os dados fornecidos pelos usu&amp;aacute;rios para a sua aplica&amp;ccedil;&amp;atilde;o. Ele possui v&amp;aacute;rios recursos, como configura&amp;ccedil;&amp;atilde;o dos validadores atrav&amp;eacute;s de XML e de atributos, integra&amp;ccedil;&amp;atilde;o com NHibernate, entre outros. Vamos mostrar um exemplo simples, onde a configura&amp;ccedil;&amp;atilde;o dos validadores ser&amp;aacute; feita atrav&amp;eacute;s de atributos decorando as propriedades da classe Usuario abaixo:
&lt;/p&gt;
&lt;p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Validator;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Usuario
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   4:  &lt;/span&gt;{
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; id;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; nome;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; email;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; DateTime dataNascimento;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    [Min(1, Message = &lt;span class="str"&gt;&amp;quot;Id deve ser positivo&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Id
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; id; }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        set { id = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    [NotNullNotEmpty(Message = &lt;span class="str"&gt;&amp;quot;Nome &amp;eacute; obrigat&amp;oacute;rio.&amp;quot;&lt;/span&gt;),
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  18:  &lt;/span&gt;     Length(Max= 80, Message = &lt;span class="str"&gt;&amp;quot;Nome deve ter no m&amp;aacute;ximo 80 caracteres.&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Nome
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; nome; }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        set { nome = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    [Email(Message = &lt;span class="str"&gt;&amp;quot;E-mail inv&amp;aacute;lido.&amp;quot;&lt;/span&gt;),
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  26:  &lt;/span&gt;     NotNullNotEmpty(Message = &lt;span class="str"&gt;&amp;quot;E-mail &amp;eacute; obrigat&amp;oacute;rio.&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Email
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  28:  &lt;/span&gt;    {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; email; }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        set { email = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  33:  &lt;/span&gt;    [Past(Message = &lt;span class="str"&gt;&amp;quot;Data de nascimento deve estar no passado.&amp;quot;&lt;/span&gt;),
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  34:  &lt;/span&gt;     NotNull(Message = &lt;span class="str"&gt;&amp;quot;Data de nascimento &amp;eacute; obrigat&amp;oacute;rio.&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  35:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; DateTime DataNascimento
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  36:  &lt;/span&gt;    {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; dataNascimento; }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        set { dataNascimento = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  40:  &lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
Lembrando que &amp;eacute; necess&amp;aacute;rio referenciar a dll NHibernate.Validator.dll no projeto. Existem muitos outros atributos, como Digits (para valores num&amp;eacute;ricos), CreditCardNumber (n&amp;uacute;mero de cart&amp;otilde;es de cr&amp;eacute;dito), IPAddress (endere&amp;ccedil;os IP), al&amp;eacute;m da possibilidade de criar atributos de valida&amp;ccedil;&amp;atilde;o customizados. Com a configura&amp;ccedil;&amp;atilde;o dos validadores feita, &amp;eacute; hora de testar se os dados recebidos pelo objeto ser&amp;atilde;o v&amp;aacute;lidos:
&lt;/p&gt;
&lt;p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Validator.Engine;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   4:  &lt;/span&gt;{
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   5:  &lt;/span&gt;     Usuario user = &lt;span class="kwrd"&gt;new&lt;/span&gt; Usuario();
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   6:  &lt;/span&gt;     user.Id = 10;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   7:  &lt;/span&gt;     user.Nome = &lt;span class="str"&gt;&amp;quot;Rog&amp;eacute;rio Bragil&amp;quot;&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   8:  &lt;/span&gt;     user.Email = &lt;span class="str"&gt;&amp;quot;rogerio&amp;quot;&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   9:  &lt;/span&gt;     user.DataNascimento = &lt;span class="kwrd"&gt;new&lt;/span&gt; DateTime(1978, 1, 27);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  10:  &lt;/span&gt;     ValidatorEngine validator = &lt;span class="kwrd"&gt;new&lt;/span&gt; ValidatorEngine();
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  11:  &lt;/span&gt;     InvalidValue[] erros = validator.Validate(user);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  12:  &lt;/span&gt;     &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (InvalidValue erro &lt;span class="kwrd"&gt;in&lt;/span&gt; erros)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  13:  &lt;/span&gt;     {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  14:  &lt;/span&gt;         Console.WriteLine(erro.Message);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  15:  &lt;/span&gt;     }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  16:  &lt;/span&gt;     Console.ReadKey();
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  17:  &lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
A execu&amp;ccedil;&amp;atilde;o deste exemplo exibe a seguinte mensagem:
&lt;/p&gt;
&lt;code&gt;E-mail inv&amp;aacute;lido&lt;/code&gt;
&lt;p&gt;
devido ao fato da propriedade Email ter recebido a string &amp;quot;rogerio&amp;quot; (que n&amp;atilde;o &amp;eacute; um e-mail v&amp;aacute;lido). 
&lt;/p&gt;
&lt;p&gt;
Esse exemplo foi uma pequena amostra dos recursos do &lt;a href="http://nhforge.org/wikis/validator/default.aspx" target="_blank" title="NHibernate Validator"&gt;NHibernate Validator&lt;/a&gt;. H&amp;aacute; muito mais o que ser explorado, vale muito a pena dar uma lida na documenta&amp;ccedil;&amp;atilde;o e explorar mais recursos dessa poderosa ferramenta de valida&amp;ccedil;&amp;atilde;o.
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/KIIeuUDDpzs/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/NHibernate-Validator---Validacao-simples-e-eficiente.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=06f7de5d-b563-48b4-a768-d655501f2fa6</guid>
      <pubDate>Wed, 05 Aug 2009 15:52:00 -0200</pubDate>
      <category>.Net</category>
      <category>NHibernate Validator</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=06f7de5d-b563-48b4-a768-d655501f2fa6</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=06f7de5d-b563-48b4-a768-d655501f2fa6</trackback:ping>
      <wfw:comment>http://bragil.net/post/NHibernate-Validator---Validacao-simples-e-eficiente.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=06f7de5d-b563-48b4-a768-d655501f2fa6</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=06f7de5d-b563-48b4-a768-d655501f2fa6</feedburner:origLink></item>
    <item>
      <title>Twittando pelo terminal do FreeBSD</title>
      <description>&lt;p&gt;
A inspira&amp;ccedil;&amp;atilde;o para essa brincadeirinha veio &lt;a href="http://blog.elcio.com.br/brincando-com-a-api-do-twitter/" target="_blank" title="Brincando com a API do Twitter"&gt;deste post do fechaTag&lt;/a&gt;. Fiz o mesmo, com algumas adapta&amp;ccedil;&amp;otilde;es para o FreeBSD.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Baixando e instalando o curl&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
A instala&amp;ccedil;&amp;atilde;o do curl &amp;eacute; atrav&amp;eacute;s do Ports, o gerenciador de pacotes do FreeBSD.
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Primeiro,&amp;nbsp; logue-se como root.&lt;/li&gt;
	&lt;li&gt;Entre no diret&amp;oacute;rio /usr/ports&lt;/li&gt;
	&lt;li&gt;Putz, onde ser&amp;aacute; que est&amp;aacute; o diret&amp;oacute;rio do curl? F&amp;aacute;cil! &lt;br /&gt;
	&lt;ul&gt;
		&lt;li&gt;&amp;nbsp;find . -name &amp;quot;curl&amp;quot; -type d&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&amp;nbsp;A resposta &amp;eacute; imediata: ./ftp/curl&lt;/li&gt;
	&lt;li&gt;Agora que descobri onde estava o diret&amp;oacute;rio do curl, entro nele: &lt;br /&gt;
	&lt;ul&gt;
		&lt;li&gt;&amp;nbsp;cd ftp/curl&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Para baixar, compilar e instalar, digite: &lt;br /&gt;
	&lt;ul&gt;
		&lt;li&gt;&amp;nbsp;make install&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Deve aparecer uma janela de configura&amp;ccedil;&amp;atilde;o, deixe marcado apenas &amp;quot;OpenSSL support&amp;quot; e d&amp;ecirc; Ok.&lt;/li&gt;
	&lt;li&gt;Aguarde baixar, compilar e instalar.&amp;nbsp; ; )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Come&amp;ccedil;ando a brincadeira&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;Eacute; simples, muito simples &amp;quot;twittar&amp;quot; pelo console. Basta um comandinho (chupinhado do post do fechaTag):
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;curl -u usu&amp;aacute;rio:senha -d status=&amp;quot;Twittando do terminal.&amp;quot; http://twitter.com/statuses/update.json&lt;/code&gt;
&lt;span class="com"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="com"&gt;J&amp;aacute; que o comando t&amp;aacute; muito grande, d&amp;aacute; para enxugar um pouco. Siga os passos do &lt;a href="http://blog.elcio.com.br/brincando-com-a-api-do-twitter/" target="_blank" title="Brincando com a API do Twitter"&gt;post do fechaTag&lt;/a&gt;, n&amp;atilde;o tem erro... Feito isso, basta o comandinho:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;twitter &amp;quot;Twittando pelo terminal do FreeBSD, API show de bola hein...&amp;quot; &lt;/code&gt;
&lt;span class="com"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span class="com"&gt;Bom, com isso d&amp;aacute; para criar bastante coisa interessante, como por exemplo enviar mensagens de erro para o &lt;a href="http://www.twitter.com" target="_blank" title="Twitter"&gt;Twitter&lt;/a&gt; quando acontecer alguma coisa de errado com o sistema... &amp;Eacute; s&amp;oacute; ter criatividade.
&lt;/span&gt;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/M1oDqPn9UNI/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/Twittando-pelo-terminal-do-FreeBSD.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=25a5d5a3-fb5c-45a0-9d06-6452f39c427d</guid>
      <pubDate>Thu, 19 Mar 2009 11:03:00 -0200</pubDate>
      <category>Linux/Unix</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=25a5d5a3-fb5c-45a0-9d06-6452f39c427d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=25a5d5a3-fb5c-45a0-9d06-6452f39c427d</trackback:ping>
      <wfw:comment>http://bragil.net/post/Twittando-pelo-terminal-do-FreeBSD.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=25a5d5a3-fb5c-45a0-9d06-6452f39c427d</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=25a5d5a3-fb5c-45a0-9d06-6452f39c427d</feedburner:origLink></item>
    <item>
      <title>Valores por extenso em C#</title>
      <description>&lt;p&gt;
Essa eu encontrei no &lt;a href="http://lib.seven.com.br" target="_blank"&gt;Seven Library&lt;/a&gt;, uma &lt;a href="http://lib.seven.com.br/ampliar.asp?codcat=42&amp;amp;codartigo=979" target="_blank"&gt;rotina em C#&lt;/a&gt; para transformar valores decimais em sua representa&amp;ccedil;&amp;atilde;o por extenso em portugu&amp;ecirc;s do Brasil, usando reais como moeda. Algo bastante &amp;uacute;til, dif&amp;iacute;cil de encontrar pronto e meio chato de desenvolver. Segue o c&amp;oacute;digo:
&lt;/p&gt;
&lt;p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Teste
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   6:  &lt;/span&gt;{
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NumeroPorExtenso
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; ArrayList numeroLista;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Int32 num;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="rem"&gt;//array de 2 linhas e 14 colunas[2][14]&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; String[,] qualificadores = &lt;span class="kwrd"&gt;new&lt;/span&gt; String[,] {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&lt;span class="rem"&gt;//                {&amp;quot;mil&amp;eacute;simo de real&amp;quot;,&amp;quot;mil&amp;eacute;simos de real&amp;quot;},//[0][0] e [0][1]&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;centavo&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;centavos&amp;quot;&lt;/span&gt;},&lt;span class="rem"&gt;//[1][0] e [1][1]&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;},&lt;span class="rem"&gt;//[2][0],[2][1]&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;mil&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mil&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;milh&amp;atilde;o&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;milh&amp;otilde;es&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;bilh&amp;atilde;o&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;bilh&amp;otilde;es&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;trilh&amp;atilde;o&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;trilh&amp;otilde;es&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;quatrilh&amp;atilde;o&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;quatrilh&amp;otilde;es&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;quintilh&amp;atilde;o&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;quintilh&amp;otilde;es&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;sextilh&amp;atilde;o&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sextilh&amp;otilde;es&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;setilh&amp;atilde;o&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;setilh&amp;otilde;es&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;octilh&amp;atilde;o&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;&amp;quot;octilh&amp;otilde;es&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;nonilh&amp;atilde;o&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;&amp;quot;nonilh&amp;otilde;es&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;decilh&amp;atilde;o&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;&amp;quot;decilh&amp;otilde;es&amp;quot;&lt;/span&gt;}
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                };
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  33:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; String[,] numeros = &lt;span class="kwrd"&gt;new&lt;/span&gt; String[,] {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;zero&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;um&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;dois&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;tr&amp;ecirc;s&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;quatro&amp;quot;&lt;/span&gt;,
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                 &lt;span class="str"&gt;&amp;quot;cinco&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;seis&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sete&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;oito&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;nove&amp;quot;&lt;/span&gt;,
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                 &lt;span class="str"&gt;&amp;quot;dez&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;&amp;quot;onze&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;doze&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;treze&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;quatorze&amp;quot;&lt;/span&gt;,
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                 &lt;span class="str"&gt;&amp;quot;quinze&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;dezesseis&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;dezessete&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;dezoito&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;dezenove&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;vinte&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;trinta&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;quarenta&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;cinq&amp;uuml;enta&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sessenta&amp;quot;&lt;/span&gt;,
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                 &lt;span class="str"&gt;&amp;quot;setenta&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;oitenta&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;noventa&amp;quot;&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;},
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                {&lt;span class="str"&gt;&amp;quot;cem&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;cento&amp;quot;&lt;/span&gt;,
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                 &lt;span class="str"&gt;&amp;quot;duzentos&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;trezentos&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;quatrocentos&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;quinhentos&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;seiscentos&amp;quot;&lt;/span&gt;,
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                 &lt;span class="str"&gt;&amp;quot;setecentos&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;oitocentos&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;novecentos&amp;quot;&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;}
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                };
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  44:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; NumeroPorExtenso() {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  46:  &lt;/span&gt;            numeroLista = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArrayList();
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  47:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  48:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  49:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; NumeroPorExtenso(Decimal dec) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  50:  &lt;/span&gt;            numeroLista = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArrayList();
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  51:  &lt;/span&gt;            SetNumero(dec);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  52:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  53:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  54:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetNumero(Decimal dec) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  55:  &lt;/span&gt;            dec = Decimal.Round(dec,2);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  56:  &lt;/span&gt;            dec = dec * 100;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  57:  &lt;/span&gt;            num = Convert.ToInt32(dec);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  58:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  59:  &lt;/span&gt;            numeroLista.Clear();
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  60:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (num == 0)  {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                numeroLista.Add(0);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  62:  &lt;/span&gt;                numeroLista.Add(0);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  63:  &lt;/span&gt;            } &lt;span class="kwrd"&gt;else&lt;/span&gt; {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  64:  &lt;/span&gt;                AddRemainder(100);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  65:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  66:  &lt;/span&gt;                &lt;span class="kwrd"&gt;while&lt;/span&gt; (num != 0) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  67:  &lt;/span&gt;                    AddRemainder(1000);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  68:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  69:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  70:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  71:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  72:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  73:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  74:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddRemainder(Int32 divisor) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  75:  &lt;/span&gt;            Int32 div = num / divisor;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  76:  &lt;/span&gt;            Int32 mod = num % divisor;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  77:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  78:  &lt;/span&gt;            Int32[] newNum = &lt;span class="kwrd"&gt;new&lt;/span&gt; Int32[] {div,mod};
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  79:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  80:  &lt;/span&gt;            numeroLista.Add(mod);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  81:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  82:  &lt;/span&gt;            num = div;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  83:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  84:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  85:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; TemMaisGrupos(Int32 ps) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  86:  &lt;/span&gt;            &lt;span class="kwrd"&gt;while&lt;/span&gt; (ps &amp;gt; 0) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  87:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; ((Int32) numeroLista[ps] != 00 &amp;amp;&amp;amp; !TemMaisGrupos(ps -1))
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  88:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  89:  &lt;/span&gt;                ps--;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  90:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  91:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  92:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  93:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  94:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EhPrimeiroGrupoUm() {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  95:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; ((Int32) numeroLista[numeroLista.Count-1] == 1)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  96:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  97:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  98:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  99:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 100:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 101:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EhUltimoGrupo(Int32 ps) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 102:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt;((ps &amp;gt; 0) &amp;amp;&amp;amp; ((Int32) numeroLista[ps] != 0) || !TemMaisGrupos(ps - 1));
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 103:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 104:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 105:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EhGrupoZero(Int32 ps) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 106:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (ps &amp;lt;= 0 || ps &amp;gt;= numeroLista.Count)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 107:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 108:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; ((Int32) numeroLista[ps] == 0);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 109:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 110:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 111:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EhUnicoGrupo() {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 112:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (numeroLista.Count &amp;lt;= 3)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 113:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 114:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 115:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!EhGrupoZero(1) &amp;amp;&amp;amp; !EhGrupoZero(2))
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 116:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 117:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 118:  &lt;/span&gt;            &lt;span class="kwrd"&gt;bool&lt;/span&gt; hasOne = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 119:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 120:  &lt;/span&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (Int32 i=3; i &amp;lt; numeroLista.Count; i++) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 121:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; ((Int32) numeroLista[i] != 0) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 122:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (hasOne)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 123:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 124:  &lt;/span&gt;                    hasOne = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 125:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 126:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 127:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 128:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 129:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 130:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; String NumToString(Int32 numero,Int32 escala) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 131:  &lt;/span&gt;            Int32 unidade = (numero % 10);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 132:  &lt;/span&gt;            Int32 dezena = (numero % 100);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 133:  &lt;/span&gt;            Int32 centena = (numero / 100);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 134:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 135:  &lt;/span&gt;            StringBuilder buf = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 136:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 137:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (numero != 0) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 138:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (centena != 0) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 139:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (dezena == 0 &amp;amp;&amp;amp; centena == 1) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 140:  &lt;/span&gt;                        buf.Append(numeros[2,0]);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 141:  &lt;/span&gt;                    } &lt;span class="kwrd"&gt;else&lt;/span&gt; {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 142:  &lt;/span&gt;                        buf.Append(numeros[2,centena]);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 143:  &lt;/span&gt;                    }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 144:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 145:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 146:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (buf.Length &amp;gt; 0 &amp;amp;&amp;amp; dezena != 0) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 147:  &lt;/span&gt;                    buf.Append(&lt;span class="str"&gt;&amp;quot; e &amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 148:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 149:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 150:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (dezena &amp;gt; 19) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 151:  &lt;/span&gt;                    dezena = dezena / 10;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 152:  &lt;/span&gt;                    buf.Append(numeros[1,dezena-2]);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 153:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (unidade != 0) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 154:  &lt;/span&gt;                        buf.Append(&lt;span class="str"&gt;&amp;quot; e &amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 155:  &lt;/span&gt;                        buf.Append(numeros[0,unidade]);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 156:  &lt;/span&gt;                    }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 157:  &lt;/span&gt;                } &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (centena == 0 || dezena != 0) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 158:  &lt;/span&gt;                    buf.Append(numeros[0,dezena]);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 159:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 160:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 161:  &lt;/span&gt;                buf.Append(&lt;span class="str"&gt;&amp;quot; &amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 162:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 163:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (numero == 1) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 164:  &lt;/span&gt;                    buf.Append(qualificadores[escala,0]);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 165:  &lt;/span&gt;                } &lt;span class="kwrd"&gt;else&lt;/span&gt; {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 166:  &lt;/span&gt;                    buf.Append(qualificadores[escala,1]);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 167:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 168:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 169:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 170:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; buf.ToString();
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 171:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 172:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 173:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; String ToString() {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 174:  &lt;/span&gt;            StringBuilder buf = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 175:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 176:  &lt;/span&gt;            Int32 numero = (Int32) numeroLista[0];
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 177:  &lt;/span&gt;            Int32 count;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 178:  &lt;/span&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (count = numeroLista.Count -1; count &amp;gt; 0; count--) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 179:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (buf.Length &amp;gt; 0 &amp;amp;&amp;amp;  !EhGrupoZero(count)) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 180:  &lt;/span&gt;                    buf.Append(&lt;span class="str"&gt;&amp;quot; e &amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 181:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 182:  &lt;/span&gt;                buf.Append(NumToString((Int32) numeroLista[count],count));
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 183:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 184:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 185:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (buf.Length &amp;gt; 0) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 186:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 187:  &lt;/span&gt;                &lt;span class="kwrd"&gt;while&lt;/span&gt; (buf.ToString().EndsWith(&lt;span class="str"&gt;&amp;quot; &amp;quot;&lt;/span&gt;))
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 188:  &lt;/span&gt;                    buf.Length = buf.Length -1;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 189:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 190:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (EhUnicoGrupo()) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 191:  &lt;/span&gt;                    buf.Append(&lt;span class="str"&gt;&amp;quot; de &amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 192:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 193:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 194:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (EhPrimeiroGrupoUm()) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 195:  &lt;/span&gt;                    buf.Insert(0,&lt;span class="str"&gt;&amp;quot;h&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 196:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 197:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 198:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (numeroLista.Count == 2 &amp;amp;&amp;amp; ((Int32) numeroLista[1] == 1)) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 199:  &lt;/span&gt;                    buf.Append(&lt;span class="str"&gt;&amp;quot; real&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 200:  &lt;/span&gt;                } &lt;span class="kwrd"&gt;else&lt;/span&gt; {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 201:  &lt;/span&gt;                    buf.Append(&lt;span class="str"&gt;&amp;quot; reais&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 202:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 203:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 204:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; ((Int32) numeroLista[0] != 0) {
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 205:  &lt;/span&gt;                    buf.Append(&lt;span class="str"&gt;&amp;quot; e &amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 206:  &lt;/span&gt;                }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 207:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 208:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 209:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; ((Int32) numeroLista[0] != 0) {
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 210:  &lt;/span&gt;                buf.Append(NumToString((Int32) numeroLista[0],0));
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 211:  &lt;/span&gt;            }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 212:  &lt;/span&gt;&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 213:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; buf.ToString();
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 214:  &lt;/span&gt;        }
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt; 215:  &lt;/span&gt;    }
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt; 216:  &lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/c6m3zwY8Qgc/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/Valores-por-extenso-em-C.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=d541e9cb-f2de-40c2-9f33-619a01139e68</guid>
      <pubDate>Mon, 29 Sep 2008 07:09:00 -0200</pubDate>
      <category>.Net</category>
      <category>C#</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=d541e9cb-f2de-40c2-9f33-619a01139e68</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=d541e9cb-f2de-40c2-9f33-619a01139e68</trackback:ping>
      <wfw:comment>http://bragil.net/post/Valores-por-extenso-em-C.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=d541e9cb-f2de-40c2-9f33-619a01139e68</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=d541e9cb-f2de-40c2-9f33-619a01139e68</feedburner:origLink></item>
    <item>
      <title>Forçar download em Asp.Net</title>
      <description>&lt;p&gt;
Uma rotina bem simples para for&amp;ccedil;ar o download de arquivos em Asp.Net, evitando que eles sejam abertos no browser. Por exemplo, se voc&amp;ecirc; quiser for&amp;ccedil;ar que o usu&amp;aacute;rio baixe um arquivo de imagem ao inv&amp;eacute;s de abrir no browser, esta fun&amp;ccedil;&amp;atilde;o ser&amp;aacute; &amp;uacute;til.
&lt;/p&gt;
&lt;p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="str"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="str"&gt;&amp;#39; &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &amp;#39;&lt;span class="str"&gt;&amp;#39;&amp;#39;&lt;/span&gt; Rotina para for&amp;ccedil;ar o download de arquivos
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="str"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="str"&gt;&amp;#39; &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &amp;#39;&lt;span class="str"&gt;&amp;#39;&amp;#39;&lt;/span&gt; &amp;lt;param name=&lt;span class="str"&gt;&amp;quot;caminhoArquivo&amp;quot;&lt;/span&gt;&amp;gt;Caminho para o arquivo no sistema de arquivos&amp;lt;/param&amp;gt;
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="str"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&amp;#39; &amp;lt;param name=&lt;span class="str"&gt;&amp;quot;contentType&amp;quot;&lt;/span&gt;&amp;gt;Content-Type &lt;span class="kwrd"&gt;do&lt;/span&gt; arquivo (opcional)&amp;lt;/param&amp;gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    Protected Sub ForceDownload(ByVal caminhoArquivo As String, _
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                                Optional ByVal contentType As String = &lt;span class="str"&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        Dim arquivo As FileInfo = New FileInfo(caminhoArquivo)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        Response.Clear()
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        Response.AddHeader(&lt;span class="str"&gt;&amp;quot;Content-Disposition&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;attachment; filename=&amp;quot;&lt;/span&gt; + arquivo.Name)
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        Response.AddHeader(&lt;span class="str"&gt;&amp;quot;Content-Length&amp;quot;&lt;/span&gt;, arquivo.Length.ToString())
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        Response.ContentType = contentType
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        Response.WriteFile(arquivo.FullName)
&lt;/pre&gt;
&lt;pre&gt;
&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        Response.End()
&lt;/pre&gt;
&lt;pre class="alt"&gt;
&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    End Sub
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/4d3g0jHL6D8/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/Forcar-download-em-AspNet.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=a9797168-8cc7-4f65-a283-6a2608e2dffe</guid>
      <pubDate>Tue, 23 Sep 2008 11:09:00 -0200</pubDate>
      <category>.Net</category>
      <category>ASP.Net</category>
      <category>VB.Net</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=a9797168-8cc7-4f65-a283-6a2608e2dffe</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=a9797168-8cc7-4f65-a283-6a2608e2dffe</trackback:ping>
      <wfw:comment>http://bragil.net/post/Forcar-download-em-AspNet.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=a9797168-8cc7-4f65-a283-6a2608e2dffe</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=a9797168-8cc7-4f65-a283-6a2608e2dffe</feedburner:origLink></item>
    <item>
      <title>Go Bible - Bíblia em J2ME para dispositivos móveis</title>
      <description>&lt;br /&gt;
&lt;table border="0"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;img style="margin: 5px; max-width: 800px; float: left" src="http://gobible.jolon.org/screenshot_border.gif" alt="" /&gt;&lt;/td&gt;
			&lt;td&gt;&lt;em&gt;&amp;quot;Go Bible is a Free Bible viewer application for Java mobile phones (J2ME MIDP 1.0 and MIDP 2.0). Go Bible 2.2.6 Features: &lt;/em&gt;
			&lt;ul&gt;
				&lt;li&gt;&lt;em&gt;Christ&amp;#39;s Words in red&lt;/em&gt;&lt;/li&gt;
				&lt;li&gt;&lt;em&gt;SMS scriptures&lt;/em&gt;&lt;/li&gt;
				&lt;li&gt;&lt;em&gt;Bookmarks&lt;/em&gt;&lt;/li&gt;
				&lt;li&gt;&lt;em&gt;History&lt;/em&gt;&lt;/li&gt;
				&lt;li&gt;&lt;em&gt;Coloured themes&lt;/em&gt;&lt;/li&gt;
				&lt;li&gt;&lt;em&gt;Fast search&amp;quot;&lt;/em&gt;&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;a href="http://gobible.jolon.org/" target="_blank"&gt;Acesse o site do Go Bible&lt;/a&gt; e siga as instru&amp;ccedil;&amp;otilde;es para baixar gratuitamente. &amp;Eacute; poss&amp;iacute;vel baixar tanto pelo dispositivo m&amp;oacute;vel (&lt;a href="http://wap.jolon.org/Collections/2.2.6/Portuguese/Portuguese.jad" target="_blank"&gt;link para o .jad da B&amp;iacute;blia em portugu&amp;ecirc;s&lt;/a&gt;) quanto pelo PC.
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/FYhgWtCyF4w/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/Go-Bible-82113b-Biblia-em-J2ME-para-dispositivos-moveis.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=d3b90f40-1773-4736-b8f0-f42973fca2dd</guid>
      <pubDate>Fri, 12 Sep 2008 11:09:00 -0200</pubDate>
      <category>J2ME</category>
      <category>Mobile</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=d3b90f40-1773-4736-b8f0-f42973fca2dd</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=d3b90f40-1773-4736-b8f0-f42973fca2dd</trackback:ping>
      <wfw:comment>http://bragil.net/post/Go-Bible-82113b-Biblia-em-J2ME-para-dispositivos-moveis.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=d3b90f40-1773-4736-b8f0-f42973fca2dd</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=d3b90f40-1773-4736-b8f0-f42973fca2dd</feedburner:origLink></item>
    <item>
      <title>Maior acelerador de partículas do mundo, o LHC, começa a operar nesta quarta</title>
      <description>&lt;em&gt;&amp;quot;Grosso modo, o LHC &amp;eacute; uma esp&amp;eacute;cie de &amp;quot;rodoanel&amp;quot; para pr&amp;oacute;tons, as part&amp;iacute;culas que caracterizam os elementos existentes no universo. Um t&amp;uacute;nel circular de 27 km, localizado sob a fronteira entre a Su&amp;iacute;&amp;ccedil;a e a Fran&amp;ccedil;a, ele usar&amp;aacute; poderos&amp;iacute;ssimos &amp;iacute;m&amp;atilde;s, constru&amp;iacute;dos com tecnologia de supercondutores, para acelerar feixes de part&amp;iacute;culas at&amp;eacute; 99,99% da velocidade da luz. Produzindo um feixe de pr&amp;oacute;tons em cada dire&amp;ccedil;&amp;atilde;o, a id&amp;eacute;ia &amp;eacute; colidi-los quando estiverem em m&amp;aacute;xima velocidade. O impacto &amp;eacute; capaz de simular condi&amp;ccedil;&amp;otilde;es pr&amp;oacute;ximas &amp;agrave;s que existiram logo ap&amp;oacute;s o Big Bang, gerando um sem-n&amp;uacute;mero de part&amp;iacute;culas elementares.&amp;quot;&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Fonte:&lt;/strong&gt; &lt;a href="http://g1.globo.com/Noticias/Ciencia/0,,MUL749884-5603,00.html" target="_blank"&gt;http://g1.globo.com/Noticias/Ciencia/0,,MUL749884-5603,00.html&lt;/a&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/Uc4ap8mSc3s/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/Maior-acelerador-de-particulas-do-mundo2c-o-LHC2c-comeca-a-operar-nesta-quarta.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=695eb9fc-714d-4c69-bfb8-c6ef2f89d42e</guid>
      <pubDate>Mon, 08 Sep 2008 06:09:00 -0200</pubDate>
      <category>Tecnologia</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=695eb9fc-714d-4c69-bfb8-c6ef2f89d42e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=695eb9fc-714d-4c69-bfb8-c6ef2f89d42e</trackback:ping>
      <wfw:comment>http://bragil.net/post/Maior-acelerador-de-particulas-do-mundo2c-o-LHC2c-comeca-a-operar-nesta-quarta.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=695eb9fc-714d-4c69-bfb8-c6ef2f89d42e</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=695eb9fc-714d-4c69-bfb8-c6ef2f89d42e</feedburner:origLink></item>
    <item>
      <title>TOME CUIDADO COM AS PALAVRAS, VOCÊ PODE SER MAL INTERPRETADO</title>
      <description>A mo&amp;ccedil;a se preparou toda para ir ao ensaio da Gavi&amp;otilde;es da Fiel.&lt;br /&gt;
&lt;br /&gt;
Chegando l&amp;aacute;, um dos mano suarento e banguelo pede pra dan&amp;ccedil;ar com ela, e ela, para n&amp;atilde;o arrumar confus&amp;atilde;o, aceita.&lt;br /&gt;
&lt;br /&gt;
Mas o mano suava tanto que ela j&amp;aacute; n&amp;atilde;o estava suportando mais!&lt;br /&gt;
&lt;br /&gt;
A mo&amp;ccedil;a foi se afastando, e ent&amp;atilde;o disse:&lt;br /&gt;
&lt;br /&gt;
- Voc&amp;ecirc; sua , hein!&lt;br /&gt;
&lt;br /&gt;
Ele puxou-a, lascou um beijo e respondeu:&lt;br /&gt;
&lt;br /&gt;
- Tamb&amp;eacute;m v&amp;ocirc; s&amp;ecirc; seu! princesa! &amp;Eacute; n&amp;oacute;is na fita! &lt;br /&gt;
&lt;br /&gt;
:D
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/qW-JAN_5I2c/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/TOME-CUIDADO-COM-AS-PALAVRAS2c-VOCE-PODE-SER-MAL-INTERPRETADO.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=4e057191-4642-4fcb-884e-3e31b73c0ac4</guid>
      <pubDate>Fri, 29 Aug 2008 06:08:00 -0200</pubDate>
      <category>Humor</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=4e057191-4642-4fcb-884e-3e31b73c0ac4</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=4e057191-4642-4fcb-884e-3e31b73c0ac4</trackback:ping>
      <wfw:comment>http://bragil.net/post/TOME-CUIDADO-COM-AS-PALAVRAS2c-VOCE-PODE-SER-MAL-INTERPRETADO.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=4e057191-4642-4fcb-884e-3e31b73c0ac4</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=4e057191-4642-4fcb-884e-3e31b73c0ac4</feedburner:origLink></item>
    <item>
      <title>Folha Invest - Simulador do mercado de ações</title>
      <description>O site &lt;a href="http://www.folhainvest.com.br" target="_blank"&gt;Folha Invest&lt;/a&gt;, uma parceria da &lt;a href="http://www.bovespa.com.br" target="_blank"&gt;BM&amp;amp;FBovespa&lt;/a&gt; e da &lt;a href="http://www.folha.uol.com.br" target="_blank"&gt;Folha de S&amp;atilde;o Paulo&lt;/a&gt;, oferece um simulado gratuito do mercado de a&amp;ccedil;&amp;otilde;es, bastante interessante para aqueles que querem aprender a investir na bolsa. Mesmo sendo um simulado, os valores das a&amp;ccedil;&amp;otilde;es s&amp;atilde;o os valores reais de mercado, sendo ideal para acompanhar a din&amp;acirc;mica dos pap&amp;eacute;is das empresas.&lt;br /&gt;
&lt;br /&gt;
Ao se cadastrar, voc&amp;ecirc; recebe R$ 200.000,00 de capital para montar sua carteira de a&amp;ccedil;&amp;otilde;es, e o limite di&amp;aacute;rio de opera&amp;ccedil;&amp;otilde;es tamb&amp;eacute;m &amp;eacute; de R$ 200.000,00. &amp;Eacute; poss&amp;iacute;vel comprar e vender a&amp;ccedil;&amp;otilde;es, e aqueles com melhor desempenho no simulado receber&amp;atilde;o &lt;a href="http://folhainvest.folha.com.br/premiacao" target="_blank"&gt;pr&amp;ecirc;mios&lt;/a&gt;, como viagens e cursos. Uma bela dica para aprender na pr&amp;aacute;tica e ficar por dentro da din&amp;acirc;mica do mercado de a&amp;ccedil;&amp;otilde;es.
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/QACRUGsb6A8/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/Folha-Invest-82113b-Simulador-do-mercado-de-acoes.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=b9b05fb9-ff6f-49d0-9ab4-2fb7852bf508</guid>
      <pubDate>Fri, 29 Aug 2008 05:08:00 -0200</pubDate>
      <category>Mercado de Ações</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=b9b05fb9-ff6f-49d0-9ab4-2fb7852bf508</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=b9b05fb9-ff6f-49d0-9ab4-2fb7852bf508</trackback:ping>
      <wfw:comment>http://bragil.net/post/Folha-Invest-82113b-Simulador-do-mercado-de-acoes.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=b9b05fb9-ff6f-49d0-9ab4-2fb7852bf508</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=b9b05fb9-ff6f-49d0-9ab4-2fb7852bf508</feedburner:origLink></item>
    <item>
      <title>EyePet, o “bichinho virtual” para Playstation 3</title>
      <description>&lt;div&gt;
&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="560" height="340"&gt;
	&lt;param name="width" value="560" /&gt;
	&lt;param name="height" value="340" /&gt;
	&lt;param name="allowfullscreen" value="true" /&gt;
	&lt;param name="allowscriptaccess" value="always" /&gt;
	&lt;param name="src" value="http://www.youtube.com/v/aPENA1Bpm68&amp;amp;hl=pt-br&amp;amp;fs=1&amp;amp;" /&gt;
	&lt;embed type="application/x-shockwave-flash" width="560" height="340" allowfullscreen="true" allowscriptaccess="always" src="http://www.youtube.com/v/aPENA1Bpm68&amp;amp;hl=pt-br&amp;amp;fs=1&amp;amp;"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;em&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;EyePet &amp;eacute; um jogo de simula&amp;ccedil;&amp;atilde;o compat&amp;iacute;vel com a c&amp;acirc;mera PlayStation Eye. No game, voc&amp;ecirc; cria um animalzinho de estima&amp;ccedil;&amp;atilde;o e pode interagir com ele de todas as maneiras imagin&amp;aacute;veis, ao passo que ele tamb&amp;eacute;m interage com o ambiente ao seu redor - no v&amp;iacute;deo temos algo parecido com um cachorrinho-macaco, muito fofinho e carism&amp;aacute;tico, mas outros animais devem aparecer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Fonte: &lt;a href="http://heroi.uol.com.br/conteudo.php?id=1189" target="_blank"&gt;http://heroi.uol.com.br/conteudo.php?id=1189&lt;/a&gt;&lt;br /&gt;
&lt;/em&gt;
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/Kn5Okqvr0-4/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/EyePet2c-o-e2809cbichinho-virtuale2809d-para-Playstation-3.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=63b6af47-5533-4659-b9c0-2dbd4c2495fd</guid>
      <pubDate>Wed, 27 Aug 2008 08:08:00 -0200</pubDate>
      <category>Tecnologia</category>
      <category>Games</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=63b6af47-5533-4659-b9c0-2dbd4c2495fd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=63b6af47-5533-4659-b9c0-2dbd4c2495fd</trackback:ping>
      <wfw:comment>http://bragil.net/post/EyePet2c-o-e2809cbichinho-virtuale2809d-para-Playstation-3.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=63b6af47-5533-4659-b9c0-2dbd4c2495fd</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=63b6af47-5533-4659-b9c0-2dbd4c2495fd</feedburner:origLink></item>
    <item>
      <title>groovy-br - Lista de discussão sobre Groovy e Grails</title>
      <description>O grupo &lt;a href="http://br.groups.yahoo.com/group/groovy-br/" target="_blank"&gt;groovy-br&lt;/a&gt; foi criado com o intuito de fortalecer a comunidade Groovy/Grails no Brasil. &lt;br /&gt;
&lt;br /&gt;
Para fazer parte do grupo acesse a p&amp;aacute;gina e se associe. Basta ter uma conta no &lt;a href="http://br.yahoo.com/" target="_blank"&gt;Yahoo&lt;/a&gt;.
</description>
      <link>http://feedproxy.google.com/~r/dotnetnapratica/~3/2FxLMx0CAYU/post.aspx</link>
      <author>Admin</author>
      <comments>http://bragil.net/post/groovy-br-82113b-Lista-de-discussao-sobre-Groovy-e-Grails.aspx#comment</comments>
      <guid isPermaLink="false">http://bragil.net/post.aspx?id=2689eaaa-39ec-41aa-b180-bc0a24b68600</guid>
      <pubDate>Tue, 26 Aug 2008 11:08:00 -0200</pubDate>
      <category>Groovy/Grails</category>
      <dc:publisher>Admin</dc:publisher>
      <pingback:server>http://bragil.net/pingback.axd</pingback:server>
      <pingback:target>http://bragil.net/post.aspx?id=2689eaaa-39ec-41aa-b180-bc0a24b68600</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://bragil.net/trackback.axd?id=2689eaaa-39ec-41aa-b180-bc0a24b68600</trackback:ping>
      <wfw:comment>http://bragil.net/post/groovy-br-82113b-Lista-de-discussao-sobre-Groovy-e-Grails.aspx#comment</wfw:comment>
      <wfw:commentRss>http://bragil.net/syndication.axd?post=2689eaaa-39ec-41aa-b180-bc0a24b68600</wfw:commentRss>
    <feedburner:origLink>http://bragil.net/post.aspx?id=2689eaaa-39ec-41aa-b180-bc0a24b68600</feedburner:origLink></item>
  </channel>
</rss>
