<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Bo Hanssen]]></title><description><![CDATA[Persoonlijke Blog]]></description><link>https://bohanssen.com/</link><image><url>https://bohanssen.com/favicon.png</url><title>Bo Hanssen</title><link>https://bohanssen.com/</link></image><generator>Ghost 3.42</generator><lastBuildDate>Sat, 04 Apr 2026 13:58:37 GMT</lastBuildDate><atom:link href="https://bohanssen.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[AppEngine discontinued]]></title><description><![CDATA[<p>The AppEngine is offline because frankly, I need the resources (CPU and Memory) to run other projects. And to be honest, this project has been dead for more than a year. It has been fun fiddling with these concepts and creating a serverless platform.</p><p>The AppEngine has a successor <em>Tracepaper</em></p>]]></description><link>https://bohanssen.com/appengine-discontinued/</link><guid isPermaLink="false">6339754d4b6937006b8d14f8</guid><category><![CDATA[The Appengine Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 02 Oct 2022 14:36:29 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1593510987046-1f8fcfc512a0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGNhbmNlbHxlbnwwfHx8fDE2NjQ3MjEwMjI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1593510987046-1f8fcfc512a0?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGNhbmNlbHxlbnwwfHx8fDE2NjQ3MjEwMjI&ixlib=rb-1.2.1&q=80&w=2000" alt="AppEngine discontinued"><p>The AppEngine is offline because frankly, I need the resources (CPU and Memory) to run other projects. And to be honest, this project has been dead for more than a year. It has been fun fiddling with these concepts and creating a serverless platform.</p><p>The AppEngine has a successor <em>Tracepaper by Draftsman</em>, it has another design philosophy you can read all about it <a href="https://papers.draftsman.io/">here.</a></p>]]></content:encoded></item><item><title><![CDATA[Zoekmachine]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/xdAR02GToiY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></description><link>https://bohanssen.com/zoekmachine/</link><guid isPermaLink="false">5e8a62b295e7c2008259d083</guid><category><![CDATA[Aelser Revue Archief Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 22:59:53 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1502240868472-18259bc0f863?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/xdAR02GToiY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></content:encoded></item><item><title><![CDATA[On Deck]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/fB4SnDZPZis?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></description><link>https://bohanssen.com/on-deck/</link><guid isPermaLink="false">5e8a60c395e7c2008259d07a</guid><category><![CDATA[Aelser Revue Archief Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 22:58:27 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1560169897-fc0cdbdfa4d5?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/fB4SnDZPZis?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Video Registratie]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/yb9VCR1H5cU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></description><link>https://bohanssen.com/video/</link><guid isPermaLink="false">5e8a605495e7c2008259d070</guid><category><![CDATA[Aelser Revue Archief Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 22:50:22 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1497015289639-54688650d173?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/yb9VCR1H5cU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Reacties en Historie]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/c0gscKjVGPY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></description><link>https://bohanssen.com/reacties-en-historie/</link><guid isPermaLink="false">5e8a5fa995e7c2008259d065</guid><category><![CDATA[Aelser Revue Archief Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 22:47:59 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1515325595179-59cd5262ca53?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/c0gscKjVGPY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Uploads]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/I0-fCl7KcSY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></description><link>https://bohanssen.com/uploads/</link><guid isPermaLink="false">5e8a5df995e7c2008259d05b</guid><category><![CDATA[Aelser Revue Archief Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 22:45:04 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1512790182412-b19e6d62bc39?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/I0-fCl7KcSY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Community Driven & Overzicht]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/XdodWOJlA7I?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><h2 id="community-driven">Community-driven</h2><p>Om de informatie zo compleet mogelijk te krijgen is de meeste tekst op deze site bewerkbaar</p><p>Een changelog wordt bijgehouden op <a href="https://github.com/bohanssen/revue_data">Github</a></p><h5 id="mark-down">Mark Down</h5><p>Voor de tekstopmaak wordt er gebruik gemaakt van <a href="https://nl.wikipedia.org/wiki/Markdown">Markdown</a> om het bijdragen aan de informatie verzameling zo laag drempelig mogelijk te houden.</p><h2 id="overzicht">Overzicht</h2><p>Dit is</p>]]></description><link>https://bohanssen.com/community-driven/</link><guid isPermaLink="false">5e8a404395e7c2008259d048</guid><category><![CDATA[Aelser Revue Archief Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 22:38:12 GMT</pubDate><media:content url="https://bohanssen.com/content/images/2020/04/overzicht.PNG" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/XdodWOJlA7I?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><h2 id="community-driven">Community-driven</h2><img src="https://bohanssen.com/content/images/2020/04/overzicht.PNG" alt="Community Driven & Overzicht"><p>Om de informatie zo compleet mogelijk te krijgen is de meeste tekst op deze site bewerkbaar</p><p>Een changelog wordt bijgehouden op <a href="https://github.com/bohanssen/revue_data">Github</a></p><h5 id="mark-down">Mark Down</h5><p>Voor de tekstopmaak wordt er gebruik gemaakt van <a href="https://nl.wikipedia.org/wiki/Markdown">Markdown</a> om het bijdragen aan de informatie verzameling zo laag drempelig mogelijk te houden.</p><h2 id="overzicht">Overzicht</h2><p>Dit is de hoofdpagina van deze website, hier vind je een overzicht van alle revue's welke je toegang geeft tot de informatie wat hier boven beschreven is.</p>]]></content:encoded></item><item><title><![CDATA[Het Aelser Revue Archief]]></title><description><![CDATA[<p>De Aelser Revue viert volgend jaar zijn 44 jarige jubileum, zelf speel ik ook al een aantal jaren met veel plezier mee. De eerste keer is zelfs bijna 20 jaar geleden... Terwijl ik dit schrijf voel ik me toch een tikkeltje oud.<br>Maar daar gaat het niet om, in al</p>]]></description><link>https://bohanssen.com/het-aelser-revue-archief/</link><guid isPermaLink="false">5e8a376295e7c2008259cfda</guid><category><![CDATA[Aelser Revue Archief Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 20:26:16 GMT</pubDate><media:content url="https://bohanssen.com/content/images/2020/04/DDL-20180120-AelserRevue2018--2-.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://bohanssen.com/content/images/2020/04/DDL-20180120-AelserRevue2018--2-.jpg" alt="Het Aelser Revue Archief"><p>De Aelser Revue viert volgend jaar zijn 44 jarige jubileum, zelf speel ik ook al een aantal jaren met veel plezier mee. De eerste keer is zelfs bijna 20 jaar geleden... Terwijl ik dit schrijf voel ik me toch een tikkeltje oud.<br>Maar daar gaat het niet om, in al die jaren zijn uiteraard ook een hoop foto's, video's en programma boekjes gemaakt. <br>Zelf kreeg ik een tijd geleden een harde schijf in handen waar bijna 300 gigabyte aan beeld materiaal op stond, met de vraag of ik een backup kon maken aangezien het digitaliseren erg veel werk was (en de schijf was al eens kapot gegaan en de persoon in kwestie had echt geen zin om het een derde keer te doen).</p><p>Gelukkig heb je anno 2020 niet perse een fysieke harde schijf nodig, en al snel stonden de bestanden veilig in de "cloud". Maar in principe is dat het zelfde als een harde schijf en net zo nutteloos. Wat heeft het voor zin als de bestanden ergens op een server staan weg te stoffen, en als iemand iets terug wil zoeken?<br>Moet hij dan 300gb gaan downloaden en erdoorheen gaan spitten? Nee, in 2020 bouwen we dan een website:</p><blockquote><a href="https://archief.bohanssen.com">Het Aelser Revue Archief</a></blockquote><p>Na vele avondjes knutselen is het dan ook een heuse webapplicatie geworden met het doel alle informatie gestructureerd en zoek-baar aan te bieden. En belangrijker nog, om een <em>community-driven</em> element erin te brengen</p>]]></content:encoded></item><item><title><![CDATA[About Me]]></title><description><![CDATA[<p>Mijn naam is Bo Hanssen, ik ben drieëndertig jaar  oud op moment van schrijven, gelukkig getrouwd en trotse vader van een vierjarige dochter. Het is bijna tien jaar geleden dat ik hobby matig ben gaan programmeren (toentertijd nog in Python) en na m'n studie heb ik dan ook de stoute</p>]]></description><link>https://bohanssen.com/about-me/</link><guid isPermaLink="false">5e8a322e95e7c2008259cfa0</guid><category><![CDATA[persoonlijk]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 19:37:35 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1488866022504-f2584929ca5f?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1488866022504-f2584929ca5f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="About Me"><p>Mijn naam is Bo Hanssen, ik ben drieëndertig jaar  oud op moment van schrijven, gelukkig getrouwd en trotse vader van een vierjarige dochter. Het is bijna tien jaar geleden dat ik hobby matig ben gaan programmeren (toentertijd nog in Python) en na m'n studie heb ik dan ook de stoute schoenen aangetrokken en heb er mijn beroep van gemaakt.<br>In vijf jaar tijd heb ik mij ontwikkeld van louter python developer naar zoals ik het zelf graag noem "techniek agnostische engineer" python, java, docker, integrations noem het maar op, als ik het niet ken dan leer ik het wel (mits het een doel dient.)<br>Overdag ben ik Solution Architect / DevOps engineer voor het Generieke Pensioen Systeem van APG, en hoewel dit een hele interessante omgeving is waar ik iedere dag nieuwe dingen leer, is dit systeem niet als greenfield te bestempelen. Om m'n technische nieuwsgierigheid te voeden wil je ook wel eens buiten de lijntjes kleuren, <em>move fast and break stuff</em>. In een hobby project kun je dingen proberen die niet zo goed samen gaan met <em>company policy</em> of waarvan je op het werk zegt ik ken iemand die dat sneller en beter kan dan ik. <br>Uiteindelijk krijg ik alles "aan de gang"  maar als het bedrijfskritisch is moet je dat niet altijd willen.</p><p>Mijn blog is een verzameling hobby projecten (als ze het delen waard zijn) en aanverwante of minder aanverwante zaken. </p><h3 id="links">Links</h3><p><br>Met betrekking tot mijn werk heb ik een andere site <a href="https://distributedarchitect.com">The Distributed Architect</a> waar ik mijn ideeën deel met betrekking tot IT Architectuur en Agility.</p><p>En <a href="https://about.bohanssen.com">hier</a> vind je mijn web cv, want een nerd heeft uiteraard een HTML pagina als cv ;) als je standaard formaat prefereert heb ik ook een <a href="https://www.linkedin.com/in/bo-hanssen-79a99919">LinkedIn profiel</a>.</p>]]></content:encoded></item><item><title><![CDATA[Resume]]></title><description><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><p>The D2O app engine is kinda like an ultra-light Framework as a Service (FAAS) it helps develop small web applications.</p><h3 id="why">Why</h3><p><a href="https://bohanssen.com/appengine-project">Read about the why.</a></p><h3 id="architecture-and-design">Architecture and Design</h3><p>If you want to know more about the design check the <a href="https://bohanssen.com/architecture-and-design">architecture </a>post.</p><h3 id="app-gallery">App Gallery</h3><p>The App Gallery is</p>]]></description><link>https://bohanssen.com/resume/</link><guid isPermaLink="false">5e89a8dedc5ce100f37c8e9f</guid><category><![CDATA[The Appengine Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 09:55:33 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1541695226403-a09aa08e5135?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><img src="https://images.unsplash.com/photo-1541695226403-a09aa08e5135?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Resume"><p>The D2O app engine is kinda like an ultra-light Framework as a Service (FAAS) it helps develop small web applications.</p><h3 id="why">Why</h3><p><a href="https://bohanssen.com/appengine-project">Read about the why.</a></p><h3 id="architecture-and-design">Architecture and Design</h3><p>If you want to know more about the design check the <a href="https://bohanssen.com/architecture-and-design">architecture </a>post.</p><h3 id="app-gallery">App Gallery</h3><p>The App Gallery is a showcase off all released projects, it displays a short summary of each project and has links to the application and documentation. Take a look at the feature demos in the app gallery. <a href="https://app.bohanssen.com/appGallery">Open the App Gallery</a></p><h3 id="ide">IDE</h3><p>The IDE stands for "Integrated Development Environment" at the moment it only contains the bare essentials to create, edit and manage your projects. <a href="https://bohanssen.com/the-online-ide">Read more about the IDE</a></p><h3 id="dashboard">Dashboard</h3><p>The Dashboard gives you insight in application metrics / logging / authorizations and db documents. <a href="https://app.bohanssen.com/dashboard">Open dashboard</a></p><h3 id="framework">Framework</h3><p>The framework is a series of javascript and python modules helping you with the client-server communiction and enabeling you to focus on the application logic. <a href="https://bohanssen.com/framework">Read more about the Framework</a></p><h3 id="getting-started">Getting started</h3><p>Build a simple To-Do application to familiarize yourself with the platform &amp; framework: <a href="https://bohanssen.com/getting-started">Getting Started</a></p><h3 id="test-user">Test user</h3><p>There is a test user available in case you need a second account during testing. This user has no developer priveliges on the platform.</p><p>User name: testuser<br>Super secret password: testuser</p>]]></content:encoded></item><item><title><![CDATA[Getting Started]]></title><description><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><h1 id="intro">Intro</h1><p>In this guide we are going to build our first webapplication.</p><ol><li>Create an account on the <a href="https://app.d2o.me">App Engine</a></li></ol><h1 id="background">Background</h1><p>Read the 2 posts <a href="https://bohanssen.com/the-online-ide">Integrated Development Environment</a> &amp; <a href="https://bohanssen.com/framework">Standard Framework Modules</a></p><h2 id="python">Python</h2><p>In case you never programmed before, there are lots of beginner courses <a href="http://letmegooglethat.com/?q=Python+for+noobs">available online.</a></p><h2 id="javascript">Javascript</h2>]]></description><link>https://bohanssen.com/getting-started/</link><guid isPermaLink="false">5e89a632dc5ce100f37c8e6c</guid><category><![CDATA[The Appengine Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 09:44:32 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1585829365343-ea8ed0b1cb5b?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><h1 id="intro">Intro</h1><img src="https://images.unsplash.com/photo-1585829365343-ea8ed0b1cb5b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Getting Started"><p>In this guide we are going to build our first webapplication.</p><ol><li>Create an account on the <a href="https://app.d2o.me">App Engine</a></li></ol><h1 id="background">Background</h1><p>Read the 2 posts <a href="https://bohanssen.com/the-online-ide">Integrated Development Environment</a> &amp; <a href="https://bohanssen.com/framework">Standard Framework Modules</a></p><h2 id="python">Python</h2><p>In case you never programmed before, there are lots of beginner courses <a href="http://letmegooglethat.com/?q=Python+for+noobs">available online.</a></p><h2 id="javascript">Javascript</h2><p>I myself prefere using a Javascript Library in favor of plain javascript, I'm a big fan of <a href="https://www.w3schools.com/jquery/">jQuery</a> it makes the javascript less verbose<br>and in my opinion easier.</p><p>Feel free to use other tools or frameworks when building your apps.<br>I am aware jQuery is not the bleeding edge in javascript frameworks, because I'm more backend oriented I choose to stick with what I know. Here you can find some other options if you like to dive into the new: <a href="https://www.htmlgoodies.com/beyond/javascript/top-javascript-libraries-and-trends-for-2018.html">Top JavaScript Libraries and Trends for 2018</a><br><a href="https://www.w3schools.com/js/">Here</a> you can find a tutorial in case you prefer plain Javascript.</p><h2 id="bootstrap">Bootstrap</h2><p>I recomend using <a href="https://www.w3schools.com/bootstrap4/bootstrap_get_started.asp">Bootstrap</a> for building the front end. But feel free to use other tools or frameworks when building your apps.</p><h1 id="start-your-first-project">Start your first project</h1><ol><li>Open up the <a href="https://app.bohanssen.com/IDE">IDE</a>.</li><li>Click the "Start Project" button.</li><li>In the opened "Create New project" modal: </li></ol><figure class="kg-card kg-image-card"><img src="https://bohanssen.com/content/images/2020/04/startnewproject--1-.png" class="kg-image" alt="Getting Started" title="Startnewproject"></figure><p><br>3.1. Choose a unique project key<br>3.2. Pick the project to clone from</p><ol><li>Open the new project with the project selector in the top right corner of the screen.</li></ol><h1 id="backend">Backend</h1><h2 id="define-your-datamodel-model-">Define your datamodel (Model)</h2><p>For this simple application we need to define 1 <a href="https://bohanssen.com/framework">Model Class</a>, lets call it 'Task' in this task object we are going to map various fields.</p><p>FieldnametypepurposeidStringunique identifieruserStringto correlate tasks to userscompletedbooleanto determine if task is completed or notdetailsStringdescription of the task</p><ol><li>Open the model dropdown and right-click the 'User' model &amp; rename to 'Task'.</li><li>In the newly opened document rename the Python class to 'Task'.</li><li><a href="http://docs.mongoengine.org/guide/defining-documents.html#fields">Use the MongoEngine documentation as a reference</a></li><li>Add the 3 fields to the document class</li></ol><p><a href="https://app.bohanssen.com/docs/todo#Task">Show answer</a></p><hr><h2 id="write-your-business-logic-controller-">Write your business logic (Controller)</h2><p>For our application we need the following functions:</p><p>FunctionPurposeInput variablesReturncreateTaskinstantiate a new task object to the databaseUserID &amp; Task detailsTask ObjectgetTaskget a task by idTask idTask ObjectgetTasksget a list of tasks by userUserIDList containing Task ObjectstoggleCompletedtoggle the completed boolean true/falseTask idTask ObjectdeleteTaskremove a completed taskTask idTask Object</p><ol><li>Open the Library dropdown and delete the userLib module, we don't need it.</li><li>Create a new library module named 'TaskService' &amp; implement the required functions.</li></ol><p><a href="https://app.bohanssen.com/docs/todo#TaskService">Show answer</a></p><hr><h2 id="write-procedures-accessible-over-http-view-">Write procedures accessible over http (View)</h2><p>In the procedures we:</p><ol><li>extract the required information from the user request.</li><li>invoke the apropiate controller function.</li><li>construct a JSON serializable response.</li></ol><p>We start with removing the count procedure from the starter project, after that we implement the following procedures:</p><p>FunctionInput variablesReturncreateTaskUserID &amp; Task detailsTask ObjectgetTasksUserIDList containing Task ObjectstoggleCompletedTask idTask ObjectdeleteTaskTask idSucceeded true/false</p><ol><li><a href="https://app.bohanssen.com/docs/todo#createTask">Show answer: createTask</a></li><li><a href="https://app.bohanssen.com/docs/todo#getTask">Show answer: getTask</a></li><li><a href="https://app.bohanssen.com/docs/todo#toggleCompleted">Show answer: toggleCompleted</a></li><li><a href="https://app.bohanssen.com/docs/todo#deleteTask">Show answer: deleteTask</a></li></ol><h1 id="frontend">Frontend</h1><h2 id="javascript-1">Javascript</h2><p>Now we have to invoke the 4 procedures from the client side therefore we are going to implement 4 javascript functions.<br>Open the main.js script and delete all contents.</p><p><a href="https://app.bohanssen.com/docs/todo#main">Show answer</a></p><h2 id="index-html">Index.html</h2><p>Index.html is the actual <a href="https://en.wikipedia.org/wiki/HTML">html page</a> that represents your userinterface and binds together your HTML, CSS &amp; Javascript.<br><a href="https://app.bohanssen.com/docs/todo#index">Show answer</a></p>]]></content:encoded></item><item><title><![CDATA[Framework]]></title><description><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><p>The framework is a series of javascript and python modules helping you with the client-server communiction and enabeling you to focus on the application logic.</p><h1 id="javascript-client-side-">Javascript (client-side)</h1><h2 id="http">HTTP</h2><p>Import the module:</p><pre><code class="language-javascript">&lt;script src="/js/framework/HTTP.D2O.js"&gt;&lt;/script&gt;
</code></pre><p>With the HTTP module</p>]]></description><link>https://bohanssen.com/framework/</link><guid isPermaLink="false">5e89a378dc5ce100f37c8e55</guid><category><![CDATA[The Appengine Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 09:32:12 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1544816565-c199d6f5d2d3?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><img src="https://images.unsplash.com/photo-1544816565-c199d6f5d2d3?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Framework"><p>The framework is a series of javascript and python modules helping you with the client-server communiction and enabeling you to focus on the application logic.</p><h1 id="javascript-client-side-">Javascript (client-side)</h1><h2 id="http">HTTP</h2><p>Import the module:</p><pre><code class="language-javascript">&lt;script src="/js/framework/HTTP.D2O.js"&gt;&lt;/script&gt;
</code></pre><p>With the HTTP module loaded in your index head sectiont the following functionality is available in your javascript modules.</p><pre><code class="language-javascript">// HTTP.get &amp; HTTP.post

HTTP.get("{procedure.name}/{var_1}/{var_n}",callback,query_parameters)

/* procedure.name = The module name (procedure) that should be triggered server side
 * {var_n} = Path variables or uri variables (Optional)
 * query_parameters = A dictionary that is added to the request url as query_parameters -&gt; https:/uri/uri/?key=value&amp;key2=value2 (Optional)
 * callback = A javascript function that should be triggerd on the response e.g.
 */

query_parameters = {
  'key' : 'value'
}
function callback(data){
  console.log(data);
}

HTTP.post("{procedure.name}/{var_1}/{var_n}",callback,body,query_parameters)
/* Same variables as the get method with the added:
 * body = Data to be send to server (JSON serializable)
 */
</code></pre><h2 id="stomp">STOMP</h2><p><a href="http://jmesnil.net/stomp-websocket/doc/">Wat is STOMP</a><br>Import the module:</p><pre><code class="language-javascript">&lt;script src="/js/framework/STOMP.D2O.js"&gt;&lt;/script&gt;
</code></pre><p>With the STOMP module loaded in your index head sectiont the following functionality is available in your javascript modules.</p><pre><code class="language-javascript">STOMP.connect();
// Connect to D2O STOMP message broker, should be executed only once

STOMP.postconnect = function(){
  console.log("Connected");
}
// Optional, add a function to be executed after the connection is established

STOMP.subscribe('{queueName}',onMessage);
// Subscribe on a queue dedicated for the current user and callback onMessage e.g.
function onMessage(data){
  console.log(data);
}

STOMP.subscribeTopic("{topicName}", onMessage);
// Subscribe on topic (broadcast) and callback onMessage

STOMP.disconect();
// Disconect from d@O STOMP message broker

STOMP.predisconnect = function(){
  console.log();
}
// Optional, add a function to be executed just before the connection is closed by client

STOMP.SEND("{procedure.name}",request);
// procedure.name = The module name (procedure) that should be triggered server side
// Data to be send to server (JSON serializable)
</code></pre><h2 id="splashscreen-bootstrap-only-">SplashScreen (Bootstrap only)</h2><p>Adds a splashscreen automatically,  the splashsreen fills the entire page and will disapear when the python node is up and running.</p><pre><code class="language-javascript">&lt;script src="/js/framework/splashscreen.js"&gt;&lt;/script&gt;
</code></pre><p>This module is optional and can be easily implemented yourself if you require customization, just take a <a href="https://app.d2o.me/js/framework/splashscreen.js">peek</a></p><h2 id="notify-js">Notify.js</h2><p>Add module <a href="https://notifyjs.jpillora.com/">notify.js</a> (optional)</p><pre><code class="language-javascript">&lt;script src="/js/framework/notify.js"&gt;&lt;/script&gt;
</code></pre><h2 id="alert">Alert</h2><p>Add module <a href="https://github.com/azer/alert">alert</a> (optional)</p><pre><code class="language-javascript">&lt;script src="/js/framework/alert.js"&gt;&lt;/script&gt;
</code></pre><h1 id="python-server-side-">Python (server-side)</h1><h2 id="procedure">Procedure</h2><p>A python procedure can be triggered by HTTP (synchronous) or STOMP (asynchronous), it is executed as a script and has the following variables and functions</p><h3 id="variables">Variables</h3><ul><li>userID = A String containing the requestor username.</li><li>request = A Python dictionary containing the request data</li><li>response = A python dictionary inwhere the response data can be stored</li></ul><h3 id="functions">Functions</h3><h4 id="logger">Logger</h4><p>There are 5 log levels, all accept a single string as input, optionally you can use concatanation, <a href="http://www.diveintopython.net/native_data_types/formatting_strings.html">formatting</a> or  <a href="https://docs.python.org/3.1/whatsnew/2.6.html#pep-3101">advanced formatting</a> to create the log message.</p><pre><code class="language-python"># Trace logging accepts a string
logger.trace("message as a string")

# Debug logging, optionally use string formatting 
logger.debug("message as %s string" % 1)

# Info logging, optionally use string formatting 
logger.info("message as %s %s" % (1, "string"))

# Warning logging, optionally use string concatanation
logger.warn("message: " + "Hello World!")

# Error logging
logger.error("message")
</code></pre><h4 id="stomp-1">STOMP</h4><p><a href="https://stomp.github.io/">Wat is STOMP</a><br><a href="https://en.wikipedia.org/wiki/Queue_(abstract_data_type)">Queues</a> &amp; <a href="https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern">Topics</a></p><pre><code class="language-python"># Push data to requestor
stomp.push("queuename",data)

# Push data to specific user
stomp.pushToUser("queuename",data,userName)

# Broadcast data to topic
stomp.topic("topicname",data)
</code></pre><p>Take a look at the <a href="https://app.bohanssen.com/docs/chat">chat demo</a> to see an example using STOMP.</p><h4 id="library-code">Library Code</h4><p>all modules defined in the library section are available.</p><h3 id="example">Example</h3><pre><code class="language-python">logger.info("User [%s] send in request [%s]" % (userID,request))

# If HTTP call
response["Hello"] = "World!"

# If stomp call
stomp.push("foobar",{"Hello" : "World!"})
</code></pre><h2 id="library">Library</h2><p>Here you can define your standard libray files they should be stateless, so only root level functions and no global variables.<br>All functions defined in these files are available in the procedures, so make sure their names are unique e.g. define your library as<br>classes with static methods. Take a look at the <a href="https://bohanssen.com/app-engine/getting-started">getting started tutorial</a>.</p><h3 id="example-1">Example</h3><p>Example from the <a href="https://app.bohanssen.com/docs/chat">demo: chat</a></p><pre><code class="language-python">from models import *
import time

class UserService:
  def getUser(name):
    user = User.objects(name=name).first()
    if user == None:
      user = User(name=name)
      user.save()
      logger.info("Saved user %s" % name)        
    return user 

  def setOnline(name):
    user = UserService.getUser(name)
    user.stamp = time.time()
    user.save()

  def updateStatus():
    exp = time.time() - 35
    users = []
    for user in User.objects:
      if user.stamp &lt; exp:
        user.online = False
      else:
        user.online = True
      user.save()
      users.append({
          "name" : user.name,
          "online" : user.online
      }) 
    return users
</code></pre><h2 id="models">Models</h2><p>A model is the single, definitive source of information about your data. It contains the essential fields and behaviors of the data you’re storing. Each model maps to a single collection in your database.<br>In other words An instance of your model relates to a document (record) in your database.</p><p>The D2O framework uses the <a href="http://docs.mongoengine.org/">mongoengine project</a><br>MongoEngine is a Document-Object Mapper (think <a href="https://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a>, but for <a href="https://en.wikipedia.org/wiki/Document-oriented_database">document databases</a>) for working with MongoDB from Python. It uses a simple declarative API, similar to the Django ORM.</p><p>Your python node connects to a Database on the Mongo server automatically. This database is dedicated for you application &amp; environment, in other words, each application has 2 databases Dev &amp; Prod. Because the node automatically connects to the correct database you only have to worry about <a href="http://docs.mongoengine.org/guide/defining-documents.html">defining your document mapping</a>, <a href="http://docs.mongoengine.org/guide/document-instances.html">managing your document instances</a> &amp; <a href="http://docs.mongoengine.org/guide/querying.html">querying the database</a>.</p>]]></content:encoded></item><item><title><![CDATA[The online IDE]]></title><description><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><figure class="kg-card kg-image-card"><img src="https://bohanssen.com/content/images/2020/04/ide--1-.png" class="kg-image"></figure><h1 id="1-start-project-project-selector">1. Start Project / Project Selector</h1><p>With the Start Project button you can open a dialog:</p><figure class="kg-card kg-image-card"><img src="https://bohanssen.com/content/images/2020/04/newproject--1-.png" class="kg-image"></figure><p>Now you should choose a project key as unique identifier for you project e.g. camelcased projectName or an UUID and select a project to clone from e.g. one of the</p>]]></description><link>https://bohanssen.com/the-online-ide/</link><guid isPermaLink="false">5e89a238dc5ce100f37c8e3c</guid><category><![CDATA[The Appengine Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 09:21:21 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1484417894907-623942c8ee29?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><figure class="kg-card kg-image-card"><img src="https://bohanssen.com/content/images/2020/04/ide--1-.png" class="kg-image" alt="The online IDE"></figure><h1 id="1-start-project-project-selector">1. Start Project / Project Selector</h1><img src="https://images.unsplash.com/photo-1484417894907-623942c8ee29?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="The online IDE"><p>With the Start Project button you can open a dialog:</p><figure class="kg-card kg-image-card"><img src="https://bohanssen.com/content/images/2020/04/newproject--1-.png" class="kg-image" alt="The online IDE"></figure><p>Now you should choose a project key as unique identifier for you project e.g. camelcased projectName or an UUID and select a project to clone from e.g. one of the starter projects. After creating your new project you can open it with the project selector in the top right corner of the screen.</p><h1 id="2-show-archive">2. Show Archive</h1><p>The platform only allows soft deletes, in other words you can archive projects. Clicking the show archive button will show a list of old projects. By clicking them they will be dearchived. The dearchived projects are available in the project selector once more.</p><h1 id="3-file-tab">3. File tab</h1><p>The file tab sections shows all files currently opened in the IDE</p><h1 id="4-editor-area">4. Editor Area</h1><p>The editor area shows the current selected file (file tab) and allows you to edit it. It is powered by code mirror and adjusts the syntax highlighting to the current selected file HTML/CSS/JAVASCRIPT/PYTHON. CTRL + SPACE will show autocomplete sugestions although this functionality is fairly limited at the moment. If there is inactivity for more then 1 second c.q. you are not typing anymore the platform will autosave your document.</p><h1 id="5-tools">5. Tools</h1><p>This menu contains the project management tools</p><h2 id="5-1-version-selector">5.1 Version selector</h2><p>Here you can browse the released versions of the current selected document (file tab) and choose to revert back to a specific version of code.</p><h2 id="5-2-project-info">5.2 Project Info</h2><figure class="kg-card kg-image-card"><img src="https://bohanssen.com/content/images/2020/04/info--1-.png" class="kg-image" alt="The online IDE"></figure><p>The project info button opens up a pop up to alter your project description</p><p>FieldTypePurposeTitleplain textA descriptive project name more human friendly then the project key. This title is shown in the App Gallery and in the documentationSummaryplain textThe summary is also shown in the App GalleryDocumentationMarkdownThe markdown text will be a part of the autogenerated documentation for your project</p><h2 id="5-3-undo-redo">5.3 Undo/Redo</h2><p>With these buttons you can toggle between autosaved version of you code. CTRL+Z will also work in the edit area and will trigger a new autosave.</p><h2 id="5-4-enabled-disabled">5.4 Enabled/Disabled</h2><p>The next toggle button tells you if the project is enabled in other words "Live" only "Released &amp; Enabled" projects are shown in the App Gallery. If a project is not "Released &amp; Enabled" it will not be accesable.</p><h2 id="5-5-release">5.5 Release</h2><p>The release button will open up a dialog to release your code to the wild. The live version will be an exact copy from the most current dev version of your code.</p><h1 id="6-client-side">6. Client Side</h1><p>These files contain the client side of your application</p><h2 id="6-1-index-html">6.1 Index.html</h2><p>Applications are set up as one-pagers, this means that index.html is your landing page and contains all html in your project.</p><h2 id="6-2-stylesheet">6.2 Stylesheet</h2><p>A file to store your custum css</p><h2 id="6-3-javascript">6.3 Javascript</h2><p>The javascript files contain your client side controller, it can be multiple files. Right click on a file to rename/delete them.</p><h1 id="7-server-side">7. Server Side</h1><p>All your python code that is executed server side, server side is set up as a 3-tier application Model View Controller (MVC).</p><ul><li>Model -&gt; Data Model connected to database.</li><li>View -&gt; Data conversion (JSON &lt;-&gt; Python)</li><li>Controller -&gt; Application Logic</li></ul><h2 id="7-1-procedures-view-">7.1 Procedures (View)</h2><p>These modules are executed as a script and can be triggerd by a webcall HTTP/STOMP see <a href="https://github.com/bohanssen/wiki/blob/master/app-engine/framework">framework</a></p><h2 id="7-2-library-controller-">7.2 Library (Controller)</h2><p>These modules are imported in your python server environment, they should contain your application logic which can be used by the procedures see <a href="https://github.com/bohanssen/wiki/blob/master/app-engine/framework">framework</a></p><h2 id="7-3-models-model-">7.3 Models (Model)</h2><p>These modules should contain your datamodel as a python class see <a href="https://github.com/bohanssen/wiki/blob/master/app-engine/framework">framework</a></p><h1 id="8-quicklinks">8. Quicklinks</h1><p>Open various pages related to this project.</p><h2 id="8-1-development-page">8.1 Development Page</h2><p>Opens up your application in a new page. The code representing this page is the current stage in your editor. Although front-end changes requirs a reload of the page.</p><h2 id="8-2-production-page">8.2 Production page</h2><p>Opens up your application in a new page represented by the current released/enabled code.</p><h2 id="8-3-test-results">8.3 Test Results</h2><p>Opens up the test results Modal.</p><h2 id="8-4-dashboard">8.4 Dashboard</h2><p>Opens the project dashboard in a new page see <a href="https://github.com/bohanssen/wiki/blob/master/app-engine/dashboard">dashboard</a></p><h2 id="8-5-docs">8.5 Docs</h2><p>Opens the project documentation in a new page see <a href="https://github.com/bohanssen/wiki/blob/master/app-engine/docs">docs</a></p><h1 id="9-archive">9. Archive</h1><p>Soft delete, the project will be disabled and archived.</p>]]></content:encoded></item><item><title><![CDATA[Architecture and Design]]></title><description><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><h4 id="server-topology">Server topology</h4><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://bohanssen.com/content/images/2020/04/docker-compose.png" class="kg-image"><figcaption>Docker containers</figcaption></figure><h4 id="design-not-updated-">Design (Not Updated)</h4><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://bohanssen.com/content/images/2020/04/appengine-architecture.png" class="kg-image"><figcaption>Initial design</figcaption></figure>]]></description><link>https://bohanssen.com/architecture-and-design/</link><guid isPermaLink="false">5e89a04ddc5ce100f37c8e23</guid><category><![CDATA[The Appengine Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 09:13:37 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1486744328743-c1151100a95b?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><h4 id="server-topology">Server topology</h4><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://bohanssen.com/content/images/2020/04/docker-compose.png" class="kg-image" alt="Architecture and Design"><figcaption>Docker containers</figcaption></figure><h4 id="design-not-updated-">Design (Not Updated)</h4><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://bohanssen.com/content/images/2020/04/appengine-architecture.png" class="kg-image" alt="Architecture and Design"><figcaption>Initial design</figcaption></figure>]]></content:encoded></item><item><title><![CDATA[Why this Project?]]></title><description><![CDATA[Why this project?
Building web applications is considerably easy.
While there are lots of tools around to get you started. Sharing your freshly build app can be quite a hassle.]]></description><link>https://bohanssen.com/appengine-project/</link><guid isPermaLink="false">5e899342dc5ce100f37c8dd7</guid><category><![CDATA[The Appengine Project]]></category><dc:creator><![CDATA[Bo Hanssen]]></dc:creator><pubDate>Sun, 05 Apr 2020 08:21:00 GMT</pubDate><media:content url="https://bohanssen.com/content/images/2020/04/adi-goldstein-mDinBvq1Sfg-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<blockquote><a href="https://app.bohanssen.com">Open the webapplication</a></blockquote><img src="https://bohanssen.com/content/images/2020/04/adi-goldstein-mDinBvq1Sfg-unsplash.jpg" alt="Why this Project?"><p>The D2O app engine is kinda like an ultra light Framework as a Service (FAAS) it helps develop small web applications, check out the Application Gallery to see the currently deployed app's.<br>ps. If you are not a newbie, this platform is probably not for you ;) </p><p>Ultra light means the platform is not suitable for high traffic applications. I hear you asking, if this platform was not intended for real world applications then what was your aim when you where building it?<br>Well, I myself learned the basics of programming during college and I can say that putting up 'Hello World!' on a command line is really cool for about 2 minutes.<br>After that you want to start creating cool stuff like a Web application or something like that.<br>While there are lots of nice tools and frameworks around to get you started. Sharing your freshly build app can be quite a hassle especially when you are new to the field of Software Development.<br>With this platform I aim to provide a framework to Learn, Collaborate and Share. Therefore all projects on this platform are open source.</p><blockquote>Fair use policy: There is only one limitations on ussage and storage at the moment. Procedure executiontime on the backend may not exceed the 10 seconds mark.</blockquote><hr><h1 id="appreciation">Appreciation</h1><!--kg-card-begin: html--><ul>
<li><a href="https://projects.spring.io/spring-boot/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-spring" aria-hidden="true"></i>&nbsp;Spring Boot</a></li>
                  
<li><a href="https://github.com/vsch/flexmark-java" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-java" aria-hidden="true"></i>&nbsp;Flexmark</a></li>
                    
<li><a href="https://jsoup.org/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-java" aria-hidden="true"></i>&nbsp;Jsoup</a></li>
                    
<li><a href="http://www.thymeleaf.org/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-java" aria-hidden="true"></i>&nbsp;Thymeleaf</a></li>
                    
<li><a href="http://camel.apache.org/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-apache" aria-hidden="true"></i>&nbsp;Apache Camel</a></li>
						
<li><a href="https://commons.apache.org/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-apache" aria-hidden="true"></i>&nbsp;Apache commons</a></li>
                    
<li><a href="https://mina.apache.org/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-apache" aria-hidden="true"></i>&nbsp;Apache Mina</a></li>
                    
<li><a href="https://maven.apache.org/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-maven" aria-hidden="true"></i>&nbsp;Apache Maven</a></li>
                        
<li><a href="http://tomcat.apache.org/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-tomcat" aria-hidden="true"></i>&nbsp;Apache Tomcat</a></li>
                        
<li><a href="https://docs.python.org/2/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-python" aria-hidden="true"></i>&nbsp;Python 2.7</a></li>
                        
<li><a href="https://www.postgresql.org/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-postgres" aria-hidden="true"></i>&nbsp;Postgresql</a></li>
                        
<li><a href="https://www.mongodb.com/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-mongodb" aria-hidden="true"></i>&nbsp;MongoDB</a></li>
				  	
<li><a href="https://v4-alpha.getbootstrap.com/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-bootstrap" aria-hidden="true"></i>&nbsp;Bootstrap</a></li>
                    
<li><a href="https://jquery.com/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-jquery" aria-hidden="true"></i>&nbsp;JQuery</a></li>
                    
<li><a href="http://stomp.github.io/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-antenna" aria-hidden="true"></i>&nbsp;STOMP</a></li>
                        
<li><a href="http://jmesnil.net/stomp-websocket/doc/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-javascript" aria-hidden="true"></i>&nbsp;Stomp over websocket</a></li>
                    
<li><a href="https://github.com/sockjs" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-javascript" aria-hidden="true"></i>&nbsp;Sockjs</a></li>
                       
<li><a href="https://codemirror.net/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-javascript" aria-hidden="true"></i>&nbsp;Code Mirror</a></li>
                        
<li><a href="https://github.com/inacho/bootstrap-markdown-editor" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-javascript" aria-hidden="true"></i>&nbsp;Bootstrap Markdown Editor</a></li>
                    
<li><a href="https://notifyjs.com/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-javascript" aria-hidden="true"></i>&nbsp;Notify.js</a></li>
                        
<li><a href="https://masonry.desandro.com/" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-javascript" aria-hidden="true"></i>&nbsp;Masonry.js</a></li>
                        
<li><a href="http://fontawesome.io" class="list-group-item list-group-item-action" target="_blank">
						<i class="fa fa-font-awesome" aria-hidden="true"></i>&nbsp;Font Awesome</a></li>
                        
<li><a href="http://fizzed.com/oss/font-mfizz" class="list-group-item list-group-item-action" target="_blank">
						<i class="icon-css" aria-hidden="true"></i>&nbsp;Font Mfizz</a></li>
                        
<li><a href="https://pixabay.com" class="list-group-item list-group-item-action" target="_blank">
                        <i class="fa fa-picture-o" aria-hidden="true"></i>&nbsp;Pixabay: Creative Commons Images</a></li>
</ul><!--kg-card-end: html-->]]></content:encoded></item></channel></rss>