<?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>RedRails</title>
	
	<link>http://www.redrails.com.br</link>
	<description>Rails, Android, Programação e tantas outras tecnologias...</description>
	<lastBuildDate>Thu, 13 Jun 2013 14:29:13 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
<image>
<link>http://www.redrails.com.br</link>
<url>http://www.redrails.com.br/wp-content/mbp-favicon/favicon.ico</url>
<title>RedRails</title>
</image>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/com/lRFP" /><feedburner:info uri="com/lrfp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>com/lRFP</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Como converter Videos do Vine para GIF facilmente</title>
		<link>http://www.redrails.com.br/2013/06/13/como-converter-videos-do-vine-para-gif-facilmente/</link>
		<comments>http://www.redrails.com.br/2013/06/13/como-converter-videos-do-vine-para-gif-facilmente/#comments</comments>
		<pubDate>Thu, 13 Jun 2013 14:26:57 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[dica]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=2039</guid>
		<description><![CDATA[&#160; &#160; &#160; Quem gosta do Vine sabe o quão bom seria poder transformar aqueles pequenos videos do Vine ( que está em um Player Flash) em animações GIFs de boa qualidade e poder fazer o que quiser com eles, como postar no Google Plus, Facebook, ou sei lá o que a imaginação de vocês [...]]]></description>
				<content:encoded><![CDATA[<div class="wp-caption alignleft" style="width: 250px"><a href="http://gifvine-gifs.s3-website-us-east-1.amazonaws.com/b3v5h3Piwt7"><img alt="" src="http://gifvine-gifs.s3-website-us-east-1.amazonaws.com/b3v5h3Piwt7" width="240" height="240" /></a><p class="wp-caption-text">Converter Vine para GIF</p></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Quem gosta do Vine sabe o quão bom seria poder transformar aqueles pequenos videos do Vine ( que está em um Player Flash) em animações GIFs de boa qualidade e poder fazer o que quiser com eles, como postar no Google Plus, Facebook, ou sei lá o que a imaginação de vocês criam.</p>
<p>Mas saibam que esse processo existe e é absolutamente simples de fazer:</p>
<ul>
<li><span style="line-height: 13px;">Acessem: <a href="http://www.gifvine.co/">http://www.gifvine.co/</a><br />
</span></li>
<li>Peguem a URL da imagem Vine de vocês (por exemplo <a href="https://vine.co/v/b3v5h3Piwt7">https://vine.co/v/b3v5h3Piwt7</a> )</li>
<li>Insiram no Site</li>
<li>Cliquem no botão &#8220;Make this Vine a Gif&#8221; (ou faça desse Vine um GIF)</li>
<li>Pronto agora basta salvar seu GIF e fazer o que quiser <img src='http://www.redrails.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/06/13/como-converter-videos-do-vine-para-gif-facilmente/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/06/13/como-converter-videos-do-vine-para-gif-facilmente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Padrões de Design para Icones da Google – Parte 2</title>
		<link>http://www.redrails.com.br/2013/06/08/padroes-de-design-para-icones-da-google-parte-2/</link>
		<comments>http://www.redrails.com.br/2013/06/08/padroes-de-design-para-icones-da-google-parte-2/#comments</comments>
		<pubDate>Sat, 08 Jun 2013 14:01:01 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=2025</guid>
		<description><![CDATA[Marca da Google é formada de várias maneiras, uma deles é a manutenção da coerência visual dos ativos visuais. Em janeiro de 2012, a expansão sobre novos estilos de iconografia foi realizado por seu laboratório criativo, começaram a criar este sólido, mas flexível, conjunto de diretrizes que têm ajudado os designers e fornecedores do Google [...]]]></description>
				<content:encoded><![CDATA[<p><img alt="" src="http://behance.vo.llnwd.net/profiles/85780/projects/9084309/a97de4407068a1e8482590622b5bb1f7.jpg" width="600" height="462" /></p>
<div>
<div>
<div>
<p>Marca da Google é formada de várias maneiras, uma deles é a manutenção da coerência visual dos ativos visuais.</p>
<p>Em janeiro de 2012, a expansão sobre novos estilos de iconografia foi realizado por seu laboratório criativo, começaram a criar este sólido, mas flexível, conjunto de diretrizes que têm ajudado os designers e fornecedores do Google a produzir um trabalho de alta qualidade, o que ajuda a fortalecer a identidade do Google.</p>
<p>O que você vê aqui é um resumo visual das diretrizes, divididas em dois projetos pela <a href="http://www.behance.net" target="_blank">Behance</a>:</p>
<div>Google design style:Executive Creative Director: Chris Wiggins<br />
Senior Graphic Designers: Jesse Kaczmarek, Nicholas Jitkoff, Jonathan LeeGuideline design:Art Director / Team Manager: Christopher Bettig<br />
Senior Graphic Designer / Project lead: Roger Oddone<br />
Designers: Alex Griendling, Christopher Bettig, Jefferson Cheng, Roger Oddone, Yan Yan, Zachary Gibson<br />
Contributors: Web Studio, Brand Team, Creative Lab</p>
</div>
</div>
<div></div>
</div>
</div>
<p><img alt="" src="http://behance.vo.llnwd.net/profiles/85780/projects/9084309/bdcd5885f2055ad7ce72da55d9f9be99.jpg" width="600" height="4566" /><br />
<img alt="" src="http://behance.vo.llnwd.net/profiles/85780/projects/9084309/ece5f135dab35f2e2edfb7b6263586c5.jpg" width="600" height="5786" /><br />
<img alt="" src="http://behance.vo.llnwd.net/profiles/85780/projects/9084309/d461e7d40aa4d684a94d0f40d788bac5.jpg" width="600" height="6040" /></p>
<p><a href="http://www.redrails.com.br/?p=2023">Parte 1: http://www.redrails.com.br/?p=2023</a></p>
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/06/08/padroes-de-design-para-icones-da-google-parte-2/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/06/08/padroes-de-design-para-icones-da-google-parte-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Padrões de Design para ícones da Google – Parte 1</title>
		<link>http://www.redrails.com.br/2013/06/08/padroes-de-design-para-icones-da-google-parte-1/</link>
		<comments>http://www.redrails.com.br/2013/06/08/padroes-de-design-para-icones-da-google-parte-1/#comments</comments>
		<pubDate>Sat, 08 Jun 2013 14:00:52 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=2023</guid>
		<description><![CDATA[Marca da Google é formada de várias maneiras, uma deles é a manutenção da coerência visual dos ativos visuais. Em janeiro de 2012, a expansão sobre novos estilos de iconografia foi realizado por seu laboratório criativo, começaram a criar este sólido, mas flexível, conjunto de diretrizes que têm ajudado os designers e fornecedores do Google [...]]]></description>
				<content:encoded><![CDATA[<p><img alt="" src="http://behance.vo.llnwd.net/profiles/85780/projects/9028077/83af2c91d74de381a4c0022b6c3fe98b.jpg" width="600" height="461" /></p>
<div>
<div>
<div></div>
<div></div>
<p>Marca da Google é formada de várias maneiras, uma deles é a manutenção da coerência visual dos ativos visuais.</p>
<p>Em janeiro de 2012, a expansão sobre novos estilos de iconografia foi realizado por seu laboratório criativo, começaram a criar este sólido, mas flexível, conjunto de diretrizes que têm ajudado os designers e fornecedores do Google a produzir um trabalho de alta qualidade, o que ajuda a fortalecer a identidade do Google.</p>
<p>O que você vê aqui é um resumo visual das diretrizes, divididas em dois projetos pela <a href="http://www.behance.net" target="_blank">Behance</a>:</p>
<div>Google design style:Executive Creative Director: Chris Wiggins<br />
Senior Graphic Designers: Jesse Kaczmarek, Nicholas Jitkoff, Jonathan LeeGuideline design:Art Director / Team Manager: Christopher Bettig<br />
Senior Graphic Designer / Project lead: Roger Oddone<br />
Designers: Alex Griendling, Christopher Bettig, Jefferson Cheng, Roger Oddone, Yan Yan, Zachary Gibson<br />
Contributors: Web Studio, Brand Team, Creative Lab</p>
</div>
<div></div>
</div>
</div>
<p><img alt="" src="http://behance.vo.llnwd.net/profiles/85780/projects/9028077/92e4fbf53a96ceff9a9b403eb8583be3.jpg" width="600" height="4937" /><br />
<img alt="" src="http://behance.vo.llnwd.net/profiles/85780/projects/9028077/9f94a56613cc1830a36cb99786265ca7.jpg" width="600" height="5909" /><br />
<img alt="" src="http://behance.vo.llnwd.net/profiles/85780/projects/9028077/548817c2f6fc961fba200f0c14cac025.jpg" width="600" height="4315" /></p>
<div><a href="http://www.redrails.com.br/?p=2025">Parte 2: http://www.redrails.com.br/?p=2025</a></div>
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/06/08/padroes-de-design-para-icones-da-google-parte-1/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/06/08/padroes-de-design-para-icones-da-google-parte-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android Free and Beautiful Interfaces and Libraries for Download (Open Source)</title>
		<link>http://www.redrails.com.br/2013/06/03/android-free-and-beautiful-interfaces-and-libraries-for-download-open-source/</link>
		<comments>http://www.redrails.com.br/2013/06/03/android-free-and-beautiful-interfaces-and-libraries-for-download-open-source/#comments</comments>
		<pubDate>Mon, 03 Jun 2013 20:06:32 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=2017</guid>
		<description><![CDATA[&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Download de Layouts e Templates para Android, Views em XML, Dicas de Design e muito mais. &#160; MessageBar An Android Toast replacement, similar to the one seen in the GMail app. Features [...] Fading ActionBar FadingActionBar is a library which implements the cool fading action [...]]]></description>
				<content:encoded><![CDATA[<div class="wp-caption alignleft" style="width: 275px"><img alt="" src="http://lh5.googleusercontent.com/-VhJPCrMtSSo/AAAAAAAAAAI/AAAAAAAAACE/_1q50fHlzTk/s265-c-k-no/photo.jpg" width="265" height="265" /><p class="wp-caption-text">Android Design</p></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Download de Layouts e Templates para Android, Views em XML, Dicas de Design e muito mais.</p>
<p>&nbsp;</p>
<div id="blog_entries_masonr">
<div id="post-693" data-type="holo-style " data-id="id-1">
<div></div>
<p><a href="http://www.androidviews.net/2013/05/httpsimonvt-github-iomessagebar/"><img id="home_fader-693" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/05/template1-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/05/httpsimonvt-github-iomessagebar/">MessageBar</a> </small></h3>
</div>
<div>
<p>An Android Toast replacement, similar to the one seen in the GMail app.<br />
Features [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-690" data-type="holo-style " data-id="id-2">
<div></div>
<p><a href="http://www.androidviews.net/2013/05/fading-actionbar/"><img id="home_fader-690" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/05/template-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/05/fading-actionbar/">Fading ActionBar</a> </small></h3>
</div>
<div>
<p>FadingActionBar is a library which implements the cool fading action bar effect [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-684" data-type="holo-style " data-id="id-3">
<div></div>
<p><a href="http://www.androidviews.net/2013/04/pager-sliding-tabstrip/"><img id="home_fader-684" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/04/template3-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/04/pager-sliding-tabstrip/">Pager Sliding TabStrip</a> </small></h3>
</div>
<div>
<p>Inspired by the new 4th version of the Android Play Store, Pager Sliding TabStri [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-679" data-type="holo-style " data-id="id-4">
<div></div>
<p><a href="http://www.androidviews.net/2013/04/progressbutton/"><img id="home_fader-679" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/04/template2-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/04/progressbutton/">ProgressButton</a> </small></h3>
</div>
<div>
<p>ProgressButton is a custom progress indicator with a tiny footprint. Based on th [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-674" data-type="holo-style other-views " data-id="id-5">
<div></div>
<p><a href="http://www.androidviews.net/2013/04/progressfragment/"><img id="home_fader-674" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/04/progress-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/04/progressfragment/">ProgressFragment</a> </small></h3>
</div>
<div>
<p>Implementation of the fragment with the ability to display indeterminate progres [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-668" data-type="holo-style " data-id="id-6">
<div></div>
<p><a href="http://www.androidviews.net/2013/04/extendedcalendarview/"><img id="home_fader-668" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/04/sklejbf-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/04/extendedcalendarview/">ExtendedCalendarView</a> </small></h3>
</div>
<div>
<p>This project is meant for people who want to display a calendar view and show th [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-663" data-type="custom-views " data-id="id-7">
<div></div>
<p><a href="http://www.androidviews.net/2013/04/sliding-layer/"><img id="home_fader-663" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/04/template1-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/04/sliding-layer/">Sliding Layer</a> </small></h3>
</div>
<div>
<p>This library provides an easy way to include an autonomous layer/view that slide [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-649" data-type="holo-style " data-id="id-8">
<div></div>
<p><a href="http://www.androidviews.net/2013/03/tab-carousel-library/"><img id="home_fader-649" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/03/template-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/03/tab-carousel-library/">Tab Carousel Library</a> </small></h3>
</div>
<div>
<p>The Android Design Guidelines describe using Panels or Multi-pane Layouts. Th [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-642" data-type="holo-style " data-id="id-9">
<div></div>
<p><a href="http://www.androidviews.net/2013/03/holo-circular-progressbar/"><img id="home_fader-642" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/03/circular-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/03/holo-circular-progressbar/">Holo Circular ProgressBar</a> </small></h3>
</div>
<div>
<p>HoloCircularProgressBar is a beautiful custom view implementation for Android yo [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-637" data-type="other-views " data-id="id-10">
<div></div>
<p><a href="http://www.androidviews.net/2013/03/swipelistview/"><img id="home_fader-637" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/03/swipelistview-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/03/swipelistview/">SwipeListView</a> </small></h3>
</div>
<div>
<p>The folks over at 47 Degrees release the source code for the super-useful Swip [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-628" data-type="holo-style " data-id="id-11">
<div></div>
<p><a href="http://www.androidviews.net/2013/03/timessquare-for-android/"><img id="home_fader-628" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/02/template3-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/03/timessquare-for-android/">TimesSquare for Android</a> </small></h3>
</div>
<div>
<p>A simple, well-designed date picker for Android and iOS by Square.</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-623" data-type="other-views " data-id="id-12">
<div></div>
<p><a href="http://www.androidviews.net/2013/02/roundedimageview/"><img id="home_fader-623" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/02/template2-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/02/roundedimageview/">RoundedImageView</a> </small></h3>
</div>
<div>
<p>RoundedImageView is an ImageView based on a blog post by Romain Guy showing the [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-617" data-type="animations other-views " data-id="id-13">
<div></div>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/02/jazzyviewpager/">Jazzy ViewPager</a> </small></h3>
</div>
<div>
<p>An easy to use ViewPager that adds an awesome set of custom swiping animations. [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-613" data-type="holo-style " data-id="id-14">
<div></div>
<p><a href="http://www.androidviews.net/2013/02/stickygridheaders/"><img id="home_fader-613" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/02/template1-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/02/stickygridheaders/">StickyGridHeaders</a> </small></h3>
</div>
<div>
<p>StickyGridHeaders provides an enhanced GridView that shows items in sections wit [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-606" data-type="holo-style " data-id="id-15">
<div></div>
<p><a href="http://www.androidviews.net/2013/02/circular-seekbar/"><img id="home_fader-606" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/02/template-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/02/circular-seekbar/">Circular Seekbar</a> </small></h3>
</div>
<div>
<p>This one is a circular Seekbar view for Android.<br />
It behaves like any other View, [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-600" data-type="other-views " data-id="id-16">
<div></div>
<p><a href="http://www.androidviews.net/2013/01/quiltview-library/"><img id="home_fader-600" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/01/quiltview-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/01/quiltview-library/">QuiltView Library</a> </small></h3>
</div>
<div>
<p>QuiltView displays views of different sizes in a horizontal/vertical scrollab [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-575" data-type="other-views " data-id="id-17">
<div></div>
<p><a href="http://www.androidviews.net/2013/01/pinterest-like-adapterview/"><img id="home_fader-575" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/01/StaggeredGridView-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/01/pinterest-like-adapterview/">StaggeredGridView</a> </small></h3>
</div>
<div>
<p>This is a modified version of Android’s experimental StaggeredGridView. Th [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-571" data-type="other-views " data-id="id-18">
<div></div>
<p><a href="http://www.androidviews.net/2013/01/parallax-scrollview/"><img id="home_fader-571" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/01/parallax-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/01/parallax-scrollview/">Parallax ScrollView</a> </small></h3>
</div>
<div>
<p>A Parallax ScrollView which takes a background and foreground view, in the Paral [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-537" data-type="holo-style " data-id="id-19">
<div></div>
<p><a href="http://www.androidviews.net/2013/01/holo-colorpicker/"><img id="home_fader-537" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/01/colorpicker-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/01/holo-colorpicker/">Holo ColorPicker</a> </small></h3>
</div>
<div>
<p>By Lars Werkman<br />
A beautiful Android Holo themed color picker designed by Marie S [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-511" data-type="holo-style " data-id="id-20">
<div></div>
<p><a href="http://www.androidviews.net/2013/01/ics-calendarview/"><img id="home_fader-511" alt="" src="http://www.androidviews.net/wp-content/uploads/2013/01/ICSCalendarView-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2013/01/ics-calendarview/">ICS CalendarView [Backport]</a> </small></h3>
</div>
<div>
<p>The Andorid 4.0 CalendarView backported to Android 2.1</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-506" data-type="ios-style other-views " data-id="id-21">
<div><iframe src="http://www.youtube.com/embed/FYTSRfthSuQ" height="300" width="420" allowfullscreen="" frameborder="0"></iframe></div>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/pageddragdropgrid/">PagedDragDropGrid</a> </small></h3>
</div>
<div>
<p>By Nicolas Desjardins<br />
An Android ViewGroup that implements a paged grid with dr [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-255" data-type="holo-style other-views " data-id="id-22">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/cardsui/"><img id="home_fader-255" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/cards-androidviews-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/cardsui/">CardsUI</a> </small></h3>
</div>
<div>
<p>Google’s Now popular Cards UI has everyone fascinated.<br />
Now a library I cre [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-481" data-type="custom-views holo-style " data-id="id-23">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/newpopupmenu/"><img id="home_fader-481" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/NewPopupMenu-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/newpopupmenu/">NewPopupMenu</a> </small></h3>
</div>
<div>
<p>Inspired by Google Music’s Android app, this android library will create a [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-442" data-type="holo-style other-views " data-id="id-24">
<div><iframe src="http://www.youtube.com/embed/Y5uBpe7T-GE" height="300" width="420" allowfullscreen="" frameborder="0"></iframe></div>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/quickreturn-listview/">QuickReturn Listview</a> </small></h3>
</div>
<div>
<p>By Lars Werkman<br />
This is a implementation of the QuickReturn UI (aka Scrolling Tr [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-421" data-type="holo-style " data-id="id-25">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/iconictextview/"><img id="home_fader-421" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/iconictextview-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/iconictextview/">IconicTextView</a> </small></h3>
</div>
<div>
<p>IconicTextView is an extension of Android TextView class which provides support [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-418" data-type="holo-style " data-id="id-26">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/range-seekbar/"><img id="home_fader-418" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/seekbar-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/range-seekbar/">Range SeekBar</a> </small></h3>
</div>
<div>
<p>The Android widget class library contains only one “slider” like w [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-410" data-type="holo-style " data-id="id-27">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/ribbonmenu/"><img id="home_fader-410" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/ribbon-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/ribbonmenu/">RibbonMenu</a> </small></h3>
</div>
<div>
<p>By David Scott<br />
RibbonMenu, based on Google+ app, is a sliding drawer style nav [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-400" data-type="holo-style other-views " data-id="id-28">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/slide-expandable-listview/"><img id="home_fader-400" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/slide-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/slide-expandable-listview/">Slide Expandable ListView</a> </small></h3>
</div>
<div>
<p>By Tjerk Wolterink<br />
Not happy with the Android’s ExpandableListView android [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-390" data-type="holo-style " data-id="id-29">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/chartview/"><img id="home_fader-390" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/template2-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/chartview/">ChartView</a> </small></h3>
</div>
<div>
<p>Forked from Michael Pardo‘s AndroidUtils git repo, this ChartView exampl [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-382" data-type="holo-style " data-id="id-30">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/viewpagerindicator/"><img id="home_fader-382" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/template1-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/viewpagerindicator/">ViewPagerIndicator</a> </small></h3>
</div>
<div>
<p>The famous ViewPagerIndicator is a collection of paging indicator views, compati [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-363" data-type="other-views " data-id="id-31">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/autoscale-textview/"><img id="home_fader-363" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/autoscale-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/autoscale-textview/">AutoScale TextView</a> </small></h3>
</div>
<div>
<p>By Andreas Krings<br />
Andreas Krings was in need of a TextView that has a fixed wi [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-367" data-type="ios-style " data-id="id-32">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/arcmenu/"><img id="home_fader-367" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/template-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/arcmenu/">ArcMenu</a> </small></h3>
</div>
<div>
<p>An android custom view which looks like the menu in Path 2.0 (for iOS).</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-352" data-type="holo-style " data-id="id-33">
<div></div>
<p><a href="http://www.androidviews.net/2012/12/switch-compat/"><img id="home_fader-352" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/12/switchcompat-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/12/switch-compat/">Switch Compatibility Library [Backport]</a> </small></h3>
</div>
<div>
<p>By Andreas Krings<br />
Finally, a custom view that mimics Android’sSwitch ori [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-312" data-type="holo-style other-views " data-id="id-34">
<div><iframe src="http://www.youtube.com/embed/PL9s0IJ9oiI" height="300" width="420" allowfullscreen="" frameborder="0"></iframe></div>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/scrolling-tricks/">Scrolling Tricks</a> </small></h3>
</div>
<div>
<p>By Roman Nurik and Nick Butcher<br />
ScrollTricks implements two nifty little scro [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-308" data-type="holo-style other-views " data-id="id-35">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/sliding-menu/"><img id="home_fader-308" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/slidingmenu-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/sliding-menu/">Sliding Menu</a> </small></h3>
</div>
<div>
<p>By Jeremy Feinstein<br />
SlidingMenu is an Open Source Android library that allows de [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-302" data-type="holo-style " data-id="id-36">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/pinprogress/"><img id="home_fader-302" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/pinprogress-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/pinprogress/">PinProgress</a> </small></h3>
</div>
<div>
<p>By Roman Nurik<br />
The standard ProgressBar view and activity indicators work well f [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-291" data-type="holo-style " data-id="id-37">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/wizardpager/"><img id="home_fader-291" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/wizardpager-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/wizardpager/">WizardPager</a> </small></h3>
</div>
<div>
<p>By Roman Nurik<br />
Entering data and filling out forms on mobile devices kind of suc [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-279" data-type="holo-style other-views " data-id="id-38">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/glowpadview-lockring/"><img id="home_fader-279" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/glowpadview-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/glowpadview-lockring/">GlowPadView (Lockring)</a> </small></h3>
</div>
<div>
<p>By Nadav Fima<br />
The GlowPadView library is basically Android’s Lock Ring (wa [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-273" data-type="holo-style " data-id="id-39">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/chips-text-fields/"><img id="home_fader-273" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/chips-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/chips-text-fields/">Chips Text Fields</a> </small></h3>
</div>
<div>
<p>By Roman Nurik<br />
A growing trend across social and communication-related apps is t [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-267" data-type="holo-style " data-id="id-40">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/showcase-view/"><img id="home_fader-267" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/showcase-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/showcase-view/">Showcase View</a> </small></h3>
</div>
<div>
<p>By Alex Curran<br />
The Showcase view is designed to highlight and showcase specific [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-249" data-type="custom-views " data-id="id-41">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/wheel-widget-for-android/"><img id="home_fader-249" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/androidwheel-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/wheel-widget-for-android/">Wheel Widget for Android</a> </small></h3>
</div>
<div>
<p>By Alessandro Crugnola<br />
A realistic wheel view for Android, which vibrates on dra [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-237" data-type="holo-style libraries " data-id="id-42">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/android-lock-pattern/"><img id="home_fader-237" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/pattern-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/android-lock-pattern/">Android Lock Pattern</a> </small></h3>
</div>
<div>Android has an useful tool in security settings, it is Lock Pattern. User [...]</div>
<div></div>
<div></div>
</div>
<div id="post-222" data-type="other-views " data-id="id-43">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/photoview/"><img id="home_fader-222" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/photoview-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/photoview/">PhotoView</a> </small></h3>
</div>
<div>
<p>By Chris Banes<br />
PhotoView aims to help produce an easily usable implementation of [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-405" data-type="other-views " data-id="id-44">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/mapview-balloons/"><img id="home_fader-405" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/balloons-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/mapview-balloons/">MapView Balloons</a> </small></h3>
</div>
<div>
<p>By Jeff Gilfelt<br />
This project provides an easy way to annotate map overlay items [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-200" data-type="holo-style " data-id="id-45">
<div></div>
<p><a href="http://www.androidviews.net/2012/11/android-appmsg-crouton/"><img id="home_fader-200" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/crouton-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/11/android-appmsg-crouton/">Android-AppMsg (Crouton)</a> </small></h3>
</div>
<div>
<p>By Evgeny Shishkin<br />
Implementation of in-layout notifications. Based on Toast  [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-151" data-type="ios-style other-views " data-id="id-46">
<div></div>
<p><a href="http://www.androidviews.net/2012/10/pull-to-refresh/"><img id="home_fader-151" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/10/pulltorefresh-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/10/pull-to-refresh/">Pull To Refresh</a> </small></h3>
</div>
<div>
<p>By Chris Banes<br />
This project aims to provide a reusable Pull to Refresh widget fo [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-142" data-type="other-views " data-id="id-47">
<div></div>
<p><a href="http://www.androidviews.net/2012/10/radial-menu-widget/"><img id="home_fader-142" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/10/radial-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/10/radial-menu-widget/">Radial Menu Widget</a> </small></h3>
</div>
<div>
<p>By Arindam Nath<br />
A radial menu widget released in this tumblr post.</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-132" data-type="holo-style other-views " data-id="id-48">
<div></div>
<p><a href="http://www.androidviews.net/2012/10/androiddrawer/"><img id="home_fader-132" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/10/AndroidDrawer2-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/10/androiddrawer/">AndroidDrawer</a> </small></h3>
</div>
<div>
<p>By Łukasz Milewski<br />
A simple but powerful menu drawer implementation. A lot of [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-109" data-type="ios-style " data-id="id-49">
<div></div>
<p><a href="http://www.androidviews.net/2012/10/android-coverflow/"><img id="home_fader-109" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/10/coverflow-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/10/android-coverflow/">Android Coverflow</a> </small></h3>
</div>
<div>
<p>A simple implementation of coverflow for Android. It is largely based on code e [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-92" data-type="ios-style " data-id="id-50">
<div></div>
<p><a href="http://www.androidviews.net/2012/10/wheel-widget/"><img id="home_fader-92" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/10/wheel-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/10/wheel-widget/">Wheel Widget</a> </small></h3>
</div>
<div>
<p>The Wheel Widget by Yuri Kanivets is supposed to serve as Android’s eq [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-227" data-type="other-views " data-id="id-51">
<div></div>
<p><a href="http://www.androidviews.net/2012/10/indexablelistview/"><img id="home_fader-227" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/11/indexable-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/10/indexablelistview/">IndexableListView</a> </small></h3>
</div>
<div>
<p>By Daniel Nam<br />
iPhone like fast scroll ListView on Android.</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-71" data-type="holo-style other-views " data-id="id-52">
<div></div>
<p><a href="http://www.androidviews.net/2012/10/swipe-to-dismiss/"><img id="home_fader-71" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/10/swipe-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/10/swipe-to-dismiss/">Swipe-To-Dismiss</a> </small></h3>
</div>
<div>
<p>by Roman Nurik.<br />
This is Android 4.0 style Swipe-To-Dismiss implementation.<br />
The [...]</p>
</div>
<div></div>
<div></div>
</div>
<div id="post-100" data-type="ios-style " data-id="id-53">
<div></div>
<p><a href="http://www.androidviews.net/2012/10/view-badger/"><img id="home_fader-100" alt="" src="http://www.androidviews.net/wp-content/uploads/2012/10/viewbadger-420x210.png" /> </a></p>
<div>
<h3><small> <a href="http://www.androidviews.net/2012/10/view-badger/">View Badger</a> </small></h3>
</div>
<div>
<p>By Jeff Gilfelt<br />
A simple way to “badge” any given Android view at ru [...]</p>
</div>
<div></div>
</div>
</div>
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/06/03/android-free-and-beautiful-interfaces-and-libraries-for-download-open-source/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/06/03/android-free-and-beautiful-interfaces-and-libraries-for-download-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sublime Text 2: Substituindo Palavras Rapidamente (refatoração)</title>
		<link>http://www.redrails.com.br/2013/04/17/sublime-text-2-substituindo-palavras-rapidamente-refatoracao/</link>
		<comments>http://www.redrails.com.br/2013/04/17/sublime-text-2-substituindo-palavras-rapidamente-refatoracao/#comments</comments>
		<pubDate>Wed, 17 Apr 2013 13:23:17 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=2000</guid>
		<description><![CDATA[&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Olá leitores, Normalmente utilizava uma serie de comandos para poder substituir todas as ocorrências de palavras no Sublime. Ctrl+F depois: Alt+ENTER hoje descobri uma forma bem mais rápida e mais fácil. Coloque o cursor do Mouse sobre a palavra e pressione Ctrl+D quantas vezes forem as [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.redrails.com.br/wp-content/uploads/2013/03/sublime-text-2-logo.jpg"><img class="alignleft size-full wp-image-1976" alt="sublime-text-2-logo" src="http://www.redrails.com.br/wp-content/uploads/2013/03/sublime-text-2-logo.jpg" width="300" height="300" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Olá leitores,<br />
Normalmente utilizava uma serie de comandos para poder substituir todas as ocorrências de palavras no Sublime.</p>
<blockquote><p>Ctrl+F<br />
depois:<br />
Alt+ENTER</p></blockquote>
<p>hoje descobri uma forma bem mais rápida e mais fácil.</p>
<p>Coloque o cursor do Mouse sobre a palavra e pressione Ctrl+D quantas vezes forem as palavras que você queria substituir&#8230; pronto só digitar a palavra pela qual deseja substituir.</p>
<p>Isso ajuda caso você queira substituir palavras dentro de um bloco, de maneira mais controlada.</p>
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/04/17/sublime-text-2-substituindo-palavras-rapidamente-refatoracao/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/04/17/sublime-text-2-substituindo-palavras-rapidamente-refatoracao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Economize o Home Button de seu Smartphone</title>
		<link>http://www.redrails.com.br/2013/04/09/economize-o-home-button-de-seu-smartphone/</link>
		<comments>http://www.redrails.com.br/2013/04/09/economize-o-home-button-de-seu-smartphone/#comments</comments>
		<pubDate>Tue, 09 Apr 2013 11:24:35 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Aplicativos]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1984</guid>
		<description><![CDATA[Hoje pela manhã peguei meu Galaxy S3, como faço toda manhã (toda hora), para fuçar em alguma coisa quando apertei o Home Button &#8230; CRECK um estalo de partir o coração veio do aparelho&#8230; pensei&#8230; putz f*d*u!! mas foi só um susto, mas que susto&#8230; ai pensei caramba se continuar usando o Home Button assim [...]]]></description>
				<content:encoded><![CDATA[<p>Hoje pela manhã peguei meu Galaxy S3, como faço toda manhã (toda hora), para fuçar em alguma coisa quando apertei o Home Button &#8230; CRECK um estalo de partir o coração veio do aparelho&#8230; pensei&#8230; putz f*d*u!! mas foi só um susto, mas que susto&#8230; ai pensei caramba se continuar usando o Home Button assim o tempo todo para minimizar aplicações, fechar aplicativos antigos, e alternar entre aplicativos recentes vou acabar quebrando esse trem uma hora.</p>
<p>Pensei&#8230; deve ter alguma forma de utilizar menos o botão, um widget, ou um Home Button Virtual&#8230; pensei&#8230; vou desenvolver um&#8230; grande ideia, vou fazer um Home Button que vai ficar no Status bar que ai será acessível a maioria dos casos&#8230; já estava quase para abrir o notebook quando pensei&#8230; uai&#8230; alguém já deve ter pensado nisso&#8230; não é possível.</p>
<p>Uma busca rápida no Play e infelizmente ou felizmente&#8230; já existiam alguma opções&#8230; e uma delas ótima My Home Button, então deixo aqui pra você caro amigo uma dica, instale essa bagaça e seja feliz dando mais alguns tempos de vida útil para seu Home Button <img src='http://www.redrails.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<!-- WP-Appbox (Store: googleplay // ID: wq.myhomebutton) --><div class="appcontainer feed googleplay">
	<table width="100%;">
		<tr>
			<td style="width: 88px;"><a target="_blank" href="https://play.google.com/store/apps/details?id=wq.myhomebutton" title="My Home Button"><img style="border-radius: 6px !important; border: 0 !important; padding: 0 !important; width: 80px !important; height: 80px !important;" src="https://lh3.ggpht.com/A0x3jzuH1qRkE10HcTiT4qQr_6iAqVg-CTsoIqxnoIFyv92V91WI3KqiVlOvLtfoMRg=w124" alt="My Home Button" /></a></td>
			<td>
				<a target="_blank" href="https://play.google.com/store/apps/details?id=wq.myhomebutton" title="My Home Button">My Home Button<img src="http://www.redrails.com.br/wp-content/plugins/wp-appbox/img/googleplay-small.png" style="margin-left:6px !important;" /></a><br />
				Preis: Kostenlos			</td>
		</tr>
	</table>
</div><!-- /WP-Appbox -->
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/04/09/economize-o-home-button-de-seu-smartphone/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/04/09/economize-o-home-button-de-seu-smartphone/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sublime Text 2: Jump to Method /Definition / Declaration</title>
		<link>http://www.redrails.com.br/2013/03/14/sublime-text-2-jump-to-method-definition-declaration/</link>
		<comments>http://www.redrails.com.br/2013/03/14/sublime-text-2-jump-to-method-definition-declaration/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 18:55:21 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1966</guid>
		<description><![CDATA[&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Uma das únicas coisas que ainda me impediam totalmente de migrar para o Sublime Text 2 era a possibilidade de clicar em um método e ele ir para a definição igual a IDE&#8217;s como NetBeans, Eclipse etc&#8230; depois de algumas pesquisas descobri que era possível [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.redrails.com.br/wp-content/uploads/2013/03/sublime-text-2-jump+to_method+ubuntu.jpg"><img class="alignleft size-full wp-image-1978" alt="sublime-text-2-jump+to_method+ubuntu" src="http://www.redrails.com.br/wp-content/uploads/2013/03/sublime-text-2-jump+to_method+ubuntu.jpg" width="300" height="300" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Uma das únicas coisas que ainda me impediam totalmente de migrar para o Sublime Text 2 era a possibilidade de clicar em um método e ele ir para a definição igual a IDE&#8217;s como <strong>NetBeans</strong>, <strong>Eclipse</strong> etc&#8230; depois de algumas pesquisas descobri que era possível utilizando o plugin <strong>SublimeCodeIntel</strong>, mas por algum motivo não funcionava no<strong> Ubuntu</strong>&#8230; pesquisando mais um pouco veio a solução e está aqui pra você</p>
<p>Primeiramente deve-se instalar o o <a href="https://github.com/Kronuz/SublimeCodeIntel" target="_blank"><strong>SublimeCodeInte</strong>l</a> ( utilizando o <a href="http://wbond.net/sublime_packages/package_control" target="_blank"><strong>Package Control plugin</strong></a> pra facilitar seu trabalho )</p>
<p>Feito isso vamos configura-lo, dependendo da linguagem que você for usar, edite o arquivo <tt>~/.codeintel/config</tt> adicionando a localização da sua linguagem, exemplos:</p>
<blockquote>
<pre>{
    "PHP": {
        "php": '/usr/bin/php',
        "phpExtraPaths": [],
        "phpConfigFile": 'php.ini'
    },
    "JavaScript": {
        "javascriptExtraPaths": []
    },
    "Perl": {
        "perl": "/usr/bin/perl",
        "perlExtraPaths": []
    },
    "Ruby": {
        "ruby": "/usr/bin/ruby",
        "rubyExtraPaths": []
    },
    "Python": {
        "python": '/usr/bin/python',
        "pythonExtraPaths": []
    },
    "Python3": {
        "python": '/usr/bin/python3',
        "pythonExtraPaths": []
    }
}</pre>
</blockquote>
<p>Agora você irá precisar compilar o plugin para que suas alterações sejam ativadas:</p>
<p>para isso precisará intalar alguns pacotes, como estamos no <strong>Ubuntu</strong> faça o seguinte:</p>
<blockquote>
<pre>$ sudo apt-get install g++

$ sudo apt-get install python-dev</pre>
</blockquote>
<p>Feito isso vamos compilar nosso CodeIntel, vá para o diretório :</p>
<pre>/home/luiz/.config/sublime-text-2/Packages/SublimeCodeIntel/src</pre>
<blockquote>
<pre>$ chmod +x build.sh
$ ./build.sh</pre>
</blockquote>
<p>No meu caso, ainda tive um problema de codificação no <strong>SublimeCodeIntel</strong>, solução pra isso? Edite  o arquivo :</p>
<pre>  .config/sublime-text-2/Packages/SublimeCodeIntel/SublimeCodeIntel.py</pre>
<p>com o seguinte código:</p>
<blockquote><pre class="javascript PluGeSHin"><span class="kw2">import</span> sys
<span class="kw2">import</span> os
&nbsp;
code <span class="sy0">=</span> sys.<span class="me1">getdefaultencoding</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="kw1">if</span> code <span class="sy0">!=</span> <span class="st0">'utf8'</span><span class="sy0">:</span>
    reload<span class="br0">&#40;</span>sys<span class="br0">&#41;</span>
    sys.<span class="me1">setdefaultencoding</span><span class="br0">&#40;</span><span class="st0">'utf8'</span><span class="br0">&#41;</span></pre></blockquote>
<p>Outra coisa é que o atalho do SublimeCodeIntel (alt+click) já é utilizado pelo Ubuntu para mover janelas, então para modificar isso teremos que alterar essa tecla de atalho, eu utilizo a mesma sequência do Netbeans (Ctrl+Click), façam o seguinte. altere o arquivo</p>
<blockquote>
<pre>.config/sublime-text-2/Packages/SublimeCodeIntel/Default\ \(Linux\).sublime-mousemap</pre>
</blockquote>
<p>de</p>
<blockquote>
<pre>[
    { "button": "button1", "modifiers": ["alt"], "command": "goto_python_definition", "press_command": "drag_select" }
]</pre>
</blockquote>
<p>para</p>
<blockquote>
<pre>[
    { "button": "button1", "modifiers": ["ctrl"], "command": "goto_python_definition", "press_command": "drag_select" }
]</pre>
</blockquote>
<p>Reinicie o Sublime e seja feliz <img src='http://www.redrails.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/03/14/sublime-text-2-jump-to-method-definition-declaration/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/03/14/sublime-text-2-jump-to-method-definition-declaration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deploy com Git, Capistrano, Nginx e Unicorn na Velocidade da Luz</title>
		<link>http://www.redrails.com.br/2013/03/13/deploy-com-git-capistrano-nginx-e-unicorn-na-velocidade-da-luz/</link>
		<comments>http://www.redrails.com.br/2013/03/13/deploy-com-git-capistrano-nginx-e-unicorn-na-velocidade-da-luz/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 02:05:53 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1942</guid>
		<description><![CDATA[&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Todos nós que já desenvolvemos aplicações WEB e tivemos que implantalas, lembramos dos dias que simplesmente carregamos os arquivos via FTP para o servidor e pronto, tudo estava feito, ou quase isso. Hoje em dia temos que clonar repositórios GIT, reiniciar servidores, definir permissões, criar links simbólicos [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.redrails.com.br/wp-content/uploads/2013/03/rocket+git+capistrano+rails+unicorn+nginx.png"><img class="alignleft size-medium wp-image-1943" alt="rocket+git+capistrano+rails+unicorn+nginx" src="http://www.redrails.com.br/wp-content/uploads/2013/03/rocket+git+capistrano+rails+unicorn+nginx-300x242.png" width="300" height="242" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Todos nós que já desenvolvemos aplicações WEB e tivemos que implantalas, lembramos dos dias que simplesmente carregamos os arquivos via FTP para o servidor e pronto, tudo estava feito, ou quase isso. Hoje em dia temos que clonar repositórios GIT, reiniciar servidores, definir permissões, criar links simbólicos para arquivos de configurações e outros, limpar cache&#8230; dentre outros procedimentos cansativos..</p>
<h3>Doutor, o que está errado?</h3>
<p>Na minha opinião existem dois problemas críticos com deploys de hoje:</p>
<ul>
<li>     Eles são lentos</li>
<li>     Eles causam downtime.</li>
</ul>
<p>Ambos os temas foram discutidos por grandes empresas como Twitter e Github. Eles têm otimizado o seu processo de deploy para permitir implementações rápidas e contínuas (sem o downtime),  utilizando o Capistrano. Que possíbilita que com pouco trabalho, implantar soluções de deploy similares a do  Github e Twitter.</p>
<h3>Então vamos lá</h3>
<p>Este guia vai ajudar você a configurar o servidor com Rails 3 com rápido deoloy e zero-downtime. Eu vou estar usando Nginx + Unicorn como servidor para a aplicação, git + capistrano para o deploy.</p>
<h3> Nossa Lista de Compras</h3>
<p>Você vai precisar dos seguintes ingredientes:</p>
<ul>
<li>Um Ubuntu Server recente (Eu usei 12.04 Netty);</li>
<li>Sua aplicação Rails 3;</li>
<li>Um respositório remoto com Git, contendo sua aplicação.</li>
</ul>
<h3> Pressupostos</h3>
<p>Eu estou fazendo algumas suposições sobre sua aplicação:</p>
<ul>
<li>     ruby 1.9.2</li>
<li>     Aplicações Rails 3.1 usando Postgres chamado <em>my_site</em></li>
<li>     Você quer usar o RVM e Bundle</li>
</ul>
<h3>Configurar o servidor</h3>
<p>Existem algumas coisas que você precisa configurar antes de começar. Os comandos são executados como Root.</p>
<p>Aqui está a lista completa de comando apt-get que eu usei.</p>
<p>&nbsp;</p>
<blockquote>
<pre>apt-get update
apt-get upgrade -y    
apt-get install build-essential ruby-full libmagickcore-dev imagemagick libxml2-dev \
  libxslt1-dev git-core postgresql postgresql-client postgresql-server-dev-9.1 nginx curl
apt-get build-dep ruby1.9.1</pre>
</blockquote>
<p>obs: em <em>postgresql-server-dev-9.1</em> substitua pela versão corrente&#8230;</p>
<p>Você irá precisar designar um usuário para rodar sua aplicação. Acredite em mim, você não irá querer fazer isso com o <em>Root</em>. Eu chamo o meu de <em>deployer</em></p>
<blockquote>
<pre>useradd -m -g staff -s /bin/bash deployer
passwd deployer</pre>
</blockquote>
<p>Para permitir que o <em>deployer</em> execute comando como super-user, adicionar isso em<em> /etc/sudoers.</em></p>
<blockquote><p> # /etc/sudoers</p>
<p>%staff ALL=(ALL) ALL</p></blockquote>
<h3> Ruby and RVM</h3>
<p>Feito isso, você está pronto para instalar rvm. certifique-se de executar isso como root.</p>
<blockquote>
<pre>bash -s stable &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
source /home/deployer/.rvm/scripts/rvm</pre>
</blockquote>
<p>Agora instale o Ruby, neste caso o ruby-1.9.2-p290, e o rubygem.</p>
<blockquote>
<pre>rvm install ruby-1.9.3
wget http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz
tar zxvf rubygems-1.8.10.tgz
cd rubygems-1.8.10
ruby setup.rb</pre>
</blockquote>
<p>Criae um arquivo <em>~ /gemrc</em>, este estabelece alguns padrões necessários para o seu servidor de produção:</p>
<blockquote>
<pre># ~/.gemrc
---
:verbose: true
:bulk_threshold: 1000
install: --no-ri --no-rdoc --env-shebang
:sources:
- http://gemcutter.org
- http://gems.rubyforge.org/
- http://gems.github.com
:benchmark: false
:backtrace: false
update: --no-ri --no-rdoc --env-shebang
:update_sources: true</pre>
</blockquote>
<p>Agora crie o <code>~/.rvmrc</code></p>
<blockquote><p> # ~/.rvmrc</p>
<p>rvm_trust_rvmrcs_flag=1</p></blockquote>
<p>Nota: fazer isso tanto para o usuário <em>root</em> quanto para o deployer para evitar confusão mais tarde.</p>
<p>Porque você vai estar rodando sua aplicação em modo de produção otempo, adicione a seguinte linha ao arquivo /etc/environment, de modo que você não tem que repeti-lo com todos os comandos Rails que vocẽ vai usar:</p>
<blockquote>
<pre>RAILS_ENV=production</pre>
</blockquote>
<p>Eu não sei que todo mundo usa Postgres, mas eu uso. Primeiro, crie o banco e o login como o usuário postgres:</p>
<blockquote>
<pre>sudo -u postgres createdb my_site
sudo -u postgres psql</pre>
</blockquote>
<p>Depois execute essas SQL</p>
<div>
<blockquote>
<pre>CREATE USER my_site WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE my_site TO my_site;</pre>
</blockquote>
</div>
<h2>Nginx</h2>
<p>Nginx é um grande parte da engenharia Russa. Você precisará de algumas configurações:</p>
<blockquote>
<pre># /etc/nginx/sites-available/default
upstream my_site {
  # fail_timeout=0 means we always retry an upstream even if it failed
  # to return a good HTTP response (in case the Unicorn master nukes a
  # single worker for timing out).

  # for UNIX domain socket setups:
  server unix:/tmp/my_site.socket fail_timeout=0;
}

server {
    # if you're running multiple servers, instead of "default" you should
    # put your main domain name here
    listen 80 default;

    # you could put a list of other domain names this application answers
    server_name my_site.example.com;

    root /home/deployer/apps/my_site/current/public;
    access_log /var/log/nginx/my_site_access.log;
    rewrite_log on;

    location / {
        #all requests are sent to the UNIX socket
        proxy_pass  http://my_site;
        proxy_redirect     off;

        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }

    # if the request is for a static resource, nginx should serve it directly
    # and add a far future expires header to it, making the browser
    # cache the resource and navigate faster over the website
    # this probably needs some work with Rails 3.1's asset pipe_line
    location ~ ^/(images|javascripts|stylesheets|system)/  {
      root /home/deployer/apps/my_site/current/public;
      expires max;
      break;
    }
}</pre>
</blockquote>
<p>E mais isso</p>
<blockquote>
<pre># /etc/nginx/nginx.conf 
user deployer staff;

# Change this depending on your hardware
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay off;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    gzip_proxied any;
    gzip_min_length 500;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}</pre>
</blockquote>
<p>Ok, agora o Nginx está funcionando. Você preicsa inicia-lo, ele deve dar um erro 500 ou um erro de proxy:</p>
<blockquote>
<pre>/etc/init.d/nginx start</pre>
</blockquote>
<h2>Unicorn</h2>
<p>A parte seguinte envolve a criação de Capistrano e unicórnio para o seu projeto. É aqui que a verdadeira magia acontece.</p>
<p>Você estará fazendo cap deploy 99% do tempo. Este comando precisa ser rápido. Para realizar isso, quero utilizar o poder do git. Em vez de ter O Capistrano fazendo  malabarismos em torno de um monte de diretórios, o que é dolorosamente lento, eu quero usar o git para mudar para a versão correta do meu aplicativo. Isso significa que vou ter apenas um diretório que é atualizado pelo git somente quando ele precisar.</p>
<p>Vamos começar adicionando algumas <em>gem</em> para sua aplicação. Quando tive-lo feito executae <em>bundle install</em></p>
<blockquote>
<pre># Gemfile
gem "unicorn"

group :development do
  gem "capistrano"
end</pre>
</blockquote>
<p>Pŕoximo passo é adicionar um arquivo de configuração para o unicorn:<em> config/uniconr.rb</em></p>
<blockquote><pre class="ruby PluGeSHin"><span class="co1"># config/unicorn.rb</span>
<span class="co1"># Set environment to development unless something else is specified</span>
env = ENV<span class="br0">&#91;</span><span class="st0">&quot;RAILS_ENV&quot;</span><span class="br0">&#93;</span> <span class="sy0">||</span> <span class="st0">&quot;development&quot;</span>
<span class="co1"># See http://unicorn.bogomips.org/Unicorn/Configurator.html for complete</span>
<span class="co1"># documentation.</span>
worker_processes <span class="nu0">4</span>
<span class="co1"># listen on both a Unix domain socket and a TCP port,</span>
<span class="co1"># we use a shorter backlog for quicker failover when busy</span>
listen <span class="st0">&quot;/tmp/my_site.socket&quot;</span>, <span class="re3">:backlog</span> <span class="sy0">=&gt;</span> <span class="nu0">64</span>
<span class="co1"># Preload our app for more speed</span>
preload_app <span class="kw2">true</span>
<span class="co1"># nuke workers after 30 seconds instead of 60 seconds (the default)</span>
timeout <span class="nu0">30</span>
pid <span class="st0">&quot;/tmp/unicorn.my_site.pid&quot;</span>
<span class="co1"># Production specific settings</span>
<span class="kw1">if</span> env == <span class="st0">&quot;production&quot;</span>
<span class="co1"># Help ensure your application will always spawn in the symlinked</span>
<span class="co1"># &quot;current&quot; directory that Capistrano sets up.</span>
working_directory <span class="st0">&quot;/home/deployer/apps/my_site/current&quot;</span>
<span class="co1"># feel free to point this anywhere accessible on the filesystem</span>
user <span class="st0">'deployer'</span>, <span class="st0">'staff'</span>
shared_path = <span class="st0">&quot;/home/deployer/apps/my_site/shared&quot;</span>
stderr_path <span class="st0">&quot;#{shared_path}/log/unicorn.stderr.log&quot;</span>
stdout_path <span class="st0">&quot;#{shared_path}/log/unicorn.stdout.log&quot;</span>
<span class="kw1">end</span>
before_fork <span class="kw1">do</span> <span class="sy0">|</span>server, worker<span class="sy0">|</span>
<span class="co1"># the following is highly recomended for Rails + &quot;preload_app true&quot;</span>
<span class="co1"># as there's no need for the master process to hold a connection</span>
<span class="kw1">if</span> <span class="kw1">defined</span>?<span class="br0">&#40;</span><span class="re2">ActiveRecord::Base</span><span class="br0">&#41;</span>
<span class="re2">ActiveRecord::Base</span>.<span class="me1">connection</span>.<span class="me1">disconnect</span>!
<span class="kw1">end</span>
<span class="co1"># Before forking, kill the master process that belongs to the .oldbin PID.</span>
<span class="co1"># This enables 0 downtime deploys.</span>
old_pid = <span class="st0">&quot;/tmp/unicorn.my_site.pid.oldbin&quot;</span>
<span class="kw1">if</span> <span class="kw4">File</span>.<span class="me1">exists</span>?<span class="br0">&#40;</span>old_pid<span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> server.<span class="me1">pid</span> != old_pid
<span class="kw1">begin</span>
<span class="kw4">Process</span>.<span class="me1">kill</span><span class="br0">&#40;</span><span class="st0">&quot;QUIT&quot;</span>, <span class="kw4">File</span>.<span class="me1">read</span><span class="br0">&#40;</span>old_pid<span class="br0">&#41;</span>.<span class="me1">to_i</span><span class="br0">&#41;</span>
<span class="kw1">rescue</span> <span class="kw4">Errno</span>::ENOENT, <span class="kw4">Errno</span>::ESRCH
<span class="co1"># someone else did our job for us</span>
<span class="kw1">end</span>
<span class="kw1">end</span>
<span class="kw1">end</span>
after_fork <span class="kw1">do</span> <span class="sy0">|</span>server, worker<span class="sy0">|</span>
<span class="co1"># the following is *required* for Rails + &quot;preload_app true&quot;,</span>
<span class="kw1">if</span> <span class="kw1">defined</span>?<span class="br0">&#40;</span><span class="re2">ActiveRecord::Base</span><span class="br0">&#41;</span>
<span class="re2">ActiveRecord::Base</span>.<span class="me1">establish_connection</span>
<span class="kw1">end</span>
<span class="co1"># if preload_app is true, then you may also want to check and</span>
<span class="co1"># restart any other shared sockets/descriptors such as Memcached,</span>
<span class="co1"># and Redis.  TokyoCabinet file handles are safe to reuse</span>
<span class="co1"># between any number of forked children (assuming your kernel</span>
<span class="co1"># correctly implements pread()/pwrite() system calls)</span>
<span class="kw1">end</span></pre></blockquote>
<p>Ok, como você pode ver temos umas coisas bem legais aqui como reiniciar o servidor sem intervalos ( zero-downtime). Deixe-me contar mais algumas coisas sobre isso.</p>
<p>Unicorn iniciar o processo principal e gera diversos workers ( nós configuramos 4). Quando voce envia o sinal USR2 ao Unicorn, então ele renomeia o servidor principal (antigo) e cria um novo processo, que assume o serviço do master. O antigo serviço ainda continua rodando.</p>
<p>Agora, quando o novo serviço princial iniciar e segmentar esse trabalho, este checka o PID do novo e do antigo processo principal. Se eles forem diferentes, então o novo é iniciado e o para o antigo é enviado um sinal QUIT e shutdown gracefully.</p>
<h2>Capistrano</h2>
<p>Agora para o Capistrano, adicionando as seguintes linhas no <em>Gemfile</em>.</p>
<blockquote><p># Gemfile<br />
group :development do<br />
gem &#8220;capistrano&#8221;<br />
end</p></blockquote>
<p>E geramos os arquivos necessários para o capoistrano</p>
<blockquote>
<pre>capify .</pre>
</blockquote>
<p>Abra seu config/deploy.rb e substitua pelos seguintes comandos</p>
<p>Este script de deploy não é totalmente abrangente, mas possui um pulo do gato, quando deletamos a pasta atual, mantendo apenas a última versão do projeto, assim não acumulando espaço desnecessário.</p>
<blockquote>
<pre># config/deploy.rb 
require "bundler/capistrano"

set :scm,             :git
set :repository,      "git@codeplane.com:you/my_site.git"
set :branch,          "origin/master"
set :migrate_target,  :current
set :ssh_options,     { :forward_agent =&gt; true }
set :rails_env,       "production"
set :deploy_to,       "/home/deployer/apps/my_site"
set :normalize_asset_timestamps, false

set :user,            "deployer"
set :group,           "staff"
set :use_sudo,        false

role :web,    "123.456.789.012"
role :app,    "123.456.789.012"
role :db,     "123.456.789.012", :primary =&gt; true

set(:latest_release)  { fetch(:current_path) }
set(:release_path)    { fetch(:current_path) }
set(:current_release) { fetch(:current_path) }

set(:current_revision)  { capture("cd #{current_path}; git rev-parse --short HEAD").strip }
set(:latest_revision)   { capture("cd #{current_path}; git rev-parse --short HEAD").strip }
set(:previous_revision) { capture("cd #{current_path}; git rev-parse --short HEAD@{1}").strip }

default_environment["RAILS_ENV"] = 'production'

# Use our ruby-1.9.2-p290@my_site gemset
default_environment["PATH"]         = "--"
default_environment["GEM_HOME"]     = "--"
default_environment["GEM_PATH"]     = "--"
default_environment["RUBY_VERSION"] = "ruby-1.9.2-p290"

default_run_options[:shell] = 'bash'

namespace :deploy do
  desc "Deploy your application"
  task :default do
    update
    restart
  end

  desc "Setup your git-based deployment app"
  task :setup, :except =&gt; { :no_release =&gt; true } do
    dirs = [deploy_to, shared_path]
    dirs += shared_children.map { |d| File.join(shared_path, d) }
    run "#{try_sudo} mkdir -p #{dirs.join(' ')} &amp;&amp; #{try_sudo} chmod g+w #{dirs.join(' ')}"
    run "git clone #{repository} #{current_path}"
  end

  task :cold do
    update
    migrate
  end

  task :update do
    transaction do
      update_code
    end
  end

  desc "Update the deployed code."
  task :update_code, :except =&gt; { :no_release =&gt; true } do
    run "cd #{current_path}; git fetch origin; git reset --hard #{branch}"
    finalize_update
  end

  desc "Update the database (overwritten to avoid symlink)"
  task :migrations do
    transaction do
      update_code
    end
    migrate
    restart
  end

  task :finalize_update, :except =&gt; { :no_release =&gt; true } do
    run "chmod -R g+w #{latest_release}" if fetch(:group_writable, true)

    # mkdir -p is making sure that the directories are there for some SCM's that don't
    # save empty folders
    run &lt;&lt;-CMD
      rm -rf #{latest_release}/log #{latest_release}/public/system #{latest_release}/tmp/pids &amp;&amp;
      mkdir -p #{latest_release}/public &amp;&amp;
      mkdir -p #{latest_release}/tmp &amp;&amp;
      ln -s #{shared_path}/log #{latest_release}/log &amp;&amp;
      ln -s #{shared_path}/system #{latest_release}/public/system &amp;&amp;
      ln -s #{shared_path}/pids #{latest_release}/tmp/pids &amp;&amp;
      ln -sf #{shared_path}/database.yml #{latest_release}/config/database.yml
    CMD

    if fetch(:normalize_asset_timestamps, true)
      stamp = Time.now.utc.strftime("%Y%m%d%H%M.%S")
      asset_paths = fetch(:public_children, %w(images stylesheets javascripts)).map { |p| "#{latest_release}/public/#{p}" }.join(" ")
      run "find #{asset_paths} -exec touch -t #{stamp} {} ';'; true", :env =&gt; { "TZ" =&gt; "UTC" }
    end
  end

  desc "Zero-downtime restart of Unicorn"
  task :restart, :except =&gt; { :no_release =&gt; true } do
    run "kill -s USR2 `cat /tmp/unicorn.my_site.pid`"
  end

  desc "Start unicorn"
  task :start, :except =&gt; { :no_release =&gt; true } do
    run "cd #{current_path} ; bundle exec unicorn_rails -c config/unicorn.rb -D"
  end

  desc "Stop unicorn"
  task :stop, :except =&gt; { :no_release =&gt; true } do
    run "kill -s QUIT `cat /tmp/unicorn.my_site.pid`"
  end  

  namespace :rollback do
    desc "Moves the repo back to the previous version of HEAD"
    task :repo, :except =&gt; { :no_release =&gt; true } do
      set :branch, "HEAD@{1}"
      deploy.default
    end

    desc "Rewrite reflog so HEAD@{1} will continue to point to at the next previous release."
    task :cleanup, :except =&gt; { :no_release =&gt; true } do
      run "cd #{current_path}; git reflog delete --rewrite HEAD@{1}; git reflog delete --rewrite HEAD@{1}"
    end

    desc "Rolls back to the previously deployed version."
    task :default do
      rollback.repo
      rollback.cleanup
    end
  end
end

def run_rake(cmd)
  run "cd #{current_path}; #{rake} #{cmd}"
end</pre>
</blockquote>
<p>Agora, há uma coisa que você precisa fazer. Eu gosto de rodar minhas aplicações utilizando sua propria. Isso mantém tudo mais limpo e isolado. Entre como usuário deployer  e crie o seu gemset. preenchendo os PATH com GEM_HOME , ​​GEM_PATH.</p>
<p>Não se esqueça de instalar o Bundle em seu GEM SET.</p>
<h2>Database configuration</h2>
<p>Eu sempre gostei de colocar o arquiv de configuração fora do GIT, Eu o coloco no diretório SHARED.</p>
<blockquote><p># /home/deployer/apps/my_site/shared/database.yml<br />
production:<br />
adapter: postgresql<br />
encoding: unicode<br />
database: my_site_production<br />
pool: 5<br />
username: my_site<br />
password: password</p></blockquote>
<h2>First setup</h2>
<p>Agora realize o setup de seu deploy, assim:</p>
<blockquote>
<pre>cap deploy:setup</pre>
</blockquote>
<p>Isto irá colnar seu repositório e o conectar com seu database.yml .Opcionalmente, você pode rodar suas migrations ou fazer o upload de suas SQL para iniciar rapidamente sua aplicação.</p>
<h2>Deployments</h2>
<p>Quando você tiver uma nova feature em um branch, realize esse procedimento para realizar o deploy disso:</p>
<ol>
<li>Merge <em><code>feature_branch</code></em> into <em><code>master</code></em></li>
<li>Rode os testes para verificar se tudo está OK.</li>
<li>Push <code>master</code></li>
<li>Execute o  <em><code>cap deploy</code></em></li>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>asd</p>
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/03/13/deploy-com-git-capistrano-nginx-e-unicorn-na-velocidade-da-luz/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/03/13/deploy-com-git-capistrano-nginx-e-unicorn-na-velocidade-da-luz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Client para REST API do Jasper Report Server</title>
		<link>http://www.redrails.com.br/2013/03/07/python-client-para-rest-api-do-jasper-report-server/</link>
		<comments>http://www.redrails.com.br/2013/03/07/python-client-para-rest-api-do-jasper-report-server/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 17:41:02 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1929</guid>
		<description><![CDATA[&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Após Criar a biblioteca em Ruby que é meu forte, pra testar logo o Jasper Report e sua interface REST, tive que implementar uma biblioteca um pouco mais elaborada para que pudesse implantar em meus projetos Django. Eis o resultado Look code in my Github https://github.com/LuizCarvalho/JasperRest/tree/master/python]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.redrails.com.br/wp-content/uploads/2013/03/python-report-jasper-server+logo.png"><img class="alignleft size-medium wp-image-1931" alt="python-report-jasper-server+logo" src="http://www.redrails.com.br/wp-content/uploads/2013/03/python-report-jasper-server+logo-300x300.png" width="300" height="300" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Após Criar a biblioteca em Ruby que é meu forte, pra testar logo o Jasper Report e sua interface REST, tive que implementar uma biblioteca um pouco mais elaborada para que pudesse implantar em meus projetos Django. Eis o resultado</p>
<p><strong>Look code in my Github</strong> <a href="https://github.com/LuizCarvalho/JasperRest/tree/master/python">https://github.com/LuizCarvalho/JasperRest/tree/master/python</a></p>
<pre class="python PluGeSHin"><ol><li class="li1"><div class="de1"><span class="co1"># -*- coding: utf-8 -*-</span></div></li><li class="li1"><div class="de1"><span class="st0">'''</span></div></li><li class="li1"><div class="de1"><span class="st0"> Python Rest Client for Jasper Report Server </span></div></li><li class="li1"><div class="de1"><span class="st0"> Biblioteca para facilitar o processo de comunicação com servidor</span></div></li><li class="li1"><div class="de1"><span class="st0"> de relatório Jasper Report Server</span></div></li><li class="li1"><div class="de1"><span class="st0">'''</span></div></li><li class="li1"><div class="de1">__author__      <span class="sy0">=</span> <span class="st0">&quot;Luiz Carvalho&quot;</span></div></li><li class="li1"><div class="de1">__copyright__   <span class="sy0">=</span> <span class="st0">&quot;Copyright 2013, Defensoria Pública do Estado do Tocantins&quot;</span></div></li><li class="li1"><div class="de1">__version__     <span class="sy0">=</span> <span class="st0">'1.0.1'</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">urllib2</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">base64</span></div></li><li class="li1"><div class="de1"><span class="kw1">from</span> <span class="kw3">urlparse</span> <span class="kw1">import</span> <span class="kw3">urlparse</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">xml</span>.<span class="me1">etree</span>.<span class="me1">ElementTree</span>    <span class="kw1">as</span> ET</div></li><li class="li1"><div class="de1"><span class="kw1">from</span> <span class="kw3">datetime</span> <span class="kw1">import</span> <span class="kw3">datetime</span><span class="sy0">,</span>date</div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">time</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">SERVER_ADDR<span class="sy0">=</span> <span class="st0">&quot;127.0.0.1&quot;</span></div></li><li class="li1"><div class="de1">SERVER_PORT <span class="sy0">=</span> <span class="nu0">8080</span></div></li><li class="li1"><div class="de1">USERNAME <span class="sy0">=</span> <span class="st0">&quot;jasperadmin&quot;</span></div></li><li class="li1"><div class="de1">PASSWORD <span class="sy0">=</span> <span class="st0">&quot;jasperadmin&quot;</span></div></li><li class="li1"><div class="de1">REPORT_URI <span class="sy0">=</span> <span class="st0">&quot;http://%s:%s/jasperserver/rest/report/&quot;</span>%<span class="br0">&#40;</span>SERVER_ADDR<span class="sy0">,</span>SERVER_PORT<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw1">class</span> RestReport<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">    <span class="st0">'''</span></div></li><li class="li1"><div class="de1"><span class="st0">    RestReport é um cliente para acesso A API RESTful dos repositórios do Jasper Report Server</span></div></li><li class="li1"><div class="de1"><span class="st0">    Possibilitando de maneira simples a geração de relatórios presentes no servidor</span></div></li><li class="li1"><div class="de1"><span class="st0">    '''</span></div></li><li class="li1"><div class="de1">    report_name<span class="sy0">=</span> <span class="kw2">None</span></div></li><li class="li1"><div class="de1">    report_path <span class="sy0">=</span> <span class="kw2">None</span></div></li><li class="li1"><div class="de1">    format <span class="sy0">=</span> <span class="st0">'pdf'</span></div></li><li class="li1"><div class="de1">    auth_token <span class="sy0">=</span> <span class="kw2">None</span></div></li><li class="li1"><div class="de1">    auth_cookie <span class="sy0">=</span> <span class="kw2">None</span></div></li><li class="li1"><div class="de1">    uuid <span class="sy0">=</span> <span class="kw2">None</span></div></li><li class="li1"><div class="de1">    params <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="sy0">,</span>report_path<span class="sy0">,</span>report_name<span class="sy0">,</span>format<span class="sy0">=</span><span class="st0">'pdf'</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        <span class="st0">'''</span></div></li><li class="li1"><div class="de1"><span class="st0">        PARAMS: </span></div></li><li class="li1"><div class="de1"><span class="st0">            report_path:`string`</span></div></li><li class="li1"><div class="de1"><span class="st0">                ex: 'athenas','athenas/rh','athenas/edoc'</span></div></li><li class="li1"><div class="de1"><span class="st0">            report_name:`string`</span></div></li><li class="li1"><div class="de1"><span class="st0">                ex: 'protocolo','contracheque'</span></div></li><li class="li1"><div class="de1"><span class="st0">            format:`string` (optional)</span></div></li><li class="li1"><div class="de1"><span class="st0">                ex: 'pdf','csv','xml','xls'</span></div></li><li class="li1"><div class="de1"><span class="st0">        OBS: para passar os parâmetros para consulta utilize  o metodo +set_params(parametros)+       </span></div></li><li class="li1"><div class="de1"><span class="st0">        '''</span></div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">report_name</span> <span class="sy0">=</span> report_name</div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">report_path</span> <span class="sy0">=</span> report_path</div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">format</span> <span class="sy0">=</span> format</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> set_params<span class="br0">&#40;</span><span class="kw2">self</span><span class="sy0">,</span>params<span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        <span class="st0">'''</span></div></li><li class="li1"><div class="de1"><span class="st0">        Inclui os parametros necessários para pesquisa no relatório</span></div></li><li class="li1"><div class="de1"><span class="st0">        PARAMS:</span></div></li><li class="li1"><div class="de1"><span class="st0">            params:`dict`</span></div></li><li class="li1"><div class="de1"><span class="st0">                ex: &quot;criacao_inicio&quot;:`datetime`(2011,1,1),&quot;criacao_final&quot;:`datetime`(2014,1,1),'protocolo':201302011234}</span></div></li><li class="li1"><div class="de1"><span class="st0">        '''</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw2">type</span><span class="br0">&#40;</span>params<span class="br0">&#41;</span> <span class="sy0">==</span> <span class="kw2">dict</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">            <span class="kw1">for</span> k<span class="sy0">,</span>v <span class="kw1">in</span> params.<span class="me1">items</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">                <span class="kw1">if</span> <span class="kw2">isinstance</span><span class="br0">&#40;</span>v<span class="sy0">,</span>date<span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">                    <span class="kw2">self</span>.<span class="me1">params</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">=</span> <span class="kw2">self</span>.<span class="me1">to_ms</span><span class="br0">&#40;</span>v<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">                <span class="kw1">else</span>:</div></li><li class="li1"><div class="de1">                    <span class="kw2">self</span>.<span class="me1">params</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">=</span>v</div></li><li class="li1"><div class="de1">        <span class="kw1">else</span>:</div></li><li class="li1"><div class="de1">            <span class="kw1">raise</span> <span class="kw2">TypeError</span><span class="br0">&#40;</span><span class="st0">&quot;Params is not Dict Type&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> build_xml_request<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        <span class="st0">'''</span></div></li><li class="li1"><div class="de1"><span class="st0">        Cria a estrutura XML para acesso e consulta no relatório</span></div></li><li class="li1"><div class="de1"><span class="st0">        RETURN: xml_request:`string`</span></div></li><li class="li1"><div class="de1"><span class="st0">        '''</span></div></li><li class="li1"><div class="de1">        url_string <span class="sy0">=</span> <span class="st0">&quot;/reports/&quot;</span>+<span class="kw2">self</span>.<span class="me1">report_path</span>+<span class="st0">&quot;/&quot;</span>+<span class="kw2">self</span>.<span class="me1">report_name</span></div></li><li class="li1"><div class="de1">        request_body <span class="sy0">=</span> <span class="st0">&quot;null&quot;</span></div></li><li class="li1"><div class="de1">        <span class="co1">#print &quot;CRIANDO XML PARA: &quot;+url_string</span></div></li><li class="li1"><div class="de1">        <span class="kw1">for</span> k<span class="sy0">,</span>v <span class="kw1">in</span> <span class="kw2">self</span>.<span class="me1">params</span>.<span class="me1">items</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">            request_body +<span class="sy0">=</span> <span class="st0">&quot;<span class="es0">\n</span>%s<span class="es0">\n</span>&quot;</span>% <span class="br0">&#40;</span>k<span class="sy0">,</span> v<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">            <span class="kw1">print</span> <span class="st0">&quot;CHAVE=&gt;&quot;</span><span class="sy0">,</span>k<span class="sy0">,</span><span class="st0">&quot;VALOR=&gt;&quot;</span><span class="sy0">,</span>v</div></li><li class="li1"><div class="de1">        request_body+<span class="sy0">=</span><span class="st0">&quot;&quot;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">return</span> request_body</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> authenticator<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        <span class="st0">'''</span></div></li><li class="li1"><div class="de1"><span class="st0">        Realiza a autenticação e preparação no servidor Jasper Report para que seja possível a geração do relatório.</span></div></li><li class="li1"><div class="de1"><span class="st0">        '''</span>        </div></li><li class="li1"><div class="de1">        handle <span class="sy0">=</span> <span class="kw2">None</span></div></li><li class="li1"><div class="de1">        body <span class="sy0">=</span> <span class="st0">&quot;&quot;</span>        </div></li><li class="li1"><div class="de1">        uri <span class="sy0">=</span> REPORT_URI+<span class="st0">&quot;reports/&quot;</span>+<span class="kw2">self</span>.<span class="me1">report_path</span>+<span class="st0">&quot;/&quot;</span>+<span class="kw2">self</span>.<span class="me1">report_name</span>+<span class="st0">&quot;/?RUN_OUTPUT_FORMAT=&quot;</span>+<span class="kw2">self</span>.<span class="me1">format</span></div></li><li class="li1"><div class="de1">        req <span class="sy0">=</span> <span class="kw3">urllib2</span>.<span class="me1">Request</span><span class="br0">&#40;</span>uri<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        base64string <span class="sy0">=</span> <span class="kw3">base64</span>.<span class="me1">encodestring</span><span class="br0">&#40;</span><span class="st0">'%s:%s'</span> % <span class="br0">&#40;</span>USERNAME<span class="sy0">,</span> PASSWORD<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>:-<span class="nu0">1</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">        authheader <span class="sy0">=</span>    <span class="st0">&quot;Basic %s&quot;</span> % base64string</div></li><li class="li1"><div class="de1">        req.<span class="me1">add_header</span><span class="br0">&#40;</span><span class="st0">&quot;Authorization&quot;</span><span class="sy0">,</span> authheader<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        req.<span class="me1">get_method</span> <span class="sy0">=</span> <span class="kw1">lambda</span>: <span class="st0">'PUT'</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        req.<span class="me1">data</span> <span class="sy0">=</span> <span class="kw2">self</span>.<span class="me1">build_xml_request</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">try</span>:</div></li><li class="li1"><div class="de1">                handle <span class="sy0">=</span> <span class="kw3">urllib2</span>.<span class="me1">urlopen</span><span class="br0">&#40;</span>req<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">                <span class="kw2">self</span>.<span class="me1">auth_cookie</span> <span class="sy0">=</span>    handle.<span class="me1">headers</span><span class="br0">&#91;</span><span class="st0">&quot;Set-Cookie&quot;</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">                body <span class="sy0">=</span> handle.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">except</span> <span class="kw2">Exception</span><span class="sy0">,</span> e:                </div></li><li class="li1"><div class="de1">                <span class="kw1">raise</span> RestError<span class="br0">&#40;</span>e<span class="sy0">,</span><span class="st0">&quot;O Servidor não está respondendo ao endereço solicitado: &quot;</span>+uri<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw3">xml</span> <span class="sy0">=</span> ET.<span class="me1">fromstring</span><span class="br0">&#40;</span>body<span class="br0">&#41;</span>    </div></li><li class="li1"><div class="de1">        <span class="kw1">try</span>:            </div></li><li class="li1"><div class="de1">            uuid <span class="sy0">=</span> <span class="kw3">xml</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">'uuid'</span><span class="br0">&#41;</span>.<span class="me1">text</span>            </div></li><li class="li1"><div class="de1">        <span class="kw1">except</span> <span class="kw2">Exception</span><span class="sy0">,</span> e:            </div></li><li class="li1"><div class="de1">            <span class="kw1">raise</span> <span class="kw2">ValueError</span><span class="br0">&#40;</span>e<span class="sy0">,</span><span class="st0">&quot;Identificador do Relatório Não Encontrado (UUID)&quot;</span><span class="br0">&#41;</span>            </div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">uuid</span> <span class="sy0">=</span> uuid</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> generate_report<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        <span class="st0">'''</span></div></li><li class="li1"><div class="de1"><span class="st0">        Gera o relatório no servidor retornando o conteúdo do relatório em dados</span></div></li><li class="li1"><div class="de1"><span class="st0">        RETURN: report_data:`string`</span></div></li><li class="li1"><div class="de1"><span class="st0">        '''</span></div></li><li class="li1"><div class="de1">        body <span class="sy0">=</span> <span class="kw2">None</span></div></li><li class="li1"><div class="de1">        auth <span class="sy0">=</span> <span class="kw2">self</span>.<span class="me1">authenticator</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        req <span class="sy0">=</span> <span class="kw3">urllib2</span>.<span class="me1">Request</span><span class="br0">&#40;</span>REPORT_URI+<span class="kw2">self</span>.<span class="me1">uuid</span>+<span class="st0">&quot;?file=report&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        base64string <span class="sy0">=</span> <span class="kw3">base64</span>.<span class="me1">encodestring</span><span class="br0">&#40;</span><span class="st0">'%s:%s'</span> % <span class="br0">&#40;</span>USERNAME<span class="sy0">,</span> PASSWORD<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>:-<span class="nu0">1</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">        authheader <span class="sy0">=</span>    <span class="st0">&quot;Basic %s&quot;</span> % base64string</div></li><li class="li1"><div class="de1">        req.<span class="me1">add_header</span><span class="br0">&#40;</span><span class="st0">&quot;Authorization&quot;</span><span class="sy0">,</span> authheader<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        req.<span class="me1">add_header</span><span class="br0">&#40;</span><span class="st0">&quot;Cookie&quot;</span><span class="sy0">,</span> <span class="kw2">self</span>.<span class="me1">auth_cookie</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        req.<span class="me1">get_method</span> <span class="sy0">=</span> <span class="kw1">lambda</span>: <span class="st0">'GET'</span></div></li><li class="li1"><div class="de1">        <span class="kw1">try</span>:</div></li><li class="li1"><div class="de1">            handle <span class="sy0">=</span> <span class="kw3">urllib2</span>.<span class="me1">urlopen</span><span class="br0">&#40;</span>req<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">            report_data <span class="sy0">=</span> handle.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">except</span> <span class="kw2">Exception</span><span class="sy0">,</span> e:            </div></li><li class="li1"><div class="de1">            <span class="kw1">raise</span> RestError<span class="br0">&#40;</span>e<span class="sy0">,</span><span class="st0">&quot;Não foi possível obter o relatório do servidor: &quot;</span>+req.<span class="me1">get_full_url</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">return</span> report_data</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> to_ms<span class="br0">&#40;</span><span class="kw2">self</span><span class="sy0">,</span>final<span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        <span class="st0">'''</span></div></li><li class="li1"><div class="de1"><span class="st0">        Converte Datas para tempo em milissegundos</span></div></li><li class="li1"><div class="de1"><span class="st0">        PARAMS:</span></div></li><li class="li1"><div class="de1"><span class="st0">            a_time:`datetime`</span></div></li><li class="li1"><div class="de1"><span class="st0">        RETURN:</span></div></li><li class="li1"><div class="de1"><span class="st0">            time_in_ms:`int`    </span></div></li><li class="li1"><div class="de1"><span class="st0">        '''</span></div></li><li class="li1"><div class="de1">        start <span class="sy0">=</span> <span class="kw3">datetime</span>.<span class="me1">utcfromtimestamp</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span> <span class="co1">#1970,1,1        </span></div></li><li class="li1"><div class="de1">        final_ms <span class="sy0">=</span> <span class="kw3">time</span>.<span class="me1">mktime</span><span class="br0">&#40;</span>final.<span class="me1">timetuple</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        start_ms <span class="sy0">=</span> <span class="kw3">time</span>.<span class="me1">mktime</span><span class="br0">&#40;</span>start.<span class="me1">timetuple</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">return</span> <span class="kw2">int</span><span class="br0">&#40;</span>final_ms-start_ms<span class="br0">&#41;</span>*<span class="nu0">1000</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw1">class</span> RestError<span class="br0">&#40;</span><span class="kw2">Exception</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">    <span class="st0">&quot;&quot;&quot;Rest Report exception&quot;&quot;&quot;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="sy0">,</span> reason<span class="sy0">,</span> message<span class="sy0">=</span><span class="kw2">None</span><span class="br0">&#41;</span>:        </div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">reason</span> <span class="sy0">=</span> <span class="kw2">str</span><span class="br0">&#40;</span>reason<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">self</span>.<span class="me1">full_message</span> <span class="sy0">=</span> <span class="kw2">str</span><span class="br0">&#40;</span>message+<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>+<span class="kw2">self</span>.<span class="me1">reason</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">        <span class="co1">#print &quot;REST REPORT ERROR: &quot;+self.reason</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw1">def</span> <span class="kw4">__str__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">        <span class="kw1">return</span> <span class="kw2">self</span>.<span class="me1">full_message</span></div></li></ol></pre>
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/03/07/python-client-para-rest-api-do-jasper-report-server/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/03/07/python-client-para-rest-api-do-jasper-report-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby Client para REST API do Jasper Report Server</title>
		<link>http://www.redrails.com.br/2013/03/07/ruby-client-para-rest-api-do-jasper-report-server/</link>
		<comments>http://www.redrails.com.br/2013/03/07/ruby-client-para-rest-api-do-jasper-report-server/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 17:37:14 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1924</guid>
		<description><![CDATA[&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Utilizar chamadas REST no Jasper Report Server foi uma bom desafio pra mim, aqui pra vocês o resultiado disso, um pequeno Script que resolve esse &#8220;problema&#8221; rapidinho. Utilizando BASIC AUTHENTICATION + mais a interface RESTFul do JasperReport. Look Code in my Github https://github.com/LuizCarvalho/JasperRest/tree/master/ruby &#160; &#160;]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.redrails.com.br/wp-content/uploads/2013/03/ruby-report-jasper-server+logo.png"><img class="size-medium wp-image-1927 alignleft" alt="ruby-report-jasper-server+logo" src="http://www.redrails.com.br/wp-content/uploads/2013/03/ruby-report-jasper-server+logo-300x300.png" width="300" height="300" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Utilizar chamadas REST no Jasper Report Server foi uma bom desafio pra mim, aqui pra vocês o resultiado disso, um pequeno Script que resolve esse &#8220;problema&#8221; rapidinho. Utilizando BASIC AUTHENTICATION + mais a interface RESTFul do JasperReport.</p>
<p><strong>Look Code in my Github</strong> <a href="https://github.com/LuizCarvalho/JasperRest/tree/master/ruby">https://github.com/LuizCarvalho/JasperRest/tree/master/ruby</a></p>
<pre class="ruby PluGeSHin"><ol><li class="li1"><div class="de1"><span class="co1">#!/usr/bin/env ruby</span></div></li><li class="li1"><div class="de1"><span class="co1"># encoding: utf-8</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw3">require</span> <span class="st0">&quot;rubygems&quot;</span></div></li><li class="li1"><div class="de1"><span class="kw3">require</span> <span class="st0">&quot;net/http&quot;</span></div></li><li class="li1"><div class="de1"><span class="kw3">require</span> <span class="st0">&quot;rexml/document&quot;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">REPORT_NAME = <span class="st0">'StandardChartsReport'</span></div></li><li class="li1"><div class="de1">REPORT_GROUP = <span class="st0">&quot;samples&quot;</span></div></li><li class="li1"><div class="de1">SERVER_ROOT = <span class="st0">&quot;127.0.0.1&quot;</span> <span class="co1">#MUDE PARA O ENDERECO DE SEU SERVIDOR </span></div></li><li class="li1"><div class="de1">SERVER_PORT = <span class="nu0">8080</span></div></li><li class="li1"><div class="de1">SERVER_USER = <span class="st0">&quot;jasperadmin&quot;</span></div></li><li class="li1"><div class="de1">SERVER_PASSWORD = <span class="st0">&quot;jasperadmin&quot;</span></div></li><li class="li1"><div class="de1"><span class="kw3">FORMAT</span> = <span class="st0">&quot;PDF&quot;</span></div></li><li class="li1"><div class="de1">FILE_NAME = <span class="st0">&quot;report.pdf&quot;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">REPORT_PATH = <span class="st0">&quot;http://#{SERVER_ROOT}:#{SERVER_PORT}/jasperserver/rest/report&quot;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw1">def</span> to_ms<span class="br0">&#40;</span>time<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">	start = <span class="kw4">Time</span>.<span class="me1">new</span><span class="br0">&#40;</span><span class="nu0">1970</span>,<span class="nu0">1</span>,<span class="nu0">1</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">	<span class="br0">&#40;</span><span class="br0">&#40;</span>time.<span class="me1">to_f</span> <span class="sy0">-</span> start.<span class="me1">to_f</span><span class="br0">&#41;</span> <span class="sy0">*</span> <span class="nu0">1000.0</span><span class="br0">&#41;</span>.<span class="me1">to_i</span></div></li><li class="li1"><div class="de1"><span class="kw1">end</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1">#parametros sendo passados somente como exemplo</span></div></li><li class="li1"><div class="de1">PARAMS = <span class="br0">&#123;</span>:criacao_inicio<span class="sy0">=&gt;</span>to_ms<span class="br0">&#40;</span><span class="kw4">Time</span>.<span class="me1">new</span><span class="br0">&#40;</span><span class="nu0">2011</span>,01,01<span class="br0">&#41;</span><span class="br0">&#41;</span>,:criacao_final<span class="sy0">=&gt;</span>to_ms<span class="br0">&#40;</span><span class="kw4">Time</span>.<span class="me1">new</span><span class="br0">&#40;</span><span class="nu0">2014</span>,01,01<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw1">def</span> build_xml_request</div></li><li class="li1"><div class="de1">	url_string = <span class="st0">&quot;/reports/#{REPORT_GROUP}/#{REPORT_NAME}&quot;</span></div></li><li class="li1"><div class="de1">	request_body = <span class="st0">&quot;null&quot;</span></div></li><li class="li1"><div class="de1">	<span class="kw3">puts</span> <span class="st0">&quot;CRIANDO XML PARA: #{url_string} &quot;</span></div></li><li class="li1"><div class="de1">	PARAMS.<span class="me1">each</span> <span class="kw1">do</span><span class="sy0">|</span>k,v<span class="sy0">|</span> </div></li><li class="li1"><div class="de1">		request_body <span class="sy0">+</span>= <span class="st0">&quot;#{v.to_s}&quot;</span></div></li><li class="li1"><div class="de1">		<span class="kw3">puts</span> <span class="st0">&quot;PARAMETROS: #{k}=#{v.to_s}; &quot;</span></div></li><li class="li1"><div class="de1">	<span class="kw1">end</span></div></li><li class="li1"><div class="de1">	request_body <span class="sy0">+</span>= <span class="st0">&quot;&quot;</span></div></li><li class="li1"><div class="de1"><span class="kw1">end</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw1">def</span> get_uuid_and_cookie</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">	body = <span class="st0">&quot;&quot;</span></div></li><li class="li1"><div class="de1">	cookie = <span class="st0">&quot;&quot;</span></div></li><li class="li1"><div class="de1">	<span class="kw3">puts</span> <span class="st0">&quot;FULL URL: #{&quot;</span><span class="co1">#{REPORT_PATH}/reports/#{REPORT_GROUP}/#{REPORT_NAME}&quot;}&quot;</span></div></li><li class="li1"><div class="de1">	uri = <span class="kw4">URI</span>.<span class="me1">parse</span><span class="br0">&#40;</span><span class="st0">&quot;#{REPORT_PATH}/reports/#{REPORT_GROUP}/#{REPORT_NAME}&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">	http = <span class="re2">Net::HTTP</span>.<span class="me1">new</span><span class="br0">&#40;</span>uri.<span class="me1">host</span>, uri.<span class="me1">port</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">	http.<span class="me1">start</span> <span class="kw1">do</span> <span class="sy0">|</span>http<span class="sy0">|</span></div></li><li class="li1"><div class="de1">		req = <span class="re2">Net::HTTP::Put</span>.<span class="me1">new</span><span class="br0">&#40;</span>uri.<span class="me1">path</span> <span class="sy0">+</span> <span class="st0">&quot;?RUN_OUTPUT_FORMAT=#{FORMAT}&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">		<span class="kw3">puts</span> <span class="st0">&quot;ACESSANDO: #{uri.path}?RUN_OUTPUT_FORMAT=#{FORMAT}&quot;</span></div></li><li class="li1"><div class="de1">		req.<span class="me1">basic_auth</span><span class="br0">&#40;</span>SERVER_USER, SERVER_PASSWORD<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">		req.<span class="me1">body</span> = build_xml_request</div></li><li class="li1"><div class="de1">		resp = http.<span class="me1">request</span><span class="br0">&#40;</span>req<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">		body = resp.<span class="me1">body</span></div></li><li class="li1"><div class="de1">		<span class="kw3">puts</span> <span class="st0">&quot;COOKIE RECEBIDO: #{resp['Set-Cookie']}&quot;</span>		</div></li><li class="li1"><div class="de1">		cookie = resp<span class="br0">&#91;</span><span class="st0">'Set-Cookie'</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">	<span class="kw1">end</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">	xml = <span class="re2">REXML::Document</span>.<span class="me1">new</span><span class="br0">&#40;</span>body<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">	<span class="kw3">puts</span> <span class="st0">&quot;<span class="es0">\n</span><span class="es0">\n</span> XML <span class="es0">\n</span> #{xml} <span class="es0">\n</span><span class="es0">\n</span>&quot;</span></div></li><li class="li1"><div class="de1">	uuid_xml = xml.<span class="me1">elements</span><span class="br0">&#91;</span><span class="st0">&quot;report/uuid&quot;</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">	<span class="kw1">if</span> uuid_xml</div></li><li class="li1"><div class="de1">		uuid = uuid_xml.<span class="me1">text</span></div></li><li class="li1"><div class="de1">		<span class="kw3">puts</span> <span class="st0">&quot;UUID RECEBIDO: #{uuid}&quot;</span> </div></li><li class="li1"><div class="de1">		<span class="kw2">return</span> uuid,cookie</div></li><li class="li1"><div class="de1">	<span class="kw1">else</span></div></li><li class="li1"><div class="de1">		<span class="kw3">puts</span> <span class="st0">&quot;PROBLEMA AO RECEBER UUID. RESPOSTA: #{uuid_xml}&quot;</span> </div></li><li class="li1"><div class="de1">		<span class="kw2">return</span> <span class="kw2">false</span>,<span class="kw2">false</span></div></li><li class="li1"><div class="de1">	<span class="kw1">end</span></div></li><li class="li1"><div class="de1"><span class="kw1">end</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw1">def</span> get_file</div></li><li class="li1"><div class="de1">	body_get = <span class="kw2">nil</span></div></li><li class="li1"><div class="de1">	uuid,cookie = get_uuid_and_cookie</div></li><li class="li1"><div class="de1">	<span class="kw1">if</span> uuid</div></li><li class="li1"><div class="de1">		uri_get = <span class="kw4">URI</span>.<span class="me1">parse</span><span class="br0">&#40;</span><span class="st0">&quot;#{REPORT_PATH}/#{uuid}&quot;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">		<span class="kw3">puts</span> <span class="st0">&quot;URL DO RELATORIO: #{uri_get}&quot;</span></div></li><li class="li1"><div class="de1">		http_get = <span class="re2">Net::HTTP</span>.<span class="me1">new</span><span class="br0">&#40;</span>uri_get.<span class="me1">host</span>, uri_get.<span class="me1">port</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">		http_get.<span class="me1">start</span> <span class="kw1">do</span> <span class="sy0">|</span>http<span class="sy0">|</span></div></li><li class="li1"><div class="de1">			req = <span class="re2">Net::HTTP::Get</span>.<span class="me1">new</span><span class="br0">&#40;</span>uri_get.<span class="me1">path</span> <span class="sy0">+</span> <span class="st0">&quot;?file=report&quot;</span><span class="br0">&#41;</span>		</div></li><li class="li1"><div class="de1">			<span class="kw3">puts</span> <span class="st0">&quot;REQ: #{req.path}&quot;</span></div></li><li class="li1"><div class="de1">			req.<span class="me1">basic_auth</span><span class="br0">&#40;</span>SERVER_USER, SERVER_PASSWORD<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">			req<span class="br0">&#91;</span><span class="st0">'cookie'</span><span class="br0">&#93;</span> = cookie</div></li><li class="li1"><div class="de1">			resp = http.<span class="me1">request</span><span class="br0">&#40;</span>req<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">			body_get = resp.<span class="me1">body</span>		</div></li><li class="li1"><div class="de1">		<span class="kw1">end</span></div></li><li class="li1"><div class="de1">	<span class="kw1">end</span></div></li><li class="li1"><div class="de1">	body_get</div></li><li class="li1"><div class="de1"><span class="kw1">end</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">file = get_file</div></li><li class="li1"><div class="de1"><span class="kw1">if</span> file </div></li><li class="li1"><div class="de1">	<span class="co1">#puts file</span></div></li><li class="li1"><div class="de1">	f = <span class="kw4">File</span>.<span class="me1">new</span><span class="br0">&#40;</span>FILE_NAME, <span class="st0">'wb'</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">	f.<span class="me1">write</span><span class="br0">&#40;</span>file<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">	f.<span class="me1">close</span></div></li><li class="li1"><div class="de1"><span class="kw1">else</span></div></li><li class="li1"><div class="de1">	<span class="kw3">puts</span> <span class="st0">&quot;Não foi possível criar o relatório&quot;</span></div></li><li class="li1"><div class="de1"><span class="kw1">end</span></div></li></ol></pre>
<script src = "http://gist-it.sudarmuthu.com/github{https://github.com/LuizCarvalho/JasperRest/blob/master/ruby/report_rest.rb}?footer=minimal"></script>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2013/03/07/ruby-client-para-rest-api-do-jasper-report-server/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2013/03/07/ruby-client-para-rest-api-do-jasper-report-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
