index.html 69 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349
  1. <!DOCTYPE html>
  2. <html lang="en-us">
  3. <head>
  4. <title>jMonkeyEngine | Sgold interviews Daniel Perano</title>
  5. <meta name="viewport" content="width=device-width,minimum-scale=1">
  6. <meta name="description"
  7. content="jMonkeyEngine is a modern developer friendly game engine written primarily in Java. ">
  8. <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
  9. <link rel="stylesheet" href="/css/style.css">
  10. <meta name="twitter:card" content="summary"/>
  11. <meta name="twitter:title" content="Sgold interviews Daniel Perano"/>
  12. <meta name="twitter:description" content="stephengold Thank you for agreeing to be interviewed.
  13. First question: Do you remember when you first encountered JMonkeyEngine?
  14. What was your first impression?
  15. danielperano I started learning jME back in the 3.0 days, as I recall,
  16. and I was impressed with the features it offered.
  17. The scene-graph control and appstate design made a lot of sense to me &mdash;"/>
  18. <meta property="og:title" content="Sgold interviews Daniel Perano" />
  19. <meta property="og:description" content="stephengold Thank you for agreeing to be interviewed.
  20. First question: Do you remember when you first encountered JMonkeyEngine?
  21. What was your first impression?
  22. danielperano I started learning jME back in the 3.0 days, as I recall,
  23. and I was impressed with the features it offered.
  24. The scene-graph control and appstate design made a lot of sense to me &mdash;" />
  25. <meta property="og:type" content="article" />
  26. <meta property="og:url" content="https://jmonkeyengine.org/blog/interview-danielp/" /><meta property="article:section" content="blog" />
  27. <meta property="article:published_time" content="2020-02-25T18:00:00+00:00" />
  28. <meta property="article:modified_time" content="2020-02-25T18:00:00+00:00" />
  29. <meta itemprop="name" content="Sgold interviews Daniel Perano">
  30. <meta itemprop="description" content="stephengold Thank you for agreeing to be interviewed.
  31. First question: Do you remember when you first encountered JMonkeyEngine?
  32. What was your first impression?
  33. danielperano I started learning jME back in the 3.0 days, as I recall,
  34. and I was impressed with the features it offered.
  35. The scene-graph control and appstate design made a lot of sense to me &mdash;"><meta itemprop="datePublished" content="2020-02-25T18:00:00+00:00" />
  36. <meta itemprop="dateModified" content="2020-02-25T18:00:00+00:00" />
  37. <meta itemprop="wordCount" content="1969">
  38. <meta itemprop="keywords" content="interview,blog,misc," />
  39. <script src="/js/old-browser.js"></script>
  40. <link rel="stylesheet" href="/css/old-browser.css">
  41. <script src="/highlight/highlight.pack.js"></script>
  42. <script
  43. src="//cdnjs.cloudflare.com/ajax/libs/highlightjs-line-numbers.js/2.8.0/highlightjs-line-numbers.min.js"></script>
  44. <link rel="stylesheet" href="/highlight/styles/railscasts.css">
  45. <script type="text/javascript">
  46. hljs.initHighlightingOnLoad();
  47. hljs.initLineNumbersOnLoad();
  48. </script>
  49. <script src="/js/utils.js"></script>
  50. <script src="/js/showcase.js"></script>
  51. <script type="module" src="/js/Main.js"></script>
  52. <script src="https://cdnjs.cloudflare.com/ajax/libs/later/1.2.0/later.min.js" integrity="sha512-4OyNDMl5KLKjS8F1ImVwUvmthM8HkXbR6vMafCmT5zBTd9I/sA3z3zM0JLBosHW6/3K2jq2RoBo/eTUNS2hOGA==" crossorigin="anonymous"></script>
  53. <script src="/js/maintenance/maintenance.js"></script>
  54. <link rel="stylesheet" href="/js/maintenance/maintenance.css">
  55. <script src="/js/christmas/Christmas.js"></script>
  56. <script>
  57. Christmas.init(
  58. "https://jmonkeyengine.org/js/christmas/",
  59. ["figure.githubUser img", 'img.avatar', "#showcase button"],
  60. [
  61. {
  62. type: "attribute",
  63. value: "src",
  64. transform:function(src){
  65. if(src.startsWith("/user_avatar/hub.jmonkeyengine.org/")) {
  66. return src.substring("/user_avatar/hub.jmonkeyengine.org/".length).split("/")[0];
  67. }
  68. return src;
  69. }
  70. },
  71. {
  72. type: "attribute",
  73. value: "title"
  74. },
  75. {
  76. type: "text"
  77. }
  78. ],
  79. ["header img.avatar"]
  80. );
  81. </script>
  82. </head>
  83. <body>
  84. <header> <nav class="responsiveWidth " id="topmenu">
  85. <div class="expandable">
  86. <a href="https://jmonkeyengine.org/" alt-href="https://jmonkeyengine.org/tags,https://jmonkeyengine.org/authors,https://jmonkeyengine.org/devlog,https://jmonkeyengine.org/blog,,https://jmonkeyengine.org/communitylog">
  87. <button class="genericCl responsiveIcon expandable ">
  88. <i class="fas fa-home"></i> <span>Home</span>
  89. </button>
  90. </a>
  91. <a href="https://jmonkeyengine.org/tags/showcase" alt-href="https://jmonkeyengine.org/showcase">
  92. <button class="genericCl responsiveIcon expandable ">
  93. <i class="fas fa-images"></i> <span>Showcase</span>
  94. </button>
  95. </a>
  96. <a href="https://hub.jmonkeyengine.org">
  97. <button class="genericCl responsiveIcon expandable ">
  98. <i class="fab fa-discourse"></i> <span>Discussions</span>
  99. </button>
  100. </a>
  101. <a href="https://library.jmonkeyengine.org" >
  102. <button class="genericCl responsiveIcon expandable ">
  103. <i class="fas fa-puzzle-piece"></i> <span>Library</span>
  104. </button>
  105. </a>
  106. <a href="https://jmonkeyengine.org/docs">
  107. <button class="genericCl responsiveIcon expandable ">
  108. <i class="fas fa-book"></i> <span>Docs</span>
  109. </button>
  110. </a>
  111. <a href="https://jmonkeyengine.org/license">
  112. <button class="genericCl responsiveIcon expandable toggleable toggledOffPortrait">
  113. <i class="fas fa-balance-scale-right"></i> <span>License</span>
  114. </button>
  115. </a>
  116. </div>
  117. <div class="toggleable toggledOffPortrait expandable">
  118. <a href="https://github.com/jMonkeyEngine/jmonkeyengine" rel='noopener noreferrer' target="_blank">
  119. <button class="icon toggleable toggledOffPortrait codeCl expandable " title="Github">
  120. <i class="fab fa-github-square"></i> <span>Github</span>
  121. </button>
  122. </a>
  123. <a href="https://twitter.com/jmonkeyengine" rel='noopener noreferrer' target="_blank">
  124. <button class="icon twitterCl toggleable toggledOffPortrait expandable " title="Follow on Twitter">
  125. <i class="fab fa-twitter"></i> <span>Twitter</span>
  126. </button>
  127. </a>
  128. <a href="https://www.youtube.com/channel/UC-Fs3R5Q6wW_XYspOXGZgPw" rel='noopener noreferrer'
  129. target="_blank">
  130. <button class="icon youtubeCl toggleable toggledOffPortrait expandable " title="Follow on Youtube">
  131. <i class="fab fa-youtube"></i> <span>Youtube</span>
  132. </button>
  133. </a>
  134. <a href="https://discord.gg/Rv8sfVu" rel='noopener noreferrer' target="_blank">
  135. <button class="icon discordCl toggleable toggledOffPortrait expandable " title="Discord">
  136. <i class="fab fa-discord"></i> <span>Discord</span>
  137. </button>
  138. </a>
  139. <a href="https://jmonkeyengine.org/donate" >
  140. <button class="icon donateCl toggleable toggledOffPortrait expandable " title="Donate">
  141. <i class="fas fa-donate"></i> <span>Donate!</span>
  142. </button>
  143. </a>
  144. </div>
  145. </nav>
  146. <script>
  147. !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.stringSimilarity=e():t.stringSimilarity=e()}(self,(function(){return t={138:t=>{function e(t,e){if((t=t.replace(/\s+/g,""))===(e=e.replace(/\s+/g,"")))return 1;if(t.length<2||e.length<2)return 0;let r=new Map;for(let e=0;e<t.length-1;e++){const n=t.substring(e,e+2),o=r.has(n)?r.get(n)+1:1;r.set(n,o)}let n=0;for(let t=0;t<e.length-1;t++){const o=e.substring(t,t+2),s=r.has(o)?r.get(o):0;s>0&&(r.set(o,s-1),n++)}return 2*n/(t.length+e.length-2)}t.exports={compareTwoStrings:e,findBestMatch:function(t,r){if(!function(t,e){return"string"==typeof t&&!!Array.isArray(e)&&!!e.length&&!e.find((function(t){return"string"!=typeof t}))}(t,r))throw new Error("Bad arguments: First argument should be a string, second should be an array of strings");const n=[];let o=0;for(let s=0;s<r.length;s++){const i=r[s],f=e(t,i);n.push({target:i,rating:f}),f>n[o].rating&&(o=s)}return{ratings:n,bestMatch:n[o],bestMatchIndex:o}}}}},e={},function r(n){if(e[n])return e[n].exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}(138);var t,e}));
  148. window.initJmeMenu=function () {
  149. const selectionClass= window.selectedTopMenuClass || "highlightedCl";
  150. const topmenu = document.querySelector('#topmenu');
  151. if (window.location.href.startsWith("http://localhost:1313")) {
  152. for (const a of topmenu.querySelectorAll("a")) {
  153. a.href = a.href.replace("https://jmonkeyengine.org", "http://localhost:1313");
  154. }
  155. }
  156. const likelyScore=[];
  157. for (const a of topmenu.querySelectorAll("a")) {
  158. const pageUrl=window.location.href.endsWith("/")?window.location.href.substring(0,window.location.href.length-1):window.location.href;
  159. const process = (linkUrls) => {
  160. if(!linkUrls)return;
  161. for(let linkUrl of linkUrls){
  162. if (linkUrl != null) {
  163. if (window.location.href.startsWith("http://localhost:1313")) {
  164. linkUrl = linkUrl.replace("https://jmonkeyengine.org", "http://localhost:1313");
  165. }
  166. if (linkUrl.endsWith("/")) {
  167. linkUrl = linkUrl.substring(0, linkUrl.length - 1);
  168. }
  169. const score = stringSimilarity.compareTwoStrings(linkUrl, pageUrl);
  170. likelyScore.push(
  171. {
  172. score: score,
  173. el: a.querySelector("button")
  174. }
  175. );
  176. }
  177. }
  178. }
  179. process([a.href]);
  180. process(a.getAttribute("alt-href")?a.getAttribute("alt-href").split(","):undefined);
  181. }
  182. likelyScore.sort((a, b) => b.score - a.score);
  183. likelyScore.forEach(el=>el.el.classList.remove(selectionClass));
  184. likelyScore[0].el.classList.add(selectionClass);
  185. };
  186. document.addEventListener('DOMContentLoaded', function(){
  187. window.initJmeMenu();
  188. });
  189. </script>
  190. <div id="siteTitle" class="list hlist responsiveWidth">
  191. <div id="logo">
  192. <a href="/">
  193. <img src="/images/jme-logo.png" />
  194. </a>
  195. <i class="toggleNavOnPortraitButton fas fa-bars" toggle="topmenu"></i>
  196. </div>
  197. <div id="contributionsBanner">
  198. <div> <i class="fas fa-donate"></i>
  199. Backed by:
  200. <a rel='noopener nofollow noreferrer' target="_blank" id="backerName">The Community</a>
  201. <a rel='noopener nofollow noreferrer' target="_blank"
  202. href="https://opencollective.com/jmonkeyengine#section-contributors"> and more...</a>
  203. </div>
  204. <div>
  205. <i class="fab fa-github-alt"></i>
  206. Contributed by:
  207. <a rel='noopener nofollow noreferrer' target="_blank" id="contributorName">The Community</a>
  208. <a rel='noopener nofollow noreferrer' target="_blank"
  209. href="https://github.com/jMonkeyEngine/jmonkeyengine/graphs/contributors">and more...</a>
  210. </div>
  211. </div>
  212. </div>
  213. </header>
  214. <main>
  215. <section id="showcase" mode="banner">
  216. <i id="playButton" class=" fas fa-play"></i>
  217. <div class="showcaseElement" style='display: block '>
  218. <div class="cover blur" style ="background-image: url('/images/showcase/spoxel/4.jpg'); " ></div>
  219. <div class="cover" style ="background-image: url('/images/showcase/spoxel/4.jpg'); " ></div>
  220. </div>
  221. <video class="showcaseElement cover" style='display: none ' preload="none"
  222. class="cover">
  223. <source src="https://steamcdn-a.akamaihd.net/steam/apps/256746530/movie480.webm" type="video/webm">
  224. </video>
  225. </div>
  226. <div class="showcaseElement" style='display: none '>
  227. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/2.jpg'); " ></div>
  228. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/2.jpg'); " ></div>
  229. </div>
  230. <div class="showcaseElement" style='display: none '>
  231. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/5.jpg'); " ></div>
  232. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/5.jpg'); " ></div>
  233. </div>
  234. <video class="showcaseElement cover" style='display: none ' preload="none"
  235. class="cover">
  236. <source src="https://steamcdn-a.akamaihd.net/steam/apps/256746524/movie480.webm" type="video/webm">
  237. </video>
  238. </div>
  239. <div class="showcaseElement" style='display: none '>
  240. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/8.jpg'); " ></div>
  241. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/8.jpg'); " ></div>
  242. </div>
  243. <div class="showcaseElement" style='display: none '>
  244. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/1.jpg'); " ></div>
  245. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/1.jpg'); " ></div>
  246. </div>
  247. <div class="showcaseElement" style='display: none '>
  248. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/7.jpg'); " ></div>
  249. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/7.jpg'); " ></div>
  250. </div>
  251. <div class="showcaseElement" style='display: none '>
  252. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/6.jpg'); " ></div>
  253. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/6.jpg'); " ></div>
  254. </div>
  255. <div class="showcaseElement" style='display: none '>
  256. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/3.jpg'); " ></div>
  257. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/spoxel/3.jpg'); " ></div>
  258. </div>
  259. <div class="responsiveWidth" id="engineDescription">
  260. jMonkeyEngine is a modern developer friendly game engine written primarily in Java.
  261. <br />
  262. Its minimalistic and code first approach makes it perfect for developers who want the support of a game engine
  263. while retaining full control over their code with the ability to extend and adapt the engine to their workflow.
  264. <br />
  265. <br />
  266. <br />
  267. <a href="/start/"><button id="startbtn" class="highlightedCl" ><i class="fas fa-rocket"></i> Get Started </button></a>
  268. <a href="/#features" title="overview"><button id="startbtn" class="highlightedCl"><i class="fas fa-question-circle" style="padding:0"></i></button></a>
  269. <br />
  270. <br />
  271. </div>
  272. <div class="responsiveWidth" >
  273. <div id="gameDescription" >
  274. <h2><i class="far fa-images" ></i> Spoxel powered by jMonkeyEngine</h2>
  275. Explore, customize, and build across the world of Spoxel as you fight the otherworlders who have subjugated the land and forced the grounders below the surface. Use runes to construct custom powerful …
  276. <br />
  277. <a class="readMore" href="/showcase/spoxel/#showcase">See game page </a>
  278. </div>
  279. </div>
  280. </section>
  281. <br/>
  282. <section class="message list vlist">
  283. <div>
  284. <blockquote class="list vlist responsive">
  285. <span id="backerMessage">-</span>
  286. <i><a rel='noopener nofollow noreferrer' target="_blank" id="backerMessageName">-</a> </i>
  287. </blockquote>
  288. <a href="https://opencollective.com/jmonkeyengine">Become a
  289. backer and leave a message...</a>
  290. </div>
  291. </section>
  292. <br/>
  293. <a id="content"></a>
  294. <section class="full responsiveWidth">
  295. <article>
  296. <h1 >
  297. <i class="fas fa-paragraph useless"></i>
  298. <a href="/blog/interview-danielp/">Sgold interviews Daniel Perano</a></h1>
  299. <div class="content">
  300. <span>
  301. <p><figure class="githubUser inline " github-user="stephengold">
  302. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  303. <figcaption>
  304. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  305. stephengold
  306. </h2>
  307. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  308. <div>
  309. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  310. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  311. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  312. </div>
  313. </figcaption>
  314. </figure> <br>
  315. Thank you for agreeing to be interviewed.</p>
  316. <p>First question: Do you remember when you first encountered JMonkeyEngine?<br>
  317. What was your first impression?</p>
  318. <p><figure class="githubUser inline " github-user="danielperano">
  319. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  320. <figcaption>
  321. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  322. danielperano
  323. </h2>
  324. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  325. <div>
  326. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  327. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  328. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  329. </div>
  330. </figcaption>
  331. </figure> I started learning jME back in the 3.0 days, as I recall,<br>
  332. and I was impressed with the features it offered.<br>
  333. The scene-graph control and appstate design made a lot of sense to me &mdash;<br>
  334. at the time both were novel concepts.</p>
  335. <p>Not long after that, I adopted jME for a project called “OpenWorld.”</p>
  336. <p><figure class="githubUser inline " github-user="stephengold">
  337. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  338. <figcaption>
  339. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  340. stephengold
  341. </h2>
  342. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  343. <div>
  344. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  345. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  346. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  347. </div>
  348. </figcaption>
  349. </figure> <br>
  350. What sort of project was it?</p>
  351. <p><figure class="githubUser inline " github-user="danielperano">
  352. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  353. <figcaption>
  354. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  355. danielperano
  356. </h2>
  357. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  358. <div>
  359. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  360. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  361. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  362. </div>
  363. </figcaption>
  364. </figure> OpenWorld was the precursor to MyWorld &mdash;<br>
  365. a platform for real-time, 3-D social virtual worlds and MMO games.</p>
  366. <p><figure class="githubUser inline " github-user="stephengold">
  367. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  368. <figcaption>
  369. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  370. stephengold
  371. </h2>
  372. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  373. <div>
  374. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  375. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  376. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  377. </div>
  378. </figcaption>
  379. </figure> <br>
  380. What got you interested in social virtual worlds?</p>
  381. <p><figure class="githubUser inline " github-user="danielperano">
  382. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  383. <figcaption>
  384. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  385. danielperano
  386. </h2>
  387. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  388. <div>
  389. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  390. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  391. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  392. </div>
  393. </figcaption>
  394. </figure> I first heard of them from<br>
  395. a magazine article about Second Life, over a decade ago.<br>
  396. I was fascinated, and despite being underage<br>
  397. (accounts were restricted to users 18 and over), I created an account.</p>
  398. <p>Since I was underage my adventures there did not last long, but<br>
  399. I was hooked from the start.<br>
  400. It was like a game, but there were so many things to do and places to explore,<br>
  401. and the built-in creation system blew my mind.</p>
  402. <p>A couple years later, I discovered OpenSimulator,<br>
  403. an open-source server that’s compatible with Second Life clients (viewers).<br>
  404. Since then, I’ve been a member of various OpenSimulator virtual worlds (or grids, as they’re called).</p>
  405. <p>During my second year in OpenSimulator, I began to keenly notice<br>
  406. some limitations that OpenSimulator inherited from Second Life.<br>
  407. Compared to multi-player games, virtual worlds always felt slow and bloated,<br>
  408. and the architecture was fundamentally limiting.</p>
  409. <p>At that point I had the idea that grew into MyWorld:<br>
  410. apply multiplayer game technology to social virtual worlds.<br>
  411. Later on, I realized that a social virtual-world platform<br>
  412. could also be a powerful MMO gaming platform, and<br>
  413. since then I’ve worked towards the dual goal of supporting<br>
  414. social virtual worlds and MMO games as first-class citizens on MyWorld.</p>
  415. <p><figure class="githubUser inline " github-user="stephengold">
  416. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  417. <figcaption>
  418. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  419. stephengold
  420. </h2>
  421. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  422. <div>
  423. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  424. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  425. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  426. </div>
  427. </figcaption>
  428. </figure> <br>
  429. How many people are working on MyWorld?</p>
  430. <p><figure class="githubUser inline " github-user="danielperano">
  431. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  432. <figcaption>
  433. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  434. danielperano
  435. </h2>
  436. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  437. <div>
  438. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  439. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  440. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  441. </div>
  442. </figcaption>
  443. </figure> We have three people on the project.<br>
  444. Right now I’m the sole developer &mdash;<br>
  445. the other two handle business management,<br>
  446. social media, and aesthetics (art and design).</p>
  447. <p><figure class="githubUser inline " github-user="stephengold">
  448. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  449. <figcaption>
  450. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  451. stephengold
  452. </h2>
  453. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  454. <div>
  455. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  456. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  457. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  458. </div>
  459. </figcaption>
  460. </figure> <br>
  461. How is the project funded?</p>
  462. <p><figure class="githubUser inline " github-user="danielperano">
  463. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  464. <figcaption>
  465. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  466. danielperano
  467. </h2>
  468. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  469. <div>
  470. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  471. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  472. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  473. </div>
  474. </figcaption>
  475. </figure> We’re fully self-funded: no investor or venture-capital backing.<br>
  476. We see this as an advantage, for two reasons:</p>
  477. <ol>
  478. <li>We’re not beholden to shareholders,<br>
  479. so we’re free to make decisions that bring the best experience to our users.</li>
  480. <li>Our runway is infinitely long &mdash; we have no pressure to grow rapidly to avoid bankruptcy.<br>
  481. We can grow organically and sustainably.</li>
  482. </ol>
  483. <p><figure class="githubUser inline " github-user="stephengold">
  484. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  485. <figcaption>
  486. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  487. stephengold
  488. </h2>
  489. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  490. <div>
  491. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  492. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  493. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  494. </div>
  495. </figcaption>
  496. </figure> <br>
  497. When’s the next release of MyWorld due out?</p>
  498. <p><figure class="githubUser inline " github-user="danielperano">
  499. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  500. <figcaption>
  501. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  502. danielperano
  503. </h2>
  504. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  505. <div>
  506. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  507. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  508. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  509. </div>
  510. </figcaption>
  511. </figure> Our first alpha/preview release<br>
  512. will come out around the end of March of this year (2020).</p>
  513. <p><figure class="githubUser inline " github-user="stephengold">
  514. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  515. <figcaption>
  516. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  517. stephengold
  518. </h2>
  519. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  520. <div>
  521. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  522. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  523. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  524. </div>
  525. </figcaption>
  526. </figure> <br>
  527. What features will it provide?</p>
  528. <p><figure class="githubUser inline " github-user="danielperano">
  529. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  530. <figcaption>
  531. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  532. danielperano
  533. </h2>
  534. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  535. <div>
  536. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  537. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  538. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  539. </div>
  540. </figcaption>
  541. </figure> The feature set will depend on what we have time to finish.<br>
  542. Dynamic asset delivery/loading, the entity system, and scripting<br>
  543. are in pretty good shape,<br>
  544. but the user interface still needs work<br>
  545. and there are many small “detail features” that need attention.</p>
  546. <p><figure class="githubUser inline " github-user="stephengold">
  547. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  548. <figcaption>
  549. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  550. stephengold
  551. </h2>
  552. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  553. <div>
  554. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  555. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  556. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  557. </div>
  558. </figcaption>
  559. </figure> <br>
  560. In the long run, what will differentiate MyWorld from other virtual worlds?<br>
  561. Specifically, how would you compare it to Minecraft and Second Life?</p>
  562. <p><figure class="githubUser inline " github-user="danielperano">
  563. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  564. <figcaption>
  565. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  566. danielperano
  567. </h2>
  568. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  569. <div>
  570. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  571. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  572. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  573. </div>
  574. </figcaption>
  575. </figure> Unlike Minecraft, MyWorld is not a game itself &mdash;<br>
  576. it’s a platform that supports dynamic content creation and scripting,<br>
  577. and unlike games more generally, MyWorld provides first-class support<br>
  578. for uploading 3D models, textures, audio, etcetera<br>
  579. and distributing them to clients on an as-needed basis.<br>
  580. It also has a professional-grade scripting language you can use<br>
  581. to add custom behavior to your creations.</p>
  582. <p>Unlike current-generation virtual worlds,<br>
  583. MyWorld was designed from Day One to satisfy<br>
  584. the performance requirements of multiplayer action games.<br>
  585. This means that exploring a virtual world can have the same fast,<br>
  586. fluid feel as playing a well-designed multiplayer game.</p>
  587. <p>Another difference is that we support scripting on both client and server,<br>
  588. allowing scripted effects and latency-elimination techniques<br>
  589. that are impossible in current virtual worlds.</p>
  590. <p>In addition, our internal systems can be extended via plugins<br>
  591. that can integrate into the entity system and<br>
  592. host or call HTTP endpoints (for custom REST APIs, for example).<br>
  593. Plugins can even extend the core network protocol<br>
  594. with jME’s fast, intuitive, and efficient RMI implementation.</p>
  595. <p><figure class="githubUser inline " github-user="stephengold">
  596. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  597. <figcaption>
  598. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  599. stephengold
  600. </h2>
  601. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  602. <div>
  603. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  604. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  605. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  606. </div>
  607. </figcaption>
  608. </figure> <br>
  609. What’s the financial model? Will the client be freely downloadable?<br>
  610. Will there be paid subscriptions? Free-to-play accounts?</p>
  611. <p><figure class="githubUser inline " github-user="danielperano">
  612. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  613. <figcaption>
  614. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  615. danielperano
  616. </h2>
  617. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  618. <div>
  619. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  620. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  621. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  622. </div>
  623. </figcaption>
  624. </figure> Our vision for MyWorld has always been to release it open-source,<br>
  625. so the client will always be free to download and use, as will the core server.<br>
  626. We may eventually release some commercial plugins for professional use,<br>
  627. but these would be extensions to the core server,<br>
  628. not permanently built-in proprietary code.</p>
  629. <p>In a project like MyWorld,<br>
  630. there are many opportunities to provide value to users,<br>
  631. so there are many potential revenue streams.<br>
  632. Initially we’re looking at a revenue model similar to Second Life:<br>
  633. users can rent space in the virtual world to build homes,<br>
  634. businesses, workshops, etcetera.<br>
  635. We may also introduce a subscription model that offers<br>
  636. extra benefits to heavy users.</p>
  637. <p>We’re also investigating how we can monetize<br>
  638. by offering professional hosting and support services to game developers<br>
  639. and those interested in running MyWorld servers.</p>
  640. <p><figure class="githubUser inline " github-user="stephengold">
  641. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  642. <figcaption>
  643. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  644. stephengold
  645. </h2>
  646. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  647. <div>
  648. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  649. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  650. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  651. </div>
  652. </figcaption>
  653. </figure> <br>
  654. I’ve heard that Second Life has its own currency.<br>
  655. Do you have plans in that area?</p>
  656. <p><figure class="githubUser inline " github-user="danielperano">
  657. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  658. <figcaption>
  659. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  660. danielperano
  661. </h2>
  662. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  663. <div>
  664. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  665. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  666. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  667. </div>
  668. </figcaption>
  669. </figure> While MyWorld needs a virtual currency to effectively operate,<br>
  670. issuing one ourselves is not currently a viable choice for a couple of reasons:</p>
  671. <ol>
  672. <li>
  673. <p>Issuing in-house currency is a large financial liability &mdash;<br>
  674. there are many ways to destabilize an economy, virtual or otherwise,<br>
  675. that are largely or completely outside the control of the currency issuer,<br>
  676. which would present a risk both to us and our users.</p>
  677. </li>
  678. <li>
  679. <p>Governments have begun regulating virtual currencies,<br>
  680. making it expensive and difficult to issue them.</p>
  681. </li>
  682. </ol>
  683. <p>Fortunately, we’re not the only ones with this need<br>
  684. and there are several good virtual currency services,<br>
  685. some of which allow the same currency to be used across many games or virtual worlds.</p>
  686. <p>So yes, we will have a virtual currency,<br>
  687. but we’re not planning on issuing it ourselves.</p>
  688. <p><figure class="githubUser inline " github-user="stephengold">
  689. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  690. <figcaption>
  691. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  692. stephengold
  693. </h2>
  694. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  695. <div>
  696. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  697. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  698. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  699. </div>
  700. </figcaption>
  701. </figure> <br>
  702. You mentioned earlier that Second Life was age-restricted.<br>
  703. Will MyWorld have similar restrictions?</p>
  704. <p><figure class="githubUser inline " github-user="danielperano">
  705. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  706. <figcaption>
  707. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  708. danielperano
  709. </h2>
  710. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  711. <div>
  712. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  713. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  714. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  715. </div>
  716. </figcaption>
  717. </figure> Initially yes, unfortunately.<br>
  718. Allowing minors requires extra legal compliance<br>
  719. and stringent moderation of content and user interactions.</p>
  720. <p>I don’t see this as a notable limitation, especially early on.<br>
  721. Most of our initial user base will be developers and creators,<br>
  722. not general users,<br>
  723. so I expect the overwhelming majority of interest to be coming from adults.</p>
  724. <p>I want to allow minors to access at least some areas within MyWorld<br>
  725. as soon as it makes sense for us as an organization and community,<br>
  726. but for now we need to focus on the technical aspects.</p>
  727. <p><figure class="githubUser inline " github-user="stephengold">
  728. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  729. <figcaption>
  730. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  731. stephengold
  732. </h2>
  733. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  734. <div>
  735. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  736. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  737. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  738. </div>
  739. </figcaption>
  740. </figure> <br>
  741. Does MyWorld use JMonkeyEngine for the client, the server, or both?</p>
  742. <p><figure class="githubUser inline " github-user="danielperano">
  743. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  744. <figcaption>
  745. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  746. danielperano
  747. </h2>
  748. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  749. <div>
  750. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  751. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  752. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  753. </div>
  754. </figcaption>
  755. </figure> The client is a typical jME application &mdash;<br>
  756. AppStates tie MyWorld-specific libraries (such as our in-house entity system)<br>
  757. to other systems and the scene graph.</p>
  758. <p>The server uses jME’s network stack,<br>
  759. and we’re transitioning from jME’s physics to Minie, but that’s about all.<br>
  760. The server’s systems and heartbeat/event dispatch loop are all custom &mdash;<br>
  761. we don’t use jME’s application structure serverside.</p>
  762. <p><figure class="githubUser inline " github-user="stephengold">
  763. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  764. <figcaption>
  765. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  766. stephengold
  767. </h2>
  768. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  769. <div>
  770. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  771. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  772. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  773. </div>
  774. </figcaption>
  775. </figure> <br>
  776. What technologies does MyWorld use besides JMonkeyEngine?</p>
  777. <p><figure class="githubUser inline " github-user="danielperano">
  778. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  779. <figcaption>
  780. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  781. danielperano
  782. </h2>
  783. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  784. <div>
  785. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  786. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  787. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  788. </div>
  789. </figcaption>
  790. </figure> It uses JavaFX, Lemur, Chipmunk (our in-house scripting language),<br>
  791. Jetty (an embedded HTTP server), and CockroachDB (a distributed SQL database).</p>
  792. <p><figure class="githubUser inline " github-user="stephengold">
  793. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  794. <figcaption>
  795. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  796. stephengold
  797. </h2>
  798. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  799. <div>
  800. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  801. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  802. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  803. </div>
  804. </figcaption>
  805. </figure> <br>
  806. What prompted you to create Chipmunk?<br>
  807. What other scripting languages did you consider?</p>
  808. <p><figure class="githubUser inline " github-user="danielperano">
  809. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  810. <figcaption>
  811. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  812. danielperano
  813. </h2>
  814. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  815. <div>
  816. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  817. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  818. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  819. </div>
  820. </figcaption>
  821. </figure> Chipmunk was born out of necessity.</p>
  822. <p>Like Second Life,<br>
  823. MyWorld allows content creators to script anything they create.<br>
  824. Scripting can include physics, movement, particle/sound/animation effects,<br>
  825. HTTP calls, etcetera.</p>
  826. <p>The problems here are security and resource use.<br>
  827. Since anyone with creation privileges can upload scripts to a server<br>
  828. (and scripts can also run client side), sandboxing is a must.</p>
  829. <p>My first choice for scripting was Groovy.<br>
  830. It’s a powerful, well-known language with many features,<br>
  831. and the compiler supports AST transformations for customizing compiled code.<br>
  832. I spent a great deal of time pursuing this route,<br>
  833. but the shoe always pinched in the same spots: preemption and checkpointing.</p>
  834. <p>Preemption means that the script engine can stop a running script at any time.<br>
  835. This is necessary to ensure that misbehaving (or resource-intensive) scripts<br>
  836. don’t overuse CPU resources.<br>
  837. Preemption is also necessary for checkpointing:<br>
  838. freezing a script so it can be persisted to disk or sent to another server.</p>
  839. <p>Java was not designed for preemption.<br>
  840. Every mechanism I could think of to fit preemption support<br>
  841. into Java’s compiled bytecode came with substantial overhead and other nasty limitations.</p>
  842. <p>I also experimented with an assembly-like language for scripting,<br>
  843. but it was too difficult to read to be suitable for anything more than trivial scripts.</p>
  844. <p>I designed Chipmunk to fit a unique place in the language spectrum &mdash;<br>
  845. easy for a first-time programmer to pick up,<br>
  846. but powerful enough for an experienced developer to hit the ground running.<br>
  847. For example, classes declare state that’s shared between all instances<br>
  848. via the “shared” keyword,<br>
  849. which is semantically identical to Java’s “static” keyword,<br>
  850. but expresses the concept in terms that make intuitive sense<br>
  851. to inexperienced programmers.</p>
  852. <p>In terms of features, Chipmunk supports modules, classes, polymorphism,<br>
  853. first-class functions, anonymous (lambda) functions, exceptions,<br>
  854. and dynamic typing.</p>
  855. <p><figure class="githubUser inline " github-user="stephengold">
  856. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  857. <figcaption>
  858. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  859. stephengold
  860. </h2>
  861. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  862. <div>
  863. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  864. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  865. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  866. </div>
  867. </figcaption>
  868. </figure> <br>
  869. Chipmunk sounds like it might have many uses.</p>
  870. <p><figure class="githubUser inline " github-user="danielperano">
  871. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  872. <figcaption>
  873. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  874. danielperano
  875. </h2>
  876. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  877. <div>
  878. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  879. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  880. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  881. </div>
  882. </figcaption>
  883. </figure> I hope so! I’m looking forward to seeing what else it’s used for.</p>
  884. <p><figure class="githubUser inline " github-user="stephengold">
  885. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  886. <figcaption>
  887. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  888. stephengold
  889. </h2>
  890. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  891. <div>
  892. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  893. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  894. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  895. </div>
  896. </figcaption>
  897. </figure> <br>
  898. Is there any published documentation for it?<br>
  899. Is it open-source?</p>
  900. <p><figure class="githubUser inline " github-user="danielperano">
  901. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  902. <figcaption>
  903. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  904. danielperano
  905. </h2>
  906. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  907. <div>
  908. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  909. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  910. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  911. </div>
  912. </figcaption>
  913. </figure> Chipmunk is developed separately from MyWorld and will be released<br>
  914. open-source as soon as we’ve finalized the v1.0 language spec<br>
  915. and finished implementing the standard library.</p>
  916. <p>The main language features are functional, but it needs more attention<br>
  917. on things like string manipulation, collection operations, and libraries.</p>
  918. <p><figure class="githubUser inline " github-user="stephengold">
  919. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  920. <figcaption>
  921. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  922. stephengold
  923. </h2>
  924. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  925. <div>
  926. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  927. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  928. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  929. </div>
  930. </figcaption>
  931. </figure> <br>
  932. Part of the appeal of an open world, I think,<br>
  933. is having a place to exhibit digital creations.</p>
  934. <p>What skills/tools would someone need to create and upload a 3-D model?<br>
  935. Do you envision people using Blender 3D?</p>
  936. <p>What audio formats will MyWorld support?</p>
  937. <p><figure class="githubUser inline " github-user="danielperano">
  938. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  939. <figcaption>
  940. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  941. danielperano
  942. </h2>
  943. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  944. <div>
  945. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  946. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  947. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  948. </div>
  949. </figcaption>
  950. </figure> MyWorld is built around the assumption that users will create digital content.<br>
  951. One of the first things I wrote was the dynamic asset upload/download mechanism.</p>
  952. <p>Our initial creation pipeline is based around the GLTF format.<br>
  953. Thanks to jME’s GLTF importer, most modern GLTF files should import seamlessly.<br>
  954. Our primary interest in external tools is Blender 3D,<br>
  955. but anything that exports to GLTF should do fine.</p>
  956. <p>Later on, we plan to support in-world creation via constructive solid geometry<br>
  957. with procedural extensions, as a supplement to the GLTF pipeline.</p>
  958. <p>Any audio format supported by jME (OGG &amp; WAV in particular)<br>
  959. can be opened by the client for upload.<br>
  960. Streaming media can be in any format supported by JavaFX’s media framework.</p>
  961. <p><figure class="githubUser inline " github-user="stephengold">
  962. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  963. <figcaption>
  964. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  965. stephengold
  966. </h2>
  967. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  968. <div>
  969. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  970. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  971. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  972. </div>
  973. </figcaption>
  974. </figure> <br>
  975. If someone wants to develop games for MyWorld, where should they begin?<br>
  976. Is there an e-mail list for announcements?<br>
  977. A website they should monitor?<br>
  978. A chatroom they should join?</p>
  979. <p><figure class="githubUser inline " github-user="danielperano">
  980. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  981. <figcaption>
  982. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  983. danielperano
  984. </h2>
  985. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  986. <div>
  987. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  988. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  989. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  990. </div>
  991. </figcaption>
  992. </figure> The best place to go is our <a href="https://discordapp.com/invite/WccnrWg">Discord server</a>.<br>
  993. We have an active community there,<br>
  994. and we often discuss planned or requested features.<br>
  995. It’s also the first place we share development updates<br>
  996. and news about the project.<br>
  997. For anyone wishing to participate in the alpha-test release,<br>
  998. this is the place to be.</p>
  999. <p>Our <a href="https://www.facebook.com/MyWorld-LLC-228751528045088">Facebook</a><br>
  1000. and <a href="https://twitter.com/MyWorldLLC">Twitter</a> pages<br>
  1001. cover major news items and announcements,<br>
  1002. and liking/following us there helps us get the word out to more people!</p>
  1003. <p>For general project information, blog posts, and press releases,<br>
  1004. the <a href="https://myworldvw.com/">MyWorld website</a> is the place to go.<br>
  1005. We archive the notes from our monthly “MyWorld Meetup” sessions on the blog &mdash;<br>
  1006. these are a great resource for finding out details about the project.</p>
  1007. <p><figure class="githubUser inline " github-user="stephengold">
  1008. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  1009. <figcaption>
  1010. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  1011. stephengold
  1012. </h2>
  1013. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  1014. <div>
  1015. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  1016. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  1017. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  1018. </div>
  1019. </figcaption>
  1020. </figure> <br>
  1021. I’ve run out of questions.<br>
  1022. Unless there’s something more you’d like to discuss, let’s wrap this up.</p>
  1023. <p>Thank you very much for your detailed answers<br>
  1024. and all the time and care you put into them.</p>
  1025. <p><figure class="githubUser inline " github-user="danielperano">
  1026. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  1027. <figcaption>
  1028. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  1029. danielperano
  1030. </h2>
  1031. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  1032. <div>
  1033. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  1034. <a alt="twitter link" title="Twitter" ghresolve-twitter_link="href" class="ghtwitter_link excludeSummary" href="" style="display:none"><i class="fab fa-twitter"></i></a>
  1035. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  1036. </div>
  1037. </figcaption>
  1038. </figure> Thank you! I enjoyed the interview, and I’m looking forward to seeing how jME continues to grow and improve – there’s a lot of great talent behind this project!</p>
  1039. </span>
  1040. <nav>
  1041. <ul class="tags smaller">
  1042. <h3 class="tags">Tags</h3>
  1043. <li><a class="interview" href="/tags/interview"><i class="fas fa-hashtag"></i>interview</a></li>
  1044. <li><a class="blog" href="/tags/blog"><i class="fas fa-hashtag"></i>blog</a></li>
  1045. <li><a class="misc" href="/tags/misc"><i class="fas fa-hashtag"></i>misc</a></li>
  1046. </ul>
  1047. <ul class="authors smaller">
  1048. <h3 class="authors">Authors</h3>
  1049. <li><a class="stephengold" href="/authors/stephengold"><i class="fas fa-at"></i>stephengold</a></li>
  1050. </ul>
  1051. <ul class="postedDate smaller">
  1052. <h3 class="postedDate">Date</h3>
  1053. <li><time datetime="2020-02-25 18:00:00 &#43;0000 UTC"><i class="fas fa-calendar"></i>25 February 2020</time> </li>
  1054. </ul>
  1055. <ul class="share">
  1056. <h3 class="share">Share</h3>
  1057. <li>
  1058. <button><a href="https://twitter.com/share?ref_src=twsrc%5Etfw&text=stephengold%20Thank%20you%20for%20agreeing%20to%20be%20interviewed.%0aFirst%20question%3a%20Do%20you%20remember%20when%20you%20first%20encountered%20JMonkeyEngine%3f%0aWhat%20was%20your%20first%20%e2%80%a6 " >
  1059. <i class="fab fa-twitter-square"></i> Share on Twitter</a></button></li>
  1060. </ul>
  1061. </nav>
  1062. </div>
  1063. </article>
  1064. </section>
  1065. <section class="full responsiveWidth">
  1066. <article>
  1067. <h1 id="comments"><i class="useless fas fa-comments"></i> Comments</h1>
  1068. <div class="content" id='discourse-comments'></div>
  1069. <script type="text/javascript">
  1070. var eurl=window.location.href ;
  1071. eurl=eurl.split("#")[0];
  1072. eurl=eurl.split("?")[0];
  1073. eurl=eurl.trim();
  1074. if(eurl.endsWith("/index.html"))eurl=eurl.substring(0,eurl.length-"/index.html".length).trim();
  1075. if(eurl.charAt(eurl.length-1)=="/") eurl=eurl.substring(0,eurl.length-1);
  1076. if(eurl.startsWith("http://")) eurl="https://"+eurl.substring("http://".length);
  1077. if(eurl.endsWith("/communitylog/new-website")){
  1078. eurl+="/#content";
  1079. }
  1080. DiscourseEmbed = {
  1081. discourseUrl: 'https://hub.jmonkeyengine.org/',
  1082. discourseEmbedUrl: eurl
  1083. };
  1084. (function() {
  1085. var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
  1086. d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
  1087. (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  1088. })();
  1089. </script>
  1090. </article>
  1091. </section>
  1092. </main>
  1093. <footer>
  1094. © 2020 jMonkeyEngine.
  1095. All other trademarks, logos and featured content are property of their respective owners.
  1096. <br />
  1097. <a title="Github repo" rel='noopener nofollow noreferrer' target="_blank"
  1098. href="https://github.com/jMonkeyEngine/jmonkeyengine-website">
  1099. <i class="fab fa-github"></i> Source on Github
  1100. </a>
  1101. |
  1102. <a title="Report issue" rel='noopener nofollow noreferrer' target="_blank"
  1103. href="https://github.com/jMonkeyEngine/jmonkeyengine-website/issues">
  1104. <i class="fas fa-bug"></i> Report an issue
  1105. </a>
  1106. <br />
  1107. <br />
  1108. Website designed and developed by
  1109. <a href="https://github.com/riccardobl">Riccardo Balbo</a>
  1110. for the jMonkeyEngine's Community.
  1111. </footer>
  1112. <div id="poweredBy" >
  1113. <a rel='noopener nofollow noreferrer' target="_blank" href="https://www.macstadium.com/">
  1114. <img src="/images/macstadium-logo.png" />
  1115. </a>
  1116. <a rel='noopener nofollow noreferrer' target="_blank" href="https://www.java.com/">
  1117. <img src="/images/java-logo.png" />
  1118. </a>
  1119. <a rel='noopener nofollow noreferrer' target="_blank" href="https://opengl.org/">
  1120. <img src="/images/opengl-logo.png" />
  1121. </a>
  1122. </div>
  1123. </body>
  1124. </html>