E>)_|1W+)pvJ+ajV{eMd;oF2es$y<6Bs$W%8
zD+nUVHd~vs)~mFw)pR%|KR!0U|tL}Jio{OYphO*pPZ>!hWKy&y#K=fRj$j3UN6
z-2U8~jb?6@AuCvfbE9=MCD7y!$Uj{H&85Nj04AwCTn&=u@0L4Lgd7K>(g|^1qNTPY
zFRt{#)26ME@(nqBJkB_L3Sp_qZN=$+{_I+WW4ihvG
z@lS=xXSpPfU0RwgDn(-u$>;udlnl6V`;q{`z@C7LC|}gM$cFa4Aq8l0mPAdOFc@NIL
zNTWx{Vuu{Y`srtJA`+tq)r%txY{9yuRC76VinNNiKj(2dP-H-i+9iDVoy>h8VW5>w3XZD6pojT?!#}-9VcXy6h>A7
zO3Q!sW_90_)|LilfSAV4KhS&no^?v=7q#doY?f&%CJ^_hh}E6z<$6&+AC~J7p$lDHU
zD7!(nSn>;{sXzQYXkpPi!EjD-WbSswhw4y>YcWria>gkz`*5=gdp0Df50&81%kn=6
zp4JazjVgP$Pc!M2N}^
z0(2mzXv54VT-sPPY7cG8_dPZ6kI=E*@B`OT&u|f^Xa(tOzp)(7yIgm463P+YLw*Lr
zI~zx|wnU{dqh7N$fw3cY2Nuq=NrmSOQ~QJ3SN(`6%vLHfu1h?cJI>k4@^+(#C7&Qe
zkcc#gXh(7Mtd2{+BW^bB!GAn%E!gl4=wNkrEBj+>Ig*OcR1Dv_;f%t{#Ou;w-V^rliwjn_S`Ul;w%Hm#9e2!0faP`?$Dj!akB#(>)8a?KI
zH3p2w?6V)b7GXQ`9ibm3zQUbg@cBdwkStZ(>5KB*S`F}rox{mroOdbhVvv#>wp>#9
zchfO#UMBs`NjyBl(iC?!Iyf>dx?OQ|k?bQe2T26Jm%Lbktt(&Q=s-`!&Xi52DwFH@
zIzFFx1HLo0L)kbbTedeJG;kBp{B~rtZiS+f%2C*M*jH`JIC4txpuEGcCzi`g^&*Bx
zli^Rxrr%?xf7KCDbx5vL_&q-KI9Ro;6r~0zih|0YCwBqk+gX9i*G3$Ns3IW^YdK2&vq4yMF%G$y?7aXnlGDTeR
z#~h1%(0TdG8%PqQ=QAsV<&`G#@DJI_lPM_=5u`qase5qJu1C&weZA*(H`(5j$ss`t
zO=@v{Nu>Zs=ohUu8n9Q^MANr`W@3BGu2Pn%N*v3W9#Bc`ckhi|VqV8k)GX1K>itbs
z>(v+zicT7h2k)X7`9c?eTF21&3j)GWls<~bgm8aIj1O5x%Cb^1a3d|EMr6uzfVNj%
zSSEp*9VX#U(p-KJGV0wZtI-Uk2#jAeo?-cKBzYhI7w)uskm^YWYz-1JhzC)BtS>PyC-E}>^S{RZ3YTvCJ?)VnxA>>%w;mKGeP;Lh=%X*eBayl@Qm?b!`mCdX
z8Vm8})qIsMPt843sz!&aLj2|SOw$<{k;hs9lN_=}n&}fgW~mqRY2jHmkCCo!yx_}+
zAccDBsp1!IqCQ@aS^rS|^k6d9p%g#OS2@3wAkLpZ(F6E+_D=w+vnK$~rqq
z?mt-_+PXH2D-6h$k^m(>BVzlc2Pk!afqqc${9xO>3_^(s+7(;mL!BoGeZT&hg96{y
z9pZ_D4zoN?2L>O(uRAl8Rd7YOY6TZewtvxSX44>tf<7u$=rB;f2|Q))(|WCDvfVA6o5z-|lQ
z1OuvZGa$z5_rD!JjJUzJ#pstxFY^6W&1eeamb$884LghJu+CL3Ro}QD^n&b~Y`s87`x>eZ!
E0qpzomH+?%
literal 0
HcmV?d00001
diff --git a/assets/images/favicon.png b/assets/images/favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..1cf13b9f9d978896599290a74f77d5dbe7d1655c
GIT binary patch
literal 1870
zcmV-U2eJ5xP)Gc)JR9QMau)O=X#!i9;T
z37kk-upj^(fsR36MHs_+1RCI)NNu9}lD0S{B^g8PN?Ww(5|~L#Ng*g{WsqleV}|#l
zz8@ri&cTzw_h33bHI+12+kK6WN$h#n5cD8OQt`5kw6p~9H3()bUQ8OS4Q4HTQ=1Ol
z_JAocz`fLbT2^{`8n~UAo=#AUOf=SOq4pYkt;XbC&f#7lb$*7=$na!mWCQ`dBQsO0
zLFBSPj*N?#u5&pf2t4XjEGH|=pPQ8xh7tpx;US5Cx_Ju;6m!O`ya-yF`)b%TEt5>eP1ZX~}sjjA%FJF?h7cX8=b!DZl<6%Cv
z*G0uvvU+vmnpLZ2paivG-(cd*y3$hCIcsZcYOGh{$&)A6*XX&kXZd3G8m)G$Zz-LV
z^GF3VAW^Mdv!)4OM8EgqRiz~*Cji;uzl2uC9^=8I84vNp;ltJ|q-*uQwGp2ma6cY7
z;`%`!9UXO@fr&Ebapfs34OmS9^u6$)bJxrucutf>`dKPKT%%*d3XlFVKunp9
zasduxjrjs>f8V=D|J=XNZp;_Zy^WgQ$9WDjgY=z@stwiEBm9u5*|34&1Na8BMjjgf3+SHcr`5~>oz1Y?SW^=K
z^bTyO6>Gar#P_W2gEMwq)ot3;
zREHn~U&Dp0l6YT0&k-wLwYjb?5zGK`W6S2v+K>AM(95m2C20L|3m~rN8dprPr@t)5lsk9Hu*W
z?pS990s;Ez=+Rj{x7p``4>+c0G5^pYnB1^!TL=(?HLHZ+HicG{~4F1d^5Awl_2!1jICM-!9eoLhbbT^;yHcefyTAaqRcY
zmuctDopPT!%k+}x%lZRKnzykr2}}XfG_ne?nRQO~?%hkzo;@RN{P6o`&mMUWBYMTe
z6i8ChtjX&gXl`nvrU>jah)2iNM%JdjqoaeaU%yVn!^70x-flljp6Q5tK}5}&X8&&G
zX3fpb3E(!rH=zVI_9Gjl45w@{(ITqngWFe7@9{mX;tO25Z_8
zQHEpI+FkTU#4xu>RkN>b3Tnc3UpWzPXWm#o55GKF09j^Mh~)K7{QqbO_~(@CVq!
zS<8954|P8mXN2MRs86xZ&Q4EfM@JB94b=(YGuk)s&^jiSF=t3*oNK3`rD{H`yQ?d;
ztE=laAUoZx5?RC8*WKOj`%LXEkgDd>&^Q4M^z`%u0rg-It=hLCVsq!Z%^6eB-OvOT
zFZ28TN&cRmgU}Elrnk43)!>Z1FCPL2K$7}gwzIc48NX}#!A1BpJP?#v5wkNprhV**
z?Cpalt1oH&{r!o3eSKc&ap)iz2BTn_VV`4>9M^b3;(YY}4>#ML6{~(4mH+?%07*qo
IM6N<$f(jP3KmY&$
literal 0
HcmV?d00001
diff --git a/assets/javascripts/bundle.220ee61c.min.js b/assets/javascripts/bundle.220ee61c.min.js
new file mode 100644
index 0000000..116072a
--- /dev/null
+++ b/assets/javascripts/bundle.220ee61c.min.js
@@ -0,0 +1,29 @@
+"use strict";(()=>{var Ci=Object.create;var gr=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var ki=Object.getOwnPropertyNames,Ht=Object.getOwnPropertySymbols,Hi=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,nn=Object.prototype.propertyIsEnumerable;var rn=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&rn(e,r,t[r]);if(Ht)for(var r of Ht(t))nn.call(t,r)&&rn(e,r,t[r]);return e};var on=(e,t)=>{var r={};for(var n in e)yr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ht)for(var n of Ht(e))t.indexOf(n)<0&&nn.call(e,n)&&(r[n]=e[n]);return r};var Pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Pi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ki(t))!yr.call(e,o)&&o!==r&&gr(e,o,{get:()=>t[o],enumerable:!(n=Ri(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Ci(Hi(e)):{},Pi(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var sn=Pt((xr,an)=>{(function(e,t){typeof xr=="object"&&typeof an!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(O){return!!(O&&O!==document&&O.nodeName!=="HTML"&&O.nodeName!=="BODY"&&"classList"in O&&"contains"in O.classList)}function f(O){var Qe=O.type,De=O.tagName;return!!(De==="INPUT"&&s[Qe]&&!O.readOnly||De==="TEXTAREA"&&!O.readOnly||O.isContentEditable)}function c(O){O.classList.contains("focus-visible")||(O.classList.add("focus-visible"),O.setAttribute("data-focus-visible-added",""))}function u(O){O.hasAttribute("data-focus-visible-added")&&(O.classList.remove("focus-visible"),O.removeAttribute("data-focus-visible-added"))}function p(O){O.metaKey||O.altKey||O.ctrlKey||(a(r.activeElement)&&c(r.activeElement),n=!0)}function m(O){n=!1}function d(O){a(O.target)&&(n||f(O.target))&&c(O.target)}function h(O){a(O.target)&&(O.target.classList.contains("focus-visible")||O.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(O.target))}function v(O){document.visibilityState==="hidden"&&(o&&(n=!0),Y())}function Y(){document.addEventListener("mousemove",N),document.addEventListener("mousedown",N),document.addEventListener("mouseup",N),document.addEventListener("pointermove",N),document.addEventListener("pointerdown",N),document.addEventListener("pointerup",N),document.addEventListener("touchmove",N),document.addEventListener("touchstart",N),document.addEventListener("touchend",N)}function B(){document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",N),document.removeEventListener("mouseup",N),document.removeEventListener("pointermove",N),document.removeEventListener("pointerdown",N),document.removeEventListener("pointerup",N),document.removeEventListener("touchmove",N),document.removeEventListener("touchstart",N),document.removeEventListener("touchend",N)}function N(O){O.target.nodeName&&O.target.nodeName.toLowerCase()==="html"||(n=!1,B())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),Y(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var cn=Pt(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},s=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(B,N){d.append(N,B)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(O){throw new Error("URL unable to set base "+c+" due to "+O)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,Y=!0,B=this;["append","delete","set"].forEach(function(O){var Qe=h[O];h[O]=function(){Qe.apply(h,arguments),v&&(Y=!1,B.search=h.toString(),Y=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var N=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==N&&(N=this.search,Y&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(f){Object.defineProperty(s,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){a(f)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var qr=Pt((Mt,Nr)=>{/*!
+ * clipboard.js v2.0.11
+ * https://clipboardjs.com/
+ *
+ * Licensed MIT © Zeno Rocha
+ */(function(t,r){typeof Mt=="object"&&typeof Nr=="object"?Nr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mt=="object"?Mt.ClipboardJS=r():t.ClipboardJS=r()})(Mt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return Ai}});var s=i(279),a=i.n(s),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(T){return!1}}var d=function(T){var E=p()(T);return m("cut"),E},h=d;function v(j){var T=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[T?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=j,E}var Y=function(T,E){var H=v(T);E.container.appendChild(H);var I=p()(H);return m("copy"),H.remove(),I},B=function(T){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof T=="string"?H=Y(T,E):T instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(T==null?void 0:T.type)?H=Y(T.value,E):(H=p()(T),m("copy")),H},N=B;function O(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?O=function(E){return typeof E}:O=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},O(j)}var Qe=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=T.action,H=E===void 0?"copy":E,I=T.container,q=T.target,Me=T.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&O(q)==="object"&&q.nodeType===1){if(H==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return N(Me,{container:I});if(q)return H==="cut"?h(q):N(q,{container:I})},De=Qe;function $e(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$e=function(E){return typeof E}:$e=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},$e(j)}function Ei(j,T){if(!(j instanceof T))throw new TypeError("Cannot call a class as a function")}function tn(j,T){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=$e(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=c()(I,"click",function(Me){return q.onClick(Me)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Me=this.action(q)||"copy",kt=De({action:Me,container:this.container,target:this.target(q),text:this.text(q)});this.emit(kt?"success":"error",{action:Me,text:kt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return vr("action",I)}},{key:"defaultTarget",value:function(I){var q=vr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return vr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return N(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Me=!!document.queryCommandSupported;return q.forEach(function(kt){Me=Me&&!!document.queryCommandSupported(kt)}),Me}}]),E}(a()),Ai=Li},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,f){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(f))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return c(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),s=f.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var f=this;function c(){f.off(i,c),s.apply(a,arguments)}return c._=s,this.on(i,c,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=a.length;for(f;f{"use strict";/*!
+ * escape-html
+ * Copyright(c) 2012-2013 TJ Holowaychuk
+ * Copyright(c) 2015 Andreas Lubbe
+ * Copyright(c) 2015 Tiancheng "Timothy" Gu
+ * MIT Licensed
+ */var rs=/["'&<>]/;Yo.exports=ns;function ns(e){var t=""+e,r=rs.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof et?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function pn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ee=="function"?Ee(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,f){s=e[i](s),o(a,f,s.done,s.value)})}}function o(i,s,a,f){Promise.resolve(f).then(function(c){i({value:c,done:a})},s)}}function C(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var It=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription:
+`+r.map(function(n,o){return o+1+") "+n.toString()}).join(`
+ `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Ee(s),f=a.next();!f.done;f=a.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(C(u))try{u()}catch(v){i=v instanceof It?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=Ee(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{ln(h)}catch(v){i=i!=null?i:[],v instanceof It?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new It(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)ln(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Sr=Ie.EMPTY;function jt(e){return e instanceof Ie||e&&"closed"in e&&C(e.remove)&&C(e.add)&&C(e.unsubscribe)}function ln(e){C(e)?e():e.unsubscribe()}var Le={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Sr:(this.currentObservers=null,a.push(r),new Ie(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new xn(r,n)},t}(F);var xn=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Sr},t}(x);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,f=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Wt);var Sn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Dt);var Oe=new Sn(wn);var M=new F(function(e){return e.complete()});function Vt(e){return e&&C(e.schedule)}function Cr(e){return e[e.length-1]}function Ye(e){return C(Cr(e))?e.pop():void 0}function Te(e){return Vt(Cr(e))?e.pop():void 0}function zt(e,t){return typeof Cr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Nt(e){return C(e==null?void 0:e.then)}function qt(e){return C(e[ft])}function Kt(e){return Symbol.asyncIterator&&C(e==null?void 0:e[Symbol.asyncIterator])}function Qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function zi(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Yt=zi();function Gt(e){return C(e==null?void 0:e[Yt])}function Bt(e){return un(this,arguments,function(){var r,n,o,i;return $t(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,et(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,et(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,et(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Jt(e){return C(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(qt(e))return Ni(e);if(pt(e))return qi(e);if(Nt(e))return Ki(e);if(Kt(e))return On(e);if(Gt(e))return Qi(e);if(Jt(e))return Yi(e)}throw Qt(e)}function Ni(e){return new F(function(t){var r=e[ft]();if(C(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function qi(e){return new F(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?A(function(o,i){return e(o,i,n)}):de,ge(1),r?He(t):Dn(function(){return new Zt}))}}function Vn(){for(var e=[],t=0;t=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,f=a===void 0?!0:a;return function(c){var u,p,m,d=0,h=!1,v=!1,Y=function(){p==null||p.unsubscribe(),p=void 0},B=function(){Y(),u=m=void 0,h=v=!1},N=function(){var O=u;B(),O==null||O.unsubscribe()};return y(function(O,Qe){d++,!v&&!h&&Y();var De=m=m!=null?m:r();Qe.add(function(){d--,d===0&&!v&&!h&&(p=$r(N,f))}),De.subscribe(Qe),!u&&d>0&&(u=new rt({next:function($e){return De.next($e)},error:function($e){v=!0,Y(),p=$r(B,o,$e),De.error($e)},complete:function(){h=!0,Y(),p=$r(B,s),De.complete()}}),U(O).subscribe(u))})(c)}}function $r(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function z(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),V(e===_e()),J())}function Xe(e){return{x:e.offsetLeft,y:e.offsetTop}}function Kn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>Xe(e)),V(Xe(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>rr(e)),V(rr(e)))}var Yn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Wr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),va?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Wr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ba.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Gn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Jn=typeof WeakMap!="undefined"?new WeakMap:new Yn,Xn=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ga.getInstance(),n=new La(t,r,this);Jn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Xn.prototype[e]=function(){var t;return(t=Jn.get(this))[e].apply(t,arguments)}});var Aa=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:Xn}(),Zn=Aa;var eo=new x,Ca=$(()=>k(new Zn(e=>{for(let t of e)eo.next(t)}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return Ca.pipe(S(t=>t.observe(e)),g(t=>eo.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var to=new x,Ra=$(()=>k(new IntersectionObserver(e=>{for(let t of e)to.next(t)},{threshold:0}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function sr(e){return Ra.pipe(S(t=>t.observe(e)),g(t=>to.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function ro(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),J())}var cr={drawer:z("[data-md-toggle=drawer]"),search:z("[data-md-toggle=search]")};function no(e){return cr[e].checked}function Ke(e,t){cr[e].checked!==t&&cr[e].click()}function Ue(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),V(t.checked))}function ka(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ha(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(V(!1))}function oo(){let e=b(window,"keydown").pipe(A(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:no("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),A(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!ka(n,r)}return!0}),pe());return Ha().pipe(g(t=>t?M:e))}function le(){return new URL(location.href)}function ot(e){location.href=e.href}function io(){return new x}function ao(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)ao(e,r)}function _(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)ao(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function so(){return location.hash.substring(1)}function Dr(e){let t=_("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Pa(e){return L(b(window,"hashchange"),e).pipe(l(so),V(so()),A(t=>t.length>0),X(1))}function co(e){return Pa(e).pipe(l(t=>ce(`[id="${t}"]`)),A(t=>typeof t!="undefined"))}function Vr(e){let t=matchMedia(e);return er(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function fo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(V(e.matches))}function zr(e,t){return e.pipe(g(r=>r?t():M))}function ur(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(fe(()=>M),g(r=>r.status!==200?Ot(()=>new Error(r.statusText)):k(r)))}function We(e,t){return ur(e,t).pipe(g(r=>r.json()),X(1))}function uo(e,t){let r=new DOMParser;return ur(e,t).pipe(g(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),X(1))}function pr(e){let t=_("script",{src:e});return $(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(g(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),R(()=>document.head.removeChild(t)),ge(1))))}function po(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function lo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(po),V(po()))}function mo(){return{width:innerWidth,height:innerHeight}}function ho(){return b(window,"resize",{passive:!0}).pipe(l(mo),V(mo()))}function bo(){return G([lo(),ho()]).pipe(l(([e,t])=>({offset:e,size:t})),X(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(ee("size")),o=G([n,r]).pipe(l(()=>Xe(e)));return G([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:f,y:c}])=>({offset:{x:s.x-f,y:s.y-c+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,f,c)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:f,error:c});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+GESIS Notebooks
+The GESIS Notebooks is provided by GESIS – Leibniz Institute for the Social Sciences and can be reached here .
+Short Facts
+
+Service URL
+
+http://notebooks.gesis.org
+
+Target group
+
+Open, with a focus on Computational Social Science
+
+Login process
+
+Open
+
+Support
+
+notebooks@gesis.org
+
+Documentation
+
+https://the-turing-way.netlify.app/communication/binder/zero-to-binder.html
+
+
+Features
+GESIS Notebooks offers:
+General Kernels Extensions
+
+
+
+
+Version(s): JupyterHub 3.0.0-beta.1, BinderHub
+
+
+Temporarly install new packages by the user
+
+
+Part of the BinderHub Federation
+
+
+
+
+
+configurable by the user
+
+
+
+
+configurable by the user
+
+
+
+
+Resources
+GESIS Notebooks provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+250
+
+
+Number of CPUs
+1
+1
+
+
+CPU time
+20 min
+6 h
+
+
+Amount of memory
+2 GB
+4 GB
+
+
+Number of GPUs
+0
+0
+
+
+Disk space
+10 GB
+10 GB
+
+
+Persistent disk space
+0
+0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/RWTH-NFDI-Jupyter-Service/index.html b/details/RWTH-NFDI-Jupyter-Service/index.html
new file mode 100644
index 0000000..7b2e6cd
--- /dev/null
+++ b/details/RWTH-NFDI-Jupyter-Service/index.html
@@ -0,0 +1,774 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RWTH HPC JupyterHub - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+RWTH HPC JupyterHub
+The RWTH HPC JupyterHub is provided by ITC RWTH Aachen University and can be reached here .
+Short Facts
+
+Service URL
+
+https://jupyterhub.hpc.itc.rwth-aachen.de:9651/
+
+Target group
+
+Researchers, RWTH Students/Employees/Guests, Juelich Members, Users sponsored by other Users, Users upon project application
+
+Login process
+
+Login with RWTH HPC Account through most NHR or NRW VPNs
+
+Support
+
+servicedesk@itc.rwth-aachen.de
+
+Documentation
+
+https://help.itc.rwth-aachen.de/service/rhr4fjjutttf/article/689934fec5a34c909c54606f6bc2e827/
+
+
+Features
+RWTH HPC JupyterHub offers:
+General Kernels Extensions Webproxy Applications
+
+
+
+
+Version(s): JupyterHub 3.0+, JupyterLab 3.4.7+
+
+
+Shared folder exists
+
+
+Persistent storage
+
+
+Available computing time (core-hours) vary based on user affiliation or project. Project application is necesary.
+
+
+Runs on HPC Hardware under Slurm.
+
+
+Users installs planned, by request only at the moment.
+
+
+
+
+
+
+Python 3.9
+
+
+Octave
+
+
+R
+
+
+C++ 11/14/17
+
+
+Matlab 2022b
+
+
+Matlab 2020b
+
+
+Python: Keras
+
+
+Python: Tensorflow
+
+
+Python: Tensorboard
+
+
+Python: Gurobi
+
+
+Python: Pytorch
+
+
+
+
+
+
+
+Matlab 2022b
+
+
+Matlab 2020b
+
+
+
+
+
+Resources
+RWTH HPC JupyterHub provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+5
+
+
+Number of CPUs
+1
+48
+
+
+CPU time
+4h
+172 h
+
+
+Amount of memory
+4 GB
+185 GB
+
+
+Number of GPUs
+0
+2
+
+
+Disk space
+400 GB
+1 TB
+
+
+Persistent disk space
+400 GB
+1 TB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/gwdg/index.html b/details/gwdg/index.html
new file mode 100644
index 0000000..44c399d
--- /dev/null
+++ b/details/gwdg/index.html
@@ -0,0 +1,716 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jupyter-Cloud - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Jupyter-Cloud
+The Jupyter-Cloud is provided by GWDG and can be reached here .
+Short Facts
+
+Service URL
+
+https://jupyter-cloud.gwdg.de
+
+Target group
+
+Users having a full GWDG account (which can include people working in partner projects)
+
+Login process
+
+Login via Shibboleth (AcademicID - academiccloud.de)
+
+Support
+
+support@gwdg.de
+
+Documentation
+
+https://docs.gwdg.de/doku.php?id=en:services:application_services:jupyter:start
+
+
+Features
+Jupyter-Cloud offers:
+General Kernels Extensions
+
+
+
+
+Version(s): JupyterLab 3.5 (via JupyterHub)
+
+
+Temporarly install new packages by the user
+
+
+Persistent storage
+
+
+Based on Jupyter Datascience Notebook image, extended with user-requested data science tools
+
+
+
+
+
+
+Python
+
+
+Julia
+
+
+R
+
+
+Bash
+
+
+
+
+
+
+git
+
+
+plotly
+
+
+matplotlib
+
+
+
+
+
+Resources
+Jupyter-Cloud provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+1
+
+
+Number of CPUs
+1
+4
+
+
+CPU time
+24 h
+24 h
+
+
+Amount of memory
+15 GB
+15 GB
+
+
+Number of GPUs
+0
+0
+
+
+Disk space
+10 GB
+10 GB
+
+
+Persistent disk space
+10 GB
+10 GB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/gwdg_hpc/index.html b/details/gwdg_hpc/index.html
new file mode 100644
index 0000000..1df83bb
--- /dev/null
+++ b/details/gwdg_hpc/index.html
@@ -0,0 +1,711 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SCC Jupyterhub - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+SCC Jupyterhub
+The SCC Jupyterhub is provided by GWDG and can be reached here .
+Short Facts
+
+Service URL
+
+https://jupyter-hpc.gwdg.de
+
+Target group
+
+Users with a full GWDG account (including people working in partner projects).
+
+Login process
+
+Login via LDAP
+
+Support
+
+hpc-support@gwdg.de
+
+Documentation
+
+https://docs.gwdg.de/doku.php?id=en:services:application_services:jupyter:hpc
+
+
+Features
+SCC Jupyterhub offers:
+General Kernels Extensions
+
+
+
+
+Version(s): JupyterHub 1.0.0, Notebook Server 6.0.3
+
+
+Shared folder exists
+
+
+Persistent storage
+
+
+Own directory can be made writable for others.
+
+
+Project directories are possible (POSIX group members can get acces).
+
+
+Scratch file system (very fast), and Stornext (slower, for home file system)
+
+
+
+
+
+
+Python
+
+
+R
+
+
+Bash
+
+
+
+
+
+
+Resources
+SCC Jupyterhub provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+1
+
+
+Number of CPUs
+12
+24
+
+
+CPU time
+8h
+8h
+
+
+Amount of memory
+64GB
+128GB
+
+
+Number of GPUs
+0
+1
+
+
+Disk space
+20 GB
+0.5 PB available for all users
+
+
+Persistent disk space
+None
+0.5PB available for all users
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/jupyter-jsc.fz-juelich.de/index.html b/details/jupyter-jsc.fz-juelich.de/index.html
new file mode 100644
index 0000000..748aff9
--- /dev/null
+++ b/details/jupyter-jsc.fz-juelich.de/index.html
@@ -0,0 +1,847 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jupyter-JSC - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Jupyter-JSC
+The Jupyter-JSC is provided by Juelich Supercomputing Centre and can be reached here .
+Short Facts
+
+Service URL
+
+https://jupyter-jsc.fz-juelich.de
+
+Target group
+
+HPC users of JSC. Helmholtz users in general
+
+Login process
+
+Login via JSC account or Helmholtz AAI
+
+Support
+
+ds-support@fz-juelich.de
+
+Documentation
+
+https://docs.jupyter-jsc.fz-juelich.de
+
+
+Features
+Jupyter-JSC offers:
+General Kernels Extensions Webproxy Applications
+
+
+
+
+Version(s): JupyterHub 2.3.1 JupyterLab 2.6,3.2,3.3,3.4
+
+
+Temporarly install new packages by the user
+
+
+Persistent storage
+
+
+Start on multiple (external) systems possible (including hpc). Resources depend highly on system
+
+
+2FA authentication available
+
+
+WebDAV connection possible
+
+
+SSL encryption between JupyterLab and JupyterHub
+
+
+
+
+
+
+Bash
+
+
+Cling
+
+
+JavaScript
+
+
+Julia
+
+
+Octave
+
+
+R
+
+
+Ruby
+
+
+PyDeepLearning
+
+
+PyQuantum
+
+
+PyVisualization
+
+
+Custom
+
+
+
+
+
+
+Bokeh
+
+
+JupyterLab Preview
+
+
+JupyterLab Manager
+
+
+JupyterLab Sidecar
+
+
+JupyterLab Git
+
+
+JupyterLab server proxy
+
+
+JupyterLab toc
+
+
+JupyterLab lsp
+
+
+JupyterLab quickopen
+
+
+JupyterLab pyviz
+
+
+JupyterLab Code Formatter
+
+
+BQPlot
+
+
+Dask Labextension
+
+
+IPyVolume
+
+
+ITKWidgets
+
+
+Leaflet
+
+
+Matplotlib
+
+
+ThreeJS
+
+
+Vue
+
+
+Vuetify
+
+
+JuypterLab Control
+
+
+JupyterLab Dash
+
+
+JupyterLab Datawidgets
+
+
+JupyterLab GitLab
+
+
+JupyterLab Lmod
+
+
+JupyterLab plotly
+
+
+JupyterLab System Monitor
+
+
+JupyterLAb Theme Toggle
+
+
+JupyterLab topbar extension
+
+
+JupyterLab iframe
+
+
+nbdime
+
+
+plotlywidget
+
+
+pvlink
+
+
+Jupyter Slurm Provisioner
+
+
+NVDashboard
+
+
+
+
+
+
+Resources
+Jupyter-JSC provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+100
+
+
+Number of CPUs
+2
+1024
+
+
+CPU time
+30 min
+24 h
+
+
+Amount of memory
+96 GB
+768 GB
+
+
+Number of GPUs
+0
+4
+
+
+Disk space
+10 GB
+None
+
+
+Persistent disk space
+None
+None
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/kit-horeka/index.html b/details/kit-horeka/index.html
new file mode 100644
index 0000000..bb108a6
--- /dev/null
+++ b/details/kit-horeka/index.html
@@ -0,0 +1,744 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HoreKa Jupyterhub - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+HoreKa Jupyterhub
+The HoreKa Jupyterhub is provided by Karlsruhe Institute of Technology and can be reached here .
+Short Facts
+
+Service URL
+
+https://hk-jupyter.scc.kit.edu
+
+Target group
+
+Researchers, Users upon project application, Helmholtz users
+
+Login process
+
+Login through Home Organizations, Helmholtz AAI
+
+Support
+
+https://support.nhr.kit.edu
+
+Documentation
+
+https://www.nhr.kit.edu/userdocs/jupyter
+
+
+Features
+HoreKa Jupyterhub offers:
+General Kernels Extensions Webproxy Applications
+
+
+
+
+Version(s): Jupyterhub 3.1.1, Jupyterlab 3.4.8
+
+
+Temporarly install new packages by the user
+
+
+Shared folder exists
+
+
+Persistent storage
+
+
+Available resources and apps may vary based on Cluster
+
+
+BEEGFS Filesystem can be mounted
+
+
+LSDF can be mounted
+
+
+User can install own python kernels
+
+
+Container integration via pyxis
+
+
+
+
+
+
+Python
+
+
+Julia
+
+
+R
+
+
+
+
+
+
+jupyterlab-lmod
+
+
+dask-labextension
+
+
+jupyterlab-git
+
+
+jupyterlab-latex
+
+
+jupytext
+
+
+
+
+
+
+jupyter-codeserver-proxy
+
+
+jupyter-desktop-server
+
+
+
+
+
+Resources
+HoreKa Jupyterhub provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+1
+
+
+Number of CPUs
+72
+72
+
+
+CPU time
+None
+None
+
+
+Amount of memory
+237 GB
+488 GB
+
+
+Number of GPUs
+0
+4
+
+
+Disk space
+None
+800 GB
+
+
+Persistent disk space
+10 TB
+250 TB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/mpcdf/index.html b/details/mpcdf/index.html
new file mode 100644
index 0000000..fa862c9
--- /dev/null
+++ b/details/mpcdf/index.html
@@ -0,0 +1,694 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MPCDF JupyterHub - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+MPCDF JupyterHub
+The MPCDF JupyterHub is provided by Max Planck Computing and Data Facility and can be reached here .
+Short Facts
+
+Service URL
+
+https://notebooks.mpcdf.mpg.de
+
+Target group
+
+Researchers of the Max Planck Society
+
+Login process
+
+None
+
+Support
+
+support@mpcdf.mpg.de
+
+Documentation
+
+None
+
+
+Features
+MPCDF JupyterHub offers:
+General Kernels
+
+
+
+
+
+Python
+
+
+Julia
+
+
+R
+
+
+
+
+
+Resources
+MPCDF JupyterHub provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+1
+
+
+Number of CPUs
+1
+4
+
+
+CPU time
+1 h
+72 h
+
+
+Amount of memory
+100 MB
+4 GB
+
+
+Number of GPUs
+0
+0
+
+
+Disk space
+10 GB
+10 GB
+
+
+Persistent disk space
+0 GB
+0 GB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/nfdi4ing/index.html b/details/nfdi4ing/index.html
new file mode 100644
index 0000000..ea76a8b
--- /dev/null
+++ b/details/nfdi4ing/index.html
@@ -0,0 +1,708 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NFDI4Ing JupyterHub - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+NFDI4Ing JupyterHub
+The NFDI4Ing JupyterHub is provided by University of Stuttgart and can be reached here .
+Short Facts
+
+Service URL
+
+https://jupyter.nfdi4ing.de
+
+Target group
+
+Researchers of NFDI4Ing
+
+Login process
+
+Login via Shibboleth (DFN-AAI & eduGAIN federation)
+
+Support
+
+fokus@izus.uni-stuttgart.de
+
+Documentation
+
+None
+
+
+Features
+NFDI4Ing JupyterHub offers:
+General Kernels Webproxy Applications
+
+
+
+
+Version(s): JupyterHub 1.x (lab view)
+
+
+Temporarly install new packages by the user
+
+
+Persistent storage
+
+
+WebDAV connection possible
+
+
+
+
+
+
+Python
+
+
+Matlab
+
+
+Julia
+
+
+R
+
+
+
+
+
+
+Resources
+NFDI4Ing JupyterHub provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+1
+
+
+Number of CPUs
+1
+4
+
+
+CPU time
+1 h
+72 h
+
+
+Amount of memory
+100 MB
+4 GB
+
+
+Number of GPUs
+0
+0
+
+
+Disk space
+10 GB
+10 GB
+
+
+Persistent disk space
+2 GB
+2 GB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/pc2-upb/index.html b/details/pc2-upb/index.html
new file mode 100644
index 0000000..09c3c81
--- /dev/null
+++ b/details/pc2-upb/index.html
@@ -0,0 +1,750 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PC² JupyterHub - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+PC² JupyterHub
+The PC² JupyterHub is provided by Paderborn Center for Parallel Computing, University of Paderborn and can be reached here .
+Short Facts
+
+Service URL
+
+https://jh.pc2.uni-paderborn.de
+
+Target group
+
+All users of a computing time project at PC²
+
+Login process
+
+Login via LDAP
+
+Support
+
+pc2-support@uni-paderborn.de
+
+Documentation
+
+https://pc2.uni-paderborn.de/go/jh
+
+
+Features
+PC² JupyterHub offers:
+General Kernels Extensions Webproxy Applications
+
+
+
+
+Version(s): JupyterHub 3.1.0, JupyterLab 3.6
+
+
+Temporarly install new packages by the user
+
+
+Shared folder exists
+
+
+Persistent storage
+
+
+Singularity integration (default + custom container)
+
+
+Pre-Set Environments
+
+
+Course functionality
+
+
+Remote Desktop with Slurm tools and module
+
+
+Remote Slurm kernel to start only kernels remote on cluster
+
+
+Direct connection of the cluster parallel filesystem
+
+
+User home directory for e.g. user-specific packages
+
+
+
+
+
+
+Python
+
+
+Julia
+
+
+R
+
+
+
+
+
+
+jupyterlab-nvdashboard
+
+
+jupyterlab-lmod
+
+
+jupyterlab-desktop
+
+
+jupyterlab-plotly
+
+
+jupyterlab-pygments
+
+
+
+
+
+
+Resources
+PC² JupyterHub provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+10
+
+
+Number of CPUs
+None
+143872
+
+
+CPU time
+None
+21 d
+
+
+Amount of memory
+None
+347 TB
+
+
+Number of GPUs
+None
+128
+
+
+Disk space
+None
+6 PB temporary scratch data (requested on application)
+
+
+Persistent disk space
+None
+185 TB permanent data (requested on application)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/uni-leipzig/index.html b/details/uni-leipzig/index.html
new file mode 100644
index 0000000..d7d59dc
--- /dev/null
+++ b/details/uni-leipzig/index.html
@@ -0,0 +1,728 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Webbasiertes Data Science und Machine Learning mit Jupyter - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Webbasiertes Data Science und Machine Learning mit Jupyter
+The Webbasiertes Data Science und Machine Learning mit Jupyter is provided by University of Leipzig and can be reached here .
+Short Facts
+
+Service URL
+
+https://lab.sc.uni-leipzig.de
+
+Target group
+
+Students and employees of University of Leipzig
+
+Login process
+
+Login via SC account
+
+Support
+
+sc-request@uni-leipzig.de
+
+Documentation
+
+https://www.sc.uni-leipzig.de, https://www.urz.uni-leipzig.de/unsere-services/servicedetail/service/webbasiertes-data-science-und-machine-learning-mit-jupyter
+
+
+Features
+Webbasiertes Data Science und Machine Learning mit Jupyter offers:
+
+Resources
+Webbasiertes Data Science und Machine Learning mit Jupyter provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+1
+
+
+Number of CPUs
+1
+8
+
+
+CPU time
+4h
+4h
+
+
+Amount of memory
+8GB
+32GB
+
+
+Number of GPUs
+0
+1
+
+
+Disk space
+None
+None
+
+
+Persistent disk space
+None
+None
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/details/uni-muenster/index.html b/details/uni-muenster/index.html
new file mode 100644
index 0000000..b981228
--- /dev/null
+++ b/details/uni-muenster/index.html
@@ -0,0 +1,889 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ University of Münster JupyterHub - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+University of Münster JupyterHub
+The University of Münster JupyterHub is provided by University of Münster and can be reached here .
+Short Facts
+
+Service URL
+
+https://jupyterhub.uni-muenster.de
+
+Target group
+
+Students and employees of University of Münster, members of PUNCH4NFDI (soon)
+
+Login process
+
+Login via Shibboleth (DFN-AAI & eduGAIN federation)
+
+Support
+
+None
+
+Documentation
+
+None
+
+
+Features
+University of Münster JupyterHub offers:
+General Kernels Extensions Webproxy Applications
+
+
+
+
+Version(s): JupyterHub 3.0, JupyterLab 3.6
+
+
+Temporarly install new packages by the user
+
+
+Persistent storage
+
+
+Available resources and apps may vary based on user affiliation
+
+
+Sciebo cloud storage integration (beta)
+
+
+GUI apps via noVNC in browser window
+
+
+Hosted on Kubernetes cluster
+
+
+
+
+
+
+Python
+
+
+Octave
+
+
+Julia
+
+
+R
+
+
+SageMath
+
+
+gnuplot
+
+
+Mathematica
+
+
+C++
+
+
+Rust
+
+
+Go
+
+
+Scheme
+
+
+
+
+
+
+jupyterlab_pygments
+
+
+ipyparallel-labextension
+
+
+jupyter-matplotlib
+
+
+jupyter-threejs
+
+
+jupyterlab-datawidgets
+
+
+bqplot
+
+
+ipysheet
+
+
+ipyvolume
+
+
+jupyter-leaflet
+
+
+jupyter-vue
+
+
+jupyter-vuetify
+
+
+jupyter-webrtc
+
+
+jupyterlab-drawio
+
+
+jupyterlab-plotly
+
+
+nglview-js-widgets
+
+
+jupyterlab-jupytext
+
+
+jupyterlab-logout
+
+
+jupyterlab-system-monitor
+
+
+jupyterlab-topbar-extension
+
+
+jupyterlab_iframe
+
+
+nbdime-jupyterlab
+
+
+@jupyter-widgets/jupyterlab-manager
+
+
+@jupyter-widgets/jupyterlab-sidecar
+
+
+@jupyterlab/git
+
+
+@jupyterlab/server-proxy
+
+
+@jupyterlab/latex
+
+
+@jupyterlab/mathjax3-extension
+
+
+@bokeh/jupyter_bokeh
+
+
+@agoose77/jupyterlab-markup
+
+
+@jupyter-server/resource-usage
+
+
+@lckr/jupyterlab_variableinspector
+
+
+@ryantam626/jupyterlab_code_formatter
+
+
+jupyterlab-controlpanel
+
+
+jupyterlab-helplinks
+
+
+jupyterlab-theme-toggle
+
+
+
+
+
+
+Matlab IDE
+
+
+RStudio
+
+
+VS Code
+
+
+Shiny
+
+
+Avogadro
+
+
+Blender
+
+
+Grace
+
+
+Mathematica
+
+
+MaxQuant
+
+
+OMERO
+
+
+ParaView
+
+
+Spyder
+
+
+TeXstudio
+
+
+VMD
+
+
+VoreenVE
+
+
+
+
+
+Resources
+University of Münster JupyterHub provides Jupyter servers within the following resource limits:
+
+
+
+Resource
+Default
+Maximum
+
+
+
+
+Number of Jupyter servers per user
+1
+1
+
+
+Number of CPUs
+0.25
+2
+
+
+CPU time
+6 h
+6 h
+
+
+Amount of memory
+1 GB
+16 GB
+
+
+Number of GPUs
+0
+1
+
+
+Disk space
+5 GB
+5 GB
+
+
+Persistent disk space
+5 GB
+5 GB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/gen_detail_pages.py b/gen_detail_pages.py
new file mode 100644
index 0000000..5f1dc2b
--- /dev/null
+++ b/gen_detail_pages.py
@@ -0,0 +1,29 @@
+import glob
+import os
+
+import mkdocs_gen_files
+
+# get all data
+data_dir = "data"
+exclude = ["template.yaml", "hooks.py", "cardinfo.yaml"]
+files = glob.glob(os.path.join(data_dir, "*.yaml"))
+services_names = [os.path.splitext(os.path.basename(file_name))[0] for file_name in files]
+
+# generate the pages
+for file_name, service_name in zip(files, services_names):
+ if os.path.basename(file_name) in exclude:
+ continue
+ with open(file_name, 'r') as fh:
+ d = {"yaml_str": fh.read()}
+ target_name = os.path.join("details", service_name + ".md")
+ with mkdocs_gen_files.open(target_name, "w") as fh:
+ fh.write("---\n")
+ fh.write(d["yaml_str"])
+ fh.write("---\n")
+ #fh.write("{{ macros_info() }}\n\n")
+ fh.write("{% include 'details.md' %}\n")
+
+ mkdocs_gen_files.set_edit_path(os.path.join("details", service_name +".md"),
+ "gen_detail_pages.py")
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..37bd6c5
--- /dev/null
+++ b/index.html
@@ -0,0 +1,464 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Jupyter Services Overview
+Jupyter Notebooks are an interactive computing environment for creating and sharing documents with live code, text, and visualizations. They consist of cells for code and text, can be used for data science and other tasks, and support multiple programming languages. Notebooks can be saved and shared, making collaboration and showcasing work easy.
+This site wants to provide an overview of avaiable Jupyter Services for researchers in Germany. You can filter the Services with the facets on the right. If your instance is missing, have a look at our contribution page . If you are interessted in current statistics, have a look here .
+
+
+
+
+
+
+
University of Münster JupyterHub
+
Provider: University of Münster
+
+
+
+
+
+
+
+
+
+
+
+
+
Jupyter-JSC
+
Provider: Juelich Supercomputing Centre
+
+
+
+
+
+
+
+
+
+
+
+
+
Webbasiertes Data Science und Machine Learning mit Jupyter
+
Provider: University of Leipzig
+
+
+
+
+
+
+
+
+
+
+
+
+
MPCDF JupyterHub
+
Provider: Max Planck Computing and Data Facility
+
+
+
+
+
+
+
+
+
+
+
+
+
Jupyter-Cloud
+
Provider: GWDG
+
+
+
+
+
+
+
+
+
+
+
+
+
GESIS Notebooks
+
Provider: GESIS – Leibniz Institute for the Social Sciences
+
+
+
+
+
+
+
+
+
+
+
+
+
SCC Jupyterhub
+
Provider: GWDG
+
+
+
+
+
+
+
+
+
+
+
+
+
PC² JupyterHub
+
Provider: Paderborn Center for Parallel Computing, University of Paderborn
+
+
+
+
+
+
+
+
+
+
+
+
+
HoreKa Jupyterhub
+
Provider: Karlsruhe Institute of Technology
+
+
+
+
+
+
+
+
+
+
+
+
+
RWTH HPC JupyterHub
+
Provider: ITC RWTH Aachen University
+
+
+
+
+
+
+
+
+
+
+
+
+
NFDI4Ing JupyterHub
+
Provider: University of Stuttgart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/js/tablesort.js b/js/tablesort.js
new file mode 100644
index 0000000..b407bec
--- /dev/null
+++ b/js/tablesort.js
@@ -0,0 +1,7 @@
+
+document$.subscribe(function() {
+ var tables = document.querySelectorAll("article table:not([class])")
+ tables.forEach(function(table) {
+ new Tablesort(table)
+ })
+})
diff --git a/search/search_index.json b/search/search_index.json
new file mode 100644
index 0000000..00886bc
--- /dev/null
+++ b/search/search_index.json
@@ -0,0 +1 @@
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Jupyter Services Overview","text":"Jupyter Notebooks are an interactive computing environment for creating and sharing documents with live code, text, and visualizations. They consist of cells for code and text, can be used for data science and other tasks, and support multiple programming languages. Notebooks can be saved and shared, making collaboration and showcasing work easy.
This site wants to provide an overview of avaiable Jupyter Services for researchers in Germany. You can filter the Services with the facets on the right. If your instance is missing, have a look at our contribution page. If you are interessted in current statistics, have a look here.
University of M\u00fcnster JupyterHub
Provider: University of M\u00fcnster Service Details Login
Jupyter-JSC
Provider: Juelich Supercomputing Centre Service Details Login
Webbasiertes Data Science und Machine Learning mit Jupyter
Provider: University of Leipzig Service Details Login
MPCDF JupyterHub
Provider: Max Planck Computing and Data Facility Service Details Login
Jupyter-Cloud
Provider: GWDG Service Details Login
GESIS Notebooks
Provider: GESIS \u2013 Leibniz Institute for the Social Sciences Service Details Login
SCC Jupyterhub
Provider: GWDG Service Details Login
PC\u00b2 JupyterHub
Provider: Paderborn Center for Parallel Computing, University of Paderborn Service Details Login
HoreKa Jupyterhub
Provider: Karlsruhe Institute of Technology Service Details Login
RWTH HPC JupyterHub
Provider: ITC RWTH Aachen University Service Details Login
NFDI4Ing JupyterHub
Provider: University of Stuttgart Service Details Login
"},{"location":"stats/","title":"Statistics about the Jupyter Services collected","text":"In total, the collected Jupyter Services provide XXX CPUs and XXX RAM to researchers.
Currently, on average XXX users use Jupyter per day.
"},{"location":"template/","title":"Join the list","text":"To become part of the list of JupyterHub instances of Germany you have to provide a yaml-file with the information listed in the table below. You can check out existing yaml-files and a template you can base on in the data
folder. You can also add a logo of your service is the assets
folder. When everything is ready, please add a pull request to the main branch of this repository. If you need further assistance or have other questions, do not hesitate to open an issue.
YAML\u00a0Key\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Required? Description\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Example title
yes The service name. If too general, should include a provider or project context. NFDI4Ing JupyterHub provider
yes All service providers. University of Stuttgart, Technical University of Darmstadt service_url
yes Link address to the entrypoint for users. https://jupyter.nfdi4ing.de support
yes Where to get help fokus@izus.uni-stuttgart.de health api_url
no Healthcheck URL green / orange / red documentation_url
no Link address to service specific documentation target_group_open_for
yes Roles, domain, NFDI consortia, University, etc. Researchers of NFDI4Ing login_process
yes How is the login performed; Login-URL Login via DFN-AAI & eduGAIN features
yes What the services offers -- version
yes 1.x or 2.x version of Juyterhub?; classic notebook or lab view? 1.x JupyterHub (classic view) -- kernels
no List of provided kernels. Python, Julia, R -- extensions
no List of provided server-side / client-side JupyterHub extensions -- proxy_apps
no List of server-proxy featured applications. MATLAB IDE -- install
yes Whether it is allowed to install further packages, kernels, extensions yes -- shared_folde
r yes Whether there is a folder to share documents with others false -- persistent_storage
yes Whether documents can survice the docker session. true -- misc
no List of other features you find relevant, e.g. dynamic image creation resources
yes Information about available resources on the instance -- default_server_user
no Default number of Jupyter servers per user 1 -- max_server_user
yes Maximum number of Jupyter servers per user 5 -- default_cpu
no Default number of CPU for a Jupyter server 1 -- max_cpu
yes Maximum number of CPU for a Jupyter server 4 -- default_cpu_time
no Default CPU time for a Jupyter server 1 h -- max_cpu_time
yes Maximum CPU time for a Jupyter server 72 h -- default_memory
no Default amount of memory for a Jupyter server 100 MB -- max_memory
yes Maximum amount of memory for a Jupyter server 4 GB -- default_gpu
no Default number of GPU for a Jupyter server 0 -- max_gpu
yes Maximum number of GPU for a Jupyter server 0 -- default_disk
no Default amount of disk space (maybe temporary) for a Jupyter server 10 GB -- max_disk
yes Maximum amount of disk space (maybe temporary) for a Jupyter server 10 GB -- default_persistent_disk
no Default amount of disk space that services a Jupyter session 2 GB -- max_persistent_disk
yes Maximum amount of disk space that services a Jupyter session 2 GB"},{"location":"details/GESIS-Notebooks/","title":"GESIS Notebooks","text":"The GESIS Notebooks is provided by GESIS \u2013 Leibniz Institute for the Social Sciences and can be reached here.
"},{"location":"details/GESIS-Notebooks/#short-facts","title":"Short Facts","text":"Service URL http://notebooks.gesis.org
Target group Open, with a focus on Computational Social Science
Login process Open
Support notebooks@gesis.org
Documentation https://the-turing-way.netlify.app/communication/binder/zero-to-binder.html
"},{"location":"details/GESIS-Notebooks/#features","title":"Features","text":"GESIS Notebooks offers:
GeneralKernelsExtensions Version(s): JupyterHub 3.0.0-beta.1, BinderHub
Temporarly install new packages by the user
Part of the BinderHub Federation
"},{"location":"details/GESIS-Notebooks/#resources","title":"Resources","text":"GESIS Notebooks provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 250 Number of CPUs 1 1 CPU time 20 min 6 h Amount of memory 2 GB 4 GB Number of GPUs 0 0 Disk space 10 GB 10 GB Persistent disk space 0 0"},{"location":"details/RWTH-NFDI-Jupyter-Service/","title":"RWTH HPC JupyterHub","text":"The RWTH HPC JupyterHub is provided by ITC RWTH Aachen University and can be reached here.
"},{"location":"details/RWTH-NFDI-Jupyter-Service/#short-facts","title":"Short Facts","text":"Service URL https://jupyterhub.hpc.itc.rwth-aachen.de:9651/
Target group Researchers, RWTH Students/Employees/Guests, Juelich Members, Users sponsored by other Users, Users upon project application
Login process Login with RWTH HPC Account through most NHR or NRW VPNs
Support servicedesk@itc.rwth-aachen.de
Documentation https://help.itc.rwth-aachen.de/service/rhr4fjjutttf/article/689934fec5a34c909c54606f6bc2e827/
"},{"location":"details/RWTH-NFDI-Jupyter-Service/#features","title":"Features","text":"RWTH HPC JupyterHub offers:
GeneralKernelsExtensionsWebproxy Applications Version(s): JupyterHub 3.0+, JupyterLab 3.4.7+
Shared folder exists
Persistent storage
Available computing time (core-hours) vary based on user affiliation or project. Project application is necesary.
Runs on HPC Hardware under Slurm.
Users installs planned, by request only at the moment.
Python 3.9
Octave
R
C++ 11/14/17
Matlab 2022b
Matlab 2020b
Python: Keras
Python: Tensorflow
Python: Tensorboard
Python: Gurobi
Python: Pytorch
Matlab 2022b
Matlab 2020b
"},{"location":"details/RWTH-NFDI-Jupyter-Service/#resources","title":"Resources","text":"RWTH HPC JupyterHub provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 5 Number of CPUs 1 48 CPU time 4h 172 h Amount of memory 4 GB 185 GB Number of GPUs 0 2 Disk space 400 GB 1 TB Persistent disk space 400 GB 1 TB"},{"location":"details/gwdg/","title":"Jupyter-Cloud","text":"The Jupyter-Cloud is provided by GWDG and can be reached here.
"},{"location":"details/gwdg/#short-facts","title":"Short Facts","text":"Service URL https://jupyter-cloud.gwdg.de
Target group Users having a full GWDG account (which can include people working in partner projects)
Login process Login via Shibboleth (AcademicID - academiccloud.de)
Support support@gwdg.de
Documentation https://docs.gwdg.de/doku.php?id=en:services:application_services:jupyter:start
"},{"location":"details/gwdg/#features","title":"Features","text":"Jupyter-Cloud offers:
GeneralKernelsExtensions Version(s): JupyterLab 3.5 (via JupyterHub)
Temporarly install new packages by the user
Persistent storage
Based on Jupyter Datascience Notebook image, extended with user-requested data science tools
"},{"location":"details/gwdg/#resources","title":"Resources","text":"Jupyter-Cloud provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 1 Number of CPUs 1 4 CPU time 24 h 24 h Amount of memory 15 GB 15 GB Number of GPUs 0 0 Disk space 10 GB 10 GB Persistent disk space 10 GB 10 GB"},{"location":"details/gwdg_hpc/","title":"SCC Jupyterhub","text":"The SCC Jupyterhub is provided by GWDG and can be reached here.
"},{"location":"details/gwdg_hpc/#short-facts","title":"Short Facts","text":"Service URL https://jupyter-hpc.gwdg.de
Target group Users with a full GWDG account (including people working in partner projects).
Login process Login via LDAP
Support hpc-support@gwdg.de
Documentation https://docs.gwdg.de/doku.php?id=en:services:application_services:jupyter:hpc
"},{"location":"details/gwdg_hpc/#features","title":"Features","text":"SCC Jupyterhub offers:
GeneralKernelsExtensions Version(s): JupyterHub 1.0.0, Notebook Server 6.0.3
Shared folder exists
Persistent storage
Own directory can be made writable for others.
Project directories are possible (POSIX group members can get acces).
Scratch file system (very fast), and Stornext (slower, for home file system)
"},{"location":"details/gwdg_hpc/#resources","title":"Resources","text":"SCC Jupyterhub provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 1 Number of CPUs 12 24 CPU time 8h 8h Amount of memory 64GB 128GB Number of GPUs 0 1 Disk space 20 GB 0.5 PB available for all users Persistent disk space None 0.5PB available for all users"},{"location":"details/jupyter-jsc.fz-juelich.de/","title":"Jupyter-JSC","text":"The Jupyter-JSC is provided by Juelich Supercomputing Centre and can be reached here.
"},{"location":"details/jupyter-jsc.fz-juelich.de/#short-facts","title":"Short Facts","text":"Service URL https://jupyter-jsc.fz-juelich.de
Target group HPC users of JSC. Helmholtz users in general
Login process Login via JSC account or Helmholtz AAI
Support ds-support@fz-juelich.de
Documentation https://docs.jupyter-jsc.fz-juelich.de
"},{"location":"details/jupyter-jsc.fz-juelich.de/#features","title":"Features","text":"Jupyter-JSC offers:
GeneralKernelsExtensionsWebproxy Applications Version(s): JupyterHub 2.3.1 JupyterLab 2.6,3.2,3.3,3.4
Temporarly install new packages by the user
Persistent storage
Start on multiple (external) systems possible (including hpc). Resources depend highly on system
2FA authentication available
WebDAV connection possible
SSL encryption between JupyterLab and JupyterHub
Bash
Cling
JavaScript
Julia
Octave
R
Ruby
PyDeepLearning
PyQuantum
PyVisualization
Custom
Bokeh
JupyterLab Preview
JupyterLab Manager
JupyterLab Sidecar
JupyterLab Git
JupyterLab server proxy
JupyterLab toc
JupyterLab lsp
JupyterLab quickopen
JupyterLab pyviz
JupyterLab Code Formatter
BQPlot
Dask Labextension
IPyVolume
ITKWidgets
Leaflet
Matplotlib
ThreeJS
Vue
Vuetify
JuypterLab Control
JupyterLab Dash
JupyterLab Datawidgets
JupyterLab GitLab
JupyterLab Lmod
JupyterLab plotly
JupyterLab System Monitor
JupyterLAb Theme Toggle
JupyterLab topbar extension
JupyterLab iframe
nbdime
plotlywidget
pvlink
Jupyter Slurm Provisioner
NVDashboard
"},{"location":"details/jupyter-jsc.fz-juelich.de/#resources","title":"Resources","text":"Jupyter-JSC provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 100 Number of CPUs 2 1024 CPU time 30 min 24 h Amount of memory 96 GB 768 GB Number of GPUs 0 4 Disk space 10 GB None Persistent disk space None None"},{"location":"details/kit-horeka/","title":"HoreKa Jupyterhub","text":"The HoreKa Jupyterhub is provided by Karlsruhe Institute of Technology and can be reached here.
"},{"location":"details/kit-horeka/#short-facts","title":"Short Facts","text":"Service URL https://hk-jupyter.scc.kit.edu
Target group Researchers, Users upon project application, Helmholtz users
Login process Login through Home Organizations, Helmholtz AAI
Support https://support.nhr.kit.edu
Documentation https://www.nhr.kit.edu/userdocs/jupyter
"},{"location":"details/kit-horeka/#features","title":"Features","text":"HoreKa Jupyterhub offers:
GeneralKernelsExtensionsWebproxy Applications Version(s): Jupyterhub 3.1.1, Jupyterlab 3.4.8
Temporarly install new packages by the user
Shared folder exists
Persistent storage
Available resources and apps may vary based on Cluster
BEEGFS Filesystem can be mounted
LSDF can be mounted
User can install own python kernels
Container integration via pyxis
jupyterlab-lmod
dask-labextension
jupyterlab-git
jupyterlab-latex
jupytext
jupyter-codeserver-proxy
jupyter-desktop-server
"},{"location":"details/kit-horeka/#resources","title":"Resources","text":"HoreKa Jupyterhub provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 1 Number of CPUs 72 72 CPU time None None Amount of memory 237 GB 488 GB Number of GPUs 0 4 Disk space None 800 GB Persistent disk space 10 TB 250 TB"},{"location":"details/mpcdf/","title":"MPCDF JupyterHub","text":"The MPCDF JupyterHub is provided by Max Planck Computing and Data Facility and can be reached here.
"},{"location":"details/mpcdf/#short-facts","title":"Short Facts","text":"Service URL https://notebooks.mpcdf.mpg.de
Target group Researchers of the Max Planck Society
Login process None
Support support@mpcdf.mpg.de
Documentation None
"},{"location":"details/mpcdf/#features","title":"Features","text":"MPCDF JupyterHub offers:
GeneralKernels "},{"location":"details/mpcdf/#resources","title":"Resources","text":"MPCDF JupyterHub provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 1 Number of CPUs 1 4 CPU time 1 h 72 h Amount of memory 100 MB 4 GB Number of GPUs 0 0 Disk space 10 GB 10 GB Persistent disk space 0 GB 0 GB"},{"location":"details/nfdi4ing/","title":"NFDI4Ing JupyterHub","text":"The NFDI4Ing JupyterHub is provided by University of Stuttgart and can be reached here.
"},{"location":"details/nfdi4ing/#short-facts","title":"Short Facts","text":"Service URL https://jupyter.nfdi4ing.de
Target group Researchers of NFDI4Ing
Login process Login via Shibboleth (DFN-AAI & eduGAIN federation)
Support fokus@izus.uni-stuttgart.de
Documentation None
"},{"location":"details/nfdi4ing/#features","title":"Features","text":"NFDI4Ing JupyterHub offers:
GeneralKernelsWebproxy Applications Version(s): JupyterHub 1.x (lab view)
Temporarly install new packages by the user
Persistent storage
WebDAV connection possible
"},{"location":"details/nfdi4ing/#resources","title":"Resources","text":"NFDI4Ing JupyterHub provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 1 Number of CPUs 1 4 CPU time 1 h 72 h Amount of memory 100 MB 4 GB Number of GPUs 0 0 Disk space 10 GB 10 GB Persistent disk space 2 GB 2 GB"},{"location":"details/pc2-upb/","title":"PC\u00b2 JupyterHub","text":"The PC\u00b2 JupyterHub is provided by Paderborn Center for Parallel Computing, University of Paderborn and can be reached here.
"},{"location":"details/pc2-upb/#short-facts","title":"Short Facts","text":"Service URL https://jh.pc2.uni-paderborn.de
Target group All users of a computing time project at PC\u00b2
Login process Login via LDAP
Support pc2-support@uni-paderborn.de
Documentation https://pc2.uni-paderborn.de/go/jh
"},{"location":"details/pc2-upb/#features","title":"Features","text":"PC\u00b2 JupyterHub offers:
GeneralKernelsExtensionsWebproxy Applications Version(s): JupyterHub 3.1.0, JupyterLab 3.6
Temporarly install new packages by the user
Shared folder exists
Persistent storage
Singularity integration (default + custom container)
Pre-Set Environments
Course functionality
Remote Desktop with Slurm tools and module
Remote Slurm kernel to start only kernels remote on cluster
Direct connection of the cluster parallel filesystem
User home directory for e.g. user-specific packages
jupyterlab-nvdashboard
jupyterlab-lmod
jupyterlab-desktop
jupyterlab-plotly
jupyterlab-pygments
"},{"location":"details/pc2-upb/#resources","title":"Resources","text":"PC\u00b2 JupyterHub provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 10 Number of CPUs None 143872 CPU time None 21 d Amount of memory None 347 TB Number of GPUs None 128 Disk space None 6 PB temporary scratch data (requested on application) Persistent disk space None 185 TB permanent data (requested on application)"},{"location":"details/uni-leipzig/","title":"Webbasiertes Data Science und Machine Learning mit Jupyter","text":"The Webbasiertes Data Science und Machine Learning mit Jupyter is provided by University of Leipzig and can be reached here.
"},{"location":"details/uni-leipzig/#short-facts","title":"Short Facts","text":"Service URL https://lab.sc.uni-leipzig.de
Target group Students and employees of University of Leipzig
Login process Login via SC account
Support sc-request@uni-leipzig.de
Documentation https://www.sc.uni-leipzig.de, https://www.urz.uni-leipzig.de/unsere-services/servicedetail/service/webbasiertes-data-science-und-machine-learning-mit-jupyter
"},{"location":"details/uni-leipzig/#features","title":"Features","text":"Webbasiertes Data Science und Machine Learning mit Jupyter offers:
GeneralKernelsExtensions "},{"location":"details/uni-leipzig/#resources","title":"Resources","text":"Webbasiertes Data Science und Machine Learning mit Jupyter provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 1 Number of CPUs 1 8 CPU time 4h 4h Amount of memory 8GB 32GB Number of GPUs 0 1 Disk space None None Persistent disk space None None"},{"location":"details/uni-muenster/","title":"University of M\u00fcnster JupyterHub","text":"The University of M\u00fcnster JupyterHub is provided by University of M\u00fcnster and can be reached here.
"},{"location":"details/uni-muenster/#short-facts","title":"Short Facts","text":"Service URL https://jupyterhub.uni-muenster.de
Target group Students and employees of University of M\u00fcnster, members of PUNCH4NFDI (soon)
Login process Login via Shibboleth (DFN-AAI & eduGAIN federation)
Support None
Documentation None
"},{"location":"details/uni-muenster/#features","title":"Features","text":"University of M\u00fcnster JupyterHub offers:
GeneralKernelsExtensionsWebproxy Applications Version(s): JupyterHub 3.0, JupyterLab 3.6
Temporarly install new packages by the user
Persistent storage
Available resources and apps may vary based on user affiliation
Sciebo cloud storage integration (beta)
GUI apps via noVNC in browser window
Hosted on Kubernetes cluster
Python
Octave
Julia
R
SageMath
gnuplot
Mathematica
C++
Rust
Go
Scheme
jupyterlab_pygments
ipyparallel-labextension
jupyter-matplotlib
jupyter-threejs
jupyterlab-datawidgets
bqplot
ipysheet
ipyvolume
jupyter-leaflet
jupyter-vue
jupyter-vuetify
jupyter-webrtc
jupyterlab-drawio
jupyterlab-plotly
nglview-js-widgets
jupyterlab-jupytext
jupyterlab-logout
jupyterlab-system-monitor
jupyterlab-topbar-extension
jupyterlab_iframe
nbdime-jupyterlab
@jupyter-widgets/jupyterlab-manager
@jupyter-widgets/jupyterlab-sidecar
@jupyterlab/git
@jupyterlab/server-proxy
@jupyterlab/latex
@jupyterlab/mathjax3-extension
@bokeh/jupyter_bokeh
@agoose77/jupyterlab-markup
@jupyter-server/resource-usage
@lckr/jupyterlab_variableinspector
@ryantam626/jupyterlab_code_formatter
jupyterlab-controlpanel
jupyterlab-helplinks
jupyterlab-theme-toggle
Matlab IDE
RStudio
VS Code
Shiny
Avogadro
Blender
Grace
Mathematica
MaxQuant
OMERO
ParaView
Spyder
TeXstudio
VMD
VoreenVE
"},{"location":"details/uni-muenster/#resources","title":"Resources","text":"University of M\u00fcnster JupyterHub provides Jupyter servers within the following resource limits:
Resource Default Maximum Number of Jupyter servers per user 1 1 Number of CPUs 0.25 2 CPU time 6 h 6 h Amount of memory 1 GB 16 GB Number of GPUs 0 1 Disk space 5 GB 5 GB Persistent disk space 5 GB 5 GB"}]}
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..76e16bc
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,73 @@
+
+
+
+ https://NFDI-Jupyter.github.io/services/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/stats/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/template/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/GESIS-Notebooks/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/RWTH-NFDI-Jupyter-Service/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/gwdg/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/gwdg_hpc/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/jupyter-jsc.fz-juelich.de/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/kit-horeka/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/mpcdf/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/nfdi4ing/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/pc2-upb/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/uni-leipzig/
+ 2023-08-09
+ daily
+
+
+ https://NFDI-Jupyter.github.io/services/details/uni-muenster/
+ 2023-08-09
+ daily
+
+
\ No newline at end of file
diff --git a/sitemap.xml.gz b/sitemap.xml.gz
new file mode 100644
index 0000000000000000000000000000000000000000..b2ee4fc028d8690fd6595b65914a261150003242
GIT binary patch
literal 353
zcmV-n0iOOJiwFo6`_p6s|8r?{Wo=<_E_iKh0M(YgZo?oHh4(y#bLZ@*)ihP{{F0*r`
zwc+_G1%1qN{;(h~ojo{csZ_4&HdGmg(C!rnWGOqjhnov@jS=}c8Q+p*LXxSsT(yCX
zSA~{Pw(yyYLe+
z^?m(JhGw$5Si(7i?1c=A_M@^q9OCV@F}BEQc_iBoYQ-xm0&0<+a-=dX?22%h8_Pu*
z4z4bRy7O;wIK-BZNoP0V0C!rE8k9XM85VTYfkyB9d+PJx|9|;6uSgBnFA4wvZThKg
literal 0
HcmV?d00001
diff --git a/stats/index.html b/stats/index.html
new file mode 100644
index 0000000..fe9620e
--- /dev/null
+++ b/stats/index.html
@@ -0,0 +1,519 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Statistics about the Jupyter Services collected - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Statistics about the Jupyter Services collected
+In total, the collected Jupyter Services provide XXX CPUs and XXX RAM to researchers.
+Currently, on average XXX users use Jupyter per day.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/template/index.html b/template/index.html
new file mode 100644
index 0000000..2857397
--- /dev/null
+++ b/template/index.html
@@ -0,0 +1,722 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Join the list - NFDI Jupyter Services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Join the list
+To become part of the list of JupyterHub instances of Germany you have to provide a yaml-file with the information listed in the table below. You can check out existing yaml-files and a template you can base on in the data
folder. You can also add a logo of your service is the assets
folder. When everything is ready, please add a pull request to the main branch of this repository. If you need further assistance or have other questions, do not hesitate to open an issue.
+
+
+
+YAML Key
+Required?
+Description
+Example
+
+
+
+
+title
+yes
+The service name. If too general, should include a provider or project context.
+NFDI4Ing JupyterHub
+
+
+provider
+yes
+All service providers.
+University of Stuttgart, Technical University of Darmstadt
+
+
+service_url
+yes
+Link address to the entrypoint for users.
+https://jupyter.nfdi4ing.de
+
+
+support
+yes
+Where to get help
+fokus@izus.uni-stuttgart.de
+
+
+health api_url
+no
+Healthcheck URL
+green / orange / red
+
+
+documentation_url
+no
+Link address to service specific documentation
+
+
+
+target_group_open_for
+yes
+Roles, domain, NFDI consortia, University, etc.
+Researchers of NFDI4Ing
+
+
+login_process
+yes
+How is the login performed; Login-URL
+Login via DFN-AAI & eduGAIN
+
+
+features
+yes
+What the services offers
+
+
+
+-- version
+yes
+1.x or 2.x version of Juyterhub?; classic notebook or lab view?
+1.x JupyterHub (classic view)
+
+
+-- kernels
+no
+List of provided kernels.
+Python, Julia, R
+
+
+-- extensions
+no
+List of provided server-side / client-side JupyterHub extensions
+
+
+
+-- proxy_apps
+no
+List of server-proxy featured applications.
+MATLAB IDE
+
+
+-- install
+yes
+Whether it is allowed to install further packages, kernels, extensions
+yes
+
+
+-- shared_folde
r
+yes
+Whether there is a folder to share documents with others
+false
+
+
+-- persistent_storage
+yes
+Whether documents can survice the docker session.
+true
+
+
+-- misc
+no
+List of other features you find relevant, e.g. dynamic image creation
+
+
+
+resources
+yes
+Information about available resources on the instance
+
+
+
+-- default_server_user
+no
+Default number of Jupyter servers per user
+1
+
+
+-- max_server_user
+yes
+Maximum number of Jupyter servers per user
+5
+
+
+-- default_cpu
+no
+Default number of CPU for a Jupyter server
+1
+
+
+-- max_cpu
+yes
+Maximum number of CPU for a Jupyter server
+4
+
+
+-- default_cpu_time
+no
+Default CPU time for a Jupyter server
+1 h
+
+
+-- max_cpu_time
+yes
+Maximum CPU time for a Jupyter server
+72 h
+
+
+-- default_memory
+no
+Default amount of memory for a Jupyter server
+100 MB
+
+
+-- max_memory
+yes
+Maximum amount of memory for a Jupyter server
+4 GB
+
+
+-- default_gpu
+no
+Default number of GPU for a Jupyter server
+0
+
+
+-- max_gpu
+yes
+Maximum number of GPU for a Jupyter server
+0
+
+
+-- default_disk
+no
+Default amount of disk space (maybe temporary) for a Jupyter server
+10 GB
+
+
+-- max_disk
+yes
+Maximum amount of disk space (maybe temporary) for a Jupyter server
+10 GB
+
+
+-- default_persistent_disk
+no
+Default amount of disk space that services a Jupyter session
+2 GB
+
+
+-- max_persistent_disk
+yes
+Maximum amount of disk space that services a Jupyter session
+2 GB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file