<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Blog Fábio Vedovelli</title>
	
	<link>http://blog.vedovelli.com.br</link>
	<description>Posts relacionados principalmente a desenvolvimento de interfaces para sistemas web</description>
	<lastBuildDate>Sat, 13 Apr 2013 13:16:29 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BlogFbioVedovelli" /><feedburner:info uri="blogfbiovedovelli" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Utilizar ZendAMF com Laravel 3</title>
		<link>http://blog.vedovelli.com.br/?p=2118</link>
		<comments>http://blog.vedovelli.com.br/?p=2118#comments</comments>
		<pubDate>Sat, 13 Apr 2013 12:37:37 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[AMF]]></category>
		<category><![CDATA[ZendAMF]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2118</guid>
		<description><![CDATA[Bem, com meu histórico de amor e ódio com o Flex Framework (mais amor, diga-se), uma das primeiras tentativas de integração Laravel foi com o ZendAMF, implementação do protocolo AMF feita pela equipe Zend. Foi necessário gastar um pouco de tempo com pesquisa, mas no final a integração foi tranquila. Uma das características do Laravel [...]]]></description>
				<content:encoded><![CDATA[<p>Bem, com meu histórico de amor e ódio com o Flex Framework (mais amor, diga-se), uma das primeiras tentativas de integração Laravel foi com o ZendAMF, implementação do protocolo AMF feita pela equipe Zend.</p>
<p>Foi necessário gastar um pouco de tempo com pesquisa, mas no final a integração foi tranquila. Uma das características do Laravel que o fazem ser tão bom é a facilidade de integração com bibliotecas externas. Sabendo disso, bastou iniciar a integração, entender os pulos-do-gato e correr para o abraço.</p>
<p>Segue o roteiro, passo a passo:</p>
<p>1) O primeiro foi imaginar onde eu poderia acomodar a biblioteca. A pasta /application/libraries seria uma boa escolha, porém, como o ZendAMF é um pouco complexo, com diversas classes e pastas, optei por criar um bundle. Adotei esta abordagem por dois motivos: sendo um bundle, as classes do ZendAMF ficariam a disposição do Laravel (e vice-versa) e o bundle possui o arquivo start.php, que é executado cada vez que o bundle é executado.</p>
<div id="attachment_2119" class="wp-caption aligncenter" style="width: 560px"><a href="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/001.png"><img class="size-medium wp-image-2119 " alt="Item 1" src="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/001-550x110.png" width="550" height="110" /></a><p class="wp-caption-text">Item 1</p></div>
<p>2) Uma vez que a library foi adicionada na pasta /bundles, é necessário informar ao Laravel que o bundle existe e precisa ser executado. Isso é feito no arquivo /application/bundles.php.</p>
<div id="attachment_2120" class="wp-caption aligncenter" style="width: 560px"><a href="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/002.png"><img class="size-medium wp-image-2120 " alt="Item 2 - informar ao Laravel que o bundle precisa ser iniciado" src="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/002-550x225.png" width="550" height="225" /></a><p class="wp-caption-text">Item 2 &#8211; informar ao Laravel que o bundle precisa ser iniciado</p></div>
<p>3) Agora, no arquivo start.php do bundle, adiciona-se a pasta library do ZendAMF ao class path do PHP. Isso é um tanto estranho, mas o ZendAMF é meio estúpido com includes. Melhor não brigar com gente estúpida. Utilizando a classe Autoloader do Laravel, adiciona-se os diretórios do Bundle que se precisa ter acesso pelo Laravel.</p>
<div id="attachment_2121" class="wp-caption aligncenter" style="width: 560px"><a href="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/003.png"><img class="size-medium wp-image-2121" alt="" src="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/003-550x297.png" width="550" height="297" /></a><p class="wp-caption-text">Item 3) Adiciona-se a pasta library ao class path do PHP</p></div>
<p>4) Agora é preciso criar uma URL para funcionar como gateway para chamadas a partir do Flex. Para simplificar as coisas, criei uma rota diretamente no arquivo application/routes.php, chamando-a de &#8216;/amf&#8217; e ali no closure, criei uma instância do ZendAMF Server. Será ali também que abrirei acesso às classes que serão acessadas pelo Flex (VOs incluídos). É importante notar que a rota responderá a uma chamada POST, que é o verbo HTTP utilizado pelo RemoteObject do Flex. Para utilizar, basta colocar sua URL no RemoteObject do Flex. Ex.: endpoint=&#8221;http://&lt;sua_url&gt;/amf&#8221;.</p>
<div id="attachment_2122" class="wp-caption aligncenter" style="width: 560px"><img class="size-medium wp-image-2122" alt="Item 4) Cria-se a rota e nela o server AMF" src="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/004-550x285.png" width="550" height="285" /><p class="wp-caption-text">Item 4) Cria-se a rota e nela o server AMF</p></div>
<p>5) Para manter nosso código organizado, criaremos nossas classes expostas ao Flex dentro de nosso bundle. Como estamos trabalhando com Laravel, todas as classes deste estão disponíveis para o bundle, sem que se precise fazer nada especial. No exemplo abaixo, foi utilizado um model chamado Produto, que estende Eloquent.</p>
<div id="attachment_2123" class="wp-caption aligncenter" style="width: 560px"><a href="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/005.1.png"><img class="size-medium wp-image-2123" alt="" src="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/005.1-550x291.png" width="550" height="291" /></a><p class="wp-caption-text">Item 5) A classe exposta ao Flex</p></div>
<p>6) Para finalizar (e este passo é opcional), é preciso adicionar à resposta que esta é do tipo AMF. Ter ou não esta informação não faz qualquer diferença ao Flex, porém, se você utiliza para debug uma ferramenta como Charles Proxy, este não exibe corretamente os dados caso o Content-Type não se passado como application/x-amf. Para isso, basta criar na rota &#8216;/amf&#8217; um filtro do tipo after e ali determinar o Content-Type.</p>
<div id="attachment_2126" class="wp-caption aligncenter" style="width: 560px"><a href="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/006.png"><img class="size-medium wp-image-2126 " alt="Item 6) Adiciona-se o Content-Type à resposta HTTP" src="http://blog.vedovelli.com.br/wp-content/uploads/2013/04/006-550x300.png" width="550" height="300" /></a><p class="wp-caption-text">Item 6) Adiciona-se o Content-Type à resposta HTTP</p></div>
<p>E é isso!</p>
<p>Vale lembrar que o mesmo procedimento pode ser utilizado para outros componentes do Zend Framework. Basta tentar!</p>
<p>Grande abraço,</p>
<p>Vedovelli</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2118</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Laravel Framework: conditional assets</title>
		<link>http://blog.vedovelli.com.br/?p=2105</link>
		<comments>http://blog.vedovelli.com.br/?p=2105#comments</comments>
		<pubDate>Wed, 13 Mar 2013 13:53:39 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Asset]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2105</guid>
		<description><![CDATA[A big concern related to front end performance is the burden brought by javascript includes, which tend to be big in size. Fortunately there are techniques and best practices to minimize this issue. Loading javascript files (and why not CSS files&#8230;) during navigation can be a very good idea. Laravel Framework has a class to [...]]]></description>
				<content:encoded><![CDATA[<p>A big concern related to front end performance is the burden brought by javascript includes, which tend to be big in size. Fortunately there are techniques and best practices to minimize this issue. Loading javascript files (and why not CSS files&#8230;) during navigation can be a very good idea.</p>
<p>Laravel Framework <a href="http://laravel.com/docs/views/assets">has a class to manage assets</a> that allows you, among other things, to load Javascript and CSS files only when needed. All you have to do is use <a href="http://laravel.com/docs/views/assets#asset-containers">asset containers</a>. Add a new file to a container and it (the file) will be loaded when the route is called and the action is executed. Let&#8217;s take a look how it works from within a controller.</p>
<p>Let&#8217;s assume we have an asset container being registered and its assets being loaded in the layout file (layout.blade.php):</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
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt; ?php
<span style="display:block;background-color: #ffc;">  // Register the files
</span><span style="display:block;background-color: #ffc;">  Asset::container('custom')-&gt;add('CustomJS', 'js/custom.js');
</span>  Asset::container('custom')-&gt;add('CustomCSS', 'css/custom.css');
?&gt;
&lt; !doctype html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;/&gt;
<span style="display:block;background-color: #ffc;">	&lt;title&gt;Title&lt;/title&gt;
</span><span style="display:block;background-color: #ffc;">        &lt;!--dump assets to HTML--&gt;
</span>  	{{ Asset::container('custom')-&gt;styles() }}
	{{ Asset::container('custom')-&gt;scripts() }}
&lt;/head&gt;
&lt;body&gt;
...
&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></div>

<p>Now we have a javascript with instructions related to <strong>products</strong> only. We create a filter <strong>before</strong> in the controller:</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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Product_Controller <span style="color: #000000; font-weight: bold;">extends</span> Base_Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span>__contruct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">// Aplicar o filtro apenas nestas actions</span>
<span style="display:block;background-color: #ffc;">        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'before'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'addAssetsToProducts'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">only</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'new'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'get'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> </span>    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> action_new<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #339933;">...</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>And in the <strong>routes.php</strong> we add the filter behavior:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">Route<span style="color: #339933;">::</span><span style="color: #004000;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'addAssetsToProducts'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="display:block;background-color: #ffc;">    Asset<span style="color: #339933;">::</span><span style="color: #004000;">container</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;custom&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;products&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;js/products.js&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>When both actions <strong>new</strong> or <strong>get</strong> are executed, the file <strong>js/product.js</strong> (in this case stored in /public/js) will be inserted in our layout file and only for those actions.</p>
<p>Best!</p>
<p>Ved</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2105</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Laravel Framework: assets condicionais</title>
		<link>http://blog.vedovelli.com.br/?p=2085</link>
		<comments>http://blog.vedovelli.com.br/?p=2085#comments</comments>
		<pubDate>Tue, 12 Mar 2013 23:08:57 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2085</guid>
		<description><![CDATA[Uma das grandes preocupações de performance na interface do usuário é a carga trazida pelos includes Javascript, que tendem a ser grandes. Felizmente existem técnicas e boas práticas para minimizar o problema. Carregar arquivos javascript (e pq não folhas de estilos) durante a navegação pode se mostrar um coringa no seu desenvolvimento. O Laravel Framework possui [...]]]></description>
				<content:encoded><![CDATA[<p>Uma das grandes preocupações de performance na interface do usuário é a carga trazida pelos includes Javascript, que tendem a ser grandes. Felizmente existem técnicas e boas práticas para minimizar o problema. Carregar arquivos javascript (e pq não folhas de estilos) durante a navegação pode se mostrar um coringa no seu desenvolvimento.</p>
<p>O Laravel Framework <a href="http://laravel.com/docs/views/assets">possui uma classe para gerenciar assets</a> que lhe permite, entre outras coisas, carregar aquivos Javascript e CSS conforme se precisa deles. Basta utilizar o recurso de <em><a href="http://laravel.com/docs/views/assets#asset-containers">asset containers</a>. </em>Adicione um novo arquivo a um container e ele (o arquivo) será carregado quando o link da funcionalidade for requisitada. Vejamos como funciona a partir de um controller.</p>
<p>Supondo que se tenha um <em>asset container</em> sendo carregado no arquivo de layout (layout.blade.php) da aplicação:</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
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt; ?php
<span style="display:block;background-color: #ffc;">  Asset::container('custom')-&gt;add('CustomJS', 'js/custom.js');
</span><span style="display:block;background-color: #ffc;">  Asset::container('custom')-&gt;add('CustomCSS', 'css/custom.css');
</span>?&gt;
&lt; !doctype html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;/&gt;
	&lt;title&gt;Titulo&lt;/title&gt;
<span style="display:block;background-color: #ffc;">  	{{ Asset::container('custom')-&gt;styles() }}
</span><span style="display:block;background-color: #ffc;">	{{ Asset::container('custom')-&gt;scripts() }}
</span>&lt;/head&gt;
&lt;body&gt;
...
&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></div>

<p>Agora imagine que no controller <strong>produtos</strong>, se tenha um javascript cujo conteúdo seja relevantes apenas para a funcionalidade de <strong>produtos</strong>. Basta criar um filtro <strong>before</strong> no <em>controller</em>:</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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Produtos_Controller <span style="color: #000000; font-weight: bold;">extends</span> Base_Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span>__contruct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">// Aplicar o filtro apenas nestas actions</span>
<span style="display:block;background-color: #ffc;">        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'before'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'addAssetsToProducts'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">only</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'new'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'get'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> </span>    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> action_new<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #339933;">...</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>E no routes.php:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">Route<span style="color: #339933;">::</span><span style="color: #004000;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'addAssetsToProducts'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="display:block;background-color: #ffc;">    Asset<span style="color: #339933;">::</span><span style="color: #004000;">container</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;custom&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;produtos&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;js/produtos.js&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Com isso, quando as actions <strong><em>new</em></strong> e <em><strong>get</strong></em> do <em>controller</em> <strong>produtos</strong> forem executadas, o javascript <strong>js/produtos.js</strong> (salvo em /public/js) será inserido no layout da aplicação e apenas para estas actions.</p>
<p>Grande abraço!</p>
<p>Ved</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2085</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP Console: mais uma ferramenta para ajudar no desenvolvimento de apps</title>
		<link>http://blog.vedovelli.com.br/?p=2083</link>
		<comments>http://blog.vedovelli.com.br/?p=2083#comments</comments>
		<pubDate>Sat, 09 Mar 2013 15:11:24 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[php console]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2083</guid>
		<description><![CDATA[Eu frequentemente utilizo print_r() para ver o estado da informação naquele momento da execução, por diversos motivos. Quando se trata de uma API, recorro à gravação de arquivos texto no filesystem com a informação que preciso analisar (pense em chamadas AJAX que não podem ser quebradas). Certamente minha solução é um tanto mambembe e que, [...]]]></description>
				<content:encoded><![CDATA[<p>Eu frequentemente utilizo <a href="http://php.net/print_r">print_r()</a> para ver o estado da informação naquele momento da execução, por diversos motivos. Quando se trata de uma API, recorro à gravação de arquivos texto no filesystem com a informação que preciso analisar (pense em chamadas AJAX que não podem ser quebradas). Certamente minha solução é um tanto mambembe e que, apesar de desconfortável, tem me atendido bem. Hoje me deparei com um serviço chamado PHP Console (<a href="http://phpconsole.com">http://phpconsole.com</a>) que com um único include PHP lhe provê com diversos métodos que fazem o output dos seus dados no site do serviço. Achei uma boa proposta, pois você pode manter um histórico dos seus prints.</p>
<p>Já existe inclusive um package para Laravel 4: <a href="https://github.com/Prologue/Phpconsole/">https://github.com/Prologue/Phpconsole/</a></p>
<p>Para entender bem, veja o curto video abaixo:</p>
<p><iframe src="http://player.vimeo.com/video/58393977" height="342" width="500" allowfullscreen="" frameborder="0"></iframe></p>
<p><a href="http://vimeo.com/58393977">phpconsole &#8211; Getting Started</a> from <a href="http://vimeo.com/user16102920">Support Phpconsole</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2083</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screencast: Laravel e operações CRUD</title>
		<link>http://blog.vedovelli.com.br/?p=2080</link>
		<comments>http://blog.vedovelli.com.br/?p=2080#comments</comments>
		<pubDate>Tue, 05 Mar 2013 16:12:56 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[CRUD]]></category>
		<category><![CDATA[Eloquent]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2080</guid>
		<description><![CDATA[Neste screencast serão abordadas as 4 operações básicas para o gerenciamento de informações e o armazenamento em banco de dados: Create, Read, Update and Delete, também conhecidas pela sigla CRUD. Os recursos do framework utilizados durante o screencast foram: Models e relacionamentos ORM Controllers Templates Filtros Caso queira fazer o download do video, utilize este [...]]]></description>
				<content:encoded><![CDATA[<p>Neste screencast serão abordadas as 4 operações básicas para o gerenciamento de informações e o armazenamento em banco de dados: <em>Create</em>, <em>Read</em>, <em>Update</em> and <em>Delete</em>, também conhecidas pela sigla <em>CRUD</em>.</p>
<p>Os recursos do framework utilizados durante o screencast foram:</p>
<ul>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Models e relacionamentos</span></li>
<li><span style="line-height: 1.714285714; font-size: 1rem;">ORM</span></li>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Controllers</span></li>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Templates</span></li>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Filtros</span></li>
</ul>
<p><iframe src="http://www.youtube.com/embed/-MzeHPiQbmg" height="315" width="560" allowfullscreen="" frameborder="0"></iframe><br />
Caso queira fazer o download do video, utilize este link: <a href="http://bit.ly/15vbgpW">http://bit.ly/15vbgpW</a></p>
<p>Se encontrar alguma informação incorreta, por gentileza, me avise! vedovelli@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2080</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screencast: Laravel – Templates</title>
		<link>http://blog.vedovelli.com.br/?p=2078</link>
		<comments>http://blog.vedovelli.com.br/?p=2078#comments</comments>
		<pubDate>Tue, 05 Mar 2013 16:10:27 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Blade]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Templates]]></category>
		<category><![CDATA[Views]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2078</guid>
		<description><![CDATA[No terceiro video da série, você encontrará uma demonstração sobre os recursos de template do Laravel.]]></description>
				<content:encoded><![CDATA[<p>No terceiro video da série, você encontrará uma demonstração sobre os recursos de template do Laravel.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/BPYU5r3N2sc" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2078</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Screencast: Laravel e o padrão MVC</title>
		<link>http://blog.vedovelli.com.br/?p=2076</link>
		<comments>http://blog.vedovelli.com.br/?p=2076#comments</comments>
		<pubDate>Tue, 05 Mar 2013 16:04:42 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Contrller]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[View]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2076</guid>
		<description><![CDATA[Inicio este post agradecendo a todos pelo excelente feedback dado ao primeiro screencast (link) da série Laravel. Fiz tudo certinho, pois não apontaram nada! =D Neste segundo vídeo, falo brevemente sobre o padrão de projeto MVC (Model, View, Controller) e sua implementação no Laravel. Caso queira fazer o download do video, utilize este link: http://bit.ly/VqbmOC [...]]]></description>
				<content:encoded><![CDATA[<p>Inicio este post agradecendo a todos pelo excelente feedback dado ao primeiro screencast (<a href="http://blog.vedovelli.com.br/?p=2067">link</a>) da série Laravel. Fiz tudo certinho, pois não apontaram nada! =D</p>
<p>Neste segundo vídeo, falo brevemente sobre o padrão de projeto MVC (Model, View, Controller) e sua implementação no Laravel.</p>
<p><iframe src="http://www.youtube.com/embed/TB8iLFxm7dM" height="315" width="560" allowfullscreen="" frameborder="0"></iframe></p>
<p>Caso queira fazer o download do video, utilize este link: <a href="http://bit.ly/VqbmOC">http://bit.ly/VqbmOC</a></p>
<p>Se encontrar alguma informação incorreta, por gentileza, me avise! vedovelli@gmail.com</p>
<p>E para quem está ansioso pela terceira parte, saiba que será sobre <strong>templates</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2076</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Screencast: introdução ao Laravel PHP Framework</title>
		<link>http://blog.vedovelli.com.br/?p=2067</link>
		<comments>http://blog.vedovelli.com.br/?p=2067#comments</comments>
		<pubDate>Wed, 30 Jan 2013 17:00:13 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Screencast]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2067</guid>
		<description><![CDATA[Este screencast de 30 minutos lhe dará uma visão geral sobre o Laravel framework. É o primeiro de uma série, que já tem o segundo vídeo gravado, este tratando do tema MVC. Caso queira fazer o download do video, utilize este link: http://bit.ly/WpDY8K Se encontrar alguma informação incorreta, por gentileza, me avise! vedovelli@gmail.com Um forte abraço, [...]]]></description>
				<content:encoded><![CDATA[<p>Este screencast de 30 minutos lhe dará uma visão geral sobre o Laravel framework. É o primeiro de uma série, que já tem o segundo vídeo gravado, este tratando do tema MVC.<span id="more-2067"></span></p>
<p><iframe src="http://www.youtube.com/embed/D4NcDvJN4CY?list=UU1PUtdA_NktdtmRpF_UGG_w" height="315" width="560" allowfullscreen="" frameborder="0"></iframe></p>
<p>Caso queira fazer o download do video, utilize este link: <a href="http://bit.ly/WpDY8K">http://bit.ly/WpDY8K</a></p>
<p>Se encontrar alguma informação incorreta, por gentileza, me avise! vedovelli@gmail.com</p>
<p>Um forte abraço,</p>
<p><strong>Vedovelli</strong></p>
<p><a href="http://twitter.com.br/vedovelli">http://twitter.com.br/vedovelli</a><br />
<a href="http://blog.vedovelli.com.br">http://blog.vedovelli.com.br</a><br />
<a href="http://youtube.com/vedovelli">http://youtube.com/vedovelli</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2067</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cuecas (uma reflexão)</title>
		<link>http://blog.vedovelli.com.br/?p=2055</link>
		<comments>http://blog.vedovelli.com.br/?p=2055#comments</comments>
		<pubDate>Mon, 10 Dec 2012 11:00:22 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Qualidade de Vida]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2055</guid>
		<description><![CDATA[Na fila do caixa do Free Shop do aeroporto de GRU vi um rapaz comprando 3 pacotes de Marlboro, do vermelho. Imediatamente me veio ao pensamento uma única palavra, associada a meu passado: REFÉM. Nicotina, pessoas, comida, álcool, comportamentos, sentimentos, cheque especial e rotina! Quantas amarras mantive voluntariamente durante anos. E uma coisa corriqueira como [...]]]></description>
				<content:encoded><![CDATA[<p>Na fila do caixa do Free Shop do aeroporto de GRU vi um rapaz comprando 3 pacotes de Marlboro, do vermelho. Imediatamente me veio ao pensamento uma única palavra, associada a meu passado: REFÉM.</p>
<blockquote><p>Nicotina, pessoas, comida, álcool, comportamentos, sentimentos, cheque especial e rotina!</p></blockquote>
<p>Quantas amarras mantive voluntariamente durante anos. E uma coisa corriqueira como a visão de um fumante se abastecendo conseguiu me lembrar do quanto mudei.</p>
<p>Hoje num almoço requintado, no qual servia-se bons vinhos e whisky de primeira qualidade, ao ser indagado o que beberia, não titubeei : <em><strong>&#8220;- Bebo água, de preferência com gás&#8221;</strong></em>. A possibilidade de eu ir à qualquer lugar e não encontrar água para beber é remota e atualmente é só o que preciso para ser feliz. E sem renegar nada. Sempre fiz questão de ser bêbado conhecido.</p>
<p>Diversão nas melhores capitais do sudeste brasileiro muitas vezes inclui shopping center e este possui a famigerada praça de alimentação, com seu McDonalds sempre lotado. Minha esposa aprendeu rapido: primeiro alimente a criatura para manter o mau humor na caverna. No caso, o meu humor. Já repararam em quanto comemos mais do que precisamos? E quanto dinheiro se gasta em restaurantes, sem qualquer controle de qualidade sobre o que se ingere. Quando analisei friamente fiquei assustado&#8230;. E tomei uma providência. Ainda não é hora de dizer o que fiz, mas que se registre que agi.</p>
<p>E com a mesma rapidez com que divaguei na fila do caixa, voltei a atenção para o que estava a fazer ali. Enquanto o moço estava garantindo mais um estoque de amarras, sorri imaginando o quanto minha vida está mais fácil, preocupado apenas em pagar pelas cuecas Calvin Klein que me dei de presente.</p>
<p>Esteja bem.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2055</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Treino – Bike – 04.12.2012</title>
		<link>http://blog.vedovelli.com.br/?p=2046</link>
		<comments>http://blog.vedovelli.com.br/?p=2046#comments</comments>
		<pubDate>Tue, 04 Dec 2012 17:42:19 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Treino]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2046</guid>
		<description />
				<content:encoded><![CDATA[<p><iframe style='background-color: transparent;' frameborder='0' marginwidth='0' marginheight='0' scrolling='no' width='650' height='500' src='http://www.sports-tracker.com/widgets/wdgt_workout.html?username=vedovelli&#038;workout_key=5c5vk7um0c9qnl7h'></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2046</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Insight</title>
		<link>http://blog.vedovelli.com.br/?p=2041</link>
		<comments>http://blog.vedovelli.com.br/?p=2041#comments</comments>
		<pubDate>Thu, 15 Nov 2012 16:51:39 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2041</guid>
		<description><![CDATA[Durante o lançamento recente de um produto online e após certo tempo sem ter participado de um lançamento, percebi uma coisa: &#8220;- O cliente não fica irritado com erros no projeto, pois isso é esperado. Ele se irrita sim quando lhe pergunta por que o erro ocorreu e você não sabe responder. Quando a resposta [...]]]></description>
				<content:encoded><![CDATA[<p>Durante o lançamento recente de um produto online e após certo tempo sem ter participado de um lançamento, percebi uma coisa:</p>
<blockquote><p>&#8220;- O cliente não fica irritado com erros no projeto, pois isso é esperado. Ele se irrita sim quando lhe pergunta por que o erro ocorreu e você não sabe responder. Quando a resposta é imediata e firme, mostrando que você o projeto fresco na mente, o cliente se sente seguro de que o problema não vai mais ocorrer&#8221;.</p></blockquote>
<p>É claro que um pouco de <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a> não fará mal algum! <img src='http://blog.vedovelli.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2041</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O que há de melhor em desenvolvimento frontend na atualidade, num único set de slides</title>
		<link>http://blog.vedovelli.com.br/?p=2036</link>
		<comments>http://blog.vedovelli.com.br/?p=2036#comments</comments>
		<pubDate>Sat, 27 Oct 2012 13:26:51 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2036</guid>
		<description><![CDATA[Palestra de Zeno Rocha na QCon São Paulo 2012. Os mitos do desenvolvimento front-end from Zeno Rocha]]></description>
				<content:encoded><![CDATA[<p>Palestra de <a href="https://twitter.com/zenorocha">Zeno Rocha</a> na <a href="http://qconsp.com/">QCon São Paulo 2012</a>.</p>
<p><iframe style="border: 1px solid #CCC; border-width: 1px 1px 0; margin-bottom: 5px;" src="http://www.slideshare.net/slideshow/embed_code/14907946" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="700" height="500"></iframe></p>
<div style="margin-bottom: 5px;"><strong> <a title="Os mitos do desenvolvimento front-end" href="http://www.slideshare.net/zenorocha/os-mitos-do-desenvolvimento-frontend" target="_blank">Os mitos do desenvolvimento front-end</a> </strong> from <strong><a href="http://www.slideshare.net/zenorocha" target="_blank">Zeno Rocha</a></strong></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2036</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RIA Labs: manter-se atualizado não é fácil #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=2026</link>
		<comments>http://blog.vedovelli.com.br/?p=2026#comments</comments>
		<pubDate>Tue, 23 Oct 2012 19:51:51 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[sem categoria]]></category>
		<category><![CDATA[Mercado]]></category>
		<category><![CDATA[RIA Labs]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2026</guid>
		<description><![CDATA[Quando a Adobe soltou a bomba sobre nossas cabeças em novembro de 2011, anunciando de forma desastrada a transferência do desenvolvimento do Flex Framework para a Apache Foundation confesso que pessoalmente senti certo alívio. Como desenvolvedor Flex profissional eu já vinha discordando da política da Adobe de se aproximar dos designers, ao invés de investir na [...]]]></description>
				<content:encoded><![CDATA[<p>Quando a <a href="http://blogs.adobe.com/flex/2011/11/your-questions-about-flex.html">Adobe soltou a bomba sobre nossas cabeças</a> em novembro de 2011, anunciando de forma desastrada a transferência do desenvolvimento do Flex Framework para a <a href="http://incubator.apache.org/flex/">Apache Foundation</a> confesso que pessoalmente senti certo alívio. Como desenvolvedor Flex profissional eu já vinha discordando da política da Adobe de se aproximar dos designers, ao invés de investir na melhoria dos componentes existentes e criação de novos componentes. Não me entenda mal: a <strong>arquitetura</strong> <strong>Spark</strong>, <strong>MXMLG</strong> e os<strong> s:States</strong> fazem toda a diferença, mas iniciativas como <strong>Flash Catalyst</strong> ou a <strong>associação de componentes a fontes externas de dados através de wizards</strong> foram um desastre e perda de tempo. E o mundo então trancou o Flex no porão&#8230;</p>
<p>Todos os desenvolvedores Flex que conheço (inclusive eu) foram atrás de outras tecnologias (entenda: <strong>framework</strong>, pois em interface é Actionscript ou Javascript). O que encontramos? O MUNDO! Principalmente o mundo sendo dominado pelo Javascript e pelos projetos <em>opensource</em>. Excelente! Muita coisa para aprender e usar, imediatamente, sem precisar aprender algo completente novo. Eu nunca deixei JS de lado e sempre fui apaixonado por jQuery e isso me deu uma vantagem grande, não frente aos demais devs (não estou numa competição) mas com relação ao mercado, que passou a demandar <em>&#8220;um único desenvolvimento (entenda por &#8216;conta a ser paga&#8217;) para rodar em todos os devices&#8221;. </em></p>
<p>O problema é que minha empresa nasceu por causa do Flex e para a equipe foi um choque ter que se adaptar a uma nova forma de desenvolver interfaces, novos problemas a serem resolvidos, novas ciladas a ficar atento. Pior do que isso, foi ter perdido a comodidade de uma IDE fantástica (Flash Builder) e o uso de um único framework, precisando virar uma espécie de<em> &#8220;pescador de plugins jQuery&#8221;</em>.</p>
<p>No final das contas, encontramos vantagens e desvantagens. É a vida!</p>
<p>Bem, agora sabemos que o Flex não é um bêbado rolando a ladeira, mas já fizemos a nossa virada! Atualmente, a <a href="http://www.rialabs.com.br/">RIA Labs</a> está muito adaptada ao mundo HTML/CSS/JS e ganhando <em>skills</em> rapidamente. Continuamos mantendo sistemas legados em Flex e acabamos de fechar um contrato de 8 meses para (re)desenvolver um produto cujo desenvolvimento nos tomou todo o ano de 2011. <strong>Era Flex, será HTML</strong>. Já nasceu bem enquadrado num iPad e com um pé nos smartphones.</p>
<p>Felizmente o Flex nos foi uma excelente escola e conceitos que só agora atingem a grande maioria dos desenvolvedores, tais como <em><strong>data binding</strong></em> e <em><strong>dependency injection</strong></em> já nos são velhos companheiros, graças ao profissionalismo dos desenvolvedores Flex. A vocês, nosso muito obrigado!</p>
<p>E como tudo atualmente gira em torno de <strong>agilidade</strong> e <strong>testes</strong>, fizemos outra mudança, deixando o PHP de lado (mas não abandonado) e adotamos o <strong>Ruby e o Rails</strong> como linguagem e framework <em>server side.</em> Já que é para modernizar, que seja em todas as frentes!</p>
<p>E que venham os novos tempos, meus amigos!</p>
<p>Um grande abraço.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2026</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Treina Tom, surpresa boa #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=2019</link>
		<comments>http://blog.vedovelli.com.br/?p=2019#comments</comments>
		<pubDate>Mon, 24 Sep 2012 14:51:34 +0000</pubDate>
		<dc:creator>vedovelli</dc:creator>
				<category><![CDATA[Opinião]]></category>
		<category><![CDATA[Treinamento]]></category>
		<category><![CDATA[Curso]]></category>
		<category><![CDATA[e-Genial]]></category>
		<category><![CDATA[EAD]]></category>
		<category><![CDATA[Treina Tom]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2019</guid>
		<description><![CDATA[Este post tem a intenção de ser um agradecimento e uma crítica. Primeiro as más notícias. A Adobe continua sendo uma empresa cretina e pela qual eu tenho certo desprezo. Mesmo depois de tantos anos, aparentemente ainda não dá a mínima para os clientes da América do Sul. Isso sempre foi um problema e motivo [...]]]></description>
				<content:encoded><![CDATA[<p>Este post tem a intenção de ser um <strong>agradecimento</strong> e uma <strong>crítica</strong>. Primeiro as más notícias.</p>
<p>A Adobe continua sendo uma <strong>empresa cretina</strong> e pela qual eu tenho certo desprezo. Mesmo depois de tantos anos, aparentemente ainda não dá a mínima para os clientes da América do Sul. Isso sempre foi um problema e motivo de reclamação por parte de clientes, inclusive grandes.</p>
<p>Nos meus mais recentes treinamentos, venho utilizando o <strong>Adobe Connect</strong>, produto que aprendi a gostar, principalmente pela possibilidade de compartilhar a tela toda, somente uma janela ou ainda parte de uma janela. O restante dos recursos são triviais e não merecem destaque. Eu vinha utilizando salas criadas pela <a href="http://www.schoolofnet.com/jquery">escola parceira</a> nos cursos de jQuery. Para o <a href="http://www.cursoflex.com.br">curso de Flex</a>, que é uma iniciativa apenas minha, tentei contratar o Connect para ministrar os cursos e na última hora, depois de <strong>3 tentativas frustradas de assinar o serviço</strong> e <strong>2 solicitações de contato por parte do departamento de vendas da Adobe</strong> (sem qualquer retorno, sequer uma mensagem automática), fui socorrido pelo Carlos Eduardo da <a href="http://www.egenial.com/">E-genial</a>, que me cedeu uma sala do seu <a href="http://www.treinatom.com.br/pt/">TreinaTom</a> para que eu pudesse ministrar meu curso.</p>
<p style="text-align: center;"><img class="size-large wp-image-2021 aligncenter" style="border: 1px solid black;" title="24-09-2012 11-51-55" src="http://blog.vedovelli.com.br/wp-content/uploads/2012/09/24-09-2012-11-51-55-1024x490.png" alt="" width="584" height="279" /></p>
<p>Agora é que entra o agradecimento em forma de elogio:  eu já estava acostumado com o ambiente do produto por ter ministrado no passado recente alguns cursos pela <a href="http://www.egenial.com">E-genial</a>. Mas muito me <strong>surpreendeu o aumento da qualidade do compartilhamento de tela</strong>. Está mais estável e com área de captura maior, apesar de ainda não permitir a tela toda. <strong>Nenhum aluno reclamou de áudio picotando</strong>, o que é inédito no uso de software de EAD. Realmente fiquei muito feliz!</p>
<p><a href="http://www.twitter.com/egenial">Migu</a>, obrigado pela gentileza.</p>
<p>Ved</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2019</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft teve 1 hora de minha atenção #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=2008</link>
		<comments>http://blog.vedovelli.com.br/?p=2008#comments</comments>
		<pubDate>Wed, 19 Sep 2012 13:41:26 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Metro]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[Windows8]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=2008</guid>
		<description><![CDATA[Tenho utilizado bastante a app do GitHub para Windows [link], que foi desenvolvida utilizando a nova interface dos produtos Windows: Metro. Quando a instalei, de cara me senti bastante confortável com a interface lisa e efeitos discretos. Pensei: &#8220;- Ohhhh: o pessoal do GitHub tem bom gosto! =D&#8221;. Pouco tempo depois, me dei conta de [...]]]></description>
				<content:encoded><![CDATA[<p>Tenho utilizado bastante a app do <strong>GitHub para Windows </strong>[<a href="http://windows.github.com/">link</a>], que foi desenvolvida utilizando a nova interface dos produtos Windows: Metro. Quando a instalei, de cara me senti bastante confortável com a interface lisa e efeitos discretos. Pensei: <em>&#8220;- Ohhhh: o pessoal do GitHub tem bom gosto! =D&#8221;. </em>Pouco tempo depois, me dei conta de que o bom gosto é na verdade o <em>look and feel</em> Metro.</p>
<!--START SIMPLEVIEWER EMBED-->
<script type="text/javascript">
	var flashvars1 = {};
	flashvars1.galleryURL = "http://blog.vedovelli.com.br/wp-content/plugins/wp-simpleviewer/gallery.php?gallery_id=1";
	simpleviewer.ready(function () {
		simpleviewer.load("sv-container1", "100%", "600px", "222222", true, flashvars1);
	});
</script>
<div id="sv-container1"></div>
<!--END SIMPLEVIEWER EMBED-->
<p>Eis que hoje de manhã me deparei com um video de 1 hora e alguma coisa, de uma apresentação oficial sobre como desenvolver aplicativos Metro utilizando HTML5/CSS3/Javascript e como estou bastante interessado em tudo o que diz respeito a essa trinca, fui conferir o video.</p>
<p>Eis o link: <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DEV366">http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DEV366</a></p>
<p>O que encontrei me deixou bastante empolgado. Sei que existem outras formas de desenvolver para Windows 8, como C# por exemplo, mas de cara ficou óbvio que, ao trazer para o desenvolvimento para Windows os web standards, a Microsoft aumentou muito a quantidade de desenvolvedores que podem se interessar em desenvolver para Windows e os desenvolvedores web ganharam um mercado gigantesco para explorar. Está clara a relação ganha-ganha nesta história. O melhor de tudo foi perceber que, no meu caso, eu não teria que aprender algo completamente novo: posso continuar a trabalhar com as tecnologias que amo: HTML/CSS/JS. Obviamente que existe muita coisa proprietária da MS neste pacote, mas como o alvo aqui não são o browsers e sim apps desktop/tablets/smartphones, pode-se usar sem medo &#8220;<em>aquela transição CSS 3D que vc ficou apaixonado dias atrás</em>&#8220;.</p>
<p>Durante a apresentação fiquei com a sensação de que a Microsoft fez &#8220;um Flex&#8221; que não depende do Flash Player. Não é lindo??? Isso pq existe uma suite de componentes de interface de usuário, de comunicação e utilitários na SDK, da mesma forma que o Flex tem, só que baseados em standards. E isso muito me agrada.</p>
<p>O único ponto que me broxou foi o <em>one-way data binding</em>. Qual a dificuldade em trazer <em>two-way</em> para algo que teve tanto esforço para ser desenvolvido?</p>
<p>Bem, assim que eu tiver um tempinho, instalarei o Windows 8 + o Visual Studio 2012 para começar a explorar esta nova possibilidade. Como eu já disse antes, <strong>tecnologia boa é aquela que paga as minhas contas</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=2008</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AngularJS: o primeiro componente a gente nunca esquece! #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1987</link>
		<comments>http://blog.vedovelli.com.br/?p=1987#comments</comments>
		<pubDate>Thu, 13 Sep 2012 22:34:32 +0000</pubDate>
		<dc:creator>vedovelli</dc:creator>
				<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[jQuery Plugin]]></category>
		<category><![CDATA[Interface de Usuário]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1987</guid>
		<description><![CDATA[Caso não faça idéia do que seja o AngularJS, existe um screencast com uma introdução aqui: http://blog.vedovelli.com.br/?p=1946 Ao cair de paraquedas no mundo Javascript, vindo do mundo do Flex, a primeira coisa que senti falta foi a ausência do data binding. Mais ainda, do two-way data binding. Uma rápida explicação: Quando se tem a disposição do [...]]]></description>
				<content:encoded><![CDATA[<p>Caso não faça idéia do que seja o AngularJS, existe um screencast com uma introdução aqui: <a href="http://blog.vedovelli.com.br/?p=1946">http://blog.vedovelli.com.br/?p=1946</a></p>
<p>Ao cair de paraquedas no mundo Javascript, vindo do mundo do Flex, a primeira coisa que senti falta foi a ausência do <em><strong>data binding</strong></em>. Mais ainda, do <em><strong>two-way data binding</strong></em>. Uma rápida explicação:</p>
<blockquote><p>Quando se tem a disposição do two-way data binding, sua preocupação volta-se apenas para a informação, que está ligada (bind) ao um elemento de interface de usuário que a representa. Quando uma mudança é feita na informação, é refletida no elemento de interface. Quando é o elemento que recebe a mudança, esta é refletida na informação. Nenhum acesso ao elemento precisa ser feito para mudar seu valor.</p></blockquote>
<p>A segunda ausência sentida foi a possibilidade de<strong> rapidamente desenvolver componentes de interface personalizados e utiliza-los em diversos projetos</strong>, coisa corriqueira quando desenvolvendo com Flex. Os plugins para jQuery fazem este papel e são relativamente fáceis de desenvolver, porém, é necessária bastante expertise para chegar a um resultado satisfatório. Finalizando, o uso do plugin de jQuery deve ser feito na programação e não de forma declarativa, <em>HTML style, </em>coisa que gosto muito.</p>
<p><strong>AngularJS: a forma declarativa é como escrever HTML!</strong></p>
<p>Bem, ao utilizar seu documento HTML como template, o <strong>AngularJS</strong> (<a href="http://angularjs.org/">http://angularjs.org/</a>) faz, após o parse do browser, o seu próprio parse da marcação HTML, procurando por elementos conhecidos do framework, para transforma-los em qualquer coisa que vc tenha determinado. Estes elementos são as <strong>diretivas</strong>. Podemos defini-las como <em>elementos HTML criados por você e que são parseados pelo framework em tempo de execução</em>. É como criar componentes no Flex.</p>
<p>Com muita determinação, fui atrás de informações sobre como desenvolver uma diretiva básica: uma propriedade a ser utilizada num &lt;select&gt; para aplicar a ele o plugin jQuery Select2 (<a href="http://ivaynberg.github.com/select2/">http://ivaynberg.github.com/select2/</a>), sem que fosse necessário inicia-lo dentro do meu controller, o que me obrigaria a fazer acesso ao DOM, algo que é desencorajado no uso da AngularJS (<em>lembra-se de se preocupar apenas com os dados?</em>).</p>
<p>E como dito acima, foi preciso muita determinação para chegar num bom resultado, algo que fosse possível utilizar num projeto real. A informação está muito fragmentada, a documentação oficial não contém exemplos de como fazer algo personalizado, porém o grupo no Google ajuda muito, pois está repleto de exemplos no JSFiddle.</p>
<p>Se você ficou interessado e quiser ver o código, basta acessar o repositório no GitHub (<a href="https://github.com/vedovelli/angularjs_estudos">https://github.com/vedovelli/angularjs_estudos</a>) e encontrará o código fonte todo comentado. Os arquivos a serem lidos são: <a href="https://github.com/vedovelli/angularjs_estudos/blob/master/index.html"><strong>/index.html</strong></a> e <a href="https://github.com/vedovelli/angularjs_estudos/blob/master/directive/riaSelect.js"><strong>/directive/riaSelect.js</strong></a></p>
<p><strong>Para ver funfando</strong>: <a href="http://blog.vedovelli.com.br/angularjs_estudos/">http://blog.vedovelli.com.br/angularjs_estudos/</a></p>
<p>Se quiser fazer um fork e melhorar o código, para um posterior <em>pull request, be my guest</em>&#8230; =D</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1987</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSSlider (Super Simple Slider) – jQuery Plugin #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1982</link>
		<comments>http://blog.vedovelli.com.br/?p=1982#comments</comments>
		<pubDate>Wed, 05 Sep 2012 12:47:53 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[jQuery Plugin]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Slider]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1982</guid>
		<description><![CDATA[Agora que estamos bastante confortáveis no desenvolvimento de apps web com HTML5/CSS3 e Javascript, eu e minha equipe começamos a colocar as asinhas de fora e desenvolver elementos personalizados, que tínhamos a disposição no Flex. O primeiro a entrar para a lista foi um slider para conteúdo. Algo bem simples de usar e de entender, [...]]]></description>
				<content:encoded><![CDATA[<p>Agora que estamos bastante confortáveis no desenvolvimento de apps web com HTML5/CSS3 e Javascript, eu e minha equipe começamos a colocar as asinhas de fora e desenvolver elementos personalizados, que tínhamos a disposição no Flex. O primeiro a entrar para a lista foi um slider para conteúdo. Algo bem simples de usar e de entender, caso queira ver o código fonte para estudar.</p>
<p>Esteja a vontade para baixar, usar, clonar o código no GitHub, fazer alterações e fazer pull request.</p>
<p>As instruções de uso estão no README.md: <a href="https://github.com/vedovelli/jquery.ssslider">https://github.com/vedovelli/jquery.ssslider</a></p>
<p>Um exemplo: <a href="http://blog.vedovelli.com.br/ssslider/">http://blog.vedovelli.com.br/ssslider/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1982</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Curso Flex Framework por Fábio Vedovelli #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1970</link>
		<comments>http://blog.vedovelli.com.br/?p=1970#comments</comments>
		<pubDate>Mon, 03 Sep 2012 23:37:13 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Curso]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Treinamento]]></category>
		<category><![CDATA[Actionscript3]]></category>
		<category><![CDATA[Flex Framwork]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1970</guid>
		<description><![CDATA[Há três meses lancei uma pesquisa utilizando o Google Docs, para verificar se um curso de Flex Framework seria bem aceito, se teríamos público suficiente para viabilizar sua criação. Confesso que estava cético, mas lancei a pesquisa assim mesmo. Ela ficou no ar por apenas 48 horas, pois no mesmo dia eu já tinha minha [...]]]></description>
				<content:encoded><![CDATA[<p>Há três meses lancei uma pesquisa utilizando o Google Docs, para verificar se um curso de Flex Framework seria bem aceito, se teríamos público suficiente para viabilizar sua criação. Confesso que estava cético, mas lancei a pesquisa assim mesmo. Ela ficou no ar por apenas 48 horas, pois no mesmo dia eu já tinha minha resposta: <strong>62% dos 101 que responderam disseram SIM ao curso.</strong></p>
<p style="text-align: center;"><a href="http://blog.vedovelli.com.br/wp-content/uploads/2012/09/03-09-2012-20-07-56.png"><img class="aligncenter size-medium wp-image-1971" title="Ver em tamanho maior" src="http://blog.vedovelli.com.br/wp-content/uploads/2012/09/03-09-2012-20-07-56-300x195.png" alt="" width="300" height="195" /></a></p>
<p>Por algum tempo refleti sobre o porque desta quantidade e cheguei à conclusão de que muitos sistemas legados ainda precisam de manutenção e também que, possivelmente, muito simpatizantes ainda utilizam a tecnologia. Digo isso pois, caso você não saiba, o Flex foi doado à Apache Foundation pela Adobe. Na época (novembro de 2011) o anúncio foi feito de forma muito desastrada e o mercado ficou com medo de utilizar a tecnologia. Atualmente, muitas perguntas foram respondidas e a situação ficou bem clara. Acontece que no processo de transferência o desenvolvimento do Flex Framework está parado. E os concorrentes se mexendo.</p>
<p>Particularmente eu acredito que o Flex ainda evoluirá muito (pois o desenvolvimento está agora nas mãos da comunidade) e que será bastante utilizado por empresas e profissionais freelancers. Seu ambiente de desenvolvimento e o resultado gerado durante o desenvolvimento compensam a aposta na tecnologia.</p>
<p>Este curso tem como alvo os profissionais que já participavam de algum projeto em desenvolvimento com Flex e que se viram sem ter um treinamento a disposição, pois todos os instrutores, escolas e parceiros da Adobe pararam suas atividades de forma repentina.</p>
<p>Mas mesmo que você não faça parte deste grupo, mas queira aprender conceitos essenciais para desenvolvimento de interfaces, tais como<strong> orientação a objetos</strong>, <strong>eventos</strong>, <strong>callbacks</strong> e <strong>design patterns</strong>, o curso lhe será muito válido. A parte de <strong>controle de versão</strong> também será bastante interessante.</p>
<p>Venha até o site e conheça o conteúdo oferecido! Será um prazer tê-lo como aluno.</p>
<p style="text-align: center;"><a href="http://www.cursoflex.com.br"><img class="aligncenter size-medium wp-image-1972" title="Acessar o site do curso" src="http://blog.vedovelli.com.br/wp-content/uploads/2012/09/03-09-2012-20-24-03-300x225.png" alt="" width="300" height="225" /></a></p>
<p style="text-align: center;"><a href="http://www.cursoflex.com.br">www.cursoflex.com.br</a></p>
<p>Em tempo: estamos montando uma lista para envio de newsletter. Caso queira ser informado sobre lançamentos futuros, utilize o seguinte link (<a href="http://eepurl.com/o6py9">http://eepurl.com/o6py9</a>) para fazer sua assinatura.</p>
<p>Grande abraço,</p>
<p><em>Vedovelli</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1970</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pequena consideração sobre MVC na interface de usuário</title>
		<link>http://blog.vedovelli.com.br/?p=1965</link>
		<comments>http://blog.vedovelli.com.br/?p=1965#comments</comments>
		<pubDate>Sat, 01 Sep 2012 13:47:41 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Data binding]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1965</guid>
		<description><![CDATA[Estava eu lendo o livro opensource do Addy Osmani sobre Backbone.js quando pesquei uma explicação bem simples sobre o conceito MVC (Model, View, Controller) aplicado na inteface de usuário. Decidi traduzir e postar aqui no blog. Seguem o original e a tradução. Para os novatos, deve esclarecer bastante coisa! Link para o livro: http://addyosmani.github.com/backbone-fundamentals/?utm_source=javascriptweekly&#38;utm_medium=email Models represent [...]]]></description>
				<content:encoded><![CDATA[<p>Estava eu lendo o livro opensource do <a href="http://addyosmani.com/blog/"><strong>Addy Osmani</strong></a> sobre <a href="http://backbonejs.org/">Backbone.js</a> quando pesquei uma explicação bem simples sobre o conceito <strong>MVC (Model, View, Controller)</strong> aplicado na inteface de usuário. Decidi traduzir e postar aqui no blog. Seguem o original e a tradução. Para os novatos, deve esclarecer bastante coisa!</p>
<p>Link para o livro: <a href="http://addyosmani.github.com/backbone-fundamentals/?utm_source=javascriptweekly&amp;utm_medium=email">http://addyosmani.github.com/backbone-fundamentals/?utm_source=javascriptweekly&amp;utm_medium=email</a></p>
<blockquote><p><em>Models represent the domain-specific knowledge and data in an application. Think of this as being a ‘type’ of data you can model — like a User, Photo or Note. Models should notify anyone observing them about their current state (e.g Views).</em></p>
<p><em>Views are typically considered the User-interface in an application (e.g your markup and templates), but don’t have to be. They should know about the existence of Models in order to observe them, but don’t directly communicate with them.</em></p>
<p><em>Controllers handle the input (e.g clicks, user actions) in an application and Views can be considered as handling the output. When a Controller updates the state of a model (such as editing the caption on a Photo), it doesn’t directly tell the View. This is what the observing nature of the View and Model relationship is for.</em></p></blockquote>
<p><strong>Tradução:</strong> Models representam o conhecimento específico do negócio e a informação contida na aplicação. Pense nisso como sendo o &#8216;tipo&#8217; de informação que você quer manipular &#8211; como um Usuário, Foto ou uma Nota. Models podem notificar quem quer que esteja observando seu estado atual (por ex. as Views).</p>
<p>Views são comumente consideradas a interface da sua aplicação (por ex. seu HTML e templates), mas não necessariamente precisam ser. Elas sabem da existencia dos Models para poder observa-los mas não interagem diretamente com eles.</p>
<p>Controllers gerenciam o input (por ex. clicks, interações do usuário) na aplicação e as Views podem ser consideradas como gerenciadoras do output. Quando um controller atualiza o estado de um Model (como por ex. editando a legenda de uma foto), ele (o controller) não informa diretamente à View. Isso é que a relação entre o Model e a View proporciona. Quando o model é atualizado, a View muda de acordo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1965</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução ao AngularJS #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1946</link>
		<comments>http://blog.vedovelli.com.br/?p=1946#comments</comments>
		<pubDate>Wed, 25 Jul 2012 15:53:52 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1946</guid>
		<description><![CDATA[Update: se quiser acompanhar o que venho estudando sobre AngularJS, segue o link da página onde vc encontrará tudo: http://blog.vedovelli.com.br/angularjs_estudos/ Inicio o post informando: AngularJS não substitui jQuery. Assimilou? Excelente! =D Apesar de não ser a única solução Javascript para prover data binding (http://en.wikipedia.org/wiki/Data_binding) ao mundo HTML/Javascript/CSS, o AngularJS me chamou a atenção por ser [...]]]></description>
				<content:encoded><![CDATA[<p>Update: se quiser acompanhar o que venho estudando sobre AngularJS, segue o link da página onde vc encontrará tudo:<a href=" http://blog.vedovelli.com.br/angularjs_estudos/"> http://blog.vedovelli.com.br/angularjs_estudos/</a></p>
<p><object width="600" height="335" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/iCQ3qic_nGg?version=3&amp;hl=en_US" /><param name="allowfullscreen" value="true" /><embed width="600" height="335" type="application/x-shockwave-flash" src="http://www.youtube.com/v/iCQ3qic_nGg?version=3&amp;hl=en_US" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" /></object></p>
<p>Inicio o post informando: <strong>AngularJS não substitui jQuery</strong>. Assimilou? Excelente! =D</p>
<p>Apesar de não ser a única solução Javascript para prover data binding (<a href="http://en.wikipedia.org/wiki/Data_binding">http://en.wikipedia.org/wiki/Data_binding</a>) ao mundo HTML/Javascript/CSS, o AngularJS me chamou a atenção por ser simples de usar e ao mesmo tempo poderoso (além de ter o patrocínio do Google). Uma boa alternativa é o KnockoutJS (http://knockoutjs.com/) porém a minha preferência pelo AngularJS se deve ao fato dele ser declarativo, utilizando o HTML como um template.</p>
<p>Em futuros screencasts mostrarei o <strong>desenvolvimento de componentes customizados</strong> e <strong>testes automatizados</strong>.</p>
<p>[update 26/07 15:06]<br />
Nosso estimado Erko Bridee também escreveu sobre o AngularJS<br />
<a href="http://blog.erkobridee.com/2012/07/26/angularjs-consumindo-a-api-do-github/">http://blog.erkobridee.com/2012/07/26/angularjs-consumindo-a-api-do-github/</a></p>
<p>[assets]<br />
Código fonte: <a href="https://github.com/vedovelli/crud-angular">https://github.com/vedovelli/crud-angular</a><br />
Download do video: <a href="http://dl.dropbox.com/u/483575/angularjs.mov.zip">http://dl.dropbox.com/u/483575/angularjs.mov.zip</a></p>
<p>[curiosidade]<br />
Para efeito de comparação, segue o código-fonte Javascript da mesma operação feita com jQuery e com AngularJS</p>
<p>- jQuery: <a href="https://github.com/vedovelli/crud-jquery/blob/master/js/custom.js">https://github.com/vedovelli/crud-jquery/blob/master/js/custom.js</a><br />
- AngularJS:<a href="https://github.com/vedovelli/crud-angular/blob/master/js/custom.js"> https://github.com/vedovelli/crud-angular/blob/master/js/custom.js </a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1946</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Treinamentos e mais treinamentos!</title>
		<link>http://blog.vedovelli.com.br/?p=1939</link>
		<comments>http://blog.vedovelli.com.br/?p=1939#comments</comments>
		<pubDate>Mon, 11 Jun 2012 13:45:30 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Curso]]></category>
		<category><![CDATA[Treinamento]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP 5.4]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1939</guid>
		<description><![CDATA[O ensino tá no meu sangue! A cada novo treinamento ministrado coloco mais uma pedra na base dessa convicção! Neste ano de 2012 o ensino a distância focado em tecnologia deu um salto espantoso: todos os desenvolvedores que conheço que possuem aptidão para ensinar estão ensinando algo, seja como atividade principal ou secundária. Desde muito [...]]]></description>
				<content:encoded><![CDATA[<p>O ensino tá no meu sangue! A cada novo treinamento ministrado coloco mais uma pedra na base dessa convicção! Neste ano de 2012 o ensino a distância focado em tecnologia deu um salto espantoso: todos os desenvolvedores que conheço que possuem aptidão para ensinar estão ensinando algo, seja como atividade principal ou secundária.</p>
<p>Desde muito tempo eu venho querendo fazer com que o ensino se torne minha atividade principal e a oportunidade se apresentou neste ano, com uma boa parceria com a <a href="http://www.schoolofnet.com">School of Net</a>. Ali, encontrei o ambiente que eu precisava para me soltar e ensinar da maneira que eu gosto: com liberdade total de criação.</p>
<p>O curso mais recente foi de aplicações com atualização da interface em tempo real, utilizando tecnologias de ponta, tais como <a href="http://nodejs.org/">node.js</a>, <a href="http://www.mongodb.org/">mongodb</a>, <a href="http://raphaeljs.com/">raphäel.js</a>, <a href="http://www.html5rocks.com/en/">HTML5</a> e <a href="http://php.net/releases/5_4_0.php">php 5.4</a>. O produto desenvolvimento para o curso foi um sistema para acompanhamento de partidas de futebol, à semelhança do que é encontrado no site globo.com. Além do placar, lances e estatísticas em forma de gráfico são apresentados, todos com atualização <em>realtime</em>.</p>
<div id="attachment_1941" class="wp-caption aligncenter" style="width: 178px"><a href="http://blog.vedovelli.com.br/wp-content/uploads/2012/06/futebol_soncom.png"><img class="size-medium wp-image-1941" title="futebol_soncom" src="http://blog.vedovelli.com.br/wp-content/uploads/2012/06/futebol_soncom-168x300.png" alt="" width="168" height="300" /></a><p class="wp-caption-text">Clique para visualizar a imagem original</p></div>
<p>O treinamento foi um sucesso e os alunos receberam além de explicações detalhadas, todo o código fonte da aplicação, para utilizar como base para estudos, material de referência ou ainda utilizar trechos do código em aplicações próprias. No final, Wesley Willians ensinou a turma como criar uma máquina virtual no <a href="http://aws.amazon.com/">Amazon Webservices</a> e instalou todos os serviços necessários para a publicação do sistema.</p>
<p>Se você quiser saber mais e se inscrever para a próxima turma, o link do curso é <strong><a href="http://www.schoolofnet.com/realtime/">http://www.schoolofnet.com/realtime/</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1939</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Workshop Online jQuery pela School of Net</title>
		<link>http://blog.vedovelli.com.br/?p=1929</link>
		<comments>http://blog.vedovelli.com.br/?p=1929#comments</comments>
		<pubDate>Tue, 10 Apr 2012 11:51:58 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Curso]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Treinamento]]></category>
		<category><![CDATA[EAD]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Workshop]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1929</guid>
		<description><![CDATA[http://www.schoolofnet.com/jquery/ Apesar do meu nome ser bastante ligado ao Adobe Flex, sempre tive bastante gosto em trabalhar com HTML e Javascript, tendo ao longo dos anos desenvolvido websites para clientes, sempre utilizando jQuery para facilitar o desenvolvimento e manutenção. Eis que com isso acumulei bastante conhecimento, inclusive sobre boas práticas e performance, pois apesar de [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.vedovelli.com.br/wp-content/uploads/2012/04/jquery_son.jpg"><img class="aligncenter size-full wp-image-1930" title="jquery_son" src="http://blog.vedovelli.com.br/wp-content/uploads/2012/04/jquery_son.jpg" alt="" width="550" height="336" /></a></p>
<p style="text-align: center;"><strong><a href="http://www.schoolofnet.com/jquery/">http://www.schoolofnet.com/jquery/</a></strong></p>
<p>Apesar do meu nome ser bastante ligado ao Adobe Flex, sempre tive bastante gosto em trabalhar com HTML e Javascript, tendo ao longo dos anos desenvolvido websites para clientes, sempre utilizando jQuery para facilitar o desenvolvimento e manutenção. Eis que com isso acumulei bastante conhecimento, inclusive sobre boas práticas e performance, pois apesar de ser uma biblioteca fácil de ser utilizada, pode impactar negativamente na performance dos documentos HTML se mal utilizada.</p>
<p>Este workshop online, que será ministrado em 2 sábados de maio, durante todo o dia, tem por objetivo explicar os fundamentos do Javascript, sua história e papel no mundo web, o que é a jQuery e quais os problemas que ela tem por objetivo resolver, explicar o porquê de ser tão largamente adotada, demonstrar muitos exemplos práticos e finalizar com boas práticas e performance.</p>
<p>Mais informações:</p>
<ul>
<li><strong>dias 12 e 19 de Maio de 2012</strong>, das 9h30 as 17h30 (1 hora de intervalo)</li>
<li><strong>carga horária</strong>: 14 horas</li>
<li><strong>evento online</strong>, através do ambiente Adobe Connect</li>
<li><strong>valores</strong>:<br />
<blockquote><p>• até 28/04/2012 &#8211; R$400,00 para novos alunos ou R$360,00 para ex-alunos<br />
• a partir de 29/04/2012 &#8211; R$440,00 para novos alunos ou R$400,00 para ex-alunos<br />
• parcelamento no cartão de crédito está disponível</p></blockquote>
</li>
<li><strong>Conteúdo programático</strong> aqui: <a href="http://www.schoolofnet.com/jquery/#conteudo">link</a></li>
</ul>
<p>Aguardo vocês lá! Caso tenham alguma dúvida, não se acanhe: <strong>pergunte nos comentários!</strong></p>
<p>Um abraço!</p>
<p>Ved</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1929</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criação de servidor virtual com LAMP e WordPress #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1912</link>
		<comments>http://blog.vedovelli.com.br/?p=1912#comments</comments>
		<pubDate>Tue, 20 Mar 2012 13:13:38 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Infraestrutura]]></category>
		<category><![CDATA[Hospedagem]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[Screencast]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1912</guid>
		<description><![CDATA[Houve um tempo em que nós, desenvolvedores, éramos reféns das empresas de hospedagens! Naquele tempo, viabilizar um sistema web dependia também de uma cuidadosa escolha da empresa de hospedagem, tentando equilibrar preço com qualidade. Felizmente a evolução da tecnologia barateou este custo, primeiro nos Estados Unidos, depois na Europa e algum tempo depois no Brasil. [...]]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-1915" title="linode_cover" src="http://blog.vedovelli.com.br/wp-content/uploads/2012/03/linode_cover.jpg" alt="" width="1000" height="288" /></p>
<p>Houve um tempo em que nós, desenvolvedores, éramos reféns das empresas de hospedagens! Naquele tempo, viabilizar um sistema web dependia também de uma cuidadosa escolha da empresa de hospedagem, tentando equilibrar preço com qualidade. Felizmente a evolução da tecnologia barateou este custo, primeiro nos Estados Unidos, depois na Europa e algum tempo depois no Brasil.</p>
<p>Mas ainda existia um problema: <strong>a hospedagem compartilhada</strong>, modelo no qual você divide um servidor com <em>N</em> outros contratantes, obviamente sem que um tenha acesso aos arquivos do outro. Apesar de atender à maioria dos casos, alterar configurações dos serviços instalados nunca foi possível, pois a configuração de um servidor compartilhado visa atender a duas coisas: <em>recursos básicos para todos</em> e o <em>máximo em segurança</em>.</p>
<p>Mas depois de um tempo suas necessidades passam a ser diferentes das da maioria e uma hospedagem compartilhada não é mais uma opção!</p>
<p>Para cortar uma parte do <em>blá blá blá</em> não direi o quanto um servidor dedicado custava há 3 ou 4 anos atrás. Basta saber que era uma cifra mensal que passava dos 3 dígitos e isso estava muito além de das possibilidades de meros desenvolvedores brazucas independentes.</p>
<p>Mais um pouco de pesquisa e inovação e passamos a conviver com termos novos, tais como <strong>virtualização</strong> (<a href="http://pt.wikipedia.org/wiki/Virtualiza%C3%A7%C3%A3o">http://pt.wikipedia.org/wiki/Virtualiza%C3%A7%C3%A3o</a>) e <strong>cloud computing</strong> (<a href="http://pt.wikipedia.org/wiki/Cloud_Computing">http://pt.wikipedia.org/wiki/Cloud_Computing</a>). Notadamente a Amazon, líder mundial em comércio eletrônico, percebeu que poderia ganhar também provendo serviços de hospedagem e então lançou o <a href="http://aws.amazon.com">Amazon Webservices</a>. Tal fato revolucionou o mercado de hospedagem e atualmente contamos com muitas opções, desde simples (porém eficientes) até gigantes, como a própria Amazon ou a <a href="http://www.rackspace.com/">Rackspace</a>.</p>
<p>Atualmente empresas nacionais já oferecem servidores virtuais dedicados, porém, ainda a preços impeditivos, tendo como principal motivo a realidade brasileira, a qual conhecemos muito bem.</p>
<p>Pois um serviço que tem se mostrado muito atraente é o <strong>Linode</strong> (<a href="http://www.linode.com">www.linode.com</a>), pois é <strong>fácil de assinar, configurar, instalar, utilizar e gerenciar</strong>, tendo um preço muito bom! Para passar uma idéia da robustez do serviço, administro um website de média visitação (para os padrões brasileiros) e que nos próximos dias atingirá a marca de 1 milhão de pageviews (dentro de um mês) e o consumo geral da máquina virtual que o hospeda está na média de 55% (disco e utilização de memória). Este mesmo site consumiu até agora 25% do total de tráfego mensal que o plano permite. E por fim, o plano contratado com o Linode para este site é um <strong>intermediário</strong>.</p>
<p>O screencast deste post visa lhe direcionar nos primeiros passos para ter e administrar seu próprio servidor virtual, tendo total controle pois o acesso é root, o que lhe permite instalar qualquer tecnologia que se queira.</p>
<p><strong>O que você vai aprender</strong>:</p>
<p>- Assinatura do serviço<br />
- Escolha e deploy de uma distribuição Linux<br />
- Instalação Apache2<br />
- Instalação PHP 5.3<br />
- Instalação e configuração MySQL<br />
- Instalação do WordPress<br />
- Registrar e configurar um domínio e zonas de DNS<br />
- Acessar via SSH<br />
- Comandos básicos para administrar o servidor via linha de comando<br />
- Utilizar SSH Tunneling para acesso remoto ao MySQL<br />
- Utilizar SFTP</p>
<p><iframe src="http://www.youtube.com/embed/AvD0Bw9GerY" frameborder="0" width="600" height="335"></iframe></p>
<p><a title="Download do video" href="http://db.tt/Piw3fc6r"><img title="Download do video" src="http://blog.vedovelli.com.br/wp-content/uploads/2012/03/cloud_download.png" alt="" width="16" height="16" /> Download do video</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1912</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Das coisas que…</title>
		<link>http://blog.vedovelli.com.br/?p=1882</link>
		<comments>http://blog.vedovelli.com.br/?p=1882#comments</comments>
		<pubDate>Tue, 28 Feb 2012 13:01:55 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Ved]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1882</guid>
		<description><![CDATA[Das coisas que fiz/quis fazer antes que fossem popularizadas, posso citar: querer um MP3 Player em 2001, querer criar websites e sistemas para mobile em 2006, ter desenvolvido um sistema 100% AJAX em 2005 (não existia JQuery nessa época)… não aproveitei tantas oportunidades porque não tinha persistência nem fé nas minhas capacidades. Rapare no &#8220;tinha&#8221;: [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.vedovelli.com.br/wp-content/uploads/2012/02/Screen-Shot-2012-02-28-at-6.59.47-AM.png"><img class="alignleft  wp-image-1883" title="Screen Shot 2012-02-28 at 6.59.47 AM" src="http://blog.vedovelli.com.br/wp-content/uploads/2012/02/Screen-Shot-2012-02-28-at-6.59.47-AM-119x300.png" alt="" width="86" height="216" /></a>Das coisas que fiz/quis fazer antes que fossem popularizadas, posso citar: querer um MP3 Player em 2001, querer criar websites e sistemas para mobile em 2006, ter desenvolvido um sistema 100% <a title="Claro TV" href="http://www.clarotvassinar.com.br" target="_blank">AJAX em 2005</a> (não existia JQuery nessa época)… não aproveitei tantas oportunidades porque não tinha persistência nem fé nas minhas capacidades. Rapare no &#8220;tinha&#8221;: passado!</p>
<p>Pois… de longe a mais interessante e que me é motivo de orgulho e eterna fonte de boas lembranças é esta viagem de mochila que fiz pela Europa em 1995, aos 20 anos de idade: <a href="http://www.vedovelli.com.br/fotos/Europa1995/index.html">http://www.vedovelli.com.br/fotos/Europa1995/index.html</a> (cuidado, tem som!).</p>
<p>E escrevendo este pequeno post, me dei conta de que pode interessar a algumas pessoas saber a história dos caminhos que percorri, com seus tombos e atalhos! Não sou o Eike Baptista, mas também posso ter uma auto-biografia! =D</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1882</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acalme-se, pense, produza! #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1880</link>
		<comments>http://blog.vedovelli.com.br/?p=1880#comments</comments>
		<pubDate>Mon, 27 Feb 2012 11:19:36 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[calma]]></category>
		<category><![CDATA[get things done]]></category>
		<category><![CDATA[Respiração]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1880</guid>
		<description><![CDATA[Em desenvolvimento de software, acredito que o fato da maioria dos prazos não serem cumpridos deve-se a diversos fatores, alguns de controle do desenvolvedor, outros não. Dos que se tem controle, o conhecimento do que precisa ser feito é vital para a agilidade exigida. Como diz Beck Novaes (http://becknovaes.tumblr.com/), &#8220;- Quanto mais se conhece o [...]]]></description>
				<content:encoded><![CDATA[<p>Em desenvolvimento de software, acredito que o fato da maioria dos prazos não serem cumpridos deve-se a diversos fatores, alguns de controle do desenvolvedor, outros não.</p>
<p>Dos que se tem controle, o conhecimento do que precisa ser feito é vital para a agilidade exigida. Como diz <strong>Beck Novaes</strong> (<a href="http://becknovaes.tumblr.com/">http://becknovaes.tumblr.com/</a>), <em>&#8220;- Quanto mais se conhece o problema, mais apto se está para trazer uma solução criativa para este&#8221;</em>. Isso é uma grande dificuldade para pessoas que sofrem com DDA (<a title="Ler artigo na Wikipédia" href="http://pt.wikipedia.org/wiki/Dda">distúrbio do deficit de atenção</a>).</p>
<p>Numa situação de pressão, normalmente originada por prazo apertado ou insegurança do cliente, os que sofrem com o distúrbio tem grande dificuldade para ler e compreender requisitos de projeto, casos de uso, testes unitários, diagramas de banco de dados entre outros, o que muitas vezes traz grande sofrimento e fatalmente leva à procrastinação.</p>
<p><strong>E em desenvolvimento, procrastinação é sinônimo de não entregar.</strong></p>
<p>Como vítima do DDA, depois de muito sofrimento e observação das dificuldades diárias, venho aprimorando algumas técnicas que me tem ajudado a finalizar minhas tarefas, ou,  usando uma frase bem conhecida da comunidade, <strong><em>GET THINGS DONE</em></strong>!</p>
<p>O primeiro e essencial passo é me acalmar! Pensar no desafio do dia, dar a ele seu exato tamanho (temos tendência a aumentar os problemas) e respirar, tentando não pensar no que precisa ser feito. Geralmente em 10 minutos estou sereno e pronto para começar a programar. Caso necessário, me permito tirar até meia hora no processo.</p>
<p>Logo em seguida, depois de dedicar algum tempo aos emails e redes sociais, consulto minha agenda para ver o que o dia me reserva. A partir daí separo as coisas mais fáceis e rápidas, pois isso ajuda a despertar o raciocínio e facilita a obtenção do foco.</p>
<p>Não é raro, enquanto programando, que eu tome notas - dentro do código fonte - de tarefas a serem executadas e após a conclusão de todas elas, apago-as. Dividir uma tarefa maior em diversas menores me traz sensação de dever cumprido diversas vezes ao dia e ao mesmo tempo tira a preguiça natural de quem precisa recomeçar, pois sabe-se que ao iniciar uma nova tarefa, esta será curta e a sensação de dever cumprido está logo ali, a alguns minutos de trabalho.</p>
<p>Sem qualquer metodologia faço pausas, geralmente entre entregas significativas de trabalho, as quais uso para o que quiser, geralmente Facebook e comer, nesta ordem!</p>
<p>Isso tudo é negociar com seu inconsciente, que é quem lhe derruba, sempre!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1880</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alfred app: utilitário para MacOS X com muitos atalhos #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1877</link>
		<comments>http://blog.vedovelli.com.br/?p=1877#comments</comments>
		<pubDate>Thu, 23 Feb 2012 14:29:16 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[Alfred]]></category>
		<category><![CDATA[MacOS X]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Utilitário]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1877</guid>
		<description><![CDATA[Alfred App (http://www.alfredapp.com/) é um software utilitário para MacOS X que lhe traz diversas funções para facilitar o seu dia-a-dia e diminuir seu cansaço ao operar seu computador por tanto tempo. Desde abertura de links, até comandos do sistema (desligar o computador, por exemplo), passando por abertura de links e buscas muitos são muitos os [...]]]></description>
				<content:encoded><![CDATA[<p>Alfred App (http://www.alfredapp.com/) é um software utilitário para MacOS X que lhe traz diversas funções para facilitar o seu dia-a-dia e diminuir seu cansaço ao operar seu computador por tanto tempo. Desde abertura de links, até comandos do sistema (desligar o computador, por exemplo), passando por abertura de links e buscas muitos são muitos os recursos, contidos num software gratuito! Imperdível.</p>
<p><iframe width="600" height="335" src="http://www.youtube.com/embed/6k6i_yLfAog?rel=0" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1877</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screencast: Instalação do GIT no Windows 7 e primeiros passos no GitHub #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1871</link>
		<comments>http://blog.vedovelli.com.br/?p=1871#comments</comments>
		<pubDate>Wed, 22 Feb 2012 13:00:25 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Controle de Versão]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Screencast]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1871</guid>
		<description><![CDATA[Percebendo a dificuldade de alguns alunos com o GIT no Windows, principalmente pela falta de prática com a linha de comando, decidi gravar este screencast mostrando o quão fácil é instalar, criar repositórios GIT locais e fazer push (envio) do seu código fonte para um repositório remoto no GitHub.com. Bons estudos!]]></description>
				<content:encoded><![CDATA[<p>Percebendo a dificuldade de alguns alunos com o GIT no Windows, principalmente pela falta de prática com a linha de comando, decidi gravar este screencast mostrando o quão fácil é instalar, criar repositórios GIT locais e fazer push (envio) do seu código fonte para um repositório remoto no GitHub.com.</p>
<p>Bons estudos!</p>
<p><iframe width="600" height="335" src="http://www.youtube.com/embed/_Ci1q53DgvY?rel=0" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1871</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementar carrinho de compras no WordPress com JQuery (demonstração) #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1861</link>
		<comments>http://blog.vedovelli.com.br/?p=1861#comments</comments>
		<pubDate>Wed, 01 Feb 2012 11:34:28 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Wordpre]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1861</guid>
		<description><![CDATA[Uma demonstração de como utilizei Javascript e JQuery para implementar um carrinho de compras no WordPress. O screencast ensinando a fazer será gravado depois.]]></description>
				<content:encoded><![CDATA[<p>Uma demonstração de como utilizei Javascript e JQuery para implementar um carrinho de compras no WordPress. O screencast ensinando a fazer será gravado depois.</p>
<p><iframe width="600" height="335" src="http://www.youtube.com/embed/fiEdpSq7azY?rel=0" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1861</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dica: Live Reload e Sublime Text 2 #soudev</title>
		<link>http://blog.vedovelli.com.br/?p=1856</link>
		<comments>http://blog.vedovelli.com.br/?p=1856#comments</comments>
		<pubDate>Mon, 30 Jan 2012 16:51:39 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[#soudev]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[Screencast]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1856</guid>
		<description />
				<content:encoded><![CDATA[<p><iframe width="600" height="335" src="http://www.youtube.com/embed/MVsl2pHjaZk?rel=0" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1856</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E porquê não?!</title>
		<link>http://blog.vedovelli.com.br/?p=1848</link>
		<comments>http://blog.vedovelli.com.br/?p=1848#comments</comments>
		<pubDate>Sun, 29 Jan 2012 00:10:48 +0000</pubDate>
		<dc:creator>Ved</dc:creator>
				<category><![CDATA[Ved]]></category>

		<guid isPermaLink="false">http://blog.vedovelli.com.br/?p=1848</guid>
		<description><![CDATA[Devido à reviravolta no mundo do Flex, voltei a estudar quase que em tempo integral  e minha necessidade de compartilhar o que venho aprendendo voltou! Assim, nada mais justo do que preservar o que já compartilhei no passado, adicionando o que pretendo compartilhar de agora em diante. Espero ter motivação para levar este blog adiante, [...]]]></description>
				<content:encoded><![CDATA[<p>Devido à reviravolta no mundo do Flex, voltei a estudar quase que em tempo integral  e minha necessidade de compartilhar o que venho aprendendo voltou! Assim, nada mais justo do que preservar o que já compartilhei no passado, adicionando o que pretendo compartilhar de agora em diante.</p>
<p>Espero ter motivação para levar este blog adiante, mesmo quando as horas de estudo já não forem tantas!</p>
<p>Um abraço,</p>
<p>Ved</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vedovelli.com.br/?feed=rss2&amp;p=1848</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
