<?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>Motanet</title>
	<atom:link href="http://motanet.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://motanet.com.br</link>
	<description>Por uma web mais segura</description>
	<lastBuildDate>Mon, 21 Nov 2011 18:14:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Sql Like in Gae with Web2py</title>
		<link>http://motanet.com.br/python/sql-like-in-gae/</link>
		<comments>http://motanet.com.br/python/sql-like-in-gae/#comments</comments>
		<pubDate>Thu, 19 May 2011 19:05:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[GAE]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[GqlLike]]></category>
		<category><![CDATA[SQL LIKE]]></category>
		<category><![CDATA[web2py]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=332</guid>
		<description><![CDATA[Olá pessoal, estou aquin novamente para esclarecer algo que tem trazido muita dificuldade para quem trabalha com o GAE (Google App Engine), estou falando de filtros utilizando o &#8220;SQL LIKE&#8221;. Na verdade o GAE não dá suporte ao uso de consultas com o &#8220;like&#8221;, entretanto podemos minimizar a falta dele fazendo uma pesquisa com um]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, estou aquin novamente para esclarecer algo que tem trazido muita<br />
dificuldade para quem trabalha com o GAE (Google App Engine), estou falando<br />
de filtros utilizando o &#8220;SQL LIKE&#8221;.<br />
Na verdade o GAE não dá suporte ao uso de consultas com o &#8220;like&#8221;, entretanto<br />
podemos minimizar a falta dele fazendo uma pesquisa com um &#8220;falso like&#8221; onde<br />
o usuário poderá filtrar resultados que coicidam com o início do termo pesquisado.</p>
<h2>Exemplo utilizando GqlQuery like in gae.</h2>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">query = <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">str_POST</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'query'</span><span style="color: black;">&#93;</span>
queryEnd = query+<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\x</span>EF<span style="color: #000099; font-weight: bold;">\x</span>BF<span style="color: #000099; font-weight: bold;">\x</span>BD&quot;</span>.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
res = db.<span style="color: black;">GqlQuery</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'SELECT * FROM User WHERE name&gt;=:1 AND name&lt;=:2 ORDER BY nom DESC'</span>, query, queryEnd<span style="color: black;">&#41;</span></pre></div></div>

<h2>Agora outro exemplo utilizando o a sintaxe de consultas do web2py</h2>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># observe a utilização do decode('utf-8') na linha abaixo para permitir filtro com caracteres acentuados</span>
queryStart = request.<span style="color: #008000;">vars</span>.<span style="color: black;">search</span>.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
queryEnd = queryStart+<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\x</span>EF<span style="color: #000099; font-weight: bold;">\x</span>BF<span style="color: #000099; font-weight: bold;">\x</span>BD&quot;</span>.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
query =<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>db.<span style="color: black;">auth_user</span>.<span style="color: black;">email</span><span style="color: #66cc66;">&gt;</span>=queryStart<span style="color: black;">&#41;</span><span style="color: #66cc66;">&amp;</span><span style="color: black;">&#40;</span>db.<span style="color: black;">auth_user</span>.<span style="color: black;">email</span><span style="color: #66cc66;">&lt;</span>=queryEnd<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
res = db<span style="color: black;">&#40;</span>query<span style="color: black;">&#41;</span>.<span style="color: #dc143c;">select</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Como isto deve ser utilizado em várias partes do código, você pode criar uma<br />
pequena função que retorna o sql montado.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> like_query<span style="color: black;">&#40;</span>term, field<span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;
    Recebe o termo pesquisado 'term (string)' e o campo a pesquisar 'field (object)'
    e retorna o SQL que será utilizado com o objeto db()
    &quot;&quot;&quot;</span>
    queryStart = term.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
    queryEnd = queryStart+<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\x</span>EF<span style="color: #000099; font-weight: bold;">\x</span>BF<span style="color: #000099; font-weight: bold;">\x</span>BD&quot;</span>.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
    query =<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>field<span style="color: #66cc66;">&gt;</span>=queryStart<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;</span> <span style="color: black;">&#40;</span>field<span style="color: #66cc66;">&lt;</span>=queryEnd<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> query
&nbsp;
query = like_query<span style="color: black;">&#40;</span>request.<span style="color: #008000;">vars</span>.<span style="color: #008000;">filter</span>, db.<span style="color: black;">auth_user</span>.<span style="color: black;">full_name</span><span style="color: black;">&#41;</span></pre></div></div>

<p>O mais importante disto tudo, &#8220;Você pode pesquisar no gae sem precisar digitar todo o texto da pesquisa&#8221;</p>
<p>Galera, confesso que não foi fácil encontrar material para este post, e sei que<br />
muita gente vai precisar disto, então peço que postem algo que seja uma solução<br />
melhor ou até mesmo alternativa para utilização o like no gae.</p>
]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/python/sql-like-in-gae/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Form wizard com web2py</title>
		<link>http://motanet.com.br/python/form-wizard-com-web2py/</link>
		<comments>http://motanet.com.br/python/form-wizard-com-web2py/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 19:14:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[web2py]]></category>
		<category><![CDATA[custom form]]></category>
		<category><![CDATA[form wizard]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=320</guid>
		<description><![CDATA[Quem nunca precisou fazer um form wizard com web2py?, não?, então se prepare pois algum dia vai precisar, e quando precisar talvez você passe pelos mesmos problemas que passei ou pior. Felizmente eu sempre compartilho as soluções dos meus problemas pois certamente isso pode ajudar a muitos. Para este exemplo, vamos supor que você queira]]></description>
			<content:encoded><![CDATA[<p>Quem nunca precisou fazer um form wizard com web2py?, não?, então se prepare pois algum dia vai precisar, e quando precisar talvez você passe pelos mesmos problemas que passei ou pior.</p>
<p>Felizmente eu sempre compartilho as soluções dos meus problemas pois certamente isso pode ajudar a muitos.</p>
<p>Para este exemplo, vamos supor que você queira fazer um cadastro com dois ou mais passos (form wizard), com 4 campos (irei aproveitar a tabela padrão &#8220;auth_user&#8221;), são eles: &#8220;username, email, first_name, last_name&#8221; sendo que no primeiro passo teremos os campos username e email e no segundo passo os campos first_name e last_name.</p>
<h2>Controllers:</h2>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> step1<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    form=SQLFORM<span style="color: black;">&#40;</span>db.<span style="color: black;">auth_user</span>,fields=<span style="color: black;">&#91;</span><span style="color: #483d8b;">'username'</span>,<span style="color: #483d8b;">'email'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> form.<span style="color: black;">accepts</span><span style="color: black;">&#40;</span>request.<span style="color: #008000;">vars</span>, dbio=<span style="color: #008000;">False</span><span style="color: black;">&#41;</span>:
        session.<span style="color: black;">step1</span>=request.<span style="color: #008000;">vars</span>
        redirect<span style="color: black;">&#40;</span><span style="color: #483d8b;">'step2'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>form=form<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> step2<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    form=SQLFORM<span style="color: black;">&#40;</span>db.<span style="color: black;">auth_user</span>,fields=<span style="color: black;">&#91;</span><span style="color: #483d8b;">'username'</span>,<span style="color: #483d8b;">'email'</span>,<span style="color: #483d8b;">'first_name'</span>,<span style="color: #483d8b;">'last_name'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>    
    <span style="color: #ff7700;font-weight:bold;">if</span> request.<span style="color: black;">post_vars</span>:
        request.<span style="color: #008000;">vars</span>.<span style="color: black;">update</span><span style="color: black;">&#40;</span>session.<span style="color: black;">step1</span><span style="color: black;">&#41;</span>    
    <span style="color: #ff7700;font-weight:bold;">if</span> form.<span style="color: black;">accepts</span><span style="color: black;">&#40;</span>request.<span style="color: #008000;">vars</span><span style="color: black;">&#41;</span>:
        session.<span style="color: black;">flash</span>=T<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Dados gravados&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> redirect<span style="color: black;">&#40;</span><span style="color: #483d8b;">'index'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>form=form<span style="color: black;">&#41;</span></pre></div></div>

<h2>Views:</h2>
<h3>Step1</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span>extend <span style="color: #0000ff;">'layout.html'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>fieldset<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>legend<span style="color: #339933;">&gt;</span>Passo <span style="color: #cc66cc;">1</span><span style="color: #339933;">&lt;/</span>legend<span style="color: #339933;">&gt;</span>
&nbsp;
    <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span>begin<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #339933;">&lt;</span>div<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>label<span style="color: #339933;">&gt;</span>Username<span style="color: #339933;">&lt;/</span>label<span style="color: #339933;">&gt;</span>
        <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span>widget<span style="color: #339933;">.</span>username<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
&nbsp;
    <span style="color: #339933;">&lt;</span>div<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>label<span style="color: #339933;">&gt;</span>Email<span style="color: #339933;">&lt;/</span>label<span style="color: #339933;">&gt;</span>
        <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span>widget<span style="color: #339933;">.</span>email<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
&nbsp;
    <span style="color: #339933;">&lt;</span>div<span style="color: #339933;">&gt;</span>
    <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span>submit<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
    <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span><span style="color: #990000;">end</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">&lt;/</span>fieldset<span style="color: #339933;">&gt;</span></pre></div></div>

<h3>Step2</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span>extend <span style="color: #0000ff;">'layout.html'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>fieldset<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>legend<span style="color: #339933;">&gt;</span>Passo <span style="color: #cc66cc;">2</span><span style="color: #339933;">&lt;/</span>legend<span style="color: #339933;">&gt;</span>
&nbsp;
    <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span>begin<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #339933;">&lt;</span>div<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>label<span style="color: #339933;">&gt;</span>First name<span style="color: #339933;">&lt;/</span>label<span style="color: #339933;">&gt;</span>
        <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span>widget<span style="color: #339933;">.</span>first_name<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
&nbsp;
    <span style="color: #339933;">&lt;</span>div<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>label<span style="color: #339933;">&gt;</span>Last name<span style="color: #339933;">&lt;/</span>label<span style="color: #339933;">&gt;</span>
        <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span>widget<span style="color: #339933;">.</span>last_name<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
&nbsp;
    <span style="color: #339933;">&lt;</span>div<span style="color: #339933;">&gt;</span>
    <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span>submit<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
    <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">=</span>form<span style="color: #339933;">.</span>custom<span style="color: #339933;">.</span><span style="color: #990000;">end</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">&lt;/</span>fieldset<span style="color: #339933;">&gt;</span></pre></div></div>

<h2>Realmente é bem simples, a mágica aqui é a seguinte:</h2>
<p>- No step1, definimos apenas os fields=['username','email'] para o SQLFORM e dbio=False para o form.accepts, desta forma iremos exibir apenas os dois campos descritos em fields e quando o formulário for submetido, os dados não serão salvos pois o dbio está definido como False.</p>
<p>- Criei também uma variável de sessão session.step1 e atribui o request.vars para ela, é desta forma que os dados serão passados para o segundo método (step2) através do método redirect(&#8216;step2&#8242;).</p>
<p>- Outro detalhe importante  que no step2, definimos todos os fields=['username','email','first_name','last_name'], sendo que os dois primeiros, já estarão preenchidos pois o usuário fez isso no passo um. O mais importante aqui é não exibir estes campos na view.</p>
<p>- Como os dados submetidos pelo step1 estão na sessão, lembra?, iremos atualizar o request.vars com estes dados, mas somente quando o usuário submeter no step2, fizemos isso através do comando</p>
<pre>
if request.post_vars:
        request.vars.update(session.step1)
</pre>
<p>- E para finalizar, o comando form.accepts do step2 se encarrega de fazer toda a validação e também gravar os dados no banco, veja que não definimos o dbio e o padrão dele é True (gravar no db).</p>
<p>Espero que seja útil, até a próxima.</p>
]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/python/form-wizard-com-web2py/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Validação de email com PHP</title>
		<link>http://motanet.com.br/php/validacao-de-email-com-php/</link>
		<comments>http://motanet.com.br/php/validacao-de-email-com-php/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 13:26:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[expressão regular]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[validar email]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=316</guid>
		<description><![CDATA[Eis uma simples função para validação de e-mail com php, utilizando expressão regular. function valid_mail&#40;$email&#41;&#123; $pattern = '/^[A-Z0-9._%-+]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z]{2,6}$/i'; return preg_match&#40;$pattern, $email&#41; &#125; Uso: if valid_mail&#40;&#34;ldmotta@motanet.com.br&#34;&#41;&#123; bla... bla... bla... &#125;]]></description>
			<content:encoded><![CDATA[<p>Eis uma simples função para validação de e-mail com php, utilizando expressão regular.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> valid_mail<span style="color: #009900;">&#40;</span><span style="color: #000088;">$email</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$pattern</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/^[A-Z0-9._%-+]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z]{2,6}$/i'</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pattern</span><span style="color: #339933;">,</span> <span style="color: #000088;">$email</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Uso:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> valid_mail<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ldmotta@motanet.com.br&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    bla<span style="color: #339933;">...</span> bla<span style="color: #339933;">...</span> bla<span style="color: #339933;">...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/php/validacao-de-email-com-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CBT Nuggets &#8211; Programação Python vídeo training</title>
		<link>http://motanet.com.br/python/cbt-nuggets-programacao-python-video-training/</link>
		<comments>http://motanet.com.br/python/cbt-nuggets-programacao-python-video-training/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 16:31:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[cbt nuggets]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=300</guid>
		<description><![CDATA[CBT Nuggets (http://www.cbtnuggets.com) lançou um conjunto de vídeos de treinamento que abrange área de trabalho e desenvolvimento de aplicações web através da utilização da linguagem de programação Python. CBT Nuggets (http://www.cbtnuggets.com) lançou um vídeo de treinamento direcionado para aqueles que pretendem aprender a linguagem de programação Python. Esta série de vídeos inclui desktop / desenvolvimento]]></description>
			<content:encoded><![CDATA[<p>CBT Nuggets (<a href="http://www.cbtnuggets.com" target="_blank">http://www.cbtnuggets.com</a>) lançou um conjunto de vídeos de treinamento que abrange área de trabalho e desenvolvimento de aplicações web através da utilização da linguagem de programação Python.</p>
<p>CBT Nuggets (<a href="http://www.cbtnuggets.com" target="_blank">http://www.cbtnuggets.com</a>) lançou um vídeo de treinamento direcionado para aqueles que pretendem aprender a linguagem de programação Python.</p>
<p>Esta série de vídeos inclui desktop / desenvolvimento de aplicações web, a utilização de Python para automação e excelentes habilidades para os interessados na busca de uma carreira em programação. Além disso, a cobertura está incluído nos tipos de dados diferentes, manipulação de arquivos, estruturas de dados e programação modular e orientada a objetos.</p>
<p>Este CBT Nuggets Python é ministrado por especialistas programador Tim Warner e inclui 11 horas de instrução em 20 segmentos de vídeo. Os vídeos são curtos, 20-40 minutos.</p>
<p>Dan Charbonneau, CEO e fundador da CBT Nuggets, comentou: &#8220;Os programadores precisam ser extremamente flexíveis na aplicação de diferentes línguagens. Tendo uma outra ferramenta em seu cinto nunca é demais, e nossos treinamentos Python é um ótimo lugar para começar a expandir sua base de conhecimento. Você será capaz de programar em Python em todas as plataformas e tem uma vantagem sobre Java, Perl, C # e Ruby. &#8221;</p>
<p>Vídeos de amostra da Formação Python estão disponíveis para consulta no site da CBT Nuggets, fornecendo exemplos da alta qualidade de ensino e estilo CBT Nuggets de treinamento.</p>
<p>CBT Nuggets também fornece treinamento completo para os exames de certificação da Microsoft ®, CompTIA ® e Cisco ®, além de vários outros fornecedores de certificação profissional. O treinamento é desenhado para oferecer precisão técnica em conjunto com analogias do mundo real para promover a compreensão para iniciantes e experts.</p>
<p>CBT Nuggets é o líder em treinamento de certificação baseado em vídeo de TI. Baseado em Eugene, Oregon, a empresa foi fundada em 1999 e está empenhada em oferecer qualidade de vídeos de formação para a indústria de tecnologia da informação. Para obter mais informações, visite <a href="http://www.cbtnuggets.com?promo=PR" target="_blank">http://www.cbtnuggets.com?promo=PR</a></p>
<p>Para a versão original em visita PRWeb: <a href="http://www.prweb.com/releases/prweb2011/01/prweb4985804.htm" target="_blank">http://www.prweb.com/releases/prweb2011/01/prweb4985804.htm</a></p>
<p>Fonte: PRWEB</p>
]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/python/cbt-nuggets-programacao-python-video-training/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web2py Custom Form</title>
		<link>http://motanet.com.br/python/web2py-custom-form/</link>
		<comments>http://motanet.com.br/python/web2py-custom-form/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 14:52:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[custom form]]></category>
		<category><![CDATA[custom register]]></category>
		<category><![CDATA[web2py custom form]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=267</guid>
		<description><![CDATA[Custom register form web2py Olá a todos. Um grande problema enfrentado por muitos no framework Web2py, refere-se a construção de formulários personalizados de Login e Cadastro. Hoje o Python é a minha primeira linguagem de programação, e adoro programar utilizando o web2py, é ótimo ter a possibilidade de utilização dos formulários padrão de login e]]></description>
			<content:encoded><![CDATA[<h2>Custom register form web2py</h2>
<p>Olá a todos.<br />
Um grande problema enfrentado por muitos no framework Web2py, refere-se a construção de formulários personalizados de Login e Cadastro.</p>
<p>Hoje o Python é a minha primeira linguagem de programação, e adoro programar utilizando o web2py, é ótimo ter a possibilidade de utilização dos formulários padrão de login e register deste framework, mas quando se trata de implementação de layout, muitos programadores não sabem por onde começar.</p>
<p>Vou dar um exemplo de construção de um formulário de cadastro personalizado e &#8220;engravatado&#8221;, como diria um amigo da visie.</p>
<h3>Primeiro o Controller</h3>
<p>Considerando que os campos &#8220;email,first_name,last_name e password&#8221; estejam na tabela auth_user, faça:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> register<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    form = auth.<span style="color: black;">register</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    form.<span style="color: black;">element</span><span style="color: black;">&#40;</span>_name=<span style="color: #483d8b;">'email'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'_class'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;campo_email&quot;</span>
    form.<span style="color: black;">element</span><span style="color: black;">&#40;</span>_name=<span style="color: #483d8b;">'first_name'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'_class'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;campo_nome&quot;</span>
    form.<span style="color: black;">element</span><span style="color: black;">&#40;</span>_name=<span style="color: #483d8b;">'last_name'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'_class'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;campo_sobrenome&quot;</span>
    form.<span style="color: black;">element</span><span style="color: black;">&#40;</span>_name=<span style="color: #483d8b;">'password'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'_class'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;campo_senha&quot;</span>
    form.<span style="color: black;">element</span><span style="color: black;">&#40;</span>_name=<span style="color: #483d8b;">'password_two'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'_class'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;campo_confirmacao&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>form=form<span style="color: black;">&#41;</span></pre></div></div>

<p>Acima estamos definindo classes para os campos personalizados</p>
<h3>Agora a View</h3>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>extend <span style="color: #483d8b;">'layout.html'</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span>
<span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>=form.<span style="color: black;">custom</span>.<span style="color: black;">begin</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #66cc66;">&lt;</span>fieldset<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>legend<span style="color: #66cc66;">&gt;&lt;</span>/legend<span style="color: #66cc66;">&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;</span>div<span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>label<span style="color: #66cc66;">&gt;</span>Seu nome:<span style="color: #66cc66;">&lt;</span>/label<span style="color: #66cc66;">&gt;</span>
            <span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>=form.<span style="color: black;">custom</span>.<span style="color: black;">widget</span>.<span style="color: black;">first_name</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&lt;</span>/div<span style="color: #66cc66;">&gt;</span>
&nbsp;
&nbsp;
<span style="color: #66cc66;">&lt;</span>div<span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>label<span style="color: #66cc66;">&gt;</span>Sobrenome:<span style="color: #66cc66;">&lt;</span>/label<span style="color: #66cc66;">&gt;</span>
            <span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>=form.<span style="color: black;">custom</span>.<span style="color: black;">widget</span>.<span style="color: black;">last_name</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&lt;</span>/div<span style="color: #66cc66;">&gt;</span>
&nbsp;
&nbsp;
<span style="color: #66cc66;">&lt;</span>div<span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>label<span style="color: #66cc66;">&gt;</span>Email:<span style="color: #66cc66;">&lt;</span>/label<span style="color: #66cc66;">&gt;</span>
            <span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>=form.<span style="color: black;">custom</span>.<span style="color: black;">widget</span>.<span style="color: #dc143c;">email</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&lt;</span>/div<span style="color: #66cc66;">&gt;</span>
&nbsp;
&nbsp;
<span style="color: #66cc66;">&lt;</span>div<span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>label<span style="color: #66cc66;">&gt;</span>Senha:<span style="color: #66cc66;">&lt;</span>/label<span style="color: #66cc66;">&gt;</span>
            <span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>=form.<span style="color: black;">custom</span>.<span style="color: black;">widget</span>.<span style="color: black;">password</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&lt;</span>/div<span style="color: #66cc66;">&gt;</span>
&nbsp;
&nbsp;
<span style="color: #66cc66;">&lt;</span>div<span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>label<span style="color: #66cc66;">&gt;</span>Confirme a senha:<span style="color: #66cc66;">&lt;</span>/label<span style="color: #66cc66;">&gt;</span>
            <span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>=form.<span style="color: black;">element</span><span style="color: black;">&#40;</span>_name=<span style="color: #483d8b;">'password_two'</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span><span style="color: #66cc66;">&lt;</span>/div<span style="color: #66cc66;">&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;</span>div <span style="color: #ff7700;font-weight:bold;">class</span>=<span style="color: #483d8b;">&quot;checkbox&quot;</span><span style="color: #66cc66;">&gt;</span>
            <span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>=form.<span style="color: black;">element</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>INPUT<span style="color: black;">&#40;</span>_type=<span style="color: #483d8b;">'checkbox'</span>, _name=<span style="color: #483d8b;">'termos'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span>
            <span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>=form.<span style="color: black;">element</span><span style="color: black;">&#40;</span>_name=<span style="color: #483d8b;">'termos'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'requires'</span><span style="color: black;">&#93;</span>=IS_NOT_EMPTY<span style="color: black;">&#40;</span>error_message=T<span style="color: black;">&#40;</span><span style="color: #483d8b;">'Aceite os termos do contrato'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            <span style="color: #66cc66;">&lt;</span>label<span style="color: #66cc66;">&gt;</span>Li e aceito <span style="color: #dc143c;">os</span> <span style="color: #66cc66;">&lt;</span>a href=<span style="color: #483d8b;">&quot;#&quot;</span><span style="color: #66cc66;">&gt;</span>termos de uso<span style="color: #66cc66;">&lt;</span>/a<span style="color: #66cc66;">&gt;&lt;</span>/label<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>/div<span style="color: #66cc66;">&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;</span>/fieldset<span style="color: #66cc66;">&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;</span>fieldset <span style="color: #ff7700;font-weight:bold;">class</span>=<span style="color: #483d8b;">&quot;submit&quot;</span><span style="color: #66cc66;">&gt;&lt;</span>legend<span style="color: #66cc66;">&gt;&lt;</span>/legend<span style="color: #66cc66;">&gt;</span>
            <span style="color: #66cc66;">&lt;</span>button<span style="color: #66cc66;">&gt;</span>Cadastrar<span style="color: #66cc66;">&lt;</span>/button<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>/fieldset<span style="color: #66cc66;">&gt;</span>
&nbsp;
<span style="color: black;">&#123;</span><span style="color: black;">&#123;</span>=form.<span style="color: black;">custom</span>.<span style="color: black;">end</span><span style="color: black;">&#125;</span><span style="color: black;">&#125;</span></pre></div></div>

<p>Aqui é simples, criei a estrutura do html normalmente, e onde quero que apareça os objetos de formulário (input,textarea,select etc) digito:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">{{=form.custom.widget.nome_do_campo}}</pre></div></div>

<p>Caso queira adicionar um novo objeto digito o html normalmente, como foi feito com o botão submit.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;button&gt;Cadastrar&lt;/button&gt;</pre></div></div>

<p>Outra coisa muito importante, é a possibilidade de inclusão de campos extra no formulário. Na linha abaixo, estou incluindo um objeto de formulário que não faz parte do auth.register().</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">{{=form.element().append(INPUT(_type='checkbox', _name='termos'))}}</pre></div></div>

<p>Podemos também incluir validação para o campo extra.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">{{=form.element(_name='termos')['requires']=IS_NOT_EMPTY(error_message=T('Aceite os termos do contrato'))</pre></div></div>

<p>Até aqui tudo bem, acesse a url da sua aplicação ex: http://0.0.0.0:8000/teste/default/register e o formulário de cadastro será renderizado perfeitamente.</p>
<p><a href="http://motanet.com.br/wp-content/uploads/2011/01/Captura_de_tela-2.png"><img class="alignnone size-medium wp-image-283" title="formulario de cadastro" src="http://motanet.com.br/wp-content/uploads/2011/01/Captura_de_tela-2-300x129.png" alt="" width="300" height="129" /></a></p>
<p>Desta forma toda a validação padrão do formulário estará funcionando corretamente, mesmo a que verifica se as senhas conferem (inclusive muita gente teve problemas com isso).<br />
Caso queira modificar as mensagens de erro, acesse o arquivo &#8220;/applications/sua_aplicacao/models/db.py&#8221; e defina as regras de validação da seguinte forma</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">auth.<span style="color: black;">messages</span>.<span style="color: black;">mismatched_password</span> = <span style="color: #483d8b;">&quot;Senha não confere&quot;</span>
db.<span style="color: black;">auth_user</span>.<span style="color: black;">password</span>.<span style="color: black;">requires</span> = CRYPT<span style="color: black;">&#40;</span>key=auth.<span style="color: black;">settings</span>.<span style="color: black;">hmac_key</span><span style="color: black;">&#41;</span>
db.<span style="color: black;">auth_user</span>.<span style="color: black;">password</span>.<span style="color: black;">requires</span> = IS_NOT_EMPTY<span style="color: black;">&#40;</span>error_message=T<span style="color: black;">&#40;</span><span style="color: #483d8b;">'Digite a sua senha'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
db.<span style="color: black;">auth_user</span>.<span style="color: black;">first_name</span>.<span style="color: black;">requires</span> = IS_NOT_EMPTY<span style="color: black;">&#40;</span>error_message=T<span style="color: black;">&#40;</span><span style="color: #483d8b;">'Digite o seu nome'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
db.<span style="color: black;">auth_user</span>.<span style="color: black;">last_name</span>.<span style="color: black;">requires</span> = IS_NOT_EMPTY<span style="color: black;">&#40;</span>error_message=T<span style="color: black;">&#40;</span><span style="color: #483d8b;">'Digite o seu sobrenome'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
db.<span style="color: black;">auth_user</span>.<span style="color: #dc143c;">email</span>.<span style="color: black;">requires</span> = <span style="color: black;">&#40;</span>IS_EMAIL<span style="color: black;">&#40;</span>error_message=T<span style="color: black;">&#40;</span><span style="color: #483d8b;">'E-mail inválido'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>, IS_NOT_IN_DB<span style="color: black;">&#40;</span>db, db.<span style="color: black;">auth_user</span>.<span style="color: #dc143c;">email</span>,error_message=T<span style="color: black;">&#40;</span><span style="color: #483d8b;">'E-mail já cadastrado'</span><span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Done!</p>
<p>Ao preencher o formulário e submeter, os dados serão gravados no banco com sucesso.</p>
<p>Entretanto se você precisa de mais interação no formulário, aconselho utilizar a forma comun, que seria criar o formulário no controller utilizando o método FORM() e os helpres para html (TABLE, TR, TD, DIV etc.), retornar o formulário para a view e imprimir a variável que contém o formulário, e ao submeter, capture os dados utilizando o if form.accepts(request.vars, session): salva os dados&#8230;</p>
<p>Espero ter ajudado, espero que possam retribuir com comentários.</p>
<p>[]</p>
]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/python/web2py-custom-form/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Substituir quebra de linha com javascript</title>
		<link>http://motanet.com.br/javascript/substituir-quebra-de-linha-com-javascript/</link>
		<comments>http://motanet.com.br/javascript/substituir-quebra-de-linha-com-javascript/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 17:50:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=263</guid>
		<description><![CDATA[Dica rápída! - Como substituir quebra de linha por qualquer caractere utilizando javascript // Strip out all line breaks. function substitueQuebradelinha&#40;strMultiLineText, replaceWith=&#34;&#34;&#41;&#123; var strSingleLineText = strMultiLineText.replace&#40;new RegExp&#40; &#34;\\n&#34;, &#34;g&#34; &#41;,replaceWith&#41;; return strSingleLineText; &#125; &#160; // Para utilizar faça assim: var texto=&#34;Meu texto com quebras de linha&#34;; substitueQuebradelinha&#40;texto, &#34;&#34;&#41;;]]></description>
			<content:encoded><![CDATA[<p>Dica rápída!<br />
- Como substituir quebra de linha por qualquer caractere utilizando javascript</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Strip out all line breaks.</span>
<span style="color: #003366; font-weight: bold;">function</span> substitueQuebradelinha<span style="color: #009900;">&#40;</span>strMultiLineText<span style="color: #339933;">,</span> replaceWith<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> strSingleLineText <span style="color: #339933;">=</span> strMultiLineText.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;g&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>replaceWith<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> strSingleLineText<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// Para utilizar faça assim:</span>
<span style="color: #003366; font-weight: bold;">var</span> texto<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;Meu 
texto 
com quebras 
de linha&quot;</span><span style="color: #339933;">;</span>
substitueQuebradelinha<span style="color: #009900;">&#40;</span>texto<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/javascript/substituir-quebra-de-linha-com-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simulando tabindex com jquery</title>
		<link>http://motanet.com.br/javascript/simulando-tabindex-com-jquery/</link>
		<comments>http://motanet.com.br/javascript/simulando-tabindex-com-jquery/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 20:10:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=251</guid>
		<description><![CDATA[$&#40;'.campo'&#41;.keypress&#40;function&#40;e&#41;&#123; op = &#40;e.shiftKey&#41; ? -1 : 1; if &#40;e.keyCode==9&#41;&#123; $&#40;this&#41;.blur&#40;function&#40;&#41;&#123; nextindex = parseInt&#40;$&#40;this&#41;.attr&#40;'tabindex'&#41;&#41; + op getfocus = $&#40;'input[index='+ String&#40;nextindex&#41; + ']'&#41; getfocus.focus&#40;&#41; getfocus.select&#40;&#41; &#125; &#125;&#41;]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.campo'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">keypress</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    op <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">shiftKey</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span> <span style="color: #339933;">:</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">keyCode</span><span style="color: #339933;">==</span><span style="color: #CC0000;">9</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">blur</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        nextindex <span style="color: #339933;">=</span> parseInt<span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tabindex'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> op
        getfocus <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'input[index='</span><span style="color: #339933;">+</span> String<span style="color: #009900;">&#40;</span>nextindex<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">']'</span><span style="color: #009900;">&#41;</span>
        getfocus.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        getfocus.<span style="color: #660066;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/javascript/simulando-tabindex-com-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O Novo Campus Online</title>
		<link>http://motanet.com.br/extra/o-novo-campus-online/</link>
		<comments>http://motanet.com.br/extra/o-novo-campus-online/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 13:32:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Extra]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=239</guid>
		<description><![CDATA[Olá pessoal, está dica realmente é D+ Se você trabalha, estuda ou apenas gosta de desenvolvimento web, o Campus Online não pode faltar no seu Delicious ou na sua lista de favoritos. O site está totalmente modificado para dar ao usuário a melhor experiência online. Com vídeos tutoriais sobre diversos assuntos, entre eles Python, Tableless e]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, está dica realmente é D+</p>
<p>Se você trabalha, estuda ou apenas gosta de desenvolvimento web, o <a title="Campus Online" href="http://campus.visie.com.br/default/canal/tableless" target="_blank">Campus Online</a> não pode faltar no seu <a title="Delicious" href="http://del.icio.us" target="_blank">Delicious</a> ou na sua lista de favoritos.</p>
<p>O site está totalmente modificado para dar ao usuário a melhor experiência online. Com vídeos tutoriais sobre diversos assuntos, entre eles Python, Tableless e Ajax e uma infinidade de textos e artigos técnicos, desenvolvimento iPhone e muito mais.</p>
<p>O Campus Online realmente é uma fonte de informações sobre padrões web e programação. Os assuntos são compostos por textos e vídeos, explicados de forma simples e didática.</p>
<p>Acesse o <a title="Campus Online" href="http://campus.visie.com.br/default/canal/tableless" target="_blank">Campus Online</a> e divirta-se.</p>
]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/extra/o-novo-campus-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mini-tutorial Git</title>
		<link>http://motanet.com.br/python/mini-tutorial-git/</link>
		<comments>http://motanet.com.br/python/mini-tutorial-git/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 18:58:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=233</guid>
		<description><![CDATA[Entenda o Git O Git, diferente do subversion, por exemplo, não é um repositório de dados centralizado. Assim, cada pessoa que trabalha no mesmo projeto terá uma cópia completa do repositório, portanto, as operções comuns de um repositório de dados são feitas localmente. Isso dá a liberdade total para o usuário trabalhar com o repositório]]></description>
			<content:encoded><![CDATA[<h3>Entenda o Git</h3>
<p>O Git, diferente do subversion, por exemplo, não é um repositório de  dados centralizado. Assim, cada pessoa que trabalha no mesmo projeto  terá uma cópia completa do repositório, portanto, as operções comuns de  um repositório de dados são feitas localmente. Isso dá a liberdade total  para o usuário trabalhar com o repositório como quiser, criando  branches, fazendo merges, etc&#8230; Ao final do processo, ele pode enviar  um branch mais bem trabalhado e testado ao repositório remoto.</p>
<p>Referência: <a title="http://akitaonrails.com/2008/10/2/entendendo-git-e-instalando-gitorious-git-via-web" rel="nofollow" href="http://akitaonrails.com/2008/10/2/entendendo-git-e-instalando-gitorious-git-via-web">http://akitaonrails.com/2008/10/2/entendendo-git-e-instalando-gitorious-git-via-web</a></p>
<p><a id="Usando_o_Git_na_linha_de_comando" name="Usando_o_Git_na_linha_de_comando"></a></p>
<h3>Usando o Git na linha de comando</h3>
<p><a id="Criando_um_novo_reposit.C3.B3rio" name="Criando_um_novo_reposit.C3.B3rio"></a></p>
<h4>Criando um novo repositório</h4>
<ul>
<li> Para as suas atualizações no repositório ficarem identificadas, configure o .gitconf na sua home:</li>
</ul>
<pre>       [user]
               name = seu nome
               email = seu email</pre>
<ul>
<li> Crie o repositório</li>
</ul>
<pre>       $ mkdir projeto
       $ cd projeto
       $ git init      # inicia o repositório
       $ git add .     # inclui todos os arquivos no repositório
       $ git commit    # submete as suas mudanças e abre um arquivo texto para você comentá-las
       $ git log       # mostra o histórico de mudanças no repositório</pre>
<p><a id="Branching_e_merging" name="Branching_e_merging"></a></p>
<h4>Branching e merging</h4>
<ul>
<li> Criando um novo branch:</li>
</ul>
<pre>       $ git branch novo-branch</pre>
<ul>
<li> Para vizualizar os branches:</li>
</ul>
<pre>       $ git branch</pre>
<p>O (*) mostra o branch em que você está trabalhando atualmente. Para escolher o branch que você criou:</p>
<pre>       $ git checkout novo-branch</pre>
<p>Agora, voce pode editar o que quiser. Para adicionar suas mudanças ao master:</p>
<pre>       $ git checkout master   # volte ao branch principal
       $ git merge novo-branch</pre>
<p>Se houver conflitos, vai ter que resolvê-los. A primeira vez, instale  a sua ferramenta &#8220;diff&#8221;, meld por exemplo, e fale para git usá-la para  resolver os conflitos:</p>
<pre>       $ sudo apt-get install meld
       $ git config --global merge.tool meld</pre>
<p>Agora, pode fazer</p>
<pre>       $git mergetool
       $git commit</pre>
<p><a id="Tornando_um_reposit.C3.B3rio_p.C3.BAblico" name="Tornando_um_reposit.C3.B3rio_p.C3.BAblico"></a></p>
<h4>Tornando um repositório público</h4>
<ul>
<li> Suponha que o seu repositório esteja em ~/projeto e você quer torna-lo público:</li>
</ul>
<pre>       $ git clone --bare ~/projeto projeto.git
       $ touch ~/projeto/projeto.git/git-daemon-export-ok</pre>
<p>Pronto, agora você tem um diretório chamado projeto.git que pode disponibilizado para outras pessoas.</p>
<p><a id="Editando_um_reposit.C3.B3rio_remotamente" name="Editando_um_reposit.C3.B3rio_remotamente"></a></p>
<h4>Editando um repositório remotamente</h4>
<ul>
<li> Copie o repositório</li>
</ul>
<pre>       $ git clone ssh://host/caminho/projeto.git   # cria uma cópia local do repositório.</pre>
<ul>
<li> Trabalhe como quiser e, se precisar, atualize o seu repositório local:</li>
</ul>
<pre>       $ git pull ssh://host/caminho/projeto.git</pre>
<ul>
<li> Para atualizar o repositório remoto:</li>
</ul>
<pre>       $ git push ssh://host/caminho/projeto.git master   # master é o nome do branch que deseja atualizar</pre>
<p>Um manual mais detalhado: <a title="http://www.akitaonrails.com/2008/4/3/micro-tutorial-de-git" rel="nofollow" href="http://www.akitaonrails.com/2008/4/3/micro-tutorial-de-git">http://www.akitaonrails.com/2008/4/3/micro-tutorial-de-git</a></p>
<p>Manual completo: <a title="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html" rel="nofollow" href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html">http://www.kernel.org/pub/software/scm/git/docs/user-manual.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/python/mini-tutorial-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verificando tipos</title>
		<link>http://motanet.com.br/python/verificando-tipos/</link>
		<comments>http://motanet.com.br/python/verificando-tipos/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 15:28:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://motanet.com.br/?p=230</guid>
		<description><![CDATA[Olá, aqui vai uma dica rápida e bem útil. Como verificar tipos de objetos em python >>> type('texto') is str True >>> type('123') is str True >>> type(123) is str False >>> type([1,2,3]) is list True >>> type(42) is int True]]></description>
			<content:encoded><![CDATA[<p>Olá, aqui vai uma dica rápida e bem útil.</p>
<h3>Como verificar tipos de objetos em python</h3>
<p><code><br />
>>> type('texto') is str<br />
True<br />
>>> type('123') is str<br />
True<br />
>>> type(123) is str<br />
False<br />
>>> type([1,2,3]) is list<br />
True<br />
>>> type(42) is int<br />
True<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://motanet.com.br/python/verificando-tipos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

