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

<channel>
	<title>Programando na madrugada &#187; .Net</title>
	<atom:link href="http://www.luizpicanco.com/category/tecnologia/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.luizpicanco.com</link>
	<description>Programação na melhor hora do dia</description>
	<lastBuildDate>Sun, 31 Jul 2011 03:44:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Removendo a acentuação e os caracteres especiais de uma String</title>
		<link>http://www.luizpicanco.com/2010/05/28/removendo-a-acentuacao-e-os-caracteres-especiais-de-uma-string/</link>
		<comments>http://www.luizpicanco.com/2010/05/28/removendo-a-acentuacao-e-os-caracteres-especiais-de-uma-string/#comments</comments>
		<pubDate>Fri, 28 May 2010 13:56:37 +0000</pubDate>
		<dc:creator>Luiz Picanço</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[algoritmo]]></category>

		<guid isPermaLink="false">http://www.luizpicanco.com/?p=212</guid>
		<description><![CDATA[Estava precisando remover a acentuação e os caracteres especiais do nome de um arquivo. Para isso, desenvolvi um extension method para a classe String. Exemplo: String de entrada: Adobe Acrobat &#8211; Pacy-Paraná_05.12_áèïôúã+.pdf String de retorno: AdobeAcrobatPacyParana_05.12_aeioua.pdf Desenvolvi o método utilizando uma HashTable e expressão regular. Caso você tenha alguma sugestão de melhoria, poste aí nos [...]]]></description>
			<content:encoded><![CDATA[<p>Estava precisando remover a acentuação e os caracteres especiais do nome de um arquivo. Para isso, desenvolvi um extension method para a classe String.</p>
<p>Exemplo:<br />
String de entrada:<br />
<strong>Adobe Acrobat &#8211; Pacy-Paraná_05.12_áèïôúã+.pdf</strong></p>
<p>String de retorno:<br />
<strong>AdobeAcrobatPacyParana_05.12_aeioua.pdf</strong></p>
<p>Desenvolvi o método utilizando uma HashTable e expressão regular. Caso você tenha alguma sugestão de melhoria, poste aí nos comentários.</p>
<p>Extension method:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">String</span> RemoveSpecialCharacters<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span> <span style="color: #FF0000;">String</span> self<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
	var normalizedString <span style="color: #008000;">=</span> self<span style="color: #008000;">;</span>
&nbsp;
	<span style="color: #008080; font-style: italic;">// Prepara a tabela de símbolos.</span>
	var symbolTable <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Dictionary<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">char</span>, <span style="color: #FF0000;">char</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
	symbolTable.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">'a'</span>, <span style="color: #008000;">new</span> <span style="color: #FF0000;">char</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span><span style="color: #666666;">'à'</span>, <span style="color: #666666;">'á'</span>, <span style="color: #666666;">'ä'</span>, <span style="color: #666666;">'â'</span>, <span style="color: #666666;">'ã'</span><span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
	symbolTable.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">'c'</span>, <span style="color: #008000;">new</span> <span style="color: #FF0000;">char</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> <span style="color: #666666;">'ç'</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
	symbolTable.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">'e'</span>, <span style="color: #008000;">new</span> <span style="color: #FF0000;">char</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> <span style="color: #666666;">'è'</span>, <span style="color: #666666;">'é'</span>, <span style="color: #666666;">'ë'</span>, <span style="color: #666666;">'ê'</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
	symbolTable.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">'i'</span>, <span style="color: #008000;">new</span> <span style="color: #FF0000;">char</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> <span style="color: #666666;">'ì'</span>, <span style="color: #666666;">'í'</span>, <span style="color: #666666;">'ï'</span>, <span style="color: #666666;">'î'</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
	symbolTable.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">'o'</span>, <span style="color: #008000;">new</span> <span style="color: #FF0000;">char</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> <span style="color: #666666;">'ò'</span>, <span style="color: #666666;">'ó'</span>, <span style="color: #666666;">'ö'</span>, <span style="color: #666666;">'ô'</span>, <span style="color: #666666;">'õ'</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
	symbolTable.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">'u'</span>, <span style="color: #008000;">new</span> <span style="color: #FF0000;">char</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> <span style="color: #666666;">'ù'</span>, <span style="color: #666666;">'ú'</span>, <span style="color: #666666;">'ü'</span>, <span style="color: #666666;">'û'</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	<span style="color: #008080; font-style: italic;">// Substitui os símbolos.</span>
	<span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var key <span style="color: #0600FF;">in</span> symbolTable.<span style="color: #0000FF;">Keys</span><span style="color: #000000;">&#41;</span>
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var symbol <span style="color: #0600FF;">in</span> symbolTable<span style="color: #000000;">&#91;</span>key<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			normalizedString <span style="color: #008000;">=</span> normalizedString.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span>symbol, key<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
&nbsp;
	<span style="color: #008080; font-style: italic;">// Remove os outros caracteres especiais.</span>
	normalizedString <span style="color: #008000;">=</span> Regex.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span>normalizedString, <span style="color: #666666;">&quot;[^0-9a-zA-Z._]+?&quot;</span>, <span style="color: #666666;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
	<span style="color: #0600FF;">return</span> normalizedString<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2010/05/28/removendo-a-acentuacao-e-os-caracteres-especiais-de-uma-string/feed/</wfw:commentRss>
		<slash:comments>2054</slash:comments>
		</item>
		<item>
		<title>SessionScope e FlushAction no Castle ActiveRecord</title>
		<link>http://www.luizpicanco.com/2010/04/09/sessionscope-e-flushaction-no-castle-activerecord/</link>
		<comments>http://www.luizpicanco.com/2010/04/09/sessionscope-e-flushaction-no-castle-activerecord/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 03:21:51 +0000</pubDate>
		<dc:creator>Luiz Picanço</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[activerecord]]></category>
		<category><![CDATA[castle]]></category>
		<category><![CDATA[cshap]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[flush]]></category>
		<category><![CDATA[flushaction]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[persistence]]></category>

		<guid isPermaLink="false">http://www.luizpicanco.com/?p=131</guid>
		<description><![CDATA[O Castle ActiveRecord é uma implementação do padrão homônimo feita em cima nHibernate. Um ORM bastante conhecido no mundo Java. Apesar de alguns comportamentos serem realizados pelo nHibernate, estarei aqui citando o ActiveRecord como responsável por tais comportamentos. Um problema muito comum que eu costumo me deparar, é com a utilização de lazy loading no [...]]]></description>
			<content:encoded><![CDATA[<p>O Castle ActiveRecord é uma implementação do padrão homônimo feita em cima nHibernate. Um ORM bastante conhecido no mundo Java. Apesar de alguns comportamentos serem realizados pelo nHibernate, estarei aqui citando o ActiveRecord como responsável por tais comportamentos.</p>
<p>Um problema muito comum que eu costumo me deparar, é com a utilização de lazy loading no ActiveRecord.</p>
<p>Geralmente na utilização de lazy loading em aplicações web, é utilizado o padrão Session per Request para o SessionScope. Só que por padrão, o ActiveRecord persiste automaticamente (em algumas situações) as entidades, mesmo que seus métodos Save ou Update não tenham sido invocados. Isso costuma gerar uma série de problemas, como por exemplo, entidades com o seu estado interno inválido sendo persistido.</p>
<p>Para resolver esse problema, deve ser especificado o FlushAction como Never:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">SessionScope session <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SessionScope<span style="color: #000000;">&#40;</span>FlushAction.<span style="color: #0000FF;">Never</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>Assim, o ActiveRecord não irá mais persistir automaticamente as entidades. Em contrapartida, mesmo invocando os métodos Save ou Update as entidades não serão persistidas. Para que isso ocorra, será necessário utilizar os métodos SaveAndFlush e UpdateAndFlush, respectivamente, ou utilizar o método Flush da instância do SessionScope.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2010/04/09/sessionscope-e-flushaction-no-castle-activerecord/feed/</wfw:commentRss>
		<slash:comments>3044</slash:comments>
		</item>
		<item>
		<title>Obtendo as Properties pela ordem de declaração no C#</title>
		<link>http://www.luizpicanco.com/2009/08/18/obtendo-as-properties-pela-ordem-de-declaracao-no-c/</link>
		<comments>http://www.luizpicanco.com/2009/08/18/obtendo-as-properties-pela-ordem-de-declaracao-no-c/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 21:07:25 +0000</pubDate>
		<dc:creator>Luiz Picanço</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[reflection]]></category>

		<guid isPermaLink="false">http://www.luizpicanco.com/?p=106</guid>
		<description><![CDATA[Em alguns momentos, pode ser necessário obter a lista de properties de um objeto. Um jeito simples de fazer isso é: 1 2 3 4 private IEnumerable&#60;PropertyInfo&#62; GetProperties&#40;Type type&#41; &#123; return type.GetProperties&#40;&#41;; &#125; O problema é que, segundo a Microsoft, a ordem em que as properties são retornadas não é garantido: The GetProperties method does [...]]]></description>
			<content:encoded><![CDATA[<p>Em alguns momentos, pode ser necessário obter a lista de properties de um objeto. Um jeito simples de fazer isso é:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> IEnumerable<span style="color: #008000;">&lt;</span>PropertyInfo<span style="color: #008000;">&gt;</span> GetProperties<span style="color: #000000;">&#40;</span>Type type<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">return</span> type.<span style="color: #0000FF;">GetProperties</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>O problema é que, segundo a Microsoft, a ordem em que as properties são retornadas não é garantido:</p>
<blockquote><p>The GetProperties method does not return properties in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which properties are returned, because that order varies.</p></blockquote>
<p>Uma solução para resolver esse problema é ordenar a lista de properties pela property MetadataToken.</p>
<p>O código então, ficaria assim:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> IEnumerable<span style="color: #008000;">&lt;</span>PropertyInfo<span style="color: #008000;">&gt;</span> GetProperties<span style="color: #000000;">&#40;</span>Type type<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">return</span> type.<span style="color: #0000FF;">GetProperties</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">OrderBy</span><span style="color: #000000;">&#40;</span>p <span style="color: #008000;">=&gt;</span> p.<span style="color: #0000FF;">MetadataToken</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Se a intenção for obter as properties na ordem inversa, o código ficaria assim:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> IEnumerable<span style="color: #008000;">&lt;</span>PropertyInfo<span style="color: #008000;">&gt;</span> GetPropertiesDescending<span style="color: #000000;">&#40;</span>Type type<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">return</span> type.<span style="color: #0000FF;">GetProperties</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">OrderByDescending</span><span style="color: #000000;">&#40;</span>p <span style="color: #008000;">=&gt;</span> p.<span style="color: #0000FF;">MetadataToken</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>O ideal é que o seu código não dependa da ordem dos membros para executar, mas em alguns casos, como geração automática de código, isso pode ser útil.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2009/08/18/obtendo-as-properties-pela-ordem-de-declaracao-no-c/feed/</wfw:commentRss>
		<slash:comments>1625</slash:comments>
		</item>
		<item>
		<title>Client para twitter em .Net</title>
		<link>http://www.luizpicanco.com/2009/03/25/client-para-twitter-em-net/</link>
		<comments>http://www.luizpicanco.com/2009/03/25/client-para-twitter-em-net/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 04:30:30 +0000</pubDate>
		<dc:creator>Luiz Picanço</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.luizpicanco.com/2009/03/25/client-para-twitter-em-net/</guid>
		<description><![CDATA[Criei um client para twitter utilizando a plataforma .Net. Funcionalidades: Lista as mensagens dos seus amigos Lista os seus replies Lista as suas mensagens Adiciona novas mensagens A aplicação está funcional mas precisa de aprimoramentos no layout. Com o tempo vou atualizando. Screenshot da tela principal: Faça o download: Twitter.Net O código pode ser acessado [...]]]></description>
			<content:encoded><![CDATA[<p>Criei um client para twitter utilizando a plataforma .Net.</p>
<p>Funcionalidades:</p>
<ul>
<li>Lista as mensagens dos seus amigos</li>
<li>Lista os seus replies</li>
<li>Lista as suas mensagens</li>
<li>Adiciona novas mensagens</li>
</ul>
<p>A aplicação está funcional mas precisa de aprimoramentos no layout. Com o tempo vou atualizando.</p>
<p>Screenshot da tela principal:</p>
<div id="attachment_84" class="wp-caption alignnone" style="width: 1034px"><a href="http://www.luizpicanco.com/wp-content/uploads/2009/03/twitternet1.jpg"><img class="size-large wp-image-84" style="border: 0pt none;" title="twitternet1" src="http://www.luizpicanco.com/wp-content/uploads/2009/03/twitternet1-1024x455.jpg" alt="Twitter.Net Screenshot" width="1024" height="455" /></a><p class="wp-caption-text">Twitter.Net Screenshot</p></div>
<p>Faça o download:<br />
<a href="http://twitterclient.googlecode.com/files/TwitterNet.zip">Twitter.Net</a></p>
<p>O código pode ser acessado aqui:<br />
<a href="http://code.google.com/p/twitterclient/">twitterclient &#8211; Google Code</a></p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=dbb868ae-1d13-43e9-b0df-f72ff5404a60" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2009/03/25/client-para-twitter-em-net/feed/</wfw:commentRss>
		<slash:comments>2342</slash:comments>
		</item>
	</channel>
</rss>

