webpackJsonp([6],{"77aO":function(e,t,a){"use strict";t.a={props:{collapsed:{type:Boolean,default:!1}},data:function(){return{expanded:!this.collapsed,transitioning:!1}},watch:{collapsed:function(e){this.expanded=!e}},methods:{beforeenter:function(e){this.transitioning=!0,e.style.height=0},enter:function(e){e.style.height=e.scrollHeight+"px"},afterenter:function(e){e.style.height="",this.transitioning=!1},beforeleave:function(e){this.transitioning=!0,e.style.height=e.offsetHeight+"px",e.offsetHeight},leave:function(e){e.style.height=0,e.offsetHeight},afterleave:function(e){this.transitioning=!1},toggle:function(){this.transitioning||(this.expanded=!this.expanded,this.$emit(this.expanded?"expanding":"collapsing",this.id))}}}},LnKn:function(e,t,a){"use strict";var n=a("T9Hf");t.a={layout:"sidebar",data:function(){return{faqs:[{question:'What does "Unide" stand for?',answer:"The projects name is derived from understand industry devices. Other ideas like connect industry machines turned out to have meanings in foreign languages or being trademarked already.<br/>Regarding the logo: Unide and PPMP's goal is to enable you to connect machines and receive their measurements / alerts. The logo represents that. It has you ('<i>U</i>') highlighted and connects to rings. As a side note, we found that the words almost look like <i>you-nice</i>."},{question:"What's the difference between Unide and PPMP?",answer:'The Production Performance Mangement Protocol (PPMP) is the name of the structure of the <a href="specification/">payload</a> whereas Unide is the project that aims to provide sample implementations and further development of this protocol in and with the Eclipse Open Source community. Nevertheless, PPMP is an open suggestion, and everyone is welcome to using it, even without contributing to the Unide project.'},{question:"Why introducing another industry protocol?",answer:"There are already plenty of transport protocols (REST, AMQP, etc.) available. PPMP aims to provide the very industry specific semantic structure for their payload. So it aims to complete such IoT transport infrastructure and bridge the gap to the manufacturing domain. OPC-DA/UA on the other hand covers full service oriented architecture, security concerns and information model, which makes it more complex and costly to implement and operate. In some use cases, this is not necessary."},{question:"Why have you choosen JSON as syntax?",answer:"JSON is a good fit regarding understandability and size. Having a structured and comprehensible basis is the first step for acceptance in the industry. In the spirit of Donald E. Knuth (\"<a href='http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.103.6084'><i>premature optimization is the root of all evil</i></a>\"), further compacting is possible in a later stage."},{question:"Why are time and measurement points separated in multiple arrays?",answer:"We have discussed multiple options for <a href='specification'>series</a>: having an array of<br/>tupels (<code>[[0, 23.34],[...],...]</code>),<br/>plain objects (<code>[{time: 0, temperature: 23.34}, {...}...]</code>),<br/>objects with time as key (<code>{ \"0\": [23.34,...],...}</code>) and other.<br/>When parsing, we had to recognize, that unsigned long int for time and floating point measurements are of different types. Also, all former variants are more verbose due to additional brackets, commas or quotation marks. We believe that the current version is a good compromise between readability and structure."},{question:"I'm interested in Unide/PPMP. How can I contribute?",answer:'The first goal of Unide is to provide sample client/server implementations of PPMP. Secondly, we\'re looking forward to improving PPMP in future versions together with the eclipse community.<br/>If you want to contribute with source code, use cases or implementing it in your devices, let us know and discuss in the <a href="https://github.com/eclipse/unide">unide forum</a> or by forking / filing an issue on <a href="https://github.com/eclipse/unide">github</a>.'},{question:"Why have you included content-spec uri, if that can also be expressed in the a REST url already?",answer:'<a href="specification">content-spec</a> is included in the payload, because PPMP does not rely on a specific transport protocol (like REST).'}]}},components:{card:n.a}}},MMVg:function(e,t,a){"use strict";var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"faq"},[a("h1",{staticClass:"title is-3"},[e._v("\n    Frequently Asked Questions\n  ")]),e._m(0),a("div",{staticClass:"accordion"},e._l(e.faqs,function(t,n){return a("card",{key:n,attrs:{collapsed:!0}},[a("template",{slot:"header"},[e._v("\n        "+e._s(t.question)+"\n      ")]),a("div",{domProps:{innerHTML:e._s(t.answer)}})],2)}))])};n._withStripped=!0;var i={render:n,staticRenderFns:[function(){var e=this.$createElement,t=this._self._c||e;return t("div",[this._v("\n    We assembled a few frequently asked questions about the Production Performance Protocol (PPMP) and the Unide project. You're welcome to raise your questions in the "),t("a",{attrs:{href:"https://www.eclipse.org/forums/index.php/f/348/"}},[this._v("Unide forum")]),this._v(".\n  ")])}]};t.a=i},NAEW:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("LnKn"),i=a("MMVg"),o=!1;var s=function(e){o||a("Q4uz")},r=a("VU/8")(n.a,i.a,!1,s,null,null);r.options.__file="pages\\faq.vue",t.default=r.exports},NVTU:function(e,t,a){"use strict";var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"card collapsibleCard",class:{collapsed:!e.expanded}},[e.$slots.header?a("header",{staticClass:"card-header",on:{click:function(t){t.preventDefault(),e.toggle()}}},[a("p",{staticClass:"card-header-title"},[!e.$slots.headerCollapsed||e.expanded?e._t("header"):e._t("headerCollapsed")],2),a("a",{staticClass:"card-header-icon"},[a("span",{staticClass:"icon"},[a("i",{staticClass:"fa",class:{"fa-angle-down":e.expanded,"fa-angle-up":!e.expanded}})])])]):e._e(),a("transition",{attrs:{name:"rollup","leave-active-class":"collapsing","enter-active-class":"collapsing"},on:{"before-leave":e.beforeleave,leave:e.leave,"after-leave":e.afterleave,"before-enter":e.beforeenter,enter:e.enter,"after-enter":e.afterenter}},[a("div",{directives:[{name:"show",rawName:"v-show",value:e.expanded,expression:"expanded"}]},[a("div",{staticClass:"card-content"},[e._t("default")],2)])])],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};t.a=i},Q4uz:function(e,t,a){var n=a("Vbq/");"string"==typeof n&&(n=[[e.i,n,""]]),n.locals&&(e.exports=n.locals);a("rjj0")("25f4887a",n,!1)},T9Hf:function(e,t,a){"use strict";var n=a("77aO"),i=a("NVTU"),o=!1;var s=function(e){o||a("WVEp")},r=a("VU/8")(n.a,i.a,!1,s,null,null);r.options.__file="components\\collapsibleCard.vue",t.a=r.exports},"Vbq/":function(e,t,a){(e.exports=a("YHym")(!1)).push([e.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""])},WVEp:function(e,t,a){var n=a("a3hs");"string"==typeof n&&(n=[[e.i,n,""]]),n.locals&&(e.exports=n.locals);a("rjj0")("52cedc5e",n,!1)},a3hs:function(e,t,a){(e.exports=a("YHym")(!1)).push([e.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.card.collapsibleCard>header{cursor:pointer;background-color:#f5f5f5;border-bottom:1px solid hsla(0,0%,4%,.1)}.card.collapsibleCard>header .card-header-icon{text-decoration:none}.card.collapsibleCard>header .card-header-title{font-weight:400}.card.collapsibleCard>header p{margin-bottom:0}.card.collapsibleCard.collapsed header{border-bottom:none}.card.collapsibleCard>div.collapsing{position:relative;height:0;overflow:hidden;display:block;transition-property:height;transition-duration:.35s;transition-timing-function:ease}",""])}});