index.html 70 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399
  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/c10/5.webp'); " ></div>
  219. <div class="cover" style ="background-image: url('/images/showcase/c10/5.webp'); " ></div>
  220. </div>
  221. <div class="showcaseElement" style='display: none '>
  222. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/2.webp'); " ></div>
  223. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/2.webp'); " ></div>
  224. </div>
  225. <iframe loading="lazy" class="showcaseElement cover youtubeVid" style='display: none '
  226. lazy="true" lazy-src ="https://www.youtube-nocookie.com/embed/BU9sJGhm9lI" frameborder="0"
  227. allow="accelerometer; autoplay; encrypted-media; gyroscope; fullscreen"></iframe>
  228. <div class="showcaseElement" style='display: none '>
  229. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/6.webp'); " ></div>
  230. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/6.webp'); " ></div>
  231. </div>
  232. <div class="showcaseElement" style='display: none '>
  233. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/1.webp'); " ></div>
  234. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/1.webp'); " ></div>
  235. </div>
  236. <iframe loading="lazy" class="showcaseElement cover youtubeVid" style='display: none '
  237. lazy="true" lazy-src ="https://www.youtube-nocookie.com/embed/H1Qqpr-txtc" frameborder="0"
  238. allow="accelerometer; autoplay; encrypted-media; gyroscope; fullscreen"></iframe>
  239. <iframe loading="lazy" class="showcaseElement cover youtubeVid" style='display: none '
  240. lazy="true" lazy-src ="https://www.youtube-nocookie.com/embed/c7B6r9fTa3M" frameborder="0"
  241. allow="accelerometer; autoplay; encrypted-media; gyroscope; fullscreen"></iframe>
  242. <div class="showcaseElement" style='display: none '>
  243. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/4.webp'); " ></div>
  244. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/4.webp'); " ></div>
  245. </div>
  246. <div class="showcaseElement" style='display: none '>
  247. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/9.webp'); " ></div>
  248. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/9.webp'); " ></div>
  249. </div>
  250. <div class="showcaseElement" style='display: none '>
  251. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/8.webp'); " ></div>
  252. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/8.webp'); " ></div>
  253. </div>
  254. <div class="showcaseElement" style='display: none '>
  255. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/3.webp'); " ></div>
  256. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/3.webp'); " ></div>
  257. </div>
  258. <div class="showcaseElement" style='display: none '>
  259. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/11.webp'); " ></div>
  260. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/11.webp'); " ></div>
  261. </div>
  262. <div class="showcaseElement" style='display: none '>
  263. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/7.webp'); " ></div>
  264. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/7.webp'); " ></div>
  265. </div>
  266. <div class="showcaseElement" style='display: none '>
  267. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/0.webp'); " ></div>
  268. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/0.webp'); " ></div>
  269. </div>
  270. <div class="showcaseElement" style='display: none '>
  271. <div class="cover blur" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/10.webp'); " ></div>
  272. <div class="cover" lazy="true" lazy-style ="background-image: url('/images/showcase/c10/10.webp'); " ></div>
  273. </div>
  274. <div class="responsiveWidth" id="engineDescription">
  275. jMonkeyEngine is a modern developer friendly game engine written primarily in Java.
  276. <br />
  277. Its minimalistic and code first approach makes it perfect for developers who want the support of a game engine
  278. while retaining full control over their code with the ability to extend and adapt the engine to their workflow.
  279. <br />
  280. <br />
  281. <br />
  282. <a href="/start/"><button id="startbtn" class="highlightedCl" ><i class="fas fa-rocket"></i> Get Started </button></a>
  283. <a href="/#features" title="overview"><button id="startbtn" class="highlightedCl"><i class="fas fa-question-circle" style="padding:0"></i></button></a>
  284. <br />
  285. <br />
  286. </div>
  287. <div class="responsiveWidth" >
  288. <div id="gameDescription" >
  289. <h2><i class="far fa-images" ></i> Collect The 10s powered by jMonkeyEngine</h2>
  290. A playing card game (taken from the popular Indian game mendikot / mindi cot / dehla pakad) brought to life in a 3D world! Simply enter the game room, walk around, sit at a table, and start playing …
  291. <br />
  292. <a class="readMore" href="/showcase/collect-the-10s/#showcase">See game page </a>
  293. </div>
  294. </div>
  295. </section>
  296. <br/>
  297. <section class="message list vlist">
  298. <div>
  299. <blockquote class="list vlist responsive">
  300. <span id="backerMessage">-</span>
  301. <i><a rel='noopener nofollow noreferrer' target="_blank" id="backerMessageName">-</a> </i>
  302. </blockquote>
  303. <a href="https://opencollective.com/jmonkeyengine">Become a
  304. backer and leave a message...</a>
  305. </div>
  306. </section>
  307. <br/>
  308. <a id="content"></a>
  309. <section class="full responsiveWidth">
  310. <article>
  311. <h1 >
  312. <i class="fas fa-paragraph useless"></i>
  313. <a href="/blog/interview-danielp/">Sgold interviews Daniel Perano</a></h1>
  314. <div class="content">
  315. <span>
  316. <p><figure class="githubUser inline " github-user="stephengold">
  317. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  318. <figcaption>
  319. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  320. stephengold
  321. </h2>
  322. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  323. <div>
  324. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  325. <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>
  326. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  327. </div>
  328. </figcaption>
  329. </figure> <br>
  330. Thank you for agreeing to be interviewed.</p>
  331. <p>First question: Do you remember when you first encountered JMonkeyEngine?<br>
  332. What was your first impression?</p>
  333. <p><figure class="githubUser inline " github-user="danielperano">
  334. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  335. <figcaption>
  336. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  337. danielperano
  338. </h2>
  339. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  340. <div>
  341. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  342. <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>
  343. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  344. </div>
  345. </figcaption>
  346. </figure> I started learning jME back in the 3.0 days, as I recall,<br>
  347. and I was impressed with the features it offered.<br>
  348. The scene-graph control and appstate design made a lot of sense to me &mdash;<br>
  349. at the time both were novel concepts.</p>
  350. <p>Not long after that, I adopted jME for a project called “OpenWorld.”</p>
  351. <p><figure class="githubUser inline " github-user="stephengold">
  352. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  353. <figcaption>
  354. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  355. stephengold
  356. </h2>
  357. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  358. <div>
  359. <a alt="github link" title="Github" href="https://github.com/stephengold" 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> <br>
  365. What sort of project was it?</p>
  366. <p><figure class="githubUser inline " github-user="danielperano">
  367. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  368. <figcaption>
  369. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  370. danielperano
  371. </h2>
  372. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  373. <div>
  374. <a alt="github link" title="Github" href="https://github.com/danielperano" 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> OpenWorld was the precursor to MyWorld &mdash;<br>
  380. a platform for real-time, 3-D social virtual worlds and MMO games.</p>
  381. <p><figure class="githubUser inline " github-user="stephengold">
  382. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  383. <figcaption>
  384. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  385. stephengold
  386. </h2>
  387. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  388. <div>
  389. <a alt="github link" title="Github" href="https://github.com/stephengold" 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> <br>
  395. What got you interested in social virtual worlds?</p>
  396. <p><figure class="githubUser inline " github-user="danielperano">
  397. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  398. <figcaption>
  399. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  400. danielperano
  401. </h2>
  402. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  403. <div>
  404. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  405. <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>
  406. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  407. </div>
  408. </figcaption>
  409. </figure> I first heard of them from<br>
  410. a magazine article about Second Life, over a decade ago.<br>
  411. I was fascinated, and despite being underage<br>
  412. (accounts were restricted to users 18 and over), I created an account.</p>
  413. <p>Since I was underage my adventures there did not last long, but<br>
  414. I was hooked from the start.<br>
  415. It was like a game, but there were so many things to do and places to explore,<br>
  416. and the built-in creation system blew my mind.</p>
  417. <p>A couple years later, I discovered OpenSimulator,<br>
  418. an open-source server that’s compatible with Second Life clients (viewers).<br>
  419. Since then, I’ve been a member of various OpenSimulator virtual worlds (or grids, as they’re called).</p>
  420. <p>During my second year in OpenSimulator, I began to keenly notice<br>
  421. some limitations that OpenSimulator inherited from Second Life.<br>
  422. Compared to multi-player games, virtual worlds always felt slow and bloated,<br>
  423. and the architecture was fundamentally limiting.</p>
  424. <p>At that point I had the idea that grew into MyWorld:<br>
  425. apply multiplayer game technology to social virtual worlds.<br>
  426. Later on, I realized that a social virtual-world platform<br>
  427. could also be a powerful MMO gaming platform, and<br>
  428. since then I’ve worked towards the dual goal of supporting<br>
  429. social virtual worlds and MMO games as first-class citizens on MyWorld.</p>
  430. <p><figure class="githubUser inline " github-user="stephengold">
  431. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  432. <figcaption>
  433. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  434. stephengold
  435. </h2>
  436. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  437. <div>
  438. <a alt="github link" title="Github" href="https://github.com/stephengold" 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> <br>
  444. How many people are working on MyWorld?</p>
  445. <p><figure class="githubUser inline " github-user="danielperano">
  446. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  447. <figcaption>
  448. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  449. danielperano
  450. </h2>
  451. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  452. <div>
  453. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  454. <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>
  455. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  456. </div>
  457. </figcaption>
  458. </figure> We have three people on the project.<br>
  459. Right now I’m the sole developer &mdash;<br>
  460. the other two handle business management,<br>
  461. social media, and aesthetics (art and design).</p>
  462. <p><figure class="githubUser inline " github-user="stephengold">
  463. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  464. <figcaption>
  465. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  466. stephengold
  467. </h2>
  468. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  469. <div>
  470. <a alt="github link" title="Github" href="https://github.com/stephengold" 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> <br>
  476. How is the project funded?</p>
  477. <p><figure class="githubUser inline " github-user="danielperano">
  478. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  479. <figcaption>
  480. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  481. danielperano
  482. </h2>
  483. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  484. <div>
  485. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  486. <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>
  487. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  488. </div>
  489. </figcaption>
  490. </figure> We’re fully self-funded: no investor or venture-capital backing.<br>
  491. We see this as an advantage, for two reasons:</p>
  492. <ol>
  493. <li>We’re not beholden to shareholders,<br>
  494. so we’re free to make decisions that bring the best experience to our users.</li>
  495. <li>Our runway is infinitely long &mdash; we have no pressure to grow rapidly to avoid bankruptcy.<br>
  496. We can grow organically and sustainably.</li>
  497. </ol>
  498. <p><figure class="githubUser inline " github-user="stephengold">
  499. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  500. <figcaption>
  501. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  502. stephengold
  503. </h2>
  504. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  505. <div>
  506. <a alt="github link" title="Github" href="https://github.com/stephengold" 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> <br>
  512. When’s the next release of MyWorld due out?</p>
  513. <p><figure class="githubUser inline " github-user="danielperano">
  514. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  515. <figcaption>
  516. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  517. danielperano
  518. </h2>
  519. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  520. <div>
  521. <a alt="github link" title="Github" href="https://github.com/danielperano" 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> Our first alpha/preview release<br>
  527. will come out around the end of March of this year (2020).</p>
  528. <p><figure class="githubUser inline " github-user="stephengold">
  529. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  530. <figcaption>
  531. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  532. stephengold
  533. </h2>
  534. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  535. <div>
  536. <a alt="github link" title="Github" href="https://github.com/stephengold" 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> <br>
  542. What features will it provide?</p>
  543. <p><figure class="githubUser inline " github-user="danielperano">
  544. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  545. <figcaption>
  546. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  547. danielperano
  548. </h2>
  549. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  550. <div>
  551. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  552. <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>
  553. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  554. </div>
  555. </figcaption>
  556. </figure> The feature set will depend on what we have time to finish.<br>
  557. Dynamic asset delivery/loading, the entity system, and scripting<br>
  558. are in pretty good shape,<br>
  559. but the user interface still needs work<br>
  560. and there are many small “detail features” that need attention.</p>
  561. <p><figure class="githubUser inline " github-user="stephengold">
  562. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  563. <figcaption>
  564. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  565. stephengold
  566. </h2>
  567. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  568. <div>
  569. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  570. <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>
  571. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  572. </div>
  573. </figcaption>
  574. </figure> <br>
  575. In the long run, what will differentiate MyWorld from other virtual worlds?<br>
  576. Specifically, how would you compare it to Minecraft and Second Life?</p>
  577. <p><figure class="githubUser inline " github-user="danielperano">
  578. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  579. <figcaption>
  580. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  581. danielperano
  582. </h2>
  583. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  584. <div>
  585. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  586. <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>
  587. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  588. </div>
  589. </figcaption>
  590. </figure> Unlike Minecraft, MyWorld is not a game itself &mdash;<br>
  591. it’s a platform that supports dynamic content creation and scripting,<br>
  592. and unlike games more generally, MyWorld provides first-class support<br>
  593. for uploading 3D models, textures, audio, etcetera<br>
  594. and distributing them to clients on an as-needed basis.<br>
  595. It also has a professional-grade scripting language you can use<br>
  596. to add custom behavior to your creations.</p>
  597. <p>Unlike current-generation virtual worlds,<br>
  598. MyWorld was designed from Day One to satisfy<br>
  599. the performance requirements of multiplayer action games.<br>
  600. This means that exploring a virtual world can have the same fast,<br>
  601. fluid feel as playing a well-designed multiplayer game.</p>
  602. <p>Another difference is that we support scripting on both client and server,<br>
  603. allowing scripted effects and latency-elimination techniques<br>
  604. that are impossible in current virtual worlds.</p>
  605. <p>In addition, our internal systems can be extended via plugins<br>
  606. that can integrate into the entity system and<br>
  607. host or call HTTP endpoints (for custom REST APIs, for example).<br>
  608. Plugins can even extend the core network protocol<br>
  609. with jME’s fast, intuitive, and efficient RMI implementation.</p>
  610. <p><figure class="githubUser inline " github-user="stephengold">
  611. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  612. <figcaption>
  613. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  614. stephengold
  615. </h2>
  616. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  617. <div>
  618. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  619. <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>
  620. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  621. </div>
  622. </figcaption>
  623. </figure> <br>
  624. What’s the financial model? Will the client be freely downloadable?<br>
  625. Will there be paid subscriptions? Free-to-play accounts?</p>
  626. <p><figure class="githubUser inline " github-user="danielperano">
  627. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  628. <figcaption>
  629. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  630. danielperano
  631. </h2>
  632. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  633. <div>
  634. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  635. <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>
  636. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  637. </div>
  638. </figcaption>
  639. </figure> Our vision for MyWorld has always been to release it open-source,<br>
  640. so the client will always be free to download and use, as will the core server.<br>
  641. We may eventually release some commercial plugins for professional use,<br>
  642. but these would be extensions to the core server,<br>
  643. not permanently built-in proprietary code.</p>
  644. <p>In a project like MyWorld,<br>
  645. there are many opportunities to provide value to users,<br>
  646. so there are many potential revenue streams.<br>
  647. Initially we’re looking at a revenue model similar to Second Life:<br>
  648. users can rent space in the virtual world to build homes,<br>
  649. businesses, workshops, etcetera.<br>
  650. We may also introduce a subscription model that offers<br>
  651. extra benefits to heavy users.</p>
  652. <p>We’re also investigating how we can monetize<br>
  653. by offering professional hosting and support services to game developers<br>
  654. and those interested in running MyWorld servers.</p>
  655. <p><figure class="githubUser inline " github-user="stephengold">
  656. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  657. <figcaption>
  658. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  659. stephengold
  660. </h2>
  661. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  662. <div>
  663. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  664. <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>
  665. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  666. </div>
  667. </figcaption>
  668. </figure> <br>
  669. I’ve heard that Second Life has its own currency.<br>
  670. Do you have plans in that area?</p>
  671. <p><figure class="githubUser inline " github-user="danielperano">
  672. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  673. <figcaption>
  674. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  675. danielperano
  676. </h2>
  677. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  678. <div>
  679. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  680. <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>
  681. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  682. </div>
  683. </figcaption>
  684. </figure> While MyWorld needs a virtual currency to effectively operate,<br>
  685. issuing one ourselves is not currently a viable choice for a couple of reasons:</p>
  686. <ol>
  687. <li>
  688. <p>Issuing in-house currency is a large financial liability &mdash;<br>
  689. there are many ways to destabilize an economy, virtual or otherwise,<br>
  690. that are largely or completely outside the control of the currency issuer,<br>
  691. which would present a risk both to us and our users.</p>
  692. </li>
  693. <li>
  694. <p>Governments have begun regulating virtual currencies,<br>
  695. making it expensive and difficult to issue them.</p>
  696. </li>
  697. </ol>
  698. <p>Fortunately, we’re not the only ones with this need<br>
  699. and there are several good virtual currency services,<br>
  700. some of which allow the same currency to be used across many games or virtual worlds.</p>
  701. <p>So yes, we will have a virtual currency,<br>
  702. but we’re not planning on issuing it ourselves.</p>
  703. <p><figure class="githubUser inline " github-user="stephengold">
  704. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  705. <figcaption>
  706. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  707. stephengold
  708. </h2>
  709. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  710. <div>
  711. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  712. <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>
  713. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  714. </div>
  715. </figcaption>
  716. </figure> <br>
  717. You mentioned earlier that Second Life was age-restricted.<br>
  718. Will MyWorld have similar restrictions?</p>
  719. <p><figure class="githubUser inline " github-user="danielperano">
  720. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  721. <figcaption>
  722. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  723. danielperano
  724. </h2>
  725. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  726. <div>
  727. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  728. <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>
  729. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  730. </div>
  731. </figcaption>
  732. </figure> Initially yes, unfortunately.<br>
  733. Allowing minors requires extra legal compliance<br>
  734. and stringent moderation of content and user interactions.</p>
  735. <p>I don’t see this as a notable limitation, especially early on.<br>
  736. Most of our initial user base will be developers and creators,<br>
  737. not general users,<br>
  738. so I expect the overwhelming majority of interest to be coming from adults.</p>
  739. <p>I want to allow minors to access at least some areas within MyWorld<br>
  740. as soon as it makes sense for us as an organization and community,<br>
  741. but for now we need to focus on the technical aspects.</p>
  742. <p><figure class="githubUser inline " github-user="stephengold">
  743. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  744. <figcaption>
  745. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  746. stephengold
  747. </h2>
  748. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  749. <div>
  750. <a alt="github link" title="Github" href="https://github.com/stephengold" 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> <br>
  756. Does MyWorld use JMonkeyEngine for the client, the server, or both?</p>
  757. <p><figure class="githubUser inline " github-user="danielperano">
  758. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  759. <figcaption>
  760. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  761. danielperano
  762. </h2>
  763. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  764. <div>
  765. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  766. <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>
  767. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  768. </div>
  769. </figcaption>
  770. </figure> The client is a typical jME application &mdash;<br>
  771. AppStates tie MyWorld-specific libraries (such as our in-house entity system)<br>
  772. to other systems and the scene graph.</p>
  773. <p>The server uses jME’s network stack,<br>
  774. and we’re transitioning from jME’s physics to Minie, but that’s about all.<br>
  775. The server’s systems and heartbeat/event dispatch loop are all custom &mdash;<br>
  776. we don’t use jME’s application structure serverside.</p>
  777. <p><figure class="githubUser inline " github-user="stephengold">
  778. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  779. <figcaption>
  780. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  781. stephengold
  782. </h2>
  783. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  784. <div>
  785. <a alt="github link" title="Github" href="https://github.com/stephengold" 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> <br>
  791. What technologies does MyWorld use besides JMonkeyEngine?</p>
  792. <p><figure class="githubUser inline " github-user="danielperano">
  793. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  794. <figcaption>
  795. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  796. danielperano
  797. </h2>
  798. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  799. <div>
  800. <a alt="github link" title="Github" href="https://github.com/danielperano" 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> It uses JavaFX, Lemur, Chipmunk (our in-house scripting language),<br>
  806. Jetty (an embedded HTTP server), and CockroachDB (a distributed SQL database).</p>
  807. <p><figure class="githubUser inline " github-user="stephengold">
  808. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  809. <figcaption>
  810. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  811. stephengold
  812. </h2>
  813. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  814. <div>
  815. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  816. <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>
  817. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  818. </div>
  819. </figcaption>
  820. </figure> <br>
  821. What prompted you to create Chipmunk?<br>
  822. What other scripting languages did you consider?</p>
  823. <p><figure class="githubUser inline " github-user="danielperano">
  824. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  825. <figcaption>
  826. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  827. danielperano
  828. </h2>
  829. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  830. <div>
  831. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  832. <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>
  833. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  834. </div>
  835. </figcaption>
  836. </figure> Chipmunk was born out of necessity.</p>
  837. <p>Like Second Life,<br>
  838. MyWorld allows content creators to script anything they create.<br>
  839. Scripting can include physics, movement, particle/sound/animation effects,<br>
  840. HTTP calls, etcetera.</p>
  841. <p>The problems here are security and resource use.<br>
  842. Since anyone with creation privileges can upload scripts to a server<br>
  843. (and scripts can also run client side), sandboxing is a must.</p>
  844. <p>My first choice for scripting was Groovy.<br>
  845. It’s a powerful, well-known language with many features,<br>
  846. and the compiler supports AST transformations for customizing compiled code.<br>
  847. I spent a great deal of time pursuing this route,<br>
  848. but the shoe always pinched in the same spots: preemption and checkpointing.</p>
  849. <p>Preemption means that the script engine can stop a running script at any time.<br>
  850. This is necessary to ensure that misbehaving (or resource-intensive) scripts<br>
  851. don’t overuse CPU resources.<br>
  852. Preemption is also necessary for checkpointing:<br>
  853. freezing a script so it can be persisted to disk or sent to another server.</p>
  854. <p>Java was not designed for preemption.<br>
  855. Every mechanism I could think of to fit preemption support<br>
  856. into Java’s compiled bytecode came with substantial overhead and other nasty limitations.</p>
  857. <p>I also experimented with an assembly-like language for scripting,<br>
  858. but it was too difficult to read to be suitable for anything more than trivial scripts.</p>
  859. <p>I designed Chipmunk to fit a unique place in the language spectrum &mdash;<br>
  860. easy for a first-time programmer to pick up,<br>
  861. but powerful enough for an experienced developer to hit the ground running.<br>
  862. For example, classes declare state that’s shared between all instances<br>
  863. via the “shared” keyword,<br>
  864. which is semantically identical to Java’s “static” keyword,<br>
  865. but expresses the concept in terms that make intuitive sense<br>
  866. to inexperienced programmers.</p>
  867. <p>In terms of features, Chipmunk supports modules, classes, polymorphism,<br>
  868. first-class functions, anonymous (lambda) functions, exceptions,<br>
  869. and dynamic typing.</p>
  870. <p><figure class="githubUser inline " github-user="stephengold">
  871. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  872. <figcaption>
  873. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  874. stephengold
  875. </h2>
  876. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  877. <div>
  878. <a alt="github link" title="Github" href="https://github.com/stephengold" 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> <br>
  884. Chipmunk sounds like it might have many uses.</p>
  885. <p><figure class="githubUser inline " github-user="danielperano">
  886. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  887. <figcaption>
  888. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  889. danielperano
  890. </h2>
  891. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  892. <div>
  893. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  894. <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>
  895. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  896. </div>
  897. </figcaption>
  898. </figure> I hope so! I’m looking forward to seeing what else it’s used for.</p>
  899. <p><figure class="githubUser inline " github-user="stephengold">
  900. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  901. <figcaption>
  902. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  903. stephengold
  904. </h2>
  905. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  906. <div>
  907. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  908. <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>
  909. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  910. </div>
  911. </figcaption>
  912. </figure> <br>
  913. Is there any published documentation for it?<br>
  914. Is it open-source?</p>
  915. <p><figure class="githubUser inline " github-user="danielperano">
  916. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  917. <figcaption>
  918. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  919. danielperano
  920. </h2>
  921. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  922. <div>
  923. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  924. <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>
  925. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  926. </div>
  927. </figcaption>
  928. </figure> Chipmunk is developed separately from MyWorld and will be released<br>
  929. open-source as soon as we’ve finalized the v1.0 language spec<br>
  930. and finished implementing the standard library.</p>
  931. <p>The main language features are functional, but it needs more attention<br>
  932. on things like string manipulation, collection operations, and libraries.</p>
  933. <p><figure class="githubUser inline " github-user="stephengold">
  934. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  935. <figcaption>
  936. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  937. stephengold
  938. </h2>
  939. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  940. <div>
  941. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  942. <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>
  943. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  944. </div>
  945. </figcaption>
  946. </figure> <br>
  947. Part of the appeal of an open world, I think,<br>
  948. is having a place to exhibit digital creations.</p>
  949. <p>What skills/tools would someone need to create and upload a 3-D model?<br>
  950. Do you envision people using Blender 3D?</p>
  951. <p>What audio formats will MyWorld support?</p>
  952. <p><figure class="githubUser inline " github-user="danielperano">
  953. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  954. <figcaption>
  955. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  956. danielperano
  957. </h2>
  958. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  959. <div>
  960. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  961. <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>
  962. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  963. </div>
  964. </figcaption>
  965. </figure> MyWorld is built around the assumption that users will create digital content.<br>
  966. One of the first things I wrote was the dynamic asset upload/download mechanism.</p>
  967. <p>Our initial creation pipeline is based around the GLTF format.<br>
  968. Thanks to jME’s GLTF importer, most modern GLTF files should import seamlessly.<br>
  969. Our primary interest in external tools is Blender 3D,<br>
  970. but anything that exports to GLTF should do fine.</p>
  971. <p>Later on, we plan to support in-world creation via constructive solid geometry<br>
  972. with procedural extensions, as a supplement to the GLTF pipeline.</p>
  973. <p>Any audio format supported by jME (OGG &amp; WAV in particular)<br>
  974. can be opened by the client for upload.<br>
  975. Streaming media can be in any format supported by JavaFX’s media framework.</p>
  976. <p><figure class="githubUser inline " github-user="stephengold">
  977. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  978. <figcaption>
  979. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  980. stephengold
  981. </h2>
  982. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  983. <div>
  984. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  985. <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>
  986. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  987. </div>
  988. </figcaption>
  989. </figure> <br>
  990. If someone wants to develop games for MyWorld, where should they begin?<br>
  991. Is there an e-mail list for announcements?<br>
  992. A website they should monitor?<br>
  993. A chatroom they should join?</p>
  994. <p><figure class="githubUser inline " github-user="danielperano">
  995. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  996. <figcaption>
  997. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  998. danielperano
  999. </h2>
  1000. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  1001. <div>
  1002. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  1003. <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>
  1004. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  1005. </div>
  1006. </figcaption>
  1007. </figure> The best place to go is our <a href="https://discordapp.com/invite/WccnrWg">Discord server</a>.<br>
  1008. We have an active community there,<br>
  1009. and we often discuss planned or requested features.<br>
  1010. It’s also the first place we share development updates<br>
  1011. and news about the project.<br>
  1012. For anyone wishing to participate in the alpha-test release,<br>
  1013. this is the place to be.</p>
  1014. <p>Our <a href="https://www.facebook.com/MyWorld-LLC-228751528045088">Facebook</a><br>
  1015. and <a href="https://twitter.com/MyWorldLLC">Twitter</a> pages<br>
  1016. cover major news items and announcements,<br>
  1017. and liking/following us there helps us get the word out to more people!</p>
  1018. <p>For general project information, blog posts, and press releases,<br>
  1019. the <a href="https://myworldvw.com/">MyWorld website</a> is the place to go.<br>
  1020. We archive the notes from our monthly “MyWorld Meetup” sessions on the blog &mdash;<br>
  1021. these are a great resource for finding out details about the project.</p>
  1022. <p><figure class="githubUser inline " github-user="stephengold">
  1023. <img class="excludeSummary" src="https://avatars.githubusercontent.com/stephengold">
  1024. <figcaption>
  1025. <h2 ghresolve-bio="title" alt="stephengold" class="ghname" ghresolve-name="innerText">
  1026. stephengold
  1027. </h2>
  1028. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  1029. <div>
  1030. <a alt="github link" title="Github" href="https://github.com/stephengold" class="excludeSummary"><i class="fab fa-github"></i></a>
  1031. <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>
  1032. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  1033. </div>
  1034. </figcaption>
  1035. </figure> <br>
  1036. I’ve run out of questions.<br>
  1037. Unless there’s something more you’d like to discuss, let’s wrap this up.</p>
  1038. <p>Thank you very much for your detailed answers<br>
  1039. and all the time and care you put into them.</p>
  1040. <p><figure class="githubUser inline " github-user="danielperano">
  1041. <img class="excludeSummary" src="https://avatars.githubusercontent.com/danielperano">
  1042. <figcaption>
  1043. <h2 ghresolve-bio="title" alt="danielperano" class="ghname" ghresolve-name="innerText">
  1044. danielperano
  1045. </h2>
  1046. <span ghresolve-bio="innerText" class="ghbio excludeSummary"></span>
  1047. <div>
  1048. <a alt="github link" title="Github" href="https://github.com/danielperano" class="excludeSummary"><i class="fab fa-github"></i></a>
  1049. <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>
  1050. <a alt="website link" title="Website" ghresolve-blog="href" class="ghblog excludeSummary" href="" style="display:none"><i class="fas fa-globe"></i></a>
  1051. </div>
  1052. </figcaption>
  1053. </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>
  1054. </span>
  1055. <nav>
  1056. <ul class="tags smaller">
  1057. <h3 class="tags">Tags</h3>
  1058. <li><a class="interview" href="/tags/interview"><i class="fas fa-hashtag"></i>interview</a></li>
  1059. <li><a class="blog" href="/tags/blog"><i class="fas fa-hashtag"></i>blog</a></li>
  1060. <li><a class="misc" href="/tags/misc"><i class="fas fa-hashtag"></i>misc</a></li>
  1061. </ul>
  1062. <ul class="authors smaller">
  1063. <h3 class="authors">Authors</h3>
  1064. <li><a class="stephengold" href="/authors/stephengold"><i class="fas fa-at"></i>stephengold</a></li>
  1065. </ul>
  1066. <ul class="postedDate smaller">
  1067. <h3 class="postedDate">Date</h3>
  1068. <li><time datetime="2020-02-25 18:00:00 &#43;0000 UTC"><i class="fas fa-calendar"></i>25 February 2020</time> </li>
  1069. </ul>
  1070. <ul class="share">
  1071. <h3 class="share">Share</h3>
  1072. <li>
  1073. <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 " >
  1074. <i class="fab fa-twitter-square"></i> Share on Twitter</a></button></li>
  1075. </ul>
  1076. </nav>
  1077. </div>
  1078. </article>
  1079. </section>
  1080. <section class="full responsiveWidth">
  1081. <article>
  1082. <h1 id="comments"><i class="useless fas fa-comments"></i> Comments</h1>
  1083. <div class="content" id='discourse-comments'></div>
  1084. <script type="text/javascript">
  1085. var eurl=window.location.href ;
  1086. eurl=eurl.split("#")[0];
  1087. eurl=eurl.split("?")[0];
  1088. eurl=eurl.trim();
  1089. if(eurl.endsWith("/index.html"))eurl=eurl.substring(0,eurl.length-"/index.html".length).trim();
  1090. if(eurl.charAt(eurl.length-1)=="/") eurl=eurl.substring(0,eurl.length-1);
  1091. if(eurl.startsWith("http://")) eurl="https://"+eurl.substring("http://".length);
  1092. if(eurl.endsWith("/communitylog/new-website")){
  1093. eurl+="/#content";
  1094. }
  1095. DiscourseEmbed = {
  1096. discourseUrl: 'https://hub.jmonkeyengine.org/',
  1097. discourseEmbedUrl: eurl
  1098. };
  1099. (function() {
  1100. var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
  1101. d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
  1102. (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  1103. })();
  1104. </script>
  1105. </article>
  1106. </section>
  1107. </main>
  1108. <footer>
  1109. © 2020 jMonkeyEngine.
  1110. All other trademarks, logos and featured content are property of their respective owners.
  1111. <br />
  1112. <a title="Github repo" rel='noopener nofollow noreferrer' target="_blank"
  1113. href="https://github.com/jMonkeyEngine/jmonkeyengine-website">
  1114. <i class="fab fa-github"></i> Source on Github
  1115. </a>
  1116. |
  1117. <a title="Report issue" rel='noopener nofollow noreferrer' target="_blank"
  1118. href="https://github.com/jMonkeyEngine/jmonkeyengine-website/issues">
  1119. <i class="fas fa-bug"></i> Report an issue
  1120. </a>
  1121. <br />
  1122. <br />
  1123. Website designed and developed by
  1124. <a href="https://github.com/riccardobl">Riccardo Balbo</a>
  1125. for the jMonkeyEngine's Community.
  1126. </footer>
  1127. <div id="poweredBy" >
  1128. <a rel='noopener nofollow noreferrer' target="_blank" href="https://www.macstadium.com/">
  1129. <img src="/images/macstadium-logo.png" />
  1130. </a>
  1131. <a rel='noopener nofollow noreferrer' target="_blank" href="https://www.java.com/">
  1132. <img src="/images/java-logo.png" />
  1133. </a>
  1134. <a rel='noopener nofollow noreferrer' target="_blank" href="https://opengl.org/">
  1135. <img src="/images/opengl-logo.png" />
  1136. </a>
  1137. </div>
  1138. </body>
  1139. </html>