<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Fedora summer-coding Planet</title>
	<link rel="self" href="http://planet.fedoraproject.org/summer-coding/rss20.xml"/>
	<link href="http://planet.fedoraproject.org/summer-coding/"/>
	<id>http://planet.fedoraproject.org/summer-coding/rss20.xml</id>
	<updated>2013-06-20T00:20:26+00:00</updated>
	<generator uri="http://planet.fedoraproject.org/summer-coding/">http://intertwingly.net/code/venus/</generator>

	<entry>
		<title type="html" xml:lang="en">Book Review: Otherland Volumes 1-4</title>
		<link href="http://mo.morsi.org/blog/node/379"/>
		<id>http://mo.morsi.org/379 at http://mo.morsi.org/blog</id>
		<updated>2012-12-26T14:47:21+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/en/thumb/0/05/TadWilliams_Otherland1.jpg/200px-TadWilliams_Otherland1.jpg&quot; style=&quot;float: left; margin-right: 10px;&quot; /&gt;&lt;b&gt;*warning: plot spoilers below*&lt;/b&gt;. Imagine yourself in the trenches of WWI. The next chapter you're in Ancient Egypt, then in Troy. A little while later you've gone through the land of the bugs, dark/twisted versions of the Worlds of Oz and Wonderland, and many more. Of course this is before you arrive at the heart of the universe itself, where the basic rules of reality no longer apply.&lt;br /&gt;
&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/en/thumb/e/e8/Otherland2.png/200px-Otherland2.png&quot; style=&quot;float: right; margin-left: 10px;&quot; /&gt; The nice thing about Tad William's &lt;a href=&quot;http://en.wikipedia.org/wiki/Otherland&quot;&gt;Otherland&lt;/a&gt; series, which takes place in the Otherland virtual reality network, is that he takes great liberties in his artistic vision. Otherland doesn't conform to the rules of many other artificial realities portrayed in fiction that try to preserve a consistency in their environments, rather is was built by a secret cabal of the most powerful people in the world to serve their nefarious purposes, each of which has a completely different vision of their utopia.&lt;/p&gt;
&lt;p&gt;At first I was a little apprehensive about the last bit, in general I'm not a big fan of stories with a huge super-secret organization that runs the show, but progressing through the series it began to grow on me. Most of the main protagonists in the story start off as simple peons in the big picture, stuck in the simulation network, unable to leave, narrating the chaotic events unfolding around them. As the story progresses, the roles of the protagonists and antagonists become more apparent, but these mostly arise as artifacts of their characters, it is just who they are and often the random luck of their circumstances that results in their impact on the story.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/en/thumb/5/5b/Mountain_of_Black_Glass.jpg/200px-Mountain_of_Black_Glass.jpg&quot; style=&quot;float: left; margin-right: 10px;&quot; /&gt;There are exceptions to this, one of the most interesting characters is the dark serial killer knows as Dread, who is employed by the leader of the Grail Brotherhood (those that built and are running the network) to act as an assassin in both the real and virtual worlds to meet their goals. Of course things aren't as simple as they seem as Dread has perverse ambitions of his own, and seeks to control the very thing which his masters built to rule the world. &lt;img src=&quot;http://upload.wikimedia.org/wikipedia/en/thumb/7/71/Sea_silver_light.jpg/200px-Sea_silver_light.jpg&quot; style=&quot;float: right; margin-left: 10px;&quot; /&gt;Furthermore Felix Jongleur, the worlds richest man and leader of the grail brotherhood, proves to be quite interesting as well. While a bit on the cliché side his ruthless quest for immortality at any cost sets up and drives the events of the series and as they unfold around him, whether to his liking or not, and serve as many of the focal points of the epic. If you do start the series, make sure to commit yourself to reading to the end (it consists of four rather lengthy novels) as while it starts off slow, the ultimate fate of these two characters alone are so vivid that I suspect they will linger in memory for a while.&lt;/p&gt;
&lt;p&gt;At the heart of the series, the network, and namesake of the books is the Other itself, the semi-sentient AI serving as the Operating System driving the virtual reality. The story of the Other when fully revealed is a very sad one, and there is no happy conclusion for this being, though there is some vindication with the fate of Nemesis, an &lt;a href=&quot;http://en.wikipedia.org/wiki/Artificial_life&quot;&gt;ALife&lt;/a&gt; entity which the Other creates to quash anomalies in the network. I feel that in itself is enough reason to read the series, while many of the protagonists manage to escape the network and achieve their goals, it's no happy-hollywood ending. Rather there are many deaths and fates far-far worse, and as events unfold no character manages to escape the network unscathed, having to bear their experiences for the rest of their life. For some characters its worse than others, those with abilities which permit them some control over the network quickly find those abilities turn on them and they become more of a curse than a blessing. It is a bit of a tale in irony as nothing is ever what it seems, and while Williams often reveals the basic facts that setup for the awesome conclusion as the reader goes along, it isn't until the very end that all the pieces fall into place and the final puzzle is solved. &lt;/p&gt;
&lt;p&gt;The series is an epic in every sense of the word, and in some senses it can be seen as a meta-epic, as other previously established epics such as the Odyssey and the Lord of the Rings are folded into the mix as characters go through those worlds, though often with a dark twist. I very much recommend the series to any sci-fi fan, the last book is so compelling I could not put it down (read the 900 page novel in a little under a week!) and I consider it to be one of my top three favourites of all time.&lt;/p&gt;
&lt;p&gt;Until next time, happy dreams!&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/379&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">isitfedoraruby updates</title>
		<link href="http://mo.morsi.org/blog/node/378"/>
		<id>http://mo.morsi.org/378 at http://mo.morsi.org/blog</id>
		<updated>2012-12-19T20:48:33+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/Fedora_Ruby_Logo1b.png&quot; style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As a follow up to the &lt;a href=&quot;http://code.google.com/soc/&quot;&gt;GSOC&lt;/a&gt;, I've been mentoring several talented high school students from around the world who have been adding many cool new features and functionality to the &lt;a href=&quot;http://isitfedoraruby.com&quot;&gt;isitfedoraruby&lt;/a&gt; webapp as part of the &lt;a href=&quot;http://code.google.com/opensource/gci/2012/index.html&quot;&gt;GCI&lt;/a&gt; contest. They have been doing a phenominal job on the site and an update sharing their work is long over due!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://codedemons.blogspot.com.ar/&quot;&gt;Nico&lt;/a&gt; (from Argentina) has deployed the site to &lt;a href=&quot;https://openshift.redhat.com/&quot;&gt;openshift&lt;/a&gt;, wrote scripts to syncronize the db on a daily basis, automated the production push process (whenever we merge our commits into the 'stable' branch on github, the site automatically gets updated), is working on i18n internationalization support, and much more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kendhia.blogspot.com&quot;&gt;Kendhia&lt;/a&gt; (from Algeria) has been working on features involving 'gamification', eg importing the contributors that maintain fedora packages, and displaying that data in visually appealing manners (including &lt;a href=&quot;http://www.isitfedoraruby.com/fedorarpms/mmorsi/badge&quot;&gt;badges&lt;/a&gt;!)&lt;/li&gt;
&lt;li&gt;Mark (from Honolulu, Hawaii) has been working on adding more visualizations to the site, most notably graphically representing the packages a contributor maintains using d3.js &lt;a href=&quot;http://www.isitfedoraruby.com/stats/mmorsi/user_rpms&quot;&gt;here&lt;/a&gt;. Mark also designed a logo for the fedora-ruby sig, which can be seen above.&lt;/li&gt;
&lt;li&gt;Animesh (from New Delhi, India) implemented a &lt;a href=&quot;http://www.isitfedoraruby.com/stats/rubygem-activesupport/timeline&quot;&gt;timeline&lt;/a&gt; of contributions, so we can see a summary of all updates, both on the rubygems side and those in Fedora. He also &lt;a href=&quot;https://google-melange.appspot.com/gci/work/download/google/gci2012/7982225?id=6001&quot;&gt;wrote up&lt;/a&gt; and made a &lt;a href=&quot;http://vimeo.com/54533981&quot;&gt;screencast&lt;/a&gt; of a great guide on how to get a simple hello world rails app up and running on the Fedora/Ruby stack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We aim to keep driving the site forward, now that we've automated the push and syncronization process, getting new features into production should be very trivial. I'd like to thank the talented students for all their hard work and really look forward to continuing to work with them in the future!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/378&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-US">Fedora joins Google Code-In 2012</title>
		<link href="http://iquaid.org/2012/11/19/fedora-joins-google-code-in-2012/"/>
		<id>http://iquaid.org/?p=2206</id>
		<updated>2012-11-19T14:48:03+00:00</updated>
		<content type="html" xml:lang="en-US">
			&lt;img src=&quot;http://quaid.fedorapeople.org/media/images/quaid_saskia-SCALE8x-96x96.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;a href=&quot;https://google-melange.appspot.com/gci/homepage/google/gci2012&quot;&gt;Google Code-In&lt;/a&gt; is the pre-college program for 13 to 17 year old students to earn prizes for completing tasks in various open source projects.,&lt;/p&gt;
&lt;p&gt;This year will be the first year that the &lt;a href=&quot;https://fedoraproject.org/wiki/GCI_2012&quot;&gt;Fedora Project participates&lt;/a&gt;. We’re looking to build on &lt;a href=&quot;http://iquaid.org/2009/11/04/summer-coding-benefits-to-fedora-project-and-jboss-org/&quot;&gt;many years success with Google Summer of Code&lt;/a&gt;, but the stakes here are higher. Unlike college students, who learn real life lessons the hard way, pedagogically you can’t allow high school students to truly fail. But failure is built in to the open source ethos. A fine line must be trod.&lt;/p&gt;
&lt;p&gt;If you are a 13 to 17 year old or know one who is interested in code, design, documentation, just about aspect of an open source project, have them check out what &lt;a href=&quot;https://fedoraproject.org/wiki/GCI_2012/Task_Page&quot;&gt;Fedora has as tasks&lt;/a&gt;. They should also look at the wider program. Students can do work across multiple projects, or dig in deeply to a single project. Ideally, tasks are designed to be done within a few hours or days.&lt;/p&gt;
&lt;p&gt;If you have any questions, I encourage you to contact &lt;a href=&quot;mailto:bckurera@fedoraproject.org&quot;&gt;Buddhike Kurera&lt;/a&gt;, who was last year’s GSoC admin. IMO, he has been doing a fabulous job driving the &lt;a href=&quot;https://fedoraproject.org/wiki/Summer_Coding_SIG&quot;&gt;Fedora Summer Coding group&lt;/a&gt;. Joining the Google Code-In is the next step in his vision of how Fedora can work with students in these sort of contest/internship-style programs. I’m excited and curious to see how it all goes.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot; class=&quot;smarterwiki-popup-bubble smarterwiki-popup-bubble-active smarterwiki-popup-bubble-flipped&quot;&gt;&lt;span class=&quot;smarterwiki-popup-bubble-body&quot;&gt;&lt;span class=&quot;smarterwiki-popup-bubble-links-container&quot;&gt;&lt;span class=&quot;smarterwiki-popup-bubble-links&quot;&gt;&lt;span class=&quot;smarterwiki-popup-bubble-links-row&quot;&gt;&lt;a title=&quot;Search DuckDuckGo&quot; href=&quot;http://duckduckgo.com/?q=m&quot; target=&quot;_blank&quot; class=&quot;smarterwiki-popup-bubble-link&quot;&gt;&lt;img src=&quot;https://ff.duckduckgo.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;smarterwiki-popup-bubble-link-favicon&quot; /&gt;&lt;/a&gt;&lt;a title=&quot;Search Wikipedia&quot; href=&quot;http://www.google.com/search?hl=com&amp;amp;btnI=I'm+Feeling+Lucky&amp;amp;q=m+wikipedia&quot; target=&quot;_blank&quot; class=&quot;smarterwiki-popup-bubble-link&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;smarterwiki-popup-bubble-link-favicon&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;smarterwiki-popup-bubble-links-row&quot;&gt;&lt;a title=&quot;Search Google&quot; href=&quot;http://www.google.com/search?q=m&quot; target=&quot;_blank&quot; class=&quot;smarterwiki-popup-bubble-link&quot;&gt;&lt;img src=&quot;https://www.google.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;smarterwiki-popup-bubble-link-favicon&quot; /&gt;&lt;/a&gt;&lt;a title=&quot;Search Surf Canyon&quot; href=&quot;http://search.surfcanyon.com/search?f=nrl1&amp;amp;q=m&amp;amp;partner=fastestfox&quot; target=&quot;_blank&quot; class=&quot;smarterwiki-popup-bubble-link&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;smarterwiki-popup-bubble-link-favicon&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;&quot; class=&quot;smarterwiki-popup-bubble smarterwiki-popup-bubble-active smarterwiki-popup-bubble-detailed smarterwiki-popup-bubble-flipped&quot;&gt;&lt;span class=&quot;smarterwiki-popup-bubble-body&quot;&gt;&lt;span class=&quot;smarterwiki-popup-bubble-definition&quot;&gt;&lt;span class=&quot;smarterwiki-zc-header&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;smarterwiki-zc-image&quot;&gt;&lt;img src=&quot;https://i.duckduckgo.com/i/e86d80b1.png&quot; alt=&quot;&quot; class=&quot;smarterwiki-zc-image-img&quot; /&gt;&lt;/span&gt;&lt;span class=&quot;smarterwiki-zc-abstract&quot;&gt;&lt;strong&gt;Wikipedia:&lt;/strong&gt; M (named em ) is the thirteenth letter of the ISO basic Latin alphabet. &lt;a href=&quot;http://duckduckgo.com/?q=m&quot; id=&quot;dd-cite-link&quot;&gt;&lt;strong&gt;→&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</content>
		<author>
			<name>quaid</name>
			<uri>http://iquaid.org</uri>
		</author>
		<source>
			<title type="html">i, quaid » Summer Coding</title>
			<subtitle type="html">... the four laws of humanity ...</subtitle>
			<link rel="self" href="http://iquaid.org/category/summer-coding/feed/"/>
			<id>http://iquaid.org</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Google Summer of Code Mentors Summit</title>
		<link href="http://mo.morsi.org/blog/node/377"/>
		<id>http://mo.morsi.org/377 at http://mo.morsi.org/blog</id>
		<updated>2012-10-22T04:13:50+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;Friday I flew out to &lt;a href=&quot;http://en.wikipedia.org/wiki/Mountain_View,_California&quot;&gt;Mountain View, CA&lt;/a&gt; to attend the &lt;a href=&quot;http://gsoc-wiki.osuosl.org/index.php/2012&quot;&gt;Google Summer of Code Mentors Summit&lt;/a&gt; hosted at the &lt;a href=&quot;http://en.wikipedia.org/wiki/Googleplex&quot;&gt;Googleplex&lt;/a&gt;, Google's worldwide headquarters. Every year, two mentors from every organization are sponsored by google to attend the summit and I was offered the extra slot by &lt;a href=&quot;http://fedoraproject.org/wiki/User:Bckurera&quot;&gt;Buddhike&lt;/a&gt;, the Fedora summer of code admin. &lt;/p&gt;
&lt;p&gt;After the inevitable hubub w/ delayed flights and such (surprisingly my stow-away bag actually made it!), I arrived at the hotel on Friday night intime for the pre-summit dinner. On Saturday shuttles were available to transport us from the hotel to the Googleplex which I have to say in quite impressive. From architecture of the buildings, to the modern artwork scattered around the complex, to the meals/beverages/snacks, and even random bicyles available for any employee to just pickup and use, the complex lives up to the legend! (hover over images for descriptions, click for full sizes)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/googleplex1.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/googleplex1.jpg&quot; alt=&quot;googleplex1&quot; style=&quot;float: left; margin-right: 10px; width: 300px; height: 400px;&quot; title=&quot;the googleplex&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/googleplex2.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/googleplex2.jpg&quot; alt=&quot;googleplex2&quot; style=&quot;float: left; width: 300px; height: 400px;&quot; title=&quot;the googleplex&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;The summit was very much developer centric which I very much enjoyed, as most of the other conferences I attended included a mix of sys-admin and developer tracks. Obviously the driving event was a summer of _code_, so many of the attendees were software engineers themselves, mentoring students doing the development. Some projects were bigger than others, some well established, some not, but it was a great mix of contributors from &lt;a href=&quot;http://gsoc-wiki.osuosl.org/index.php/Attendee_List_2012&quot;&gt;across&lt;/a&gt; the industry working on many cool things.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/roundtable1.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/roundtable1.jpg&quot; alt=&quot;roundtable1&quot; style=&quot;float: left; margin-right: 10px; width: 300px; height: 400px;&quot; title=&quot;a roundtable at the gsoc&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/roundtable2.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/roundtable2.jpg&quot; alt=&quot;roundtable2&quot; style=&quot;float: left; width: 300px; height: 400px;&quot; title=&quot;a roundtable at the gsoc&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;Among the best of the presentations I attended included roundtable discussions on the latest languages and language features being used in the industry, different collaboration tools that the projects are using and their thoughts on them, and one on developing tools to quantify and measure community metrics and individual contributions. During the lightning talks (one minute a piece), I showed off &lt;a href=&quot;http://zuhao.me/&quot;&gt;Zuhao&lt;/a&gt;'s &lt;a href=&quot;http://isitfedoraruby.com/&quot;&gt;isitfedoraruby&lt;/a&gt; project, and extensively promoted his work, as well as &lt;a href=&quot;http://samridh90.tumblr.com/&quot;&gt;Sammy&lt;/a&gt;'s and &lt;a href=&quot;http://www.niteshnarayanlal.blogspot.com/&quot;&gt;Nitesh&lt;/a&gt;'s contributions to &lt;a href=&quot;http://aeolusproject.org&quot;&gt;Aeolus&lt;/a&gt; throughout the entire conference.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/googleplex3.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/googleplex3.jpg&quot; alt=&quot;googleplex3&quot; style=&quot;float: left; margin-right: 10px; width: 300px; height: 400px;&quot; title=&quot;an interactive display at the googleplex&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files//some-sessions.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files//some-sessions.jpg&quot; style=&quot;float: left; width: 300px; height: 400px;&quot; title=&quot;some of the posted sessions&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;I also held an impromptu session on the &lt;a href=&quot;http://en.wikipedia.org/wiki/JSON-RPC&quot;&gt;JSON-RPC&lt;/a&gt; protocol during the afternoon which was a last minute thing, but was able to leverage my &lt;a href=&quot;http://mo.morsi.org/blog/node/365&quot;&gt;presentation&lt;/a&gt; and demo of &lt;a href=&quot;http://github.com/movitto/rjr&quot;&gt;rjr&lt;/a&gt; in Brno from a few months back. This led to an good discussion with some interesting ideas emerging from it and even a couple adopters!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/swag-table-aeolus-stickers.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/swag-table-aeolus-stickers.jpg&quot; alt=&quot;aeolus stickers on the swag table&quot; style=&quot;float: left; margin-right: 10px; width: 300px; height: 400px;&quot; title=&quot;aeolus stickers on the swag table&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/IMG_20121020_161203.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files//IMG_20121020_161203.jpg&quot; alt=&quot;jsonrpc at the gsoc&quot; style=&quot;float: left; width: 300px; height: 400px;&quot; title=&quot;json-rpc at the gsoc&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;Saturday night was the Summit Dinner Party at the hotel, italian food, good mingling, and even a dip in the pool and hottub! This morning I checked out of the hotel and attended more sessions before wrapping up the trip (I am currently blogging this from &lt;a href=&quot;http://www.flysfo.com/web/page/index.jsp&quot;&gt;SFO&lt;/a&gt; prior to catching my red-eye home). &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/rockies1.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/rockies1.jpg&quot; alt=&quot;the rockies 1&quot; style=&quot;float: left; margin-right: 10px; width: 300px; height: 400px;&quot; title=&quot;the rockies&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/rockies2.jpg&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/rockies2.jpg&quot; alt=&quot;the rockies 2&quot; style=&quot;float: left; width: 300px; height: 400px;&quot; title=&quot;the rockies&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;I have to say this might just be the best conference I've been to so far. The talks and presenters were phenomenal. Even the attendees were constituted of some of the brightest of the industry, so many conversations lead to insightful perspectives and different conclusions than I hadn't come upon so far. I hope to be able to participate in the GSoC and maybe attend the summit again next year. Until next time, happy coding!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/377&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Reactor Pattern + Thread Pool = Win</title>
		<link href="http://mo.morsi.org/blog/node/376"/>
		<id>http://mo.morsi.org/376 at http://mo.morsi.org/blog</id>
		<updated>2012-10-03T20:33:58+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/jsonrpc.png&quot; style=&quot;float: left; margin-right: 10px; width: 350px; height: 150px;&quot; /&gt;&lt;a href=&quot;https://github.com/movitto/rjr&quot;&gt;RJR&lt;/a&gt; uses &lt;a href=&quot;http://rubyeventmachine.com/&quot;&gt;eventmachine&lt;/a&gt; on the backend to process incoming messages over tcp/amqp/http/websockets/etc and dispatch json-rpc requests to registered handlers. It also employs a built in &lt;a href=&quot;http://en.wikipedia.org/wiki/Thread_pool_pattern&quot;&gt;thread pool&lt;/a&gt; to hand off requests to the dispatcher so that the reactor isn't blocked. What results from combining the &lt;a href=&quot;http://en.wikipedia.org/wiki/Reactor_pattern&quot;&gt;reactor pattern&lt;/a&gt; with a thread pool is a highly reliable concurrent event processing system.&lt;/p&gt;
&lt;p&gt;The reactor central to eventmachine and the design pattern itself processes events one after another in a serial manner. Events are executed in the order that they arrive and no event executes until the one before it completes. Events can come from multiple sources and the reactor will take care of the serialization necessary to ensure data integrity.&lt;/p&gt;
&lt;p&gt;A developer initializes the necessary connections and receives events by registering callbacks to be triggered on their invocation. Since the reactor blocks on any operation, the developer needs to ensure that his/her callbacks execute quickly and return control back to the reactor to continue processing events. Threads can be used to accomplish this, but spinning up a thread is an intensive operation, so a managed thread pool can be used as a nice solution that allows the developer to execute callbacks quickly and asyncronously without blocking the reactor.&lt;/p&gt;
&lt;p&gt;Of course any resources leveraged by the callbacks will need to be protected from concurrent access but the nice thing is that if care is taken, the reactor itself can be used to handle this. In the callbacks launched by the thread pool, the developer can leverage the event machine reactor to schedule additional work that will be executed serially with the rest of the work already there. What results is an elegant / simple solution to schedule and process work concurrently with a built in mechanism to protect shared resources. Optimally the thread pool will incorporate a timeout mechanism that is able to kill jobs that exceed the timeout and restart their worker threads to keep things moving smoothly (as RJR does).&lt;/p&gt;
&lt;p&gt;I would give this combined design pattern a name (perhaps Reactor Pool?) but I'm sure someone out there probably has already thought about this... and blogged about it... and uploaded an article to wikipedia... etc...&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/376&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Aeolus at the Ohio LinuxFest - Part IV Heading Out</title>
		<link href="http://mo.morsi.org/blog/node/375"/>
		<id>http://mo.morsi.org/375 at http://mo.morsi.org/blog</id>
		<updated>2012-09-27T12:48:19+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;https://www.aeolusproject.org/images/logo-frontpage.png&quot; style=&quot;float: right; margin-left: 10px;&quot; /&gt;Be sure to see the &lt;a href=&quot;http://mo.morsi.org/blog/node/372&quot;&gt;first&lt;/a&gt; &lt;a href=&quot;http://mo.morsi.org/blog/node/373&quot;&gt;three&lt;/a&gt; &lt;a href=&quot;http://mo.morsi.org/blog/node/374&quot;&gt;parts&lt;/a&gt; in this series which contains the complete overview of my demo for the conference. I also have a minimal set of slides which I've uploaded &lt;a href=&quot;http://mo.morsi.org/files/presentations/mmorsi-olf2012-aeolus-slides.pdf&quot;&gt;here&lt;/a&gt; (original showoff &lt;a href=&quot;http://mo.morsi.org/files/presentations/mmorsi-olf2012-aeolus-slides.tgz&quot;&gt;source&lt;/a&gt; and &lt;a href=&quot;http://mo.morsi.org/files/presentations/mmorsi-olf2012-aeolus-commands&quot;&gt;commands&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;And thats about it! I head out in a short bit for my 7hr drive there (stopping in Buffalo) and back on Sunday. On Friday, I'm scheduled to present in the &lt;a href=&quot;http://www.ohiolinux.org/bacd&quot;&gt;first slot&lt;/a&gt; at the 'Build A Cloud' Day, and then on saturday my OLF talk is &lt;a href=&quot;http://www.ohiolinux.org/saturday&quot;&gt;at 3pm&lt;/a&gt; in room C110-112. Everyone who can make it is welcome to attend, and I'll try to take some photos and post from the conference but there is always a million things going on so no promises! :-)&lt;/p&gt;
&lt;p&gt;Take care!&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/375&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Aeolus at the Ohio LinuxFest - Part III Conductor &amp;amp; CLI</title>
		<link href="http://mo.morsi.org/blog/node/374"/>
		<id>http://mo.morsi.org/374 at http://mo.morsi.org/blog</id>
		<updated>2012-09-26T15:17:32+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;See my &lt;a href=&quot;http://mo.morsi.org/blog/node/372&quot;&gt;first&lt;/a&gt; article in the series to set up cloud providers, and my &lt;a href=&quot;http://mo.morsi.org/blog/node/373&quot;&gt;second&lt;/a&gt; article on using the core Aeolus components.&lt;/p&gt;
&lt;h2&gt;Web interface&lt;/h2&gt;
&lt;p&gt;To setup the full Aeolus suite, simply:&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  yum install aeolus-all
  aeolus-configure&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Open a web browser and navigate to &lt;i&gt;http://localhost/conductor&lt;/i&gt; to access the conductor web interface.&lt;/p&gt;
&lt;p&gt;Login w/ the default credentials ('admin' / 'password').&lt;/p&gt;
&lt;p&gt;To manage cloud provider, click 'admin' and 'providers':&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-01-cloud-providers_0.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-01-cloud-providers_0.png&quot; style=&quot;width: 500px; height: 250px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add a new provider and provider account, specifying the type and location&lt;br /&gt;
of the provider, access credentials, and uri of the deltacloud instance&lt;br /&gt;
through which to connect to it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-02-provider-details_0.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-02-provider-details_0.png&quot; style=&quot;width: 250px; height: 125px; float: left; margin-right: 10px;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-03-provider-account_0.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-03-provider-account_0.png&quot; style=&quot;width: 250px; height: 125px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Manage cloud hardware and realms:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-04-hwp1_0.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-04-hwp1_0.png&quot; style=&quot;width: 250px; height: 125px; float: left; margin-right: 10px;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-05-hwp2_0.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-05-hwp2_0.png&quot; style=&quot;width: 250px; height: 125px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-06-realms.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-06-realms.png&quot; style=&quot;width: 250px; height: 125px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Manage pools of providers and environment which instances run in:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-08-environments.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-08-environments.png&quot; style=&quot;width: 500px; height: 250px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Manager users and rights:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-09-users.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-09-users.png&quot; style=&quot;width: 500px; height: 250px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Build images and start instances themselves on providers according&lt;br /&gt;
to any number of metrics:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-10-build-image.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-10-build-image.png&quot; style=&quot;width: 250px; height: 125px; float: left; margin-right: 10px;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/blog/files/aeolus-11-deployment-metrics.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/aeolus-11-deployment-metrics.png&quot; style=&quot;width: 250px; height: 125px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;CLI&lt;/h2&gt;
&lt;p&gt;To connect via the command line, setup a ~/.aeolus-cli file containing the credentials which to use to connect to conductor:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;   :conductor:
     :url: https://localhost/conductor/api
     :username: admin
     :password: password&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Yum install the command line utility:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;   # yum install aeolus-cli&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;All operations available via the web interface are also available from the command line:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;   $ aeolus --help
 
   $  aeolus hwp list
 
   $  aeolus hwp create --name demo
 
   $  aeolus image --help&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;&amp;lt;/presentation&amp;gt;&lt;/h2&gt;
&lt;p&gt;That about wraps up the presentation content that I had prepared, besides a small / minimal set of slides that I will be posting shortly. I have also downloaded a few screencasts off our &lt;a href=&quot;http://www.youtube.com/user/aeolusproject&quot;&gt;youtube&lt;/a&gt; channel as a backup plan incase things go awry with one of my machines (there is a nice / short one on the Audrey config server that I'll probably end up showing anyways to demo that component).&lt;/p&gt;
&lt;p&gt;Stay tuned for my final post in this series!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/374&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Aeolus at the Ohio LinuxFest - Part II Aeolus</title>
		<link href="http://mo.morsi.org/blog/node/373"/>
		<id>http://mo.morsi.org/373 at http://mo.morsi.org/blog</id>
		<updated>2012-09-25T18:58:40+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;To setup a few cloud providers to use against Aeolus, see my &lt;a href=&quot;http://mo.morsi.org/blog/node/372&quot;&gt;first&lt;/a&gt; blog post in this series.&lt;/p&gt;
&lt;h2&gt;deltacloud&lt;/h2&gt;
&lt;p&gt;To install, the core Aeolus component, &lt;a href=&quot;http://deltacloud.apache.org/drivers.html&quot;&gt;deltacloud&lt;/a&gt; and the drivers for oVirt (RHEV) and OpenStack:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  # yum install deltacloud-core deltacloud-core-rhevm deltacloud-core-openstack&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Deltacloud comes with a RESTful server, a command line client, and various programatic interfaces including C and Ruby. We'll start a few instances of deltacloud to serve requests to the various providers and connect to them via IRB / Ruby. A single deltacloud server can dispatch requests to as many cloud providers as desired, provided the correct HTTP headers are set such that deltacloud can resolve the remote provider entry point. But for this demo, to make it especially clear what is going on, two deltacloud instances are used:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  # API_PROVIDER='https://ovirt:8443/api'  /usr/bin/ruby /usr/bin/deltacloudd -i rhevm -e production --port 3004 --host localhost -u nobody -g nobody
  # API_PROVIDER='https://openstack:5000/v2.0'  /usr/bin/ruby /usr/bin/deltacloudd -i openstack  -e production --port 3005 --host localhost -u nobody -g nobody&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Pop open an irb session and connect oVirt&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-ruby&quot;&gt;  $ irb
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'deltacloud'&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; c = DeltaCloud.&lt;span style=&quot;color: #9900CC;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'admin@internal'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'cloudpass'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'http://localhost:3004/api'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;DeltaCloud::API&lt;/span&gt;:0x00000002d75968 &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@password&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;cloudpass&quot;&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@username&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;admin@internal&quot;&lt;/span&gt;,
                                        &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@api_uri&lt;/span&gt;=&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;#&amp;lt;URI::HTTP:0x00000002d75580 URL:http://localhost:3004/api&amp;gt;,&lt;/span&gt;
                                        &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@entry_points&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:instances&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:images&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/images&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:drivers&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/drivers&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:instance_states&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instance_states&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:storage_volumes&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/storage_volumes&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:realms&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/realms&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:hardware_profiles&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/hardware_profiles&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                        &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@features&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:instances&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:user_name&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:user_data&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                        &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@verbose&lt;/span&gt;=&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;false&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@driver_name&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;rhevm&quot;&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@api_version&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;1.0.0&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; c.&lt;span style=&quot;color: #9900CC;&quot;&gt;instances&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;collect&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;i&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;i.&lt;span style=&quot;color: #9900CC;&quot;&gt;id&lt;/span&gt;, i.&lt;span style=&quot;color: #9900CC;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;8b347be3-0a76-4c84-aa79-c017557540f5&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;demo6&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,        &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;894fb094-c75d-49a8-b49d-5523346b46a3&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;demo7&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;98511559-46a3-4eb2-aba2-4c81c4e0d5b5&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;i-1347974040&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;, &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;29c4d6ae-87ab-46cd-8424-af05b96b1d91&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;i-1348008963&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;c1844032-45d4-4b17-9405-224b4942ace7&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;i-1348425727&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;, &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;12f8c82e-2837-49e0-8d41-745aa208021a&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;i-1348516821&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;9f3e115f-e097-4fdc-bfa3-5d634141c38a&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;i-1348586396&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;, &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;76b5bc43-6bc5-4c06-a92a-c86595bfc303&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;inst1&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; c.&lt;span style=&quot;color: #9900CC;&quot;&gt;images&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;collect&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;i&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;i.&lt;span style=&quot;color: #9900CC;&quot;&gt;id&lt;/span&gt;, i.&lt;span style=&quot;color: #9900CC;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;00000000-0000-0000-0000-000000000000&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Blank&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;, &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;d0a8df2e-1563-470e-bfd7-8384a400380f&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;e3280dab-e719-4e6e-b954-55578acfe4b7&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; i = c.&lt;span style=&quot;color: #9900CC;&quot;&gt;create_instance&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;00000000-0000-0000-0000-000000000000&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;DeltaCloud::API::Stateful::Instance&lt;/span&gt;:0x000000025ddb60 &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@base_name&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;instance&quot;&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@client&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;DeltaCloud::API&lt;/span&gt;:0x00000002d75968 ...&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@url&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances/d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@id&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@objects&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:method_name&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;stopped?&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:state, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:state&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;STOPPED&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:method_name&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;running?&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:state, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:state&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;RUNNING&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:method_name&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;pending?&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:state, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:state&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;PENDING&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:method_name&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;shutting_down?&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:state, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:state&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;SHUTTING_DOWN&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;name&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;i-1348597714&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;owner_id&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;admin@internal&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:link, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;image&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;00000000-0000-0000-0000-000000000000&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;image_id&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;00000000-0000-0000-0000-000000000000&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:link, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;realm&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;99408929-82cf-4dc7-a532-9d998063fa95&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;realm_id&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;99408929-82cf-4dc7-a532-9d998063fa95&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;state&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;STOPPED&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:link, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;hardware_profile&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;DESKTOP&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;hardware_profile_id&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;DESKTOP&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:action_link, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;start!&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:href&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances/d637ee52-787d-48de-a6c4-a92b854677b4/start&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:rel&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;start&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:action_link, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;destroy!&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:href&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances/d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:rel&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;destroy&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;delete&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:action_link, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;create_image!&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:href&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/create_image;instance_id=d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:rel&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;create_image&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;post&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:collection, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;public_addresses&quot;&lt;/span&gt;,
                                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:values&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:address&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;127.0.0.1&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;vnc&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                                 &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:collection, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;private_addresses&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:values&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                                 &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;storage_volumes&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@action_urls&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances/d637ee52-787d-48de-a6c4-a92b854677b4/start&quot;&lt;/span&gt;,
                                                                          &lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances/d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;,
                                                                          &lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/create_image;instance_id=d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@actions&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;start&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances/d637ee52-787d-48de-a6c4-a92b854677b4/start&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;destroy&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances/d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;create_image&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/create_image;instance_id=d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@state&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;STOPPED&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; i.&lt;span style=&quot;color: #9900CC;&quot;&gt;actions&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;start&quot;&lt;/span&gt;,        &lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances/d637ee52-787d-48de-a6c4-a92b854677b4/start&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;destroy&quot;&lt;/span&gt;,      &lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/instances/d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;create_image&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3004/api/create_image;instance_id=d637ee52-787d-48de-a6c4-a92b854677b4&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; i.&lt;span style=&quot;color: #9900CC;&quot;&gt;state&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;&quot;STOPPED&quot;&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; i.&lt;span style=&quot;color: #9900CC;&quot;&gt;start&lt;/span&gt;!
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; i.&lt;span style=&quot;color: #9900CC;&quot;&gt;state&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;&quot;PENDING&quot;&lt;/span&gt;
 
  &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# and after a little while&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; i.&lt;span style=&quot;color: #9900CC;&quot;&gt;state&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;&quot;RUNNING&quot;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Now you can use the same API to connect to and control openstack:&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-ruby&quot;&gt;  $ irb
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'deltacloud'&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; c = DeltaCloud.&lt;span style=&quot;color: #9900CC;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'admin+admin'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'cloudpass'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'http://localhost:3005/api'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;DeltaCloud::API&lt;/span&gt;:0x0000000149fc90 &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@password&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;cloudpass&quot;&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@username&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;admin+admin&quot;&lt;/span&gt;,
                                        &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@api_uri&lt;/span&gt;=&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;#&amp;lt;URI::HTTP:0x000000014a7530 URL:http://localhost:3005/api&amp;gt;,&lt;/span&gt;
                                        &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@entry_points&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:instances&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3005/api/instances&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:buckets&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3005/api/buckets&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:images&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3005/api/images&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:drivers&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3005/api/drivers&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:instance_states&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3005/api/instance_states&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:realms&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3005/api/realms&quot;&lt;/span&gt;,
                                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:hardware_profiles&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3005/api/hardware_profiles&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                        &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@features&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:instances&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:user_name&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:user_files&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:authentication_password&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                        &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@verbose&lt;/span&gt;=&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;false&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@driver_name&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;openstack&quot;&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@api_version&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;1.0.0&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; c.&lt;span style=&quot;color: #9900CC;&quot;&gt;instances&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;collect&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;i&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;i.&lt;span style=&quot;color: #9900CC;&quot;&gt;id&lt;/span&gt;, i.&lt;span style=&quot;color: #9900CC;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;f6915123-c3de-4a3c-bb0e-e88143ea838f&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;2012-09-25 11:32:43 -0400&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; c.&lt;span style=&quot;color: #9900CC;&quot;&gt;images&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;collect&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;i&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;i.&lt;span style=&quot;color: #9900CC;&quot;&gt;id&lt;/span&gt;, i.&lt;span style=&quot;color: #9900CC;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;a4180f79-c4bf-4d61-a801-b5990b590fb0&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;f16-jeos&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; i = c.&lt;span style=&quot;color: #9900CC;&quot;&gt;create_instance&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'a4180f79-c4bf-4d61-a801-b5990b590fb0'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;DeltaCloud::API::Stateful::Instance&lt;/span&gt;:0x000000014fe1a0 &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@base_name&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;instance&quot;&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@client&lt;/span&gt;=&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;#&amp;lt;DeltaCloud::API:0x0000000149fc90 ...&amp;gt;,&lt;/span&gt;
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@url&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;http://localhost:3005/api/instances/c32688e4-eeb0-468f-a08f-cdf047d36b45&quot;&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@id&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;c32688e4-eeb0-468f-a08f-cdf047d36b45&quot;&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@objects&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:method_name&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;stopped?&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:state, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:state&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;STOPPED&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:method_name&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;running?&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:state, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:state&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;RUNNING&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:method_name&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;pending?&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:state, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:state&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;PENDING&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:method_name&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;shutting_down?&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:state, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:state&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;SHUTTING_DOWN&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;name&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;2012-09-25 14:39:31 -0400&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;owner_id&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;admin&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:link, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;image&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;a4180f79-c4bf-4d61-a801-b5990b590fb0&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;image_id&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;a4180f79-c4bf-4d61-a801-b5990b590fb0&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:link, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;realm&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;realm_id&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;state&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;PENDING&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:link, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;hardware_profile&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;1&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;hardware_profile_id&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;1&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:collection, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;public_addresses&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:values&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:collection, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;private_addresses&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:values&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:text, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;storage_volumes&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:value&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;,
                                                                      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:type&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;:collection, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method_name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;authentication&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:values&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;:username&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;removed&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@action_urls&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@actions&lt;/span&gt;=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                                            &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@state&lt;/span&gt;=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;PENDING&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
  irb&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;main&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;:&lt;span style=&quot;color: #006666;&quot;&gt;006&lt;/span&gt;:&lt;span style=&quot;color: #006666;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; i.&lt;span style=&quot;color: #9900CC;&quot;&gt;state&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;&quot;PENDING&quot;&lt;/span&gt;
 
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; c.&lt;span style=&quot;color: #9900CC;&quot;&gt;instances&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;collect&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;i&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;i.&lt;span style=&quot;color: #9900CC;&quot;&gt;id&lt;/span&gt;, i.&lt;span style=&quot;color: #9900CC;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;c32688e4-eeb0-468f-a08f-cdf047d36b45&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;2012-09-25 14:39:31 -0400&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;f6915123-c3de-4a3c-bb0e-e88143ea838f&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;2012-09-25 11:32:43 -0400&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
 
  &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# openstack instances autostart&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; c.&lt;span style=&quot;color: #9900CC;&quot;&gt;instances&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;first&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;state&lt;/span&gt;
  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;&quot;RUNNING&quot;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The same API can be used to control &lt;a href=&quot;http://aws.amazon.com/&quot;&gt;ec2&lt;/a&gt;, &lt;a href=&quot;http://www.vmware.com/products/datacenter-virtualization/vsphere/index.html&quot;&gt;vsphere&lt;/a&gt;, &lt;a href=&quot;http://www.gogrid.com/&quot;&gt;gogrid&lt;/a&gt; and many others.&lt;/p&gt;
&lt;h2&gt;imagefactory&lt;/h2&gt;
&lt;p&gt;To install imagefactory, the core component used to build and push cloud images, simply:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  # yum install imagefactory&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You may want to checkout / build the latest imagefactory from source to get all the latest updates:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  # yum install git
  $ git clone git://github.com/aeolusproject/imagefactory.git
  $ cd imagefactory
  $ make rpms
  $ cd imagefactory-plugins
  $ make rpms
  $ rpm -ivh &amp;lt;imagefactory.rpm&amp;gt; &amp;lt;imagefactory-plugins.rpm&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The latest imagefactory also leverages the oVirt SDK to build images:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  $ rpmbuild --rebuild http://repos.fedorapeople.org/repos/aeolus/imagefactory/testing/latest_bindings/ovirt-engine-sdk-3.1.0.3-1.fc14.src.rpm
  $ rpm -ivh &amp;lt;ovirt-engine-sdk.rpm&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;To push images to oVirt, mount the NFS export domain you had previous setup.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  $ mount ovirt:/ext/ovirt31export /mnt/ovirt&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Two configuration files are read in by imagefactory, one describing the provider which to build images for and the other the credentials to use to push an image to it. For example the rhev provider json &amp;amp; credentials xml files would look like:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  $ cat rhevm.json 
      {&quot;nfs-dir&quot;: &quot;/mnt/ovirt&quot;, &quot;nfs-path&quot;: &quot;/ext/ovirt31export&quot;,
       &quot;nfs-host&quot;: &quot;ovirt&quot;, &quot;cluster&quot;: &quot;_any_&quot;,
       &quot;api-url&quot;: &quot;http://ovirt/api&quot;, &quot;timeout&quot;: 1800 }
 
  $ cat rhevm.xml 
      &amp;lt;provider_credentials&amp;gt;&amp;lt;rhevm_credentials&amp;gt;&amp;lt;username&amp;gt;admin@internal&amp;lt;/username&amp;gt;&amp;lt;password&amp;gt;cloudpass&amp;lt;/password&amp;gt;&amp;lt;/rhevm_credentials&amp;gt;&amp;lt;/provider_credentials&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And the openstack config files:&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  $ cat openstack.json 
    {&quot;glance-host&quot;: &quot;openstack&quot;, &quot;glance-port&quot;: 9292 }
 
  $ cat openstack.xml 
    &amp;lt;provider_credentials&amp;gt;&amp;lt;openstack_credentials&amp;gt;&amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;&amp;lt;tenant&amp;gt;admin&amp;lt;/tenant&amp;gt;&amp;lt;password&amp;gt;cloudpass&amp;lt;/password&amp;gt;&amp;lt;strategy&amp;gt;keystone&amp;lt;/strategy&amp;gt;&amp;lt;auth_url&amp;gt;http://openstack:5000/v2.0&amp;lt;/auth_url&amp;gt;&amp;lt;/openstack_credentials&amp;gt;&amp;lt;/provider_credentials&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Setup a template containing the description of the image you would like to build. You may download many useful ones from the &lt;a href=&quot;https://github.com/aeolus-incubator/templates&quot;&gt;Aeolus Templates Repo&lt;/a&gt;. There are ones to setup &lt;a href=&quot;https://github.com/aeolus-incubator/templates/blob/master/web_servers/Apache/fedora-16/apache_httpd_f16.xml&quot;&gt;httpd&lt;/a&gt;, &lt;a href=&quot;https://github.com/aeolus-incubator/templates/tree/master/db_servers/MySQL/fedora-16&quot;&gt;mysqld&lt;/a&gt; and more.&lt;/p&gt;
&lt;p&gt;Import the template into imagefactory like so:&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  $ sudo imagefactory base_image template.xml&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Build the image for a particular cloud provider like so (target image is from last step):&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  $ sudo imagefactory --debug target_image --id b55b42f1-aa2d-418f-b635-252e5f343209 rhevm&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Push the image to the specified provider like so (image id from last step):&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;  $ sudo imagefactory --debug provider_image --id &quot;2492c8c2-ada4-4325-a783-da3c37871ba7&quot; --target rhevm rhevm.json rhevm.xml&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;other components&lt;/h2&gt;
&lt;p&gt;Aeolus consists of many components which can be used individually or together for a seamless cross-cloud experience. Imagefactory uses one of the most popular components &lt;a href=&quot;https://github.com/clalancette/oz&quot;&gt;Oz&lt;/a&gt; behind the scenes, to install a bare-bones operating system with Just-Enough-OS (JEOS) to bootstrap further installation mechanisms using the tooling native to the local environment. This allows us to generate minimalistic cloud images that are as portable as possible. The &lt;a href=&quot;https://github.com/aeolusproject/audrey&quot;&gt;Audrey&lt;/a&gt; config server is used to orchestrate cross-cloud services and configurations and I have &lt;a href=&quot;http://mo.morsi.org/blog/taxonomy/term/86&quot;&gt;previously&lt;/a&gt; &lt;a href=&quot;http://mo.morsi.org/blog/node/350&quot;&gt;posted&lt;/a&gt; about &lt;a href=&quot;https://github.com/movitto/snap&quot;&gt;snap&lt;/a&gt; which uses native tooling to take portable snapshots of cloud instances. Ontop of everything the Conductor RESTful API and Web application is used to manage all this, and configure various components to work with each other with users and an extensive permission schema. Infront of this is a the aeolus-cli which provides a rich command line cloud management interface.&lt;/p&gt;
&lt;p&gt;Stay tuned for my next post in the series which will be on the Conductor Web UI and aeolus-cli.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/373&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Aeolus at the Ohio LinuxFest - Part I Cloud Providers</title>
		<link href="http://mo.morsi.org/blog/node/372"/>
		<id>http://mo.morsi.org/372 at http://mo.morsi.org/blog</id>
		<updated>2012-09-24T18:42:09+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;https://www.aeolusproject.org/images/logo-frontpage.png&quot; alt=&quot;aeolus&quot; style=&quot;float: right; margin-left: 15px;&quot; /&gt;This weekend I head out to Columbus, OH for the &lt;a href=&quot;http://ohiolinux.org/&quot;&gt;Ohio LinuxFest&lt;/a&gt; where I will be presenting &lt;a href=&quot;https://www.aeolusproject.org/&quot;&gt;Aeolus&lt;/a&gt;. This is one of the largest community run Linux conferences in the states, and should be my biggest presentation audience yet, so I'm really looking forward to going. The presentation leans heavily on a live demonstration of the software, with a minimal introduction to the topic and architecture at the beginning. This week a few of us in the Aeolus community are going to be &lt;a href=&quot;http://blog.aeolusproject.org&quot;&gt;blogging&lt;/a&gt; / &lt;a href=&quot;http://twitter.com/aeolusproject&quot;&gt;tweeting&lt;/a&gt; / etc to try and drive a bit of buzz around our recent work which includes support for more cloud providers (prominently openstack!), various command line utilities and migration tooling, and our community efforts.&lt;/p&gt;
&lt;p&gt;The demo consists of two machines, my desktop workstation acting as an 'external' cloud provider, and my laptop running a vm w/ the Aeolus suite on it. Network resources are always unreliable at conferences, so I'm not planning on deploying to ec2 or similar, but rather I have setup &lt;a href=&quot;http://www.openstack.org/&quot;&gt;OpenStack&lt;/a&gt; and &lt;a href=&quot;http://ovirt.org&quot;&gt;oVirt&lt;/a&gt; (RHEV) on my desktop, each bonded to their own management network interface, through which they will be controlled via my laptop. The exact same commands and setup I will be demoing works with any cloud provider supported by the Aeolus suite (which is the most comprehensive IaaS cloud management suite to date).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://ohiolinux.org/sites/www.ohiolinux.org/files/images/OLF-GENERICLOGO.jpg&quot; style=&quot;float: left; margin-right: 10px; height: 300px; width: 290px;&quot; /&gt;The demo will be run on freshly installed Fedora 17 systems with components from the Fedora package repositories. In retrospect the hardest part of setting everything up was setting up the cloud providers themselves, after which Aeolus was a cinch. It is no surprise through, a Cloud-based computational environment is a very complicated thing, and involves orchestrating many disparate components, each of which may be complicated in its own right. This reinforces the need for a technology such as Aeolus, as even with open frameworks such as oVirt and OpenStack, the end user is often adopting one particular way of doing things, which entails certain benefits and drawbacks. By adopting open standards 100% centred around portability, one is freeing themselves from being tied to a specific implementation and may choose at any point to adopt alternate solutions with minimal effort.&lt;/p&gt;
&lt;p&gt;Attached below is my guide on setting up oVirt and OpenStack on a fresh F17 box (after the &lt;a href=&quot;http://mo.morsi.org/blog/node/372&quot;&gt;jump&lt;/a&gt;). I plan on posting an Aeolus overview later to demo interaction with the providers setup below.&lt;/p&gt;
&lt;div style=&quot;clear: both; margin-bottom: 10px;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/372&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">The Art of Aikido</title>
		<link href="http://mo.morsi.org/blog/node/371"/>
		<id>http://mo.morsi.org/371 at http://mo.morsi.org/blog</id>
		<updated>2012-09-19T11:56:13+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/logo.jpg&quot; style=&quot;float: right; margin-left: 10px;&quot; /&gt;Recently our Sensai sent out an email to the members of our &lt;a href=&quot;http://www.facebook.com/AikidoofCNY&quot;&gt;dojo&lt;/a&gt; requesting submissions for articles to include in the Fall Newsletter. I've been meaning to write a bit about the sport I love and figured this would be the perfect opportunity and venue to do so.&lt;/p&gt;
&lt;p&gt;To step back a bit, &lt;a href=&quot;http://en.wikipedia.org/wiki/Aikido&quot;&gt;Aikido&lt;/a&gt; is not only a sport, but also a way of life. Aikido literally means the unification (ai) of the spirit (ki, energy) with the way or path (do). Based on principles of simple physics and mechanics to redirect and use an attacker's force against them, Aikido is the culmination of millenia of human warfare refined to the point where the a practitioner (called an Aikido-ka) learns the optimal placement of one's body, mind, and spirit so as to diffuse an attack and neutralize the enemy. As part of this, one of the prominent lessons learnt by an Aikido-Ka is self control. One must be aware of and in control on one's body and mind at all times to anticipate and affect the course of actions. Only through this continual awareness and relaxation, one can free the body and mind to the point which actions and reactions can occur instantly and with optimal efficiency.&lt;/p&gt;
&lt;p&gt;As in the dojo one must be aware at all times to fully appreciate and confront life. While the traditional Japanese saying goes &quot;Cry in the Dojo, Laugh on the Battlefield&quot;, many of us are fortunately to live in an age and part of the world where we do not have to face an enemy in combat. Regardless, we as humans still have to content with a continuous battle against our own selves. Our own psyches play against us on a continual basis, fuelling the emotions and feelings that drive the human experience, both the ups and downs, the good times and times of sorrow and anger. It is often too easy to get wrapped up in all this and feel lost / without control, some people living their whole lives this way.&lt;/p&gt;
&lt;p&gt;Fortunately the exact same mental training practised by an Aikido-ka to control one's mind and body can be applied to one's self in any situation. By being constantly aware of who we are and what we are feeling, one can continuously examine one's self and alter his/her mental state to the point they desire at any time. With enough practice this becomes completely natural, a hair trigger reaction, whenever one starts feeling anxious or sad, one can train him/herself to completely relax be aware of their current state of being and not let the trivialities of our lives get in the way of the magnificence of existence. After all the human experience is just that, perceived mental interpretations of limited sensory inputs in a universe that is incomprehensible by our standards. Only by freeing the mind can one grasp the true potential of human existence.&lt;/p&gt;
&lt;p&gt;Another central concept to master while studying the Art of Aikido, is that of infinity. If such a concept can even be grasped at all! When an attack is launched or received, whether deflected, countered, or neutralized, the Aikido-ka must let his or her energy flow from their center to infinity. If one tries to refrain and hold back or stop the reaction and the natural movement, even for a split second, the attacker can and will gain the advantage. When practiced correctly, there will be no possibility of a counter or resistance. The technique will proceed along the most efficient mathematical path through which all the opponents energy will be redirected to where they have no support and balance, using gravity, leverage, and the Aikido-ka's core / center of strength to drive the counter.&lt;/p&gt;
&lt;p&gt;Likewise outside the dojo one must try to continuously expand one's conciousness beyond our limited human perceptions towards infinity.At any given moment we as humans are experiencing only an infestisimle amount of what there is to experience. Furthermore, many people are so lost in their thoughts that they don't take the time to experience every moment in its fullest, taking in the vast amount of energy and signals which we are experiencing at any given time. Even at this very moment you are absorbing light, subconsciously interpreting the many audio clues from the environment around you, even every-continuously adjusting your position due to gravity and friction in minute ways. All forms of energy interact with each other no matter how big or small, and after all all matter is energy! (just moving very slow, E=MC^2).&lt;/p&gt;
&lt;p&gt;This brings us back to the the Ki (energy) in Aikido. By unifying one's energy with one's path, one can harmonize and balance their life and by mental training one can begin to detach themselves from the little/trivial things that consume so many peoples lives. That is not to say to not enjoy life pleasures. But everything should be viewed in the scope of what it really is and one should not get too wrapped up over anything. I very much enjoy the Martial Art of Aikido, and am planning to continue training as long as I can. I encourage anyone who might be interested to find a dojo around them, there are many great schools all over the world! Until next time, onigashimas!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/371&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">JSON-RPC via RJR - One API / Many Transports</title>
		<link href="http://mo.morsi.org/blog/node/370"/>
		<id>http://mo.morsi.org/370 at http://mo.morsi.org/blog</id>
		<updated>2012-08-30T11:38:29+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/jsonrpc.png&quot; style=&quot;float: right; margin-left: 10px; width: 350px; height: 150px;&quot; /&gt;A few months back I gave a presentation to the &lt;a href=&quot;http://meetr.cz/meetups/13&quot;&gt;Brno Ruby Users&lt;/a&gt; group about the &lt;a href=&quot;http://en.wikipedia.org/wiki/JSON-RPC&quot;&gt;JSON-RPC&lt;/a&gt; protocol and my implementation &lt;a href=&quot;https://github.com/movitto/rjr&quot;&gt;RJR&lt;/a&gt;, but didn't go into too much detail here (&lt;a href=&quot;http://mo.morsi.org/blog/node/365&quot;&gt;blog post&lt;/a&gt;). Recently I've been &lt;a href=&quot;https://github.com/movitto/rjr/commits/master&quot;&gt;pushing&lt;/a&gt; many updates and improvements, including a sorely needed &lt;a href=&quot;http://rubydoc.info/github/movitto/rjr/frames/file/README.md&quot;&gt;docs update&lt;/a&gt;, and figure now would be a good time to do just that.&lt;/p&gt;
&lt;p&gt;The goal was to develop a rpc mechanism that was as extensible and pluggable as possible with the implementation being transport agnostic, eg the developer would be able to satisfy and invoke rpc requests over a variety of transport mechanisms, such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Transmission_Control_Protocol&quot;&gt;tcp&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Http&quot;&gt;http&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Websocket&quot;&gt;websockets&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/AMQP&quot;&gt;amqp&lt;/a&gt;, and more. This would provide the most outreach for developers, allowing their methods to be invoked in a wide variety of infrastructures and existing systems. It was also important that the handlers be able to determine which transport a request came in on, so as to be able to alter flow-control if desired. To accomplish this, RJR sets a variety of instances variables in the scope of the invoked method handler, things like @rjr_node_type will contain the transport which the request came in on, and other things like @rjr_callback allows the server to send json-rpc request methods back to the client, so long as the transport mechanism remains intact (eg the tcp or websocket remains open, the amqp queue is still valid, etc).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-ruby&quot;&gt;&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# example server from the RJR documentation:&lt;/span&gt;
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# define a rpc method called 'hello' which takes&lt;/span&gt;
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# one argument and returns it in upper case&lt;/span&gt;
&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;RJR::Dispatcher&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;add_handler&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;arg&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;
  arg.&lt;span style=&quot;color: #9900CC;&quot;&gt;upcase&lt;/span&gt;
&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;
 
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# listen for this method via amqp, websockets, http calls&lt;/span&gt;
amqp_node  = &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;RJR::AMQPNode&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;new&lt;/span&gt;  &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:node_id&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'server'&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:broker&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'localhost'&lt;/span&gt;
ws_node    = &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;RJR::WSNode&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;new&lt;/span&gt;    &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:node_id&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'server'&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:host&lt;/span&gt;   &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'localhost'&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:port&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006666;&quot;&gt;8080&lt;/span&gt;
www_node   = &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;RJR::WebNode&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;new&lt;/span&gt;   &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:node_id&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'server'&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:host&lt;/span&gt;   &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'localhost'&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:port&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006666;&quot;&gt;8888&lt;/span&gt;
 
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# start the server and block&lt;/span&gt;
multi_node = &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;RJR::MultiNode&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:nodes&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;amqp_node, ws_node, www_node&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
multi_node.&lt;span style=&quot;color: #9900CC;&quot;&gt;listen&lt;/span&gt;
multi_node.&lt;span style=&quot;color: #9900CC;&quot;&gt;join&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Since JSON-RPC is a very simple protocol I also wanted to add a mechanism to allow developers to extend the protocol easily, even if this meant that these customizations would only work against nodes running RJR. To do this RJR allows developers to set arbitrary headers to be written to the json-rpc request, so that method handlers and their invokers may process this additional metadata and do what they will with this. For example, a node being used as a server can take method arguments, authenticate them against any backend, and set a 'session-id' header on all subsequent messages. All subsequent client requests will contain this header which is available to the handlers that can authorize the user. (obviously the end user would want to use a secure transport mechanism incorporating ssl to prevent session-hijacking)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-ruby&quot;&gt;&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# example clients from the documentation&lt;/span&gt;
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# invoke the method over amqp&lt;/span&gt;
amqp_node = &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;RJR::AMQPNode&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:node_id&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'client'&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:broker&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'localhost'&lt;/span&gt;
&lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;puts&lt;/span&gt; amqp_node.&lt;span style=&quot;color: #9900CC;&quot;&gt;invoke_request&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'server-queue'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'hello'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'world'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
 
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# invoke the method over http using rjr&lt;/span&gt;
client = &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;RJR::WebNode&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:node_id&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'client'&lt;/span&gt;
&lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;puts&lt;/span&gt; client.&lt;span style=&quot;color: #9900CC;&quot;&gt;invoke_request&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'http://localhost:8888'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'hello'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'mo'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
 
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Invoking json-rpc requests over http using curl&lt;/span&gt;
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# $ curl -X POST http://localhost:8888 -d '{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;method&quot;:&quot;hello&quot;,&quot;params&quot; [&quot;mo&quot;],&quot;id&quot;:&quot;123&quot;}'&lt;/span&gt;
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# &amp;gt; {&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;id&quot;:&quot;123&quot;,&quot;result&quot;:&quot;Hello mo!&quot;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;As far as next steps, flushing out the &lt;a href=&quot;http://en.wikipedia.org/wiki/User_Datagram_Protocol&quot;&gt;UDP&lt;/a&gt; transport mechanism and continuing to optimize performance are high on my list. At some point I would love to do a complete rewrite in a lower-level language such as &lt;a href=&quot;http://en.wikipedia.org/wiki/C_%28language%29&quot;&gt;C&lt;/a&gt; and simply write wrappers / adapters so that methods implemented in higher level languages can be invoked simultanously. But for the time being, RJR serves my purposes and will continue developing that for now.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/370&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">is-it-fedora-ruby - from an idea to an app</title>
		<link href="http://mo.morsi.org/blog/node/369"/>
		<id>http://mo.morsi.org/369 at http://mo.morsi.org/blog</id>
		<updated>2012-08-20T18:36:38+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/ruby-fedora.png&quot; style=&quot;float: left; padding-right: 10px;&quot; /&gt;&lt;br /&gt;
Last January I attended and gave a few presentations at the &lt;a href=&quot;http://mo.morsi.org/blog/node/360&quot;&gt;Fedora Users and Developers Conference&lt;/a&gt; in Blacksburg, Virgina. The conference was great, we accomplished alot, and among everything else the Fedora &lt;a href=&quot;http://fedoraproject.org/wiki/Ruby_SIG&quot;&gt;rubys-sig&lt;/a&gt; met again to discuss packaging, distro, and other issues. During our discussions and all the work up to that point it became aparent that one of the main areas which the community was in need was on the promotional front, we had already done a slew of work to form a stable Ruby and Gem stack in Fedora with several applications relying on it (bringing some sanity to the mad world of ruby dependencies) but our efforts were going unheard of for a large part, lost in the torrent of other upstream ruby community discussions.&lt;/p&gt;
&lt;p&gt;To rectify this, I proposed developing a site similar to &lt;a href=&quot;http://isitruby19.com/&quot;&gt;isitruby19&lt;/a&gt;, the now defunct isitmacruby, and the &lt;a href=&quot;https://www.ruby-toolbox.com/&quot;&gt;ruby toolbox&lt;/a&gt;. This would provide a simple one-stop shop for ruby developers and users alike, where the current stack in Fedora could be easily viewed and discussed, and cross-referenced with the gem metadata stored at rubygems.org. Unfortunately like so many other ideas, this one was put on the backburner in lieu of more pressing work, but would come up periodically as we &lt;a href=&quot;https://lists.fedoraproject.org/mailman/listinfo/ruby-sig&quot;&gt;discussed&lt;/a&gt; various ways to grow the Ruby community.&lt;/p&gt;
&lt;p&gt;As luck would have it, Fedora was again selected as one of the sponsored organizations for the &lt;a href=&quot;https://fedoraproject.org/wiki/GSOC_2012&quot;&gt;google summer of code&lt;/a&gt; which I saw as an opportunity to drive this project forward. I wrote up the call for proposals, registered as a mentor, and submitted the document. The project received a few applicants, and I felt that &lt;a href=&quot;http://zuhao.me/&quot;&gt;Zuhao&lt;/a&gt; was the best fit for it so together we flushed out a plan of attack.&lt;/p&gt;
&lt;p&gt;The rest was fairly straightforward. Zuhao did the vast majority of the coding over the summer, I submitted a few patches every once in a while to &quot;rubify&quot; things or to implement a small feature. We formally met via IRC on Fridays, and discussed and designed things via email throughout the week. Around the middle of the summer, we deployed the site on a vm on one of my servers, and as the project continued to evolve, we registered the &lt;a href=&quot;http://isitfedoraruby.com/&quot;&gt;isitfedoraruby.com&lt;/a&gt; domain and pointed it there. The vm just contained a clone of the project's &lt;a href=&quot;https://github.com/zuhao/isitfedoraruby&quot;&gt;git repo&lt;/a&gt; so that the latest updates could be deployed very rapidly and we wouldn't have to worry about packaging for the time being. In the near future we will be bundling everything up into formal releases and pushing the packages into the Fedora and Debian release cycles.&lt;/p&gt;
&lt;p&gt;All in all, I'm very pleased with Zuhao's progress and the application has been gaining traction amongst the Fedora / Ruby community. We're looking at and are continuing to expand the metadata that is stored in the application and displaying it in unique ways which can't be viewed elsewhere. Make sure to frequent the site as it continues to evolve!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/369&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html">First test day - Fedora Jam</title>
		<link href="http://lurimax.posterous.com/first-test-day-fedora-jam"/>
		<id>http://lurimax.posterous.com/first-test-day-fedora-jam</id>
		<updated>2012-07-19T09:46:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;
	&lt;/p&gt;&lt;p&gt;The first test day for feodra jam will be next week, on the 26th. We will be looking for bugs, usability problems, broken packages etc. This is the first proper testing for the spin, so it will be mostly just charting the seas to see what needs to be done and what can be improved. &lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://lurimax.posterous.com/first-test-day-fedora-jam&quot;&gt;Permalink&lt;/a&gt; 

	| &lt;a href=&quot;http://lurimax.posterous.com/first-test-day-fedora-jam#comment&quot;&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;</content>
		<author>
			<name>Jørn Lomax</name>
			<uri>http://lurimax.posterous.com</uri>
		</author>
		<source>
			<title type="html">/dev/null</title>
			<subtitle type="html">Views on growing up in an opensource developer world</subtitle>
			<link rel="self" href="http://lurimax.posterous.com/rss.xml"/>
			<id>http://lurimax.posterous.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">GSoC Update</title>
		<link href="http://mo.morsi.org/blog/node/368"/>
		<id>http://mo.morsi.org/368 at http://mo.morsi.org/blog</id>
		<updated>2012-07-16T20:29:48+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/gsoc2012.png&quot; style=&quot;width: 730px;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A few months back I &lt;a href=&quot;http://mo.morsi.org/blog/node/366&quot;&gt;wrote&lt;/a&gt; about a few projects which I am mentoring for &lt;a href=&quot;http://fedoraproject.org&quot;&gt;Fedora&lt;/a&gt; as part of the Google Summer of Code '12. Now that the summer is about 1/2 way over, I'm pleased to share the progress on the projects, as well as all the hard work that the students' have put into them.&lt;/p&gt;
&lt;p&gt;First off Sammy who is working on an interface to &lt;a href=&quot;https://fedoraproject.org/wiki/GSOC_2012/Student_Application_Samridh90/Bringing_the_Cloud_to_the_Fedora_Desktop&quot;&gt;deploy to the cloud via specified deployment criteria&lt;/a&gt; has made great headway expanding the central Aeolus API to support hardware profiles and instance management. Sammy has also expanded the command line client and utility to support these new capabilities and will be basing the remainder of the work this summer on using these features to deploy to the cheapest and quickest cloud providers.&lt;/p&gt;
&lt;p&gt;Nitesh (who has been graciously volunteering his own time outside the GSoC) has been working on building a graphical (&lt;a href=&quot;http://qt.nokia.com/products/&quot;&gt;QT based&lt;/a&gt;) desktop client for Aeolus, which he is hosting on his &lt;a href=&quot;https://github.com/niteshnarayanlal/Aeolus-gui&quot;&gt;github&lt;/a&gt; repo. The application is looking great, modules have already been completed for provider and instance management from the desktop, and he is looking to continue expanding functionality for end-to-end cloud instance management.&lt;br /&gt;
&lt;a href=&quot;http://mo.morsi.org/files/gsoc/aeolus-gui/04-cloud-providers.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/files/gsoc/aeolus-gui/04-cloud-providers.png&quot; style=&quot;width: 280px; height: 90px; float: left;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/files/gsoc/aeolus-gui/06-new-image.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/files/gsoc/aeolus-gui/06-new-image.png&quot; style=&quot;width: 230px; height: 230px; float: left; margin-left: 10px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt; Finaly Zuhao who has been working hard on the &lt;a href=&quot;http://isitfedoraruby.syracloud.net/&quot;&gt;isitfedoraruby&lt;/a&gt; project has also made great headway, implementing &lt;a href=&quot;http://rubydoc.info/gems/rake/0.9.2.2/frames&quot;&gt;Rake&lt;/a&gt; tasks allowing us to import gems and rpms into the database, as well as various frontend interfaces which to display and cross-reference the gem and rpm metadata and other info. Various other features are in progress including the ability to comment and rate specific packages, a section highlighting various projects based on the Fedora / Ruby stack, and a mechanism to more closely integrate w/ rubygems as gems are pushed. You may find the code in Zuhao's &lt;a href=&quot;https://github.com/zuhao/isitfedoraruby/tree/create-controllers&quot;&gt;github&lt;/a&gt; repo, and I've hosted the website on a temp subdomain for &lt;a href=&quot;http://isitfedoraruby.syracloud.net/&quot;&gt;demoing&lt;/a&gt; purposes. Towards he end of the summer we'll update the site with the latest developments, reserve the is-it-fedora-ruby (or other) domain, and point that at my server. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/files/gsoc/isitfedoraruby/02-gem-list.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/files/gsoc/isitfedoraruby/02-gem-list.png&quot; style=&quot;width: 300px; height: 200px; float: left;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://mo.morsi.org/files/gsoc/isitfedoraruby/03-packages-by-popularity.png&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/files/gsoc/isitfedoraruby/03-packages-by-popularity.png&quot; style=&quot;width: 300px; height: 200px; float: left; margin-left: 10px;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;Any comments, feedback, patches, or feature requests to any of these projects would be more than appreciated. Be sure to stay tuned for more updates as these projects evolve as additional features are added.&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/368&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html">Getting closer - GSoC Week #x</title>
		<link href="http://lurimax.posterous.com/getting-closer-gsoc-week-x"/>
		<id>http://lurimax.posterous.com/getting-closer-gsoc-week-x</id>
		<updated>2012-07-05T11:06:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;
	&lt;/p&gt;&lt;p&gt;Not sure which week of GSoC this is, but it's time for an update.&lt;/p&gt;
&lt;p&gt;Fedora-jam finally has it's own kickstart and has been uploaded to &lt;a href=&quot;http://git.fedorahosted.org/git/?p=music-creation.git;a=summary&quot;&gt;git&lt;/a&gt;. The submission to the spins team has been pushed to the 11th of July. There are still packages beeing tossed around, so i think it would make sense to wait for the discussion to die down a little before we submit it.&lt;/p&gt;
&lt;p&gt;I have now also been accepted as a Fedora packager, and i have submitted two packages, monobristol and zita-alsa-pcmi. My next job is to create a program that can switch between pulseaudio and jack by the press of a button. It will probably be written in python, and use qt for the interface (i would prefer to write in c, but i have only ever done GUI programming with python and qt).&lt;/p&gt;
&lt;p&gt;Now we have to start testing, figure out what need to be configured. We also need to start setting dates for test days. I'm hoping to arrange two test days. One in late July, and one at the en of GSoC. I will start writing up dates next weke and start spreading the word. &lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://lurimax.posterous.com/getting-closer-gsoc-week-x&quot;&gt;Permalink&lt;/a&gt; 

	| &lt;a href=&quot;http://lurimax.posterous.com/getting-closer-gsoc-week-x#comment&quot;&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;</content>
		<author>
			<name>Jørn Lomax</name>
			<uri>http://lurimax.posterous.com</uri>
		</author>
		<source>
			<title type="html">/dev/null</title>
			<subtitle type="html">Views on growing up in an opensource developer world</subtitle>
			<link rel="self" href="http://lurimax.posterous.com/rss.xml"/>
			<id>http://lurimax.posterous.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">The long drag - GSoC Week #4-5</title>
		<link href="http://lurimax.posterous.com/the-long-drag-gsoc-week-4-5"/>
		<id>http://lurimax.posterous.com/the-long-drag-gsoc-week-4-5</id>
		<updated>2012-06-28T07:53:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;
	&lt;/p&gt;&lt;p&gt;Not much has been happening lately. Most of my time has gone to packageing and trying to get sponsored. Getting a package through review is much harder then it seemed at first. But it seems like i have two packages that are now ready and hopefully by the end of the week i will get sponsored.&lt;/p&gt;
&lt;p&gt;We had to push the submission date to the Spins SIG to the 7th of july. I just haven't had time to work properly on the kickstart file. I need to get the list of primary software ready first, which i should get ready sometime today or at the latest tomorrow so that i can send it on the mailinglist so everyone can check that nothing is missing.  &lt;/p&gt;
&lt;p&gt;I need to start picking up some speed. Things have been going slow and i think i might be running a little behind schedual. As long as there is a kickstart file to submit by the end of next week, we should be ok. &lt;/p&gt;
&lt;p&gt;I have contacted the SPins SIG aout what can be done after the submission deadline (17th of July), but i still don't feel like i have a proper answer. I think going on the IRC chanel might help, as email can often lead to misunderstandings&lt;/p&gt;
&lt;p&gt;Hopefully i will remeber to blog next week. I'm terrible a blogging, never liked doing it, but i'm trying my best :)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://lurimax.posterous.com/the-long-drag-gsoc-week-4-5&quot;&gt;Permalink&lt;/a&gt; 

	| &lt;a href=&quot;http://lurimax.posterous.com/the-long-drag-gsoc-week-4-5#comment&quot;&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;</content>
		<author>
			<name>Jørn Lomax</name>
			<uri>http://lurimax.posterous.com</uri>
		</author>
		<source>
			<title type="html">/dev/null</title>
			<subtitle type="html">Views on growing up in an opensource developer world</subtitle>
			<link rel="self" href="http://lurimax.posterous.com/rss.xml"/>
			<id>http://lurimax.posterous.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Hitting the ground running - GSoC Week #3</title>
		<link href="http://lurimax.posterous.com/hitting-the-ground-running-gsoc-week-3"/>
		<id>http://lurimax.posterous.com/hitting-the-ground-running-gsoc-week-3</id>
		<updated>2012-06-13T11:07:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;
	&lt;/p&gt;&lt;p&gt;The time has come to get things op and running.&lt;/p&gt;
&lt;p&gt;The first IRC meeting about the audio spin was held on Monday. The minutes from the meeting can be read at &lt;a href=&quot;http://sheep-punchers.info/ftp/fedora-audio/2012/fedora-audio.2012-06-11-15.04.html&quot;&gt;http://sheep-punchers.info/ftp/fedora-audio/2012/fedora-audio.2012-06-11-15.04.html &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Although the attendence was quite low (we were only 3), it was a very productive meeting. I now know more of what has to be done, and when. The spins team has been contacted and they now know about the audio spin, and they gave the exact dates for certain events, which are put into the &lt;a href=&quot;https://www.google.com/calendar/embed?src=1k0bpl1pbfmjbdofaodqgsrt68%40group.calendar.google.com&amp;amp;ctz=Europe/Oslo&quot;&gt;calendar&lt;/a&gt; for the spin. A good way to keep updated with the progress of the spin would be to subscribe to the calendar, as it is updated regurarly.&lt;/p&gt;
&lt;p&gt;The wiki pages for the project are also getting an overhaul. The spin itself needs a wiki page, which will be completed on friday when we finally have decided what the spin should be called. The &lt;a href=&quot;https://fedoraproject.org/wiki/Audio_Creation&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;http://fedoraproject.org/wiki/Audio_creation_spin_development&quot;&gt;wiki&lt;/a&gt; pages that are there now, will also be made into one, as they contain a lot of the same (but sometimes conflicting) info&lt;/p&gt;
&lt;p&gt;The mission for the time being is to start playing around with configuration files (especailly JACK/ALSA/pulseaudio) so we know what has to be configured and what it is possible to use. I have also started on createing the kickstart file, and it will be uploaded as sonn as it has anything interesting in it (don't know where yet)&lt;/p&gt;
&lt;p&gt;A lot to to this week, but i would like to see the kickstart ready for the next meeting, which is on the 25th of june, and I would like to see the kickstart file submitted to the spins team by the 1st of july so no time to rest&lt;/p&gt;
&lt;p&gt;If anybody wonders where week 2 of GSoC went, it was spent acing my CS exams, and failing my math exam&lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://lurimax.posterous.com/hitting-the-ground-running-gsoc-week-3&quot;&gt;Permalink&lt;/a&gt; 

	| &lt;a href=&quot;http://lurimax.posterous.com/hitting-the-ground-running-gsoc-week-3#comment&quot;&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;</content>
		<author>
			<name>Jørn Lomax</name>
			<uri>http://lurimax.posterous.com</uri>
		</author>
		<source>
			<title type="html">/dev/null</title>
			<subtitle type="html">Views on growing up in an opensource developer world</subtitle>
			<link rel="self" href="http://lurimax.posterous.com/rss.xml"/>
			<id>http://lurimax.posterous.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Comunitising the comunity - GSoC - week #1</title>
		<link href="http://lurimax.posterous.com/1st-week-of-gsoc"/>
		<id>http://lurimax.posterous.com/1st-week-of-gsoc</id>
		<updated>2012-05-26T13:03:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;
	&lt;/p&gt;&lt;p&gt;The first week of Goole Summer of Code is now over. As i'm still studying hard at university to finish my exam (this time we are implementing a filesystem on our OS) i have not done to much. Most of my time has gone to get an overview of what has to be done. I have set up a schedual for meetings and for important dates that needs to be kept in mind. If anyone wants to lok at the schedual for the fedora audio spin, you can subscribe to the calendar &lt;a href=&quot;https://www.google.com/calendar/embed?src=1k0bpl1pbfmjbdofaodqgsrt68%40group.calendar.google.com&amp;amp;ctz=Europe/Oslo&quot; title=&quot;Fedora audio schedual&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At the same time i have been busy comunitising the comunity. It's dawned on me that i'm supposed to be a driving force behind the fedora audio spin, so keeping mysself and the counity in sync is important. The main thing that is being disccused now is a name for the spin and what desktop enviroment we should use. I'm partial to just ssticking to gnome 3, maybe xfce. Som people have mention Razor Qt, which I will have to try before i make a verdict on it. I love the interaction with the comunity though, and it's fun to get great responses to messages to the mailing list&lt;/p&gt;
&lt;p&gt;I also need to get approved for package comminting. I have written my first .spec file for an rpm. It was hard to get into, but with enought wiki reading and staring at examples it did eventually sink in. I was though some sweet commands that really help if anyone is interested in writing rpm packages:&lt;/p&gt;
&lt;blockquote class=&quot;posterous_short_quote&quot;&gt;
&lt;p&gt;yumdownloader --source &amp;lt;package&amp;gt; &lt;br /&gt;rpm -ivh &amp;lt;resulting src.rpm&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The first command will downoad a source rpm file, the second will unpack it. Gives plenty of info and also lets you view the .spec file of the package.  &lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://lurimax.posterous.com/1st-week-of-gsoc&quot;&gt;Permalink&lt;/a&gt; 

	| &lt;a href=&quot;http://lurimax.posterous.com/1st-week-of-gsoc#comment&quot;&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;</content>
		<author>
			<name>Jørn Lomax</name>
			<uri>http://lurimax.posterous.com</uri>
		</author>
		<source>
			<title type="html">/dev/null</title>
			<subtitle type="html">Views on growing up in an opensource developer world</subtitle>
			<link rel="self" href="http://lurimax.posterous.com/rss.xml"/>
			<id>http://lurimax.posterous.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">When in Rome...</title>
		<link href="http://mo.morsi.org/blog/node/367"/>
		<id>http://mo.morsi.org/367 at http://mo.morsi.org/blog</id>
		<updated>2012-05-26T08:26:33+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;Am wrapping up my European trip and am planning on being back in the States at the end of next week. Earlier on this week, my mother (who came for a visit) and I traveled to &lt;a href=&quot;http://en.wikipedia.org/wiki/Rome&quot;&gt;Rome, Italy&lt;/a&gt; to see the city (hover over images for descriptions, right click and then select 'view image' for the full size)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On Sunday 05/20 we flew out of Brno, a direct flight to Rome Fiuminco Airport. We arrived pretty late so ended up only going to the hotel and crashing&lt;/li&gt;
&lt;li&gt;The next day was the &lt;a href=&quot;http://en.wikipedia.org/wiki/Colosseum&quot;&gt;Colosseum&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Palatine_Hill&quot;&gt;Palatine Hill&lt;/a&gt; and the &lt;a href=&quot;http://en.wikipedia.org/wiki/Roman_Forum&quot;&gt;Roman Forum&lt;/a&gt;, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Santa_Maria_sopra_Minerva&quot;&gt;Basilica of Saint Maria sopra Minerva&lt;/a&gt;, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pantheon,_Rome&quot;&gt;Pantheon&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Piazza_Navona&quot;&gt;Piazza Navona&lt;/a&gt;, and &lt;a href=&quot;http://en.wikipedia.org/wiki/Trevi_Fountain&quot;&gt;Trevi Fountain&lt;/a&gt;. Needless to say we were quite exhausted from all the walking at the end of the day :-)
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/colosseum1.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;colosseum 1&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/colosseum2.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;colosseum 2&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/colosseum3.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;colosseum 3&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/palatine-hill1.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;palatine hill 1&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/palatine-hill2.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;palatine hill 2&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/roman-forum1.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;roman forum&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/pantheon1.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;pantheon 1&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/pantheon2.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;pantheon 2&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/trevi-fountain1.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;trevi fountain&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;The following morning was the National Museum of Rome and the rest of the day was spent at &lt;a href=&quot;http://en.wikipedia.org/wiki/Vatican_City&quot;&gt;Vatican City&lt;/a&gt;. I have to say I have never seen a collection of artwork quite as impressive as that at the &lt;a href=&quot;http://en.wikipedia.org/wiki/Vatican_Museums&quot;&gt;Vatican Museum&lt;/a&gt;. Not only that but all in all it is over 9 miles of artwork (yes 9 miles)! All in all, while unbelievably impressive (especially the &lt;a href=&quot;http://en.wikipedia.org/wiki/Raphael_Rooms&quot;&gt;Raphael Rooms&lt;/a&gt;) it was a bit much, towards the end the grandour had not faded (actually quite the opposite) but I was completely museumed out, and couldn't process any more.  We also visited &lt;a href=&quot;http://en.wikipedia.org/wiki/St._Peter%27s_Basilica&quot;&gt;Saint Peters Bascillica&lt;/a&gt; and several other grand cathedral's during the course of the day.
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/national-museum-at-rome1.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;national museum at rome 1&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/national-museum-at-rome2.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;national museum at rome 2&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/vatican-city1.jpg&quot; style=&quot;&quot; title=&quot;vatican city 1&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/vatican-city2.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;vatican city 2&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/vatican-museum1.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;vatican museum 1&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/vatican-museum2.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;vatican museum 2&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/vatican-museum3.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;vatican museum 3&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/vatican-museum4.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;vatican museum 4&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/vatican-museum5.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;vatican museum 5&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/vatican-museum6.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;vatican museum 6&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;On our third day, Wednesday we got a great view of the city from the &lt;a href=&quot;http://en.wikipedia.org/wiki/Villa_Borghese_gardens&quot;&gt;Villa Borgese Gardens&lt;/a&gt;, walked down the &lt;a href=&quot;http://en.wikipedia.org/wiki/Spanish_Steps&quot;&gt;Spanish Steps&lt;/a&gt; and then got another panaramic view from the vista atop of &lt;a href=&quot;http://en.wikipedia.org/wiki/Altare_della_Patria&quot;&gt;Victor Emmanuel's monument&lt;/a&gt;. We were pretty much Romed out by this point so besides visiting the &lt;a href=&quot;http://en.wikipedia.org/wiki/Baths_of_Diocletian&quot;&gt;Baths of Diocletian&lt;/a&gt; on Thursday before our flight back we took it easy for our remaining time there.&lt;/li&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/rome-skyline.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;rome skyline&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/rome/random-church1.jpg&quot; style=&quot;float: left; margin-left: 5px; width: 250px; height: 250px;&quot; title=&quot;forgot the name of this cathedral :-)&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/ul&gt;
&lt;p&gt;All in all the word I feel that best describes the city is &quot;Epic&quot;, so many times when rounding a corner when wandering through the city we were facing something incredibly grand and ancient. To any prospective tourists I have a few bits of advice, first off make sure to pace yourself, there is alot too see (no way you are going to cover everything) and you don't want to get burnt out early on. Also I highly recommend taking tours, both the paid tour guide at the Colloseum / Palentine Hill / Roman Forum and the audio tour at the Vatican Museum was well worth it. And lastly / most importantly make sure to enjoy some italian pizza and pasta when your visiting! :-)&lt;/p&gt;
&lt;p&gt;Thats all for now, in less than a week I'll be back in the good ole' US of A. Until next time, ciao!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/367&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Google Summer of Fedora/Aeolus/Ruby</title>
		<link href="http://mo.morsi.org/blog/node/366"/>
		<id>http://mo.morsi.org/366 at http://mo.morsi.org/blog</id>
		<updated>2012-05-08T12:07:08+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/gsoc2012.png&quot; style=&quot;width: 730px;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As some of you may know, Fedora was recently &lt;a href=&quot;http://fedoraproject.org/wiki/GSOC_2012&quot;&gt;accepted&lt;/a&gt;, as a participating organization into the &lt;a href=&quot;http://code.google.com/soc/&quot;&gt;Google Summer of Code&lt;/a&gt;. Shortly after this was announced, &lt;a href=&quot;http://fedoraproject.org/wiki/User:Bckurera&quot;&gt;Buddhika&lt;/a&gt; (our Fedora GSoC Admin and Coordinator) circulated a RFC for projects to improve the Fedora distribution as part of this effort. I submitted a few proposals to mentor myself, and am pleased to say there quite a bit of interest by various students, a few of which are now officially working on the various topics.&lt;/p&gt;
&lt;p&gt;Specifically &lt;a href=&quot;http://samridh90.tumblr.com/&quot;&gt;Samridh Srinath&lt;/a&gt; will be working on improving the Aeolus user experience on Fedora, implementing various aspect of the command line interface and core API features needed to drive it, and &lt;a href=&quot;http://zuhao.me/&quot;&gt;Zuhao Wan&lt;/a&gt; will be working on a site to highlight and promote the Fedora / Ruby experience, providing a simple one-stop-shop to query for Ruby related packages in Fedora and to assist in the migration process.&lt;/p&gt;
&lt;p&gt;Unfortunately, not all of the students who applied were able to be accepted into the GSoC due to the limited number of slots we had available. Both &lt;a href=&quot;https://fedoraproject.org/wiki/User:Niteshnarayan&quot;&gt;Nitesh Narayan&lt;/a&gt; and &lt;a href=&quot;http://www.blogger.com/profile/11611159664722941876&quot;&gt;Furhan Shabir&lt;/a&gt; are talented students who submitted strong proposals to work on Aeolus but weren't able to secure the official sponsorship. That being said, both have graciously volunteered to donate some time to assist with the project for which I would like to thank them greatly for.&lt;/p&gt;
&lt;p&gt;All in all, I'm looking forward to working with these talented students over the course of the summer and beyond. Stay tuned for more updates as the projects progress and the proposals are implemented.&lt;/p&gt;
&lt;p&gt;Until next time, happy hacking!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/366&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">JSON-RPC Presentation - Brno Ruby Users Group - 26.04.2012</title>
		<link href="http://mo.morsi.org/blog/node/365"/>
		<id>http://mo.morsi.org/365 at http://mo.morsi.org/blog</id>
		<updated>2012-05-06T10:11:32+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/jsonrpc.png&quot; style=&quot;float: left; margin-right: 10px; height: 100px; width: 250px;&quot; /&gt;On the Thursday before last I gave a presentation on the &lt;a href=&quot;http://en.wikipedia.org/wiki/JSON-RPC&quot;&gt;JSON-RPC&lt;/a&gt; protocol and my &lt;a href=&quot;https://github.com/movitto/rjr&quot;&gt;implementation&lt;/a&gt; of it to the &lt;a href=&quot;http://meetr.cz/meetups/13&quot;&gt;Brno Ruby Users Group&lt;/a&gt;. You may find the &lt;a href=&quot;http://mo.morsi.org/files/brug-jsonrpc&quot;&gt;slides here&lt;/a&gt; as well some code examples in Ruby and Javascript &lt;a href=&quot;http://mo.morsi.org/files/brug-jsonrpc/demo&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;RJR is a simple implementation of the JSON-RPC 2.0 &lt;a href=&quot;http://www.jsonrpc.org/specification&quot;&gt;standard&lt;/a&gt;, using &lt;a href=&quot;http://rubyeventmachine.com/&quot;&gt;eventmachine&lt;/a&gt; on the backend to serve JSON-RPC requests over a multitude of transport types including amqp, http, websockets, tcp/udp, and more. It permits method handlers to be registered and then invoked via any transport the end-user wishes (and the server admin permits access to).&lt;/p&gt;
&lt;p&gt;The context of the request is made available to the handler when it is invoked, so that the developer can manage flow control accordingly and store any additional metadata in the requests and responses to extend the JSON-RPC protocol in any manner they desire.&lt;/p&gt;
&lt;p&gt;The source code is freely available on github, any patches/issues/etc would be more than welcome. Happy hacking!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/365&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Brno Trip Update</title>
		<link href="http://mo.morsi.org/blog/node/364"/>
		<id>http://mo.morsi.org/364 at http://mo.morsi.org/blog</id>
		<updated>2012-04-30T06:03:02+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;How I've been busy in the past few weeks. Between working, sightseeing, and plenty of other activities, I've had no chance till now to sit down and write some content for the blog. Now that I'm approaching the 1/2 way point of my trip, I have to say I've had a phenominal time so far, my European collegues at Red Hat are a group of extremely talented guys who are also very fun to work and hang out with. I'm enjoying my stay in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Czech_Republic&quot;&gt;Czech Republic&lt;/a&gt;, the people are friendly, there is plenty to do, and overall a pleasant experience. So far my trip over the last few weeks looked like (hover over the images for descriptions, to view full size right click and select 'view image'):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;April 3rd/4th: Flight from Syracuse to Newark, NJ to Copenhagen, Denmark to Prague, CZ; Caught the train from Prague to &lt;a href=&quot;http://en.wikipedia.org/wiki/Brno&quot;&gt;Brno&lt;/a&gt; (overall about ~24hrs worth of traveling)&lt;br /&gt;
&lt;img src=&quot;http://mo.morsi.org/files/prague/river.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;A canal in prague&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/prague/building.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-bottom: 10px;&quot; title=&quot;A building in prague&quot; /&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Met my coworker &lt;a href=&quot;http://aimlesslygoingforward.com/&quot;&gt;Tomas&lt;/a&gt; at the Brno train station (he's been a momumental help with the entire trip, a very friendly person and extremely talented engineer). Moved into my apartment here&lt;br /&gt;
&lt;img src=&quot;http://mo.morsi.org/files/brno/apt1.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;My apartment in brno&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/brno/apt2.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-bottom: 10px;&quot; title=&quot;My apartment in brno&quot; /&gt;&lt;br /&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Thu/Fri April 5th/6th: Started working out of the Brno office, met all the other Aeolus and Ruby developers working out of here (all around the same age as me, another +), found my way around town including using the public transports and grocery shopping&lt;br /&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/brno/office2.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-bottom: 10px;&quot; title=&quot;The office (after everyone left for the day)&quot; /&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;My first weekend I explored Brno on foot, I saw the historic old town, the &lt;a href=&quot;http://en.wikipedia.org/wiki/%C5%A0pilberk_Castle&quot;&gt;Špilberk castle&lt;/a&gt;, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Cathedral_of_St._Peter_and_Paul,_Brno&quot;&gt;Cathedral of St. Peter and Paul&lt;/a&gt;, and got a general feel for the area. Brno is a great city, a good size, not too large that it feels crowded, but not too small that there is nothing todo. It is a university town though, so lots of students, but has plenty of great places to hang out, grab a bite or drink, or do various activities&lt;br /&gt;
&lt;img src=&quot;http://mo.morsi.org/files/brno/spilberk.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;Spilberk castle&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/brno/cathdral.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;St Peter and Paul Cathedral&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/brno/fountain.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-bottom: 10px;&quot; title=&quot;Fountain square in brno&quot; /&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;The following week primarily consisted of work (it's refreshing to be back in an office working w/ my collegues in person), and attending Aikido class with my collegues Tomas and Petr, both who regularily go. The Sensai here is a city cop that focuses on practical self defense which is different than the more theoretical appoach Sensai Mehter teaches back in Syracuse. Both are good to practice, though I still prefer the dojo back home.&lt;/li&gt;
&lt;li&gt;This week, we also celebrated Red Hat's &lt;a href=&quot;http://www.technewsworld.com/story/74788.html&quot;&gt;Billion Dollar Bash&lt;/a&gt; in the Brno office. The facilities here arrainged a very fun scavenger hunt around the city, which culminated at the &lt;a href=&quot;http://www.technicalmuseum.cz/&quot;&gt;Brno Museum of Technology&lt;/a&gt; right by the RH office. The party there was great, lots of great food and treats, and was good to meet developers and other RH employees working on all sorts of projects @ the company.&lt;br /&gt;
&lt;img src=&quot;http://mo.morsi.org/files/brno/scavengerhunt1.JPG&quot; style=&quot;width: 700px; height: 500px; float: left; margin-bottom: 10px;&quot; title=&quot;Team aeolus in action!&quot; /&gt;&lt;br /&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;I also visited the &lt;a href=&quot;http://base48.cz/&quot;&gt;Brno Hackerspace, Base48&lt;/a&gt; this week, which a few of my collegues are members of. It was great seeing yet another Hackerspace in person, and we all shared plenty of stories of our experiences so far. It seems like they're running into many of the same issues we had w/ the SIG, and I assume many others have had worldwide but overall are doing great and working on some cool projects.&lt;/li&gt;
&lt;li&gt;Was thinking about going to &lt;a href=&quot;http://en.wikipedia.org/wiki/Prague&quot;&gt;Prague&lt;/a&gt; or &lt;a href=&quot;http://en.wikipedia.org/wiki/Vienna&quot;&gt;Vienna&lt;/a&gt; on the weekend of the 14th, but ended up just hanging out and relaxing w/ my co-workers after the long week. When I book my flight back from Europe, I'm planning on booking a hotel in Prague for a few days to check out that city.&lt;/li&gt;
&lt;li&gt;The next week was more work, on Wed 4/18 I decided to swing a last minute trip to &lt;a href=&quot;http://en.wikipedia.org/wiki/Amsterdam&quot;&gt;Amsterdam&lt;/a&gt; in the Netherlands. I left via overnight train on the night of the 19th and arrived the morning of Friday 4/20/12. Stayed until Sunday evening when I caught another overnight train back (had reserved a bed in a couchette both ways). The whole experience was remarkable, Amsterdam truly is a magical city; a melting-pot of European cultures, there is a happy and laid back atmosphere in the air, and a &quot;clock-work&quot; feel to the city (think of those old antique clocks w/ lots of moving gears). There is just so much to see and do (I suggest exploring it on foot), between the canals and city parks, to the museums, to the restaurants, coffee-shops, and nightlife, Amsterdam has it all, and overall based on first impressions of the big cities I visited, Amsterdam takes the cake. I stayed in a hostel Friday and Saturday nights which was an interesting experience, the people I ended up staying with were all really friendly and nothing sketchy or bad happend, but I'm not sure if I'd want to do it again (similarily while I got lots of sleep on the train, it was a weird feeling having other passengers come and go from the cabin I was staying in in the middle of the night when I was sleeping). Unfortunately Amsterdam is a touristy city though, things are expensive and there are lots of tourist attractions (at several points I noticed a stark constast between the old and the new worlds, like a modern carnival which was operating in the plaze of one of the cities biggest / oldest churches). Also when you get down to it, it is a big city, which I can't ever see myself permenatly living in (I tend to prefer smaller cities, and areas with lots of nature and large state parks within a very short distance). All in all though, the weekend in Amsterdam was a great time, and I would eagerly jump at the opportuninty to visit again&lt;br /&gt;
&lt;img src=&quot;http://mo.morsi.org/files/amsterdam/trainstation.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;View from Amsterdam trainstation&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/amsterdam/coffeeshop.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;An amsterdam coffeeshop&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/amsterdam/cathedral.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;A cathedral in amsterdam&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/amsterdam/canal1.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;An Amsterdam canal&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/amsterdam/canal2.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;Another Amsterdam canal&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/amsterdam/rembranthouse.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;Me in Rembrant's Original Art Studio in the Rembrant House in Amsterdam&quot; /&gt;&lt;br /&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;On Monday of last week the team went go-karting which was a blast followed by ribs and beer :-) One of the best things about the Czech republic is how inexpensive everything is (that is to an American visitor), a good stack of ribs won't cost you more that $6 or $7 USD, tips included. Also a pint of good beer will only run you a dollar or two. Life is good in the Czech republic :-)&lt;br /&gt;
&lt;img src=&quot;http://mo.morsi.org/files/brno/gokarting1.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; title=&quot;Team Aeolus Go-Karting&quot; /&gt;&lt;img src=&quot;http://mo.morsi.org/files/brno/gokarting2.jpg&quot; style=&quot;width: 300px; height: 300px; float: left; margin-bottom: 10px;&quot; title=&quot;Up to no good ;-)&quot; /&gt;&lt;br /&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;On the following Wednesday, my UK collegue left to fly back home, so saw him off before working. Had a great time hanging out with Martyn over the last few weeks, and it's good to put a face and memories behind an IRC handle. Work in general has been great, have been getting alot done both on the Aeolus and Ruby/Fedora side of things as well as on my side projects. There have been some exciting updates to everything I've been working on, I've pushed new additions to &lt;a href=&quot;http://github.com/movitto/snap&quot;&gt;Snap&lt;/a&gt;, have been working with a few students on now-accepted proposals for the Google Summer of Code (which I am now a mentor of, more on this in the near future), have been learning a great deal as far as security and hardening a Rails application is concerned, and am putting a presentation together for the Brno Ruby Users Group (on &lt;a href=&quot;http://mo.morsi.org/blog&quot;&gt;JSON-RPC&lt;/a&gt; and my &lt;a href=&quot;http://github.com/movitto/rjr&quot;&gt;RJR&lt;/a&gt; project), and much more. Look for more details on alot of these in the near future&lt;/li&gt;
&lt;li&gt;Also went rock climbing for the first time since high school on Thursday with some co-workers. Was a fun time and a great workout, a good whole body excercise (especially the upper body and shoulders). I'm looking forward to going again and perhaps trying to find a place back in Syracuse that I frequent and improve my technique
&lt;/li&gt;&lt;li&gt;Furthmore I went for a long bike ride around the Brno Lake and Reservoir and then &lt;a href=&quot;http://en.wikipedia.org/wiki/Slacklining&quot;&gt;Slacklining&lt;/a&gt; nearby on Sunday with the same co-workers. All in all we ended up biking around 35 Kilometes, and saw &lt;a href=&quot;http://en.wikipedia.org/wiki/Veve%C5%99%C3%AD_Castle&quot;&gt;Veveří Castle&lt;/a&gt; in the process, and while our initial attempts on the Slackline weren't all that successful, it was all a great workout and plenty of fun. Definitely more activities that I'm looking forward to doing again when I get the chance (quite possibly this week! :-) ).&lt;br /&gt;
&lt;img src=&quot;http://mo.morsi.org/files/brno/ziplining.jpg&quot; style=&quot;width: 400px; height: 500px; float: left; margin-right: 10px; margin-bottom: 10px;&quot; /&gt;&lt;br /&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in all so far the trip has been a blast, I've met so many interesting people from many different places. From my collegues who come from all over Europe (the Czech Republic, Slovakia, Hungary, Italy, Russia, the UK, and more), to random people at all the various places I've visited / stayed at, people are genuently friendly and helpful and always willing to swap stories with a foreigner. There are places right out of the movies and yet places which seem unique in their own right and unlike anywhere else. I'm looking forward to the rest of my stay. Besides Prague, I'd like to visit at least one other European city and/or take in some of the country side (I was thinking about renting a car and just driving around the a bit).&lt;/p&gt;
&lt;p&gt;Stay tuned for more updates coming soon! Until then, Chow!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/364&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html">Google summer of code</title>
		<link href="http://lurimax.posterous.com/google-summer-of-code"/>
		<id>http://lurimax.posterous.com/google-summer-of-code</id>
		<updated>2012-04-26T13:03:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;
	&lt;/p&gt;&lt;p&gt;I have been selcted to participate in the google sumer of code. I wil be working with a fedora project to create an audio spin of fedora, specially catered to people who want to use studio software without having to set up an entire system by them selves. This is something I would like to use myselff, and i\m really looking forward to it. I would like to thank the wonderfull menotrs over at fedora, they are amazing. As soon as i applied to work with them for GSoC i felt at home. Fedora seems to have an incredible comunity.&lt;/p&gt;
&lt;p&gt;From now on I'll be posting about the work I do with the fedora audio spin project. My first task i to package some software. Some great resources to get started with that can be found on the &lt;a href=&quot;https://fedoraproject.org/wiki/Category:Package_Maintainers#Get_Involved&quot; title=&quot;Fedora wiki&quot;&gt;fedora wiki&lt;/a&gt;.&lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://lurimax.posterous.com/google-summer-of-code&quot;&gt;Permalink&lt;/a&gt; 

	| &lt;a href=&quot;http://lurimax.posterous.com/google-summer-of-code#comment&quot;&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;</content>
		<author>
			<name>Jørn Lomax</name>
			<uri>http://lurimax.posterous.com</uri>
		</author>
		<source>
			<title type="html">/dev/null</title>
			<subtitle type="html">Views on growing up in an opensource developer world</subtitle>
			<link rel="self" href="http://lurimax.posterous.com/rss.xml"/>
			<id>http://lurimax.posterous.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Easter geekage</title>
		<link href="http://lurimax.posterous.com/easter-geekage"/>
		<id>http://lurimax.posterous.com/easter-geekage</id>
		<updated>2012-04-07T17:11:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;
	&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;As a norwegian, easter is a big holiday season. Everyone goes to a cabin, preferably in the middle of nowhere, and stays there for a week. I too had to follow this tradition, so we went to a cabin. There i realised there was no radio, and no alarm clock (both would be handy). I did however bring my laptop, which happens to have 3g. So by clever usage, i set up a cron job to go off at a certain time that would play a radio webstream through vlc. It worked like a charm&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;tl;dr&lt;/strong&gt;: I used crontab to set up a radio alarmclock when i was miles away from civilization and only had linux + 3g&lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://lurimax.posterous.com/easter-geekage&quot;&gt;Permalink&lt;/a&gt; 

	| &lt;a href=&quot;http://lurimax.posterous.com/easter-geekage#comment&quot;&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;</content>
		<author>
			<name>Jørn Lomax</name>
			<uri>http://lurimax.posterous.com</uri>
		</author>
		<source>
			<title type="html">/dev/null</title>
			<subtitle type="html">Views on growing up in an opensource developer world</subtitle>
			<link rel="self" href="http://lurimax.posterous.com/rss.xml"/>
			<id>http://lurimax.posterous.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">RubyConf India, 2012</title>
		<link href="http://allsortsofshrink.blogspot.com/2012/03/rubyconf-india-2012.html"/>
		<id>tag:blogger.com,1999:blog-974409201910540496.post-4895088387131573975</id>
		<updated>2012-03-27T15:08:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://shreyankg.fedorapeople.org/shreyank.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot;&gt;This was my/the 3rd RubyConf, first time in Pune. Like last year, I couldn't/wouldn't submit a talk. But I did manage to buy a ticket in time, before they got sold out. My friends were over, and very dear to me that they are, we stayed up Friday night playing &lt;a href=&quot;http://en.wikipedia.org/wiki/Uno_(card_game)&quot; target=&quot;_blank&quot;&gt;UNO&lt;/a&gt;, until it was 7am. 8am I was up and reached the Hyatt Regency venue by 9.&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;  Day 1&lt;/h3&gt;After the Welcome speech, it was &lt;a href=&quot;http://blog.headius.com/&quot; target=&quot;_blank&quot;&gt;Charles @headius Nutter&lt;/a&gt; with his keynote on &lt;a href=&quot;http://jruby.org/&quot; target=&quot;_blank&quot;&gt;JRuby&lt;/a&gt; and other Ruby VMs. It was great to know how the other ruby VMs were coming along, and how &lt;a href=&quot;http://www.ironruby.net/&quot; target=&quot;_blank&quot;&gt;IronRuby&lt;/a&gt; was dying. Next was a recorded video keynote by &lt;a href=&quot;http://en.wikipedia.org/wiki/Yukihiro_Matsumoto&quot; target=&quot;_blank&quot;&gt;Matz&lt;/a&gt;. I started missing the first RubyConf India, where we had the opportunity of having Matz on a Skype video conference. Matz said one place Ruby lags behind Python is &lt;a href=&quot;http://www.scipy.org/&quot; target=&quot;_blank&quot;&gt;SciPy&lt;/a&gt; and &lt;a href=&quot;http://www.numpy.org/&quot; target=&quot;_blank&quot;&gt;NumPy&lt;/a&gt;, and they would focus on having that in Ruby in the next few years.&lt;br /&gt;&lt;br /&gt;After a coffee-break I was attending Ruby CLI talk by&lt;a href=&quot;https://twitter.com/#!/hyfather&quot; target=&quot;_blank&quot;&gt;Nikhil Mungel&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/#!/shishirdas&quot; target=&quot;_blank&quot;&gt;Shishir Das&lt;/a&gt;. I was a bit put off on having to see only slides in a talk which could have made more interesting by throwing in some cool CLI demos. Next I was attending &lt;a href=&quot;https://twitter.com/#!/tdinkar&quot; target=&quot;_blank&quot;&gt;Tejas Dinkar&lt;/a&gt; and &lt;a href=&quot;http://www.jasimabasheer.com/&quot; target=&quot;_blank&quot;&gt;Jasim A Basheer&lt;/a&gt;'s talk on Sandboxing Ruby Code, where they discussed their experiences on developing &lt;a href=&quot;http://rubymonk.com/&quot;&gt;rubymonk.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As usual, lunch was awesome. I met lots of people, unlike my previous RubyConfs, where I operated as a lone shark.&lt;br /&gt;&lt;br /&gt;Post lunch (and a bit drowsy) I was attending the Everything Ruby talk by Ajay Gore. It wasn't very interesting. Next up during the Clojure talk by &lt;a href=&quot;http://blog.deobald.ca/&quot; target=&quot;_blank&quot;&gt;Steven Deobald&lt;/a&gt;, I was feeling a bit lost. Noticing nothing interesting lined up next, I headed home.&lt;br /&gt;&lt;h3&gt;  Day 2&lt;/h3&gt;Next morning's keynote was by &lt;a href=&quot;http://lindsaar.net/&quot; target=&quot;_blank&quot;&gt;Mikel Lindsaar&lt;/a&gt;. It was a motivational speech, which talked about purpose and value exchange in software development and life in general.&lt;br /&gt;&lt;br /&gt;Post coffee, I attended &lt;a style=&quot;font-size: 14px; line-height: 18px;&quot; href=&quot;http://blog.saush.com/&quot; target=&quot;_blank&quot;&gt;Sou Sheong&lt;/a&gt;'s talk on Sex, Money and Evolution. That was one of the most interesting talks I have ever seen. He took some virtual bots called roids, and simulated a culture of them after adding external parameters like energy (money), reproduction (sex) and natural selection (evolution). The result was a beautiful visualization of life. Most of it was written using Ruby and R, so I would have been a happy puppy has he demonstrated some of his code. But the &lt;a href=&quot;https://github.com/sausheong/everyday&quot; target=&quot;_blank&quot;&gt;source code is on github&lt;/a&gt;, so I could have a look at it later. The session was very interactive.&lt;br /&gt;&lt;br /&gt;I tried attending the next talk titled &quot;What lies beneath the beautiful code&quot;, but the sheer uninterestingness, and the fact that people started walking out ensured I followed suit.&lt;br /&gt;&lt;br /&gt;Lunch, again, was full of #win.&lt;br /&gt;&lt;br /&gt;Post lunch I attended &quot;Smells and patterns in test/spec code&quot;, by &lt;a href=&quot;http://blog.sidu.in/&quot; target=&quot;_blank&quot;&gt;Sidu Ponnappa&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/#!/aninda42&quot; target=&quot;_blank&quot;&gt;Aninda Kundu&lt;/a&gt;. It talked about the anti-patterns while writing tests. After that I spent some time in the Hack Room discussing some list archive crawler ideas with Anurag, and clicking photos, which I won't publish. No.&lt;br /&gt;Later I found myself in the method_missing should be recursive talk by &lt;a href=&quot;https://github.com/hexgnu&quot; target=&quot;_blank&quot;&gt;Matthew Kirk&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Post a couple_of_cutting_chai_and_sandwiches, I was attending the lighting talks. Highlights were &lt;a href=&quot;https://gitorious.org/nursery-rhymes/&quot;&gt;nursery_rhymes.rb&lt;/a&gt; by &lt;a href=&quot;http://www.shakthimaan.com/&quot; target=&quot;_blank&quot;&gt;Shakthi Kannan&lt;/a&gt; and Users == Bugs by Charles Nutter. And that was how RubyConf India 2012 ended.&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;  Some observations&lt;/h3&gt;The quality of talks this time wasn't really upto the mark. Some talks were really great, but some were just downright bad. Most of the talks were unrelated to the Ruby language. And many failed to excite the audience. I know it's easy to criticize when I myself didn't submit a talk, but then I will make sure that doesn't happen in RubyConf India 2013. &lt;/div&gt;</content>
		<author>
			<name>$hRiNk</name>
			<email>noreply@blogger.com</email>
			<uri>http://allsortsofshrink.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">All Sorts Of Things</title>
			<link rel="self" href="http://allsortsofshrink.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-974409201910540496</id>
		</source>
	</entry>

	<entry>
		<title type="html">A translation editor for DTD resources</title>
		<link href="http://allsortsofshrink.blogspot.com/2012/03/translation-editor-for-dtd-resources.html"/>
		<id>tag:blogger.com,1999:blog-974409201910540496.post-1871028868705110996</id>
		<updated>2012-03-19T14:41:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://shreyankg.fedorapeople.org/shreyank.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot;&gt;Hi,&lt;br /&gt;&lt;br /&gt;I am Shreyank and I will be mentoring the project &lt;a href=&quot;http://ankur.org.in/projects/project-ideas/#dtd_editor&quot; target=&quot;_blank&quot;&gt;&quot;A translation editor for DTD resources&quot;&lt;/a&gt; under&lt;a href=&quot;http://ankur.org.in/&quot; target=&quot;_blank&quot;&gt; Ankur India&lt;/a&gt;.&lt;br /&gt;Since &lt;a href=&quot;http://www.google-melange.com/gsoc/org/google/gsoc2012/ankur_india&quot; target=&quot;_blank&quot;&gt;Ankur India has been accepted as a GSoC Organisation&lt;/a&gt;, I am hoping to get a lot of queries on what the project is really about. If you are reading this post, it is possible that you have asked me a query, the answer to which I have here.&lt;br /&gt;&lt;u&gt;&amp;lt;background&amp;gt;&amp;lt;/background&amp;gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;background&amp;gt;&lt;br /&gt;&lt;br /&gt;Although Ankur India deals mostly with issues relating to the Bengali language, this project idea is &lt;b&gt;not specific &lt;/b&gt;to Bengali.&lt;br /&gt;&lt;br /&gt;A very common translation workflow consists of translating &lt;a href=&quot;http://www.gnu.org/software/gettext/manual/gettext.html#PO-Files&quot; target=&quot;_blank&quot;&gt;po files&lt;/a&gt;, which in turn are used within applications using &lt;a href=&quot;http://en.wikipedia.org/wiki/Gettext&quot; target=&quot;_blank&quot;&gt;gettext&lt;/a&gt;. One can use tools like &lt;a href=&quot;http://userbase.kde.org/Lokalize&quot; target=&quot;_blank&quot;&gt;lokalize&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Gtranslator&quot; target=&quot;_blank&quot;&gt;gtranslator&lt;/a&gt; etc which reads the po files, provides a GUI to help translate the strings and save them back to language specific po files. Thus a file relating to Bengali strings would go into a file called bn_IN.po.&lt;br /&gt;&lt;br /&gt;&amp;lt;background\&amp;gt;&lt;br /&gt;&lt;br /&gt;Although a lot of translation use cases are covered by po files, some aren't. For example,&lt;a href=&quot;https://wiki.mozilla.org/L10n:Localizing_Overview&quot; target=&quot;_blank&quot;&gt; Mozilla uses&lt;/a&gt; &lt;a href=&quot;http://hg.mozilla.org/releases/mozilla-aurora/file/1eb6d3a4018b/browser/locales/en-US/chrome/browser/browser.dtd&quot; target=&quot;_blank&quot;&gt;DTD&lt;/a&gt; and &lt;a href=&quot;http://hg.mozilla.org/releases/mozilla-aurora/file/1eb6d3a4018b/browser/locales/en-US/chrome/browser/search.properties&quot; target=&quot;_blank&quot;&gt;properties&lt;/a&gt; files for the purpose. The idea is to extend the existing localisation tool(s) to cover these type of data files.&lt;br /&gt;&lt;br /&gt;A logical first step would be to write an engine which is able to read dtd/properties files, take user input for translations and write a new language specific file. This program should be modular and API driven so that it can be quickly used to extend with any existing localisation tool, desktop or web based. On the other hand one should be able to quickly extend the engine to work with other similar data files.&lt;br /&gt;&lt;br /&gt;Once that is ready it should be integrated with an existing translation tool, preferably a desktop app so that we have a proof of concept and a finished product which can be used by translators.&lt;br /&gt;&lt;br /&gt;The application should be platform independent and can be written in the programmers choice of language, keeping in mind the scalability and portability.&lt;br /&gt;&lt;br /&gt;With the above points clear, I'm open to any other suggestions on how to best approach the problem. In case you have any further doubts mail me at shreyankg AT gmail DOT com and I'll be happy to take up questions.&lt;/div&gt;</content>
		<author>
			<name>$hRiNk</name>
			<email>noreply@blogger.com</email>
			<uri>http://allsortsofshrink.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">All Sorts Of Things</title>
			<link rel="self" href="http://allsortsofshrink.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-974409201910540496</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Working from Brno, CZ (04/12 - 06/12)</title>
		<link href="http://mo.morsi.org/blog/node/363"/>
		<id>http://mo.morsi.org/363 at http://mo.morsi.org/blog</id>
		<updated>2012-03-18T17:56:27+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/brno.jpg&quot; style=&quot;width: 700px; height: 400px;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Starting next month I will be spending some time working onsite w/ my teammates at Redhat Brno in the Czech Republic. This will be my first trip to Europe and I am fully looking forward to going, not only have the previous times I spent working from the office (Raleigh, Boston, NYC) been great networking experiences, but this will be the furthest of my more recent adventures yet (I did visit Egypt on a few occasions during my youth) and I am looking forward to seeing the new culture first hand. During this trip I will be renting an apartment with fellow teammate Martyn from the UK who will also be visiting during the month of April. &lt;/p&gt;
&lt;p&gt;I am also planning on visiting a few other cities during my stay, including Prague, Vienna, and Amsterdam. If anyone wants me to bring them back any souvenirs, just ask! And make sure to stay tuned for more updates!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/363&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">GTK Programming w/ Python</title>
		<link href="http://mo.morsi.org/blog/node/362"/>
		<id>http://mo.morsi.org/362 at http://mo.morsi.org/blog</id>
		<updated>2012-03-03T17:55:05+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/presentations/syrlug-pygtk/pygtk.jpg&quot; alt=&quot;mmorsi-presentation&quot; style=&quot;width: 700px; height: 250px;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This Wednesday, I will be giving a talk at the March &lt;a href=&quot;http://syrlug.org&quot;&gt;Syracuse Linux Users Group&lt;/a&gt; meeting on Programming &lt;a href=&quot;http://www.gtk.org/index.php&quot;&gt;GTK&lt;/a&gt; interfaces w/ &lt;a href=&quot;http://www.pygtk.org/&quot;&gt;PyGTK&lt;/a&gt; (along w/ &lt;a href=&quot;http://glade.gnome.org/&quot;&gt;Glade&lt;/a&gt; and &lt;a href=&quot;http://live.gnome.org/GObjectIntrospection&quot;&gt;GOBject Introspection&lt;/a&gt;). You can find my presentation &lt;a href=&quot;http://mo.morsi.org/files/presentations/syrlug-pygtk/presentation/static/&quot;&gt;here&lt;/a&gt;, which I made with &lt;a href=&quot;https://github.com/schacon/showoff&quot;&gt;showoff&lt;/a&gt; (source &lt;a href=&quot;http://mo.morsi.org/files/presentations/syrlug-pygtk/presentation.tgz&quot;&gt;here&lt;/a&gt;, more on this in a subsequent blogpost) and is probably my most &lt;i&gt;ahem&lt;/i&gt; interesting presentation to this date (at least I like to think so ;-) ).&lt;/p&gt;
&lt;p&gt;As far as the $topic matter itself, cross-platform GUI development has never been easier due to a few simple tools. GTK is available on many platforms, and using Glade you can easily whip up an interface that suites your needs. Wiring up event handlers and the backend code is a cinch due to the gobject bindings which gtk provides that we are able to leverage from a Python app.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/presentations/syrlug-pygtk/presentation/static/file/syrlug/1_overview/glade2.png&quot; alt=&quot;glade&quot; style=&quot;width: 700px; height: 500px;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Along w/ the presentation I'm planning on giving a quick demo on how to perform these steps, creating a simple Desktop based twitter client. You can download the glade xml file &lt;a href=&quot;http://mo.morsi.org/files/presentations/syrlug-pygtk/final/layout.glade&quot;&gt;here&lt;/a&gt; and the python app &lt;a href=&quot;http://mo.morsi.org/files/presentations/syrlug-pygtk/final/syrlug_demo.py&quot;&gt;itself&lt;/a&gt; (also see below). Simply run it with &lt;i&gt;$ python syrlug_demo.py&lt;/i&gt; but note you will need to have the python twitter library installed (&lt;i&gt;# sudo yum install python-twitter&lt;/i&gt; on Fedora).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/files/presentations/syrlug-pygtk/screenshot-syrlug_demo.py.png&quot; alt=&quot;demo interface&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Of course this is just the beginning, you can easily expand the interface by editing the XML in Glade and adding new event handlers to the Python script to do whatever you would like.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-python&quot;&gt;&lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;os&lt;/span&gt;
&lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;time&lt;/span&gt;
&lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;threading&lt;/span&gt;
&lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;import&lt;/span&gt; twitter
&lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;from&lt;/span&gt; gi.&lt;span style=&quot;color: black;&quot;&gt;repository&lt;/span&gt; &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;import&lt;/span&gt; Gtk, Gdk, GObject
 
INPUT_TEXT=&lt;span style=&quot;color: #483d8b;&quot;&gt;'twitter username'&lt;/span&gt;
 
GLADE_FILE = &lt;span style=&quot;color: #dc143c;&quot;&gt;os&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;path&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #dc143c;&quot;&gt;os&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;path&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;dirname&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt; __file__ &lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'layout.glade'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
 
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# A worker thread to get twitter data&lt;/span&gt;
&lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;class&lt;/span&gt; WorkerThread&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #dc143c;&quot;&gt;threading&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;Thread&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
    terminate = &lt;span style=&quot;color: #008000;&quot;&gt;False&lt;/span&gt;
    twitter_username = &lt;span style=&quot;color: #008000;&quot;&gt;None&lt;/span&gt;
    twitter_text = &lt;span style=&quot;color: #483d8b;&quot;&gt;''&lt;/span&gt;
 
    &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;def&lt;/span&gt; set_buffer&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, buffer&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
      &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;buffer&lt;/span&gt; = buffer
 
    &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;def&lt;/span&gt; run&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
       &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;terminate&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
         api = twitter.&lt;span style=&quot;color: black;&quot;&gt;Api&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;twitter_text&lt;/span&gt; = &lt;span style=&quot;color: #483d8b;&quot;&gt;''&lt;/span&gt;
         &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;twitter_username&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;!&lt;/span&gt;= &lt;span style=&quot;color: #008000;&quot;&gt;None&lt;/span&gt;:
           &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;try&lt;/span&gt;:
             &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;for&lt;/span&gt; status &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;in&lt;/span&gt; api.&lt;span style=&quot;color: black;&quot;&gt;GetUserTimeline&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;twitter_username&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
               &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;twitter_text&lt;/span&gt; += status.&lt;span style=&quot;color: black;&quot;&gt;text&lt;/span&gt; + &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;
           &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;except&lt;/span&gt;:
             &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;pass&lt;/span&gt;
           Gdk.&lt;span style=&quot;color: black;&quot;&gt;threads_enter&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
           &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;buffer&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;set_text&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;twitter_text&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
           Gdk.&lt;span style=&quot;color: black;&quot;&gt;threads_leave&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #dc143c;&quot;&gt;time&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;sleep&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
 
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# The Main Window&lt;/span&gt;
&lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;class&lt;/span&gt; SyrlugDemoWindow:
    &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;builder&lt;/span&gt; = Gtk.&lt;span style=&quot;color: black;&quot;&gt;Builder&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt; 
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;builder&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;add_objects_from_file&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;GLADE_FILE, &lt;span style=&quot;color: black;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;syrlug_demo&quot;&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;twitter_username&quot;&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;twitter_text&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;window&lt;/span&gt; = &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;builder&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;get_object&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;syrlug_demo&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt; 
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;username_input&lt;/span&gt; = &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;builder&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;get_object&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;twitter_username&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt; 
 
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;username_input&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;set_text&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;INPUT_TEXT&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
 
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;worker&lt;/span&gt; = WorkerThread&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;worker&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;set_buffer&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;builder&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;get_object&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;twitter_text&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;get_buffer&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;worker&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
 
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;builder&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;connect_signals&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;window&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;destroy&quot;&lt;/span&gt;, &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;close_window&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;window&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;show&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
 
    &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;def&lt;/span&gt; close_window&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, widget&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
        &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;worker&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;terminate&lt;/span&gt; = &lt;span style=&quot;color: #008000;&quot;&gt;True&lt;/span&gt;
        Gtk.&lt;span style=&quot;color: black;&quot;&gt;main_quit&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
 
    &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;def&lt;/span&gt; subscribe_button_clicked&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, widget&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
        input_text = &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;username_input&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;get_text&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt; 
        &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;if&lt;/span&gt; input_text &lt;span style=&quot;color: #66cc66;&quot;&gt;!&lt;/span&gt;= INPUT_TEXT &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;and&lt;/span&gt; input_text &lt;span style=&quot;color: #66cc66;&quot;&gt;!&lt;/span&gt;= &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;&quot;&lt;/span&gt;:
            &lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;worker&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;twitter_username&lt;/span&gt; = input_text
 
    &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;def&lt;/span&gt; twitter_username_focus_in&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, widget, param&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
        &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;if&lt;/span&gt; widget.&lt;span style=&quot;color: black;&quot;&gt;get_text&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt; == INPUT_TEXT:
            widget.&lt;span style=&quot;color: black;&quot;&gt;set_text&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
            &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#widget.set_visibility(False)&lt;/span&gt;
 
    &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;def&lt;/span&gt; twitter_username_focus_out&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;self&lt;/span&gt;, widget, param&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;:
        &lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;if&lt;/span&gt; widget.&lt;span style=&quot;color: black;&quot;&gt;get_text&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt; == &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;&quot;&lt;/span&gt;:
            widget.&lt;span style=&quot;color: black;&quot;&gt;set_text&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;INPUT_TEXT&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
            &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#widget.set_visibility(True)&lt;/span&gt;
 
&lt;span style=&quot;color: #ff7700; font-weight: bold;&quot;&gt;if&lt;/span&gt; __name__ == &lt;span style=&quot;color: #483d8b;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;:
    &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# initialize window&lt;/span&gt;
    win = SyrlugDemoWindow&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
 
    &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# start gtk loop&lt;/span&gt;
    Gdk.&lt;span style=&quot;color: black;&quot;&gt;threads_init&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
    GObject.&lt;span style=&quot;color: black;&quot;&gt;threads_init&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
    Gdk.&lt;span style=&quot;color: black;&quot;&gt;threads_enter&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
    Gtk.&lt;span style=&quot;color: black;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;
    Gdk.&lt;span style=&quot;color: black;&quot;&gt;threads_leave&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Now lets see some of those GTK apps!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/362&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Updated Puppet Web Resource Module</title>
		<link href="http://mo.morsi.org/blog/node/361"/>
		<id>http://mo.morsi.org/361 at http://mo.morsi.org/blog</id>
		<updated>2012-02-29T16:31:55+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;Some of you may recall the &lt;a href=&quot;http://mo.morsi.org/blog/node/336&quot;&gt;Puppet Web Resource&lt;/a&gt; type and provider which I wrote for &lt;a href=&quot;http://aeolusproject.org/&quot;&gt;Aeolus&lt;/a&gt; a while back. The module has since undergone alot of improvment from various contributers, and was finally &lt;a href=&quot;https://projects.puppetlabs.com/issues/7474&quot;&gt;accepted&lt;/a&gt; and uploaded to the &lt;a href=&quot;http://forge.puppetlabs.com/mmorsi/web_request&quot;&gt;Puppet module forge&lt;/a&gt;. You may download it from there and simply drop it into your puppet module load path to access the resource in all its glory!&lt;/p&gt;
&lt;p&gt;Some additional features since I last shared this include&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;support for http basic auth,&lt;/li&gt;
&lt;li&gt;cookies support,&lt;/li&gt;
&lt;li&gt;extended request invokation conditions (eg 'only invoke request if &amp;lt;condition&amp;gt; is true' and 'invoke request unless &amp;lt;prerequisite web request&amp;gt; is successful, etc),&lt;/li&gt;
&lt;li&gt;extended response verifications ('contains', 'does not contain', xpath and response status verification),&lt;/li&gt;
&lt;li&gt;extended logging,&lt;/li&gt;
&lt;li&gt;and several various other features.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For reference here is the updated web resource type and provider:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;lib/puppet/provider/type/web_request.rb&lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-ruby&quot;&gt;&lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'uri'&lt;/span&gt;
 
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# A puppet resource type used to access resources on the World Wide Web&lt;/span&gt;
&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;newtype&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:web_request&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
    &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@doc&lt;/span&gt; = &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Issue a request to a resource on the world wide web&quot;&lt;/span&gt;
 
    private
 
    &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Validates uris passed in&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;validate_uri&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;url&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;begin&lt;/span&gt;
        uri = &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;URI&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;url&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;raise&lt;/span&gt; &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;ArgumentError&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Specified uri #{url} is not valid&quot;&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; !&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;URI::HTTP&lt;/span&gt;, &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;URI::HTTPS&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;include&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;uri.&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;rescue&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;URI::InvalidURIError&lt;/span&gt;
        &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;raise&lt;/span&gt; &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;ArgumentError&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Specified uri #{url} is not valid&quot;&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Validates http statuses passed in&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;validate_http_status&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;status&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      status = &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;status&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;unless&lt;/span&gt; status.&lt;span style=&quot;color: #9900CC;&quot;&gt;is_a&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;Array&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      status.&lt;span style=&quot;color: #9900CC;&quot;&gt;each&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;stat&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;
        stat = stat.&lt;span style=&quot;color: #9900CC;&quot;&gt;to_s&lt;/span&gt;
        &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'100'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'101'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'102'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'122'&lt;/span&gt;,
                &lt;span style=&quot;color: #996600;&quot;&gt;'200'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'201'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'202'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'203'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'204'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'205'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'206'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'207'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'226'&lt;/span&gt;,
                &lt;span style=&quot;color: #996600;&quot;&gt;'300'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'301'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'302'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'303'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'304'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'305'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'306'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'307'&lt;/span&gt;,
                &lt;span style=&quot;color: #996600;&quot;&gt;'400'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'401'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'402'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'403'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'404'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'405'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'406'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'407'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'408'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'409'&lt;/span&gt;,
                &lt;span style=&quot;color: #996600;&quot;&gt;'410'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'411'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'412'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'413'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'414'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'415'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'416'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'417'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'418'&lt;/span&gt;,
                &lt;span style=&quot;color: #996600;&quot;&gt;'422'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'423'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'424'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'425'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'426'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'444'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'449'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'450'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'499'&lt;/span&gt;,
                &lt;span style=&quot;color: #996600;&quot;&gt;'500'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'501'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'502'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'503'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'504'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'505'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'506'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'507'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'508'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;' 509'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'510'&lt;/span&gt;
                &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;include&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;stat&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;raise&lt;/span&gt; &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;ArgumentError&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Invalid http status code #{stat} specified&quot;&lt;/span&gt;
        &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Convert singular params into arrays of strings&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;munge_array_params&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      value = &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;unless&lt;/span&gt; value.&lt;span style=&quot;color: #9900CC;&quot;&gt;is_a&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;Array&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      value = value.&lt;span style=&quot;color: #9900CC;&quot;&gt;collect&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;val&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; val.&lt;span style=&quot;color: #9900CC;&quot;&gt;to_s&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;
      value
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:name&lt;/span&gt;
 
    newproperty&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:get&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Issue get request to the specified uri&quot;&lt;/span&gt;
      validate &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;validate_uri&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newproperty&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:post&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Issue post request to the specified uri&quot;&lt;/span&gt;
      validate &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;validate_uri&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newproperty&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:delete&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Issue delete request to the specified uri&quot;&lt;/span&gt;
      validate &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;validate_uri&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newproperty&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:put&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Issue put request to the specified uri&quot;&lt;/span&gt;
      validate &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;validate_uri&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:parameters&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Hash of parameters to include in the web request&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:file_parameters&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Hash of file parameters to include in the web request&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:follow&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Boolean indicating if redirects should be followed&quot;&lt;/span&gt;
      newvalues&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:true&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:false&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:store_cookies_at&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;String indicating where session cookies should be stored&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:use_cookies_at&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;String indicating where session cookies should be read from&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:remove_cookies&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Boolean indicating if cookies should be removed after using them&quot;&lt;/span&gt;
      newvalues&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:true&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:false&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:returns&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Expected http return codes of the request&quot;&lt;/span&gt;
      defaultto &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;200&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
      validate &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;validate_http_status&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
      munge    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;munge_array_params&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_return&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Unexecpected http return codes of the request&quot;&lt;/span&gt;
      validate &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;validate_http_status&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
      munge    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;munge_array_params&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:contains&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;XPath to verify as part of the result&quot;&lt;/span&gt;
      munge    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;munge_array_params&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_contain&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;XPath to verify as not being part of the result&quot;&lt;/span&gt;
      munge    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type::Web_request&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;munge_array_params&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;value&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:log_to&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Log requests/responses to the specified file or directory&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:only_log_errors&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Boolean indicating if we should only log responses which did not pass validations&quot;&lt;/span&gt;
      newvalues&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:true&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:false&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:if&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Invoke request only if the specified request returns true&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:unless&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Invoke request unless the specified request returns true&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:username&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;HTTP authentication username&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    newparam&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:password&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;HTTP authentication password&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;lib/puppet/provider/web_request/curl.rb&lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-ruby&quot;&gt;&lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'fileutils'&lt;/span&gt;
 
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Provides an interface to curl using the curb gem for puppet&lt;/span&gt;
&lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'curb'&lt;/span&gt;
 
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# uses nokogiri to verify responses w/ xpath&lt;/span&gt;
&lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'nokogiri'&lt;/span&gt;
 
&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Curl::Easy&lt;/span&gt;
 
  &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Format request parameters for the specified request method&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;format_params&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, params, file_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:get&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:delete&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;include&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; params.&lt;span style=&quot;color: #9900CC;&quot;&gt;collect&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;k,v&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;&quot;#{k}=#{v}&quot;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;&amp;amp;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;unless&lt;/span&gt; params.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
      &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;&quot;&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# post, put:&lt;/span&gt;
    cparams = &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    params.&lt;span style=&quot;color: #9900CC;&quot;&gt;each_pair&lt;/span&gt;      &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;k,v&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; cparams &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Curl::PostField&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;k,v&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;unless&lt;/span&gt; params.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
    file_params.&lt;span style=&quot;color: #9900CC;&quot;&gt;each_pair&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;k,v&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt; cparams &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Curl::PostField&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;file&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;k,v&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;unless&lt;/span&gt; file_params.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
    &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; cparams
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Format a url for the specified request method, base uri, and parameters&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;format_url&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, uri, params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:get&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:delete&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;include&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      url = uri
      url &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;+&lt;/span&gt;=  &lt;span style=&quot;color: #996600;&quot;&gt;&quot;;&quot;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;+&lt;/span&gt; format_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; url
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# post, put:&lt;/span&gt;
    &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; uri
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Invoke a new curl request and return result&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;web_request&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, uri, params = &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;raise&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Error&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Must specify http method (#{method}) and uri (#{uri})&quot;&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; method.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;? &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;||&lt;/span&gt; uri.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
 
    curl = &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;new&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; params.&lt;span style=&quot;color: #9900CC;&quot;&gt;has_key&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:cookie&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; !params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:cookie&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;enable_cookies&lt;/span&gt; = &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;true&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;cookiefile&lt;/span&gt; = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:cookie&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;cookiejar&lt;/span&gt;  = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:cookie&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; params.&lt;span style=&quot;color: #9900CC;&quot;&gt;has_key&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:username&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; !params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:username&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;username&lt;/span&gt; = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:username&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; params.&lt;span style=&quot;color: #9900CC;&quot;&gt;has_key&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:password&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; !params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:password&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;password&lt;/span&gt; = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:password&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;follow_location&lt;/span&gt; = &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;params.&lt;span style=&quot;color: #9900CC;&quot;&gt;has_key&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:follow&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:follow&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    request_params = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:parameters&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    file_params    = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:file_parameters&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;case&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;when&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'get'&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;url&lt;/span&gt; = format_url&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, uri, request_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;http_get&lt;/span&gt;
      &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; curl
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;when&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'post'&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;url&lt;/span&gt; = format_url&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, uri, request_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;multipart_form_post&lt;/span&gt; = &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;true&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; !file_params.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;? &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; file_params.&lt;span style=&quot;color: #9900CC;&quot;&gt;size&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006666;&quot;&gt;0&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;http_post&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;*&lt;/span&gt;format_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, request_params, file_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; curl
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;when&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'put'&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;url&lt;/span&gt; = format_url&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, uri, request_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;multipart_form_post&lt;/span&gt; = &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;true&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; !file_params.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;? &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; file_params.&lt;span style=&quot;color: #9900CC;&quot;&gt;size&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #006666;&quot;&gt;0&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;http_put&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;*&lt;/span&gt;format_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, request_params, file_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; curl
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;when&lt;/span&gt; &lt;span style=&quot;color: #996600;&quot;&gt;'delete'&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;url&lt;/span&gt; = format_url&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, uri, request_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      curl.&lt;span style=&quot;color: #9900CC;&quot;&gt;http_delete&lt;/span&gt;
      &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; curl
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; valid_status_code?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;valid_values=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    valid_values.&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;include&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;response_code.&lt;span style=&quot;color: #9900CC;&quot;&gt;to_s&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; valid_xpath?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;xpath=&lt;span style=&quot;color: #996600;&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    !&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Nokogiri::HTML&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;body_str.&lt;span style=&quot;color: #9900CC;&quot;&gt;to_s&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;xpath&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;xpath.&lt;span style=&quot;color: #9900CC;&quot;&gt;to_s&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;empty&lt;/span&gt;?
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
&lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Puppet provider definition&lt;/span&gt;
&lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Type&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:web_request&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;provide&lt;/span&gt; &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:curl&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;do&lt;/span&gt;
  desc &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Use curl to access web resources&quot;&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; get
    &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@uri&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; post
    &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@uri&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; delete
    &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@uri&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; put
    &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@uri&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; get=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;uri&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@uri&lt;/span&gt; = uri
    process_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'get'&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@resource&lt;/span&gt;, uri&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; post=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;uri&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@uri&lt;/span&gt; = uri
    process_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'post'&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@resource&lt;/span&gt;, uri&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; delete=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;uri&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@uri&lt;/span&gt; = uri
    process_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'delete'&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@resource&lt;/span&gt;, uri&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; put=&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;uri&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@uri&lt;/span&gt; = uri
    process_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'put'&lt;/span&gt;, &lt;span style=&quot;color: #0066ff; font-weight: bold;&quot;&gt;@resource&lt;/span&gt;, uri&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  private
 
  &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Helper to process/parse web parameters&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; process_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;request_method, params, uri&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;begin&lt;/span&gt;
      error = &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;
      cookies = &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:store_cookies_at&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
        &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;File&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;exist&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:store_cookies_at&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;File&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;truncate&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:store_cookies_at&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;, &lt;span style=&quot;color: #006666;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;else&lt;/span&gt;
          &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;FileUtils&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;touch&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:store_cookies_at&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
        cookies = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:store_cookies_at&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;elsif&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:use_cookies_at&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
        cookies = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:use_cookies_at&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
      &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# verify that we should actually run the request&lt;/span&gt;
      &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; skip_request?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;params, cookies&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
 
      &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Actually run the request and verify the result&lt;/span&gt;
      result = &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Curl::Easy&lt;/span&gt;::web_request&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;request_method, uri,
                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:parameters&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:parameters&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:file_parameters&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:file_parameters&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:cookie&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; cookies,
                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:follow&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:follow&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:username&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:username&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                       &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:password&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:password&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
 
      result_body = result.&lt;span style=&quot;color: #9900CC;&quot;&gt;body_str&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;to_s&lt;/span&gt;
 
      verify_result&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;result,
                    &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:returns&lt;/span&gt;          &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:returns&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                    &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_return&lt;/span&gt;  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_return&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                    &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:contains&lt;/span&gt;         &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:contains&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                    &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_contain&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_contain&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
 
      result.&lt;span style=&quot;color: #9900CC;&quot;&gt;close&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;rescue&lt;/span&gt; &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;Exception&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; e
      error = e
      &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;raise&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Error&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;An exception was raised when invoking web request: #{e}&quot;&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;ensure&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;unless&lt;/span&gt; result.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
        log_response&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:result&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; result_body,
                     &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; request_method, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:uri&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; uri,
                     &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:puppet_params&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params,  &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:error&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; error&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
      &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;FileUtils&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;rm_f&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;cookies&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:remove_cookies&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Helper to determine if we should skip the request&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; skip_request?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;params, cookie = &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:if&lt;/span&gt;, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:unless&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;each&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;c&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;|&lt;/span&gt;
      condition = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;c&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;unless&lt;/span&gt; condition.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
        method = &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;condition.&lt;span style=&quot;color: #9900CC;&quot;&gt;keys&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'get'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'post'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'delete'&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;'put'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;first&lt;/span&gt;
        result = &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Curl::Easy&lt;/span&gt;::web_request&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;method, condition&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;method&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                         &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:parameters&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; condition&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'parameters'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                         &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:file_parameters&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; condition&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'file_parameters'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;,
                                         &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:cookie&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; cookie, &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:follow&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:follow&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
        result_succeeded = &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;true&lt;/span&gt;
        &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;begin&lt;/span&gt;
          verify_result&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;result, condition&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;rescue&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Error&lt;/span&gt;
          result_succeeded = &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;false&lt;/span&gt;
        &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
        &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;true&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;c == &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:if&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; !result_succeeded&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;c == &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:unless&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; result_succeeded&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;false&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #008000; font-style: italic;&quot;&gt;# Helper to verify the response&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; verify_result&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;result, verify = &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:returns&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;          = verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'returns'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;          &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:returns&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?          &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; !verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'returns'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
    verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_return&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;  = verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'does_not_return'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_return&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?  &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; !verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'does_not_return'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
    verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:contains&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;         = verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'contains'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;         &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:contains&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?         &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; !verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'contains'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
    verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_contain&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; = verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'does_not_contain'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_contain&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;? &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; !verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;'does_not_contain'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; !verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:returns&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;? &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
       !result.&lt;span style=&quot;color: #9900CC;&quot;&gt;valid_status_code&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:returns&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;raise&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Error&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Invalid HTTP Return Code: #{result.response_code},
                               was expecting one of #{verify[:returns].join(&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;)}&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; !verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_return&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;? &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
       result.&lt;span style=&quot;color: #9900CC;&quot;&gt;valid_status_code&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_return&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;raise&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Error&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Invalid HTTP Return Code: #{result.response_code},
                               was not expecting one of #{verify[:does_not_return].join(&quot;&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;)}&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; !verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:contains&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;? &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
       !result.&lt;span style=&quot;color: #9900CC;&quot;&gt;valid_xpath&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:contains&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;raise&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Error&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Expecting #{verify[:contains]} in the result&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; !verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_contain&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;? &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
       result.&lt;span style=&quot;color: #9900CC;&quot;&gt;valid_xpath&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;verify&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:does_not_contain&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;raise&lt;/span&gt; &lt;span style=&quot;color: #6666ff; font-weight: bold;&quot;&gt;Puppet::Error&lt;/span&gt;, &lt;span style=&quot;color: #996600;&quot;&gt;&quot;Not expecting #{verify[:does_not_contain]} in the result&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;def&lt;/span&gt; log_response&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
    method  = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:method&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    uri     = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:uri&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    result  = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:result&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    error   = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:error&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
    puppet_params = params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:puppet_params&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
 
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; puppet_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:log_to&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
      &lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; puppet_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:only_log_errors&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; == &lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:true&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; error.&lt;span style=&quot;color: #0000FF; font-weight: bold;&quot;&gt;nil&lt;/span&gt;?
      logfile = puppet_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:log_to&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;strip&lt;/span&gt;
      exists = &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;File&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;exists&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;logfile&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      isfile = &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;File&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;file&lt;/span&gt;?&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;logfile&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;!exists &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;logfile&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #006666;&quot;&gt;-1&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;chr&lt;/span&gt; != &lt;span style=&quot;color: #996600;&quot;&gt;'/'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; !isfile
        &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;FileUtils&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;mkdir_p&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;logfile&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;if&lt;/span&gt; !exists
	      logfile &lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;+&lt;/span&gt;= puppet_params&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:name&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt;
      &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
 
      f = &lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;File&lt;/span&gt;.&lt;span style=&quot;color: #CC0066; font-weight: bold;&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;logfile, &lt;span style=&quot;color: #996600;&quot;&gt;'a'&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      f.&lt;span style=&quot;color: #9900CC;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;=====BEGIN=====&lt;span style=&quot;color: #000099;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      f.&lt;span style=&quot;color: #9900CC;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #CC00FF; font-weight: bold;&quot;&gt;Time&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;now&lt;/span&gt;.&lt;span style=&quot;color: #9900CC;&quot;&gt;strftime&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;%Y-%m-%d %H:%M:%S&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      f.&lt;span style=&quot;color: #9900CC;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot; #{method} request to #{uri}&lt;span style=&quot;color: #000099;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      f.&lt;span style=&quot;color: #9900CC;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;result.&lt;span style=&quot;color: #9900CC;&quot;&gt;to_s&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      f.&lt;span style=&quot;color: #9900CC;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #996600;&quot;&gt;&quot;&lt;span style=&quot;color: #000099;&quot;&gt;\n&lt;/span&gt;=====END=====&lt;span style=&quot;color: #000099;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #000099;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600; font-weight: bold;&quot;&gt;)&lt;/span&gt;
      f.&lt;span style=&quot;color: #9900CC;&quot;&gt;close&lt;/span&gt;
    &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
  &lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;
&lt;span style=&quot;color: #9966CC; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;As always, Happy Puppeteering!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/361&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Fudcon Blacksburg Report</title>
		<link href="http://mo.morsi.org/blog/node/360"/>
		<id>http://mo.morsi.org/360 at http://mo.morsi.org/blog</id>
		<updated>2012-01-16T12:47:28+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/Fudcon_blacksburg_withdate.png&quot; style=&quot;float: right; margin-left: 10px;&quot; /&gt;Just got back from &lt;a href=&quot;http://fedoraproject.org/wiki/FUDCon:Blacksburg_2012&quot;&gt;Fudcon Blacksburg&lt;/a&gt;. As always, it was a great time. Arrived after driving down (10 hrs) Thursday evening and crashed quickly after checking into my accommodations (The Inn at Virginia Tech). Friday, the first day, was hackfests, I attended the Fedora Infrastructure meeting and held a few sessions around Aeolus where I talked with passer by's about the project, my Snap subproject and what people were looking for out of an open source IaaS cloud abstraction platform. Specifically at FUDCon I aimed to find out how people wanted to interface w/ the cloud on the Fedora desktop and how they wanted to use the Aeolus stack. We ended up modifying Snap a little to add some command line options and began&lt;br /&gt;
messing around w/ &lt;a href=&quot;http://github.com/movitto/mycloud&quot;&gt;mycloud&lt;/a&gt; a c level cloud computing API I started throwing together to meet people's needs. Dinner that night was at a good indian place.&lt;/p&gt;
&lt;p&gt;The second day was the barcamp sessions, I volunteered to do another session on Aeolus, which went well, there were plenty of newcomers interested in the projects and I was able to share what was in development and upcoming things on the platform. After lunch several of us from the &lt;a href=&quot;http://mo.morsi.org/blog&quot;&gt;ruby-sig&lt;/a&gt; met to hold the now traditional ruby-sig meeting at FUDCon (we held one in Toronto, one was held in Milan, and now this was the third at Blacksburg). We got alot done including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tested out the new Ruby 1.9.3 repository (messed around w/ getting Aeolus working on MRI 1.9.3)&lt;/li&gt;
&lt;li&gt;discussed updates to the new packaging guidelines, and updates to the the ruby stack&lt;/li&gt;
&lt;li&gt;looked into possibly using macros to assist w/ building gems for multiple ruby interpreters on Fedora (jeroen volunteered to start investigating thing one, this would be a feature coming furthur down the pipeline)&lt;/li&gt;
&lt;li&gt;discussed the rvm / bundler ecosystems, and again how to drive and market the Fedora philosophy of a single supported stack while delivering the ultimate development platform for the ruby-community&lt;/li&gt;
&lt;li&gt;looked into continuing building tools and applications which to enhance the Ruby experience on Fedora, I volunteered to build a isitfedoraruby website (akin to &lt;a href=&quot;http://isitruby19.org&quot;&gt;itisruby19.org&lt;/a&gt;) to demo and highlight fedora on ruby and to start reaching out to the cloud-sig and other Fedora communities to promote and highlight the product/platform.&lt;/li&gt;
&lt;li&gt;continuing to extend / expand / improve gem2rpm, polisher, and other gem/rpm interoperability tools&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next I attended the session on OpenStack, a popular build-your-own-cloud platform (one of the platforms supported by deltacloud) and learned a bit more about the internals and how it is constructed. Finally the lightning talks session was the last on Saturday, and a must for any FUDCon attendee. There were many pitches, including several for new fedora components including hosted instances of mock infra apps, a discussion on what motivates and how to drive open source contributions, a demonstration on how to inject code into running Python processes using &quot;parasite&quot; by lmacken, an overview of foss@rit by remmy dekaukusburg and the narcissus web visualizations by ralph bean. I ended up pitching mycloud and snap again as well as my own &lt;a href=&quot;http://mo.morsi.org/blog&quot;&gt;Nethack Encyclopedia&lt;/a&gt; project, inviting fellow explorers of the mazes of menace to bring the guide :-)&lt;/p&gt;
&lt;p&gt;FUDPub was fun, as always a good time, featuring bowling and lots of tastey food and held at the Blacksburg student center this time around.&lt;/p&gt;
&lt;p&gt;I'm writing this from my hotel room Sunday morning as I pack up and prepare for the 10hr drive hack. Overall a great time, have plenty to keep me busy going forward, and am looking forward to the next FUDCon!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/360&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Forthcoming: MRI Ruby 1.9 in Fedora</title>
		<link href="http://mo.morsi.org/blog/node/359"/>
		<id>http://mo.morsi.org/359 at http://mo.morsi.org/blog</id>
		<updated>2012-01-03T23:00:55+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/Application-x-ruby.png&quot; style=&quot;float: right; margin-left: 10px; width: px; height: px;&quot; /&gt;The &lt;a href=&quot;http://fedoraproject.org/wiki/Ruby_SIG&quot;&gt;Fedora Ruby SIG&lt;/a&gt; is in the process of updating the main Ruby package in Fedora to Ruby 1.9. We hope to get it in by Fedora 17, while shipping a Ruby 1.8 compatability package for those who wish to continue using the older version (though more and more upstream projects are phasing this out). Alternatively, since JRuby is &lt;a href=&quot;http://mo.morsi.org/blog/node/340&quot;&gt;now in Fedora&lt;/a&gt;, end-users may opt to utilize that interpreter for both Ruby 1.8 and 1.9 support.&lt;/p&gt;
&lt;p&gt;The Ruby 1.9 effort is being led by &lt;a href=&quot;http://fedoraproject.org/wiki/User:Vondruch&quot;&gt;Vit Ondruch&lt;/a&gt; who has done alot of the packaging work and submitted the initial guidelines draft, which we are currently discussing/revising on &lt;a href=&quot;http://lists.fedoraproject.org/pipermail/ruby-sig/2011-December/thread.html&quot;&gt;the mailing lists&lt;/a&gt;. They are largely an extension of the existing guidelines to better nail things down and cover various issues that have come up over the years, but all are welcome to join the discussion and share their comments / opinions on the best way to move forward.&lt;/p&gt;
&lt;p&gt;A Ruby 1.9.3 testing &lt;a href=&quot;http://vondruch.fedorapeople.org/ruby_1.9.3.repo&quot;&gt;repository&lt;/a&gt; has been setup for those who wish to try the new packages out. Feel free to share any feedback or issues on list.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/359&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Book Review: Altered Carbon</title>
		<link href="http://mo.morsi.org/blog/node/358"/>
		<id>http://mo.morsi.org/358 at http://mo.morsi.org/blog</id>
		<updated>2012-01-01T14:35:44+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/altered-carbon.jpg&quot; style=&quot;float: left; margin-right: 10px; width: 210px; height: 350px;&quot; /&gt;Having finished my long trek through &lt;a href=&quot;http://en.wikipedia.org/wiki/Anathem&quot;&gt;Anathem&lt;/a&gt; a little while back, I was left craving for another epic sci-fi tale. Living up to his previous classic, &lt;a href=&quot;http://en.wikipedia.org/wiki/Snow_Crash&quot;&gt;Snow Crash&lt;/a&gt;, Neal Stephenson's Anathem is an amazing thrill-ride, full of intense action, profound philosophy (drawing on thousands of years of mathematics, science, and metaphysics), and overall an unbelievable story. Stephenson is truly a remarkable author, and while he deals with very-deep topics, there is a good chance that anyone will be able to find at least one of his worlds that draws them in. Surprisingly I couldn't get into &lt;a href=&quot;http://en.wikipedia.org/wiki/Cryptonomicon&quot;&gt;Cryptonomicon&lt;/a&gt; when I tried not too long ago, but admittedly I didn't get terribly far into it before I gave up and might have to give it another go. There are plenty of reviews of Anathem online, so I will leave it up to my readers to read more about it through those, but needless to say I highly recommend the novel.&lt;/p&gt;
&lt;p&gt;I ordered two books with relatively good reviews off of Amazon, &lt;a href=&quot;http://www.amazon.com/Hyperion-Dan-Simmons/dp/0553283685/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1325428177&amp;amp;sr=1-1&quot;&gt;Hyperion&lt;/a&gt; (a space opera) and the second being &lt;a href=&quot;http://www.amazon.com/Altered-Carbon-Takeshi-Kovacs-Novels/dp/0345457684&quot;&gt;Altered Carbon&lt;/a&gt; by Richard K Morgan, a nitty gritty &lt;a href=&quot;http://en.wikipedia.org/wiki/Cyberpunk&quot;&gt;cyberpunk&lt;/a&gt; tale similar to Snow Crash. I tried the former first, but again try as I might I could not get into it, so I decided to give Altered Carbon a go, and was very pleasantly surprised.&lt;/p&gt;
&lt;p&gt;Altered Carbon is the tale of Takeshi Kovacs as he investigates the 'murder' of Laurens Bancroft, a very rich and powerful business magnate in futuristic San Francisco, now called Bay City. By this point in time, actual real deaths are fairly uncommon, as it is a widespread practice to store one's identity, memories, and conscience 'on stack', which is able to be downloaded into temporary bodies known as 'sleeves' at any point in time after. Morgan's vivid and rich imagery paints a world that lives up to any cyberpunk setting portrayed to date, including perhaps the ultimate cyberpunk novel, &lt;a href=&quot;http://en.wikipedia.org/wiki/Neuromancer&quot;&gt;Neuromancer&lt;/a&gt; by William Gibson. Chalk full of concepts such as virtual-realities, technology based augmentations, drug induced psychological and physiological alterations, interstellar travel, conspiring artificial intelligences, oriental philosophy, intense martial arts action, and much more, Kovacs' investigation keeps the reader glued to the edge of his/her seat and makes it hard to put the book down even for a second.&lt;/p&gt;
&lt;p&gt;The novel is a good read, not so challenging that it will be lost on anyone (unlike Anathem and Snow Crash which are complete mind-benders), but also not too simplistic that it will bore. The chapters are fairly short and to the point, making for a good airplane or subway read, while the overall story fits together and flows nicely. Without spoiling any more, I highly suggest it to anyone that is into the genre, it won't disappoint!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/358&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Messing around w/ HTML5: drag-n-drop</title>
		<link href="http://mo.morsi.org/blog/node/357"/>
		<id>http://mo.morsi.org/357 at http://mo.morsi.org/blog</id>
		<updated>2011-12-23T00:25:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;In my last html5 &lt;a href=&quot;http://mo.morsi.org/blog/node/352&quot;&gt;blog post&lt;/a&gt; we explored using the canvas to recreate a simple version of pong. This time around we'll be using the drag-and-drop features of HTML5 for a simple example. Note I'm pulling in the &lt;a href=&quot;http://jqueryui.com/&quot;&gt;JQuery UI&lt;/a&gt; library to take care of alot of the details and provide a easy-to-use interface to use drag-and-drop.&lt;/p&gt;
&lt;p&gt;In this example, we have a list of images which we'd like to pull into a common area. The thing is, the original list should be preserved, once dragged-in, an image should not disappear from its original location.&lt;/p&gt;
&lt;p&gt;This is accomplished by using jquery to set the images in the list to being draggable (this registers the necessary event handlers), and to make the common area droppable, eg able to receive draggable objects. JQuery allows us to set the 'helper' attribute, which defines the element being dragged around, to the predefined 'clone' value which makes a copy of the original element. From there we expand the container div to accept only the elements we want to drag in, and override the 'drop' method to set various properties allowing us to position and style the dropped element any way we would like.&lt;/p&gt;
&lt;p&gt;All in all the effect is the following:&lt;/p&gt;
&lt;div style=&quot;width: 300px; height: 300px; float: left;&quot; id=&quot;jquery_drag_drop_example_container&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;float: left; width: 20%; margin-left: 10px;&quot;&gt;
&lt;ul style=&quot;&quot;&gt;
&lt;li&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/jquery_drap_drop_example_0.png&quot; class=&quot;jquery_drag_drop_example_img&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/jquery_drap_drop_example_1.png&quot; class=&quot;jquery_drag_drop_example_img&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/jquery_drap_drop_example_2.png&quot; class=&quot;jquery_drag_drop_example_img&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/jquery_drap_drop_example_3.png&quot; class=&quot;jquery_drag_drop_example_img&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/jquery_drap_drop_example_4.png&quot; class=&quot;jquery_drag_drop_example_img&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
$(function(){
  $('.jquery_drag_drop_example_img').draggable({
    helper: 'clone',
  }); 
  $('#jquery_drag_drop_example_container').droppable({
    accept: '.jquery_drag_drop_example_img',
    drop: function(event, ui){
      var newitem = $(ui.draggable).clone();
      $(this).append(newitem);
      $(newitem).addClass(&quot;jquery_drag_drop_example_img_clone&quot;);
      $(newitem).removeClass(&quot;ui-draggable jquery_drag_drop_example_img&quot;);
      $(newitem).draggable({containment: 'parent'});
      $(newitem).css('position', 'absolute');
      $(newitem).css('top', ui.position.top ); 
      $(newitem).css('left', ui.position.left);
      //alert(event.dataTransfer.getData('text'));
    }   
  }); 
});
&amp;lt;/script&amp;gt;&lt;p&gt;
And the source producing this:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;&amp;lt;div id=&quot;jquery_drag_drop_example_container&quot;
     style=&quot;width: 300px; height: 300px; background: #C0C0C0; float:left;&quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div style=&quot;background: #FFFF99; float:left; width: 20%; margin-left: 10px;&quot;&amp;gt;
&amp;lt;ul style=&quot;list-style-type: none; list-style-position: inside;&quot;&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;img class=&quot;jquery_drag_drop_example_img&quot; src=&quot;example_0.png&quot; /&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;img class=&quot;jquery_drag_drop_example_img&quot; src=&quot;example_1.png&quot; /&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;img class=&quot;jquery_drag_drop_example_img&quot; src=&quot;example_2.png&quot; /&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;img class=&quot;jquery_drag_drop_example_img&quot; src=&quot;example_3.png&quot; /&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;img class=&quot;jquery_drag_drop_example_img&quot; src=&quot;example_4.png&quot; /&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div style=&quot;clear: both;&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-javascript&quot;&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;&lt;/span&gt;script type&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt;
$&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
  $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'.jquery_drag_drop_example_img'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;draggable&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
    helper&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #3366CC;&quot;&gt;'clone'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; 
  $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'#jquery_drag_drop_example_container'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;droppable&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
    accept&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #3366CC;&quot;&gt;'.jquery_drag_drop_example_img'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;
    drop&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;event&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; ui&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; newitem &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;ui.&lt;span style=&quot;color: #006600;&quot;&gt;draggable&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;newitem&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;newitem&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;addClass&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&quot;jquery_drag_drop_example_img_clone&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;newitem&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;removeClass&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&quot;ui-draggable jquery_drag_drop_example_img&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;newitem&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;draggable&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;containment&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #3366CC;&quot;&gt;'parent'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;newitem&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'position'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #3366CC;&quot;&gt;'absolute'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;newitem&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'top'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; ui.&lt;span style=&quot;color: #006600;&quot;&gt;position&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;top&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; 
      $&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;newitem&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'left'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; ui.&lt;span style=&quot;color: #006600;&quot;&gt;position&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;left&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      &lt;span style=&quot;color: #006600; font-style: italic;&quot;&gt;//alert(event.dataTransfer.getData('text'));&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;   
  &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; 
&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thats it until next time. Hope everyone enjoys the holidays!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/357&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Snap! Updates</title>
		<link href="http://mo.morsi.org/blog/node/356"/>
		<id>http://mo.morsi.org/356 at http://mo.morsi.org/blog</id>
		<updated>2011-12-20T01:51:47+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/snap.jpg&quot; style=&quot;float: left; margin-right: 10px; width: 200px; height: 200px;&quot; /&gt; Alot of great development on Snap! recently. Here are some updates (see the &lt;a href=&quot;https://github.com/movitto/snap/commits/master&quot;&gt;commit log&lt;/a&gt; for the full list):&lt;/p&gt;
&lt;p&gt;  - incorporated full test harness&lt;br /&gt;
  - many documentation improvements / fixes&lt;br /&gt;
  - many code cleanups / optimizations&lt;br /&gt;
  - starting adding ability to migrate snapshots between OS's (for example Ubuntu to Fedora and vice-versa)&lt;br /&gt;
  - pushed snap into Fedora! (simply install via 'yum install snap' on Fedora15+ and RHEL6, should be pushed into Debian / Ubuntu soon)&lt;/p&gt;
&lt;p&gt;Stay tuned for more updates!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/356&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Various Quick Tips</title>
		<link href="http://mo.morsi.org/blog/node/355"/>
		<id>http://mo.morsi.org/355 at http://mo.morsi.org/blog</id>
		<updated>2011-12-19T14:47:34+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/quick-tips.jpg&quot; style=&quot;float: right; width: 200px; height: 200px; margin-left: 20px;&quot; /&gt;Just a bunch of random quick tips, posted together for conciseness&lt;/p&gt;
&lt;p&gt;---------------------------&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Passwordless SSH'ing as root&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;When writing the test harness for &lt;a href=&quot;http://github.com/movitto/snap&quot;&gt;Snap&lt;/a&gt; I needed to setup a few vms which I could ssh into as root automatically, without being prompted for a password. True, I could've setup a ssh key and install that on the vms, but instead for simplicity I wanted to be able to ssh in w/out requiring any credentials (yes insecure, but these VMs are isolated and the test harness makes sure they are shutdown post-invocation).&lt;/p&gt;
&lt;p&gt;On Fedora/Ubuntu this is accomplished by:&lt;br /&gt;
  - editing /etc/ssh/sshd_config an setting 'PermitEmptyPasswords yes'&lt;br /&gt;
  - Ubuntu requires one additional config change, to /etc/pam.d/sshd, namely comment out '@include common-auth' and replace with 'auth required pam_unix.so nullok'&lt;br /&gt;
  - restarting ssh: 'sudo service sshd restart'&lt;br /&gt;
  - setting sshd to come up automatically 'sudo chkconfig --levels 35 sshd on'&lt;br /&gt;
  - finally delete the root user's password 'sudo passwd -d root'&lt;/p&gt;
&lt;p&gt;Now you can ssh root@&amp;lt;ip_address&amp;gt; to login as root w/out a password (obviously use with caution).&lt;/p&gt;
&lt;p&gt;Incidentally this is also a means to get a root shell on Ubuntu, which by default does not allow this, requiring the user to run all privileged commands through 'sudo'&lt;/p&gt;
&lt;p&gt;---------------------------&lt;/p&gt;
&lt;p&gt;&lt;b&gt;xbacklight&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I've run into a problem w/ the backlight not resuming normal operation after my laptop has been dock'd. This seems to be a &lt;a href=&quot;http://www.thinkwiki.org/wiki/Problem_with_display_remaining_black_after_resume&quot;&gt;common issue&lt;/a&gt;, even on the Linux friendly Lenovo Thinkpad laptops.&lt;/p&gt;
&lt;p&gt;After some debugging I was able to resolve this by installing the 'xbacklight' package and running 'xbacklight -set 100'.&lt;/p&gt;
&lt;p&gt;---------------------------&lt;/p&gt;
&lt;p&gt;&lt;b&gt;C Data Structure Visibility Practices&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I've been getting back into C programming (more on this soon). Of course w/ a lower-level language (C is actually a high level language, though usually considered low-level, but I digress) there are many approaches / ways to do things, especially concerning data visibility. Studying the &lt;a href=&quot;http://libvirt.org&quot;&gt;libvirt&lt;/a&gt; library header file, I found one useful standard is to:&lt;/p&gt;
&lt;p&gt;- define public data structures, eg structures which can be manually instantiated by the user, as you normally would, eg&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-c&quot;&gt;&lt;span style=&quot;color: #993333;&quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;struct&lt;/span&gt; _myData&lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
  ...&lt;span style=&quot;color: #202020;&quot;&gt;fields&lt;/span&gt;...
&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt; myData;
 
&lt;span style=&quot;color: #993333;&quot;&gt;typedef&lt;/span&gt; myDataPtr &lt;span style=&quot;color: #339933;&quot;&gt;*&lt;/span&gt;myData;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;- define private data structures, or data which can only be instantiated by calling one of your methods, w/ forward declerations in the public header, with the private definitions residing in an internal-only header/implementation file, eg&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-c&quot;&gt;&lt;span style=&quot;color: #993333;&quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;struct&lt;/span&gt; _privateData privateData;
&lt;span style=&quot;color: #993333;&quot;&gt;typedef&lt;/span&gt; privateDataPtr &lt;span style=&quot;color: #339933;&quot;&gt;*&lt;/span&gt;privateData;
 
privateDataPtr createPrivateData&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;...&lt;span style=&quot;color: #202020;&quot;&gt;params&lt;/span&gt;...&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;- define public data structures refering to data managed / manipulated by an external entity, as 'info' structures, (these will often be associated w/ private data in some way) eg&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-c&quot;&gt;&lt;span style=&quot;color: #993333;&quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;struct&lt;/span&gt; _externalDataInfo &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
  ...&lt;span style=&quot;color: #202020;&quot;&gt;fields&lt;/span&gt; about data managed elsewhere...
&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt; externalDataInfo;
 
&lt;span style=&quot;color: #993333;&quot;&gt;typedef&lt;/span&gt; externalDataInfoPtr &lt;span style=&quot;color: #339933;&quot;&gt;*&lt;/span&gt;externalDataInfo;
 
externalDataInfoPtr getExternalDataInfo&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;privateDataPtr private_data&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;---------------------------&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Per Host SSH Key&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Many thanks to &lt;a href=&quot;http://jkeating.livejournal.com/&quot;&gt;jkeating&lt;/a&gt; for this pro-tip. To set which ssh key to use on a per-host basis, simply create a ~/.ssh/config file (chmod'd to 600) containing the following contents:&lt;/p&gt;
&lt;p&gt;Host &amp;lt;hostname&amp;gt;&lt;br /&gt;
IdentityFile &amp;lt;path-to-ssh-key&amp;gt;&lt;/p&gt;
&lt;p&gt;Also optionally specify 'User &amp;lt;username&amp;gt;' to not have to prefix your remote username to the hostname when logging in w/ a username different than your local one.&lt;/p&gt;
&lt;p&gt;---------------------------&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=TXlvFpf56vU&amp;amp;feature=related&quot;&gt;Thats all folks!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/355&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Plasma PackageKit integration approved as a Fedora 17 feature</title>
		<link href="https://kevinkofler.wordpress.com/2011/12/10/plasma-packagekit-integration-approved-as-a-fedora-17-feature/"/>
		<id>http://kevinkofler.wordpress.com/?p=77</id>
		<updated>2011-12-10T08:27:31+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;I am proud to announce that my &lt;a href=&quot;http://www.google-melange.com/gsoc/project/google/gsoc2011/kevinkofler/7001&quot; title=&quot;KDE Plasma Dependency Generation and PackageKit Integration&quot;&gt;Plasma PackageKit Integration GSoC 2011 project&lt;/a&gt; has been &lt;a href=&quot;https://fedorahosted.org/fesco/ticket/713&quot; title=&quot;FESCo Ticket #713&quot;&gt;approved&lt;/a&gt; as an official &lt;a href=&quot;https://fedoraproject.org/wiki/Features/Plasma_PackageKit_Integration&quot; title=&quot;Features/Plasma PackageKit Integration&quot;&gt;Fedora 17 feature&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In other news, I have recently laid the first stone for a port of my work to KDE Frameworks 5, by getting &lt;a href=&quot;https://gitorious.org/packagekit/packagekit/commit/57a5fe1147ba269e42b0f52366b5440355e7e82a&quot; title=&quot;Commit 57a5fe1147ba269e42b0f52366b5440355e7e82a in packagekit in PackageKit&quot;&gt;support for a &lt;code&gt;plasma5&lt;/code&gt; namespace&lt;/a&gt; into PackageKit.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/77/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/77/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=77&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">libvirtd default network on a vm</title>
		<link href="http://mo.morsi.org/blog/node/354"/>
		<id>http://mo.morsi.org/354 at http://mo.morsi.org/blog</id>
		<updated>2011-12-05T16:12:07+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;div style=&quot;float: right; margin-right: 10px; width: 55%;&quot;&gt;&lt;img src=&quot;http://mo.morsi.org/blog/files/libvirt_0.png&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;float: left; width: 40%;&quot;&gt;I've run into this issue so many times that I figure I'd share the solution incase anyone else has a similar problem. If you are running libvirtd on a vm which was in itself started by libvirt, make sure you change the network address of the default libvirt network on the vm. Or alternatively simply run the following command to shut it down:&lt;br /&gt;
&lt;p&gt;&lt;b&gt;$ sudo virsh net-destroy default&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This is because otherwise the addresses of the libvirt created networks running on the vm and your host machine will clash and cause conflicts / routing errors.&lt;/p&gt;
&lt;p&gt;Hope this helps!&lt;/p&gt;&lt;/div&gt;
&lt;div style=&quot;clear: both;&quot;&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;http://mo.morsi.org/blog/node/354&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mmorsi</name>
			<uri>http://mo.morsi.org/blog</uri>
		</author>
		<source>
			<title type="html">Morsi dot Org</title>
			<link rel="self" href="http://mo.morsi.org/blog/rss.xml"/>
			<id>http://mo.morsi.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html">Planning FUDCon Pune</title>
		<link href="http://allsortsofshrink.blogspot.com/2011/10/planning-fudcon-pune.html"/>
		<id>tag:blogger.com,1999:blog-974409201910540496.post-4999498275880271627</id>
		<updated>2011-10-18T12:34:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://shreyankg.fedorapeople.org/shreyank.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://fudcon.in/&quot; title=&quot;FUDCon Pune 2011&quot;&gt;&lt;img src=&quot;https://fedoraproject.org/w/uploads/c/cf/Button.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm in charge of Wireless and Charging Points at FUDCon, Pune.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://openetherpad.org/fudcon-pune-planning&quot;&gt;http://openetherpad.org/fudcon-pune-planning&lt;/a&gt; contains the ongoing planning details.&lt;/div&gt;</content>
		<author>
			<name>$hRiNk</name>
			<email>noreply@blogger.com</email>
			<uri>http://allsortsofshrink.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">All Sorts Of Things</title>
			<link rel="self" href="http://allsortsofshrink.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-974409201910540496</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">GSoC is over, but my code lives</title>
		<link href="https://kevinkofler.wordpress.com/2011/09/28/gsoc-is-over-but-my-code-lives/"/>
		<id>http://kevinkofler.wordpress.com/?p=72</id>
		<updated>2011-09-28T00:43:47+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;The GSoC deadline is now over. I passed the final evaluation and got my payment, still waiting for the t-shirt and certificate though. But the fact that the deadline has passed doesn’t mean I stopped maintaining the code. This week, the &lt;code&gt;telepathy-kde-presence-applet&lt;/code&gt; has landed in Rawhide, which made me find and fix a few issues in my GSoC work:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The RPM auto-Provides script got confused by &lt;code&gt;plasma-scriptengine-applet-declarative.desktop&lt;/code&gt; in &lt;code&gt;kde-runtime&lt;/code&gt;, which has a &lt;code&gt;X-KDE-PluginInfo-Name&lt;/code&gt; different from the &lt;code&gt;X-Plasma-API&lt;/code&gt; (the name is &lt;em&gt;qmlscript&lt;/em&gt;, the API is &lt;em&gt;declarativeappletscript&lt;/em&gt;). The dependency extractor was preferring the &lt;code&gt;X-KDE-PluginInfo-Name&lt;/code&gt;, but that name is not used for script engines, only the API is relevant. This is fixed by &lt;a href=&quot;https://fedorahosted.org/kde-settings/changeset/294&quot; title=&quot;Changeset 294 – kde-settings – Trac&quot;&gt;this kde-settings commit&lt;/a&gt;, in &lt;code&gt;kde-settings-4.7-8.fc17&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://git.reviewboard.kde.org/r/102350/&quot; title=&quot;Review Request: Implement automatic scanning of source code for required data engines&quot;&gt;data engine dependency extraction&lt;/a&gt; did not support &lt;code&gt;declarativeappletscript&lt;/code&gt; QML code. I updated the patch to add support for that feature.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;plasma-dataengine-depextractor&lt;/code&gt; was passing a relative path to &lt;code&gt;KDesktopFile&lt;/code&gt;, which misinterpreted it as relative to &lt;code&gt;applnk&lt;/code&gt; rather than to the current directory. I fixed the patch to use &lt;code&gt;QDir::absoluteFilePath&lt;/code&gt; instead of &lt;code&gt;QDir::filePath&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;plasma-dataengine-depextractor&lt;/code&gt; was requiring the user or script calling it to explicitly pass the scripting API/language used through an &lt;code&gt;--api&lt;/code&gt; argument. That information is already provided by the &lt;code&gt;.desktop&lt;/code&gt; file, which is required anyway, so I dropped the useless parameter and changed the code to detect the scripting API automatically. (If anybody is already using the &lt;code&gt;plasma-dataengine-depextractor&lt;/code&gt;: please just remove any &lt;code&gt;-a language&lt;/code&gt; or &lt;code&gt;--api language&lt;/code&gt; argument you’re passing, it is now all detected automatically.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Unfortunately, I haven’t been able to build the updated data engine dependency extraction patch into Rawhide yet because the &lt;code&gt;kdelibs&lt;/code&gt; build fails due to an unrelated issue with &lt;code&gt;isnan&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; &lt;code&gt;glibc&lt;/code&gt; has been fixed in Rawhide, and &lt;code&gt;kdelibs-4.7.1-4.fc17&lt;/code&gt; was &lt;a href=&quot;http://koji.fedoraproject.org/koji/buildinfo?buildID=265763&quot; title=&quot;Information for build kdelibs-4.7.1-4.fc17&quot;&gt;built successfully&lt;/a&gt;.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/72/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/72/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=72&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Pycon India 2011, Pune</title>
		<link href="http://allsortsofshrink.blogspot.com/2011/09/pycon-india-2011-pune.html"/>
		<id>tag:blogger.com,1999:blog-974409201910540496.post-8350469678506813845</id>
		<updated>2011-09-20T18:29:00+00:00</updated>
		<content type="html">
			&lt;img src=&quot;http://shreyankg.fedorapeople.org/shreyank.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot;&gt;So I attended &lt;a href=&quot;http://in.pycon.org/2011/&quot;&gt;Pycon India&lt;/a&gt; for the first time in three years it has existed. It was held in Bangalore the previous two years, and I was being lazy. &lt;br /&gt;&lt;a href=&quot;http://ratnadeepdebnath.wordpress.com/&quot;&gt;Ratnadeep&lt;/a&gt; was put up at my place. I had originally decided not to attend the tutorials, but then since Ratnadeep wanted to attend, I decided to show up as well.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Day 1 &lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Tutorials on Friday was a bit boring, considering they were long, and I wasn't exactly the student types. &lt;a href=&quot;http://punetech.com/navin/&quot;&gt;Navin Kabra&lt;/a&gt; had a session about Web API Programming using Python where I lingered for a while. I did however attend a part of &lt;a href=&quot;http://anandology.com/&quot;&gt;Anand Chitipothu&lt;/a&gt;'s session on Functional Programming. I liked the slides he made using &lt;a href=&quot;https://github.com/anandology/landslide&quot;&gt;Landslide&lt;/a&gt;. Must check that out sometime. &lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Day 2 &lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://rhettinger.wordpress.com/&quot;&gt;Raymond Hettinger&lt;/a&gt; had his keynote on why Python is awesome. His talk highlighted what makes Python different from other languages. Then Anand Chitipothu had a talk on &lt;a href=&quot;https://github.com/anandology/pyjs&quot;&gt;pyjs&lt;/a&gt;, which is a way to compile python code into JS. The talk was good, especially the &lt;a href=&quot;http://en.wikipedia.org/wiki/Abstract_syntax_tree&quot;&gt;AST&lt;/a&gt; parts. After lunch I went to attend &lt;a href=&quot;http://sajjad.in/&quot;&gt;Sajjad&lt;/a&gt;'s talk on developing Android apps using Python. Track 2 was jampacked with more people waiting outside, so the talk was moved to Track 1 which was more spacious. &lt;a href=&quot;http://nibrahim.net.in/&quot;&gt;Noufal&lt;/a&gt; then took the stage with his talk on using Emacs as a Python IDE, which then got side tracked to &lt;a href=&quot;http://orgmode.org/&quot;&gt;org mode&lt;/a&gt;. The rest of the day I spent chit-chatting.  &lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Day 3 &lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Sunday meant, my talk had to be delivered soon, and my slides were somewhat ready. Nevertheless I spend some (a_lot_of) time retouching the slides and doing up code examples. I was there, half-attentive to &lt;a href=&quot;http://jace.zaiki.in/&quot;&gt;Jace&lt;/a&gt;'s talk on the &lt;a href=&quot;http://github.com/hasgeek/lastuser&quot;&gt;LastUser&lt;/a&gt; Service. It looked interesting and I am planning to use it for the &lt;a href=&quot;https://fedoraproject.org/wiki/FUDCon:India_2011&quot;&gt;FUDCon&lt;/a&gt;&lt;a href=&quot;http://usecod.com/&quot;&gt; COD&lt;/a&gt; installation. After lunch and coffee, (and an indecent where I mixed up my laptop with &lt;a href=&quot;http://web.gnuer.org/&quot;&gt;Anurag&lt;/a&gt;'s, and spend multiple attempts trying to log-in into his system), I gave my talk, on developing Django Apps based on REST Architecture (&lt;a href=&quot;http://shreyankg.fedorapeople.org/pycon.pdf&quot;&gt;slides&lt;/a&gt;| &lt;a href=&quot;http://urtalk.kpoint.in/kapsule/gcc-0e0e0a8e-a444-400e-8ed9-f0f1b6fa8ba9&quot;&gt;video&lt;/a&gt;). For what it's worth, it wasn't very well received by the audience. Also this was the largest audience I ever had. Met people and photographed then the rest of the day.  &lt;br /&gt;&lt;br /&gt;All in all a good conference. Kudos to the organising team.&lt;br /&gt;&lt;br /&gt;Below are some of the pictures I took at the conference.&lt;br /&gt;&lt;br /&gt;&amp;lt;object height=&quot;375&quot; width=&quot;500&quot;&amp;gt; &amp;lt;param name=&quot;flashvars&quot; value=&quot;offsite=true&amp;amp;amp;lang=en-us&amp;amp;amp;page_show_url=%2Fphotos%2Fshreyankg%2Fsets%2F72157627711726378%2Fshow%2F&amp;amp;amp;page_show_back_url=%2Fphotos%2Fshreyankg%2Fsets%2F72157627711726378%2F&amp;amp;amp;set_id=72157627711726378&amp;amp;amp;jump_to=&quot;/&amp;gt;  &amp;lt;param name=&quot;movie&quot; value=&quot;http://www.flickr.com/apps/slideshow/show.swf?v=107931&quot;/&amp;gt;  &amp;lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&amp;gt;  &amp;lt;embed allowfullscreen=&quot;true&quot; flashvars=&quot;offsite=true&amp;amp;amp;lang=en-us&amp;amp;amp;page_show_url=%2Fphotos%2Fshreyankg%2Fsets%2F72157627711726378%2Fshow%2F&amp;amp;amp;page_show_back_url=%2Fphotos%2Fshreyankg%2Fsets%2F72157627711726378%2F&amp;amp;amp;set_id=72157627711726378&amp;amp;amp;jump_to=&quot; height=&quot;375&quot; src=&quot;http://www.flickr.com/apps/slideshow/show.swf?v=107931&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot;&amp;gt;&amp;lt;/embed&amp;gt;&amp;lt;/object&amp;gt;&lt;/div&gt;</content>
		<author>
			<name>$hRiNk</name>
			<email>noreply@blogger.com</email>
			<uri>http://allsortsofshrink.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">All Sorts Of Things</title>
			<link rel="self" href="http://allsortsofshrink.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-974409201910540496</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Plasma/RPM/PackageKit GSoC work now in Rawhide</title>
		<link href="https://kevinkofler.wordpress.com/2011/08/20/plasmarpmpackagekit-gsoc-work-now-in-rawhide/"/>
		<id>http://kevinkofler.wordpress.com/?p=68</id>
		<updated>2011-08-20T23:41:44+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;My GSoC 2011 work has now fully entered Rawhide, i.e. what will eventually become Fedora 17 and later.&lt;/p&gt;
&lt;p&gt;The PackageKit portions of the work have already been in Rawhide for a while:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://koji.fedoraproject.org/koji/buildinfo?buildID=251565&quot; title=&quot;PackageKit-0.6.16-1.fc16&quot;&gt;PackageKit-0.6.16-1.fc16&lt;/a&gt; (patch included upstream) was built on July 4.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://koji.fedoraproject.org/koji/buildinfo?buildID=251582&quot; title=&quot;gnome-packagekit-3.1.3-2.fc16&quot;&gt;gnome-packagekit-3.1.3-2.fc16&lt;/a&gt; (patch included upstream) was built on July 4 as well.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://koji.fedoraproject.org/koji/buildinfo?buildID=256595&quot; title=&quot;kpackagekit-0.6.3.3-3.fc17&quot;&gt;kpackagekit-0.6.3.3-3.fc17&lt;/a&gt; (patch backported) was built (by me) on August 1.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have just imported the remaining portions of the work into Rawhide:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://koji.fedoraproject.org/koji/buildinfo?buildID=259716&quot; title=&quot;kde-settings-4.7-4.fc17&quot;&gt;kde-settings-4.7-4.fc17&lt;/a&gt; includes the RPM dependency generators.&lt;/li&gt;
&lt;li&gt;I have rebuilt &lt;code&gt;kdelibs&lt;/code&gt;, &lt;code&gt;kdebase-runtime&lt;/code&gt;, &lt;code&gt;kdebase-workspace&lt;/code&gt; and &lt;code&gt;kdeplasma-addons&lt;/code&gt; to pick up the new Provides. Other packages will automatically pick up Provides and script engine Requires the next time they are rebuilt. (For data engine Requires, you will want to run the new &lt;code&gt;plasma-dataengine-depextractor&lt;/code&gt; in &lt;code&gt;kdelibs-devel&lt;/code&gt; during the build process, unless/until the upstream &lt;code&gt;metadata.desktop&lt;/code&gt; includes an &lt;code&gt;X-Plasma-RequiredDataEngines&lt;/code&gt; entry.)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://koji.fedoraproject.org/koji/buildinfo?buildID=259724&quot; title=&quot;kdelibs-4.7.0-3.fc17&quot;&gt;kdelibs-4.7.0-3.fc17&lt;/a&gt; includes all the libplasma portions of my GSoC project (as backported patches).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The new features should now be fully testable in Rawhide.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I built &lt;a href=&quot;http://koji.fedoraproject.org/koji/buildinfo?buildID=259797&quot; title=&quot;kde-settings-4.7-5.fc17&quot;&gt;kde-settings-4.7-5.fc17&lt;/a&gt;, which &lt;a href=&quot;https://fedorahosted.org/kde-settings/changeset/271&quot; title=&quot;Changeset 271 – kde-settings&quot;&gt;fixes&lt;/a&gt; showstopper &lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=732271&quot; title=&quot;Bug 732271 - plasma4 dependency not resolved&quot;&gt;bug #732271&lt;/a&gt;. (I also &lt;a href=&quot;https://git.reviewboard.kde.org/r/102404/&quot; title=&quot;Review Request: Bugfix: Plasma::PackageMetadata::read: Match the behavior of KService&quot;&gt;fixed&lt;/a&gt; a related issue in libplasma in &lt;a href=&quot;http://koji.fedoraproject.org/koji/buildinfo?buildID=259807&quot; title=&quot;kdelibs-4.7.0-4.fc17&quot;&gt;kdelibs-4.7.0-4.fc17&lt;/a&gt;, but that fix should not be strictly required because the only thing I use &lt;code&gt;Plasma::PackageMetadata::serviceType()&lt;/code&gt; for is to figure out the precise type of script engine to verify the presence of, and if I don’t have a service type, I just conservatively look for any script engine for the language, which should be fine as they tend to be packaged together anyway.)&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/68/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/68/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=68&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Plasma + PackageKit: The last piece of the puzzle</title>
		<link href="https://kevinkofler.wordpress.com/2011/08/17/plasma-packagekit-the-last-piece-of-the-puzzle/"/>
		<id>http://kevinkofler.wordpress.com/2011/08/17/plasma-packagekit-the-last-piece-of-the-puzzle/</id>
		<updated>2011-08-17T03:38:17+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;I have just &lt;a href=&quot;https://git.reviewboard.kde.org/r/102350/&quot; title=&quot;Review Request: Implement automatic scanning of source code for required data engines&quot;&gt;submitted&lt;/a&gt; a patch which implement automatic scanning of the source code of Plasma-related packages (e.g. widgets) for required data engines.&lt;/p&gt;
&lt;p&gt;For packages in scripting languages and distributed through Open Collaboration Services (OCS), this is fully automatic and triggered from &lt;code&gt;Package::installPackage&lt;/code&gt;. If an &lt;code&gt;X-Plasma-RequiredDataEngines&lt;/code&gt; entry is present in the .desktop file (even if empty), the dependency extraction is not run and the explicitly provided information is trusted instead.&lt;/p&gt;
&lt;p&gt;For native distribution packages, my patch adds a tool called &lt;code&gt;plasma-dataengine-depextractor&lt;/code&gt; which can be run at any time during the build process and which adds the dependency information (the &lt;code&gt;X-Plasma-RequiredDataEngines&lt;/code&gt; entry) to the relevant &lt;code&gt;.desktop&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Authors of plasmoids are encouraged to run &lt;code&gt;plasma-dataengine-depextractor&lt;/code&gt; and/or fill in &lt;code&gt;X-Plasma-RequiredDataEngines&lt;/code&gt; manually. (Please note that the list is expected to be comma-separated.)&lt;/p&gt;
&lt;p&gt;Of course, the automatic scanning is not perfect; in particular, it will not detect convoluted ways to load data engines (e.g. if the name is a variable), and it may have false positives in some corner cases (commented-out use of a data engine, some other function called &lt;code&gt;dataEngine&lt;/code&gt; and taking a string literal). However, I expect it to work well in practice, and if it doesn’t work, there’s always the possibility to explicitly add the &lt;code&gt;X-Plasma-RequiredDataEngines&lt;/code&gt; entry.&lt;/p&gt;
&lt;p&gt;This is the final portion of my GSoC 2011 project, so the project can now be considered 100% complete.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/66/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/66/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=66&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">It works: Plasma now looks up missing components through PackageKit!</title>
		<link href="https://kevinkofler.wordpress.com/2011/08/10/it-works-plasma-now-looks-up-missing-components-through-packagekit/"/>
		<id>http://kevinkofler.wordpress.com/?p=64</id>
		<updated>2011-08-10T23:36:13+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;Sorry, I haven’t blogged for a while, but rest assured that I’m still alive and coding. &lt;img src=&quot;https://s0.wp.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt;  I passed the midterm evaluation, and the final evaluation is approaching. So what do we have in the store?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;My patches to PackageKit, Apper and gnome-packagekit got pushed upstream. The changes to the PackageKit core even trickled down all the way to Fedora 15 (and of course Fedora 16 and Rawhide). I have backported the Apper changes to the Rawhide &lt;code&gt;kpackagekit&lt;/code&gt; package.&lt;/li&gt;
&lt;li&gt;I &lt;a href=&quot;https://git.reviewboard.kde.org/r/102175/&quot; title=&quot;Review Request: Add an API for installing missing Plasma engines. Use it when a requested data or script engine is not found.&quot;&gt;added support&lt;/a&gt; for Plasma to automatically prompt for the installation of missing script and data engines the first time something attempts to use them. This patch got &lt;a href=&quot;https://projects.kde.org/projects/kde/kdelibs/repository/revisions/5bf9e0aa14f849726f3573b04eb51acfff635fc6&quot; title=&quot;KDE Libraries – Revision 5bf9e0aa&quot;&gt;pushed upstream&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I &lt;a href=&quot;https://git.reviewboard.kde.org/r/102291/&quot; title=&quot;Review Request: Trigger installation of missing components when installing a package&quot;&gt;submitted another patch for review&lt;/a&gt;, which makes Plasma request the installation of required script engines (always, as this is covered by existing metadata) and data engines (if specified in the metadata through a new &lt;code&gt;X-Plasma-RequiredDataEngines&lt;/code&gt; entry) as soon as a package (usually a widget) is installed through Open Collaboration Services (OCS), rather than only when the user attempts to add the widget to some containment (desktop, panel etc.). This patch is pending upstream feedback.&lt;/li&gt;
&lt;li&gt;I also wrote an &lt;a href=&quot;https://fedorahosted.org/kde-settings/browser/branches/gsoc-2011-plasma-rpm/usr/lib/rpm/plasma4.req&quot; title=&quot;/branches/gsoc-2011-plasma-rpm/usr/lib/rpm/plasma4.req&quot;&gt;RPM auto-Requires script&lt;/a&gt; based on the same metadata as the above patch. This ensures script and data engine dependencies will be automatically detected in future Fedora packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now the only remaining work item on my project plan is automatic scanning for required data engines. (Script engines are already completely handled by the above patches.)&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/64/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/64/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=64&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Small API change to the PackageKit support for Plasma service lookup</title>
		<link href="https://kevinkofler.wordpress.com/2011/06/26/small-api-change-to-the-packagekit-support-for-plasma-service-lookup/"/>
		<id>http://kevinkofler.wordpress.com/?p=61</id>
		<updated>2011-06-26T06:09:43+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;Richard Hughes &lt;a href=&quot;http://lists.freedesktop.org/archives/packagekit/2011-June/006353.html&quot; title=&quot;Richard Hughes's review of my patches&quot;&gt;requested&lt;/a&gt; a small change to the PackageKit session API used to look up Plasma services before accepting the added function upstream: instead of a dedicated &lt;code&gt;InstallPlasmaResources&lt;/code&gt; method, the &lt;code&gt;org.freedesktop.PackageKit.Modify&lt;/code&gt; D-Bus interface got a generic &lt;code&gt;InstallResources&lt;/code&gt; method, which allows installing all the existing resource types as well as Plasma services, and any other resource types added in the future. It takes a &lt;code&gt;type&lt;/code&gt; parameter, which must be set to &lt;code&gt;&quot;plasma-service&quot;&lt;/code&gt; in our case.&lt;/p&gt;
&lt;p&gt;With those tweaks, the &lt;a href=&quot;http://gitorious.org/packagekit/packagekit/commit/9345191c9041b9cafd5ecdf89d1f84772a92adb7&quot; title=&quot;PackageKit commit 9345191c9041b9cafd5ecdf89d1f84772a92adb7&quot;&gt;PackageKit change&lt;/a&gt; and the &lt;a href=&quot;http://git.gnome.org/browse/gnome-packagekit/commit/?id=a9196b7b993e72916afae5752c06851adbc8a869&quot; title=&quot;gnome-packagekit commit a9196b7b993e72916afae5752c06851adbc8a869&quot;&gt;gnome-packagekit change&lt;/a&gt; are now committed to upstream git. For Apper (KPackageKit), which is our main target, there is &lt;a href=&quot;https://git.reviewboard.kde.org/r/101717/&quot; title=&quot;Apper review request 101717&quot;&gt;a patch for Apper master on Review Board&lt;/a&gt; and &lt;a href=&quot;http://lists.freedesktop.org/archives/packagekit/2011-June/006363.html&quot; title=&quot;Backport for KPackageKit 0.6.x&quot;&gt;a backport for KPackageKit 0.6.x on the &lt;em&gt;packagekit&lt;/em&gt; mailing list&lt;/a&gt;. Hopefully, Daniel Nicoletti will have some time to review the patch soon. If not, he suggested on IRC that I can just commit the patch as is and he’ll refactor it later if needed, so that’s my fallback plan.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/61/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/61/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=61&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">PackageKit support for Plasma service lookup</title>
		<link href="https://kevinkofler.wordpress.com/2011/06/20/packagekit-support-for-plasma-service-lookup/"/>
		<id>http://kevinkofler.wordpress.com/?p=57</id>
		<updated>2011-06-20T04:25:48+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;I just submitted patches to the &lt;em&gt;packagekit&lt;/em&gt; mailing list which implement a new &lt;code&gt;InstallPlasmaResources&lt;/code&gt; method in the &lt;code&gt;org.freedesktop.PackageKit.Modify&lt;/code&gt; D-Bus interface. There are patches for PackageKit itself, as well as for Apper (both master and KPackageKit 0.6.x) and gnome-packagekit. See &lt;a href=&quot;http://lists.freedesktop.org/archives/packagekit/2011-June/006352.html&quot; title=&quot;[PATCH] Add support for Plasma service lookup&quot;&gt;my post to the &lt;em&gt;packagekit&lt;/em&gt; mailing list&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;This completes the next step in my GSoC 2011 project. Now I can start working on using the new interface in Plasma.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/57/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/57/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=57&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Automatic Plasma RPM Provides</title>
		<link href="https://kevinkofler.wordpress.com/2011/06/05/automatic-plasma-rpm-provides/"/>
		<id>http://kevinkofler.wordpress.com/?p=51</id>
		<updated>2011-06-05T20:28:39+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;This week, I worked on my first task in my GSoC project: automatically generating RPM &lt;i&gt;Provides&lt;/i&gt; for Plasma services from Plasma’s metadata (in &lt;code&gt;.desktop&lt;/code&gt; file format). This turned out to be much easier than I had initially expected, also because my mentor &lt;a href=&quot;http://rdieter.livejournal.com/&quot; title=&quot;Rex Dieter&quot;&gt;Rex Dieter&lt;/a&gt; already had &lt;a href=&quot;http://rdieter.livejournal.com/14897.html&quot; title=&quot;rdieter: kde service &amp;quot;Provides&amp;quot; for rpm packaging&quot;&gt;a working proof of concept&lt;/a&gt; I was able to start from. I adapted the code to use RPM 4.9′s new plug&amp;amp;play dependency generation functionality and, after discussing this with my mentor, changed the format of the &lt;i&gt;Provides&lt;/i&gt; to &lt;code&gt;plasma4(&lt;i&gt;servicetype&lt;/i&gt;-&lt;i&gt;name&lt;/i&gt;)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;My work on &lt;i&gt;Provides&lt;/i&gt; and (later on) &lt;i&gt;Requires&lt;/i&gt; can be found in the &lt;a href=&quot;https://fedorahosted.org/kde-settings/browser/branches/gsoc-2011-plasma-rpm&quot; title=&quot;/branches/gsoc-2011-plasma-rpm – kde-settings – Trac&quot;&gt;&lt;code&gt;gsoc-2011-plasma-rpm&lt;/code&gt; branch of &lt;code&gt;kde-settings&lt;/code&gt; on Fedora Hosted&lt;/a&gt;. It can be installed separately, but it might be merged into upstream RPM or Plasma once finished.&lt;/p&gt;
&lt;p&gt;Today, I tested the script on the &lt;code&gt;kdeplasma-addons&lt;/code&gt; package. The resulting &lt;i&gt;Provides&lt;/i&gt; look like this:
&lt;/p&gt;&lt;pre&gt;[kevin@laptop64 x86_64]$ rpm -qp --provides kdeplasma-addons-4.6.3-1.fc15.x86_64.rpm
kcm_krunner_audioplayercontrol.so()(64bit)  
kcm_krunner_charrunner.so()(64bit)  
kcm_krunner_spellcheck.so()(64bit)  
kcm_plasma_runner_events.so()(64bit)  
krunner_audioplayercontrol.so()(64bit)  
krunner_browserhistory.so()(64bit)  
krunner_charrunner.so()(64bit)  
krunner_contacts.so()(64bit)  
krunner_converter.so()(64bit)  
krunner_katesessions.so()(64bit)  
krunner_konquerorsessions.so()(64bit)  
krunner_konsolesessions.so()(64bit)  
krunner_kopete.so()(64bit)  
krunner_mediawiki.so()(64bit)  
krunner_spellcheckrunner.so()(64bit)  
plasma-applet_systemloadviewer.so()(64bit)  
plasma-dataengine-comic = 4.6.3-1.fc15
plasma-dataengine-microblog = 4.6.3-1.fc15
plasma-dataengine-ocs = 4.6.3-1.fc15
plasma-dataengine-potd = 4.6.3-1.fc15
plasma-runner-events = 0.3.0-100
plasma4(applet-comic) = 1.0
plasma4(applet-dict) = 1.0
plasma4(applet-fileWatcher) = 1.0
plasma4(applet-frame) = 1.0
plasma4(applet-incomingmsg) = 1.0
plasma4(applet-kdeobservatory) = 0.2
plasma4(applet-knowledgebase) = 0.1
plasma4(applet-konqprofiles) = 1.0
plasma4(applet-konsoleprofiles) = 1.0
plasma4(applet-lancelot_launcher) = 1.9.5
plasma4(applet-lancelot_part) = 1.5
plasma4(applet-leavenote) = 1.0
plasma4(applet-life) = 0.8
plasma4(applet-magnifique) = 0.1
plasma4(applet-mediaplayer) = 0.1
plasma4(applet-nowplaying) = 1.0
plasma4(applet-opendesktop) = 0.1
plasma4(applet-opendesktop_activities) = 0.1
plasma4(applet-pastebin) = 1.0
plasma4(applet-plasma_applet_notes) = 1.0
plasma4(applet-plasma_applet_rtm) = 0.1
plasma4(applet-previewer) = 1.0
plasma4(applet-qalculate) = 0.7.2
plasma4(containment-org.kde.griddesktop) = 0.1
plasma4(containment-org.kde.groupingdesktop) = 0.1
plasma4(containment-org.kde.groupingpanel) = 0.1
plasma4(dataengine-comic)  
plasma4(dataengine-kdeobservatory) = 0.1
plasma4(dataengine-microblog)  
plasma4(dataengine-potd)  
plasma4(dataengine-rtm) = 0.1
plasma4(packagestructure-comic) = pre0.1
plasma4(runner-CharacterRunner) = 1
plasma4(runner-audioplayercontrol) = 0.1
plasma4(runner-browserhistory) = 1.0
plasma4(runner-katesessions) = 1.0
plasma4(runner-konquerorsessions) = 1.0
plasma4(runner-konsolesessions) = 1.0
plasma4(runner-kopete_runner) = 0.1
plasma4(runner-krunner_spellcheck) = 1.0
plasma4(runner-org.kde.datetime) = 1.0
plasma4(runner-org.kde.events_runner) = 0.3.0
plasma4(runner-techbase) = 1.0
plasma4(runner-unitconverter) = 1.0
plasma4(runner-wikipedia) = 1.0
plasma4(runner-wikitravel) = 1.0
plasma_applet_bball.so()(64bit)  
plasma_applet_binaryclock.so()(64bit)  
plasma_applet_blackboard.so()(64bit)  
plasma_applet_bookmarks.so()(64bit)  
plasma_applet_bubblemon.so()(64bit)  
plasma_applet_calculator.so()(64bit)  
plasma_applet_charselect.so()(64bit)  
plasma_applet_comic.so()(64bit)  
plasma_applet_dict.so()(64bit)  
plasma_applet_eyes.so()(64bit)  
plasma_applet_fifteenPuzzle.so()(64bit)  
plasma_applet_fileWatcher.so()(64bit)  
plasma_applet_frame.so()(64bit)  
plasma_applet_fuzzy_clock.so()(64bit)  
plasma_applet_incomingmsg.so()(64bit)  
plasma_applet_kdeobservatory.so()(64bit)  
plasma_applet_knowledgebase.so()(64bit)  
plasma_applet_kolourpicker.so()(64bit)  
plasma_applet_konqprofiles.so()(64bit)  
plasma_applet_konsoleprofiles.so()(64bit)  
plasma_applet_lancelot_launcher.so()(64bit)  
plasma_applet_lancelot_part.so()(64bit)  
plasma_applet_leavenote.so()(64bit)  
plasma_applet_life.so()(64bit)  
plasma_applet_luna.so()(64bit)  
plasma_applet_magnifique.so()(64bit)  
plasma_applet_mediaplayer.so()(64bit)  
plasma_applet_microblog.so()(64bit)  
plasma_applet_news.so()(64bit)  
plasma_applet_notes.so()(64bit)  
plasma_applet_nowplaying.so()(64bit)  
plasma_applet_opendesktop.so()(64bit)  
plasma_applet_opendesktop_activities.so()(64bit)  
plasma_applet_paste.so()(64bit)  
plasma_applet_pastebin.so()(64bit)  
plasma_applet_plasmaboard.so()(64bit)  
plasma_applet_previewer.so()(64bit)  
plasma_applet_qalculate.so()(64bit)  
plasma_applet_rssnow.so()(64bit)  
plasma_applet_rtm.so()(64bit)  
plasma_applet_showdashboard.so()(64bit)  
plasma_applet_showdesktop.so()(64bit)  
plasma_applet_spellcheck.so()(64bit)  
plasma_applet_timer.so()(64bit)  
plasma_applet_unitconverter.so()(64bit)  
plasma_applet_weather.so()(64bit)  
plasma_applet_weatherstation.so()(64bit)  
plasma_applet_webslice.so()(64bit)  
plasma_comic_krossprovider.so()(64bit)  
plasma_containment_griddesktop.so()(64bit)  
plasma_containment_groupingdesktop.so()(64bit)  
plasma_containment_groupingpanel.so()(64bit)  
plasma_engine_comic.so()(64bit)  
plasma_engine_kdeobservatory.so()(64bit)  
plasma_engine_microblog.so()(64bit)  
plasma_engine_ocs.so()(64bit)  
plasma_engine_potd.so()(64bit)  
plasma_engine_rtm.so()(64bit)  
plasma_packagestructure_comic.so()(64bit)  
plasma_potd_apodprovider.so()(64bit)  
plasma_potd_epodprovider.so()(64bit)  
plasma_potd_flickrprovider.so()(64bit)  
plasma_potd_oseiprovider.so()(64bit)  
plasma_potd_wcpotdprovider.so()(64bit)  
plasma_runner_datetime.so()(64bit)  
plasma_runner_events.so()(64bit)  
plasma_wallpaper_mandelbrot.so()(64bit)  
plasma_wallpaper_pattern.so()(64bit)  
plasma_wallpaper_virus.so()(64bit)  
plasma_wallpaper_weather.so()(64bit)  
kdeplasma-addons = 4.6.3-1.fc15
kdeplasma-addons(x86-64) = 4.6.3-1.fc15&lt;/pre&gt;
&lt;p&gt;(The &lt;i&gt;Provides&lt;/i&gt; starting with “&lt;code&gt;plasma4(&lt;/code&gt;” are the new, automatically detected ones.)&lt;/p&gt;
&lt;p&gt;The next task is going to be asking upstream Plasma for feedback on this work and on how to proceed, because my next tasks will require closer interaction with Plasma upstream.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/51/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/51/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=51&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">GSoC 2011 Proposal Accepted</title>
		<link href="https://kevinkofler.wordpress.com/2011/04/25/gsoc-2011-proposal-accepted/"/>
		<id>http://kevinkofler.wordpress.com/?p=16</id>
		<updated>2011-04-25T22:49:22+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;I have been notified today that my proposal was &lt;a href=&quot;http://www.google-melange.com/gsoc/project/google/gsoc2011/kevinkofler/7001&quot;&gt;accepted&lt;/a&gt;! I’m looking forward to working on KDE Plasma Dependency Generation and PackageKit Integration during the summer. As posted in a previous blog post, my &lt;a href=&quot;https://fedoraproject.org/wiki/User:Kkofler/GSoC_2011_Proposal&quot;&gt;full proposal&lt;/a&gt; (minus telephone number) can be found in the Fedora Wiki.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/16/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/16/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=16&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Submission deadline passed</title>
		<link href="https://kevinkofler.wordpress.com/2011/04/08/submission-deadline-passed/"/>
		<id>http://kevinkofler.wordpress.com/?p=14</id>
		<updated>2011-04-08T19:17:13+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;So the submission deadline has now passed. I proofread my proposal again today and decided it was fine as is.&lt;/p&gt;
&lt;p&gt;Now I have to wait a little more than 2 weeks for the notification of the results (hopefully acceptance).&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/14/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/14/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=14&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="https://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Proposal submitted</title>
		<link href="https://kevinkofler.wordpress.com/2011/04/06/proposal-submitted/"/>
		<id>http://kevinkofler.wordpress.com/?p=8</id>
		<updated>2011-04-06T02:48:09+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;I submitted a first version of my proposal. The submitted proposal (without my telephone number &lt;img src=&quot;https://s-ssl.wordpress.com/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;-)&quot; class=&quot;wp-smiley&quot; /&gt; ) can be found at:&lt;br /&gt;
&lt;a href=&quot;https://fedoraproject.org/wiki/User:Kkofler/GSoC_2011_Proposal&quot;&gt;https://fedoraproject.org/wiki/User:Kkofler/GSoC_2011_Proposal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The title of my proposal is: KDE Plasma Dependency Generation and PackageKit Integration.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/8/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/8/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kevinkofler.wordpress.com/8/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/kevinkofler.wordpress.com/8/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kevinkofler.wordpress.com/8/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/facebook/kevinkofler.wordpress.com/8/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kevinkofler.wordpress.com/8/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/twitter/kevinkofler.wordpress.com/8/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kevinkofler.wordpress.com/8/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/kevinkofler.wordpress.com/8/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kevinkofler.wordpress.com/8/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/kevinkofler.wordpress.com/8/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kevinkofler.wordpress.com/8/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/kevinkofler.wordpress.com/8/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=8&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="http://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Google Summer of Code 2011</title>
		<link href="https://kevinkofler.wordpress.com/2011/04/04/google-summer-of-code-2011/"/>
		<id>http://kevinkofler.wordpress.com/?p=5</id>
		<updated>2011-04-04T08:11:42+00:00</updated>
		<content type="html" xml:lang="en">
			&lt;img src=&quot;http://planet.fedoraproject.org/summer-coding/images/heads/default.png&quot;  alt=&quot;&quot; style=&quot;float: right;&quot;&gt;
 &lt;p&gt;I’m applying to participate as a student in the Google Summer of Code 2011, with Fedora as the mentoring organization.&lt;/p&gt;
&lt;p&gt;If accepted, this blog will cover the progress of the project.&lt;/p&gt;
&lt;p&gt;Expect more information (proposal etc.) to be posted soon.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kevinkofler.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/kevinkofler.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kevinkofler.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/kevinkofler.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kevinkofler.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/facebook/kevinkofler.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kevinkofler.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/twitter/kevinkofler.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kevinkofler.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/kevinkofler.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kevinkofler.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/kevinkofler.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kevinkofler.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/kevinkofler.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=kevinkofler.wordpress.com&amp;amp;blog=21831563&amp;amp;post=5&amp;amp;subd=kevinkofler&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; height=&quot;1&quot; border=&quot;0&quot; width=&quot;1&quot; /&gt;&lt;div class=&quot;sharedaddy&quot;&gt;&lt;/div&gt;</content>
		<author>
			<name>Kevin Kofler</name>
			<uri>https://kevinkofler.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Kevin Kofler » GSoC</title>
			<subtitle type="html">Kevin Kofler's blog</subtitle>
			<link rel="self" href="http://kevinkofler.wordpress.com/category/gsoc/feed/"/>
			<id>https://kevinkofler.wordpress.com</id>
		</source>
	</entry>

</feed>
