<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://planet.apache.org/committers/">
	<title>Planet Apache</title>
	<link>http://planet.apache.org/committers/</link>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="http://taint.org/2013/06/18/235802a.html" />
			<rdf:li rdf:resource="http://rollerweblogger.org/roller/entry/how_wayin_does_orchestration" />
			<rdf:li rdf:resource="http://drbacchus.com/redhat-summit-summary" />
			<rdf:li rdf:resource="http://raibledesigns.com/rd/entry/developing_with_angularjs_part_i" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/EdwardJYoonsBlog/~3/xqj6ATYMmnM/it.html" />
			<rdf:li rdf:resource="http://fermigier.com/blog/2013/06/presentation-de-la-roadmap-du-gt-logiciel-libre/" />
			<rdf:li rdf:resource="http://fermigier.com/blog/2013/06/discours-de-fleur-pellerin-sur-le-logiciel-libre/" />
			<rdf:li rdf:resource="http://raibledesigns.com/rd/entry/father_s_day_weekend_at" />
			<rdf:li rdf:resource="http://taint.org/2013/06/17/235802a.html" />
			<rdf:li rdf:resource="http://dissociatedpress.net/blog/2013/06/17/get-ready-to-hack-at-the-collaboration-conference/" />
			<rdf:li rdf:resource="http://drbacchus.com/vupoint-magic-wand" />
			<rdf:li rdf:resource="http://bryanpendleton.blogspot.com/2013/06/tom-fassbenders-jmt-hike.html" />
			<rdf:li rdf:resource="http://bryanpendleton.blogspot.com/2013/06/shear-keys.html" />
			<rdf:li rdf:resource="http://drbacchus.com/open-help-conference-2013" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/ApacheCamel/~3/fi9V2tH7Cfo/introducing-new-apache-camel-based-ipaas.html" />
			<rdf:li rdf:resource="http://blog.tirasa.net/blogs/index.php/ilgrosso/apache-syncope-1-1-2" />
			<rdf:li rdf:resource="http://macstrac.blogspot.com/2013/06/introducing-apache-camel-based-open.html" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/ShalinSays/~3/O5Subw_450w/53177112825" />
			<rdf:li rdf:resource="http://taint.org/2013/06/15/235802a.html" />
			<rdf:li rdf:resource="http://bahumbug.wordpress.com/2013/06/15/cui-bono/" />
			<rdf:li rdf:resource="http://taint.org/2013/06/14/235801a.html" />
			<rdf:li rdf:resource="http://techfeast-hiranya.blogspot.com/2013/06/more-reasons-to-love-python-lesson-on.html" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/posterous/wbyo/~3/d0aWeD70n6o/the-cloudstack-collab-conference-is-almost-here.html" />
			<rdf:li rdf:resource="http://bryanpendleton.blogspot.com/2013/06/im-starting-to-get-nervous-about-losing.html" />
			<rdf:li rdf:resource="http://sberyozkin.blogspot.com/2013/06/jax-rs-20-is-out.html" />
			<rdf:li rdf:resource="http://raibledesigns.com/rd/entry/life_update1" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/EdwardJYoonsBlog/~3/wwOJuaMJ8cs/www.html" />
			<rdf:li rdf:resource="http://shane.curcuru.name/blog/2013/06/midlife-crisis-schedule/" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/robweir/antic-atom/~3/3E17Hq80dQg/the-power-of-brand-and-the-power-of-product-part-2.html" />
			<rdf:li rdf:resource="http://bryanpendleton.blogspot.com/2013/06/i-continue-to-be-baffled-by-e-book.html" />
			<rdf:li rdf:resource="http://www.symphonious.net/2013/06/12/importing-an-ant-buildfile-multiple-times/" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/links/ZvUZ/~3/oUC_P1nwzTM/" />
			<rdf:li rdf:resource="http://bahumbug.wordpress.com/2013/06/10/new-laptop/" />
			<rdf:li rdf:resource="http://blog.mikemccandless.com/2013/06/build-your-own-finite-state-transducer.html" />
			<rdf:li rdf:resource="http://blog.jpountz.net/post/52492720447" />
			<rdf:li rdf:resource="http://bsnyderblog.blogspot.com/2013/06/removereinstall-of-macports.html" />
			<rdf:li rdf:resource="http://timbish.blogspot.com/2013/06/apachenmsactivemq-v160-released.html" />
			<rdf:li rdf:resource="http://bsnyderblog.blogspot.com/2011/09/installing-postgresql-90-on-mac-os-x.html" />
			<rdf:li rdf:resource="http://bsnyderblog.blogspot.com/2013/04/after-upgrading-macports-recently-i.html" />
			<rdf:li rdf:resource="http://blog.tirasa.net/blogs/index.php/coffeetime/customize-your-apache-syncope-console" />
			<rdf:li rdf:resource="http://blog.david-reid.com/2013/06/05/variable-pitch-take-2/" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/ShalinSays/~3/F_v6e6b1EQs/52076543498" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/ApacheCamel/~3/wuQUImcQUN8/see-you-soon-at-camelone-2013.html" />
			<rdf:li rdf:resource="http://www.open4dev.com/journal/2013/6/3/drools-starter-review.html" />
			<rdf:li rdf:resource="http://blog.ruwan.org/2013/06/new-in-ultraesb-20-metrics-and.html" />
			<rdf:li rdf:resource="http://drbacchus.com/mac-os-x-time-machine-disks-on-linux" />
			<rdf:li rdf:resource="http://www.jgeppert.com/2013/06/struts2-jquery-plugin-3-6-0-and-struts2-bootstrap-plugin-1-6-1-available/" />
			<rdf:li rdf:resource="http://rajdavies.blogspot.com/2013/05/connecting-applications-everywhere-with.html" />
			<rdf:li rdf:resource="http://iocanel.blogspot.com/2010/07/wicket-spring-3-jpa2-hibernate-osgi.html" />
			<rdf:li rdf:resource="http://iocanel.blogspot.com/2010/07/creating-custom-hibernate-osgi-bundles.html" />
			<rdf:li rdf:resource="http://timbish.blogspot.com/2013/05/win-free-copy-of-packts-instant-apache.html" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/killerbees/planetapache/~3/387Flvqgp7s/note-to-self.html" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/posterous/wbyo/~3/-hsqVfnrEQc/inaugural-cloudstack-dc-and-nova-user-group.html" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/robweir/antic-atom/~3/wW-8gorl7Bc/openoffice-for-tablet.html" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/EdwardJYoonsBlog/~3/ke9Nhcrvt1g/keep-your-eyes-open.html" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/ApacheCamel/~3/3nF3G6Ap2WE/long-stacktraces-in-apache-camel-no-more.html" />
			<rdf:li rdf:resource="http://timbish.blogspot.com/2013/05/new-activemq-book-published.html" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/posterous/wbyo/~3/pGsPAPRhnI8/cloudstack-410-voting-restarted.html" />
			<rdf:li rdf:resource="http://feedproxy.google.com/~r/FiveOne/~3/D5kE7aOLLEI/" />
			<rdf:li rdf:resource="http://communityovercode.com/2013/05/congratulations-2013-apache-board/" />
		</rdf:Seq>
	</items>

<item rdf:about="http://taint.org/2013/06/18/235802a.html">
	<title>Justin Mason: Links for 2013-06-18</title>
	<link>http://taint.org/2013/06/18/235802a.html</link>
	<content:encoded>&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;https://www.openrightsgroup.org/blog/2013/how-the-eu-commission-caved-to-us-demands-to-water-down-its-privacy-law&quot; title=&quot;Open Rights Group - EU Commission caved to US demands to drop anti-PRISM privacy clause&quot;&gt;Open Rights Group – EU Commission caved to US demands to drop anti-PRISM privacy clause&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;Reports this week revealed that the US successfully pressed the European Commission to drop sections of the Data Protection Regulation that would, as the Financial Times explains, “have nullified any US request for technology and telecoms companies to hand over data on EU citizens.  The article [...] would have prohibited transfers of personal information to a third country under a legal request, for example the one used by the NSA for their PRISM programme, unless “expressly authorized by an international agreement or provided for by mutual legal assistance treaties or approved by a supervisory authority.”  The Article was deleted from the draft Regulation proper, which was published shortly afterwards in January 2012. The reports suggest this was due to intense pressure from the US. Commission Vice-President Viviane Reding favoured keeping the the clause, but other Commissioners seemingly did not grasp the significance of the article. &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:org&quot;&gt;org&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:privacy&quot;&gt;privacy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:us&quot;&gt;us&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:surveillance&quot;&gt;surveillance&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:fisaaa&quot;&gt;fisaaa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:viviane-reding&quot;&gt;viviane-reding&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:prism&quot;&gt;prism&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:nsa&quot;&gt;nsa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:ec&quot;&gt;ec&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:eu&quot;&gt;eu&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:data-protection&quot;&gt;data-protection&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.practicalecommerce.com/articles/4059-Are-Verified-by-Visa-and-MasterCard-SecureCode-Conversion-Killers-&quot; title=&quot;Verified by Visa and MasterCard SecureCode kill 10-12% of your business&quot;&gt;Verified by Visa and MasterCard SecureCode kill 10-12% of your business&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As Chris Shiflett noted: not only are they bad for security, they’re bad for business too.  &lt;/p&gt;&lt;blockquote&gt;12 percent of users consider abandoning [an online shopping transaction] when they see either the Verified by Visa or the American Express SafeKey logos, while 10 percent will consider abandoning when the see the MasterCard Secure card logo.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:ecommerce&quot;&gt;ecommerce&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:vbv&quot;&gt;vbv&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:online-shopping&quot;&gt;online-shopping&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:mastercard&quot;&gt;mastercard&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:visa&quot;&gt;visa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:securecode&quot;&gt;securecode&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:security&quot;&gt;security&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:fail&quot;&gt;fail&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.outsideonline.com/outdoor-adventure/As-Freezing-Persons-Recollect-the-Snow--First-Chill--Then-Stupor--Then-the-Letting-Go.html?page=all&quot; title=&quot;The Cold Hard Facts of Freezing to Death&quot;&gt;The Cold Hard Facts of Freezing to Death&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;an amazing account of near-death from hypothermia (via Dor)&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:via:dor&quot;&gt;via:dor&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:hypothermia&quot;&gt;hypothermia&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:cold&quot;&gt;cold&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:medicine&quot;&gt;medicine&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:science&quot;&gt;science&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:non-fiction&quot;&gt;non-fiction&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2013-06-18T23:58:02+00:00</dc:date>
</item>
<item rdf:about="http://rollerweblogger.org/roller/entry/how_wayin_does_orchestration">
	<title>Dave Johnson: Tomorrow night: How Wayin does Cloud Orchestration</title>
	<link>http://rollerweblogger.org/roller/entry/how_wayin_does_orchestration</link>
	<content:encoded>&lt;p&gt;I've already mentioned this on Twitter and LinkedIn, but just in case you missed it: I'll be speaking tomorrow night at the &lt;a href=&quot;http://www.meetup.com/Triangle-DevOps/events/121662952&quot;&gt;Triangle AWS and Triangle DevOps&lt;/a&gt; joint meetup at &lt;a href=&quot;http://argylesocial.com/&quot;&gt;Argyle Social&lt;/a&gt; in Durham, NC. I'll give a quick overview of cloud orchestration and &lt;a href=&quot;http://wayinhub.com&quot;&gt;Wayin Hub&lt;/a&gt;. Then I'll dive into the details of how we automate deployment, scaling and backups for Wayin Hub using AWS and AWS Cloud Formation.&lt;/p&gt;

&lt;p&gt;As a little teaser, here's a GIF animation of my automated deployment slide:&lt;/p&gt;

&lt;p&gt;
&lt;img alt=&quot;Automated Deployment diagram&quot; src=&quot;http://rollerweblogger.org/roller/mediaresource/3786a296-e083-42c3-863c-4c8599efc239&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;For more information check the &lt;a href=&quot;http://www.meetup.com/Triangle-DevOps/events/121662952&quot;&gt;Triangle DevOps page&lt;/a&gt; for the event.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-18T22:06:23+00:00</dc:date>
</item>
<item rdf:about="http://drbacchus.com/redhat-summit-summary">
	<title>Rich Bowen: RedHat Summit Summary</title>
	<link>http://drbacchus.com/redhat-summit-summary</link>
	<content:encoded>&lt;p&gt;Last week I attended the &lt;a href=&quot;http://www.redhat.com/summit/&quot;&gt;Red Hat Summit&lt;/a&gt; in Boston. It was, for me, equal parts pep rally and intensive OpenStack training.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://videos.cdn.redhat.com/2013-summit-keynotes-whitehurst.mp4&quot;&gt;Jim Whitehurst's keynote&lt;/a&gt; was just great, because it reemphasized how much RedHat really *gets* Open Source, at all levels of the organization. So, this part was pep rally for me, and confirmed to me that RedHat is the place where I want to be. Same for &lt;a href=&quot;http://videos.cdn.redhat.com/2013-summit-keynotes-cormier.mp4&quot;&gt;Paul Cormier's keynote&lt;/a&gt;. Both of these are well worth watching if you care about cloud computing, IaaS, or PaaS, or expect to at any time in the near future.&lt;/p&gt;&lt;p&gt;I attended a number of sessions about OpenStack, and you can see a wrapup of all of that content in &lt;a href=&quot;http://openstack.redhat.com/forum/discussion/222/red-hat-summit-2013-openstack-keynotes-videos-presentations/p1&quot;&gt;Perry's blog post about the conference&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;And I helped out at the &lt;a href=&quot;http://openstack.redhat.com/&quot;&gt;RDO&lt;/a&gt; table in the Developers Lounge. In the process I met many of the engineers that I'll be working with, and I learned quite a bit about RDO and OpenStack, as well as who I need to go to when there's something I don't know yet. And I got to play around some with &lt;a href=&quot;http://trystack.org&quot;&gt;TryStack&lt;/a&gt;, a free service where you can experiment with an RDO installation, launch virtual machines, and connect in to them to see how RDO behaves.&lt;/p&gt;&lt;p&gt;There's a huge amount of interest in OpenStack, and the ecosystem around it is full of really cool stuff. I was particularly interested in &lt;a href=&quot;https://www.openshift.com/&quot;&gt;OpenShift&lt;/a&gt;, with which you can launch a non-trivial webapp in just minutes minutes. Very cool stuff.&lt;/p&gt;&lt;p&gt;Another high point of the week was the RedHat Summit 5K.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/rbowen/9026285857/&quot; title=&quot;RedHat Summit, Boston by RichardBowen, on Flickr&quot;&gt;&lt;img alt=&quot;RedHat Summit, Boston&quot; height=&quot;180&quot; src=&quot;http://farm8.staticflickr.com/7312/9026285857_f46229c2b1_n.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;There were a few hundred people in the race, which wasn't a traditional road race, in the sense that there wasn't any official time keeper, and traffic wasn't stopped. We had pace groups (I ran with the 8:30 minute group), and a pacer who knew the route. I had set a goal of breaking 27, and I ran a 25:32, with which I was very pleased. This was the first 5k I've run since, I believe, 1994, so, not too shabby.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-18T20:05:37+00:00</dc:date>
</item>
<item rdf:about="http://raibledesigns.com/rd/entry/developing_with_angularjs_part_i">
	<title>Matt Raible: Developing with AngularJS - Part I: The Basics</title>
	<link>http://raibledesigns.com/rd/entry/developing_with_angularjs_part_i</link>
	<content:encoded>&lt;p&gt;There's &lt;a href=&quot;http://hop.ie/blog/angularjs-introduction/&quot;&gt;many&lt;/a&gt;, &lt;a href=&quot;http://www.raweng.com/blog/2013/01/30/introduction-to-angularjs-part-1/&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;http://www.codeproject.com/Articles/607873/Extending-HTML-with-AngularJS-Directives&quot;&gt;different&lt;/a&gt; &lt;a href=&quot;http://www.webdesignerdepot.com/2013/04/an-introduction-to-angularjs/&quot;&gt;introductions&lt;/a&gt; to &lt;a href=&quot;http://angularjs.org/&quot;&gt;AngularJS&lt;/a&gt; available on the internet. This article is not another introduction, but rather a story about my learning experience. It all started way back in January of this year. I was working as a UI Architecture Consultant at Taleo/Oracle, my client for the last 21 months. My gig there ended last month, but they agreed to let me publish a series of articles about the knowledge I gained.&lt;/p&gt;

&lt;h3 id=&quot;background&quot;&gt;Project Background&lt;/h3&gt;
&lt;p&gt;The Director of Product Management had been working on the concepts for a new project - codenamed &quot;Visual MyView&quot;. Below is a mockup he created for our kickoff meeting on January 4th.
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://farm3.staticflickr.com/2872/8904352595_1678cfd1ab_c.jpg&quot; rel=&quot;lightbox[angular-dashboard1]&quot; title=&quot;My Dashboard - Original Mockup&quot;&gt;&lt;img alt=&quot;My Dashboard - Original Mockup&quot; height=&quot;296&quot; src=&quot;http://farm3.staticflickr.com/2872/8904352595_1678cfd1ab.jpg&quot; style=&quot;border: 1px solid silver;&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
From his original email about the above mockup:
&lt;/p&gt;
&lt;div class=&quot;quote&quot;&gt;
    &lt;p&gt;The intent here is that one of the columns has rows that have a similar width. The rows could be dragged and dropped into a different order – or potentially the two columns could also be reordered. The rows will basically be comprised of similar widgets. You can see in the mockup how the first two rows might look – and sample widgets. The widgets shown can be configured by the end user, as well as the order in which they are displayed. Other requirements given to us were the following.
    &lt;/p&gt;
    &lt;ul&gt;&lt;li&gt;Row 1 is comprised of 'summary' widgets that are 'todo' items. Reviews needing done – approvals required – etc.&lt;/li&gt;
        &lt;li&gt;Row 2 will be a graph row – having graphs and charts to display information – larger squares will build this row.&lt;/li&gt;
        &lt;li&gt;Row 3's content was not determined yet.&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;I started the initial layout with static HTML and CSS and had a wireframe to show by mid January.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://farm3.staticflickr.com/2885/8904969226_c33d020e07_c.jpg&quot; rel=&quot;lightbox[angular-dashboard1]&quot; title=&quot;Wireframe&quot;&gt;&lt;img alt=&quot;Wireframe&quot; height=&quot;268&quot; src=&quot;http://farm3.staticflickr.com/2885/8904969226_c33d020e07_n.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;By the end of January, we'd renamed the project to My Dashboard and had a working prototype using &lt;a href=&quot;http://randomibis.com/coolclock/&quot;&gt;CoolClock&lt;/a&gt; and &lt;a href=&quot;http://momentjs.com/&quot;&gt;moment.js&lt;/a&gt; for the clock in the top right, &lt;a href=&quot;http://angularjs.org/&quot;&gt;AngularJS&lt;/a&gt; to display widget data, &lt;a href=&quot;http://jqueryui.com/&quot;&gt;jQuery UI&lt;/a&gt; for drag-n-drop of rows and widgets, Bootstrap's &lt;a href=&quot;http://twitter.github.com/bootstrap/javascript.html#carousel&quot;&gt;Carousel&lt;/a&gt; for holding charts and &lt;a href=&quot;http://www.highcharts.com/&quot;&gt;Highcharts&lt;/a&gt; for rendering charts. For this prototype, we included 4 types of widgets:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Summary&lt;/li&gt;&lt;li&gt;Tasks&lt;/li&gt;&lt;li&gt;Charts&lt;/li&gt;&lt;li&gt;Reports&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;To create widgets, we had to decide on a common schema for them.&lt;/p&gt;
&lt;pre class=&quot;brush: js&quot;&gt;&quot;id&quot;: 1, // not necessary for display, but likely needed if we modify and save preferences
&quot;title&quot;: &quot;Appointments Today&quot;,
&quot;type&quot;: &quot;summary&quot;, // others include: task, chart, report
&quot;value&quot;: 3, 
&quot;description&quot;: &quot;10:30 Jim Smith&quot;,
&quot;events&quot;: &quot;url&quot;, // this can have click events
&quot;order&quot;: 1 // used to determine order
&lt;/pre&gt;
&lt;p&gt;Below is a screenshot of our wireframe with some sample widgets.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://farm9.staticflickr.com/8556/8904969540_1cfe0e56c7_c.jpg&quot; rel=&quot;lightbox[angular-dashboard1]&quot; title=&quot;Wireframe with Data&quot;&gt;&lt;img alt=&quot;Wireframe with Data&quot; height=&quot;342&quot; src=&quot;http://farm9.staticflickr.com/8556/8904969540_1cfe0e56c7.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h3 id=&quot;basics&quot;&gt;Angular Basics&lt;/h3&gt;
&lt;p&gt;The decision to use AngularJS came early on in the project, after I read Tyler Renelle's &lt;a href=&quot;https://gist.github.com/lefnire/4454814&quot;&gt;Rant: Backbone, Angular, Meteor, Derby&lt;/a&gt;. To learn AngularJS, I briefly looked at its homepage documentation and played with some examples. Then I stumbled upon Misko Hevery and Igor Minar's &lt;a href=&quot;http://parleys.com/play/5148922b0364bc17fc56c91b/about&quot;&gt;AngularJS Presentation from Devoxx 2012&lt;/a&gt;. At that time, the video wasn't publicly available (it's free now), so I had to buy a Parley's subscription ($79). It was well worth the money because that one hour video greatly contributed to my understanding of how AngularJS works. Another resource I used frequently to figure out how to do things was John Lindquist's &lt;a href=&quot;http://www.egghead.io/&quot;&gt;egghead.io&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To begin with, we wrote the JSON for a bunch of sample widgets and embedded them into the page as a &lt;code&gt;widgetData&lt;/code&gt; JavaScript variable.&lt;/p&gt;
&lt;pre class=&quot;brush: js&quot;&gt;var widgetData = [
    {&quot;id&quot;: 1, &quot;title&quot;: &quot;Appointments Today&quot;, &quot;type&quot;: &quot;summary&quot;, &quot;value&quot;: 3, &quot;description&quot;: &quot;10:30 Jim Smith&quot;, &quot;events&quot;: {&quot;click&quot;: &quot;alert('foo');&quot;}, &quot;order&quot;: 1},
    {&quot;id&quot;: 12, &quot;order&quot;: 2, &quot;title&quot;: &quot;Offer Approvals&quot;, &quot;type&quot;: &quot;task&quot;, &quot;class&quot;: &quot;sticky-note&quot;, &quot;value&quot;: 1},
    {&quot;id&quot;: 103, &quot;title&quot;: &quot;Browser market shares at a specific website, 2010&quot;, &quot;order&quot;: 1, &quot;type&quot;: &quot;chart&quot;, &quot;chartType&quot;: &quot;pie&quot;, 
         &quot;tooltip&quot;: {&quot;pointFormat&quot;: &quot;{series.name}: &amp;lt;b&amp;gt;{point.percentage}%&amp;lt;/b&amp;gt;&quot;, &quot;percentageDecimals&quot;: 1}, &quot;series&quot;: [
         {&quot;type&quot;: &quot;pie&quot;, &quot;name&quot;: &quot;Browser share&quot;, &quot;data&quot;: [
             [&quot;Firefox&quot;, 45.0],
             [&quot;IE&quot;, 26.8],
             {&quot;name&quot;: &quot;Chrome&quot;, &quot;y&quot;: 12.8, &quot;sliced&quot;: true, &quot;selected&quot;: true},
             [&quot;Safari&quot;, 8.5],
             [&quot;Opera&quot;, 6.2],
             [&quot;Others&quot;, 0.7]
         ]}
    ]},
    ...
];
&lt;/pre&gt;
&lt;p&gt;I used &lt;a href=&quot;https://github.com/angular/angular-seed&quot;&gt;angular-seed&lt;/a&gt; to create the initial structure of the prototype, and continued using the same JavaScript file names when we moved it into the product I worked on. Since the application takes a while to login and render the My Dashboard page (when working remotely), I decided not to use the &lt;a href=&quot;http://karma-runner.github.io/0.8/index.html&quot;&gt;Karma&lt;/a&gt; testing framework that ships with Angular. Below is what our directory structure looked like for our prototype.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://farm3.staticflickr.com/2860/8904352305_e3b3d40f80_c.png&quot; rel=&quot;lightbox[angular-dashboard1]&quot; title=&quot;Angular Seed Directory Structure&quot;&gt;&lt;img alt=&quot;Angular Seed Directory Structure&quot; height=&quot;459&quot; src=&quot;http://farm3.staticflickr.com/2860/8904352305_e3b3d40f80_o.png&quot; width=&quot;327&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;The JavaScript files in the &quot;js&quot; folder are the most important for Angular. The first file, &lt;code&gt;app.js&lt;/code&gt;, loads the other files:&lt;/p&gt;
&lt;pre class=&quot;brush: js&quot;&gt;angular.module('dashboard', ['dashboard.filters', 'dashboard.services', 'dashboard.directives']);
&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;controllers.js&lt;/code&gt; file contains the Controllers (functions) that get the data and make it available to the page. Here's the code for our first controller:&lt;/p&gt;
&lt;pre class=&quot;brush: js&quot;&gt;'use strict';

/* Controllers */
function WidgetController($scope) {
    $scope.widgets = widgetData;
}
&lt;/pre&gt;
&lt;p&gt;This puts the widgets in scope and then we were able to render them using Angular's &lt;a href=&quot;http://docs.angularjs.org/api/ng.directive:ngRepeat&quot;&gt;ngRepeat&lt;/a&gt; directive and the following HTML:&lt;/p&gt;
&lt;pre class=&quot;brush: html&quot;&gt;&amp;lt;div ng-app=&quot;dashboard&quot; class=&quot;dashboard&quot;&amp;gt;
    &amp;lt;div class=&quot;container-widgets&quot; ng-controller=&quot;WidgetController&quot; ng-cloak&amp;gt;
        &amp;lt;div class=&quot;row-fluid&quot;&amp;gt;
            &amp;lt;div class=&quot;span9&quot;&amp;gt;
                &amp;lt;ul class=&quot;widgets&quot;&amp;gt;
                    &amp;lt;li id=&quot;summary-bar&quot;&amp;gt;
                        &amp;lt;div class=&quot;heading&quot;&amp;gt;Summary&amp;lt;/div&amp;gt;
                        &amp;lt;ul class=&quot;tiles&quot;&amp;gt;
                            &amp;lt;li class=&quot;span3&quot; ng-repeat=&quot;widget in widgets | filter:{type: 'summary'} | orderBy: 'order'&quot;&amp;gt;
                                &amp;lt;h3 class=&quot;events&quot;&amp;gt;{{widget.value}}&amp;lt;/h3&amp;gt;
                                &amp;lt;div class=&quot;title&quot;&amp;gt;{{widget.title}}&amp;lt;/div&amp;gt;
                                &amp;lt;div class=&quot;desc&quot;&amp;gt;{{widget.description}}&amp;lt;/div&amp;gt;
                            &amp;lt;/li&amp;gt;
                        &amp;lt;/ul&amp;gt;
                    &amp;lt;/li&amp;gt;
                    &amp;lt;li id=&quot;task-bar&quot;&amp;gt;
                        &amp;lt;div class=&quot;heading&quot;&amp;gt;My Tasks&amp;lt;/div&amp;gt;
                        &amp;lt;ul class=&quot;tasks&quot;&amp;gt;
                            &amp;lt;li class=&quot;task {{widget.class}}&quot; ng-repeat=&quot;widget in widgets | filter: {type: 'task'} | orderBy: 'order'&quot;&amp;gt;
                                &amp;lt;div class=&quot;title events&quot;&amp;gt;{{widget.title}}&amp;lt;/div&amp;gt;
                                &amp;lt;div class=&quot;value&quot;&amp;gt;{{widget.value}}&amp;lt;/div&amp;gt;
                            &amp;lt;/li&amp;gt;
                        &amp;lt;/ul&amp;gt;
                    &amp;lt;/li&amp;gt;
                    &amp;lt;li id=&quot;chart-bar&quot;&amp;gt;
                        &amp;lt;div class=&quot;heading&quot;&amp;gt;Charts&amp;lt;/div&amp;gt;
                        &amp;lt;div id=&quot;chartCarousel&quot; class=&quot;carousel slide&quot;&amp;gt;
                            &amp;lt;ol class=&quot;carousel-indicators&quot;&amp;gt;
                                &amp;lt;li data-target=&quot;#chartCarousel&quot;
                                    ng-repeat=&quot;widget in widgets | filter: {type: 'chart'} | orderBy: 'order'&quot;
                                    data-slide-to=&quot;{{$index}}&quot; ng-class=&quot;{active: $index == 0}&quot;&amp;gt;&amp;lt;/li&amp;gt;
                            &amp;lt;/ol&amp;gt;
                            &amp;lt;div class=&quot;carousel-inner&quot;&amp;gt;
                                &amp;lt;div class=&quot;item chart&quot;
                                     ng-repeat=&quot;widget in widgets | filter: {type: 'chart'} | orderBy: 'order'&quot;
                                     ng-class=&quot;{active: $index == 0}&quot;&amp;gt;
                                    &amp;lt;chart class=&quot;widget&quot; value=&quot;{{widget}}&quot; type=&quot;{{widget.chartType}}&quot;&amp;gt;&amp;lt;/chart&amp;gt;
                                &amp;lt;/div&amp;gt;
                            &amp;lt;/div&amp;gt;
                            &amp;lt;a class=&quot;left carousel-control&quot; href=&quot;#chartCarousel&quot; data-slide=&quot;prev&quot;&amp;gt;‹&amp;lt;/a&amp;gt;
                            &amp;lt;a class=&quot;right carousel-control&quot; href=&quot;#chartCarousel&quot; data-slide=&quot;next&quot;&amp;gt;›&amp;lt;/a&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/li&amp;gt;
                &amp;lt;/ul&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;span3&quot;&amp;gt;
                &amp;lt;!-- clock and reports --&amp;gt;
            &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;The beginning of this HTML shows how Angular is instantiated: &lt;strong&gt;ng-app&lt;/strong&gt; matches the name defined in &lt;code&gt;app.js&lt;/code&gt;, &lt;strong&gt;ng-controller&lt;/strong&gt; instantiates the &lt;code&gt;WidgetController&lt;/code&gt; and &lt;strong&gt;ng-cloak&lt;/strong&gt; is used to hide everything until its processed.&lt;/p&gt;
&lt;pre class=&quot;brush: html&quot;&gt;&amp;lt;div ng-app=&quot;dashboard&quot; class=&quot;dashboard&quot;&amp;gt;
    &amp;lt;div class=&quot;container-widgets&quot; ng-controller=&quot;WidgetController&quot; ng-cloak&amp;gt;
&lt;/pre&gt;
&lt;p&gt;If you take a closer look at the way ng-repeat attributes, you'll see how &lt;strong&gt;filters&lt;/strong&gt; are used to filter data. There's &lt;a href=&quot;http://docs.angularjs.org/api/ng.filter:filter&quot;&gt;&lt;em&gt;filter&lt;/em&gt;&lt;/a&gt;&lt;em&gt; &lt;/em&gt;and &lt;a href=&quot;http://docs.angularjs.org/api/ng.filter:orderBy&quot;&gt;&lt;em&gt;orderBy&lt;/em&gt;&lt;/a&gt; filters that are built in and allow you to filter data. The &lt;em&gt;filter &lt;/em&gt;filter allows you to query arrays by strings, objects and even functions. In the following code block, &quot;task&quot; widgets are filtered, ordered and displayed.&lt;/p&gt;
&lt;pre class=&quot;brush: html&quot;&gt;&amp;lt;li class=&quot;task {{widget.class}}&quot; ng-repeat=&quot;widget in widgets | filter: {type: 'task'} | orderBy: 'order'&quot;&amp;gt;
    &amp;lt;div class=&quot;title events&quot;&amp;gt;{{widget.title}}&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;value&quot;&amp;gt;{{widget.value}}&amp;lt;/div&amp;gt;
&amp;lt;/li&amp;gt;
&lt;/pre&gt;
&lt;p&gt;This was pretty straightforward, but we quickly noticed that if a widget had HTML in its title, it didn't display correctly (rendering the raw HTML). To process the HTML, we had to use the &lt;a href=&quot;http://docs.angularjs.org/api/ngSanitize.directive:ngBindHtml&quot;&gt;ngBindHtml&lt;/a&gt; directive (tip: directives are camelCase, but written with dashes in HTML).&lt;/p&gt;
&lt;pre class=&quot;brush: html&quot;&gt;&amp;lt;div class=&quot;title events&quot; ng-bind-html=&quot;widget.title&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;After getting this to work, we noticed that some titles weren't fully rendered because they were hidden with overflow: hidden. We tried adding a tooltip with &lt;code&gt;title=&quot;{{widget.title}}&quot;&lt;/code&gt;, but ran into the same issue. I &lt;a href=&quot;https://groups.google.com/d/topic/angular/hG-T1bsmlnk/discussion&quot;&gt;sent an email &lt;/a&gt;to the AngularJS Google Group and received a solution: create an htmlTitle directive:&lt;/p&gt;
&lt;pre class=&quot;brush: js&quot;&gt;.directive('htmlTitle', function ($sanitize) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            attrs.$observe('htmlTitle', function (title) {
                // convert &amp;amp;value; to HTML
                var html = angular.element('&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;').html($sanitize(title)).text();
                element.attr('title', html);
                element.html(html);
            });
        }
    }
})
&lt;/pre&gt;
&lt;p&gt;Usage:&lt;/p&gt;
&lt;pre class=&quot;brush: html&quot;&gt;&amp;lt;div class=&quot;title events&quot; ng-bind-html=&quot;widget.title&quot; html-title=&quot;{{widget.title}}&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;h3 id=&quot;dragndrop&quot;&gt;Drag-and-Drop&lt;/h3&gt;
&lt;p&gt;To implement drag-and-drop functionality, I originally used jQuery UI's &lt;a href=&quot;http://jqueryui.com/sortable/&quot;&gt;sortable&lt;/a&gt;. At the bottom of the page, the following code initialized sorting for the various lists:&lt;/p&gt;
&lt;pre class=&quot;brush: js&quot;&gt;$(document).ready(function() {
    $('.widgets').sortable({
        cursor: &quot;move&quot;,
        handle: &quot;.heading&quot;
    }).disableSelection();
    $('.tiles,.tasks').sortable();
    var carousel = $('.carousel');
    $(carousel).carousel({
        interval: 0
    });
};
&lt;/pre&gt;
&lt;p&gt;As you can see, it also initializes the carousel and stops it from cycling automatically.&lt;/p&gt;
&lt;h3 id=&quot;carousel-issues&quot;&gt;Carousel Issues&lt;/h3&gt;
&lt;p&gt;The first problem I ran into with Bootstrap's Carousel was a strange error from Highcharts. If you look in the above HTML, you'll see there's a &lt;code&gt;&amp;lt;chart&amp;gt;&lt;/code&gt; element. This is processed by a &lt;a href=&quot;https://github.com/rootux/angular-highcharts-directive/blob/master/src/directives/highchart.js&quot;&gt;highcharts directive&lt;/a&gt;. When I tried to use this directive for Highcharts in a carousel, it results in the following error:&lt;/p&gt;
&lt;p class=&quot;alert alert-error&quot;&gt;
TypeError: Cannot read property 'length' of undefined at Object.ob.setMaxTicks
&lt;/p&gt;
&lt;p&gt;This seemed to be caused by the following css in Bootstrap:&lt;/p&gt;
&lt;pre class=&quot;brush: css&quot;&gt;.carousel-inner &amp;gt; .item { display: none }
&lt;/pre&gt;
&lt;p&gt;When I added an override with &quot;display: block&quot; to my stylesheet, everything worked, but the charts were stacked instead of in a carousel. To fix this, I modified the directive to show/hide the &quot;item&quot; element so Highcharts was able to write to it. I also &lt;a href=&quot;https://github.com/rootux/angular-highcharts-directive/issues/1&quot;&gt;logged an issue&lt;/a&gt; for this.&lt;/p&gt;
&lt;pre class=&quot;brush: js&quot;&gt;if (element.parent().not(':visible')) {
    element.parent().show();
}
var chart = new Highcharts.Chart(newSettings);
element.parent().attr('style', '');
&lt;/pre&gt;
&lt;h3 id=&quot;grouping&quot;&gt;ngRepeat and Grouping&lt;/h3&gt;
&lt;p&gt;The last thing I accomplished in our end-of-January prototype was rendering 2 charts side-by-side. I got it working with plain HTML, created a &quot;groupBy&quot; filter for Angular and tried to get it to work with the following:&lt;/p&gt;
&lt;pre class=&quot;brush: html&quot;&gt;&amp;lt;div id=&quot;chartCarousel&quot; class=&quot;carousel slide&quot;&amp;gt;
    &amp;lt;ol class=&quot;carousel-indicators&quot;&amp;gt;
        &amp;lt;li data-target=&quot;#chartCarousel&quot; ng-repeat=&quot;widget in widgets | filter: {type: 'chart'} | groupBy&quot;
            data-slide-to=&quot;{{$index}}&quot; ng-class=&quot;{active: $index == 0}&quot;&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ol&amp;gt;
    &amp;lt;div class=&quot;carousel-inner&quot;&amp;gt;
        &amp;lt;div class=&quot;item&quot; ng-repeat=&quot;widget in widgets | filter: {type: 'chart'} | groupBy&quot; ng-class=&quot;{active: $index == 0}&quot;&amp;gt;
            &amp;lt;div class=&quot;widget&quot;&amp;gt;{{widget[0].title}}&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;widget&quot;&amp;gt;{{widget[1].title}}&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;a class=&quot;left carousel-control&quot; href=&quot;#chartCarousel&quot; data-slide=&quot;prev&quot;&amp;gt;‹&amp;lt;/a&amp;gt;
    &amp;lt;a class=&quot;right carousel-control&quot; href=&quot;#chartCarousel&quot; data-slide=&quot;next&quot;&amp;gt;›&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;This all worked like I expected it to in Chrome, but I the following errors showed in my console.&lt;/p&gt;
&lt;p class=&quot;alert alert-error&quot;&gt;
Error: 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations:
&lt;/p&gt;
&lt;p&gt;I &lt;a href=&quot;https://groups.google.com/d/topic/angular/gEv1-YV-Ojg/discussion&quot;&gt;sent an email&lt;/a&gt; to the Angular Google Group and received a link to &lt;a href=&quot;https://groups.google.com/d/msg/angular/IEIQok-YkpU/oKuLvzCnAcoJ&quot;&gt;a discussion&lt;/a&gt; where I found a &quot;chunk&quot; filter that solved the problem. This worked great, but I wanted to make it more responsive.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;If the user has a screen size big enough to fit 2 charts, show 2 charts and paginate by 2.&lt;/li&gt;&lt;li&gt;If the user has a small screen size that only fits 1 chart, show 1 and paginate by 1.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;To solve #1 and #2, I ended up rendering two different sections (with classes .oneup and .twoup) and show/hide them based on screen size.&lt;/p&gt;
&lt;pre class=&quot;brush: html&quot;&gt;&amp;lt;li id=&quot;chart-bar&quot;&amp;gt;
    &amp;lt;div class=&quot;heading&quot;&amp;gt;Charts&amp;lt;/div&amp;gt;
    &amp;lt;div id=&quot;chartCarousel1&quot; class=&quot;carousel slide oneup&quot; style=&quot;display: none&quot;&amp;gt;
        &amp;lt;ol class=&quot;carousel-indicators&quot;&amp;gt;
            &amp;lt;li data-target=&quot;#chartCarousel1&quot;
                ng-repeat=&quot;widget in widgets | filter: {type: 'chart'} | orderBy: 'order'&quot;
                data-slide-to=&quot;{{$index}}&quot; ng-class=&quot;{active: $index == 0}&quot;&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;/ol&amp;gt;
        &amp;lt;div class=&quot;carousel-inner&quot;&amp;gt;
            &amp;lt;div class=&quot;item chart&quot;
                 ng-repeat=&quot;widget in widgets | filter: {type: 'chart'} | orderBy: 'order'&quot;
                 ng-class=&quot;{active: $index == 0}&quot;&amp;gt;
                &amp;lt;chart class=&quot;widget&quot; value=&quot;{{widget}}&quot; type=&quot;{{widget.chartType}}&quot;&amp;gt;&amp;lt;/chart&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;a class=&quot;left carousel-control&quot; href=&quot;#chartCarousel1&quot; data-slide=&quot;prev&quot;&amp;gt;‹&amp;lt;/a&amp;gt;
        &amp;lt;a class=&quot;right carousel-control&quot; href=&quot;#chartCarousel1&quot; data-slide=&quot;next&quot;&amp;gt;›&amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div id=&quot;chartCarousel2&quot; class=&quot;carousel slide twoup&quot; style=&quot;display: none&quot;&amp;gt;
        &amp;lt;ol class=&quot;carousel-indicators&quot;&amp;gt;
            &amp;lt;li data-target=&quot;#chartCarousel2&quot;
                ng-repeat=&quot;widget in widgets | filter: {type: 'chart'} | chunk: 2 | orderBy: 'order'&quot;
                data-slide-to=&quot;{{$index}}&quot; ng-class=&quot;{active: $index == 0}&quot;&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;/ol&amp;gt;
        &amp;lt;div class=&quot;carousel-inner&quot;&amp;gt;
            &amp;lt;div class=&quot;item chart&quot;
                 ng-repeat=&quot;widget in widgets | filter: {type: 'chart'} | chunk: 2 | orderBy: 'order'&quot;
                 ng-class=&quot;{active: $index == 0}&quot;&amp;gt;
                &amp;lt;chart class=&quot;widget&quot; value=&quot;{{widget[0]}}&quot; type=&quot;{{widget[0].chartType}}&quot;&amp;gt;&amp;lt;/chart&amp;gt;
                &amp;lt;chart class=&quot;widget&quot; value=&quot;{{widget[1]}}&quot; type=&quot;{{widget[1].chartType}}&quot;&amp;gt;&amp;lt;/chart&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;a class=&quot;left carousel-control&quot; href=&quot;#chartCarousel2&quot; data-slide=&quot;prev&quot;&amp;gt;‹&amp;lt;/a&amp;gt;
        &amp;lt;a class=&quot;right carousel-control&quot; href=&quot;#chartCarousel2&quot; data-slide=&quot;next&quot;&amp;gt;›&amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/li&amp;gt;
&lt;/pre&gt;
&lt;p&gt;The JavaScript to show the correct number of charts is below:&lt;/p&gt;
&lt;pre class=&quot;brush: js&quot;&gt;var chartBar = $('#chart-bar');
function showCharts() {
    if (chartBar.width() &amp;lt; 960) {
        chartBar.find('.oneup').show();
        chartBar.find('.twoup').hide();
    } else {
        chartBar.find('.twoup').show();
        chartBar.find('.oneup').hide();
    }
}

$(document).ready(function () {
    showCharts();
});

$(window).resize(showCharts);
&lt;/pre&gt;
&lt;h3 id=&quot;summary&quot;&gt;Summary&lt;/h3&gt;
&lt;p&gt;Even though I got everything to work for our initial prototype using Angular and jQuery, it didn't quite feel like I was taking full advantage of Angular's power. In particular, I learned that Angular UI Bootstrap had their own carousel and Angular UI had a &lt;em&gt;sortable&lt;/em&gt; directive. My suspicions were confirmed when I read &lt;a href=&quot;http://stackoverflow.com/questions/14994391/how-do-i-think-in-angularjs-if-i-have-a-jquery-background&quot;&gt;How do I &quot;think in AngularJS&quot; if I have a jQuery background?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the next article, I'll talk about how I migrated to use Angular UI's &lt;a href=&quot;http://angular-ui.github.io/bootstrap/#/carousel&quot;&gt;carousel&lt;/a&gt; and &lt;a href=&quot;https://github.com/angular-ui/ui-sortable&quot;&gt;sortable&lt;/a&gt; directives, as well as integrating dialogs.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-18T16:59:27+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/EdwardJYoonsBlog/~3/xqj6ATYMmnM/it.html">
	<title>Edward J. Yoon: 한국 IT 대기업들에 대한 아쉬움</title>
	<link>http://feedproxy.google.com/~r/EdwardJYoonsBlog/~3/xqj6ATYMmnM/it.html</link>
	<content:encoded>제프 마크험에게 들어서 이미 알고 있었지만 호튼웍스가 한국에 지사를 설립한다는 기사[1]를 오늘 보게 되었다.&lt;br /&gt;
&lt;br /&gt;
내용 중 유독 눈에 띄는 문구가 있으니, ..&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span&gt;몇몇 국내회사가 하둡 분야의 오랜 경험을 보유했지만, 미국기업을 선호하는 국내의 기업용 솔루션 시장 풍토로 대우를 받지 못하는 상황이다.&lt;/span&gt;&lt;/blockquote&gt;
내가 NHN이나 KT같은 대기업을 7~8년 간 재직하면서 대기업 소속 직장인들에게 느낀게 있다라면, 도전의식의 결여, 조잡한 경쟁의식, 위계질서, 책임전가, 집단이기주의 등 이다.&lt;br /&gt;
&lt;br /&gt;
가령 내가, 우리네 대기업 개발자들이 필요한것을 개발하고 오픈소스화해서 한국 IT발전도 이끌자! 이러면, &quot;회사에 무슨 이익을 주는가?&quot;, 또는 &quot;이미 외국에 페이스북이나 트위터가 개발하고 그 기업에서 검증된 오픈소스를 쓰지 뭐하러?&quot; 라는 질문들이 나오며, 최종 결정은 보통 제 3자에 의해 개발된 외국산 오픈 소스를 사용하는 방향으로 협의 된다.&lt;br /&gt;
&lt;br /&gt;
어찌보면 생각해봐야할 문제처럼 보이긴 하는데, 그간 이런 논리로만 접근해서 한국 소프트웨어 산업이 이모냥 아니겠어. 비단 이런 예말고, 솔루션 도입이나 신사업 접근 방식도 이것과 모두 다르지 않다.&lt;br /&gt;
&lt;br /&gt;
여기서 협의라는 표현을 쓴 이유는, 뭔가 under the desk 에서는 보이지 않는 분쟁이 있다는 얘기다. 언제나 그러한 분쟁 내면에는 도전의식의 결여, 조잡한 경쟁의식, 집단이기주의에서 오는 다양한 의도가 숨겨져 있지 (굳이 자세히 설명은 안함).&lt;br /&gt;
&lt;br /&gt;
한편, &quot;기업 이윤 추구&quot;라는 큰 목적은 그 목적보다는 바텀업 문화와 창의성을 저해하는데 활용 된다. 무엇이 합리적이고 생산적인지 생각하는 것을 포기한 자들이 (물론 자신의 이익은 계산하겠지만) 주로 &quot;그래서 회사에 무슨 정량적 이익을 주는가?&quot; 란 공격으로 끝맺음 하려고 하지.&lt;br /&gt;
&lt;br /&gt;
고등학교 때 교련 수업받은 세대가 슬슬 물갈이 되지 않는 한, 내 생각에 한국 IT 대기업들의 미래는 어둡기만 함. 쉬운 문제가 아니지만 &quot;잡고있는 줄을 놔야 새로운 줄을 잡는다&quot;는 것을 깨닫고, 우리네 개발자들 스스로 창조적 직업이라 믿는다면, 앞으로 우리의 의식 수준을 높여야 할거다. 똑같은넘 되지말고, 화이팅~&lt;br /&gt;
&lt;br /&gt;
1. &lt;a href=&quot;http://www.zdnet.co.kr/news/news_view.asp?artice_id=20130529081754&quot;&gt;http://www.zdnet.co.kr/news/news_view.asp?artice_id=20130529081754&lt;/a&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/EdwardJYoonsBlog/~4/xqj6ATYMmnM&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-18T09:48:32+00:00</dc:date>
</item>
<item rdf:about="http://fermigier.com/blog/2013/06/presentation-de-la-roadmap-du-gt-logiciel-libre/">
	<title>Stefane Fermigier: Présentation de la roadmap du GT Logiciel Libre</title>
	<link>http://fermigier.com/blog/2013/06/presentation-de-la-roadmap-du-gt-logiciel-libre/</link>
	<content:encoded>&lt;p&gt;Retrouvez la présentation de la roadmap du GT Logiciel Libre que j'ai donnée hier (17 juin 2013) à la convention du Pôle de compétitivité Systematic :&lt;/p&gt;

&lt;p&gt;  &lt;/p&gt;&lt;div style=&quot;margin-bottom: 5px;&quot;&gt; &lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/sfermigier/roadmap-du-gt-logiciel-libre&quot; target=&quot;_blank&quot; title=&quot;Roadmap du GT Logiciel Libre 2013-2020&quot;&gt;Roadmap du GT Logiciel Libre 2013-2020&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/sfermigier&quot; target=&quot;_blank&quot;&gt;Stefane Fermigier&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-18T08:27:45+00:00</dc:date>
</item>
<item rdf:about="http://fermigier.com/blog/2013/06/discours-de-fleur-pellerin-sur-le-logiciel-libre/">
	<title>Stefane Fermigier: Discours de Fleur Pellerin sur le logiciel libre</title>
	<link>http://fermigier.com/blog/2013/06/discours-de-fleur-pellerin-sur-le-logiciel-libre/</link>
	<content:encoded>&lt;p&gt;Le 13 juin dernier, Fleur Pellerin était invitée à l'inauguration des nouveaux bureaux de Mozilla à Paris, et y a prononcé le discours, très remarqué, suivant :&lt;/p&gt;



&lt;p&gt;Que vous pouvez également télécharger directement (&lt;a href=&quot;http://www.fermigier.com/static/videos/Fleur-Pellerin-Mozilla-France.m4v&quot;&gt;fichier .m4v, taille: 84Mo&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;En voici la transcription :&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Madame la présidente, chère Mitchell, madame la vice-présidente, chère Debbie,&lt;/p&gt;

&lt;p&gt;Mesdames et messieurs, il y a vingt ans un grand chercheur a, je le cite, « pris le principe d’hypertexte et l’a relié au principe du TCP et du DNS, et alors boom, ce fut le World Wide Web. »&lt;/p&gt;

&lt;p&gt;Et en 1993, donc, le CERN, cet organisme de recherche européen qui avait inventé le Web a décidé de donner cette invention au monde, en la distribuant sous ce qu’on n’appelait pas encore une « licence libre ». Ce choix, anodin en apparence, a changé la face du monde.&lt;/p&gt;

&lt;p&gt;Il y a 10 ans, la fondation Mozilla naissait et quelques mois plus tard, cher Tristan Nitot, vous fondiez sa branche européenne. J’imagine combien cela doit vous faire plaisir d’être ici 10 ans après, dans ce magnifique hôtel particulier du XVIIIe siècle, ancienne demeure de l’ambassadeur d’Autriche, m’avez-vous dit tout à l’heure. Mozilla Firefox, construit sur l’ancien Netscape, et œuvrant inlassablement pour promouvoir les standards du Web, a aussi changé le Web et par là la manière dont nous nous informons et dont nous innovons.&lt;/p&gt;

&lt;p&gt;Je suis donc très fière d’inaugurer ce soir les nouveaux bureaux de la fondation Mozilla à Paris. Pourquoi être venue inaugurer ces nouveaux locaux ?&lt;/p&gt;

&lt;p&gt;D’abord en raison des valeurs de la fondation Mozilla, et du logiciel libre. Ces valeurs, ce sont l’accès à la connaissance pour tous, la confiance ou encore l’amplification des aspects d’intérêt publics d’internet. Ce sont aussi les valeurs sociales qui portent un modèle de société vertueux, ouvert, participatif, où toute donnée est d’abord considérée comme un bien accessible au plus grand nombre, et une source de connaissances que chacun peut utiliser, améliorer, partager. Le logiciel libre, les formats ouverts, c’est enfin une communauté de personnes qui constitue un véritable patrimoine de connaissances qu’est le code, sans cesse inachevé, toujours à enrichir. Au-delà des innovations et des technologies permises par le Web, des acteurs comme Wikimedia ou la fondation Mozilla ont démontré que l’innovation et le progrès peuvent aussi passer par le partage, l’absence de propriété. C’est une victoire essentielle sur les esprits qui nous permet aujourd’hui d’avancer dans d’autres domaines : je pense à l’open innovation ou à l’open data. Je sais que Mozilla n’est pas une formation politique, mais toutes ces valeurs résonnent particulièrement doux à une ministre de gauche comme moi, et je pense que le monde politique a des choses à apprendre de cette réussite.&lt;/p&gt;

&lt;p&gt;Par ailleurs le logiciel libre est aussi un atout décisif pour notre économie. À plus d’un titre il permet d’abord de lutter contre les phénomènes de dépendance technologique envers tous ces acteurs qui sont propriétaires de nos outils informatiques quotidiens, et est donc un véritable garant de la souveraineté numérique. De plus comme on le voit aujourd’hui, et contrairement à certaines idées reçues, le libre et l’open source sont créateurs d’emploi. Des modèles d’affaire originaux ont été créés et c’est un facteur important de productivité et de compétitivité pour les entreprises et les administrations. En effet elles peuvent ainsi mieux maîtriser leurs patrimoines respectifs et concentrer leurs efforts sur ce qui représente pour elles la valeur ajoutée. Enfin le logiciel libre remet en cause les rentes de situation, peu favorables à l’innovation, et par là-même aide à l’émergence de nouveaux champions économiques. L’émergence de Firefox et des navigateurs est emblématique de cette capacité.&lt;/p&gt;

&lt;p&gt;La France est souvent citée comme un des pays les plus actifs au monde dans le domaine du logiciel libre. La croissance soutenue dans ce secteur le confirme. Les chiffres sont éloquents : ce marché représentait en 2011 plus de 2 milliards d’euros, soit plus de 6% de la demande de logiciels et de services informatiques. Par ailleurs, il y a là un formidable levier d’emplois, environ 10 000 supplémentaires dans les 3 ans à venir, si les estimations de croissance du marché sont confirmées. Bref, ce sont des enjeux extrêmement importants. La décision de Mozilla, un acteur mondial de référence sur le logiciel libre, de s’implanter dans ces locaux, confirme l’attractivité de Paris comme place incontournable du numérique. Elle confirme l’excellence des formations françaises dans le domaine informatique et je suis certaine que les développeurs du monde entier seront attirés par les conditions d’accueil ici, dans ces magnifiques locaux.&lt;/p&gt;

&lt;p&gt;Mon objectif est bien sûr de renforcer encore ces atouts avec notamment le projet de quartiers numériques que nous allons créer dans une quinzaine de villes. Enfin, nous avons en France une communauté parmi les plus dynamiques dans le monde pour la conception et l’utilisation des logiciels libres, un atout à évidemment ne pas négliger. Avec les Assises de l’Entreprenariat, nous avons souhaité aller encore plus loin pour renforcer notre attractivité en mobilisant notamment toutes les compétences de France et d’ailleurs. C’est pour accompagner ce mouvement que le gouvernement travaille ardemment à la création d’un visa entrepreneur et d’un visa talent, car il est impératif d’attirer les talents créateurs du monde entier en leur offrant des conditions d’installation très rapides et simplifiées. Je dois aussi rappeler que le gouvernement prête une attention toute particulière à l’utilisation des logiciels libres. Par notre action nous visons à la renforcer. Le recours au logiciel libre est un levier d’action pour moderniser et rationaliser l’action publique.&lt;/p&gt;

&lt;p&gt;Le Libre n’est pas toujours la bonne ou la seule solution mais la circulaire du Premier Ministre de septembre 2012 concernant l’utilisation des logiciels libres dans l’administration fixe une ligne claire sur les cas où ces types de logiciels doivent être privilégiés. Les atouts du logiciel libre sont notamment, je cite, « un moindre coût, une souplesse d’utilisation, et un levier de discussion avec les éditeurs ». Il s’agit là d’une avancée majeure pour le logiciel libre dans les systèmes d’information de l’État, qui permet d’engager de véritables politiques publiques en matière de logiciel libre et d’open source.&lt;/p&gt;

&lt;p&gt;Pour conclure, je voudrais juste insister sur un point important que j’ai déjà évoqué mais que je tiens à marteler : l’open source est avant tout un vecteur d’innovation et de changement, un véritable gisement de productivité et de compétitivité pour les entreprises, et garantit la pérennité et l’indépendance de l’État. C’est pour cela que je souhaite que la France continue de jouer un rôle moteur dans le développement de ce secteur, et je suis sûre que la présence de Mozilla à Paris nous y aidera. J’ai parlé de 1993, de 2003, quoi de neuf en 2013 ? Cette année Mozilla lance son système d’exploitation pour mobiles et tablettes, Firefox OS, sur le même constat : promouvoir les formats ouverts et empêcher les systèmes fermés de contrôler notre environnement informatique. C’est une ambition un peu folle, mais probablement pas plus folle que de s’attaquer au marché des navigateurs qui était contrôlé à 95% par un seul acteur. Je vous souhaite donc le même succès que Firefox, et comme il sera en partie développé ici, je n’ai pas de doute sur la réussite de ce projet. Merci à tous.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Crédits&lt;/em&gt;: vidéo: &lt;a href=&quot;http://www.dicosmo.org/&quot;&gt;Roberto Di Cosmo&lt;/a&gt;, montage de la vidéo: &lt;a href=&quot;http://www.fermigier.com/&quot;&gt;Stefane Fermigier&lt;/a&gt;, transcription du discours: &lt;a href=&quot;http://www.framablog.org/index.php/post/2013/06/15/fleur-pellerin-logiciel-libre-mozilla&quot;&gt;Goofy, aKa, Z, Asta, Peekmo pour Framablog&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-18T07:09:56+00:00</dc:date>
</item>
<item rdf:about="http://raibledesigns.com/rd/entry/father_s_day_weekend_at">
	<title>Matt Raible: Father's Day Weekend at The Oregon Coast</title>
	<link>http://raibledesigns.com/rd/entry/father_s_day_weekend_at</link>
	<content:encoded>For the 5-year anniversary of our &lt;a href=&quot;http://raibledesigns.com/rd/entry/the_father_s_day_camping&quot;&gt;Father's Day Camping Trip&lt;/a&gt;, we decided to mix things up a bit. My parents were in Oregon for a friend's wedding, so we decided to fly to meet them there instead of flying them to Colorado. My sister hopped on &quot;Buttercup&quot; (her Harley) and drove to meet us from Washington. We also invited our good friends Clint and Autumn (who you might remember from &lt;a href=&quot;http://raibledesigns.com/rd/entry/costa_rica_was_awesome&quot;&gt;Costa Rica&lt;/a&gt;) and had a great time staying at &lt;a href=&quot;http://www.gearhartcottages.com/&quot;&gt;Gearhart Cottages&lt;/a&gt;. 
&lt;p&gt;&lt;/p&gt;
We didn't feel too bad about skipping camping since Trish held a &quot;Boot Camp&quot; with the kids and their friends at Stillwater Campground the week before. You might remember Stillwater from &lt;a href=&quot;http://raibledesigns.com/rd/entry/good_times_on_the_annual&quot;&gt;last year's Father's Day trip&lt;/a&gt;. 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Trish's Uncle John drove out to the coast to meet us and we did a really fun hike along Indian Beach to Ecola State Park. It was a real treat! It was also really fun to meet Clint and Autumn's 9 month old Brodie. As usual, Trish snapped some &lt;a href=&quot;http://www.flickr.com/photos/mcginityphoto/sets/72157634190527810/&quot;&gt;incredible photos&lt;/a&gt;.
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;

&lt;a rel=&quot;lightbox[fathersday2012]&quot; title=&quot;View from Ecola State Park Oregon&quot;&gt;&lt;img alt=&quot;View from Ecola State Park Oregon&quot; height=&quot;332&quot; src=&quot;http://farm8.staticflickr.com/7284/9071981163_9ecc04ec8f.jpg&quot; style=&quot;border: 1px solid black;&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://farm4.staticflickr.com/3675/9071962289_a7fc891f15_c.jpg&quot; rel=&quot;lightbox[fathersday2012]&quot; title=&quot;Raible Family on the Oregon coast&quot;&gt;&lt;img alt=&quot;Raible Family on the Oregon coast&quot; height=&quot;150&quot; src=&quot;http://farm4.staticflickr.com/3675/9071962289_a7fc891f15_q.jpg&quot; style=&quot;border: 1px solid black;&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm8.staticflickr.com/7404/9074185440_eebccb9acf_c.jpg&quot; rel=&quot;lightbox[fathersday2012]&quot; title=&quot;Abbie and Jack frolicking in the waves&quot;&gt;&lt;img alt=&quot;Abbie and Jack frolicking in the waves&quot; height=&quot;150&quot; src=&quot;http://farm8.staticflickr.com/7404/9074185440_eebccb9acf_q.jpg&quot; style=&quot;border: 1px solid black; margin-left: 15px;&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://farm3.staticflickr.com/2814/9074188854_f0b09a43ca_c.jpg&quot; rel=&quot;lightbox[fathersday2012]&quot; title=&quot;Kalin and Joe on the beach&quot;&gt;&lt;img alt=&quot;Kalin and Joe on the beach&quot; height=&quot;150&quot; src=&quot;http://farm3.staticflickr.com/2814/9074188854_f0b09a43ca_q.jpg&quot; style=&quot;border: 1px solid black; margin-left: 15px;&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;That was two weeks ago. We returned to Colorado, had some fun at &lt;a href=&quot;http://raibledesigns.com/rd/entry/play_vs_grails_smackdown_at&quot;&gt;ÜberConf&lt;/a&gt;, rocked out at a Def Leppard concert then enjoyed a few Rockies games before hopping in the car and heading to Montana. We spent the night at &lt;a href=&quot;http://www.usparklodging.com/yellowstone/roosevelt_lodge_cabins.php&quot;&gt;Roosevelt Lodge Cabins in Yellowstone&lt;/a&gt; and saw a plethora of buffalo, a couple bears and even a beaver while driving through.&lt;/p&gt;
&lt;p&gt;This morning, we woke up at &lt;a href=&quot;http://raibledesigns.com/rd/entry/the_cabin&quot;&gt;the cabin I was born in&lt;/a&gt;. &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://farm9.staticflickr.com/8160/7487341754_795f6ed123.jpg&quot; rel=&quot;lightbox[fathersday2012]&quot; title=&quot;The Cabin 2012&quot;&gt;&lt;img alt=&quot;The Cabin 2012&quot; height=&quot;238&quot; src=&quot;http://farm9.staticflickr.com/8160/7487341754_795f6ed123_n.jpg&quot; style=&quot;border: 1px solid black;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;We'll be working on my parent's retirement cabin, getting a float ready for the Swan Valley Parade and having a good ol' time with great friends for the next two weeks. After that, we're taking the kids to Hawaii for the first time. 
&lt;/p&gt;
&lt;p&gt;
Here's to summer vacations. I hope yours is spent with great people in beautiful places too.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-18T06:00:10+00:00</dc:date>
</item>
<item rdf:about="http://taint.org/2013/06/17/235802a.html">
	<title>Justin Mason: Links for 2013-06-17</title>
	<link>http://taint.org/2013/06/17/235802a.html</link>
	<content:encoded>&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://artstore.olschinsky.at/de/artists.php?aktion=details&amp;amp;id=cities-iii-05&quot; title=&quot;Atelier olschinsky - &quot;&gt;Atelier olschinsky – “Cities III 05″&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Fine Art Print on Hahnemuehle Photo Rag Bright White, 310g: 40x50cm up to 70x100cm.   Some great art based on decayed urban landscape shots, from a Vienna-based design studio.  See also http://english.mashkulture.net/2011/10/17/atelier-olschinsky-cities-iii/ , http://www.mascontext.com/tag/atelier-olschinsky/&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:olschinsky&quot;&gt;olschinsky&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:cities&quot;&gt;cities&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:urban&quot;&gt;urban&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:decay&quot;&gt;decay&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:landscape&quot;&gt;landscape&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:art&quot;&gt;art&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:prints&quot;&gt;prints&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:want&quot;&gt;want&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.english.rfi.fr/visiting-france/20130603-possible-ban-factory-food-french-restaurants&quot; title=&quot;Possible ban on 'factory food' in French restaurants&quot;&gt;Possible ban on ‘factory food’ in French restaurants&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I am very much in favour of this in Ireland, too.  The pre-prepared food thing makes for crappy food:  &lt;/p&gt;&lt;blockquote&gt;In an attempt to crack down on the proliferation of restaurants serving boil-in-a-bag or microwave-ready meals, which could harm France’s reputation for good food, MP Daniel Fasquelle is putting a new law to parliament this month.  [...] The proposed law would limit the right to use the word “restaurant” to eateries where food is prepared on site using raw ingredients, either fresh or frozen. Exceptions would be made for some prepared products, such as bread, charcuterie and ice cream.&lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:restaurants&quot;&gt;restaurants&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:food&quot;&gt;food&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:france&quot;&gt;france&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:cuisine&quot;&gt;cuisine&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:boil-in-the-bag&quot;&gt;boil-in-the-bag&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:microwave&quot;&gt;microwave&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:cooking&quot;&gt;cooking&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:daniel-fasquelle&quot;&gt;daniel-fasquelle&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.dehora.net/journal/2013/06/15/on-scala/&quot; title=&quot;On Scala&quot;&gt;On Scala&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;great, comprehensive review of the language, its pros and misfeatures, from Bill de hOra&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:scala&quot;&gt;scala&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:languages&quot;&gt;languages&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:coding&quot;&gt;coding&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:fp&quot;&gt;fp&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:reviews&quot;&gt;reviews&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://codeascraft.com/2013/06/11/introducing-kale/&quot; title=&quot;Introducing Kale « Code as Craft&quot;&gt;Introducing Kale « Code as Craft&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Etsy have implemented a tool to perform auto-correlation of service metrics, and detection of deviation from historic norms:  &lt;/p&gt;&lt;blockquote&gt;at Etsy, we really love to make graphs. We graph everything! Anywhere we can slap a StatsD call, we do. As a result, we’ve found ourselves with over a quarter million distinct metrics. That’s far too many graphs for a team of 150 engineers to watch all day long! And even if you group metrics into dashboards, that’s still an awful lot of dashboards if you want complete coverage.  Of course, if a graph isn’t being watched, it might misbehave and no one would know about it. And even if someone caught it, lots of other graphs might be misbehaving in similar ways, and chances are low that folks would make the connection.  We’d like to introduce you to the Kale stack, which is our attempt to fix both of these problems. It consists of two parts: Skyline and Oculus. We first use Skyline to detect anomalous metrics. Then, we search for that metric in Oculus, to see if any other metrics look similar. At that point, we can make an informed diagnosis and hopefully fix the problem.&lt;/blockquote&gt;  It’ll be interesting to see if they can get this working well.  I’ve found it can be tricky to get working with low false positives, without massive volume to “smooth out” spikes caused by normal activity.  Amazon had one particularly successful version driving severity-1 order drop alarms, but it used massive event volumes and still had periodic false positives.  Skyline looks like it will alarm on a single anomalous data point, and in the comments Abe notes “our algorithms err on the side of noise and so alerting would be very noisy.”&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:etsy&quot;&gt;etsy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:monitoring&quot;&gt;monitoring&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:service-metrics&quot;&gt;service-metrics&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:alarming&quot;&gt;alarming&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:deviation&quot;&gt;deviation&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:correlation&quot;&gt;correlation&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:data&quot;&gt;data&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:search&quot;&gt;search&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:graphs&quot;&gt;graphs&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:oculus&quot;&gt;oculus&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:skyline&quot;&gt;skyline&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:kale&quot;&gt;kale&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:false-positives&quot;&gt;false-positives&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.sigmetrics.org/sigmetrics2013/pdfs/p93.pdf&quot; title=&quot;Paper: &quot;&gt;Paper: “Root Cause Detection in a Service-Oriented Architecture” [pdf]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;LinkedIn have implemented an automated root-cause detection system:  &lt;/p&gt;&lt;blockquote&gt; This paper introduces MonitorRank, an algorithm that can reduce the time, domain knowledge, and human effort required to ?nd the root causes of anomalies in such service-oriented architectures. In the event of an anomaly, MonitorRank provides a ranked order list of possible root causes for monitoring teams to investigate. MonitorRank uses the historical and current time-series metrics of each sensor as its input, along with the call graph generated between sensors to build an unsupervised model for ranking. Experiments on real production outage data from LinkedIn, one of the largest online social networks, shows a 26% to 51% improvement in mean average precision in ?nding root causes compared to baseline and current state-of-the-art methods.&lt;/blockquote&gt;  This is a topic close to my heart after working on something similar for 3 years in Amazon!  Looks interesting, although (a) I would have liked to see more case studies and examples of “real world” outages it helped with; and (b) it’s very much a machine-learning paper rather than a systems one, and there is no discussion of fault tolerance in the design of the detection system, which would leave me worried that in the case of a large-scale outage event, the system itself will disappear when its help is most vital.  (This was a major design influence on our team’s work.)  Overall, particularly given those 2 issues, I suspect it’s not in production yet.  Ours certainly was ;)&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:linkedin&quot;&gt;linkedin&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:soa&quot;&gt;soa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:root-cause&quot;&gt;root-cause&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:alarming&quot;&gt;alarming&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:correlation&quot;&gt;correlation&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:service-metrics&quot;&gt;service-metrics&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:machine-learning&quot;&gt;machine-learning&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:graphs&quot;&gt;graphs&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:monitoring&quot;&gt;monitoring&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://techblog.netflix.com/2013/06/announcing-zuul-edge-service-in-cloud.html?m=1&quot; title=&quot;Announcing Zuul: Edge Service in the Cloud&quot;&gt;Announcing Zuul: Edge Service in the Cloud&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Netflix’ library to implement “edge services” — ie. a front end to their API, web servers, and streaming servers.  Some interesting features: dynamic filtering using Groovy scripts; Hystrix for software load balancing, fault tolerance, and error handling for originated HTTP requests; fine-grained service metrics; Archaius for configuration; and canary requests to detect overload risks.  Pretty complex though&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:edge-services&quot;&gt;edge-services&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:api&quot;&gt;api&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:netflix&quot;&gt;netflix&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:zuul&quot;&gt;zuul&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:archaius&quot;&gt;archaius&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:canary-requests&quot;&gt;canary-requests&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:http&quot;&gt;http&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:groovy&quot;&gt;groovy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:hystrix&quot;&gt;hystrix&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:load-balancing&quot;&gt;load-balancing&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:fault-tolerance&quot;&gt;fault-tolerance&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:error-handling&quot;&gt;error-handling&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:configuration&quot;&gt;configuration&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://blog.cloudflare.com/cloudflare-prism-secure-ciphers&quot; title=&quot;CloudFlare, PRISM, and Securing SSL Ciphers&quot;&gt;CloudFlare, PRISM, and Securing SSL Ciphers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Matthew Prince of CloudFlare has an interesting theory on the NSA’s capabilities:  &lt;/p&gt;&lt;blockquote&gt;It is not inconceivable that the NSA has data centers full of specialized hardware optimized for SSL key breaking. According to data shared with us from a survey of SSL keys used by various websites, the majority of web companies were using 1024-bit SSL ciphers and RSA-based encryption through 2012. Given enough specialized hardware, it is within the realm of possibility that the NSA could within a reasonable period of time reverse engineer 1024-bit SSL keys for certain web companies. If they’d been recording the traffic to these web companies, they could then use the broken key to go back and decrypt all the transactions.  While this seems like a compelling theory, ultimately, we remain skeptical this is how the PRISM program described in the slides actually works. Cracking 1024-bit keys would be a big deal and likely involve some cutting-edge cryptography and computational power, even for the NSA. The largest SSL key that is known to have been broken to date is 768 bits long. While that was 4 years ago, and the NSA undoubtedly has some of the best cryptographers in the world, it’s still a considerable distance from 768 bits to 1024 bits — especially given the slide suggests Microsoft’s key would have to had been broken back in 2007.  Moreover, the slide showing the dates on which “collection began” for various companies also puts the cost of the program at $20M/year. That may sound like a lot of money, but it is not for an undertaking like this. Just the power necessary to run the server farm needed to break a 1024-bit key would likely cost in excess of $20M/year. While the NSA may have broken 1024-bit SSL keys as part of some other program, if the slide is accurate and complete, we think it’s highly unlikely they did so as part of the PRISM program. A not particularly glamorous alternative theory is that the NSA didn’t break the SSL key but instead just cajoled rogue employees at firms with access to the private keys — whether the companies themselves, partners they’d shared the keys with, or the certificate authorities who issued the keys in the first place — to turn them over. That very well may be possible on a budget of $20M/year.  [....] Google is a notable anomaly. The company uses a 1024-bit key, but, unlike all the other companies listed above, rather than using a default cipher suite based on the RSA encryption algorithm, they instead prefer the Elliptic Curve Diffie-Hellman Ephemeral (ECDHE) cipher suites. Without going into the technical details, a key difference of ECDHE is that they use a different private key for each user’s session. This means that if the NSA, or anyone else, is recording encrypted traffic, they cannot break one private key and read all historical transactions with Google. The NSA would have to break the private key generated for each session, which, in Google’s case, is unique to each user and regenerated for each user at least every 28-hours.  While ECDHE arguably already puts Google at the head of the pack for web transaction security, to further augment security Google has publicly announced that they will be increasing their key length to 2048-bit by the end of 2013. Assuming the company continues to prefer the ECDHE cipher suites, this will put Google at the cutting edge of web transaction security. &lt;/blockquote&gt;  2048-bit ECDHE sounds like the way to go, and CloudFlare now support that too. &lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:prism&quot;&gt;prism&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:security&quot;&gt;security&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:nsa&quot;&gt;nsa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:cloudflare&quot;&gt;cloudflare&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:ssl&quot;&gt;ssl&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:tls&quot;&gt;tls&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:ecdhe&quot;&gt;ecdhe&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:elliptic-curve&quot;&gt;elliptic-curve&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:crypto&quot;&gt;crypto&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:rsa&quot;&gt;rsa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:key-lengths&quot;&gt;key-lengths&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.independent.ie/irish-news/courts/record-companies-to-target-20-more-pirate-sites-after-court-ruling-29341201.html&quot; title=&quot;Record companies to target 20 more pirate sites after court ruling - Independent.ie&quot;&gt;Record companies to target 20 more pirate sites after court ruling – Independent.ie&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Looks like IRMA are following the lead of the UK’s BPI, by chasing the proxy sites next:  &lt;/p&gt;&lt;blockquote&gt;Up to 20 internet sites are to be targeted by an organisation representing record companies in a move to stamp out the illegal pirating of music and other copyright material.  The Irish Recorded Music Association (IRMA) said it would be immediately moving against the 20 “worst offenders” to “take out” internet sites involved in the illegal downloading of copyright work.&lt;/blockquote&gt;  However, looks like this will involve more court time:  &lt;blockquote&gt;Last night IRMA director general, Dick Doyle said the High Court ruling was only the first step in “taking out many internet sites involved in illegally downloading music. “We will be back in court very shortly to take out five to 10 other sites. We have already selected a total of 20 of the worst offender sites and we will go after the next five in the very near future,” he said.&lt;/blockquote&gt;  That’s not going to be cheap!&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:courts&quot;&gt;courts&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:ireland&quot;&gt;ireland&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:law&quot;&gt;law&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:irma&quot;&gt;irma&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:piracy&quot;&gt;piracy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:pirate-bay&quot;&gt;pirate-bay&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:bpi&quot;&gt;bpi&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:proxies&quot;&gt;proxies&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:filesharing&quot;&gt;filesharing&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:copyright&quot;&gt;copyright&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.slideshare.net/r39132/q-con-ny2013modernwebsitescalabilityfinal-22989785&quot; title=&quot;Building a Modern Website for Scale (QCon NY 2013) [slides]&quot;&gt;Building a Modern Website for Scale (QCon NY 2013) [slides]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;some great scalability ideas from LinkedIn.  Particularly interesting are the best practices suggested for scaling web services:  1. store client-call timeouts and SLAs in Zookeeper for each REST endpoint; 2. isolate backend calls using async/threadpools; 3. cancel work on failures; 4. avoid sending requests to GC’ing hosts; 5. rate limits on the server.  #4 is particularly cool.  They do this using a “GC scout” request before every “real” request; a cheap TCP request to a dedicated “scout” Netty port, which replies near-instantly.  If it comes back with a 1-packet response within 1 millisecond, send the real request, else fail over immediately to the next host in the failover set.  There’s still a potential race condition where the “GC scout” can be achieved quickly, then a GC starts just before the “real” request is issued.  But the incidence of GC-blocking-request is probably massively reduced.  It also helps against packet loss on the rack or server host, since packet loss will cause the drop of one of the TCP packets, and the TCP retransmit timeout will certainly be higher than 1ms, causing the deadline to be missed.  (UDP would probably work just as well, for this reason.)  However, in the case of packet loss in the client’s network vicinity, it will be vital to still attempt to send the request to the final host in the failover set regardless of a GC-scout failure, otherwise all requests may be skipped.  The GC-scout system also helps balance request load off heavily-loaded hosts, or hosts with poor performance for other reasons; they’ll fail to achieve their 1 msec deadline and the request will be shunted off elsewhere.  For service APIs with real low-latency requirements, this is a great idea.&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:gc-scout&quot;&gt;gc-scout&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:gc&quot;&gt;gc&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:java&quot;&gt;java&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:scaling&quot;&gt;scaling&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:scalability&quot;&gt;scalability&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:linkedin&quot;&gt;linkedin&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:qcon&quot;&gt;qcon&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:async&quot;&gt;async&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:threadpools&quot;&gt;threadpools&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:rest&quot;&gt;rest&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:slas&quot;&gt;slas&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:timeouts&quot;&gt;timeouts&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:networking&quot;&gt;networking&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:distcomp&quot;&gt;distcomp&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:netty&quot;&gt;netty&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:tcp&quot;&gt;tcp&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:udp&quot;&gt;udp&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:failover&quot;&gt;failover&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:fault-tolerance&quot;&gt;fault-tolerance&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:packet-loss&quot;&gt;packet-loss&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.privacysurgeon.org/blog/incision/why-i-cant-give-the-european-parliament-the-data-protection-analysis-it-wanted/&quot; title=&quot;Why I won’t give the European Parliament the data protection analysis it wanted&quot;&gt;Why I won’t give the European Parliament the data protection analysis it wanted&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Holy crap. Simon Davies rips into the EU data-protection reform disaster with gusto:  &lt;/p&gt;&lt;blockquote&gt;The situation was an utter disgrace. The advertising industry even gave an award to an Irish Minister for destroying some of the rights in the regulation while the UK managed to force a provision that would make the direct marketing industry a “legitimate” processing operation in its own right, putting it on the same level of lawful processing as fraud prevention. Things got to the point where even the most senior data protection officials in Europe stopped trying to influence events and had told me “let the chips fall as they may”. [...]  But let’s take a step back for a moment from this travesty. Out on the streets – while most may not know what data protection is – people certainly know what it is supposed to protect. People value their privacy and they will be vocal about attempts to destroy it. I had said as much to the joint parliamentary meeting, observing “the one element that has been left out of all these efforts is the public”. However, as the months rolled on, the only message being sent to the public was that data protection is an anachronism stitched together with self interest and impracticality. [...]  I wasn’t aware at the time that there was a vast stitch-up to kill the reforms. I cannot bring myself to present a temperate report with measured wording that pretends this is all just normal business. It isn’t normal business, and it should never be normal business in any civilized society. How does one talk in measured tones about such endemic hypocrisy and deception?  If you want to know who the real enemy of privacy is, don’t just look to the American agencies. The real enemy is right here in the European Parliament in the guise of MEPs who have knowingly sold our rights away to maintain powerful relationships. I’d like to say they were merely hoodwinked into supporting the vandalism, but many are smart people who knew exactly what they were doing. &lt;/blockquote&gt;  Nice work, Irish presidency!  His bottom line:  &lt;blockquote&gt;Is there a way forward? I believe so. First, governments should yield to common decency and scrap the illegitimate and poisoned Irish Council draft and hand the task to the Lithuanian Presidency that commences next month. Second, the Irish and British governments should be infinitely more transparent about their cooperation with intrusive interests that fuelled the deception. &lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:ireland&quot;&gt;ireland&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:eu&quot;&gt;eu&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:europe&quot;&gt;europe&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:reform&quot;&gt;reform&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:law&quot;&gt;law&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:data-protection&quot;&gt;data-protection&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:privacy&quot;&gt;privacy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:simon-davies&quot;&gt;simon-davies&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:meps&quot;&gt;meps&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:iab&quot;&gt;iab&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;https://blog.pinboard.in/2013/06/persuading_david_simon/&quot; title=&quot;Persuading David Simon (Pinboard Blog)&quot;&gt;Persuading David Simon (Pinboard Blog)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Maciej Ceglowski with a strongly-argued rebuttal of David Simon’s post about the NSA’s PRISM.  This point in particular is key:  &lt;/p&gt;&lt;blockquote&gt;The point is, you don’t need human investigators to find leads, you can have the algorithms do it [based on the call graph or network of who-calls-who]. They will find people of interest, assemble the watch lists, and flag whomever you like for further tracking. And since the number of actual terrorists is very, very, very small, the output of these algorithms will consist overwhelmingly of false positives.&lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:false-positives&quot;&gt;false-positives&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:maciej&quot;&gt;maciej&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:privacy&quot;&gt;privacy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:security&quot;&gt;security&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:nsa&quot;&gt;nsa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:prism&quot;&gt;prism&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:david-simon&quot;&gt;david-simon&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:accuracy&quot;&gt;accuracy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:big-data&quot;&gt;big-data&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:filtering&quot;&gt;filtering&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:anti-spam&quot;&gt;anti-spam&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.schneier.com/blog/archives/2013/06/blowback_from_t.html&quot; title=&quot;Schneier on Security: Blowback from the NSA Surveillance&quot;&gt;Schneier on Security: Blowback from the NSA Surveillance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unintended consequences on US-focused governance of the internet and cloud computing:  &lt;/p&gt;&lt;blockquote&gt;Writing about the new Internet nationalism, I talked about the ITU meeting in Dubai last fall, and the attempt of some countries to wrest control of the Internet from the US. That movement just got a huge PR boost. Now, when countries like Russia and Iran say the US is simply too untrustworthy to manage the Internet, no one will be able to argue.  We can’t fight for Internet freedom around the world, then turn around and destroy it back home. Even if we don’t see the contradiction, the rest of the world does.&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:internet&quot;&gt;internet&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:freedom&quot;&gt;freedom&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:cloud-computing&quot;&gt;cloud-computing&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:amazon&quot;&gt;amazon&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:google&quot;&gt;google&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:hosting&quot;&gt;hosting&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:usa&quot;&gt;usa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:us-politics&quot;&gt;us-politics&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:prism&quot;&gt;prism&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:nsa&quot;&gt;nsa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:surveillance&quot;&gt;surveillance&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2013-06-17T23:58:02+00:00</dc:date>
</item>
<item rdf:about="http://dissociatedpress.net/blog/2013/06/17/get-ready-to-hack-at-the-collaboration-conference/">
	<title>Joe Brockmeier: Get Ready to Hack at the Collaboration Conference</title>
	<link>http://dissociatedpress.net/blog/2013/06/17/get-ready-to-hack-at-the-collaboration-conference/</link>
	<content:encoded>&lt;p&gt;&lt;img class=&quot;left&quot; src=&quot;http://dissociatedpress.net/uploads/images/hack-day-success-baby.jpg&quot; /&gt; This coming Sunday (June 23rd) we'll be getting together at the CloudStack Collaboration Conference for &lt;a href=&quot;http://www.cloudstackcollab.org/hack/&quot;&gt;hack day&lt;/a&gt;, from 9:30 a.m. to 5:00 p.m. in the Santa Clara Convention Center.&lt;/p&gt;

&lt;p&gt;The hack day is being run using the BarCamp/unconference format – meaning that the sessions will be chosen Sunday by the folks who show up. Sessions might run an hour or all day, depending on how much interest there is and how much needs to be done.&lt;/p&gt;

&lt;p&gt;Have an idea for a session? A topic you want to lead or see discussed? &lt;a href=&quot;https://cwiki.apache.org/confluence/display/CLOUDSTACK/Hack+Day+at+CCC13&quot;&gt;Add it to the Hack Day at CCC13 page on the CloudStack Wiki&lt;/a&gt;. It is, of course, a wiki: &lt;em&gt;so edit boldly!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Don't let the &quot;hack day&quot; moniker fool you – non-development topics and sessions are more than welcome. Giles Sirett has proposed a marketing session, and we'll likely have at least one documentation session as well. If it's CloudStack-related, it's fair game.&lt;/p&gt;

&lt;p&gt;Pleased to see that we've got a pretty good selection of sessions already proposed, but we can always do with more. If you have an idea, put 'er up and show up Sunday ready to jam with the rest of the CloudStack community!&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-17T20:54:00+00:00</dc:date>
</item>
<item rdf:about="http://drbacchus.com/vupoint-magic-wand">
	<title>Rich Bowen: VuPoint Magic Wand portable scanner</title>
	<link>http://drbacchus.com/vupoint-magic-wand</link>
	<content:encoded>&lt;p&gt;I just bought, returned, and bought VuPoint MagicWand scanners.&lt;/p&gt;&lt;p&gt;Here's the story.&lt;/p&gt;&lt;p&gt;The first one I bought was &lt;a href=&quot;http://tm3.org/5&quot;&gt;this one&lt;/a&gt;, which is a hand-held scanner wand thingy that scans to a micro SD card. That part works great. The other feature was that you could transfer the files wirelessly. There wasn't much information as to what that actually means, so it sounded like a good idea.&lt;/p&gt;&lt;p&gt;Turns out that what it means is that the device advertises its own SSID, which you must connect to, and then open a web site on the device which lists the files. I don't know if it was browser incompatibility or what, but the list of files didn't actually link to the files - just listed them. Viewing the source, it certainly had the links in the HTML, but something was preventing those links from actually being displayed on the page. Weird.&lt;/p&gt;&lt;p&gt;So, having to disconnect from my work VPN to connect to my scanner isn't exactly a great idea. Also, the network has a fixed name (MAGICWAND) and password (123456789), which ensures that as soon as I switch it on, everyone in range has access to my images. Not exactly idea.&lt;/p&gt;&lt;p&gt;So, I returned it and got&lt;a href=&quot;http://tm3.org/6&quot;&gt; the one without wifi&lt;/a&gt;. There's a USB cable, or the SD card can just go into a normal SD card reader. Only a $20 price difference, but I don't care to pay $20 for functionality I don't want.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-17T20:16:14+00:00</dc:date>
</item>
<item rdf:about="http://bryanpendleton.blogspot.com/2013/06/tom-fassbenders-jmt-hike.html">
	<title>Bryan Pendleton: Tom Fassbender's JMT hike</title>
	<link>http://bryanpendleton.blogspot.com/2013/06/tom-fassbenders-jmt-hike.html</link>
	<content:encoded>&lt;p&gt;I'm completely loving Tom Fassbender's awesome series of articles about his three week epic hike on the John Muir Trail in June, 2012. &lt;/p&gt;&lt;p&gt;His writing style is great; I love the links to gear, locations, and background information, and the pictures are a lot of fun, too! &lt;/p&gt;&lt;p&gt;Here are the articles he's published so far, with more on the way (I hope): &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://fordsbasement.com/2013/06/10/john-muir-trail-day-1/&quot;&gt;&lt;i&gt;John Muir Trail Adventure Journal: Day One&lt;/i&gt;&lt;/a&gt;&lt;blockquote&gt; I talked briefly to a group of hikers headed toward Yosemite. They were complaining of the mosquitoes, which I didn’t think were that bad. (But they were going to get a lot worse before this hike was over). &lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fordsbasement.com/2013/06/11/john-muir-trail-day-2/&quot;&gt;&lt;i&gt;John Muir Trail Adventure Journal: Day Two&lt;/i&gt;&lt;/a&gt;&lt;blockquote&gt;I thought for a moment that maybe it was a bear until it heard me and looked up. It was just a mule deer. The deer along the trail, especially the does, proved to be almost totally unafraid of humans. It was kind of like being in a petting zoo. &lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fordsbasement.com/2013/06/12/john-muir-trail-day-3/&quot;&gt;&lt;i&gt;John Muir Trail Adventure Journal: Day Three&lt;/i&gt;&lt;/a&gt;&lt;blockquote&gt;A bit about trail names. &lt;p&gt;There are rules to these things. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;You can’t name yourself.&lt;/li&gt;&lt;li&gt;You can’t decline a trail name.&lt;/li&gt;&lt;li&gt;It should have some meaning and/or describe you, be it a good thing, a bad thing, or just a humorous thing.&lt;/li&gt;&lt;li&gt;Once you have one, you’re stuck with it for life and it follows you from trail to trail&lt;/li&gt;&lt;/ol&gt;Not all who have trail names abide by these rules, but everyone I talked to who used a trail name earned them by these rules. &lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fordsbasement.com/2013/06/13/john-muir-trail-day-4/&quot;&gt;&lt;i&gt;John Muir Trail Adventure Journal: Day Four&lt;/i&gt;&lt;/a&gt;&lt;blockquote&gt;As I crossed a bridge into the heart of the monument, I ran into a day hiker from the nearby campsite. He was the first person I’d seen in about 24 hours. It had been a strange kind of solitude that I didn’t even think about until I saw this guy. &lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fordsbasement.com/2013/06/14/john-muir-trail-day-5/&quot;&gt;&lt;i&gt;John Muir Trail Adventure Journal: Day Five&lt;/i&gt;&lt;/a&gt;&lt;blockquote&gt;After a relentless climb and countless downed trees, I made it to as series of lakes named for what white people thought of as traditional roles for the Native American people. &lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fordsbasement.com/2013/06/15/john-muir-trail-day-6/&quot;&gt;&lt;i&gt;John Muir Trail Adventure Journal: Day Six&lt;/i&gt;&lt;/a&gt;&lt;blockquote&gt;I talked with other hikers. We talked trail conditions, the gear we used, crazy things we’d seen, other hikers we’d met. This is when I learned about Tuna Helper‘s bid to set a PCT speed record. There was also talk of a hiker who wore different wedding dresses along the trail. He’d wear an old wedding dress for a certain amount of distance depending on how much you paid him. You’d get a picture of course. Somehow we missed each other on the trail. I would have enjoyed seeing that. &lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://fordsbasement.com/2013/06/16/john-muir-trail-day-7/&quot;&gt;&lt;i&gt;John Muir Trail Adventure Journal: Day Seven&lt;/i&gt;&lt;/a&gt;&lt;blockquote&gt;I skipped my usual lunch, instead enjoying Fritos and Peanut M&amp;amp;Ms. This is the point when the meals started blending together, and I’d switch it up (like soup for breakfast and oatmeal for dinner) to keep things from getting too boring. &lt;p&gt;A bit about Fritos &lt;/p&gt;&lt;p&gt;One of the greatest hiking foods of all time! Per bag, 1,760 calories, 990 of that from fat. Plus a good amount of sodium. These things keep your motor running! And they’re great kindling. &lt;/p&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Looking forward to the full report, Tom!&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-17T16:13:36+00:00</dc:date>
</item>
<item rdf:about="http://bryanpendleton.blogspot.com/2013/06/shear-keys.html">
	<title>Bryan Pendleton: Shear Keys</title>
	<link>http://bryanpendleton.blogspot.com/2013/06/shear-keys.html</link>
	<content:encoded>&lt;p&gt;We're supposed to be in the final home stretch for opening the new Bay Bridge, and this weekend the New York Times carried this story: &lt;a href=&quot;http://www.nytimes.com/2013/06/16/us/in-california-bolts-may-hold-up-a-bridge-in-more-ways-than-one.html&quot;&gt;&lt;i&gt;In California, Bolts May Hold Up a Bridge in More Ways Than One&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt; The new bridge, whose foundation will reach the bedrock underneath, will be the world’s largest self-anchored suspension bridge, an unusual design that contributed to its high cost. Equipped with the latest antiseismic technology, the bridge was designed to last 150 years by remaining intact in a major earthquake. &lt;p&gt;That is why the failure of some high-strength steel bolts attaching shock-absorbing devices called shear keys to a concrete crossbeam under the roadway raised alarms. When workers tightened the 17- to 24-foot-long bolts in March, 32 in a batch of 96 snapped. Engineers blamed hydrogen-assisted cracking, in which atoms of hydrogen infiltrate steel and make it brittle, but they have yet to determine its cause.  &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Don't miss the nifty infographic: &lt;a href=&quot;http://www.nytimes.com/interactive/2013/06/16/us/broken-bolts-of-the-bay-bridge.html?ref=us&quot;&gt;&lt;i&gt;Solving a Structural Issue&lt;/i&gt;&lt;/a&gt;, which explains the concept of the Shear Keys with a nice diagram. &lt;/p&gt;&lt;blockquote&gt;Shear keys and bearings allow limited and controlled movement at the joints of different sections of the bridge during seismic events.  &lt;/blockquote&gt;&lt;p&gt;Of course, since the whole point of the new bridge is to address seismic issues, it's natural that engineers are intently focused on the seismic aspects of the new design. &lt;/p&gt;&lt;p&gt;I've long been fascinated with this part of civil engineering, since I live in such a seismically active area. Ten years ago, I was privileged to have a window seat for the construction of Oakland's &lt;a href=&quot;http://en.wikipedia.org/wiki/Cathedral_of_Christ_the_Light&quot;&gt;Cathedral of Christ the Light&lt;/a&gt;, a beautiful building, and once again a structure which was constructed to replace a structure that collapsed in the same great Loma Prieta earthquake. &lt;/p&gt;&lt;p&gt;Among the interesting aspects of the Cathedral of Christ the Light is &lt;a href=&quot;http://usa.autodesk.com/adsk/servlet/item?siteID=123112&amp;amp;id=12138853&quot;&gt;the use of enormous wooden beams for the main space&lt;/a&gt;, since the natural flexibility of the wooden beams is supposed to make a more earthquake-friendly structure. Interesting, since as the NY Times article about the bridge observes, &lt;/p&gt;&lt;blockquote&gt;the eastern half, a cantilever design that runs from the island to Oakland, was deemed beyond retrofitting. Its main problem was that it was anchored in treated Douglas fir trees that were used as pilings in clay and mud.  &lt;/blockquote&gt;&lt;p&gt;Poor trees: sometimes they are the blessing; sometimes they are the curse. &lt;/p&gt;&lt;p&gt;A more common earthquake technique, used in both the bridge and the cathedral, is the use of special seismic bearings. In the cathedral, &lt;a href=&quot;http://www.earthquakeprotection.com/building_the_cathedral_of_christ_the_light.html&quot;&gt;as the manufacturer points out&lt;/a&gt;, &lt;/p&gt;&lt;blockquote&gt;The new cathedral is located just 4.7 km from the Hayward fault and uses Friction PendulumTM seismic isolation bearings to protect it from damage during a 1000 year earthquake. The bearings support a 120 foot tall main sanctuary, which incorporates glulaminated timber, reinforced concrete, high strength steel, and aluminum and glass to create a light-filled structure. &lt;/blockquote&gt;&lt;p&gt;I remember watching the bearings being installed; they were quite fasinating to observe. &lt;/p&gt;&lt;p&gt;And, of course, don't find the language confusing: &quot;a 1000 year earthquake&quot; is not an earthquake which lasts for 1000 years (though in fact the faults in California are nearly constantly moving, and it's isn't an inaccuracy to describe such continual movements in such a way), but rather an earthquake of such severity that we might expect it would occur once every 1000 years. &lt;/p&gt;&lt;p&gt;Meanwhile, back over the water, the engineers are pointing out that nothing is ever perfectly safe, and rather than ask whether the new bridge is flawless, we should be asking whether it is (a) safe enough, and (b) safer than the current bridge: &lt;a href=&quot;http://www.mercurynews.com/breaking-news/ci_23445958/open-new-bay-bridge-or-without-bolt-repairs&quot;&gt;&lt;i&gt;Bay Bridge: Open new span with or without bolt repairs, experts say&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;If a moderate temblor were to strike after traffic moves onto the new bridge but before the retrofit is done or any other bolts are replaced, the new bridge is still at least twice as safe as the 77-year-old span motorists use today, Seible and Fisher said. &lt;/blockquote&gt;&lt;p&gt;And some engineers just love the fact that the Bay Area is building new bridges: &lt;a href=&quot;http://www.mercurynews.com/top-stories/ci_23438988/my-word-stop-all-negativity-about-beautiful-bridge&quot;&gt;&lt;i&gt;My Word: Stop all the negativity about beautiful bridge project&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;We in the Bay Area are renowned for our creativity, our leadership in technology and our eagerness to move forward. This bridge exemplifies all of these strengths. And let's not forget that Caltrans originally proposed a conservative, although arguably bland, simple viaduct structure to replace the existing bridge. &lt;p&gt;We rejected that and are much better off for it. &lt;/p&gt;&lt;p&gt;Although there are no guarantees in seismic engineering because temblors are inherently random, computer modeling and analysis has become so sophisticated that we have a truly remarkable understanding of the predicted performance of large structures in seismic events.  &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;There's no doubt that the attention on seismic design has brought amazing improvements in construction techniques. But I'm also pleased to see that there's always room for improvement, and people are already actively studying the results of these recent large public projects, trying to learn from them and figure out how to do still better in the future.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-17T15:46:43+00:00</dc:date>
</item>
<item rdf:about="http://drbacchus.com/open-help-conference-2013">
	<title>Rich Bowen: Open Help Conference, 2013</title>
	<link>http://drbacchus.com/open-help-conference-2013</link>
	<content:encoded>&lt;p&gt;This weekend I attended the &lt;a href=&quot;http://openhelpconference.com/&quot;&gt;OpenHelp Conference&lt;/a&gt; in Cincinnati. Unfortunately, I was only able to go to one day of it, as we had to be back for something Sunday morning.&lt;/p&gt;&lt;p&gt;It was smallish, and so there was a lot of good conversation and brainstorming.&lt;/p&gt;&lt;p&gt;The focus was both documentation and support, which are, of course, deeply intertwingled. It gave me a lot to think about, and I really wish I could have been there for the second day as well.&lt;/p&gt;&lt;p&gt;Siobhan McKeown, from the Wordpress documentation team, was at the conference, and took amazing notes, so I'm going to link to her writeup for each talk.&lt;/p&gt;&lt;p&gt;The day started with Jorge Castro talking about using &lt;a href=&quot;http://stackexchange.com/&quot;&gt;StackExchange&lt;/a&gt; to handle the Question &amp;amp; Answer part of support.StackExchange is part of the &lt;a href=&quot;http://stackoverflow.com/&quot;&gt;StackOverflow&lt;/a&gt; family of sites, Each StackExchange site is focused on a particular community, and is very focused on Question and Answer format, rather than general discussion. It allows users to vote for the quality of questions and answers, and seems to be a great way to get the subject matter experts more directly involved in the support process.&lt;/p&gt;&lt;p&gt;Siobhan's notes are &lt;a href=&quot;http://siobhanmckeown.com/open-help-jorge-castro-solving-the-qa-conundrum-with-stackexchange/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Following that, Michael Verdi, from the Firefox support team, talked about the &lt;a href=&quot;https://support.mozilla.org/&quot;&gt;SuMo&lt;/a&gt; site and the work that they had done to help users find the answers to their question. Of particular interest was some graphs he showed of the improvement in customer satisfaction, as well as the rate of answered questions, brought about by just improving the search functionality, to help users find the right docs so that they didn't even need to ask their question.&lt;/p&gt;&lt;p&gt;Firefox has their own home-grown, but Open Source, solution, called &lt;a href=&quot;https://github.com/mozilla/kitsune&quot;&gt;Kitsune&lt;/a&gt;. It has some StackExchage-like features, and also has a great tool called Army of Awesome, which is a way to watch Twitter mentions of your project/product, and ensure that at least one person from the expert community has responded to each one.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://siobhanmckeown.com/open-help-michael-verdi-how-mozilla-supports-users-all-over-the-world/&quot;&gt;Here's Siobhan's notes&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This was followed by a panel discussion including Jorge, Michael, Jeremy Garcia (&lt;a href=&quot;http://www.linuxquestions.org/&quot;&gt;LinuxQuestions.org&lt;/a&gt;, and Siko Bouterse from Wikipedia. The discussion ranged from Wikipedia author retention to further discussion of many of the issues that Michael and Jorge had raised.&lt;/p&gt;&lt;p&gt;I spoke next, talking about &lt;a href=&quot;http://tm3.org/listen&quot;&gt;listening to your audience&lt;/a&gt;. This is something I've thought a lot about over the years. My trepidation in speaking at this conference was that it seems like many of the people there know a lot more about documentation and support than I do, as I'm largely self-taught in this area. But it seemed that my remarks were well received. Once again here's &lt;a href=&quot;http://siobhanmckeown.com/open-help-rich-bowen-listening-to-your-audience/&quot;&gt;Siobhan's notes&lt;/a&gt;, which in this case are way better than my own notes for my talk.&lt;/p&gt;&lt;p&gt;I was the last speaker of the day, and this was followed by a general discussion of the things that had been raised during the day, as well as many related issues.&lt;/p&gt;&lt;p&gt;You can see a lot of commentary about the events of the day, and of Sunday, by looking at the &lt;a href=&quot;https://twitter.com/search?q=%23openhelp&quot;&gt;#openhelp&lt;/a&gt; keyword on Twitter. I'm looking forward to reading Siobhan's notes from Sunday's sessions.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-17T14:35:23+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/ApacheCamel/~3/fi9V2tH7Cfo/introducing-new-apache-camel-based-ipaas.html">
	<title>Claus Ibsen: Introducing the new Apache Camel based iPaaS</title>
	<link>http://feedproxy.google.com/~r/ApacheCamel/~3/fi9V2tH7Cfo/introducing-new-apache-camel-based-ipaas.html</link>
	<content:encoded>I just got back from &lt;a href=&quot;http://camelone.com/&quot;&gt;CamelOne&lt;/a&gt; 2013 which was the 3rd annual Camel conference.&lt;br /&gt;
&lt;br /&gt;
At the conference, James Strachan, introduced the new open source Apache Camel based iPaaS at the ending keynote on the first day.&lt;br /&gt;
&lt;br /&gt;
You can find more &lt;a href=&quot;http://macstrac.blogspot.se/2013/06/introducing-apache-camel-based-open.html&quot;&gt;details from James blog&lt;/a&gt; where he put out this information with the slides and a cool 20 minute video demonstrating the iPaaS in action. Its all a single page HTML5 web console, using the awesome &lt;a href=&quot;http://hawt.io/&quot;&gt;hawio&lt;/a&gt; project.&lt;br /&gt;
&lt;br /&gt;
In the video you will also see cool stuff such as the new Camel visual debugger, where you can set breakpoints, and single step the message in the routes etc.&lt;br /&gt;
&lt;br /&gt;
And we also reveal for the first time the new web UI for log analytics (insight search). So you easily search in the logs from all the containers, and correlate the log messages, and have all that visualized with timeline, graphs etc.&lt;br /&gt;
&lt;br /&gt;
I guess a few screenshot is worth a 1000 words in this case.&lt;br /&gt;
&lt;br /&gt;
Lets start with the new insight plugin in action ...&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-JsxFfpUFyvA/Ub7RediSfoI/AAAAAAAAAbA/PHfM6y-mCnU/s1600/kibana.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://1.bp.blogspot.com/-JsxFfpUFyvA/Ub7RediSfoI/AAAAAAAAAbA/PHfM6y-mCnU/s320/kibana.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Fabric Insight in action - Live log analytics using Kibana web UI, to aggregate and visualize log from all your containers. Notice the Camel tab with first class Camel integration.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
And the debugger in action ...&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-rojimqlmlTQ/Ub7SRXzu4HI/AAAAAAAAAbM/giDkysBUq_I/s1600/Debugger.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://3.bp.blogspot.com/-rojimqlmlTQ/Ub7SRXzu4HI/AAAAAAAAAbM/giDkysBUq_I/s320/Debugger.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Camel debugger in action - Live debugging of Camel routes, set breakpoint, single step, see message details. And as well edit the message on the fly (to be added)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
And we also got time to add a new Camel route creator / editor that is purely web based ...&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-FatquhS-8fc/Ub7S8U8f8zI/AAAAAAAAAbU/NeI06sw9Yr8/s1600/route-editor.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://3.bp.blogspot.com/-FatquhS-8fc/Ub7S8U8f8zI/AAAAAAAAAbU/NeI06sw9Yr8/s320/route-editor.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Camel route designer - A full Camel editor in the web console with wizards, making it easier for casual Camel developers to use.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Though the video shows all this in action, and there is a funky theme song to go along. The selection of the song was done after careful consideration in the bar, after a long day at CamelOne ;)&lt;br /&gt;
&lt;br /&gt;
To see the video I suggest to click &lt;a href=&quot;http://macstrac.blogspot.se/2013/06/introducing-apache-camel-based-open.html&quot;&gt;this link&lt;/a&gt; to get to James blog, or use &lt;a href=&quot;http://vimeo.com/68442425&quot;&gt;this link&lt;/a&gt; for the direct link to Vimeo where the video is hosted.&lt;br /&gt;
&lt;br /&gt;
On James blog you will also find instructions how to run this from the source code and try this on your own.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Fuse Fabric and hawtio are both 100% open source projects, with the ASL 2.0 license, and their source code hosted on github. We love contributions and collaboration. So feel free to fork and send pull requests. And if you send too many, then you can become a member of these projects, and commit directly ;)&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=fi9V2tH7Cfo:uLHW0THavak:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=fi9V2tH7Cfo:uLHW0THavak:4cEx4HpKnUU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?i=fi9V2tH7Cfo:uLHW0THavak:4cEx4HpKnUU&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=fi9V2tH7Cfo:uLHW0THavak:F7zBnMyn0Lo&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?i=fi9V2tH7Cfo:uLHW0THavak:F7zBnMyn0Lo&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=fi9V2tH7Cfo:uLHW0THavak:V_sGLiPBpWU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?i=fi9V2tH7Cfo:uLHW0THavak:V_sGLiPBpWU&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/ApacheCamel/~4/fi9V2tH7Cfo&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-17T09:21:16+00:00</dc:date>
</item>
<item rdf:about="http://blog.tirasa.net/blogs/index.php/ilgrosso/apache-syncope-1-1-2">
	<title>Francesco Chicchiricco: Apache Syncope 1.1.2 (Ad libitum) released</title>
	<link>http://blog.tirasa.net/blogs/index.php/ilgrosso/apache-syncope-1-1-2</link>
	<content:encoded>&lt;p&gt;The Apache Syncope team is proud to announce the availability of the new maintenance release of Ad libitum.&lt;/p&gt;
&lt;a href=&quot;http://blog.tirasa.net/blogs/index.php/ilgrosso/apache-syncope-1-1-2#more110&quot;&gt;Full story »&lt;/a&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blog.tirasa.net/blogs/index.php/ilgrosso/apache-syncope-1-1-2&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-06-17T08:07:00+00:00</dc:date>
</item>
<item rdf:about="http://macstrac.blogspot.com/2013/06/introducing-apache-camel-based-open.html">
	<title>James Strachan: introducing the Apache Camel based open source iPaaS</title>
	<link>http://macstrac.blogspot.com/2013/06/introducing-apache-camel-based-open.html</link>
	<content:encoded>I've had a blast at CamelOne and Red Hat Summit in Boston; thanks for all the great speakers and feedback!&lt;br /&gt;&lt;br /&gt;I demo'd our new &lt;a href=&quot;http://camel.apache.org/&quot;&gt;Apache Camel&lt;/a&gt; based &lt;a href=&quot;http://www.gartner.com/it-glossary/information-platform-as-a-service-ipaas/&quot;&gt;iPaaS&lt;/a&gt; (i.e. our Camel Cloud or Fuse integration appliance). Here's a quick demo video of what I presented at my CamelOne keynote along with &lt;a href=&quot;http://www.slideshare.net/strachaj/camel-one2013-presentationkeynote&quot;&gt;the slides&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you don't mind working on the bleeding edge here are the &lt;a href=&quot;https://github.com/jboss-fuse/fuse/blob/master/readme.md&quot;&gt;instructions for building and running it&lt;/a&gt;, though we'll have the public stable early access release soon.&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/strachaj/camel-one2013-presentationkeynote&quot; target=&quot;_blank&quot; title=&quot;CamelOne Keynote: introducing the Apache Camel based open source iPaaS&quot;&gt;CamelOne Keynote: introducing the Apache Camel based open source iPaaS&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/strachaj&quot; target=&quot;_blank&quot;&gt;strachaj&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;&lt;br /&gt;  &lt;p&gt;&lt;a href=&quot;http://vimeo.com/68442425&quot;&gt;Camel in the cloud demo from CamelOne 2013&lt;/a&gt; from &lt;a href=&quot;http://vimeo.com/jbossdeveloper&quot;&gt;JBoss Developer&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com&quot;&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-17T07:28:08+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/ShalinSays/~3/O5Subw_450w/53177112825">
	<title>Shalin Shekhar Mangar: First Bangalore Lucene/Solr Meetup Report</title>
	<link>http://feedproxy.google.com/~r/ShalinSays/~3/O5Subw_450w/53177112825</link>
	<content:encoded>&lt;p&gt;The &lt;a href=&quot;http://www.meetup.com/Bangalore-Apache-Solr-Lucene-Group/events/113806762/&quot;&gt;First Bangalore Lucene/Solr meetup&lt;/a&gt; was organized on Saturday, 8th June 2013 courtesy of the initiatives of &lt;a href=&quot;https://twitter.com/anshumgupta&quot;&gt;Anshum Gupta&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/varunthacker&quot;&gt;Varun Thacker&lt;/a&gt;. Although I joined in as a co-organizer but honestly I did nothing except tweet about it and show up with some slides.&lt;/p&gt;
&lt;p&gt;I must say that I was pleasantly surprised at the rate at which the group went from zero to a hundred members (it stands at a 132 members as of writing this post). Our initial limit for the venue was fifty but it was increased to seventy five once the size of the venue was confirmed. Microsoft Accelerator was gracious enough to provide a conference room and refreshments for the attendees. 50+ people showed up which is pretty good considering that the meetup schedule clashed with some other popular meetups. &lt;span&gt;The agenda was dominated by presentations but quite a bit of time was spent in Q&amp;amp;A.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bloomreach.com/who-we-are/our-people/vinodh-kumar/&quot;&gt;Vinodh Kumar R&lt;/a&gt; (Head of BloomReach India) gave a talk on ranking models (adversarial vs implicit vs real time news) applicable for different kind of search applications.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/varunthacker&quot;&gt;Varun Thacker&lt;/a&gt; from &lt;a href=&quot;http://www.unbxd.com/&quot;&gt;Unbxd&lt;/a&gt; talked about &lt;a href=&quot;http://www.slideshare.net/varunthacker/faceted-search-and-result-reordering&quot;&gt;Faceted search and result reordering in Solr&lt;/a&gt; focusing on e-commerce applications. He introduced term range facets, multi-select faceting and then delved into reordering documents using function queries and query elevation along with examples and use-cases for each.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/dikchant_sahi&quot;&gt;Dikchant Sahi&lt;/a&gt; presented &lt;a href=&quot;http://www.slideshare.net/dikchantsahi/solr-data-importhandler&quot;&gt;Apache Solr’s DataImportHandler&lt;/a&gt; to index databases and xml files in Solr. He also gave a live demo of full and delta imports of a sample music data set into Solr.&lt;/p&gt;
&lt;p&gt;I gave a &lt;a href=&quot;http://www.slideshare.net/shalinmangar/solr-cloud-shardsplitting&quot; title=&quot;SolrCloud and Shard Splitting&quot;&gt;presentation on SolrCloud and Shard Splitting&lt;/a&gt; which is something that &lt;a href=&quot;https://twitter.com/anshumgupta&quot;&gt;Anshum Gupta&lt;/a&gt; and I have&lt;span&gt; been working on the past few months&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Here are the slides that I presented:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div&gt;&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/shalinmangar/solr-cloud-shardsplitting&quot; target=&quot;_blank&quot; title=&quot;SolrCloud and Shard Splitting&quot;&gt;SolrCloud and Shard Splitting&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/shalinmangar&quot; target=&quot;_blank&quot;&gt;Shalin Mangar&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;At the start of my presentation, I solicited an informal poll from the audience to gauge their interest:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Everyone in attendance was familiar with the projects&lt;/li&gt;
&lt;li&gt;Most of the attendees were already using Solr for search&lt;/li&gt;
&lt;li&gt;Everyone in attendance was using Solr 3.x and no one was on SolrCloud yet&lt;/li&gt;
&lt;li&gt;Almost everyone was evaluating, prototyping or testing SolrCloud&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I met &lt;a href=&quot;https://twitter.com/UmeshPrasadIITK&quot;&gt;Umesh Prasad&lt;/a&gt; from Flipkart at the meetup and we chatted quite a bit on Solr’s performance under heavy bulk re-indexing workloads and also about accommodating large elevation and synonym files in SolrCloud. I’m happy to know that Flipkart uses Apache Solr for their excellent search. I also met a couple of search enthusiasts who have used Solr in the past and want to contribute back to the community.&lt;/p&gt;
&lt;p&gt;All in all, I think it was a good first step towards establishing a strong Lucene/Solr community in Bangalore. I wish that the next meetup gives more time for one to one interactions and focused conversations around search issues. It’d be nice to have more about Lucene in the next meetup. &lt;span&gt;A lot of people inquired about training on Apache Solr so we may organize a workshop for the next meetup.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Drop me a line if you are interested in attending a Solr training in Bangalore. Also, if you’re in Bangalore and interested in Lucene/Solr or search in general, do join the &lt;a href=&quot;http://bit.ly/ZVn7fX&quot; title=&quot;Bangalore Lucene/Solr Meetup&quot;&gt;Bangalore Lucene/Solr Meetup group&lt;/a&gt;.&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/ShalinSays/~4/O5Subw_450w&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-17T06:01:00+00:00</dc:date>
</item>
<item rdf:about="http://taint.org/2013/06/15/235802a.html">
	<title>Justin Mason: Links for 2013-06-15</title>
	<link>http://taint.org/2013/06/15/235802a.html</link>
	<content:encoded>&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://blogs.ec.europa.eu/neelie-kroes/open-data-agreement/&quot; title=&quot;EU unlocks a great new source of online innovation&quot;&gt;EU unlocks a great new source of online innovation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;Today the European Parliament voted to formally agree new rules on open data – effectively making a reality of the proposal which I first put forward just over 18 months ago, and making it easier to open up huge amounts of public sector data.&lt;/blockquote&gt;  Great news — wonder how it’ll affect the Ordnance Survey of Ireland?  &lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:osi&quot;&gt;osi&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:mapping&quot;&gt;mapping&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:open-data&quot;&gt;open-data&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:open&quot;&gt;open&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:data&quot;&gt;data&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:europe&quot;&gt;europe&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:eu&quot;&gt;eu&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:neelie-kroes&quot;&gt;neelie-kroes&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://torrentfreak.com/uk-isps-secretly-start-blocking-torrent-site-proxies-130611/&quot; title=&quot;UK ISPs Secretly Start Blocking Torrent Site Proxies | TorrentFreak&quot;&gt;UK ISPs Secretly Start Blocking Torrent Site Proxies | TorrentFreak&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The next step of cat-and-mouse.  Let’s see what the pirate sites do next…  &lt;/p&gt;&lt;blockquote&gt;The blocking orders are intended to deter online piracy and were requested by the music industry group BPI on behalf of a variety of major labels. Thus far they’ve managed to block access to The Pirate Bay, Kat.ph, H33T and Fenopy, and preparations are being made to add many others.  The effectiveness of these initial measures has been called into doubt, as they are relatively easy to bypass. For example, in response to the blockades hundreds of proxy sites popped up, allowing subscribers to reach the prohibited sites via a detour. However, as of this week these proxies are also covered by the same blocklist they aim to circumvent, without a new court ruling.  The High Court orders give music industry group BPI the authority to add sites to the blocklist without oversight. Until now some small changes have been made, mostly in response to The Pirate Bay’s domain hopping endeavors, but with the latest blocklist update a whole new range of websites is being targeted.&lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:bittorrent&quot;&gt;bittorrent&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:blocking&quot;&gt;blocking&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:filesharing&quot;&gt;filesharing&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:copyright&quot;&gt;copyright&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:bpi&quot;&gt;bpi&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:piracy&quot;&gt;piracy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:pirate-bay&quot;&gt;pirate-bay&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:proxies&quot;&gt;proxies&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:fenopy&quot;&gt;fenopy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:kat.ph&quot;&gt;kat.ph&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:h33t&quot;&gt;h33t&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:filtering&quot;&gt;filtering&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:uk&quot;&gt;uk&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2013-06-15T23:58:02+00:00</dc:date>
</item>
<item rdf:about="http://bahumbug.wordpress.com/2013/06/15/cui-bono/">
	<title>Nick Kew: Cui bono?</title>
	<link>http://bahumbug.wordpress.com/2013/06/15/cui-bono/</link>
	<content:encoded>&lt;p&gt;Cicero may have popularised Cassio’s wise words &lt;em&gt;“to whose benefit?&lt;/em&gt;“, but in our cynical times we need to refine the question: &lt;em&gt;to whose expectation of benefit?&lt;/em&gt;  Indeed, it seems implausible that the subtle distinction should have been lost on the Romans, but I certainly lack the comprehension of their language that would enable me to judge such nuances.&lt;/p&gt;
&lt;p&gt;WordPress records show the above as the first words of a draft saved, but not published, on February 26&lt;sup&gt;th&lt;/sup&gt; 2012, following the death in Syria of distinguished journalist Marie Colvin.  Who could expect to benefit from her death?  Or indeed from the escalation of events both before and since: an incursion at the Turkish border, various massacres.  Most recently the use of sarin gas, coming conveniently shortly after Obama had spoken of chemical weapons as a ‘red line’ that would provoke a change of policy.&lt;/p&gt;
&lt;p&gt;The answer must surely be, someone looking to provoke Western intervention.  Someone given hope of powerful backing by western rhetoric, and by events in Libya.  They’ve been disappointed for a long time, but now finally it seems Obama will supply them[1] with weapons.  For anyone else to engage in such gratuitously provocative yet militarily futile acts would be extraordinarily perverse.  Above all, for a government with nothing to gain and everything to lose if the West were to get seriously involved (not to mention a ruthless but quietly efficient president without the vain showmanship of Saddam or Gaddafi).&lt;/p&gt;
&lt;p&gt;Nor could you rule out someone with an even more sinister Agenda, like the CIA or Al Qaeda, or one-off maverick nutters, with whom neither ‘side’ would wish to be associated.  The latter can be the ones who have the most devastating effects of all, as in the assassins of  Franz Ferdinand or Yitzhak Rabin.&lt;/p&gt;
&lt;p&gt;Can this be lost on our politicians and their advisors?  Seems unlikely.  I suspect much of the current rhetoric is driven by a complex case of good-cop-bad-cop desperately hoping to achieve something.  Those Western politicians who really want military intervention do so for external reasons: to topple a regime with a history of the two great regional crimes of being friendly with Iran and hostile to Israel (even if Israel itself would rather have a devil-you-know relationship with a stable neighbour than a civil war)!&lt;/p&gt;
&lt;p&gt;Could a new Western-friendly president in Iran change the situation?  It’s an interesting prospect (and will probably spare Iran the kind of disturbance that followed re-election of the ‘wrong’ man last time), but I fear it’s too late to make much difference.  Events in Syria have momentum.  Likewise in the West: if the more gung-ho of American politicians and their backers rebuffed Khatami[2] in more peaceful times, how likely are they to change now, when it would mean some serious backing down?  But at least Rohani’s probable election could serve to strengthen the hands of those favouring peace in the region including, I think, Obama himself.&lt;/p&gt;
&lt;p&gt;Where I think the West must really bear guilt is in provoking the war in the first place.  The ambiguous rhetoric and the Libyan example led rebels to suppose they’d get support if things got bad enough, but also westernised media-savvy Syrian emigrants who “spoke for” the country when it was all starting, spinners of propaganda like the “&lt;a href=&quot;https://en.wikipedia.org/wiki/Amina_Abdallah_Arraf_al_Omari&quot;&gt;gay girl&lt;/a&gt;“, and doubtless others, all contributed.  The contrast must surely be Bahrain, where a similar uprising was suppressed by a government that was historically more repressive than Syria’s.  The obvious difference is that with no &lt;em&gt;agents provocateurs&lt;/em&gt; or prospect of international support, Bahraini protestors cut their losses rather than escalate when the government reacted firmly to them.  Bahrain didn’t get Egyptian-style democracy, but neither did it get the horrors of civil war.&lt;/p&gt;
&lt;p&gt;[1] Who “they” may be, and whether there is a faction less guilty than the government to whom the West could supply weapons is an altogether different question.  Not one I could speculate on.&lt;br /&gt;
[2] The Iranian president from 1997-2005, who made serious efforts to mend fences with the West but was firmly rebuffed by the US, sending a message that the West wasn’t interested and that a Western-friendly leadership was a waste of time.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/bahumbug.wordpress.com/2145/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/bahumbug.wordpress.com/2145/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=bahumbug.wordpress.com&amp;amp;blog=471959&amp;amp;post=2145&amp;amp;subd=bahumbug&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-15T22:27:28+00:00</dc:date>
</item>
<item rdf:about="http://taint.org/2013/06/14/235801a.html">
	<title>Justin Mason: Links for 2013-06-14</title>
	<link>http://taint.org/2013/06/14/235801a.html</link>
	<content:encoded>&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;https://github.com/blog/1528-there-s-a-map-for-that&quot; title=&quot;There's a map for that&quot;&gt;There’s a map for that&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;‘Not long ago, we began rendering 3D models on GitHub. Today we’re excited to announce the latest addition to the visualization family – geographic data. Any .geojson file in a GitHub repository will now be automatically rendered as an interactive, browsable map, annotated with your geodata.’  As this HN comment notes, https://news.ycombinator.com/item?id=5875693 — ‘I’d much rather Github cleaned up the UI for existing features than added these little flourishes that I can’t imagine even 1% of users use.’  Something is seriously wrong in how GitHub decides product direction if this kind of wankology (and that Judy-array crap) is what gets prioritised. :(  (via Marc O’Morain)&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:via:marc&quot;&gt;via:marc&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:github&quot;&gt;github&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:mapping&quot;&gt;mapping&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:maps&quot;&gt;maps&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:geojson&quot;&gt;geojson&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:hacking&quot;&gt;hacking&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:product-management&quot;&gt;product-management&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:ui&quot;&gt;ui&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:pull-requests&quot;&gt;pull-requests&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.techdirt.com/articles/20130613/11165823451/filmmaker-finally-aims-to-get-court-to-admit-that-happy-birthday-is-public-domain.shtml&quot; title=&quot;Lawsuit Filed To Prove Happy Birthday Is In The Public Domain; Demands Warner Pay Back Millions Of License Fees | Techdirt&quot;&gt;Lawsuit Filed To Prove Happy Birthday Is In The Public Domain; Demands Warner Pay Back Millions Of License Fees | Techdirt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;The issue [...] is that it’s just not cost effective for anyone to actually stand up and challenge Warner Music, who has strong financial incentive to pretend the copyright is still valid. Well, apparently, someone is pissed off enough to try. The creatively named Good Morning to You Productions, a documentary film company planning a film about the song Happy Birthday, has now filed a lawsuit concerning the copyright of Happy Birthday and are seeking to force Warner/Chappell to return the millions of dollars it has collected over the years. That’s going to make this an interesting case.&lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:music&quot;&gt;music&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:copyright&quot;&gt;copyright&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:law&quot;&gt;law&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:via:bwalsh&quot;&gt;via:bwalsh&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:public-domain&quot;&gt;public-domain&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:happy-birthday&quot;&gt;happy-birthday&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:songs&quot;&gt;songs&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:warner-music&quot;&gt;warner-music&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:lawsuits&quot;&gt;lawsuits&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;https://github.com/mk-fg/graphite-metrics&quot; title=&quot;graphite-metrics&quot;&gt;graphite-metrics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;metric collectors for various stuff not (or poorly) handled by other monitoring daemons  Core of the project is a simple daemon (harvestd), which collects metric values and sends them to graphite carbon daemon (and/or other configured destinations) once per interval. Includes separate data collection components (“collectors”) for processing of:  /proc/slabinfo for useful-to-watch values, not everything (configurable). /proc/vmstat and /proc/meminfo in a consistent way. /proc/stat for irq, softirq, forks. /proc/buddyinfo and /proc/pagetypeinfo (memory fragmentation). /proc/interrupts and /proc/softirqs. Cron log to produce start/finish events and duration for each job into a separate metrics, adapts jobs to metric names with regexes. Per-system-service accounting using systemd and it’s cgroups. sysstat data from sadc logs (use something like sadc -F -L -S DISK -S XDISK -S POWER 60 to have more stuff logged there) via sadf binary and it’s json export (sadf -j, supported since sysstat-10.0.something, iirc). iptables rule “hits” packet and byte counters, taken from ip{,6}tables-save, mapped via separate “table chain_name rule_no metric_name” file, which should be generated along with firewall rules (I use this script to do that).&lt;/blockquote&gt;  Pretty exhaustive list of system metrics — could have some interesting ideas for Linux OS-level metrics to monitor in future.&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:graphite&quot;&gt;graphite&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:monitoring&quot;&gt;monitoring&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:metrics&quot;&gt;metrics&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:unix&quot;&gt;unix&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:linux&quot;&gt;linux&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:ops&quot;&gt;ops&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:vm&quot;&gt;vm&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:iptables&quot;&gt;iptables&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:sysadmin&quot;&gt;sysadmin&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://www.techdirt.com/articles/20130611/18344823416/former-nsa-boss-we-dont-datamine-our-giant-data-collection-we-just-ask-it-questions.shtml&quot; title=&quot;Former NSA Boss: We Don't Data Mine Our Giant Data Collection, We Just Ask It Questions&quot;&gt;Former NSA Boss: We Don’t Data Mine Our Giant Data Collection, We Just Ask It Questions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;‘Well, that’s – no, we’re going to use it. But we’re not going to use it in the way that some people fear. You put these records, you store them, you have them. It’s kind of like, I’ve got the haystack now. And now let’s try to find the needle. And you find the needle by asking that data a question. I’m sorry to put it that way, but that’s fundamentally what happens. All right. You don’t troll through the data looking for patterns or anything like that. The data is set aside. And now I go into that data with a question that – a question that is based on articulable(ph), arguable, predicate to a terrorist nexus.’&lt;/blockquote&gt;  Yep, that’s data mining.&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:data-mining&quot;&gt;data-mining&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:questions&quot;&gt;questions&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:haystack&quot;&gt;haystack&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:needle&quot;&gt;needle&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:nsa&quot;&gt;nsa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:usa&quot;&gt;usa&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:politics&quot;&gt;politics&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:privacy&quot;&gt;privacy&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:data-protection&quot;&gt;data-protection&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:michael-hayden&quot;&gt;michael-hayden&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://fastutil.di.unimi.it/&quot; title=&quot;fastutil&quot;&gt;fastutil&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;fastutil extends the Java™ Collections Framework by providing type-specific maps, sets, lists and queues with a small memory footprint and fast access and insertion; provides also big (64-bit) arrays, sets and lists, and fast, practical I/O classes for binary and text files. It is free software distributed under the Apache License 2.0. It requires Java 6 or newer.&lt;/blockquote&gt;  used by Facebook (along with Apache Giraph, Netty, Unsafe) to speed up “weekend Hive jobs” to “coffee breaks”. http://www.slideshare.net/nitayj/2013-0603-berlin-buzzwords&lt;p&gt;&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:via:highscalability&quot;&gt;via:highscalability&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:facebook&quot;&gt;facebook&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:giraph&quot;&gt;giraph&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:optimization&quot;&gt;optimization&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:java&quot;&gt;java&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:speed&quot;&gt;speed&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:fastutil&quot;&gt;fastutil&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:collections&quot;&gt;collections&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:data-structures&quot;&gt;data-structures&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class=&quot;deliciouslink&quot; href=&quot;http://blog.aggregateknowledge.com/2011/12/12/big-memory-part-4/&quot; title=&quot;Big Memory, Part 4&quot;&gt;Big Memory, Part 4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;good microbenchmarking of a bunch of Java collections; Trove, fastutil, PCJ, mahout-collections, hppc&lt;/p&gt;
&lt;p&gt;(tags: &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:java&quot;&gt;java&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:collections&quot;&gt;collections&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:benchmarks&quot;&gt;benchmarks&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:performance&quot;&gt;performance&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:speed&quot;&gt;speed&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:coding&quot;&gt;coding&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:data-structures&quot;&gt;data-structures&lt;/a&gt; &lt;a class=&quot;delicioustag&quot; href=&quot;http://pinboard.in/u:jm/t:optimization&quot;&gt;optimization&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2013-06-14T23:58:01+00:00</dc:date>
</item>
<item rdf:about="http://techfeast-hiranya.blogspot.com/2013/06/more-reasons-to-love-python-lesson-on.html">
	<title>Hiranya Jayathilaka: More Reasons to Love Python - A Lesson on KISS</title>
	<link>http://techfeast-hiranya.blogspot.com/2013/06/more-reasons-to-love-python-lesson-on.html</link>
	<content:encoded>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Recently I've been doing some work in the area of programming language design. At one point I wanted to define a Python subset which allows only the simplest Python statements without loops, conditionals, functions, classes and a bunch of other high-level constructs. So I looked into the grammar specification of the Python language and I was astonished by its simplicity and succinctness. Click &lt;a href=&quot;http://docs.python.org/2/reference/grammar.html&quot;&gt;here&lt;/a&gt; to take a look for yourself. It's no longer than 125 lines of text, and the whole thing can be printed on one side of an A4 sheet. This is definitely one of those instances where the best design is also the simplest design. No wonder everybody loves Python.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;However that's not the whole point. Having selected a suitable Python subset, I was looking into ways for implementing a simple parser for those grammar rules. I've done some work with &lt;a href=&quot;https://javacc.java.net/&quot;&gt;JavaCC&lt;/a&gt; in the past, so I straightaway jumped into implementing a Java-based parser for the selected Python subset using JavaCC. After a few hours of coding I managed to get it working too. The next step of my project required me to do some analysis on the abstract syntax tree (AST) produced by the parser. I was looking around for some existing work that fits my requirements, and I came across Python's native &lt;a href=&quot;http://docs.python.org/2.7/library/ast.html&quot;&gt;ast &lt;/a&gt;module. I immediately realized that all those hours I spent on implementing the JavaCC-based parser is a complete waste. The ast module provides excellent support for parsing Python code and constructing ASTs. This is all you have to do parse some Python code using the ast module and obtain an AST representation of the code.&lt;/div&gt;&lt;pre class=&quot;brush:python&quot;&gt;import ast&lt;br /&gt;&lt;br /&gt;# The variable 'source' contains the Python statement to be parsed&lt;br /&gt;source = 'x = y + z'&lt;br /&gt;tree = ast.parse(source)&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;The ast module supports several modes. The default mode is exec which supports parsing a sequence of Python statements. The module also supports a special eval mode which can be used to parse simple one-liner Python statements. It turned out the eval mode supports more or less the same exact Python subset I wanted to use. So I threw away my JavaCC-based parser and wrote the following snippet of Python code to get my job done.&lt;/div&gt;&lt;pre class=&quot;brush:python&quot;&gt;import ast&lt;br /&gt;&lt;br /&gt;# The variable 'source' contains the Python statement to be parsed&lt;br /&gt;source = 'x = y + z'&lt;br /&gt;tree = ast.parse(source, mode='eval')&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Now when it came to analyzing the AST produced by the parser, the ast module again turned out to be useful. The module provides two helper classes, namely &lt;a href=&quot;http://docs.python.org/2.7/library/ast.html#ast.NodeVisitor&quot;&gt;NodeVisitor&lt;/a&gt; and &lt;a href=&quot;http://docs.python.org/2.7/library/ast.html#ast.NodeTransformer&quot;&gt;NodeTransformer&lt;/a&gt; which can be used to either traverse or transform a given Python AST. To use these helper classes, we just need to extend them and implement the appropriate visit methods. There's a unique top level visit method and one visit_ method per AST node type (e.g. visit_Str, visit_Num, visit_BoolOp etc.). Here's an example NodeVisitor implementation, that flattens a given Python AST into a list.&lt;/div&gt;&lt;pre class=&quot;brush:python&quot;&gt;class NodeEnumerator(ast.NodeVisitor):&lt;br /&gt;  def get_node_list(self, tree):&lt;br /&gt;    self.nodes = []&lt;br /&gt;    self.visit(tree)&lt;br /&gt;    return self.nodes&lt;br /&gt;&lt;br /&gt;  def visit(self, node):&lt;br /&gt;    self.generic_visit(node)&lt;br /&gt;    self.nodes.append(node)&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;These helper classes can be used to do virtually anything with a given AST. If you want you can even implement a Python interpreter in Python using this approach. In my case I'm running some search and isomorphism detection algorithms on the Python AST's.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;So once again I've been pleasantly surprised and deeply impressed by the simplicity and richness of Python. It looks like the designers of Python have thought of everything. Kudos to Python aside, this whole experience taught me to always looks for existing, simple solutions before doing it in my own complicated way. It actually reminds me of the good old KISS principle - &quot;Keep It Simple, Stupid&quot;. &lt;/div&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-06-14T19:03:36+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/posterous/wbyo/~3/d0aWeD70n6o/the-cloudstack-collab-conference-is-almost-here.html">
	<title>Chip Childers: The CloudStack Collab Conference is Almost Here</title>
	<link>http://feedproxy.google.com/~r/posterous/wbyo/~3/d0aWeD70n6o/the-cloudstack-collab-conference-is-almost-here.html</link>
	<content:encoded>&lt;p&gt;We're getting close to the &lt;a href=&quot;http://www.cloudstackcollab.org/&quot;&gt;CloudStack Collaboration Conference&lt;/a&gt; for 2013, being held on June 23 through 25 in Santa Clara, CA.  If you haven't registered, there's still time (but not much), because tickets are really going fast right now.  Go here: &lt;a href=&quot;http://ccc13.eventbrite.com/&quot;&gt;http://ccc13.eventbrite.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We've got a great &lt;a href=&quot;http://www.cloudstackcollab.org/schedule/&quot;&gt;schedule&lt;/a&gt; lined up for the event, with keynotes from &lt;a href=&quot;http://www.cloudstackcollab.org/keynotes/keynote1/&quot;&gt;Gene Kim&lt;/a&gt; and &lt;a href=&quot;http://www.cloudstackcollab.org/keynotes/keynote3/&quot;&gt;Adrian Cockcroft&lt;/a&gt; (as well as &lt;a href=&quot;http://www.cloudstackcollab.org/keynotes/keynote2/&quot;&gt;myself&lt;/a&gt;).  Talks are scheduled for the 24th and 25th, striking a great balance between some fantastic user stories, more development focused discussions, and presentations about some of the other projects in the Apache CloudStack ecosystem. We'll also be doing lightning talks over lunch, so that people have a chance to share in a shorter and more infomal setting. Oh, and of course, a hack-a-thon on Sunday the 23rd. If you're new to Apache CloudStack, &lt;a href=&quot;http://www.shapeblue.com/&quot;&gt;ShapeBlue&lt;/a&gt; is actually offering a &lt;a href=&quot;http://www.shapeblue.com/cloudstack-bootcamp-training-course/&quot;&gt;CloudStack Bootcamp&lt;/a&gt; training program on the 22nd and 23rd.&lt;/p&gt;
&lt;p&gt;I'm looking forward to seeing others from the communty at the event, especially those that I have never met in person.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.cloudstackcollab.org/&quot;&gt;&lt;span class=&quot;full-image-block ssNonEditable&quot;&gt;&lt;span&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cloudstackcollab.org/media/filer_public/2013/05/07/125_x_125_square_final_banner_ccc13.jpg?__SQUARESPACE_CACHEVERSION=1371234437615&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/posterous/wbyo/~4/d0aWeD70n6o&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-14T18:14:50+00:00</dc:date>
</item>
<item rdf:about="http://bryanpendleton.blogspot.com/2013/06/im-starting-to-get-nervous-about-losing.html">
	<title>Bryan Pendleton: I'm starting to get nervous about losing Google Reader</title>
	<link>http://bryanpendleton.blogspot.com/2013/06/im-starting-to-get-nervous-about-losing.html</link>
	<content:encoded>&lt;p&gt;We're down to the last two weeks of availability of Google Reader. &lt;/p&gt;&lt;p&gt;Like tens of thousands of you, I'm trying to figure out what to switch to. &lt;/p&gt;&lt;p&gt;I tried &lt;a href=&quot;http://www.theoldreader.com&quot;&gt;The Old Reader&lt;/a&gt;, and it looks pretty nice, but it hasn't been very reliable. I frequently get the pictures of kittens, with a polite message apologizing for their inability to show me actual data. So they seem to be polite, and hard-working, but over-whelmed. &lt;/p&gt;&lt;p&gt;I tried &lt;a href=&quot;http://www.newsblur.com&quot;&gt;NewsBlur&lt;/a&gt;, and it looks appealing, but they won't let me add even a single feed without giving them my credit card. It's not all that expensive ($2/month), but I was really hoping I'd get to try it for free and see if it worked or not first. &lt;/p&gt;&lt;p&gt;I guess maybe the next ones I'll try are Feedly and NetVibes. &lt;/p&gt;&lt;p&gt;Am I nuts? Is this working better for anyone else? What is everyone switching to?&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-13T21:49:18+00:00</dc:date>
</item>
<item rdf:about="http://sberyozkin.blogspot.com/2013/06/jax-rs-20-is-out.html">
	<title>Sergey Beryozkin: JAX-RS 2.0 is out !</title>
	<link>http://sberyozkin.blogspot.com/2013/06/jax-rs-20-is-out.html</link>
	<content:encoded>You may have already heard &lt;a href=&quot;https://jax-rs-spec.java.net/&quot;&gt;JAX-RS 2.0&lt;/a&gt; (&lt;a href=&quot;http://jcp.org/en/jsr/detail?id=339&quot;&gt;JSR-339&lt;/a&gt;) has been released. This is a very good news for Java developers building their RESTful HTTP applications and here are the reasons why.&lt;br /&gt;&lt;br /&gt;The 2.0 API  offers a lot of new enhancements on top of already very capable JAX-RS 1.1 (JSR-311) API and spec. It has really been a very serious push to the next level across all the API and the specification text. And what is really good is that the community can now rest assured: the JAX-RS effort started by Paul Sandoz and Marc Hadley is very alive and is led by a new super team, &lt;a href=&quot;http://marek.potociar.net/&quot;&gt;Marek Potociar &lt;/a&gt;and &lt;a href=&quot;http://jcp.org/en/press/news/specLeadStars/commFocus_stars_pericas-geertsen&quot;&gt;Santiago Pericas-Geertsen&lt;/a&gt; who worked extremely hard to get JAX-RS 2.0 out.  &lt;br /&gt;&lt;br /&gt;As I said the new API offers a lot of enhancements: client and server filters and interceptors, new Client API, client and server asynchronous invocation support, a lot of new context classes, new exception classes, a lot of API updates. A lot of new things to try and learn, but what I personally like most is the new asynchronous API and the fact that JAX-RS 1.1 Response class can be reused by Client API - it seems like a minor thing but IMHO it's one of the major points.&lt;br /&gt;&lt;br /&gt;I've enjoyed taking part in the JAX-RS 2.0 development process. Talking to all the participants, 'fighting to death' on the subject of very trivial issues, running never ending threads - it has all happened and it has been great :-). As every developer out there knows sometimes one has to forget about the disappointment of having your great point of view rejected :-), and move on with the team toward making something good happen - this is what this spec effort has been about.&lt;br /&gt;&lt;br /&gt;Talking to one of my former team leads, &lt;a href=&quot;http://bill.burkecentral.com/&quot;&gt;Bill&lt;/a&gt;, has been super too :-). As a side note, a lot of API enhancements have their origin in the work Bill and his team did.&lt;br /&gt;&lt;br /&gt;JAX-RS 2.0 is out and about to take over and fly high. It is only a start, MVC support, some new useful features will hopefully and likely be in in the next major releases. Is it perfect ? Probably not - I can name few API and spec features I'm still not feeling exactly happy about, but overall JAX-RS 2.0 is great.   &lt;br /&gt;In Apache CXF we are going to have JAX-RS 2.0 completely implemented by the end of the year. As it happens 2.0 server-side API is already completely implemented on the trunk. Some of the features like the integration with Bean Valdation API is required by the EE profile only but I think we can wire that into CXF too.&lt;br /&gt;It is also validated against the early TCK 2.0 build (with &lt;a href=&quot;http://ashakirin.blogspot.ie/&quot;&gt;Andrei&lt;/a&gt; helping a lot).&lt;br /&gt;&lt;br /&gt;Client API is 50% done - CXF WebClient API has been enhanced to support new Client interceptors and filters, Response and even Asynchronous Invocations (with thanks to &lt;a href=&quot;http://www.dankulp.com/blog/&quot;&gt;Dan&lt;/a&gt;).  Still some work to do on the actual new Client API. We are getting there.&lt;br /&gt;&lt;br /&gt;So try JAX-RS 2.0 API and enjoy !&lt;br /&gt;&lt;br /&gt;</content:encoded>
	<dc:date>2013-06-13T21:14:45+00:00</dc:date>
</item>
<item rdf:about="http://raibledesigns.com/rd/entry/life_update1">
	<title>Matt Raible: Life Update</title>
	<link>http://raibledesigns.com/rd/entry/life_update1</link>
	<content:encoded>For the &lt;a href=&quot;https://www.google.com/search?q=raible+ski+season&amp;amp;oq=raible+ski+season&quot;&gt;past several years&lt;/a&gt;, I've written &quot;farewell to ski season&quot; posts at the end of April. This year, I intended to as well, but I never knew it was going to end! 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
A lot's been going on since I last wrote here. First of all, the end of the ski season was fantastic! The last week in Winter Park was the best skiing of the year. The first (Tuesday) afternoon, I started skiing around 1pm and it snowed all afternoon - resulting in several inches by the end of the day. The next day was smooth and empty, followed by a day of deep powder and knee-deep runs down Eagle Wind. I had one of the best runs of my life that day.
&lt;/p&gt;
&lt;p&gt;
While the snow was great at the end (and far better than last year), I didn't get as many days as I'd like. Only 22 this year. Most of them with Trish, Abbie and Jack. Next year, we'll be getting Abbie a &lt;a href=&quot;http://www.coloradoski.com/passport&quot;&gt;Colorado 5th Grade Free Ski Pass&lt;/a&gt; and trying to hit all the ski resorts in the state. Below are some of my favorite pictures from this year's season - can't wait for next year!
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mcginityphoto/8362826679/&quot; title=&quot;Fun at the Tubing hill by McGinityPhoto, on Flickr&quot;&gt;&lt;img alt=&quot;Fun at the Tubing hill&quot; height=&quot;160&quot; src=&quot;http://farm9.staticflickr.com/8359/8362826679_bc58868d67_m.jpg&quot; style=&quot;border: 1px solid black;&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;

&lt;a href=&quot;http://www.flickr.com/photos/mcginityphoto/8362821313/&quot; title=&quot;Woweee! by McGinityPhoto, on Flickr&quot;&gt;&lt;img alt=&quot;Woweee!&quot; height=&quot;160&quot; src=&quot;http://farm9.staticflickr.com/8094/8362821313_317a12abf1_m.jpg&quot; style=&quot;border: 1px solid black; margin-left: 10px;&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://farm9.staticflickr.com/8255/8661418123_9e61066666_c.jpg&quot; rel=&quot;lightbox[trifecta2013]&quot; title=&quot;We love closing weekend at Steamboat!&quot;&gt;&lt;img alt=&quot;We love closing weekend at Steamboat!&quot; height=&quot;375&quot; src=&quot;http://farm9.staticflickr.com/8255/8661418123_9e61066666.jpg&quot; style=&quot;border: 1px solid black;&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Bus Project&lt;/strong&gt;&lt;br /&gt;
The &lt;a href=&quot;http://raibledesigns.com/rd/entry/when_is_the_bus_gonna&quot;&gt;last time I wrote about The Bus&lt;/a&gt;, it was in October. Since then, its rear suspension and wheels/times have been installed. In February, I bought a brand-new 911 racing engine and it's been installed as well. 
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/8615924358/&quot; title=&quot;Sweet Stance by mraible, on Flickr&quot;&gt;&lt;img alt=&quot;Sweet Stance&quot; height=&quot;180&quot; src=&quot;http://farm9.staticflickr.com/8522/8615924358_c863705496_m.jpg&quot; style=&quot;border: 1px solid black;&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/8615925190/&quot; title=&quot;Love That Boy by mraible, on Flickr&quot;&gt;&lt;img alt=&quot;Love That Boy&quot; height=&quot;180&quot; src=&quot;http://farm9.staticflickr.com/8263/8615925190_80b016767b_m.jpg&quot; style=&quot;border: 1px solid black; margin-left: 30px;&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-ash3/57994_10151431833774401_937947095_n.jpg&quot; rel=&quot;lightbox[lifeupdate2013]&quot;&gt;
&lt;img alt=&quot;Photo: Ben finished the rear engine mounts today.......3.2 liter 6 cylinder Porsche 911 engine installed in a '66 Bus.&quot; class=&quot;img&quot; height=&quot;403&quot; src=&quot;https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-ash3/p480x480/57994_10151431833774401_937947095_n.jpg&quot; style=&quot;border: 1px solid black;&quot; width=&quot;538&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;
There's still quite a bit of suspension, drivetrain and steering work to do, but it's in good hands. Last week, I removed it from Motorworks Restorations and I've started finishing it myself. I don't have welding skills and equipment, so I'm contracting that out, as I will most of the finishing touches. I'm also thinking of writing a letter to one of those Body Shop shows on TV and seeing if I can get them to finish it. 
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/9032950835/&quot; title=&quot;Leaving Motorworks by mraible, on Flickr&quot;&gt;&lt;img alt=&quot;Leaving Motorworks&quot; height=&quot;180&quot; src=&quot;http://farm8.staticflickr.com/7418/9032950835_57cf83c68f_m.jpg&quot; style=&quot;border: 1px solid black;&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/9035175304/&quot; title=&quot;Time to get this thing done! by mraible, on Flickr&quot;&gt;&lt;img alt=&quot;Time to get this thing done!&quot; height=&quot;180&quot; src=&quot;http://farm4.staticflickr.com/3679/9035175304_773922f83b_m.jpg&quot; style=&quot;border: 1px solid black; margin-left: 10px;&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Gig&lt;/strong&gt;&lt;br /&gt;
If you've seen my &lt;a href=&quot;http://www.linkedin.com/in/mraible&quot;&gt;LinkedIn Profile&lt;/a&gt; lately, you'll know I was looking for a new gig. I found one in mid-May and started consulting at &lt;a href=&quot;http://travelport.com&quot;&gt;Travelport&lt;/a&gt; in June. It's a nice 11-mile bike ride (uphill on the way there, downhill coming home) that I've thoroughly enjoyed. Takes me about an hour each way and is &lt;em&gt;much&lt;/em&gt; better than sitting in traffic for 45 minutes. The project is interesting and fun to work on, and it ends in a couple weeks. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Wedding and Honeymoon&lt;/strong&gt;&lt;br /&gt;
In July, we're heading up to The Cabin in Montana to vacation and get ready for our wedding. We'll be enjoying the outdoors (rafting, biking, fishing), visiting with my folks and getting ready for the big day. After that, we'll be heading on a whirlwind honeymoon that takes us from Ireland to Italy to Thailand to Fiji. We're very much looking forward to the whole adventure.
&lt;/p&gt;
&lt;p&gt;And with that, I must go. It's &lt;a href=&quot;http://craftcruisers.com&quot;&gt;Craft Cruisers&lt;/a&gt; night and there's beer to drink. &lt;img alt=&quot;:)&quot; class=&quot;smiley&quot; src=&quot;http://raibledesigns.com/images/smileys/smile.gif&quot; title=&quot;:)&quot; /&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-13T16:34:26+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/EdwardJYoonsBlog/~3/wwOJuaMJ8cs/www.html">
	<title>Edward J. Yoon: WWW에 대한 잡설</title>
	<link>http://feedproxy.google.com/~r/EdwardJYoonsBlog/~3/wwOJuaMJ8cs/www.html</link>
	<content:encoded>WWW에 하이퍼텍스트의 결합으로 HTML이 탄생하고 정보의 바다, 정보도서관이 생성되니 어느 순간 검색엔진이 출현하였다. 쇼핑몰들이 대거 출현하더니 그 다음으로 사용자들의 적극참여와 함께 발전해나가는 오늘날의 위키, 블로그와 소셜 서비스가 출현하는 순서다.&lt;br /&gt;
&lt;br /&gt;
그 중간 과정에서 똑똑한척하던 많은 이들이 미래의 웹에 대해 헛다리짚은 것이 있겠으니 그게 시만틱웹과 인공지능. 구글이라면 왠지 가능할 것도 같지만 향후 (가까운) 미래의 웹 발전 방향에 대한 내 생각은 전혀 다름.&lt;br /&gt;
&lt;br /&gt;
IT 기술의 트렌드도 모두 필요에 의해 시작되고 발전하며 변화하지. 아주 자연스럽게, 과하게 우아한 연구 개발들은 사라질 수 밖에.&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/EdwardJYoonsBlog/~4/wwOJuaMJ8cs&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-13T10:45:12+00:00</dc:date>
</item>
<item rdf:about="http://shane.curcuru.name/blog/2013/06/midlife-crisis-schedule/">
	<title>Shane Curcuru: ALERT: I’m scheduling my midlife crisis next week</title>
	<link>http://shane.curcuru.name/blog/2013/06/midlife-crisis-schedule/</link>
	<content:encoded>&lt;p&gt;Dear Friends,&lt;/p&gt;
&lt;p&gt;A number of factors in my life lately have led to a whole lot of stress – above and beyond normal life – for a while now.  Therefore, in part to deal with these issues, I am hereby declaring a midlife crisis.  I plan to start it in exactly one week [1], at lunchtime, on Friday June 21st, and stretching throughout the summer months.  I’m sure you all have many questions, so let me try to address some of them now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shane! What’s wrong, Shane?&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;I’ve decided to have a midlife crisis.  Isn’t that the responsible thing to do?  I figure if I schedule some of it out, it’ll be much more convenient for everyone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Are you OK?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes, in the big picture, I’m still better off than most humans on the planet: I have a wonderful wife, daughter and cats; a comfy home; and a paying job.  So color me #FirstWorldProblems for sure.  But…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But what?  What’s been going on?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Archduke Franz Ferdinand moment was probably the death of my father, in January of this year.  Dealing with both the personal issues and especially dealing with the paperwork and other extended family estate issues was far more than I expected, and is continuing.  This also led to a number of other stresses and health issues for me, which of course got me worried about being stressed…  Plus, my father was a  hoarder, and the responsibility of cleaning out his house(es) is a &lt;strong&gt;huge&lt;/strong&gt; undertaking that’s not even half done.&lt;/p&gt;
&lt;p&gt;Coupling this with both the hectic normal life of a family with a young school child, two working parents with busy jobs, plus my significant (and growing) volunteer responsibilities at the ASF, has just been more than is comfortable to deal with.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So what are you doing about it?&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Well, right now I’m writing this witty and informative blog post about it, just for you!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(ahem) No, really.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, I figured since I’m of that age anyway, I might as well schedule a midlife crisis.  See, one of the skills I’ve always thought I should work on is better time management, so I figure if I can schedule a midlife crisis I’d already be improving myself.&lt;/p&gt;
&lt;p&gt;Hence, to have a proper midlife crisis, I am taking an unpaid leave of absence from my job.  Thus while I may be without regular income (but see: #FirstWorldProblems), I will have ample time to do all those crazy and fun things that go with a traditional midlife crisis.  And since I won’t have a 9-to-5 (ha!) for a while, I should be much less worried about “getting things done” and just relax.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cool – so what are you planning to do?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, it may sound trite, but I plan to buy a new(er) car.  While I may love my current BMW &lt;em&gt;very&lt;/em&gt; dearly, he’s finally started to succumb to the dreaded E36 rust monster.  Be on the lookout for an E90 sedan w/manual &amp;amp; sunroof for me.&lt;/p&gt;
&lt;p&gt;I also plan to enjoy the summer.  While I’ve had sabbaticals before (thank you Lotus!), I’m really looking forward to having a whole 12 weeks of no job.  I’ll do some cool stuff with my family, we’ll go visit family &amp;amp; friends a bunch, and I’ll do some important – or not so important, but fun – projects at home.  Perhaps finishing my retro man cave, or finally organizing my entire digital life.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That sounds good – but will it help?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not sure – I’ve never had 3 months off from my job since I started working at Lotus almost 2X years ago.  But I also hope to work on a bunch of those things that I keep wanting to really do, but never seem to complete.  I’m at the point in life where it’s clear to me that having more available time is more important right now than, say, income.  And, #FirstWorldProblems, I am lucky enough in my career to be able to take a temporary leave from work (thanks, manager!).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Good for you.  What does this have to do with me?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, one of the most important uses of additional free time that I can think of is to spend more time with friends!  So one of the (again, stereotypical) things I hope to do is a few guy trips or dinners out with friends.  Movies, good dinners, a drive somewhere, some card games, a trip to MV, or a recap of my 10th anniversary bachelor party would all be fun.&lt;/p&gt;
&lt;p&gt;Likewise, it would be great to see families and friends, and local friends from school, and so on.  We have a few weeks scheduled already, but otherwise plenty of time in the summer available now.  So that’s what it does with you – I’d love to see all you friends more!&lt;/p&gt;
&lt;p&gt;In any case, wrapping up things here at work will be quite busy until then, but do send me an email if you have cool ideas of stuff to do this summer.&lt;/p&gt;
&lt;p&gt;Thanks for asking those great questions, by the way.  That’s just what I needed to feel like I have a good start to my midlife crisis.&lt;/p&gt;
&lt;p&gt;[1] BHD and the astute readers of my blog will of course note the discrepancy, which I will note is likely a result of stress getting the date wrong.  That, or I’m just trying to be funny.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-12T20:56:47+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/robweir/antic-atom/~3/3E17Hq80dQg/the-power-of-brand-and-the-power-of-product-part-2.html">
	<title>Rob Weir: The Power of Brand and the Power of Product, Part 2</title>
	<link>http://feedproxy.google.com/~r/robweir/antic-atom/~3/3E17Hq80dQg/the-power-of-brand-and-the-power-of-product-part-2.html</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;&lt;p&gt;In &lt;a href=&quot;http://www.robweir.com/blog/2013/05/power-of-brand-power-of-product-1.html&quot;&gt;Part 1&lt;/a&gt; of this series we looked at a model of product adoption and market share that had a special and valuable property:  the parameters of the model could be derived from a single survey question, e.g.:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“What is your awareness with the hand cream called Whizzo-Soft?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A. I have never heard of it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;B. I have heard of it but I have never tried it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C. I have tried it once.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;D. I use it sometimes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E. I use it regularly.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Given N responses to that survey questions you can derive the factors in the model by simple math:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Customer Awareness = 1 – A/N&lt;/li&gt;
&lt;li&gt;Customer Motivation = (C + D + E) / (N -A)&lt;/li&gt;
&lt;li&gt;Customer Satisfaction = (D + E)/(N – A – B)&lt;/li&gt;
&lt;li&gt;Market Share = Customer Awareness * Customer Motivation * Customer Satisfaction&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So let’s take a look at how this can be used in practice, taking the leading open source office productivity editor, OpenOffice, and the lesser known LibreOffice fork, as examples.&lt;/p&gt;
&lt;p&gt;As mentioned in Part 1, the execution of the survey is critical here.  Without a proper, random survey of the market, the results will not be accurate.  In particular a survey of your current users will not work, since one of your goals is to find out what proportion of users are not familiar with your product.&lt;/p&gt;
&lt;p&gt;So in this case I used Google’s new &lt;a href=&quot;http://www.google.com/insights/consumersurveys/&quot;&gt;Consumer Survey&lt;/a&gt; service which uses sampling and post-stratification weighting to match the target population, which in this case was the US internet population.  In other words, the survey is weighted to reflect the population demographics, for age, sex, region of the country, urban versus rural,  income, etc.   I did this survey in a personal capacity for my own interest.  The &lt;a href=&quot;http://www.robweir.com/blog/who-is-rob-weir&quot;&gt;Standard Disclaimer&lt;/a&gt; applies.&lt;/p&gt;
&lt;p&gt;They survey question (and responses were):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is your familiarity with the software application called “OpenOffice”?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I have never heard of it&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I am aware of it but have never used it&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I have tried it once&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I use it only sometimes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I use it on a regular basis&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With 1502 responses, the results were:&lt;/p&gt;
&lt;table border=&quot;1&quot; width=&quot;316&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;I have never heard of it&lt;/td&gt;
&lt;td&gt;72.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I am aware of it but have never used it&lt;/td&gt;
&lt;td&gt;9.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I have tried it once&lt;/td&gt;
&lt;td&gt;5.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I use it only sometimes&lt;/td&gt;
&lt;td&gt;5.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I use it on a regular basis&lt;/td&gt;
&lt;td&gt;6.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br class=&quot;blank&quot; /&gt;&lt;br /&gt;
And then with some simple arithmetic we have:&lt;/p&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Customer Awareness&lt;/td&gt;
&lt;td&gt;27.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Motivation&lt;/td&gt;
&lt;td&gt;65.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Satisfaction&lt;/td&gt;
&lt;td&gt;68.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Market Share&lt;/td&gt;
&lt;td&gt;12.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br class=&quot;blank&quot; /&gt;&lt;br /&gt;
What does that mean?  In plain English:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Around 1/4 of US internet users have heard of the OpenOffice software application.  That is the brand recognition.&lt;/li&gt;
&lt;li&gt;Of those who have heard of OpenOffice, around 2/3 of them were sufficiently motivated to try the software.&lt;/li&gt;
&lt;li&gt;And of those who tried OpenOffice 69% were sufficiently satisfied with the software that they continue to use it.&lt;/li&gt;
&lt;li&gt;Overall, 1/8 of the surveyed population uses OpenOffice sometimes or regularly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The absolute numbers are tricky to interpret in isolation.  More interesting is to look at the numbers over time.  The same survey question, with the same methodology was also given last September.  The results and the change are in the following table, with changes having statistical significance (90% confidence level) emphasized in bold.&lt;/p&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt; OpenOffice&lt;/td&gt;
&lt;td&gt;September 2012&lt;/td&gt;
&lt;td&gt;April 2013&lt;/td&gt;
&lt;td&gt;Change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Awareness&lt;/td&gt;
&lt;td&gt;24.3%&lt;/td&gt;
&lt;td&gt;27.6%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;14% growth&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Motivation&lt;/td&gt;
&lt;td&gt;63.0%&lt;/td&gt;
&lt;td&gt;65.9%&lt;/td&gt;
&lt;td&gt;5% growth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Satisfaction&lt;/td&gt;
&lt;td&gt;70.6%&lt;/td&gt;
&lt;td&gt;68.7%&lt;/td&gt;
&lt;td&gt;3% decline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Market Share&lt;/td&gt;
&lt;td&gt;10.8%&lt;/td&gt;
&lt;td&gt;12.5%&lt;/td&gt;
&lt;td&gt;16% growth&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br class=&quot;blank&quot; /&gt;&lt;br /&gt;
The Apache OpenOffice project should be gratified that their efforts have paid off, and awareness of the product is increasing, as well as market share.  This goes contrary to some loudly expressed concerns that the OpenOffice brand would languish at Apache.  Clearly this is not so.  The brand is growing, as well as the market share.&lt;/p&gt;
&lt;p&gt;Since these factors are multiplicative, an increase in any one of them, or any combination of them, will grow the market share.  But it is probably easiest to grow the factor that is smallest today.  So looking to the future, increasing the awareness of the existence of OpenOffice would give the “biggest bang for the buck”.&lt;/p&gt;
&lt;p&gt;For an entirely different view we can look at the same survey question and methodology, administered at the same times, only substituting the product name “LibreOffice” for “OpenOffice”.  Again, statistically significant changes are shown in bold.&lt;/p&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt; LibreOffice&lt;/td&gt;
&lt;td&gt;September 2012&lt;/td&gt;
&lt;td&gt;April 2013&lt;/td&gt;
&lt;td&gt;Change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Awareness&lt;/td&gt;
&lt;td&gt;10.7%&lt;/td&gt;
&lt;td&gt;9.9%&lt;/td&gt;
&lt;td&gt;7% decline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Motivation&lt;/td&gt;
&lt;td&gt;53.3%&lt;/td&gt;
&lt;td&gt;66.7%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;27% growth&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Satisfaction&lt;/td&gt;
&lt;td&gt;73.7%&lt;/td&gt;
&lt;td&gt;59.7%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;19% decline&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Market Share&lt;/td&gt;
&lt;td&gt;4.2%&lt;/td&gt;
&lt;td&gt;4.0%&lt;/td&gt;
&lt;td&gt;5% decline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br class=&quot;blank&quot; /&gt;&lt;br /&gt;
The brand recognition is not growing and is stuck at 10%.   The fact that in its third year of product availability the LibreOffice brand recognition has plateaued (if not declined) should be a concern.&lt;/p&gt;
&lt;p&gt;But the more interesting thing here is the large increase in users trying LibreOffice (Motivation)  offset by the large decrease in users who continue to use the product (Satisfaction).  What does this mean?  Only the LibreOffice folks can say for certain, but this pattern is exactly what one would expect from a product where marketing has got ahead of quality.  It is like a movie that previews well, but suffers from bad reviews and poor sales after the first weekend.  Product development aims to make products that users want.  And marketing persuades users to try the product.  But where there is a disconnect between the two, where the product is not fulfilling the needs of those to whom it is being marketed, or (the same thing really) the product is being marketed to unsuitable users, this is what you see.&lt;/p&gt;
&lt;p&gt;I should note that LibreOffice supporters like to blame their lack of success on not having the OpenOffice brand.  Yes, having a familiar brand is a nice thing to have, but the drop in Satisfaction for those trying LibreOffice is not a brand issue, since it is entirely among those who are already familiar with the LibreOffice brand.  Satisfaction is an attribute of the product, not due to brand.&lt;/p&gt;
&lt;p&gt;Also, we can compare the metrics across products.  When we look at the most recent data OpenOffice clearly has an enormous lead in name recognition and market share, but also a large lead in Satisfaction.   69% of those who tried OpenOffice remained users, compared to 60% for those who attempted to use LibreOffice.    Keep your users satisfied and it is hard to go wrong.&lt;/p&gt;
&lt;p&gt;Finally, and to reiterate up what I wrote earlier in my &lt;a href=&quot;http://www.robweir.com/blog/2011/06/openoffice-libreoffice-and-the-scarcity-fallacy.html&quot;&gt;Scarcity Fallacy&lt;/a&gt; post, when you consider the position of Microsoft Office in this market, both products have a relatively small presence, with ample of room to grow, at Microsoft’s expense.  This is a great area to advance the cause of open source software, in a product category that almost every user needs.  There is no shortage of opportunity here, only a shortage of imagination.  Imagine if we combined the stability/quality and brand recognition of Apache OpenOffice with the enthusiastic marketing team of LibreOffice? (Combine our 50 million downloads with their 50 million press releases)  What if we combined the disciplined development approach of OpenOffice with LibreOffice ‘s talented developers?   Imagine what we could do?&lt;/p&gt;
&lt;p&gt;Let’s admit it.  LibreOffice has plateaued.  They have their Linux desktop users, all 3% of the market that runs Linux on the desktop.  This market share was not earned.  These are not users that they won over.  These are users they got via the control their corporate sponsors have over Linux distributions.  They flipped a bit and instantly had that market share.   But their sponsors are Linux vendors that have little motivation to reach beyond that niche market.  (They certainly have little success doing so).   The opportunity for growth is not on the Linux desktop, unless the goal is to merely be a small fish in an even smaller pond.   Of course, LibreOffice could continue, and languish indefinitely as a pet project of a handful of Linux developers.   Or they could work with us at Apache, and satisfy the Linux users, but do so very much more as well.  This would also be a cost savings for LibreOffice’s corporate sponsors, no small factor in a world of declining PC sales.  The choice now, as it always has been, is theirs.&lt;/p&gt;
&lt;div class=&quot;yarpp-related-rss&quot;&gt;
&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://www.robweir.com/blog/2013/05/power-of-brand-power-of-product-1.html&quot; rel=&quot;bookmark&quot; title=&quot;The Power of Brand and the Power of Product, Part 1&quot;&gt;The Power of Brand and the Power of Product, Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.robweir.com/blog/2006/08/9697-percent-problem.html&quot; rel=&quot;bookmark&quot; title=&quot;The 96.97 percent problem&quot;&gt;The 96.97 percent problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.robweir.com/blog/2010/04/ibm-consumability-survey.html&quot; rel=&quot;bookmark&quot; title=&quot;IBM Software Consumability Survey&quot;&gt;IBM Software Consumability Survey&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=3E17Hq80dQg:FmVepSVa1cE:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=3E17Hq80dQg:FmVepSVa1cE:gIN9vFwOqvQ&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?i=3E17Hq80dQg:FmVepSVa1cE:gIN9vFwOqvQ&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=3E17Hq80dQg:FmVepSVa1cE:V_sGLiPBpWU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?i=3E17Hq80dQg:FmVepSVa1cE:V_sGLiPBpWU&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=3E17Hq80dQg:FmVepSVa1cE:-BTjWOF_DHI&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?i=3E17Hq80dQg:FmVepSVa1cE:-BTjWOF_DHI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=3E17Hq80dQg:FmVepSVa1cE:YwkR-u9nhCs&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?d=YwkR-u9nhCs&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=3E17Hq80dQg:FmVepSVa1cE:F7zBnMyn0Lo&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?i=3E17Hq80dQg:FmVepSVa1cE:F7zBnMyn0Lo&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=3E17Hq80dQg:FmVepSVa1cE:qj6IDK7rITs&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?d=qj6IDK7rITs&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/robweir/antic-atom/~4/3E17Hq80dQg&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-12T17:55:05+00:00</dc:date>
</item>
<item rdf:about="http://bryanpendleton.blogspot.com/2013/06/i-continue-to-be-baffled-by-e-book.html">
	<title>Bryan Pendleton: I continue to be baffled by e-book pricing</title>
	<link>http://bryanpendleton.blogspot.com/2013/06/i-continue-to-be-baffled-by-e-book.html</link>
	<content:encoded>&lt;p&gt;I felt like I wanted to re-read &lt;a href=&quot;http://www.amazon.com/Watership-Scribner-Classics-Richard-Adams/dp/1442444053/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1371053289&amp;amp;sr=1-1&amp;amp;keywords=watership+down&quot;&gt;&lt;i&gt;Watership Down&lt;/i&gt;&lt;/a&gt;; it's been 35 years since I read it and I'd like to re-explore it. &lt;/p&gt;&lt;p&gt;On Amazon, I can find: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;New (&quot;mass market&quot;) paperback editions for $6.50&lt;/li&gt;&lt;li&gt;Used paperback editions for less than $1.00 (+shipping)&lt;/li&gt;&lt;li&gt;New paperback edition from Amazon is $13.00&lt;/li&gt;&lt;li&gt;Kindle edition is $11.00&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Does anybody actually pay $11.00 for the Kindle edition of a book you can get for half that price? &lt;/p&gt;&lt;p&gt;I thought about just getting the pirated version from the Internet, but decided instead to buy a used copy for $3.00. &lt;/p&gt;&lt;p&gt;I find the whole Kindle thing bizarre. It's such a gorgeous device, but in practice I'm buying almost no content for it. &lt;/p&gt;&lt;p&gt;As the kids say, &quot;just saying.&quot;&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-12T16:13:13+00:00</dc:date>
</item>
<item rdf:about="http://www.symphonious.net/2013/06/12/importing-an-ant-buildfile-multiple-times/">
	<title>Adrian Sutton: Importing an ant buildfile multiple times</title>
	<link>http://www.symphonious.net/2013/06/12/importing-an-ant-buildfile-multiple-times/</link>
	<content:encoded>&lt;p&gt;According to &lt;a href=&quot;https://ant.apache.org/manual/Tasks/import.html&quot;&gt;the ant documentation&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;It is possible to include the same file more than once by using different prefixes, it is not possible to import the same file more than once.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Unfortunately, it turns out this isn’t &lt;em&gt;quite &lt;/em&gt;true. In most cases, ant will indeed ignore a request to import a file for the second time, so:&lt;/p&gt;&lt;pre&gt;&amp;lt;import&amp;gt;&lt;br /&gt;   &amp;lt;file name=&quot;utils.xml&quot;/&amp;gt;&lt;br /&gt;   &amp;lt;file name=&quot;utils.xml&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/import&amp;gt;&lt;/pre&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;will only import utils.xml once. This is true even if there’s a chain of files being imported (so A imports B and C, then B imports C as well, C will only be imported once).&lt;/p&gt;&lt;p&gt;The problem arises if you’re importing the file via two different methods, you might wind up having it actually be imported twice. In my case I was loading build files from a zip archive (why is a long story that I should write up some time) and those build files references other files also within the zip file. So my main build file had:&lt;/p&gt;&lt;pre&gt;&amp;lt;import&amp;gt;&lt;br /&gt;  &amp;lt;javaresource classpath=&quot;bootstrap.zip&quot; &lt;br /&gt;                     name=&quot;basic-build.xml&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/import&amp;gt;&lt;/pre&gt;&lt;p&gt;Then basic-build.xml included another utils file from the same zip. Being the well-coded ant file that it is, basic-build.xml doesn’t depend on knowing where it’s actually located, so it imports the utils file via:&lt;/p&gt;&lt;pre&gt;&amp;lt;import&amp;gt;&lt;br /&gt;  &amp;lt;url baseurl=${ant.file.basic-build}&quot; relativePath=&quot;ivy-utils.xml&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/import&amp;gt;&lt;/pre&gt;&lt;p&gt;This all works just fine. Then there came a requirement in our main build file to use one of the macros from ivy-utils.xml to set a version number &lt;em&gt;before&lt;/em&gt; basic-build.xml was imported. So the main build file wound up with something like:&lt;/p&gt;&lt;pre&gt;&amp;lt;import&amp;gt;
 &amp;lt;javaresource classpath=&quot;bootstrap.zip&quot;&lt;br /&gt;                    name=&quot;ivy-utils.xml&quot;/&amp;gt;
&amp;lt;/import&amp;gt;&lt;br /&gt;&amp;lt;!-- Do some stuff --&amp;gt;
&amp;lt;import&amp;gt;&lt;br /&gt; &amp;lt;javaresource classpath=&quot;bootstrap.zip&quot; &lt;br /&gt;                    name=&quot;basic-build.xml&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/import&amp;gt;&lt;/pre&gt;&lt;p&gt;Suddenly the build started failing because ivy-utils.xml was being executed twice and attempting to redefine the ivy configuration which was explicitly disallowed.&lt;/p&gt;&lt;p&gt;Looking at the ant -debug output clearly showed the ivy-utils.xml was being imported twice and not skipped, and even that it came from &lt;em&gt;exactly&lt;/em&gt; the same URL. It appears that resolving the same file using two different mechanisms (javaresource and url in this case) caused ant to believe they were different files.&lt;/p&gt;&lt;p&gt;The answer was fairly straight-forward, use url resources consistently when importing the files:&lt;/p&gt;&lt;pre&gt;&amp;lt;import&amp;gt;
 &amp;lt;url url=&quot;jar:file:${ant.file}/bootstrap.zip!/ivy-utils.xml&quot;/&amp;gt;
&amp;lt;/import&amp;gt;&lt;br /&gt;&amp;lt;!-- Do some stuff --&amp;gt;
&amp;lt;import&amp;gt;&lt;br /&gt; &amp;lt;url url=&quot;jar:file:${ant.file}/bootstrap.zip!/basic-build.xml&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/import&amp;gt;&lt;/pre&gt;&lt;p&gt;Building a jar: URL like this is a little unpleasant but not unreasonable. Strictly we could have kept importing basic-build.xml using the javaresource approach but being consistent will save surprises in the future.&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/symphonious/~4/F1-4sZba8Z8&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-11T23:49:30+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/links/ZvUZ/~3/oUC_P1nwzTM/">
	<title>Ben Laurie: Rice Pudding</title>
	<link>http://feedproxy.google.com/~r/links/ZvUZ/~3/oUC_P1nwzTM/</link>
	<content:encoded>&lt;p&gt;For almost all of my life, I have hated rice pudding. But recently my wife made some (up to now, I’ve only seen her eat it from a tin – disgusting stuff). And it was awesome. So now I keep making rice pudding.&lt;/p&gt;
&lt;p&gt;I recently had occasion to cook it for a lot of people. Here’s the recipe.&lt;/p&gt;
&lt;p&gt;500g pudding rice&lt;br /&gt;
250g demarara sugar&lt;br /&gt;
1l whole milk&lt;br /&gt;
flavourings (see below)&lt;br /&gt;
ground nutmeg&lt;/p&gt;
&lt;p&gt;Flavourings: there’s probably a lot you can do, but the two I did most recently were (choose one):&lt;/p&gt;
&lt;p&gt;a) Zest of two oranges (I like to peel them with a potato peeler and then finely slice the peel) plus ground seeds from about 20-30 cardamom pods (pods removed).&lt;/p&gt;
&lt;p&gt;b) Zest of two limes and two lemons (as above).&lt;/p&gt;
&lt;p&gt;Put nearly all ingredients in a flat oven dish, should be about 1.5″ deep and mix. Dust the top with nutmeg. Cook at gas mark 3 for 2 hours.&lt;/p&gt;
&lt;p&gt;This should give you a nearly completely dried out rice pudding, with just a touch of moistness and a strong flavour. Which is how I like it.&lt;/p&gt;
&lt;p&gt;Serve with double cream. Should feed 12 generously.&lt;/p&gt;
&lt;p&gt;What? I didn’t say it was slimming!&lt;/p&gt;
&lt;p class=&quot;akst_link&quot;&gt;&lt;a class=&quot;akst_share_link&quot; href=&quot;http://www.links.org/?p=1311&amp;amp;akst_action=share-this&quot; id=&quot;akst_link_1311&quot; rel=&quot;nofollow&quot; title=&quot;E-mail this, post to del.icio.us, etc.&quot;&gt;Share This&lt;/a&gt;
&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/links/ZvUZ/~4/oUC_P1nwzTM&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-11T15:32:13+00:00</dc:date>
</item>
<item rdf:about="http://bahumbug.wordpress.com/2013/06/10/new-laptop/">
	<title>Nick Kew: New laptop</title>
	<link>http://bahumbug.wordpress.com/2013/06/10/new-laptop/</link>
	<content:encoded>&lt;p&gt;After 7 years heavy use, my old macbook is showing its age.  The battery has long been knackered: just about adequate to move the machine from one room to another and plug it in to the mains.  The backlight &lt;a href=&quot;http://bahumbug.wordpress.com/2012/09/17/technology-fail/&quot; title=&quot;Technology FAIL&quot;&gt;failed last year&lt;/a&gt; and needs nursing to keep it working.  And now the battery has reached a point where it powers down if I just accidentally knock the power lead out of place for half a second.&lt;/p&gt;
&lt;p&gt;It’s been a good little machine and served its purpose: a laptop with a Unix-family OS and hardware that just worked.  Plus a fantastic display quality that made a desktop substitute of the 13″ screen.  It’s not been trouble-free: &lt;a href=&quot;http://bahumbug.wordpress.com/2009/09/29/mac-rip/&quot; title=&quot;Mac RIP&quot;&gt;I had to replace the disc a while back&lt;/a&gt;, but on the whole it’s been great.  But now with two major expensive-to-repair faults, I guess it’s time to look around the market again, and take advantage of other advances, notably further reductions in size and weight since 2006.&lt;/p&gt;
&lt;p&gt;I don’t think I’ll go for another Macbook.  My experiences with more recent macbooks have been rather less positive than the old one, while at the same time I’d expect there to be a much wider range of laptops where the more ‘challenging’ things of 2006 – like ACPI and builtin wifi – just work, without hassle.&lt;/p&gt;
&lt;p&gt;So what’s a good laptop for Linux[1], or even with Linux preinstalled?  Another 13″ screen will suffice provided the display is of comparable quality to the old Mac, and I’d love it to be genuinely small and light with a good battery life.  That probably implies ‘ultrabook’.  And since I’ll be doing lots of work with the GNU toolchain – which can write hundreds of thousands of tempfiles in a typical build – I can’t alas go for an SSD-only machine.&lt;/p&gt;
&lt;p&gt;A bit of preliminary poking around suggests cheapo ultrabooks from Asus or Acer as good candidates with positive experiences from Linux users, and Lenovo and Toshiba as labels to avoid in the ultrabook space.  Comments solicited from readers who know more than I: will a £500-ish ultrabook be a decent working machine, or is it likely to be as shoddy and useless as the Dell I had before the macbook?  Anything in particular to look out for?  Any further suggestions?&lt;/p&gt;
&lt;p&gt;[1] Or I’d consider other-*X if someone convinced me it would be hassle-free on an appropriate piece of hardware.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/bahumbug.wordpress.com/2373/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/bahumbug.wordpress.com/2373/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=bahumbug.wordpress.com&amp;amp;blog=471959&amp;amp;post=2373&amp;amp;subd=bahumbug&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-10T00:06:55+00:00</dc:date>
</item>
<item rdf:about="http://blog.mikemccandless.com/2013/06/build-your-own-finite-state-transducer.html">
	<title>Michael McCandless: Build your own finite state transducer</title>
	<link>http://blog.mikemccandless.com/2013/06/build-your-own-finite-state-transducer.html</link>
	<content:encoded>Have you always wanted your very own &lt;a href=&quot;http://blog.mikemccandless.com/2010/12/using-finite-state-transducers-in.html&quot;&gt;Lucene finite state transducer&lt;/a&gt; (FST) but you couldn't figure out how to use Lucene's crazy APIs?  &lt;br /&gt;&lt;br /&gt; Then today is your lucky day!  I just built a &lt;a href=&quot;http://examples.mikemccandless.com/fst.py&quot;&gt;simple web application&lt;/a&gt; that creates an FST from the input/output strings that you enter.  &lt;br /&gt;&lt;br /&gt; If you just want a finite state automaton (no outputs) then enter only inputs, such as &lt;a href=&quot;http://examples.mikemccandless.com/fst.py?terms=mop%0D%0Amoth%0D%0Apop%0D%0Astar%0D%0Astop%0D%0Atop%0D%0A&amp;amp;cmd=Build+it%21&quot;&gt;this example&lt;/a&gt;: &lt;br /&gt;&lt;br /&gt; &lt;a href=&quot;http://examples.mikemccandless.com/fst.py?terms=mop%0D%0Amoth%0D%0Apop%0D%0Astar%0D%0Astop%0D%0Atop%0D%0A&amp;amp;cmd=Build+it%21&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/-ICc2McD6q6M/UbSXKeYmwII/AAAAAAAAARI/iNR6g5q5mGw/s1600/fsa.png&quot; /&gt;&lt;/a&gt;  &lt;br /&gt;&lt;br /&gt; If all of your outputs are &lt;a href=&quot;http://examples.mikemccandless.com/fst.py&quot;&gt;non-negative integers&lt;/a&gt; then the FST will use numeric outputs, where you sum up the outputs as you traverse a path to get the final output:  &lt;a href=&quot;http://examples.mikemccandless.com/fst.py&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/-2GjN-pvO6ls/UbSX6fOV7WI/AAAAAAAAARg/Y2OOZfUeOxo/s1600/numericFST.png&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt; Finally, if the outputs are &lt;a href=&quot;http://examples.mikemccandless.com/fst.py?terms=mop%2Fmop%0D%0Amoth%2Fmoth%0D%0Apop%2Fpop%0D%0Astar%2Fstar%0D%0Astop%2Fstop%0D%0Atop%2Ftop%0D%0A&amp;amp;cmd=Build+it%21&quot;&gt;non-numeric&lt;/a&gt; then they are treated as strings, in which case you concatenate as you traverse the path:  &lt;a href=&quot;http://examples.mikemccandless.com/fst.py?terms=mop%2Fmop%0D%0Amoth%2Fmoth%0D%0Apop%2Fpop%0D%0Astar%2Fstar%0D%0Astop%2Fstop%0D%0Atop%2Ftop%0D%0A&amp;amp;cmd=Build+it%21&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/-tn0w5H8LFP4/UbSXtgLnO_I/AAAAAAAAARQ/Hc48a1kwTJ8/s1600/stringsFST.png&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt; The red arcs are the ones with the NEXT optimization: these arcs do not store a pointer to a node because their to-node is the very next node in the FST.  This is a good optimization: it generally results in &lt;a href=&quot;https://issues.apache.org/jira/browse/LUCENE-4682?focusedCommentId=13552614&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13552614&quot;&gt;a large reduction of the FST size&lt;/a&gt;.  The bolded arcs tell you the next node is final; this is most interesting when a prefix of another input is accepted, such as &lt;a href=&quot;http://examples.mikemccandless.com/fst.py?terms=star%2Fabc%0D%0Astart%2Fxyz%0D%0A&amp;amp;cmd=Build+it%21&quot;&gt;this example&lt;/a&gt;:  &lt;br /&gt;&lt;br /&gt; &lt;a href=&quot;http://examples.mikemccandless.com/fst.py?terms=star%2Fabc%0D%0Astart%2Fxyz%0D%0A&amp;amp;cmd=Build+it%21&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/-KV7IPdbCtuY/UbSXxbadgeI/AAAAAAAAARY/pd_8OpZUaJY/s1600/prefixFST.png&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt; Here the &quot;r&quot; arc is bolded, telling you that &quot;star&quot; is accepted. Furthermore, that node following the &quot;r&quot; arc has a final output, telling you the overall output for &quot;star&quot; is &quot;abc&quot;.  &lt;br /&gt;&lt;br /&gt; The web app is a simple Python WSGI app; source code is &lt;a href=&quot;https://code.google.com/a/apache-extras.org/p/luceneutil/source/browse/fstApp.py&quot;&gt;here&lt;/a&gt;. It invokes a simple Java tool as a subprocess; source code (including generics violations!) is &lt;a href=&quot;https://code.google.com/a/apache-extras.org/p/luceneutil/source/browse/BuildFST.java&quot;&gt;here&lt;/a&gt;.</content:encoded>
	<dc:date>2013-06-09T15:01:31+00:00</dc:date>
</item>
<item rdf:about="http://blog.jpountz.net/post/52492720447">
	<title>Adrien Grand: Versatile sorting</title>
	<link>http://blog.jpountz.net/post/52492720447</link>
	<content:encoded>&lt;p&gt;Sorted data sets are very useful since they make a lot of things easier:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;checking for duplicates,&lt;/li&gt;
&lt;li&gt;computing frequencies (the number of times each unique element appears),&lt;/li&gt;
&lt;li&gt;compression (thanks to &lt;a href=&quot;https://en.wikipedia.org/wiki/Delta_encoding&quot; target=&quot;_blank&quot;&gt;delta encoding&lt;/a&gt; and bit-packing for example),&lt;/li&gt;
&lt;li&gt;searching thanks to &lt;a href=&quot;http://en.wikipedia.org/wiki/Binary_search_algorithm&quot; target=&quot;_blank&quot;&gt;binary search&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Java provides the ability to sort arrays and lists thanks to &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort(java.lang.Object%5B%5D)&quot; target=&quot;_blank&quot;&gt;Arrays.sort&lt;/a&gt; and &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List)&quot; target=&quot;_blank&quot;&gt;Collections.sort&lt;/a&gt;. These methods are flexible enough to accept custom comparators, so that you can define which sort order to use depending on your needs, but you don’t have the choice on the sorting algorithm although they can have very different speed and memory characteristics. Here is how the Oracle JVM 1.7 sorts data:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Arrays.sort(Object[]) uses &lt;a href=&quot;http://en.wikipedia.org/wiki/Timsort&quot; target=&quot;_blank&quot;&gt;TimSort&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Arrays.sort on native arrays uses a &lt;a href=&quot;http://iaroslavski.narod.ru/quicksort/DualPivotQuicksort.pdf&quot; target=&quot;_blank&quot;&gt;dual-pivot&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Quicksort&quot; target=&quot;_blank&quot;&gt;quicksort&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Collections.sort dumps the list into an Object[] array, sorts the array with TimSort, and then re-adds elements to the list from the array.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Although these APIs serve most use-cases, sometimes you would want to have more control over the implementation, for example:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;To sort parallel arrays&lt;/b&gt;: imagine you have an array of objects and an array of floats, where the float at offset &lt;i&gt;i&lt;/i&gt; is the score of the object at the same offset in the other array. Now you want to sort objects by their score. It is doable by writing a list view on top of these two arrays, but since Collections.sort dumps data into an Object[] array, this would be very memory intensive.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;To avoid useless object allocations&lt;/b&gt;: to sort a random-access list (such as &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html&quot; target=&quot;_blank&quot;&gt;ArrayList&lt;/a&gt;, but not &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html&quot; target=&quot;_blank&quot;&gt;LinkedList&lt;/a&gt;), there is no need to dump all your elements into an array, you could instead sort the list in place and save memory.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;To better fit your data&lt;/b&gt;: if your data is “almost” sorted, there is a good chance that TimSort would perform faster than Quicksort.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;To better fit your constraints&lt;/b&gt;: if you want to sort a huge array which occupies a large part of your heap, then TimSort might not be the best algorithm since it requires up to n/2 temporary slots. You could instead use an in-place sorting algorithm.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;To better reuse memory&lt;/b&gt;: say you want to sort 100,000 small Object[] arrays. For every array, Java’s Arrays.sort will create a new temporary array (TimSort needs temporary storage to perform merges). By having more control over the sorting implementation, the temporary storage could be reused.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In order to have more control over sorting, Lucene initially imported CGlib’s &lt;a href=&quot;http://grepcode.com/file/repo1.maven.org/maven2/cglib/cglib/2.2.2/net/sf/cglib/util/SorterTemplate.java&quot; target=&quot;_blank&quot;&gt;SorterTemplate&lt;/a&gt; and improved it over time. But then arose the need to use TimSort to sort partially-sorted data, and it was very hard to fold this sorting algorithm into SorterTemplate since this sorting algorithm requires temporary storage (on the contrary to the quicksort and in-place merge-sort implemented by SorterTemplate). This is why I started a small &lt;a href=&quot;https://github.com/jpountz/sorts&quot; target=&quot;_blank&quot;&gt;GitHub project&lt;/a&gt; to refactor SorterTemplate so that it can support more sorting algorithms:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;a modified &lt;a href=&quot;http://en.wikipedia.org/wiki/Timsort&quot; target=&quot;_blank&quot;&gt;TimSort&lt;/a&gt;, which allows you to configure the amount of temporary storage that can be allocated,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Merge_sort&quot; target=&quot;_blank&quot;&gt;Merge-sort&lt;/a&gt;, with configurable memory overhead similarly to TimSort,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Introsort&quot; target=&quot;_blank&quot;&gt;Introspective sort&lt;/a&gt;, which is essentially an improved &lt;a href=&quot;http://en.wikipedia.org/wiki/Quicksort&quot; target=&quot;_blank&quot;&gt;Quicksort&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Heapsort&quot; target=&quot;_blank&quot;&gt;Heap-sort&lt;/a&gt;, on both binary and ternay heaps.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;For example, here is some code which sorts two parallel arrays using introspective sort:&lt;/p&gt;
&lt;p&gt;These new classes are now being used in Lucene, but I think it could be very useful to other projects, so feel free to use them! Feedback is very welcome.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-08T22:15:00+00:00</dc:date>
</item>
<item rdf:about="http://bsnyderblog.blogspot.com/2013/06/removereinstall-of-macports.html">
	<title>Bruce Snyder: Remove/Reinstall of MacPorts</title>
	<link>http://bsnyderblog.blogspot.com/2013/06/removereinstall-of-macports.html</link>
	<content:encoded>&lt;a href=&quot;http://upload.wikimedia.org/wikipedia/commons/b/be/Macports-logo.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/b/be/Macports-logo.png&quot; /&gt;&lt;/a&gt; &lt;p&gt;After trying to upgrade Mercurial to the latest version via MacPorts, I ran into some compilation issues with a couple dependencies that I could not resolve at all. After realizing that there were dependency resolution issues amongst different versions of dependencies for different ports, I decided to remove and reinstall MacPorts from scratch. This provided a clean slate and everything worked without a problem, though I was annoyed that I had to take this drastic action and spend the time to get MacPorts working again.  &lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;h3&gt;Bash Completion For Git&lt;/h3&gt;One thing that I ran into was another change to the bash completion and prompt for git. As I mentioned in a &lt;a href=&quot;http://bsnyderblog.blogspot.com/2013/04/after-upgrading-macports-recently-i.html&quot;&gt;previous post&lt;/a&gt; about this topic, the location of the location for the &lt;tt&gt;git-prompt.sh&lt;/tt&gt; file had changed but this time I discovered that I had to source both the &lt;tt&gt;git-completion.bash&lt;/tt&gt; file and the &lt;tt&gt;git-prompt.sh&lt;/tt&gt; file to get things working. Below is what worked for me.   &lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;if [ -f /opt/local/share/git-core/contrib/completion/git-completion.bash ]; then&lt;br /&gt;  . /opt/local/share/git-core/contrib/completion/git-completion.bash&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [ -f /opt/local/share/git-core/contrib/completion/git-prompt.sh ]; then&lt;br /&gt;  . /opt/local/share/git-core/contrib/completion/git-prompt.sh&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;h3&gt;Bash Version 4.x&lt;/h3&gt;As I was reinstalling ports I noticed some logging that flew by in the terminal stating something about a requirement to use Bash 4 for the bash completion functionality to work properly. So I decided to utilize the newer version of Bash installed by MacPorts and here's how:   &lt;ol&gt;&lt;li&gt;Add the path to the new bash (&lt;tt&gt;/opt/local/bin/bash&lt;/tt&gt;) to &lt;tt&gt;/etc/shells&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;Use the &lt;tt&gt;chsh&lt;/tt&gt; utility to change the shell to the new bash: &lt;tt&gt;chsh -s /opt/local/bin/bash&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;After closing the terminal and opening a new one, check the bash version using either of these methods:  &lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ echo $BASH_VERSION&lt;br /&gt;4.2.42(2)-release&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;As long as the version displayed is the newer version from MacPorts, you should be ready to go.  &lt;p&gt;&lt;/p&gt; &lt;p&gt;Just for my own sake and in case I need it in the future, I'm going to list a number of items that I had to reinstall:   &lt;/p&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ sudo port install git-core +bash_completion +doc +svn&lt;br /&gt;$ sudo port install tig &lt;br /&gt;$ sudo port install mercurial +bash_completion&lt;br /&gt;$ sudo port install gnupg curl wget ncftp tree pstree watch screen proctools mtr cowsay&lt;br /&gt;$ sudo port install postgresql90-server&lt;br /&gt;&lt;/pre&gt; For more info about installing and configuring PostgreSQL, see my post titled &lt;a href=&quot;http://bsnyderblog.blogspot.com/2011/09/installing-postgresql-90-on-mac-os-x.html&quot;&gt;Installing PostgreSQL 9.0 on Mac OS X 10.6.8 via MacPorts&lt;/a&gt;&lt;p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-07T23:24:52+00:00</dc:date>
</item>
<item rdf:about="http://timbish.blogspot.com/2013/06/apachenmsactivemq-v160-released.html">
	<title>Tim Bish: Apache.NMS.ActiveMQ v1.6.0 Released</title>
	<link>http://timbish.blogspot.com/2013/06/apachenmsactivemq-v160-released.html</link>
	<content:encoded>After almost a year since the last release the Apache.NMS.ActiveMQ 1.6.0 Release bundle is now available.  We spent a lot of time on this release adding in new features and fixing bugs.  You'll find many features added that were previously only available in the Java client such as optimized acknowledge and priority backups for the Failover Transport. &lt;br /&gt;&lt;br /&gt;New in this release:&lt;br /&gt;&lt;br /&gt;* Adds support for non-blocking redelivery.&lt;br /&gt;* Supports priority backups for Failover transport.&lt;br /&gt;* Supports an Optimized Ack mode for MessageConsumers.&lt;br /&gt;* Adds Message Audits to prevent duplicate deliveries on Failover.&lt;br /&gt;* Implements the ISession Recover method.&lt;br /&gt;* Adds support for purging locally created temp destinations.&lt;br /&gt;* Properly handles cluster client re-balancing in Failover Transport.&lt;br /&gt;* Plus a lot more fixes and stability improvements.&lt;br /&gt;&lt;br /&gt;This release is based on the Apache.NMS API v1.6.0 and runs on .NET frameworks 2.0+ and Mono 2.0+.&lt;br /&gt;&lt;br /&gt;The binaries and source bundles for the Release Candidate can be found &lt;a href=&quot;http://activemq.apache.org/nms/apachenmsactivemq-v160.html&quot;&gt;here&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;The list of issues resolved is &lt;a href=&quot;https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311201&amp;amp;styleName=Html&amp;amp;version=12315987&quot;&gt;here&lt;/a&gt;:&lt;br /&gt; &lt;br /&gt;There are release binaries and debug binaries (with PDBs) provided.  The binary ZIP files include pre-built assemblies for all of the platforms that are supported.</content:encoded>
	<dc:date>2013-06-07T18:35:26+00:00</dc:date>
</item>
<item rdf:about="http://bsnyderblog.blogspot.com/2011/09/installing-postgresql-90-on-mac-os-x.html">
	<title>Bruce Snyder: Installing PostgreSQL 9.0 on Mac OS X 10.6.8 via MacPorts</title>
	<link>http://bsnyderblog.blogspot.com/2011/09/installing-postgresql-90-on-mac-os-x.html</link>
	<content:encoded>&lt;a href=&quot;http://3.bp.blogspot.com/-xiBNHcpxjWE/TndsywouDGI/AAAAAAAAAoY/X3SPSn0bhcE/s1600/postgresql_logo-555px.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5654107476491897954&quot; src=&quot;http://3.bp.blogspot.com/-xiBNHcpxjWE/TndsywouDGI/AAAAAAAAAoY/X3SPSn0bhcE/s320/postgresql_logo-555px.png&quot; style=&quot;float: left; margin: 0 10px 10px 0; cursor: pointer; cursor: hand; width: 175px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While installing PostgreSQL 9.0 on Mac OS X again, I had to figure out all these steps yet again. So I'm documenting this process for my own sake because I have been through this now twice on two computers recently, having to hunt down all of these commands each time. I'm hopeful that this will help others as well. &lt;br /&gt;&lt;br /&gt;Use the MacPorts command &lt;code&gt;port&lt;/code&gt; to install PostgreSQL 9.0, then create and own a data directory and a logs directory: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ sudo port install postgresql90-server&lt;br /&gt;$ sudo mkdir -p /opt/local/var/db/postgresql90/defaultdb&lt;br /&gt;$ sudo chown -R postgres:postgres /opt/local/var/db/postgresql90&lt;br /&gt;$ sudo mkdir -p /opt/local/var/log/postgresql90&lt;br /&gt;$ sudo chown -R postgres:postgres /opt/local/var/log/postgresql90&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you need to initialize the database using the data directory that was created above: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ sudo -u postgres /opt/local/lib/postgresql90/bin/initdb -D /opt/local/var/db/postgresql90/defaultdb&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I prefer to change the postgres user's shell to bash: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ sudo dscl . -create /Users/postgres UserShell /bin/bash&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;View the postgres user account just to make sure it all looks OK: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ dscl . -read /Users/postgres&lt;br /&gt;AppleMetaNodeLocation: /Local/Default&lt;br /&gt;GeneratedUID: 5B38F583-CBBF-4082-A32D-C17947394A27&lt;br /&gt;NFSHomeDirectory: /opt/local/var/db/postgresql90&lt;br /&gt;Password: *&lt;br /&gt;PrimaryGroupID: 501&lt;br /&gt;RealName:&lt;br /&gt; PostgreSQL-90 Server&lt;br /&gt;RecordName: postgres&lt;br /&gt;RecordType: dsRecTypeStandard:Users&lt;br /&gt;UniqueID: 502&lt;br /&gt;UserShell: /bin/bash&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Also check the postgres group: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ dscl . -read /Groups/postgres&lt;br /&gt;AppleMetaNodeLocation: /Local/Default&lt;br /&gt;GeneratedUID: 715FEB22-D0F1-443F-BC93-55896210DB44&lt;br /&gt;Password: *&lt;br /&gt;PrimaryGroupID: 501&lt;br /&gt;RealName: postgres&lt;br /&gt;RecordName: postgres&lt;br /&gt;RecordType: dsRecTypeStandard:Groups&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now edit the &lt;code&gt;pg_hba.conf&lt;/code&gt; file to add the appropriate permissions: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;# &quot;local&quot; is for Unix domain socket connections only&lt;br /&gt;local   all             all                                     trust&lt;br /&gt;# IPv4 local connections:&lt;br /&gt;host    all             all             127.0.0.1/32            trust&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This should allow you to connect easily using the &lt;code&gt;psql&lt;/code&gt; utility. &lt;br /&gt;&lt;br /&gt;I prefer to use the &lt;code&gt;pg_ctl&lt;/code&gt; command to start and stop PostgreSQL. This is simply because I learned PostgreSQL on Linux and that's all there was. To prevent having to retype the full command every time I want to start or stop the database, create a start script and a stop script in the postgres user's home directory named &lt;code&gt;pg_start&lt;/code&gt; and &lt;code&gt;pg_stop&lt;/code&gt;. Below are the contents of the &lt;code&gt;pg_start&lt;/code&gt; file. Make sure to create these files  as the postgres user in the home directory: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ sudo su - postgres &lt;br /&gt;$ vim ./pg_start &lt;br /&gt;#!/bin/sh &lt;br /&gt;/opt/local/lib/postgresql90/bin/pg_ctl -D /opt/local/var/db/postgresql90/defaultdb -l /opt/local/var/log/postgresql90/postgres.log start &amp;amp;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Below are the contents of the &lt;code&gt;pg_stop&lt;/code&gt; file: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ vim ./pg_stop &lt;br /&gt;#!/bin/sh &lt;br /&gt;/opt/local/lib/postgresql90/bin/pg_ctl -D /opt/local/var/db/postgresql90/defaultdb -l /opt/local/var/log/postgresql90/postgres.log stop&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Don't forget to make them executable: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ chmod +x ./pg_start &lt;br /&gt;$ chmod +x ./pg_stop&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(There is a Mac OS X way of starting PostgreSQL using &lt;code&gt;launchctl&lt;/code&gt; but I don't tend to use that because I'm used to the standard &lt;code&gt;pg_ctl&lt;/code&gt; command.)&lt;br /&gt;&lt;br /&gt;Now use the &lt;code&gt;pg_start&lt;/code&gt; script to start up PostgreSQL. Execute it as the postgres user (&lt;code&gt;sudo su - postgres&lt;/code&gt;) I tend to cat the log file just to make sure it's running correctly: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ ./pg_start &lt;br /&gt;$ server starting&lt;br /&gt;&lt;br /&gt;$ cat ../../log/postgresql90/postgres.log &lt;br /&gt;LOG:  database system is ready to accept connections&lt;br /&gt;LOG:  autovacuum launcher started&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Looks good so we'll create my user: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ /opt/local/lib/postgresql90/bin/createuser bsnyder&lt;br /&gt;Shall the new role be a superuser? (y/n) y&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Because I made my user a superuser, I can create my own db schema, so log out of the postgres user account and back to my own account first: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ exit&lt;br /&gt;$ /opt/local/lib/postgresql90/bin/createdb&lt;br /&gt;CREATE DATABASE&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;code&gt;createdb&lt;/code&gt; command automatically uses my username as the schema name. &lt;br /&gt;&lt;br /&gt;The only thing left to do before starting up the database is edit your &lt;code&gt;~/.profile&lt;/code&gt; or &lt;code&gt;~/.bash_profile&lt;/code&gt; to put the path to the PosgreSQL bin directory into the PATH: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;export PATH=/opt/local/lib/postgresql90/bin:$PATH&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now just log into the PostgreSQL server using &lt;code&gt;psql&lt;/code&gt; to make sure we're ready to roll: &lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;$ psql&lt;br /&gt;-bash: psql: command not found&lt;br /&gt;bsnyder@skunk [darwin](DARWIN-1527) $ /opt/local/lib/postgresql90/bin/psql &lt;br /&gt;psql (9.0.4)&lt;br /&gt;Type &quot;help&quot; for help.&lt;br /&gt;&lt;br /&gt;bsnyder=# select version();&lt;br /&gt;                                                                 version                                                                  &lt;br /&gt;------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt; PostgreSQL 9.0.4 on x86_64-apple-darwin10.8.0, compiled by GCC i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664), 64-bit&lt;br /&gt;(1 row)&lt;br /&gt;&lt;br /&gt;bsnyder=#&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And we're good to go!  &lt;p&gt;&lt;b&gt;UPDATE: &lt;/b&gt; For those who want a nice seamless experience stopping/starting Postgres via a Mac OS X preference pane, check out &lt;a href=&quot;https://github.com/jwang/pgpane&quot;&gt;John Wang's PGPane&lt;/a&gt;.  &lt;/p&gt;</content:encoded>
	<dc:date>2013-06-07T17:13:18+00:00</dc:date>
</item>
<item rdf:about="http://bsnyderblog.blogspot.com/2013/04/after-upgrading-macports-recently-i.html">
	<title>Bruce Snyder: MacPorts Upgrade Changes Bash Completion</title>
	<link>http://bsnyderblog.blogspot.com/2013/04/after-upgrading-macports-recently-i.html</link>
	<content:encoded>&lt;a href=&quot;http://2.bp.blogspot.com/-UB-bnHVIx9A/UVsryvcIQoI/AAAAAAAABQ8/FSze41ZyHXI/s1600/Macports-logo.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-UB-bnHVIx9A/UVsryvcIQoI/AAAAAAAABQ8/FSze41ZyHXI/s320/Macports-logo.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt; After upgrading Macports recently to version xxx, I started seeing the following error in the terminal when the &lt;tt&gt;.bash_profile&lt;/tt&gt; is loaded:   &lt;pre&gt;__git_ps1: command not found&lt;/pre&gt; Upon investigation, I discovered that the bash completion for git has been split into more than one file. Previously, all that was needed in the &lt;tt&gt;.bash_profile&lt;/tt&gt; was to source the single file for git like so:   &lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;if [ -f /opt/local/etc/bash_completion ]; then&lt;br /&gt;  . /opt/local/etc/bash_completion&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt; Since the update to Macports, now I also need to source the second file like so:   &lt;pre class=&quot;brush: xml&quot;&gt;&lt;br /&gt;if [ -f /opt/local/share/git-core/contrib/completion/git-prompt.sh ]; then&lt;br /&gt;  . /opt/local/share/git-core/contrib/completion/git-prompt.sh&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt; After closing/creating the terminal tab, the error is gone.</content:encoded>
	<dc:date>2013-06-07T16:06:41+00:00</dc:date>
</item>
<item rdf:about="http://blog.tirasa.net/blogs/index.php/coffeetime/customize-your-apache-syncope-console">
	<title>Marco Di Sabatino Di Diodoro: How to customize Apache Syncope console</title>
	<link>http://blog.tirasa.net/blogs/index.php/coffeetime/customize-your-apache-syncope-console</link>
	<dc:date>2013-06-06T08:43:00+00:00</dc:date>
</item>
<item rdf:about="http://blog.david-reid.com/2013/06/05/variable-pitch-take-2/">
	<title>David Reid: Variable Pitch Take 2</title>
	<link>http://blog.david-reid.com/2013/06/05/variable-pitch-take-2/</link>
	<content:encoded>&lt;p&gt;It’s fair to say that when I started the &lt;a href=&quot;http://www.variablepitch.co.uk&quot;&gt;Variable Pitch&lt;/a&gt; website I didn’t know a lot about the energy market or the data that would be useful and available. I had an idea and some data and I started trying to make it available. The site started with just scottish stations but soon I had people asking me about english, welsh and northern irish stations, so I expanded to also cover those countries.&lt;/p&gt;
&lt;p&gt;It wasn’t just the coverage that expanded. While I started out focussing on Renewable Obligation certificates (ROC) and their value, I was soon being asked about other aspects of finance related to renewable energy. The Ofgem data provided a way of viewing the output for stations but my early focus on ROC was soon shown to be an error as other financial schemes such as the Feed In Tariff needed to be considered. Then there was the selling of electricity that I hadn’t thought about and the constraint payments made were another area that I had not originally anticipated tracking but something I added to the site.&lt;/p&gt;
&lt;p&gt;As with all projects that grow in such an organic manner my initial design of data structures turned out to be totally inadequate. I added the pieces I needed but over time it grew arms and legs on it’s arms and legs. It worked, but adding things was getting harder and harder. Simple maintenance was proving a challenge. Developing the site was also getting harder.&lt;/p&gt;
&lt;p&gt;As a result of everything above I finally decided that the time was right to bite the bullet and use the my additional knowledge to develop a better set of structures for the data. This finally allows me to add some of the extra things that I’ve been struggling with – hopefully in a manner that also allows for better maintenance and easier upgrades!&lt;/p&gt;
&lt;p&gt;I’ve made a good start on getting things changed and have a lot of the new design work done, so it’s just a question of finding and correcting all the small (and some not so small) bugs before pushing it live. I’m hoping to get that done this week, but it may drift into next week.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-05T22:38:48+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/ShalinSays/~3/F_v6e6b1EQs/52076543498">
	<title>Shalin Shekhar Mangar: Resuming blogging</title>
	<link>http://feedproxy.google.com/~r/ShalinSays/~3/F_v6e6b1EQs/52076543498</link>
	<content:encoded>&lt;p&gt;I realize that it’s been a long time since I posted something here. About three years ago, I started working on projects at AOL, which did not have anything to do with &lt;a href=&quot;http://lucene.apache.org/solr/&quot;&gt;Apache Solr&lt;/a&gt;. Increasingly I found myself having nothing to say publicly about my work. Though I did get back to working with Apache Solr for the AOL WebMail team, I didn’t resume blogging due to sheer laziness, I guess. (Yes, they use Solr! In fact, &lt;a href=&quot;http://bit.ly/11mQati&quot;&gt;AOL WebMail just upgraded to Apache Solr 4.2.1 with impressive results&lt;/a&gt;!)&lt;/p&gt;
&lt;p&gt;A lot has happened in the meantime. In December 2012, I joined the impressive team at &lt;a href=&quot;http://www.lucidworks.com/&quot;&gt;LucidWorks&lt;/a&gt; — the Lucene/Solr company, to work (almost) full-time on open source search. In January, this year, I found my life partner and got married.&lt;/p&gt;
&lt;p&gt;Now that I work on Lucene/Solr again, I think it is time to resume blogging regularly. I intend to write about new features, tutorials, tips &amp;amp; tricks and perhaps also explain the internals of Lucene/Solr features in greater depth. Here’s to a new start!&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/ShalinSays/~4/F_v6e6b1EQs&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-03T19:42:00+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/ApacheCamel/~3/wuQUImcQUN8/see-you-soon-at-camelone-2013.html">
	<title>Claus Ibsen: See you soon at CamelOne 2013</title>
	<link>http://feedproxy.google.com/~r/ApacheCamel/~3/wuQUImcQUN8/see-you-soon-at-camelone-2013.html</link>
	<content:encoded>So &lt;a href=&quot;http://camelone.com/apache-camel-conference-2013/&quot;&gt;CamelOne 2013&lt;/a&gt; is starting on sunday evening with a reception with drinks and beers. What a great way to start. You can find details when and where at the agenda from the website. So make sure to attend on sunday evening if you can.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-QVgsGYAduYA/UaylO7GDhmI/AAAAAAAAAas/IcOeXIfQVow/s1600/camelone-2013.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;30&quot; src=&quot;http://2.bp.blogspot.com/-QVgsGYAduYA/UaylO7GDhmI/AAAAAAAAAas/IcOeXIfQVow/s400/camelone-2013.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The conference then follows on monday and tuesday. The full &lt;a href=&quot;http://camelone.com/apache-camel-conference-2013/camelone_agenda_2013/&quot;&gt;agenda&lt;/a&gt; is up on the website at&lt;br /&gt;
&lt;br /&gt;
This is the 3rd annual CamelOne conference, which is focused on the Apache integration projects such as Apache Camel, ActiveMQ, ServiceMix, Karaf and CXF. The speakers at the conference includes the founders of these projects, leaders, committers, long term end users, book authors, and as well end users who are using these projects in their companies.&lt;br /&gt;
&lt;br /&gt;
We have a mix of speakers who are the people who hack on the projects all day long, and as well people who have used these projects in large projects at their companies. So you get information from &lt;i&gt;both sides of the fence&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Rob Davies have blogged about &lt;a href=&quot;http://rajdavies.blogspot.se/2013/05/what-to-look-forward-to-at-camelone.html&quot;&gt;what to look forward to&lt;/a&gt; at the conference. And as well giving a teaser for his talk about &lt;a href=&quot;http://rajdavies.blogspot.se/2013/05/connecting-applications-everywhere-with.html&quot;&gt;connecting applications everywhere&lt;/a&gt; with ActiveMQ.&lt;br /&gt;
&lt;br /&gt;
Christian Posta who has dived deep into the internal of ActiveMQ is giving a talk about ... well the &lt;a href=&quot;http://www.christianposta.com/blog/?p=302&quot;&gt;internals of ActiveMQ&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I will give a getting started with Apache Camel presentation, which is aimed for beginners or new users of Camel. And on the 2nd day I give a rundown of the common Camel components, and as well how to build your custom components. Both my talks is a mix with slides and practical live coding sessions.&lt;br /&gt;
&lt;br /&gt;
I am much looking forward to James Strachan's ending keynote on the first day about using the &lt;a href=&quot;http://hawt.io/&quot;&gt;hawtio&lt;/a&gt; web console with Apache Camel. There is gonna be some cool stuff revealed for the first time :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=wuQUImcQUN8:wIqJrBRsqDE:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=wuQUImcQUN8:wIqJrBRsqDE:4cEx4HpKnUU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?i=wuQUImcQUN8:wIqJrBRsqDE:4cEx4HpKnUU&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=wuQUImcQUN8:wIqJrBRsqDE:F7zBnMyn0Lo&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?i=wuQUImcQUN8:wIqJrBRsqDE:F7zBnMyn0Lo&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=wuQUImcQUN8:wIqJrBRsqDE:V_sGLiPBpWU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?i=wuQUImcQUN8:wIqJrBRsqDE:V_sGLiPBpWU&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/ApacheCamel/~4/wuQUImcQUN8&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-03T14:30:16+00:00</dc:date>
</item>
<item rdf:about="http://www.open4dev.com/journal/2013/6/3/drools-starter-review.html">
	<title>Piergiorgio Lucidi: Drools Starter Review</title>
	<link>http://www.open4dev.com/journal/2013/6/3/drools-starter-review.html</link>
	<content:encoded>&lt;p&gt;&lt;span class=&quot;thumbnail-image-float-right ssNonEditable&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://www.open4dev.com/journal/2013/6/3/drools-starter-review.html&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.open4dev.com/storage/thumbnails/2935919-22826092-thumbnail.jpg?__SQUARESPACE_CACHEVERSION=1370265129633&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;Packt Publishing has sent me a copy of this starter book that introduces the world of Drools.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-03T12:36:40+00:00</dc:date>
</item>
<item rdf:about="http://blog.ruwan.org/2013/06/new-in-ultraesb-20-metrics-and.html">
	<title>Ruwan  Linton: New in UltraESB 2.0 - Metrics and Monitoring</title>
	<link>http://blog.ruwan.org/2013/06/new-in-ultraesb-20-metrics-and.html</link>
	<content:encoded>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;Engineering team at AdroitLogic is very busy in delivering few new amazing things in the next couple of months, which includes the UltraESB 2.0 release with many new features and enhancements.&lt;br /&gt;&lt;br /&gt;One major feature that we are planning to include is the metrics, monitoring and alerting support developed with the feedback from our users/customers. Let me give you some insight on what is coming up on that front!&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-TuT3z3fTxrk/UaxHymjKq6I/AAAAAAAAATo/Gplh0px9nxI/s1600/dashboard-1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;331&quot; src=&quot;http://1.bp.blogspot.com/-TuT3z3fTxrk/UaxHymjKq6I/AAAAAAAAATo/Gplh0px9nxI/s640/dashboard-1.png&quot; width=&quot;640&quot; /&gt; &lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;These are some system monitoring graphs that your next version of UConsole will offer for the monitoring (still WIP)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-VvjlnNiVdi8/UaxI5u0IzBI/AAAAAAAAAT4/wtrA1WRs0SY/s1600/dashboard-2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;324&quot; src=&quot;http://1.bp.blogspot.com/-VvjlnNiVdi8/UaxI5u0IzBI/AAAAAAAAAT4/wtrA1WRs0SY/s640/dashboard-2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Again system-wide, UltraESB elements monitoring such as the work managers and file caches and the total messages received and sent by the system&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-agly-wcVTHA/UaxJTu0PhjI/AAAAAAAAAUA/KiAFL359Sn0/s1600/proxy.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;422&quot; src=&quot;http://1.bp.blogspot.com/-agly-wcVTHA/UaxJTu0PhjI/AAAAAAAAAUA/KiAFL359Sn0/s640/proxy.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Proxy service specific metrics and graphs&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-xsmFcGP2-nY/UaxJgj7l5II/AAAAAAAAAUI/M-8HC5S4-pU/s1600/sequence.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;430&quot; src=&quot;http://4.bp.blogspot.com/-xsmFcGP2-nY/UaxJgj7l5II/AAAAAAAAAUI/M-8HC5S4-pU/s640/sequence.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Sequence statistics in the graphical format&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-pwnFNMU8Lw4/UaxJsGdJa9I/AAAAAAAAAUQ/NTcgAVesnfI/s1600/endpoint.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;428&quot; src=&quot;http://1.bp.blogspot.com/-pwnFNMU8Lw4/UaxJsGdJa9I/AAAAAAAAAUQ/NTcgAVesnfI/s640/endpoint.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Endpoint related metrics&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;On a separate Note: these snaps are from a stress/battle test suite that we have been running through the UltraESB for few days, to test the stability over the HTTP transport with the new Http-Core version, yes it is production ready even now, but we have few more touch-ups on the Management Console (UConsole), and a related product that we will be announcing with the UltraESB 2.0&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;  &lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;So, this is just a single feature that we have included into the UltraESB 2.0 release, and there are lot more new features and enhancements to the UltraESB alone. Stay tuned, our release cycle will probably start on the month of August.&lt;/div&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-06-03T08:06:04+00:00</dc:date>
</item>
<item rdf:about="http://drbacchus.com/mac-os-x-time-machine-disks-on-linux">
	<title>Rich Bowen: Mac OS X Time Machine disks on Linux</title>
	<link>http://drbacchus.com/mac-os-x-time-machine-disks-on-linux</link>
	<content:encoded>&lt;p&gt;Useful information about accessing a Mac OS X Time Machine backup disk on Linux: &lt;a href=&quot;http://hints.macworld.com/article.php?story=20080623213342356&quot;&gt;http://hints.macworld.com/article.php?story=20080623213342356&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The relevant part being that if you look at a directory entry on the Time Machine disk, from Linux, you'll see something like:&lt;/p&gt;&lt;p&gt;&lt;code&gt;
-r--r--r-- 2155704 root 5791966       0 2007-06-25 02:54 Wallpaper
&lt;/code&gt;&lt;/p&gt;&lt;p&gt;that first number, which is usually an indication of how many files are in a directory, is instead being used as a pointer to a directory named (in this case), dir_2155704 in the directory '.HFS+ Private Directory Data', which actually contains the files.&lt;/p&gt;&lt;p&gt;This information has proved very helpful over the last few days - although what I ended up doing was plugging the drive into a Mac and scp'ing the data across the network, since that was less hassle.&lt;/p&gt;&lt;p&gt;Looks like a good place for some Linux utility that provides a file browser for this kind of file system. Although I expect there's probably already one out there that I just didn't find yet.&lt;/p&gt;</content:encoded>
	<dc:date>2013-06-03T00:02:22+00:00</dc:date>
</item>
<item rdf:about="http://www.jgeppert.com/2013/06/struts2-jquery-plugin-3-6-0-and-struts2-bootstrap-plugin-1-6-1-available/">
	<title>Johannes Geppert: Struts2 jQuery Plugin 3.6.0 and Struts2 Bootstrap Plugin 1.6.1 available</title>
	<link>http://www.jgeppert.com/2013/06/struts2-jquery-plugin-3-6-0-and-struts2-bootstrap-plugin-1-6-1-available/</link>
	<content:encoded>&lt;h2&gt;Struts2 jQuery Plugin&lt;/h2&gt;

&lt;p&gt;This release is mostly a maintenance release, this means it includes a new jQuery, jQuery UI and related Plugins Software Stack but also some Bug Fixes. For a complete list of changes since last version, please visit the &lt;a href=&quot;http://code.google.com/p/struts2-jquery/wiki/Changelog&quot;&gt;Changelog&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
The new release is based on jQuery UI 1.10.3 and includes some API Changes again. If you are upgrading from a previous Struts2 jQuery Version please respect the &lt;a href=&quot;http://code.google.com/p/struts2-jquery/wiki/UpgradeGuide&quot;&gt;Upgrade Guide&lt;/a&gt;.
&lt;/p&gt;

&lt;h3&gt;Library Updates&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.jquery.com/2013/05/24/jquery-1-10-0-and-2-0-1-released/&quot;&gt;jQuery 1.10.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.jqueryui.com/2013/05/jquery-ui-1-10-3/&quot;&gt;jQuery UI 1.10.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.trirand.com/blog/?p=1066&quot;&gt;jqGrid 4.5.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ckeditor.com/blog/CKEditor-4.1.1-Released&quot;&gt;CKEditor 4.1.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	.
&lt;/p&gt;
&lt;p&gt;Download: &lt;a href=&quot;http://code.google.com/p/struts2-jquery/downloads/list&quot;&gt;http://code.google.com/p/struts2-jquery/downloads/list&lt;/a&gt;&lt;br /&gt;
Showcase: &lt;a href=&quot;http://struts.jgeppert.com/struts2-jquery-showcase/index.action&quot;&gt;http://struts.jgeppert.com/struts2-jquery-showcase/&lt;/a&gt;&lt;br /&gt;
Issues: &lt;a href=&quot;http://code.google.com/p/struts2-jquery/issues/list&quot;&gt;http://code.google.com/p/struts2-jquery/issues/list&lt;/a&gt;&lt;br /&gt;
User Group: &lt;a href=&quot;http://groups.google.com/group/struts2-jquery&quot;&gt;http://groups.google.com/group/struts2-jquery&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;Struts2 Bootstrap Plugin&lt;/h2&gt;

&lt;p&gt;The new release 1.6.1 includes a patch provided by Brendan Le Ny. This patch allows an easy to use input prepend/append icon. &lt;br /&gt;

&lt;img alt=&quot;&quot; src=&quot;http://www.jgeppert.com/struts2-bootstrap/struts2-bootstrap-prepended-appended-icon.png&quot; title=&quot;Struts2 Bootstrap Input prepend/append Icons&quot; /&gt;
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;s:textfield&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #000066;&quot;&gt;label&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;Textfield with prepended icon&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #000066;&quot;&gt;inputPrependIcon&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;envelope&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;prependIcon&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
 
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;s:textfield&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #000066;&quot;&gt;label&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;Textfield with appended icon&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #000066;&quot;&gt;inputAppendIcon&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;        &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;appendIcon&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Download: &lt;a href=&quot;http://code.google.com/p/struts2-bootstrap/downloads/list&quot;&gt;http://code.google.com/p/struts2-bootstrap/downloads/list&lt;/a&gt;&lt;br /&gt;
Showcase: &lt;a href=&quot;http://struts.jgeppert.com/struts2-bootstrap-showcase/index.action&quot;&gt;http://struts.jgeppert.com/struts2-bootstrap-showcase/&lt;/a&gt;&lt;br /&gt;
Issues: &lt;a href=&quot;http://code.google.com/p/struts2-bootstrap/issues/list&quot;&gt;http://code.google.com/p/struts2-bootstrap/issues/list&lt;/a&gt;&lt;/p&gt; &lt;img height=&quot;1&quot; src=&quot;http://www.jgeppert.com/?feed-stats-post-id=712&quot; style=&quot;display: none;&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-06-02T14:16:50+00:00</dc:date>
</item>
<item rdf:about="http://rajdavies.blogspot.com/2013/05/connecting-applications-everywhere-with.html">
	<title>Rob Davies: Connecting Applications Everywhere with ActiveMQ</title>
	<link>http://rajdavies.blogspot.com/2013/05/connecting-applications-everywhere-with.html</link>
	<content:encoded>This year at &lt;a href=&quot;http://camelone.org/&quot; target=&quot;_blank&quot;&gt;CamelOne&lt;/a&gt; there's going to be some exceptional presentations,  but I'm also presenting &quot;Connecting Applications Everywhere with ActiveMQ&quot;.&lt;br /&gt;&lt;br /&gt;The focus of this presentation is to demonstrate the many protocol options and deployment scenarios that are available to Apache ActiveMQ. After an introduction to the Apache ActiveMQ project, and presenting why the &quot;Internet of Things&quot;is going to be driving the agenda for integration and messaging over the next 5 years, I'll be demonstrating an example application, going from an Arduino Microprocessor using MQTT to a MQTT/AMQP ActiveMQ gateway and to an ActiveMQ broker that will service HTML clients over WebSockets - something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-5mylqmPC-o8/UaiM0mYyZXI/AAAAAAAACIE/L-vK81T2hn0/s1600/demo.png&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;110&quot; src=&quot;http://2.bp.blogspot.com/-5mylqmPC-o8/UaiM0mYyZXI/AAAAAAAACIE/L-vK81T2hn0/s1600/demo.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With so many linked components in a live demo - what could go wrong ? ;)&lt;br /&gt;&lt;br /&gt;I'm hoping to catch up with lots of folks at CamelOne - if you haven't registered, its not too late!</content:encoded>
	<dc:date>2013-05-31T11:52:06+00:00</dc:date>
</item>
<item rdf:about="http://iocanel.blogspot.com/2010/07/wicket-spring-3-jpa2-hibernate-osgi.html">
	<title>Ioannis Canellos: Wicket, Spring 3, JPA2 &amp;amp; Hibernate OSGi Application on Apache Karaf</title>
	<link>http://iocanel.blogspot.com/2010/07/wicket-spring-3-jpa2-hibernate-osgi.html</link>
	<content:encoded>&lt;b&gt;EDIT: &lt;/b&gt;Hibernate is now OSGi ready so most of those stuff are now completely outdated.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;The full source for this post has been move to &lt;a href=&quot;https://github.com/iocanel/blog/tree/master/wicket-spring-jpa2-hibernate-karaf&quot;&gt;github&lt;/a&gt;.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Prologue&lt;/b&gt;&lt;br /&gt;Recently I attempted to modify an existing crud web application for OSGi deployment. During the process I encountered a lot of issues such as&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lack of OSGi bundles.&lt;/li&gt;&lt;li&gt; Troubles wiring the tiers of the application together.&lt;/li&gt;&lt;li&gt;Issues on the OSGi container configuration.&lt;/li&gt;&lt;li&gt;Lack of detailed examples on the web.&lt;/li&gt;&lt;/ul&gt; So, I decided to create such a guide &amp;amp; provide full source for a working example &lt;i&gt;(A very simple person crud application)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The first part of this guide is &lt;a href=&quot;http://iocanel.blogspot.com/2010/07/creating-custom-hibernate-osgi-bundles.html&quot;&gt;Creating custom Hibernate 3.5 OSGi bundles&lt;/a&gt;. This part provides an example &lt;a href=&quot;http://sites.google.com/site/iocanel/wicket-spring-jpa2-hibernate-karaf.tar.gz&quot;&gt;project&lt;/a&gt; &lt;i&gt;(which includes the bundles source)&lt;/i&gt; that describes how to use the custom hibernate bundles in order to build a &lt;b&gt;wicket&lt;/b&gt;, &lt;b&gt;spring&lt;/b&gt; &lt;i&gt;3&lt;/i&gt;, &lt;b&gt;hibernate&lt;/b&gt; &lt;i&gt;3.5&lt;/i&gt; &lt;b&gt;jpa &lt;/b&gt;&lt;i&gt;2 &lt;/i&gt;and deploy it to &lt;a href=&quot;http://karaf.apache.org/&quot;&gt;Karaf&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Among others it describes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How to wire database and web tier using the OSGi blueprint.&lt;/li&gt;&lt;li&gt;How to deploy web applications to Karaf 1.6.0.&lt;/li&gt;&lt;li&gt;A small wicket crud application.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/b&gt; This demo application does not make use &lt;a href=&quot;http://www.osgi.org/Download/File?url=/download/r4v42/r4.enterprise.pdf&quot;&gt;OSGi Enterprise Spec&lt;/a&gt;, since its an OSGi-fication of an existing application. The use of the spec will be a subject for future posts.&lt;br /&gt;&lt;br /&gt;Enjoy! &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Environment Preparation&lt;/b&gt;&lt;br /&gt;The OSGi run-time that will be used in this post is Felix/Karaf version 1.6.0.&lt;br /&gt;This section describes the required configuration for deploying web applications. &lt;br /&gt;&lt;br /&gt;Once, karaf is downloaded and extracted, it can be started by typing&lt;br /&gt;&lt;pre class=&quot;bash&quot; name=&quot;code&quot;&gt;bin/karaf&lt;br /&gt;&lt;/pre&gt;from inside the karaf root folder.&lt;br /&gt;&lt;br /&gt;Now, we are going to install karaf webconsole and war deployer that will allow us to deploy web applications to karaf.&lt;br /&gt;&lt;pre class=&quot;bash&quot; name=&quot;code&quot;&gt;features:install webconsole&lt;br /&gt;features:install war&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;i&gt;Note&lt;/i&gt;: In the background karaf fetches all the required bundles from maven repositories. You are going to need internet access for this. Moreover, if you are behind a proxy you will need to set up your jvm net.properties accordingly. Having the proxy configured in maven settings.xml is not enough.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Custom Bundles &lt;/b&gt;&lt;br /&gt;Most of the bundles required for this project are available either in public maven repositories or inside &lt;a href=&quot;http://www.springsource.com/repository/app/&quot;&gt;Spring Enterprise Bundle Repository&lt;/a&gt;. However, hibernate 3.5.x which is one of the key dependencies for this project is not available as OSGi bundle &lt;i&gt;(note: earlier version of hibernate can be found in Spring EBR)&lt;/i&gt;. More details on OSGi-fying Hibernate 3.5.x in the previous part of the guide &quot;&lt;a href=&quot;http://iocanel.blogspot.com/2010/07/creating-custom-hibernate-osgi-bundles.html&quot;&gt;Creating custom Hibernate 3.5 OSGi bundles&lt;/a&gt;&quot;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;Creating the application itself&lt;/b&gt;&lt;br /&gt;The actual demo application will be the simplest possible wicket crud for persons &lt;i&gt;(a killer application that stores/delete/updates a persons first name and last name to the database)&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;&lt;u&gt;Database&lt;/u&gt;&lt;br /&gt;The create schema script of such application in mysql would look like this:&lt;br /&gt;&lt;pre class=&quot;sql&quot; name=&quot;code&quot;&gt;CREATE TABLE person (&lt;br /&gt;    ID MEDIUMINT NOT NULL AUTO_INCREMENT,&lt;br /&gt;    FIRST_NAME VARCHAR(40) NOT NULL,&lt;br /&gt;    LAST_NAME VARCHAR(40) NOT NULL,&lt;br /&gt;    PRIMARY KEY (ID)&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;&lt;u&gt;Database Tier&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;For the database tier we are going to create a simple bundle that will contain the entity, the dao interface and the dao implementation. The bundle will contain the necessary persistence descriptor for JPA 2.0 with hibernate as persistence provider. Finally it will use spring to create the data source, entity manager factory &amp;amp; JPA transaction manager. This bundle will export the dao as a service to the OSGi Registry using Spring dynamic modules.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Person entity for the example can look like:&lt;br /&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;package net.iocanel.database.entities;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import javax.persistence.Basic;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.NamedQueries;&lt;br /&gt;import javax.persistence.NamedQuery;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author iocanel&lt;br /&gt; */&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;Person&quot;)&lt;br /&gt;@NamedQueries({&lt;br /&gt; @NamedQuery(name = &quot;Person.findAll&quot;, query = &quot;SELECT p FROM Person p&quot;),&lt;br /&gt; @NamedQuery(name = &quot;Person.findById&quot;, query = &quot;SELECT p FROM Person p WHERE p.id = :id&quot;),&lt;br /&gt; @NamedQuery(name = &quot;Person.findByFirstName&quot;, query = &quot;SELECT p FROM Person p WHERE p.firstName = :firstName&quot;),&lt;br /&gt; @NamedQuery(name = &quot;Person.findByLastName&quot;, query = &quot;SELECT p FROM Person p WHERE p.lastName = :lastName&quot;)})&lt;br /&gt; public class Person implements Serializable {&lt;br /&gt;&lt;br /&gt; private static final long serialVersionUID = 1L;&lt;br /&gt; @Id&lt;br /&gt; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt; @Basic(optional = false)&lt;br /&gt; @Column(name = &quot;ID&quot;)&lt;br /&gt; private Integer id;&lt;br /&gt; @Column(name = &quot;FIRST_NAME&quot;)&lt;br /&gt; private String firstName;&lt;br /&gt; @Column(name = &quot;LAST_NAME&quot;)&lt;br /&gt; private String lastName;&lt;br /&gt;&lt;br /&gt; public Person() {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Person(Integer id) {&lt;br /&gt;  this.id = id;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Integer getId() {&lt;br /&gt;  return id;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setId(Integer id) {&lt;br /&gt;  this.id = id;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public String getFirstName() {&lt;br /&gt;  return firstName;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setFirstName(String firstName) {&lt;br /&gt;  this.firstName = firstName;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public String getLastName() {&lt;br /&gt;  return lastName;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setLastName(String lastName) {&lt;br /&gt;  this.lastName = lastName;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public int hashCode() {&lt;br /&gt;  int hash = 0;&lt;br /&gt;  hash += (id != null ? id.hashCode() : 0);&lt;br /&gt;  return hash;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public boolean equals(Object object) {&lt;br /&gt;  // TODO: Warning - this method won't work in the case the id fields are not set&lt;br /&gt;  if (!(object instanceof Person)) {&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;  Person other = (Person) object;&lt;br /&gt;  if ((this.id == null &amp;amp;&amp;amp; other.id != null) || (this.id != null &amp;amp;&amp;amp; !this.id.equals(other.id))) {&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public String toString() {&lt;br /&gt;  return &quot;net.iocanel.database.entities.Person[id=&quot; + id + &quot;]&quot;;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For this entity we will create a dao interface, through which the rest of the bundles in the container can track/lookup the dao service &lt;i&gt;(the actual implementation)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;We want the dao service to provide simple crud operations such as, create, delete, find &amp;amp; findAll, so the dao interface can be something like:&lt;br /&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;package net.iocanel.database.dao;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;import net.iocanel.database.entities.Person;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author iocanel&lt;br /&gt; */&lt;br /&gt;public interface PersonDAO {&lt;br /&gt;&lt;br /&gt; public void create(Person person) throws Exception;&lt;br /&gt; public void edit(Person person) throws Exception;&lt;br /&gt; public void destroy(Integer id) throws Exception;&lt;br /&gt; public Person findPerson(Integer id);&lt;br /&gt; public List findAllPersons();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The actual jpa implementation of the dao will obtain the EntityManager via Spring &lt;i&gt;(it will be injected by Spring)&lt;/i&gt; and for transaction demarcation will use Spring's Transactional annotation:&lt;br /&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;package net.iocanel.database.dao;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;import javax.persistence.EntityManager;&lt;br /&gt;import javax.persistence.Query;&lt;br /&gt;import javax.persistence.PersistenceContext;&lt;br /&gt;import net.iocanel.database.entities.Person;&lt;br /&gt;import org.springframework.transaction.annotation.Transactional;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author iocanel&lt;br /&gt; */&lt;br /&gt;@Transactional&lt;br /&gt;public class PersonJpaDAO implements PersonDAO {&lt;br /&gt;&lt;br /&gt; @PersistenceContext&lt;br /&gt; private EntityManager entityManager;&lt;br /&gt;&lt;br /&gt; public void create(Person person) throws Exception {&lt;br /&gt;  entityManager.persist(person);&lt;br /&gt;  entityManager.flush();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void edit(Person person) throws Exception {&lt;br /&gt;  entityManager.merge(person);&lt;br /&gt;  entityManager.flush();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void destroy(Integer id) throws Exception {&lt;br /&gt;  entityManager.remove(findPerson(id));&lt;br /&gt;  entityManager.flush();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public List findPersonEntities(int maxResults, int firstResult) {&lt;br /&gt;  return findPersonEntities(false, maxResults, firstResult);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private List findPersonEntities(boolean all, int maxResults, int firstResult) {&lt;br /&gt;  Query q = entityManager.createQuery(&quot;select object(o) from Person as o&quot;);&lt;br /&gt;  if (!all) {&lt;br /&gt;   q.setMaxResults(maxResults);&lt;br /&gt;   q.setFirstResult(firstResult);&lt;br /&gt;  }&lt;br /&gt;  return q.getResultList();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Person findPerson(Integer id) {&lt;br /&gt;  return entityManager.find(Person.class, id);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public int getPersonCount() {&lt;br /&gt;  Query q = entityManager.createQuery(&quot;select count(o) from Person as o&quot;);&lt;br /&gt;  return ((Long) q.getSingleResult()).intValue();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public List findAllPersons() {&lt;br /&gt;  Query q = entityManager.createNamedQuery(&quot;Person.findAll&quot;);&lt;br /&gt;  return q.getResultList();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For the EntityManager injection and Spring Transactions, we need need a spring context. Since we are going to use Spring Dynamic Modules, the spring context needs to be placed under META-INF/spring/. &lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;  &lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For the creation of the EntityManagerFactory Spring will need a persistence.xml file located under META-INF:&lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt;  &lt;br /&gt;    org.hibernate.ejb.HibernatePersistence&lt;br /&gt;    net.iocanel.database.entities.Person&lt;br /&gt;    &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;    &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So far in the database tier we did what we would do in a typical application. Now we will add OSGi flavor to our module.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Creating the DAO OSGi Service&lt;/u&gt;&lt;br /&gt;As mentioned above for the creation of the dao service we will use spring dynamic modules. So all we need is to add a descriptor under META-INF/spring that will instruct Spring's OSGi exporter to export bean &lt;i&gt;personDAO&lt;/i&gt; as OSGi service:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Finally, we need to perform a small hack. In the previous part of this guide, we created an OSGi fragment for Hibernate Validator. This fragment is attached on the validation api host, so that the validation api can find the classes of hibernate validator. However, we still need to instruct the validation api, to look for Hibernate Validator classes. In an non-OSGi world the validation api will lookup in the classpath for the following file META-INF/services/javax.validation.spi.ValidationProvider and read the actual validation provider class name from this file. &lt;br /&gt;&lt;br /&gt;&lt;u&gt;Passing the Validation Provider to Validation API&lt;/u&gt;&lt;br /&gt;In the OSGi world the validation api, will delegate that call to the calling bundle &lt;i&gt;(in our case the database tier bundle)&lt;/i&gt; so we are going to make sure that it finds it. How we are going to do so? We are going to copy it from Hibernate Validator and add it in our bundle. This approach might not seem that elegant, however it has two great advantages:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Its simple&lt;/li&gt;&lt;li&gt; It works&lt;/li&gt;&lt;/ul&gt;If you are aware of more elegant alternative feel free to communicate them.&lt;br /&gt;&lt;br /&gt;The final obstacle is creating the bundle itself.The bundle will be created using maven-bundle-plugin. As maven dependencies it will contain only whatever it requires for the compile scope and its run-time dependencies&lt;i&gt;(hibernate,spring,jpa spec, cglib etc)&lt;/i&gt; will be declared as OSGi Import-Packages.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;&lt;br /&gt;  net.iocanel.*&lt;br /&gt;  &lt;br /&gt;   *,&lt;br /&gt;   javax.sql,&lt;br /&gt;   javax.transaction,&lt;br /&gt;   javax.persistence,&lt;br /&gt;   javax.persistence.*,&lt;br /&gt;   javax.persistence.spi,&lt;br /&gt;   javax.persistence.metamodel,&lt;br /&gt;   javax.persistence.criteria,&lt;br /&gt;   org.hibernate,&lt;br /&gt;   org.hibernate.annotations,&lt;br /&gt;   org.hibernate.annotations.common,&lt;br /&gt;   org.hibernate.annotations.common.reflection,&lt;br /&gt;   org.hibernate.ejb,&lt;br /&gt;   org.hibernate.cfg,&lt;br /&gt;   org.hibernate.cfg.annotations,&lt;br /&gt;   org.hibernate.cfg.annotations.reflection,&lt;br /&gt;   org.hibernate.cache,&lt;br /&gt;   org.hibernate.hql,&lt;br /&gt;   org.hibernate.hql.ast,&lt;br /&gt;   org.hibernate.validator,&lt;br /&gt;   org.hibernate.validator.constraints,&lt;br /&gt;   org.hibernate.validator.constraints.impl,&lt;br /&gt;   org.hibernate.validator.engine,&lt;br /&gt;   org.hibernate.validator.engine.groups,&lt;br /&gt;   org.hibernate.validator.engine.resolver,&lt;br /&gt;   org.hibernate.validator.jtype,&lt;br /&gt;   org.hibernate.validator.metadata,&lt;br /&gt;   org.hibernate.validator.util,&lt;br /&gt;   org.hibernate.validator.util.annotationfactory,&lt;br /&gt;   org.hibernate.validator.xml,&lt;br /&gt;   org.hibernate.proxy,&lt;br /&gt;   com.mysql.jdbc,&lt;br /&gt;   javassist.util.proxy,&lt;br /&gt;   org.aopalliance.aop,&lt;br /&gt;   org.springframework.aop,&lt;br /&gt;   org.springframework.aop.framework,&lt;br /&gt;   net.sf.cglib.core,&lt;br /&gt;   net.sf.cglib.reflect,&lt;br /&gt;   net.sf.cglib.proxy&lt;br /&gt;  &lt;br /&gt;  !*&lt;br /&gt;  ${pom.groupId}.${pom.artifactId}&lt;br /&gt;  false&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;   &lt;br /&gt;    org.apache.felix&lt;br /&gt;    maven-bundle-plugin&lt;br /&gt;    true&lt;br /&gt;    &lt;br /&gt;     &lt;br /&gt;      ${artifactId}&lt;br /&gt;      ${symbolic.name}&lt;br /&gt;      ${pom.name}&lt;br /&gt;      .&lt;br /&gt;      ${import.packages}&lt;br /&gt;      ${export.packages}&lt;br /&gt;      ${private.packages}&lt;br /&gt;     &lt;br /&gt;    &lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Presentation/Web Tier&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;For the presentation tier we are going to be a &lt;b&gt;Wicket&lt;/b&gt; OSGi application. This application will be integrated with Spring using @SpringBean annotation (more details on this on &lt;a href=&quot;https://cwiki.apache.org/WICKET/spring.html&quot;&gt;Wicket/Spring Wiki&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Since we are interested in taking advantage of Spring Dynamic Modules, we are going to instruct to load its context from OsgiBundleXmlWebApplicationContext inside the web.xml.&lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt;  contextClassorg.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So the full web deployment descriptor for Wicket/Spring/OSGi could look like this&lt;i&gt;(yes I know I am starting to sound like &lt;a href=&quot;http://en.wikipedia.org/wiki/Bob_Ross&quot;&gt;Bob Ross&lt;/a&gt;)&lt;/i&gt;:&lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt;&lt;br /&gt; web-tier&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;  wicket.configurationdevelopment&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;  contextClassorg.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;  org.springframework.web.context.ContextLoaderListener&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  wicket.wicket-spring&lt;br /&gt;  org.apache.wicket.protocol.http.WicketFilter&lt;br /&gt;  &lt;br /&gt;   applicationFactoryClassNameorg.apache.wicket.spring.SpringWebApplicationFactory&lt;br /&gt;  &lt;br /&gt;   applicationClassNamenet.iocanel.WicketApplication&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  wicket.wicket-spring&lt;br /&gt;  /*&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The Spring context file &lt;i&gt;(/WEB-INF/applicationContext.xml)&lt;/i&gt;that will be loaded needs to define two simple things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The Wicket Application Object.&lt;/li&gt;&lt;li&gt; The PersonDAO OSGi service.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The PersonDAO service will be looked up using Spring Dynamic Modules. Inside the wicket application the PersonDAO service will be injected as if it was a normal spring bean using the @SpringBean annotation.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We are almost there. All that's left is the coding of the actual crud. I will not go into much detail, since its beyond the scope of this blog post. However, I am going to list the key points of the crud.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;The C.R.U.D.&lt;/u&gt;&lt;br /&gt;For the CRUD part we will create a single ajax page that will display:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A list of all persons in the database.&lt;/li&gt;&lt;li&gt; A small form to insert/edit person details.&lt;/li&gt;&lt;li&gt;Buttons for each record to edit/remove persons in the database.&lt;/li&gt;&lt;/ul&gt;The List Component that will be used is PropertyListView, and the model attached to list will be a LoadableDetachableModel that will load all persons from the database. Finally the person details form will consist of 2 text fields &lt;i&gt;First Name &amp;amp; Last Name&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_IAbNntktXuo/TDtkiyS4c6I/AAAAAAAAABk/XZAK1WTafSw/s1600/Screen+shot+2010-07-12+at+9.50.20+PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_IAbNntktXuo/TDtkiyS4c6I/AAAAAAAAABk/XZAK1WTafSw/s320/Screen+shot+2010-07-12+at+9.50.20+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The full source for this example &lt;i&gt;(including the custom bundles)&lt;/i&gt; can be found at &lt;a href=&quot;https://github.com/iocanel/blog/tree/master/wicket-spring-jpa2-hibernate-karaf&quot;&gt;my github repository&lt;/a&gt;. Once you unpack it you can mvn clean install and it will package the project bundles, the custom bundles and &lt;b&gt;all&lt;/b&gt; the required bundles under target/wicket-osgi.dir/deploy folder. Just copy the contents of this folder to $KARAF_HOME/deploy and you are ready launch the application at &lt;a href=&quot;http://localhost:8181/web-tier/&quot;&gt;http://localhost:8181/web-tier/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Final thoughts&lt;/b&gt;&lt;br /&gt;I hope you find this useful.&lt;br /&gt;Once my schedule allows, I will blog on how to add JTA transactions on the example above, so stay tuned&lt;i&gt;(The Hibernate bundle is JTA ready, however we need a JTA transaction manager bundle)&lt;/i&gt;. &lt;br /&gt;Feel free to send comments or suggestions.</content:encoded>
	<dc:date>2013-05-30T16:01:16+00:00</dc:date>
</item>
<item rdf:about="http://iocanel.blogspot.com/2010/07/creating-custom-hibernate-osgi-bundles.html">
	<title>Ioannis Canellos: Creating custom Hibernate OSGi bundles for JPA 2.0</title>
	<link>http://iocanel.blogspot.com/2010/07/creating-custom-hibernate-osgi-bundles.html</link>
	<content:encoded>&lt;b&gt;Edit: &lt;/b&gt;I am more than happy that this post is now completely obsolete. Hibernate is now OSGi ready, Yay!&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Prologue&lt;/b&gt;&lt;br /&gt;I was trying to migrate an application that uses JPA 2.0 / Hibernate to OSGi. I found out that hibernate does not provide OSGi bundles. There are some Hibernate bundles provided in the Spring Enterprise Bundle repository, however they are none available for Hibernate 3.5.x which implements JPA 2.0. So I decided to create them myself and share the experience with you.&lt;br /&gt;&lt;br /&gt;This post describes how to OSGi-fy Hibernate 3.5.2-Final with EhCache and JTA transaction support. The bundles that were created were tested on Felix Karaf, but they will probably work in other containers too.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;br /&gt;A typical JPA 2.0 application with Hibernate as persistence provider will probably require among other the following dependencies&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hibernate-core&lt;/li&gt;&lt;li&gt;hibernate-annotations&lt;/li&gt;&lt;li&gt; hibernate-entitymanager&lt;/li&gt;&lt;li&gt;hibernate-validator&lt;/li&gt;&lt;li&gt;ehcache&lt;/li&gt;&lt;/ul&gt;Unfortunately, at the time this post was written none of the above was available as OSGi bundle. To make OSGi bundles for the above one needs to overcome the following problems&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cyclic dependencies inside Hibernate artifacts.&lt;/li&gt;&lt;li&gt;3rd party dependencies &lt;i&gt;(e.g. Weblogic/Websphere Transaction Manager).&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Common api / impl issues for validation api and hibernate cache. &lt;/li&gt;&lt;/ul&gt;The last bullet which may not be that clear points to a problem where an api loads classes from the implementation using Class.forName() or similar approaches. In the OSGi world that means that the api must import packages from the implementation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hibernate cyclic dependencies&lt;/b&gt;&lt;br /&gt;The creation of an OSGi bundle for each hibernate artifact is possible. However, when the bundles get deployed to an OSGi container, they will fail to resolve due to cyclic package imports.&lt;br /&gt;&lt;br /&gt;The easiest way to overcome this issue is to merge hibernate core artifacts into one bundle. Below I am going to provide an example of how to use maven bundle plug-in to merge hibernate-core, hibernate-annotations &amp;amp; hibernate-entitymanager into one bundle. &lt;br /&gt;&lt;br /&gt;A common way to use the maven-bundle-plugin to merge jars into artifacts is to instruct it to embed the dependencies of a project into a bundle. However, this is not very handy in cases where you need to add custom code into the final bundle. In that case you can use the maven dependency plug-in to unpack the dependencies, bundle plug-in to create the manifest and jar plug-in to instruct it to use the generated manifest in the package phase.&lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt;  &lt;br /&gt;   org.apache.maven.plugins&lt;br /&gt;   maven-dependency-plugin&lt;br /&gt;   &lt;br /&gt;    &lt;br /&gt;     unpack&lt;br /&gt;     generate-resources&lt;br /&gt;     &lt;br /&gt;      unpack&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;      &lt;br /&gt;       &lt;br /&gt;        org.hibernate&lt;br /&gt;        hibernate-core&lt;br /&gt;        false&lt;br /&gt;        target&lt;br /&gt;       &lt;br /&gt;       &lt;br /&gt;        org.hibernate&lt;br /&gt;        hibernate-annotations&lt;br /&gt;        false&lt;br /&gt;        target&lt;br /&gt;       &lt;br /&gt;       &lt;br /&gt;        org.hibernate&lt;br /&gt;        hibernate-entitymanager&lt;br /&gt;        false&lt;br /&gt;        target&lt;br /&gt;       &lt;br /&gt;      &lt;br /&gt;      false&lt;br /&gt;      true&lt;br /&gt;     &lt;br /&gt;    &lt;br /&gt;   &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;   org.apache.felix&lt;br /&gt;   maven-bundle-plugin&lt;br /&gt;   2.0.1&lt;br /&gt;   true&lt;br /&gt;   &lt;br /&gt;    &lt;br /&gt;     create-manifest&lt;br /&gt;     process-classes&lt;br /&gt;     &lt;br /&gt;      manifest&lt;br /&gt;     &lt;br /&gt;    &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;br /&gt;     jar&lt;br /&gt;     bundle&lt;br /&gt;    &lt;br /&gt;    ${unpack.bundle}&lt;br /&gt;    &lt;br /&gt;     ${artifactId}&lt;br /&gt;     ${groupId},${artifactId}&lt;br /&gt;     ${project.name}&lt;br /&gt;     *&lt;br /&gt;     *&lt;br /&gt;    &lt;br /&gt;   &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;   maven-jar-plugin&lt;br /&gt;   &lt;br /&gt;    &lt;br /&gt;     target/META-INF/MANIFEST.MF&lt;br /&gt;    &lt;br /&gt;   &lt;br /&gt;  &lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Hibernate &amp;amp; 3rd Party dependencies&lt;/b&gt;&lt;br /&gt;Hibernate has a lot of 3rd party dependencies. Some of them are available as OSGi bundles, some need to be created and some can be excluded.&lt;br /&gt;&lt;br /&gt;Examples of 3rd party dependencies that are available as OSGi bundle in the Spring Enterprise Repository are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;antlr&lt;/li&gt;&lt;li&gt;dom4j&lt;/li&gt;&lt;li&gt; cglib&lt;/li&gt;&lt;/ul&gt;Dependencies that are not available are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;jacc &lt;i&gt;(javax.security.jacc)&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt; &lt;/b&gt;Dependencies that can be excluded vary depending on the needs. In my case I could exclude Weblogic/Websphere transaction manager, since I didn't intend to use them. To exclude a dependency just add the packages that are to be excluded in the import packages section using the ! operator &lt;i&gt;(e.g. !com.ibm.*,*)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hibernate validator and Validation API&lt;/b&gt;&lt;br /&gt;As mentioned above the validation api provides a factory that build the validator by loading the implementing class using Class.forName(). This issue can be solved with 2 ways&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use dynamic imports in the API bundle to import the Implementation at runtime.&lt;/li&gt;&lt;li&gt; Make the implementation OSGi Fragment that will get attached to the API.&lt;/li&gt;&lt;/ul&gt;In this example the validation api is the one provided by the Spring Enterprise Bundle Repository, so the second approach was easier to apply.&lt;br /&gt;&lt;br /&gt;More details on this issue can be found at this excellent blog post:&lt;br /&gt;&lt;a href=&quot;http://katastrophos.net/magnus/blog/2009/07/18/having-fun-with-jsr-303-beans-validation-and-osgi-spring-dm/&quot;&gt; Having “fun” with JSR-303 Beans Validation and OSGi + Spring DM &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hibernate &amp;amp; EhCache&lt;/b&gt;&lt;br /&gt;More or less the same applies to EhCache. Hibernate provides an interface which is implemented by EhCache. Hibernate loads that implementation in runtime. We will do exactly the same thing  we did for hibernate validator. We will convert ehcache jar to fragement bundle so that it gets attached to the merged hibernate bundle.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hibernate &amp;amp; JTA Transactions&lt;/b&gt;&lt;br /&gt;I kept for last the most interesting part. This part describes what needs to be added inside the bundle so that it can support JTA transactions.&lt;br /&gt;&lt;br /&gt;For JTA transactions Hibernate needs a reference to the transaction manager. That reference is returned by the TransactionManagerLookup class specified in the persistence.xml. In a typical JEE container the lookup class just performs a JNDI to get the TransactionManager. In an OSGi container the transaction manager is very likely to be exported as an OSGi service.&lt;br /&gt;&lt;br /&gt;This section describes how to build an OSGi based TransactionManagerLookup class. The solution presented is very simple and uses only the OSGi core framework &lt;i&gt;(no blueprint implementation required)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;We will add to the hibernate bundle 3 new classes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; TransactionManagerLocator &lt;i&gt;(Service Locator)&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;OsgiTransactionManagerLookup &lt;i&gt;(Lookup implementation)&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;Activator &lt;i&gt;(Hibernate Bundle Activator)&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;TransactionManagerLocator &lt;/b&gt;is a ServiceLocator that uses OSGi's ServiceTracker to get a reference to the TransactionManager service.&lt;br /&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;package org.hibernate.transaction;&lt;br /&gt;&lt;br /&gt;import javax.transaction.TransactionManager;&lt;br /&gt;import org.osgi.framework.BundleContext;&lt;br /&gt;import org.osgi.util.tracker.ServiceTracker;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author iocanel&lt;br /&gt; */&lt;br /&gt;public class TransactionManagerLocator {&lt;br /&gt;&lt;br /&gt;    private final String lookupFilter = &quot;(objectClass=javax.transaction.TransactionManager)&quot;;&lt;br /&gt;    private static BundleContext context;&lt;br /&gt;    private static TransactionManagerLocator instance;&lt;br /&gt;    private ServiceTracker serviceTracker;&lt;br /&gt;&lt;br /&gt;    //Constructor&lt;br /&gt;    private TransactionManagerLocator() throws Exception {&lt;br /&gt;        if (context == null) {&lt;br /&gt;            throw new Exception(&quot;Bundle Context is null&quot;);&lt;br /&gt;        } else {&lt;br /&gt;            serviceTracker = new ServiceTracker(context, context.createFilter(lookupFilter), null);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static synchronized TransactionManagerLocator getInstance() throws Exception {&lt;br /&gt;        if (instance == null) {&lt;br /&gt;            instance = new TransactionManagerLocator();&lt;br /&gt;        }&lt;br /&gt;        return instance;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public static void setContext(BundleContext context) {&lt;br /&gt;        TransactionManagerLocator.context = context;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public TransactionManager getTransactionManager() {&lt;br /&gt;        return (TransactionManager) serviceTracker.getService();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;OsgiTransactionManagerLookup &lt;/b&gt;is an implementation of Hibernates TransactionManagerLookup that delegates the look&lt;br /&gt;up to the TransactionManagerLocator.&lt;br /&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;package org.hibernate.transaction;&lt;br /&gt;&lt;br /&gt;import java.util.Properties;&lt;br /&gt;import javax.transaction.Transaction;&lt;br /&gt;import javax.transaction.TransactionManager;&lt;br /&gt;import org.hibernate.HibernateException;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author iocanel&lt;br /&gt; */&lt;br /&gt;public class OsgiTransactionManagerLookup implements TransactionManagerLookup {&lt;br /&gt;&lt;br /&gt;    public TransactionManager getTransactionManager(Properties props) throws HibernateException {&lt;br /&gt;        try {&lt;br /&gt;            return TransactionManagerLocator.getInstance().getTransactionManager();        } catch (Exception ex) {&lt;br /&gt;            throw new HibernateException(&quot;Failed to lookup transaction manager.&quot;, ex);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getUserTransactionName() {&lt;br /&gt;&lt;br /&gt;        return &quot;java:comp/UserTransaction&quot;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Object getTransactionIdentifier(Transaction transaction) {&lt;br /&gt;        return transaction;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Activator &lt;/b&gt;is just a&lt;b&gt; &lt;/b&gt;bundle activator. Its role is to pass a static reference of the bundle context to the TransactionManagerLocator &lt;i&gt;(the bundle context is required by the service tracker)&lt;/i&gt;.&lt;br /&gt;&lt;pre class=&quot;java&quot; name=&quot;code&quot;&gt;package org.hibernate;&lt;br /&gt;&lt;br /&gt;import org.hibernate.transaction.TransactionManagerLocator;&lt;br /&gt;import org.osgi.framework.BundleActivator;&lt;br /&gt;import org.osgi.framework.BundleContext;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; *&lt;br /&gt; * @author iocanel&lt;br /&gt; */&lt;br /&gt;public class Activator implements BundleActivator {&lt;br /&gt;&lt;br /&gt;    public void start(BundleContext bc) throws Exception {&lt;br /&gt;        TransactionManagerLocator.setContext(bc);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void stop(BundleContext bc) throws Exception {&lt;br /&gt;    }&lt;br /&gt;} &lt;/pre&gt;&lt;b&gt;Example use of the bundle &amp;amp; bundle source code.&lt;/b&gt;&lt;br /&gt;An example web application that uses the custom hibernate bundles can be found in this  &lt;a href=&quot;http://iocanel.blogspot.com/2010/07/wicket-spring-3-jpa2-hibernate-osgi.html&quot;&gt;post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you feel tired of reading and just want to use the bundles. You can download them from &lt;a href=&quot;http://sites.google.com/site/iocanel/wicket-spring-jpa2-hibernate-karaf.tar.gz&quot;&gt;here&lt;/a&gt;. All the custom bundles are included in the maven project under the bundles folder &lt;i&gt;(as seen in the picture)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_IAbNntktXuo/TEbanIrJfhI/AAAAAAAAABs/fKZ0VfiVe9o/s1600/bundles.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/_IAbNntktXuo/TEbanIrJfhI/AAAAAAAAABs/fKZ0VfiVe9o/s320/bundles.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The example application uses Wicket and can be easily deploy in Karaf.&lt;br /&gt;&lt;b&gt;Final Thoughts&lt;/b&gt;&lt;br /&gt;I hope you found it useful.&lt;br /&gt;&lt;br /&gt;Any feedback is more than welcome.</content:encoded>
	<dc:date>2013-05-30T16:00:31+00:00</dc:date>
</item>
<item rdf:about="http://timbish.blogspot.com/2013/05/win-free-copy-of-packts-instant-apache.html">
	<title>Tim Bish: Win A Free Copy of Packt's Instant Apache ActiveMQ Messaging Application Development How-to!!</title>
	<link>http://timbish.blogspot.com/2013/05/win-free-copy-of-packts-instant-apache.html</link>
	<content:encoded>&lt;br /&gt;&lt;div class=&quot;western&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;I am pleased to announce that I have teamed up with &lt;a href=&quot;http://www.packtpub.com/&quot;&gt;Packt Publishing&lt;/a&gt;and we are organizing a giveaway especially for you. All you need to do is just comment below the post and win a free e-copy of&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://www.packtpub.com/apache-activemq-messaging-application-development/book&quot;&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Instant Apache ActiveMQ Messaging Application Development How-to&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;. Two lucky winners stand a chance to win an e-copy of the book. Keep reading to find out how you can be one of the Lucky One.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;western&quot; style=&quot;margin-bottom: 0in;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;western&quot; style=&quot;margin-bottom: 0in;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://dgdsbygo8mp3h.cloudfront.net/sites/default/files/imagecache/productview_larger/9413OS.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://dgdsbygo8mp3h.cloudfront.net/sites/default/files/imagecache/productview_larger/9413OS.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;western&quot; style=&quot;margin-bottom: 0in;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;western&quot; style=&quot;margin-bottom: 0in;&quot;&gt;&lt;/div&gt;&lt;h1 class=&quot;western&quot;&gt;&lt;span style=&quot;color: navy;&quot;&gt;&lt;span lang=&quot;zxx&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;Overview of &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Instant Apache ActiveMQ Messaging Application Development How-to&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;div class=&quot;western&quot; lang=&quot;en-IN&quot; style=&quot;margin-bottom: 0.07in; margin-top: 0.07in;&quot;&gt;Learn something new in an Instant! A short, fast, focused guide  delivering immediate results.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class=&quot;western&quot; lang=&quot;en-IN&quot; style=&quot;margin-bottom: 0.07in; margin-top: 0.07in;&quot;&gt;Learn how to use the JMS API&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class=&quot;western&quot; lang=&quot;en-IN&quot; style=&quot;margin-bottom: 0.07in; margin-top: 0.07in;&quot;&gt;Explore advanced messaging features in &lt;a href=&quot;http://activemq.apache.org/&quot;&gt;ActiveMQ&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class=&quot;western&quot; lang=&quot;en-IN&quot; style=&quot;margin-bottom: 0.07in; margin-top: 0.07in;&quot;&gt;Useful information on common pitfalls new developers often encounter&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;western&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;western&quot; style=&quot;margin-bottom: 0.07in; margin-top: 0.07in;&quot;&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;b&gt;How to Enter?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;western&quot;&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Simply post your expectations from this book in comments section below. You could be one of the 2 lucky participants to win the copy.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;western&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;DeadLine:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;western&quot; style=&quot;margin-bottom: 0in;&quot;&gt;&lt;span style=&quot;font-family: Calibri, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;b&gt;The contest will close on 06/14/2013 . Winners will be contacted by email, so be sure to use your real email address when you comment!&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2013-05-30T15:28:12+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/killerbees/planetapache/~3/387Flvqgp7s/note-to-self.html">
	<title>Danny Angus: note to self, how to fix &quot;requires installation of untrusted packages&quot; in Ubuntu</title>
	<link>http://feedproxy.google.com/~r/killerbees/planetapache/~3/387Flvqgp7s/note-to-self.html</link>
	<content:encoded>I tried to install a couple of updates on my work laptop, running Ubuntu 12.04, a minute or two ago when prompted by the update manager, and I got the &quot;requires installation of untrusted packages&quot; error.  I've since dicovered that there are two ways round this, one is to allow untrusted packages by doing the update as root or via sudo, and saying &quot;y&quot; when asked&lt;br /&gt;&lt;blockquote&gt;Install these packages without verification [y/N]?&lt;/blockquote&gt; But I don't like that, you don't know who might be spoofing you with what fake packages.  The better way is to rebuild the apt cache. I found the instructions &lt;a href=&quot;http://askubuntu.com/a/185366&quot;&gt;here&lt;/a&gt;, I'm claiming no credit for solving the problem, just reproducing them below so that I can be sure to find them again next time I need them. Hopefully some of you who read this in the future will also benefit.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sudo apt-get clean&lt;br /&gt;cd /var/lib/apt&lt;br /&gt;sudo mv lists lists.old&lt;br /&gt;sudo mkdir -p lists/partial&lt;br /&gt;sudo apt-get clean &lt;br /&gt;sudo apt-get update&lt;/pre&gt;&lt;br /&gt;Enjoy!&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/killerbees/planetapache/~4/387Flvqgp7s&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-05-30T10:44:13+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/posterous/wbyo/~3/-hsqVfnrEQc/inaugural-cloudstack-dc-and-nova-user-group.html">
	<title>Chip Childers: Inaugural CloudStack DC and NoVA User Group</title>
	<link>http://feedproxy.google.com/~r/posterous/wbyo/~3/-hsqVfnrEQc/inaugural-cloudstack-dc-and-nova-user-group.html</link>
	<content:encoded>&lt;p&gt;I'm about to speak at the &lt;a href=&quot;http://www.meetup.com/CloudStack-DC-and-NoVA-User-Group/&quot;&gt;CloudStack DC and NoVA User Group's&lt;/a&gt; &lt;a href=&quot;http://www.meetup.com/CloudStack-DC-and-NoVA-User-Group/events/117280162/&quot;&gt;innagural meetup&lt;/a&gt;, which the folks at &lt;a href=&quot;http://basho.com/&quot;&gt;Basho&lt;/a&gt; were kind enough to make a joint-meetup with the &lt;a href=&quot;http://www.meetup.com/Riak-DC/events/118224772/&quot;&gt;Riak DC group&lt;/a&gt;.  Registration between the two groups (roughly deduped) is at around 70 people for the event.  This should be a fun evening!&lt;/p&gt;
&lt;p&gt;For those of you that can't make it, here's what I'm presenting:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/chipchilders/cloudstack-dc-meetup&quot; target=&quot;_blank&quot; title=&quot;CloudStack DC Meetup - Apache CloudStack Overview and 4.1/4.2 Preview&quot;&gt;CloudStack DC Meetup - Apache CloudStack Overview and 4.1/4.2 Preview&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/chipchilders&quot; target=&quot;_blank&quot;&gt;Chip Childers&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/posterous/wbyo/~4/-hsqVfnrEQc&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-05-29T17:00:58+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/robweir/antic-atom/~3/wW-8gorl7Bc/openoffice-for-tablet.html">
	<title>Rob Weir: Who wants to develop OpenOffice for Tablet?</title>
	<link>http://feedproxy.google.com/~r/robweir/antic-atom/~3/wW-8gorl7Bc/openoffice-for-tablet.html</link>
	<content:encoded>&lt;p&gt;&lt;/p&gt;&lt;p&gt;One of the most common user questions I see on the &lt;a href=&quot;https://www.facebook.com/ApacheOO&quot;&gt;Facebook&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/apacheoo&quot;&gt;Twitter streams&lt;/a&gt; for Apache OpenOffice is “Do you have a iPad version?” or “Do you have a tablet version”?   Although there are &lt;a href=&quot;http://blog.rollapp.com/2012/04/rollapp-launches-free-beta-openoffice.html&quot;&gt;companies&lt;/a&gt; that offer access to OpenOffice via a virtualized remote session, there is no native tablet version of OpenOffice.&lt;/p&gt;
&lt;p&gt;I have received questions, behind the scenes, about the feasibility of starting such an effort at Apache.   Of course, creating a tablet version of OpenOffice, a competitive application with a first-class native touch UI,  with platform integration and optimization, is a  non-trivial effort.    My impression is that there are several companies, small and large, that would find this to be an intriguing possibility.  But the task is too large to do it alone.  But with several companies involved,  as a joint effort, in an open source project, then this becomes possible.&lt;/p&gt;
&lt;p&gt;Imagine if we had such an open source tablet version of OpenOffice available today.   It would be an app that everyone would want.  If done right the OpenOffice app would be at the top of the charts just as the desktop OpenOffice is one of the &lt;a href=&quot;http://www.h-online.com/open/news/item/50-million-Apache-OpenOffice-downloads-in-a-year-1864812.html&quot;&gt;leading open source desktop apps&lt;/a&gt;.  The app itself would be free, of course.   But it would be an open platform that we could all build upon.&lt;/p&gt;
&lt;p&gt;Possible business models might include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cloud services related to documents, range from storage to sharing and collaboration&lt;/li&gt;
&lt;li&gt;Extensions to the app, in-app purchases of additional templates, content, etc.&lt;/li&gt;
&lt;li&gt;Advertising-supported apps.&lt;/li&gt;
&lt;li&gt;From service provider perspective, avoidance of licensing fees for competing commercial office software.&lt;/li&gt;
&lt;li&gt;A “white label” version that can be rebranded per customer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are good reasons, I think, for doing such work at Apache, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing expertise in the OpenOffice product&lt;/li&gt;
&lt;li&gt;Proven community development culture based on The Apache Way&lt;/li&gt;
&lt;li&gt;Permissive, commercially-friendly Apache License, the &lt;a href=&quot;http://source.android.com/source/licenses.html&quot;&gt;preferred license&lt;/a&gt; for Android userspace&lt;/li&gt;
&lt;li&gt;Strong brand / name recognition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’d like to have a discussion with those having a &lt;strong&gt;serious&lt;/strong&gt; interest in making a tablet version of OpenOffice.  By serious, I mean those who might be willing to contribute developers to a larger effort, if such an effort were to materialize.  I’m happy to talk one-on-one.  And if there is sufficient serious interest from multiple parties I can broker a meeting of interested parties to discuss further options.&lt;/p&gt;
&lt;p&gt;If any of this sounds interesting and you want to register your interest please send me an email at &lt;a href=&quot;mailto:robert_weir@us.ibm.com&quot;&gt;robert_weir@us.ibm.com&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;yarpp-related-rss&quot;&gt;
&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://www.robweir.com/blog/2011/06/apache-openoffice-how-to-get-involved.html&quot; rel=&quot;bookmark&quot; title=&quot;Apache OpenOffice: How to Get Involved&quot;&gt;Apache OpenOffice: How to Get Involved&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.robweir.com/blog/2011/06/openoffice-libreoffice-and-the-scarcity-fallacy.html&quot; rel=&quot;bookmark&quot; title=&quot;OpenOffice, LibreOffice and the Scarcity Fallacy&quot;&gt;OpenOffice, LibreOffice and the Scarcity Fallacy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.robweir.com/blog/2011/06/apache-openoffice.html&quot; rel=&quot;bookmark&quot; title=&quot;An Invitation to Apache OpenOffice&quot;&gt;An Invitation to Apache OpenOffice&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=wW-8gorl7Bc:8MbussdYB_Q:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=wW-8gorl7Bc:8MbussdYB_Q:gIN9vFwOqvQ&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?i=wW-8gorl7Bc:8MbussdYB_Q:gIN9vFwOqvQ&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=wW-8gorl7Bc:8MbussdYB_Q:V_sGLiPBpWU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?i=wW-8gorl7Bc:8MbussdYB_Q:V_sGLiPBpWU&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=wW-8gorl7Bc:8MbussdYB_Q:-BTjWOF_DHI&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?i=wW-8gorl7Bc:8MbussdYB_Q:-BTjWOF_DHI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=wW-8gorl7Bc:8MbussdYB_Q:YwkR-u9nhCs&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?d=YwkR-u9nhCs&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=wW-8gorl7Bc:8MbussdYB_Q:F7zBnMyn0Lo&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?i=wW-8gorl7Bc:8MbussdYB_Q:F7zBnMyn0Lo&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?a=wW-8gorl7Bc:8MbussdYB_Q:qj6IDK7rITs&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/robweir/antic-atom?d=qj6IDK7rITs&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/robweir/antic-atom/~4/wW-8gorl7Bc&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-05-29T15:24:54+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/EdwardJYoonsBlog/~3/ke9Nhcrvt1g/keep-your-eyes-open.html">
	<title>Edward J. Yoon: Keep your eyes open</title>
	<link>http://feedproxy.google.com/~r/EdwardJYoonsBlog/~3/ke9Nhcrvt1g/keep-your-eyes-open.html</link>
	<content:encoded>만약 당신이 소프트웨어 개발이든 뭐든 자기 분야에 자신이 있으면, 굳이 빌어(?)먹을 필요가 없다! 당장의 현실적인 문제는 핑계에 불과하다.&lt;br /&gt;
&lt;br /&gt;
직장생활이든 뭐든 어떤 조직에 몸을 담게되면, 나도 모르는 사이 남이 만들어놓은 울타리 안에서 자신의 삶을 꾸리게 되는데, 이러한 상태, 즉, 시야가 굉장히 좁아진 우물안 개구리 상태에서는 누구나 울타리 밖이 두려울수밖에. 하지만, 내가 자신있게 얘기할 수 있다.&lt;br /&gt;
&lt;br /&gt;
자신있으면 쫄지말고 실천하라! 자신이 하이에나 새끼인지 호랑이 새끼인지는 일단 이빨을 드러내고 육식을 시작하라 ㅋ.&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/EdwardJYoonsBlog/~4/ke9Nhcrvt1g&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-05-29T11:46:05+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/ApacheCamel/~3/3nF3G6Ap2WE/long-stacktraces-in-apache-camel-no-more.html">
	<title>Claus Ibsen: Long stacktraces in Apache Camel no more</title>
	<link>http://feedproxy.google.com/~r/ApacheCamel/~3/3nF3G6Ap2WE/long-stacktraces-in-apache-camel-no-more.html</link>
	<content:encoded>In the upcoming Apache Camel 2.12 we have improved the internal routing engine to dramatically reduce the stacktraces, our end users will see when an exception occurred and was logged.&lt;br /&gt;
&lt;br /&gt;
During the development of the improvement we had a small sample route for benchmarking.&lt;br /&gt;
It was basically a simple route with:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;from(&quot;seda:start&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;  .to(&quot;log:foo&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;  .to(&quot;log:bar&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;  .to(&quot;log:baz&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;  .process(new Processor ...);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
And in the processor we forced an exception being logged. In Apache Camel 2.11.x the stacktrace would be around 40 lines. The Camel team managed to reduce this down to 15 lines. And the bottom 6 lines is 3 from the JVM and 3 from the seda consumer. So in between the routing engine is executing; and that's where we have optimized the code. So we went from (40-6 = 34) to (15-6 = 9). Eg before we had 34 lines during the routing, and that is down to 9 now.&lt;br /&gt;
&lt;br /&gt;
Camel is still executing the same functionality. As an end user there is no functionality turned off or missing now. Its all still there and being executed; just in a different way. What we did was refactor most of the internal cross cutting functionality into a single entity CamelInternalProcessor (name subject for change), and fold that into a single stack-frame being executed.&lt;br /&gt;
&lt;br /&gt;
This improvement is internal changes only, and all end users Camel application is upgrade compatible.&lt;br /&gt;
&lt;br /&gt;
For our end users who have been debugging the Camel source code, this is now also simpler, as we added code comments in the CamelInternalProcessor with pointers how to do this easier, and which part you can safely skip over, to make your debugging experience easier and faster.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
And speaking of debugger. Then we also added a new &lt;a href=&quot;http://camel.apache.org/backlogdebugger&quot;&gt;BacklogDebugger&lt;/a&gt;, which is a Camel routing debugger JMX MBean which is ready to use for tooling and end users. For example you can use it easily set breakpoints, single step a message in the routes, and edit/view its message content. Now for the graphical UI, then James Strachan is hacking on &lt;a href=&quot;http://hawt.io/&quot;&gt;hawtio&lt;/a&gt; to add this in the upcoming hawtio 1.2 release. And since its JMX based you can always use it from a JMX console such as JConsole or JVisualVM. And for the brave a plugin to Eclipse / IDEA could be developed to integrate it with their native debugger; but thats a big task to take on.&lt;/blockquote&gt;
For further details and background on the stacktrace improvement then you can take a look at the ticket &lt;a href=&quot;https://issues.apache.org/jira/browse/CAMEL-6377&quot;&gt;CAMEL-6077&lt;/a&gt; and our &lt;a href=&quot;http://camel.465427.n5.nabble.com/HEADS-UP-Optimzing-routing-engine-to-reduce-stack-frames-in-use-during-routing-tp5732797.html&quot;&gt;discussion&lt;/a&gt; on the Camel developer mailing list. As well we have a sample of the before and after stacktraces in the CAMEL-6077 ticket.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=3nF3G6Ap2WE:39dotM-qH9Q:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=3nF3G6Ap2WE:39dotM-qH9Q:4cEx4HpKnUU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?i=3nF3G6Ap2WE:39dotM-qH9Q:4cEx4HpKnUU&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=3nF3G6Ap2WE:39dotM-qH9Q:F7zBnMyn0Lo&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?i=3nF3G6Ap2WE:39dotM-qH9Q:F7zBnMyn0Lo&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?a=3nF3G6Ap2WE:39dotM-qH9Q:V_sGLiPBpWU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/ApacheCamel?i=3nF3G6Ap2WE:39dotM-qH9Q:V_sGLiPBpWU&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/ApacheCamel/~4/3nF3G6Ap2WE&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-05-29T06:56:24+00:00</dc:date>
</item>
<item rdf:about="http://timbish.blogspot.com/2013/05/new-activemq-book-published.html">
	<title>Tim Bish: New ActiveMQ Book Published.</title>
	<link>http://timbish.blogspot.com/2013/05/new-activemq-book-published.html</link>
	<content:encoded>Recently finished work on a new book for the beginning ActiveMQ user, &quot;&lt;a href=&quot;http://www.packtpub.com/apache-activemq-messaging-application-development/book&quot;&gt;Instant Apache ActiveMQ Messaging Application Development How-to&lt;/a&gt;&quot; published by &lt;a href=&quot;http://www.packtpub.com/&quot;&gt;Packt Publishing&lt;/a&gt;.  The book is a fast paced walk through as the basic skills needed to work with &lt;a href=&quot;http://activemq.apache.org/&quot;&gt;Apache ActiveMQ&lt;/a&gt;.  At 78 pages its a quick read and provides some helpful tips for some of the most common questions asked by those new to working with &lt;a href=&quot;http://activemq.apache.org/&quot;&gt;ActiveMQ&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://dgdsbygo8mp3h.cloudfront.net/sites/default/files/imagecache/productview_larger/9413OS.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://dgdsbygo8mp3h.cloudfront.net/sites/default/files/imagecache/productview_larger/9413OS.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt; Some things that are covered in this book.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Install and run an ActiveMQ Broker&lt;/li&gt;&lt;li&gt;Set up a basic application developer environment for ActiveMQ using Apache Maven&lt;/li&gt;&lt;li&gt;Write basic JMS applications using topics and queue to broadcast events&lt;/li&gt;&lt;li&gt;Perform Request and Response style operations over JMS&lt;/li&gt;&lt;li&gt;Write applications that embed ActiveMQ brokers directly into their own JVM&lt;/li&gt;&lt;li&gt;Utilize ActiveMQ's fault tolerant features to develop robust client applications&lt;/li&gt;&lt;li&gt;How to delay message sending using ActiveMQ's built in scheduler&lt;/li&gt;&lt;/ul&gt;The book is available in eBook form from &lt;a href=&quot;http://www.packtpub.com/apache-activemq-messaging-application-development/book&quot;&gt;Packt &lt;/a&gt;or you can also order a paperback copy on &lt;a href=&quot;http://www.amazon.com/dp/1782169415/?tag=packtpubli-20&quot;&gt;Amazon&lt;/a&gt;.</content:encoded>
	<dc:date>2013-05-28T22:42:15+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/posterous/wbyo/~3/pGsPAPRhnI8/cloudstack-410-voting-restarted.html">
	<title>Chip Childers: CloudStack 4.1.0 Voting Restarted</title>
	<link>http://feedproxy.google.com/~r/posterous/wbyo/~3/pGsPAPRhnI8/cloudstack-410-voting-restarted.html</link>
	<content:encoded>&lt;p&gt;A month ago, I noted that the Apache CloudStack project was &lt;a href=&quot;http://www.chipchilders.com/blog/2013/4/29/where-is-apache-cloudstack-410.html&quot;&gt;taking it's time to ensure that upgrades were working&lt;/a&gt; well for our 4.1.0 release.  We have sorted out quite a few issues over the last month, and are now proceeding with a &lt;a href=&quot;http://markmail.org/message/me3q3zjskhcwmfn5&quot;&gt;new voting round&lt;/a&gt;.  While it's possible that a new blocker will be found, we are back on track to getting the release out the door.  Feel free to subscribe to the announce@cloudstack.apache.org mailing list (send an email to &lt;a href=&quot;mailto:announce-subscribe@cloudstack.apache.org&quot;&gt;announce-subscribe@cloudstack.apache.org&lt;/a&gt; to subscribe) to get the announcement email when we have everything ready to go!&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/posterous/wbyo/~4/pGsPAPRhnI8&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2013-05-28T17:41:16+00:00</dc:date>
</item>
<item rdf:about="http://feedproxy.google.com/~r/FiveOne/~3/D5kE7aOLLEI/">
	<title>Jeremy Quinn: Fresh [Flickr]</title>
	<link>http://feedproxy.google.com/~r/FiveOne/~3/D5kE7aOLLEI/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/sharkbait/&quot;&gt;sharkbait&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/sharkbait/8868910447/&quot; title=&quot;Fresh&quot;&gt;&lt;img alt=&quot;Fresh&quot; height=&quot;161&quot; src=&quot;http://farm6.staticflickr.com/5452/8868910447_acd1567e29_m.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don't know what this one is called she makes lovely flowers as well as theSE tiny fresh spring leaves.&lt;/p&gt;</content:encoded>
	<dc:date>2013-05-28T17:40:13+00:00</dc:date>
</item>
<item rdf:about="http://communityovercode.com/2013/05/congratulations-2013-apache-board/">
	<title>Community Over Code: Congratulations to the 2013 Apache Board of Directors</title>
	<link>http://communityovercode.com/2013/05/congratulations-2013-apache-board/</link>
	<content:encoded>&lt;p&gt;The ASF recently held it’s Annual Member’s Meeting where all &lt;a href=&quot;https://www.apache.org/foundation/governance/#corporate&quot;&gt;Members of the Foundation cast ballots&lt;/a&gt; in the annual election for the Board.  I was lucky enough to be elected, so I will be returning to the board, along with new first time Director Chris Mattmann.  Everyone also thanked our two outgoing Directors, Rich Bowen and Ross Gardler.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.apache.org/foundation/board/&quot;&gt;new board comprises&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;    Shane Curcuru&lt;/li&gt;
&lt;li&gt;    Doug Cutting (&lt;em&gt;chairman&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;    Bertrand Delacretaz&lt;/li&gt;
&lt;li&gt;    Roy T. Fielding&lt;/li&gt;
&lt;li&gt;    Jim Jagielski&lt;/li&gt;
&lt;li&gt;    Chris Mattmann&lt;/li&gt;
&lt;li&gt;
    Brett Porter&lt;/li&gt;
&lt;li&gt;    Sam Ruby&lt;/li&gt;
&lt;li&gt;    Greg Stein&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also keep a &lt;a href=&quot;http://communityovercode.com/faq/asf-board/&quot;&gt;graphical history of the Apache board&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2013-05-28T14:30:10+00:00</dc:date>
</item>
</channel>
</rdf:RDF>
