<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cloud &#8211; Xojo Programming Blog</title>
	<atom:link href="https://blog.xojo.com/tag/cloud/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.xojo.com</link>
	<description>Blog about the Xojo programming language and IDE</description>
	<lastBuildDate>Mon, 18 Aug 2025 20:40:26 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Simplicity and Security, Xojo Cloud is Ideal Hosting for Xojo Web Apps</title>
		<link>https://blog.xojo.com/2023/10/30/simplicity-and-security-xojo-cloud-is-ideal-hosting-for-xojo-web-apps/</link>
		
		<dc:creator><![CDATA[Xojo]]></dc:creator>
		<pubDate>Mon, 30 Oct 2023 16:00:00 +0000</pubDate>
				<category><![CDATA[Cross-Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[App Hosting]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Rapid Application Development]]></category>
		<category><![CDATA[Security-Enhanced Linux]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=11553</guid>

					<description><![CDATA[Xojo Cloud is the premier hosting solution for developers looking for a reliable, secure and high-performance hosting environment for Xojo web applications. Xojo Cloud is developed specifically for Xojo web applications and offers a range of benefits for you and your applications that make it worth the investment.]]></description>
										<content:encoded><![CDATA[
<p>Xojo Cloud is the premier hosting solution for developers looking for a reliable, secure and high-performance hosting environment for Xojo web applications. Xojo Cloud is developed specifically for Xojo web applications and offers a range of benefits for you and your applications that make it worth the investment.</p>



<p>Xojo Cloud is <strong>optimized for Xojo applications</strong>. It is specifically designed to provide the best possible performance and stability for Xojo web applications. We optimize Xojo Cloud for performance, so your web apps will run smoothly and seamlessly. You can even monitor server stats from within the Xojo IDE.</p>



<p>Xojo Cloud is <strong>focused on simplicity and ease of use</strong> and requires zero configuration. Designed with the Xojo developer in mind, Xojo Cloud&#8217;s Control Panel makes it easy to deploy and manage web applications. Purchase a server, open a web project in Xojo and click Deploy to upload and install to Xojo Cloud. Not just for web apps, Xojo Cloud includes Apple Push Notification server (APNs) support for your iOS apps. Set up SSL, PostrgeSQL, MySQL, SFTP and a SSH Tunnel with a click in the Xojo Cloud Control Panel (the Control Panel itself is a Xojo web app). The administration of a web server is a significant and constant task; Xojo Cloud allows you to leave that behind and focus on your projects.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large is-style-default"><img fetchpriority="high" decoding="async" width="1024" height="386" data-id="12082" src="https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Apps-Tab-1024x386.png" alt="Xojo Cloud Control Panel Apps Tab" class="wp-image-12082" srcset="https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Apps-Tab-1024x386.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Apps-Tab-300x113.png 300w, https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Apps-Tab-768x289.png 768w, https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Apps-Tab-1536x579.png 1536w, https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Apps-Tab-2048x772.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large is-style-default"><img decoding="async" width="1024" height="384" data-id="12083" src="https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Options-Tab-1024x384.png" alt="Xojo Cloud Control Panel Options Tab" class="wp-image-12083" srcset="https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Options-Tab-1024x384.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Options-Tab-300x112.png 300w, https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Options-Tab-768x288.png 768w, https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Options-Tab-1536x576.png 1536w, https://blog.xojo.com/wp-content/uploads/2023/09/Xojo-Cloud-Control-Panel-Options-Tab-2048x768.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p>We take security very seriously. Xojo Cloud <strong>offers advanced security features</strong> to protect your data from cyberthreats, including a smart firewall, intrusion and hacking detection and Security-Enhanced Linux. Unlike most hosting solutions that provide little to no security, each Xojo Cloud server is built with our state-of-the-art, industrial-strength, multi-tiered security system woven into its very core.&nbsp;</p>



<p>Additional features and benefits include daily automatic backups, load balancing and support from the Xojo team. With nine global hosting locations, you are able to host your Xojo web applications close to your users, for speed and an ideal overall experience. </p>



<div class="wp-block-columns are-vertically-aligned-top is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<figure class="wp-block-image size-large is-style-default"><img decoding="async" width="1024" height="576" src="https://blog.xojo.com/wp-content/uploads/2023/09/Add-a-heading-1024x576.png" alt="Xojo Cloud offers 3 packages offering options on RAM, storage and vCPU starting at $49/month. " class="wp-image-12078" srcset="https://blog.xojo.com/wp-content/uploads/2023/09/Add-a-heading-1024x576.png 1024w, https://blog.xojo.com/wp-content/uploads/2023/09/Add-a-heading-300x169.png 300w, https://blog.xojo.com/wp-content/uploads/2023/09/Add-a-heading-768x432.png 768w, https://blog.xojo.com/wp-content/uploads/2023/09/Add-a-heading-1536x864.png 1536w, https://blog.xojo.com/wp-content/uploads/2023/09/Add-a-heading.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<p>In addition to the <a href="http://xojo.com/store/#cloud">standard options</a>, Xojo Cloud servers with more RAM, storage and Virtual CPUs are available. Contact&nbsp;<a href="mailto:hello@xojo.com">customer support</a>&nbsp;for details about personalized plans.&nbsp;</p>



<p>Whether you are a seasoned Xojo developer or just getting started, Xojo Cloud provides an intuitive and user-friendly hosting solution for Xojo web applications. Today is a good day to start using Xojo Cloud, visit our <a href="https://xojo.com/cloud/">website</a> to learn more or see the Xojo <a href="https://xojo.com/store/#cloud">Store</a> to pick your package and location.</p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Xojo Cloud is now in Sydney!</title>
		<link>https://blog.xojo.com/2022/12/12/xojo-cloud-is-now-in-sydney/</link>
		
		<dc:creator><![CDATA[Jason Parsley]]></dc:creator>
		<pubDate>Mon, 12 Dec 2022 23:30:21 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[App Hosting]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Rapid Application Development]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=11084</guid>

					<description><![CDATA[We're happy to add Sydney, Australia to the worldwide locations of Xojo Cloud servers. That makes nine cities that you can host your Xojo Cloud web apps in. Offering worldwide coverage for Xojo Cloud makes it easier to get your Xojo web applications close to the users that are using them, improving the speed and overall experience for your users.]]></description>
										<content:encoded><![CDATA[
<p>We&#8217;re happy to add Sydney, Australia to the worldwide locations of Xojo Cloud servers. That makes nine cities that you can host your <a rel="noreferrer noopener" href="https://www.xojo.com/cloud" target="_blank">Xojo Cloud</a> web apps in. Offering worldwide coverage for Xojo Cloud makes it easier to get your Xojo web applications close to the users that are using them, improving the speed and overall experience for your users.</p>



<p>Xojo Cloud is the easiest way to deploy a Xojo web app and you don&#8217;t have to do any maintenance on the server, we take care of that for you. It is secure, with a smart firewall, intrusion and hacking detection, and Security-Enhanced Linux to keep your apps secure. You can also set up SSL, MySQL and more with just a mouse-click. Xojo Cloud comes in a variety of packages offering options on RAM, storage and vCPU, so you can <a rel="noreferrer noopener" href="https://www.xojo.com/store/#hosting" target="_blank">purchase</a> the plan that is right for you.</p>



<p>We have more people deploying Xojo web apps to Xojo Cloud than ever before! If you have any questions about Xojo Cloud, please <a href="mailto:hello@xojo.com">reach out to us</a>. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="532" src="https://blog.xojo.com/wp-content/uploads/2022/12/1cloud0ECB06A7-DA67-474D-8E92-E506B3A775D5-1024x532.png" alt="" class="wp-image-11086" srcset="https://blog.xojo.com/wp-content/uploads/2022/12/1cloud0ECB06A7-DA67-474D-8E92-E506B3A775D5-1024x532.png 1024w, https://blog.xojo.com/wp-content/uploads/2022/12/1cloud0ECB06A7-DA67-474D-8E92-E506B3A775D5-300x156.png 300w, https://blog.xojo.com/wp-content/uploads/2022/12/1cloud0ECB06A7-DA67-474D-8E92-E506B3A775D5-768x399.png 768w, https://blog.xojo.com/wp-content/uploads/2022/12/1cloud0ECB06A7-DA67-474D-8E92-E506B3A775D5.png 1250w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><em>Jason grew up in the Oklahoma City area and has been on the Xojo team since the beginning! When he’s not working, you’ll find him spending time with his wife and son, hiking, playing tennis or just relaxing at home. He also enjoys trading stocks and watching Oklahoma Sooner football!</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modern, Visual Basic For Your Mac</title>
		<link>https://blog.xojo.com/2021/06/24/modern-visual-basic-for-your-mac/</link>
		
		<dc:creator><![CDATA[Alyssa Foley]]></dc:creator>
		<pubDate>Thu, 24 Jun 2021 16:41:57 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Cross-Platform]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[VB Alternative]]></category>
		<category><![CDATA[VB for Mac]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=8638</guid>

					<description><![CDATA[Did you love Visual Basic? A lot of us did, but it's 2021 and technology is ever-changing. As you look at the modern alternatives, consider Xojo. For over 20 years, Xojo has been the spiritual successor to VB, a rapid, cross-platform programming language and integrated development environment (IDE). Often called "VB for the Mac", Xojo is more powerful than VB6 and more approachable than VB.NET. Two factors that are increasingly important because modern coders are everywhere, not just in the technology department. ]]></description>
										<content:encoded><![CDATA[
<p>Did you love Visual Basic? A lot of us did, but technology is ever-changing. As you look at the modern alternatives, consider Xojo. For over 20 years, Xojo has been the true successor to VB, a rapid, cross-platform programming language and integrated development environment (IDE). Often called &#8220;VB for the Mac&#8221;, Xojo is more powerful than VB6 and more approachable than VB.NET &#8211; two factors that are increasingly important because modern coders are everywhere, not just in the technology department.</p>



<p>Unlike VB and VB.NET, Xojo allows you to develop on your platform of choice- Windows, Mac or Linux. But being able to develop wherever you like isn&#8217;t the only reason Xojo is a <a href="https://blog.xojo.com/2013/06/19/a-modern-alternative-to-visual-basic/">great alternative to Visual Basic</a>. Xojo is fully object-oriented, supported and <a href="https://documentation.xojo.com/Resources:Release_Notes">regularly updated</a>. It allows you to cross-compile desktop apps for Windows, Mac and Linux and Raspberry Pi. Currently, a Mac is required to compile projects for macOS and for iOS development and compilation; <a href="https://blog.xojo.com/2020/12/07/why-building-apps-for-macos-requires-a-mac/">learn why</a>. In additional to all this, Xojo allows you to compile apps for mobile and the web with that same powerful language and IDE. </p>



<h2 class="wp-block-heading">Evaluating Xojo as a Visual Basic Alternative</h2>



<p>Xojo is free for learning and development so you can take all the time you need to evaluate. Download Xojo and start learning while you develop, run and debug your projects in Xojo&#8217;s free IDE. Going through the QuickStarts and Tutorials, you&#8217;ll recognize how your knowledge of VB leads you to quickly embrace Xojo. Purchase a license only when you are ready to compile your projects. </p>



<p>To help make your transition from Visual Basic to Xojo easier, download this open-source <a href="https://github.com/xojo/VB">Xojo.VB</a> library that maps many Visual Basic commands to their Xojo equivalents. Watch this <a href="https://youtu.be/9d9PhFWCQC4">Migrating from VB video</a>&nbsp;to see a simple VB app get migrated to Xojo. Visit our <a href="https://documentation.xojo.com/topics/migrating_from_other_development_tools/migrating_from_visual_basic.html">Migrating from Visual Basic</a> page at the Xojo Docs&nbsp;for more details about Data Types, Commands and Controls. </p>



<h2 class="wp-block-heading">Modernize Visual Basic Apps for Web and Mobile</h2>



<p>Xojo it is a great way to modernize legacy Visual Basic desktop apps to web and mobile platforms. </p>



<p><strong>Web Development</strong> &#8211; With Xojo&#8217;s programming language and IDE, web apps are as simple to develop as desktop apps. Instead of HTML, CSS, PHP, JavaScript, and AJAX, you&#8217;ll save tons of development time using the Xojo programming language. <a href="https://www.xojo.com/products/web.php">Xojo web apps</a> are compiled to binary code and can be deployed to any server (Linux, macOS or Windows) as standalone web apps. For simple, secure one-click deployment of web apps plus built-in SSL and database support, use <a href="https://www.xojo.com/cloud/">Xojo Cloud</a>.</p>



<p><strong>Mobile Development</strong> &#8211; With <a href="https://www.xojo.com/products/mobile.php">Xojo iOS</a> you can design your apps using drag and drop in the layout editor, add your code and build. Access the iOS-features you&#8217;d expect, like sharing panel and your photo library, and also the iPhone&#8217;s hardware-based features, like motion, location and camera. Xojo makes iOS development familiar and fast. <a href="https://blog.xojo.com/2021/06/11/android-2021-summer-preview/">Xojo Android</a> is currently in development. </p>



<h2 class="wp-block-heading"><strong>Similarities Between Xojo and V</strong>isual Basic</h2>



<p>As a Visual Basic developer, you will find Xojo very familiar. VB and Visual Basic.NET use a language similar to the Xojo programming language. You will notice that many of the commands are nearly the same. The default UI controls included with VB are, for the most part, also included with Xojo. You&#8217;ll also find that Xojo has several controls that are not included by default with VB like HTMLViewer/WebHTMLViewer, MoviePlayer/WebMoviePlayer and SearchField.&nbsp;</p>



<p><strong>Language</strong> &#8211; The Xojo&nbsp;programming language has commands like If..Then..Else, For..Next, and While..Loop. You will also find the object-oriented capabilities of Xojo are quite similar to VB.NET. </p>



<p><strong>Data Types</strong> &#8211; Xojo shares many of the same data types with VB6 and VB.NET, including: Integer, Double, String/Text, Currency, Boolean, Variant.</p>



<p><strong>Controls</strong> &#8211; Xojo has many common controls including: Buttons, Labels, TextFields, TextAreas, ListBoxes (grids), PopupMenus, ProgressBars, toolbars and more.</p>



<h2 class="wp-block-heading"><strong>Differences Between Xojo and V</strong>isual Basic</h2>



<p>Xojo definitely feels similar to Visual Basic, but you&#8217;ll find there are differences too. Many of these differences stem from Xojo&#8217;s focus on being cross-platform. </p>



<p><strong>Shared Libraries</strong> &#8211;  Xojo cannot create DLLs, ActiveX controls, .NET assemblies or any kind of shared libraries. Since these are all Windows-specific technologies, that is somewhat understandable for a cross-platform tool. If you&#8217;re depending on a DLL and are planning to deploy on Mac or Linux, you&#8217;ll need another solution for those operating systems. Fortunately, Xojo supports conditional compilation which makes it easy for your code to use DLLs only when compiling for Windows. If you find another library that provides a solution for MacOS and/or Linux, you can use conditional compilation there as well.</p>



<p><strong>Compiler and Run-time</strong> &#8211; Xojo apps are<strong> compiled to native code.</strong> They do not contain byte-code that is run by a virtual machine (as with .NET). The run-time library is included with your applications so there is nothing additional that needs to be installed on users&#8217; computers.</p>



<p><strong>Language and Framework</strong> &#8211; Xojo is fully object-oriented. Unlike VB6, you can have classes that use inheritance and other object-oriented features. The Xojo framework is designed to be simple to use and support cross-platform applications; it provides access to many things you&#8217;ve come to expect such as file handling, databases, graphics and more.</p>



<p><strong>File I/O</strong> &#8211; One of the biggest differences between VB6 and Xojo is file I/O. Xojo consolidates all its file processing into a few classes: FolderItem, TextInputStream, TextOutputStream and BinaryStream. VB6 uses hard-coded file paths and less flexible file access methods, primarily because it only needs to work with Windows-specific file paths.</p>



<p><strong>Data Types</strong> &#8211; Xojo is strongly typed, just like VB.NET. VB6 allows you to do some things the old-school, BASIC way, the most significant of which is using variables without declaring them (the type is inferred by a suffix on the name). Xojo does not allow this. Use the OPTION EXPLICIT command in all your Visual Basic code to have VB enforce explicit variable declarations.</p>



<p><strong>Improved Error Handling</strong> &#8211; Xojo has modern exception handling using Try/Catch, Exception and App.UnhandledException.</p>



<h2 class="wp-block-heading">Enjoy Coding Again</h2>



<p>Whether you need VB for Mac, or VB for Linux or just an updated, rapid-application development tool for Windows, Xojo is that alternative! If you find yourself frustrated with VB.NET or you&#8217;re still looking for something to replace VB6, test out Xojo. If saving time and money is a concern, Xojo is a development tool you should consider. Go ahead and download Xojo and see how much you have missed coding like this! </p>



<p>Like all development tools we know Xojo isn&#8217;t a fit for <em>every</em> project, so all Xojo licenses come with a 90 day money-back guarantee. We&#8217;ve been around for more than <a href="https://blog.xojo.com/2021/04/01/suddenly-it-was-25-years-ago/">25 years</a> now, and we&#8217;ll be here when your next project is looking for a quick way to get off the ground and into development! Questions? I&#8217;m here for that, email me, a human being and Xojo fan, anytime at hello@xojo.com.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tutorial: Deploying Web Apps on Linux</title>
		<link>https://blog.xojo.com/2021/05/28/tutorial-deploying-web-apps-on-linux/</link>
		
		<dc:creator><![CDATA[Javier Menendez]]></dc:creator>
		<pubDate>Fri, 28 May 2021 15:00:00 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[App Hosting]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Hello World]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=8552</guid>

					<description><![CDATA[This tutorial provides a step-by-step guide to deploying Xojo web apps on a Linux server. You'll find deployment of more complex web apps can follow the same basic principles. If all of this seems too complex, Xojo Cloud is the easy, powerful and secure way to deploy web apps.]]></description>
										<content:encoded><![CDATA[<p>This tutorial provides a step-by-step guide to deploying Xojo web apps on a Linux server. We will use <strong>Ubuntu 20.4</strong> (64-bit) running on a remote server (VPS) in this example, but this tutorial should work on other Linux distros with minimal change, for example CentOS.</p>
<p>First, in order to deploy a web app you&#8217;ll need a way to access the remote server using the Terminal (macOS) or through the Command line, also a way to create and/or modify several files, and to copy files from your local computer to the remote server using (S)FTP.</p>
<blockquote><p><strong>Note:</strong> While we are using the &#8220;root&#8221; user for all the operations to keep the tutorial as short as possible, including files/folders/directories creation/edition and also for launching the web app, you&#8217;ll probably want to create a specific user with the proper privileges/group configuration for this. As we all know, you don&#8217;t usually want to run anything as the root user!</p></blockquote>
<p>Though this tutorial is focused on the <strong>deployment</strong> aspects of a web app, we&#8217;ll first create a very simple web app in Xojo. Feel free to use a web app of your own. At the end of this tutorial, you&#8217;ll find deployment of more complex web apps can follow the same basic principles.</p>
<h2>1. The Web App</h2>
<p>This very simple app will display a message when the button is clicked.  Start the Xojo IDE and choose Web from the Project Selector window:</p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8553 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/1-ProyectoWeb.png" alt="" width="882" height="538" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/1-ProyectoWeb.png 882w, https://blog.xojo.com/wp-content/uploads/2021/05/1-ProyectoWeb-300x183.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/1-ProyectoWeb-768x468.png 768w" sizes="auto, (max-width: 882px) 100vw, 882px" /></p>
<p>Click on the <code>WebPage1</code> item displayed in the Navigator to access the webpage Layout Editor.</p>
<p>Next, drag a button from the Library panel and drop it anywhere on the Layout Editor.</p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8554 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/2-Pagina.png" alt="" width="766" height="583" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/2-Pagina.png 766w, https://blog.xojo.com/wp-content/uploads/2021/05/2-Pagina-300x228.png 300w" sizes="auto, (max-width: 766px) 100vw, 766px" /></p>
<p>With the button still selected, add the <code>Pressed</code> Event Handler and type this line of code in the Code Editor:</p>
<pre>MessageBox "Hola Mundo"</pre>
<p>The classic &#8220;Hello World&#8221; en español, this is everything the web app will do.</p>
<h2>2. Setting the Deployment Options</h2>
<p>Click on the <code>Shared</code> option found under the <code>Build Settings</code> section in the Navigator. Next, enter <code>9000</code> as the port under the <code>Build Settings</code> section in the Inspector Panel.</p>
<blockquote><p><strong>Note:</strong> Adding the port is not required at this time because the port can be assigned when running the app once it is deployed to the server.</p></blockquote>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8567 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/InspectorPanel.png" alt="" width="301" height="710" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/InspectorPanel.png 301w, https://blog.xojo.com/wp-content/uploads/2021/05/InspectorPanel-127x300.png 127w" sizes="auto, (max-width: 301px) 100vw, 301px" /></p>
<h2>3. Compile the Web App</h2>
<p>Make sure to choose the Linux checkbox in <code>Build Settings</code>. Then, select <code>X86 64 bit</code> from the <code>Build</code> popup menu in the Inspector Panel.</p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8556 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/4-AjustesCompilacion.jpg" alt="" width="596" height="355" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/4-AjustesCompilacion.jpg 596w, https://blog.xojo.com/wp-content/uploads/2021/05/4-AjustesCompilacion-300x179.jpg 300w" sizes="auto, (max-width: 596px) 100vw, 596px" /></p>
<p>Next, click on the <code>Build</code> button in Xojo&#8217;s IDE toolbar. Once the app is compiled, you&#8217;ll get a Folder/Directory with the following items inside:</p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8557 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/5-BuiltApp.png" alt="" width="626" height="341" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/5-BuiltApp.png 626w, https://blog.xojo.com/wp-content/uploads/2021/05/5-BuiltApp-300x163.png 300w" sizes="auto, (max-width: 626px) 100vw, 626px" /></p>
<p>This is the folder you will copy to the server. I&#8217;m using the <a href="https://cyberduck.io">Cyberduck</a> app on macOS but you can choose any method you like.</p>
<h2>4. Copying the App Folder to the Server</h2>
<p>Make sure to copy the folder with the compiled app to the <code>/var/XojoApps</code> path on the server (you&#8217;ll need to create that folder/directory first). Once all the files have been copied, make sure to set <code>750</code> as the privileges value for the folder and files (choose the option to apply these recursively to all of them).</p>
<p><img loading="lazy" decoding="async" class="size-large wp-image-8568 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/SFTP-CopyFiles-1024x462.png" alt="" width="1024" height="462" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/SFTP-CopyFiles-1024x462.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/SFTP-CopyFiles-300x135.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/SFTP-CopyFiles-768x346.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/SFTP-CopyFiles.png 1426w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<h2>5. Installing Nginx</h2>
<p>If the server doesn&#8217;t have <a href="http://nginx.com">Nginx</a> already installed, install it now. Nginx is a light web server which provides more performance when compared with Apache (that is, it is able to serve more requests per second, among other improvements).</p>
<p>To install Nginx, access the remote server using SSH:</p>
<pre>&gt; SSH root@xxx.xxx.xxx.xxx</pre>
<p>Once the new session is open, type the following commands to install Nginx:</p>
<pre>$ sudo apt update
$ sudo apt install nginx</pre>
<h2></h2>
<h2>6. (Really) Basic Firewall Configuration</h2>
<p>Let&#8217;s tackle the firewall. It will need to accept incoming connections from Nginx. Nginx registers itself as a <a href="https://en.wikipedia.org/wiki/Uncomplicated_Firewall"><code>ufw</code></a> service during its installation. In order to simplify the deployment example, use the most restrictive option allowing only web traffic from port 80:</p>
<pre>$ sudo ufw allow 'Nginx HTTP'</pre>
<p>Type the following command to verify the changes:</p>
<pre>$ sudo ufw status</pre>
<p>The output should be similar to this (in my case access from SSH and 8080 ports are also enabled).</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8592" src="https://blog.xojo.com/wp-content/uploads/2021/05/7-ufw-status.png" alt="" width="390" height="143" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/7-ufw-status.png 390w, https://blog.xojo.com/wp-content/uploads/2021/05/7-ufw-status-300x110.png 300w" sizes="auto, (max-width: 390px) 100vw, 390px" /></p>
<blockquote><p><strong>Note:</strong> This tutorial does not discuss web security which in the overwhelming majority of cases should be a paramount issue and not ignored. Securing a server is a very complicated process which is why we take care of the for you with <a href="https://www.xojo.com/cloud">Xojo Cloud</a>.</p></blockquote>
<h2>7. Creating a New Nginx &#8220;block&#8221;</h2>
<p>Once Nginx is installed, Ubuntu automatically starts this process, so the web server should be active already. Test this by typing:</p>
<pre>$ systemctl status nginx</pre>
<p>The output  should be similar to this:</p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8559 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/8-Nginx-Status.png" alt="" width="841" height="192" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/8-Nginx-Status.png 841w, https://blog.xojo.com/wp-content/uploads/2021/05/8-Nginx-Status-300x68.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/8-Nginx-Status-768x175.png 768w" sizes="auto, (max-width: 841px) 100vw, 841px" /></p>
<p>Once the server is running, create a new server block. Think about this block like the virtual hosts on Apache. They will encapsulate the configuration details and will allow hosting of more than one domain on the same server.</p>
<p>Nginx loads these configuration files from the <code>/etc/nginx/sites-available</code> path. Create a new file using the <code>nano</code> editor:</p>
<pre>$ sudo nano /etc/nginx/sites-available/XojoDemo</pre>
<p>Next type the following block in the resulting new document:</p>
<pre>server	{
listen 80;
listen [::]:80;
root /var/XojoApps/XojoDemo;
index index.html index.htm index.nginx-debian.html;

server_name xxx.xxx.xxx.xxx;

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:9000;
}
}</pre>
<p>Replace <code>xxx.xxx.xxx.xxx</code> with your server IP address or the server domain (DNS record, if you have one pointing to it). We are instructing Nginx to redirect the traffic from port 80 to 9000 where our web app will be listening.</p>
<p>Save the file and exit <code>nano</code>. Next, enable the file by creating a link from the file to the <code>sites-enabled</code> directory where Nginx reads the configuration files:</p>
<pre>$ sudo ln -s /etc/nginx/sites-available/XojoDemo /etc/nginx/sites-enabled/</pre>
<p>Finally, check for syntax errors in the Nginx configuration files:</p>
<pre>$ sudo nginx -t</pre>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8560 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/9-Nginx-check.png" alt="" width="486" height="44" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/9-Nginx-check.png 486w, https://blog.xojo.com/wp-content/uploads/2021/05/9-Nginx-check-300x27.png 300w" sizes="auto, (max-width: 486px) 100vw, 486px" /></p>
<p>If everything is Ok, then reload <code>Nginx</code> so it reads the configuration files again and applies the changes:</p>
<pre>$ sudo systemctl restart nginx</pre>
<h2></h2>
<h2>8. Executing the Xojo Web App</h2>
<p>It&#8217;s time to start our Xojo web app and test the access from the web browser of your choice. Change the current path to the one where you copied the web app. In this example:</p>
<pre>$ cd /var/XojoApps/XojoDemo</pre>
<p>Next, start the app by issuing the following command:</p>
<pre>$ ./XojoDemo --port=9000</pre>
<p>Open a new window/tab in the web browser and enter the IP address/web domain pointing to the web server. There is the web app up and running:</p>
<p><img loading="lazy" decoding="async" class="size-large wp-image-8561 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/10-HolaMundo-1024x592.png" alt="" width="1024" height="592" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/10-HolaMundo-1024x592.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/10-HolaMundo-300x174.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/10-HolaMundo-768x444.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/10-HolaMundo.png 1070w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>Congrats! Now for the harsh truth. This way of executing web apps is not ideal. Because it started from the SSH session on the server, if we exit or interrupt the SSH connection, the web app will exit and won&#8217;t be accessible anymore for anyone. This problem also results in a 504 Gateway Time-Out page served by Nginx:</p>
<p><img loading="lazy" decoding="async" class="size-large wp-image-8562 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/11-TimeOut-1024x592.png" alt="" width="1024" height="592" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/11-TimeOut-1024x592.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/11-TimeOut-300x174.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/11-TimeOut-768x444.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/11-TimeOut.png 1070w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>In order to fix this problem, create a <code>Service</code>.  A service will allow the app to run without any intervention, even if there is a server interruption, for example, if the server is restarted or the app crashes.</p>
<h2>9. Creating a Service</h2>
<p>Type the following in the current SSH session:</p>
<pre>$ sudo nano /lib/systemd/XojoDemoApp.service</pre>
<p>Next, type the following snippet of text in the new, opened document (make sure to save the changes once you exit nano).</p>
<pre>[Service]
Type=simple
Restart=always
RestartSec=3
User=root
ExecStart=/var/XojoApps/XojoDemo/XojoDemo --port=9000
[Install]
WantedBy=multi-user.target</pre>
<p>Now that you have exited nano, and with the new service created, activate it with the following commands:</p>
<pre>$ sudo systemctl enable /lib/systemd/XojoDemoApp.service
$ sudo systemctl start XojoDemoApp.service</pre>
<p>Get the service status by typing the following command:</p>
<pre>$ sudo systemctl status XojoDemoApp.service</pre>
<p>You should get an output similar to this:</p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8570 aligncenter" src="https://blog.xojo.com/wp-content/uploads/2021/05/ServiceStatus.png" alt="" width="664" height="134" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/ServiceStatus.png 664w, https://blog.xojo.com/wp-content/uploads/2021/05/ServiceStatus-300x61.png 300w" sizes="auto, (max-width: 664px) 100vw, 664px" /></p>
<p>Now, you can be confident that the Xojo web app will be running even if you close the current SSH connection with the remote server <em>and</em> that it will restart even if the remote server is restarted or the app crashes.</p>
<p>If all of this seems more complex than you care to manage, <a href="https://www.xojo.com/cloud">Xojo Cloud</a> is the easy, powerful and secure way to deploy web apps. Xojo does not provide support for configuring your web server for use with Xojo web apps. To read more about deploying Xojo web apps, visit the Xojo Docs <a href="https://documentation.xojo.com/topics/application_deployment/web/deployment_overview.html">Web Deployment Overview</a> and the <a href="https://documentation.xojo.com/topics/application_deployment/web/deployment_details.html">Web Deployment Details</a> pages.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Running Xojo Web Applications in Docker</title>
		<link>https://blog.xojo.com/2021/05/17/running-xojo-web-applications-in-docker/</link>
		
		<dc:creator><![CDATA[Jürg Otter ]]></dc:creator>
		<pubDate>Mon, 17 May 2021 18:00:00 +0000</pubDate>
				<category><![CDATA[Guest Post]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Build Automation]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=8472</guid>

					<description><![CDATA[You can package your Xojo Web Apps in a Docker Image. That allows you to run an instance of your applications easily in a Docker Container. Docker provides the infrastructure to host the apps, start/stop them, switch between image versions - and much more.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">What is Docker?</h2>



<p>If you haven&#8217;t heard of Docker, go ahead and read their excellent Documentation: <a href="https://docs.docker.com/get-started/overview/">Docker &#8211; Overview</a>.</p>



<p>I&#8217;m just going to quote some basics from the Overview to give a brief introduction of Docker, Docker image and Docker container:</p>



<p><strong><em>Docker </em></strong><em>is an open platform for developing, shipping, and running applications. It provides the ability to package and run an application in a loosely isolated environment called a container. The isolation and security allow you to run many containers simultaneously on a given host. Containers are lightweight and contain everything needed to run the application, so you do not need to rely on what is currently installed on the host. You can easily share containers while you work, and be sure that everyone you share with gets the same container that works in the same way.</em></p>



<p><em>A </em><strong><em>Docker image </em></strong><em>is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization. To build your own image, you create a Dockerfile with a simple syntax for defining the steps needed to create the image and run it.</em></p>



<p><em>A </em><strong><em>Docker container </em></strong><em>is a runnable instance of an image. You can create, start, stop, move, or delete a container. By default, a container is relatively well isolated from other containers and its host machine. You can control how isolated a container’s network, storage, or other underlying subsystems are from other containers or from the host machine. A container is defined by its image as well as any configuration options you provide to it when you create or start it.</em></p>



<p><em>A </em><strong><em>Docker Registry</em></strong><em> is a stateless, highly scalable server side application that stores and lets you distribute Docker images.</em></p>



<h2 class="wp-block-heading">Why use Docker with a Xojo Web App?</h2>



<p>You can package your Xojo Web Apps in a Docker Image. That allows you to run an instance of your applications easily in a Docker Container. Docker provides the infrastructure to host the apps, start/stop them, switch between image versions &#8211; and much more.</p>



<p>The Docker Images containing your Xojo Web Apps can be copied to other machines. This might be some Linux or macOS machine <em>(Windows seems to be a bit more tricky)</em>, a Cloud Service &#8211; or even a Synology NAS. You then can import the Images on the Docker environment of those machines, and serve your apps from there.</p>



<p>If you&#8217;re pushing the Docker Images to a Registry (e.g. Docker Hub), it gets even more convenient. Docker Hub is a service provided by Docker for finding and sharing container images with your team or the public. So you&#8217;ll build the Docker Image with your Xojo Web App, push it to the Registry. After that, you (or your team, or everyone) can just pull the Images to their Docker infrastructure and run them in a Container.</p>



<h2 class="wp-block-heading">How to build a Docker Image containing a Xojo Web App?</h2>



<p>One could answer obviously: it depends. But let me try to explain the basic required steps. For this example we&#8217;re going to use a macOS machine to build the Xojo Web App and Docker Image. Then we&#8217;ll deploy and run a Docker Container on the local developer machine and on a Synology NAS.</p>



<h3 class="wp-block-heading"><strong>Requirements</strong></h3>



<ul class="wp-block-list"><li>Xojo with a license allowing you to build a Xojo Web App for Target Linux (Intel, 64Bit). </li></ul>



<p>Docker Desktop installed on the macOS developer machine. Download and install it from here: <a href="https://docs.docker.com/docker-for-mac/install/">Docker for macOS</a>. After that you should have the Docker GUI up and running. And in Terminal.app you should have the command line tools available. You can double check this by entering this command: </p>



<pre class="wp-block-preformatted">docker version</pre>



<ul class="wp-block-list"><li>We&#8217;re going to build a Docker Image based on Ubuntu (Linux). To run a Docker Container with this image, we obviously need a machine supporting this. Both macOS and the Synology NAS will work just fine.</li></ul>



<p>Are you ready and set up? So let&#8217;s go and try this.</p>



<h3 class="wp-block-heading"><strong>Build a Xojo Web App</strong></h3>



<p>Open a Xojo Project with a Web Application. I&#8217;m going to use a CRC Calculator I&#8217;ve written. Debug-Run it locally to make sure the Web App works as expected.</p>



<p>Once we&#8217;re ready to build we should think of what we&#8217;re going to need for the Docker Image. Check the following properties in your Xojo Project:</p>



<ul class="wp-block-list"><li>The most obvious one: Tick the &#8220;<strong>Build Target: Linux, x86-64Bit&#8221;. </strong>Since our Docker Image will run Ubuntu / Linux-64Bit, we need the Xojo Web App to run in such an environment.</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="608" src="https://blog.xojo.com/wp-content/uploads/2021/05/1_Build_Target-1024x608.png" alt="" class="wp-image-8508" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/1_Build_Target-1024x608.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/1_Build_Target-300x178.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/1_Build_Target-768x456.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/1_Build_Target-1536x912.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/1_Build_Target.png 2000w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list"><li>Then in &#8220;Build Settings &#8211; Shared&#8221;, set the &#8220;<strong>Build &#8211; Port: 80</strong>&#8220;. In fact it doesn&#8217;t really matter which Port you&#8217;re choosing. All that is important for now is that you know which one it is.</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="608" src="https://blog.xojo.com/wp-content/uploads/2021/05/2_Build_Port-1024x608.png" alt="" class="wp-image-8509" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/2_Build_Port-1024x608.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/2_Build_Port-300x178.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/2_Build_Port-768x456.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/2_Build_Port-1536x912.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/2_Build_Port.png 2000w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list"><li>That&#8217;s about all we need to do within the Xojo IDE &#8211; so let&#8217;s hit <strong>&#8220;Build&#8221;</strong>. </li></ul>



<p>We now have the built Web App ready. Next step is to package it in a Docker Image.</p>



<h3 class="wp-block-heading"><strong>Dockerfile</strong></h3>



<p>Open the Web App&#8217;s Build Folder in Finder. Next we need to write the instructions to get it in a Docker Image. Open your favourite Text Editor. Create a Text-File with Filename: <em>Dockerfile</em> (no file extension). Save it in the Build folder (next to the application&#8217;s executable file). The Content we&#8217;re saving in Dockerfile is:</p>



<pre class="wp-block-preformatted">#BASE IMAGE
FROM ubuntu:20.04

#INSTALL REQUIRED LIBRARIES
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update &amp;&amp; apt-get install -y libunwind8 libglib2.0

#ADD APPLICATION TO DOCKER IMAGE
ADD / /app/

#EXPOSE PORT AND RUN APPLICATION
EXPOSE 80
WORKDIR /app
CMD /app/CRCCalculatorWeb</pre>



<p>This describes how Docker is going to create the Docker Image. Let&#8217;s briefly explain the steps of this Dockerfile:</p>



<ul class="wp-block-list"><li>We&#8217;re going to use Ubuntu 20.04 as a base image. That about the same as saying: &#8220;Let&#8217;s set up an environment running Ubuntu 20.04 first.&#8221;</li></ul>



<ul class="wp-block-list"><li>We then set an environment variable allowing to install updates without user interaction. Then the system gets updated, and required Libraries installed (libunwind8, libglib2.0).</li></ul>



<ul class="wp-block-list"><li>The whole Content of the Build Folder (or in other words: everything next to the Dockerfile &#8211; that&#8217;s basically our Xojo Web App) is being copied into the image to the location /app</li></ul>



<ul class="wp-block-list"><li>Expose 80: Do you remember? That&#8217;s the &#8220;Build Port&#8221; we&#8217;ve set in the Xojo IDE. So this tells that when running this Image as a Container Instance later we can attach to this &#8220;virtual port&#8221;. It doesn&#8217;t matter if several applications in different Images/Containers use the same port. That&#8217;s because when running an Instance, we can later configure the running Instance to map the Ports, e.g.: &#8220;8088 (external) -&gt; 80 (internal)&#8221;. So a second Web App Instance or App could use e.g.&#8221;8089 (external) -&gt; 80 (internal)&#8221;. That&#8217;s why for our own convenience we can use Port 80 for every of our Xojo Web Apps&#8217;s Docker Image.</li></ul>



<ul class="wp-block-list"><li>Finally, the instructions tell where the working directory is, and with the last command the Xojo Web App is being launched.</li></ul>



<p>Alright &#8211; everything is ready so that we can now create the Docker Image.</p>



<h3 class="wp-block-heading"><strong>Docker Image</strong></h3>



<p>Open Terminal.app and change directory to the Build Folder of the Web App:</p>



<pre class="wp-block-preformatted">cd /path/to/your/xojo-webapp-project/Builds\ -\ CRCCalculatorWeb/Linux\ 64\ bit/CRCCalculatorWeb</pre>



<p>You&#8217;re now in the folder with the Dockerfile and your Web App.</p>



<p>A Docker Image always needs a <strong>Tag</strong>. Such a Tag looks like this:</p>



<pre class="wp-block-preformatted">jotools/crccalculator:1.0.0-dev</pre>



<p>The parts are: (company-name)/(product-name):(version-label-tag)</p>



<p>So&#8230; let&#8217;s build the Docker Image &#8211; enter this in Terminal:</p>



<pre class="wp-block-preformatted">docker build -t jotools/crccalculator:1.0.0-dev .</pre>



<p>What this does is: Build a Docker Image with Tag ___ from &#8220;this current directory&#8221; (the dot at the end).</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://blog.xojo.com/wp-content/uploads/2021/05/3_Docker-Build-1024x666.png" alt="pastedGraphic_2.png" class="wp-image-8497" width="904" height="588" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/3_Docker-Build-1024x666.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/3_Docker-Build-300x195.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/3_Docker-Build-768x500.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/3_Docker-Build.png 1140w" sizes="auto, (max-width: 904px) 100vw, 904px" /></figure>



<p><em>Side-Note: If you&#8217;re re-building an Image with the same Tag of an already existing Image, it gets overwritten. You could also first remove an existing image like this:</em></p>



<pre class="wp-block-preformatted"><br>docker image rm jotools/crccalculator:1.0.0-dev</pre>



<p>You can now launch the Docker Desktop .app and find your Image there:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="590" src="https://blog.xojo.com/wp-content/uploads/2021/05/4_Docker-Image-1024x590.png" alt="" class="wp-image-8510" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/4_Docker-Image-1024x590.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/4_Docker-Image-300x173.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/4_Docker-Image-768x442.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/4_Docker-Image-1536x885.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/4_Docker-Image-2048x1180.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>If you prefer to see the image using the command line:</p>



<pre class="wp-block-preformatted">docker image ls</pre>



<h3 class="wp-block-heading"><strong>Run Docker Container</strong></h3>



<p>Let&#8217;s now take the Image and run a new Docker Container using that Image. We will configure the Docker Container Instance to use the local Port 8088. In Docker Desktop GUI:</p>



<ul class="wp-block-list"><li>Select the Image, click on the Button &#8220;Run&#8221;</li></ul>



<ul class="wp-block-list"><li>Expand the optional settings, enter a Container Name of your choice and Map the &#8220;LocalPort: 8088&#8221; to &#8220;Container Port: 80&#8221;</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="590" src="https://blog.xojo.com/wp-content/uploads/2021/05/5_Docker-Container-Setup-1024x590.png" alt="" class="wp-image-8511" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/5_Docker-Container-Setup-1024x590.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/5_Docker-Container-Setup-300x173.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/5_Docker-Container-Setup-768x442.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/5_Docker-Container-Setup-1536x885.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/5_Docker-Container-Setup-2048x1180.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list"><li>Then&#8230; click on &#8220;Run&#8221;</li></ul>



<p>And that&#8217;s it &#8211; we have the Container up and running:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="590" src="https://blog.xojo.com/wp-content/uploads/2021/05/6_Docker-Container-Running-1-1024x590.png" alt="" class="wp-image-8513" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/6_Docker-Container-Running-1-1024x590.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/6_Docker-Container-Running-1-300x173.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/6_Docker-Container-Running-1-768x442.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/6_Docker-Container-Running-1-1536x885.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/6_Docker-Container-Running-1-2048x1180.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>If you prefer the command line:</p>



<pre class="wp-block-preformatted">docker run -d --publish=8088:80 --name crccalculator jotools/crccalculator:1.0.0-dev</pre>



<p>Let&#8217;s access our Xojo built Web App running in the local Docker Container using Safari:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://blog.xojo.com/wp-content/uploads/2021/05/7_Safari-Test-1024x651.png" alt="pastedGraphic_6.png" class="wp-image-8500" width="889" height="563"/></figure>



<p><em>Side-Note: If you just want to try this example project then you can pull the image like this in Terminal.app:</em></p>



<pre class="wp-block-preformatted">docker pull jotools/crccalculator:1.0.0</pre>



<h3 class="wp-block-heading"><strong>Export Docker Image</strong></h3>



<p>The easiest way is to push the Image to a Registry such as Docker Hub. That obviously requires a registration &#8211; so we won&#8217;t cover this here and now.</p>



<p>Let&#8217;s export the Image using Terminal.app.</p>



<p>You should still be in the Build &#8211; directory of the Xojo Web App. If not, change to that folder.</p>



<p>Then export the Docker Image to a file like this:</p>



<pre class="wp-block-preformatted">docker save jotools/crccalculator:1.0.0-dev | gzip &gt; ./CRCCalculatorWeb.dockerimage.tgz</pre>



<p>This command is saving the Image/Tag to a .tgz located in the current directory.</p>



<h3 class="wp-block-heading"><strong>Run Docker Image on a Synology NAS</strong></h3>



<p>If you have a Synology NAS supporting Docker &#8211; this is how you can run the exported Image on your NAS:</p>



<ul class="wp-block-list"><li>First of course: Install the Synology Docker Package</li></ul>



<ul class="wp-block-list"><li>Copy the exported <em>CRCCalculatorWeb.dockerimage.tgz</em> to a Share on the NAS</li></ul>



<ul class="wp-block-list"><li>Launch the Docker .app on the NAS</li></ul>



<ul class="wp-block-list"><li>Under &#8220;Images&#8221;: Add -&gt; From File -&gt; (choose your <em>CRCCalculatorWeb.dockerimage.tgz</em>) </li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="662" src="https://blog.xojo.com/wp-content/uploads/2021/05/8_Synology_Docker-Image-1024x662.png" alt="" class="wp-image-8517" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/8_Synology_Docker-Image-1024x662.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/8_Synology_Docker-Image-300x194.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/8_Synology_Docker-Image-768x497.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/8_Synology_Docker-Image-1536x994.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/8_Synology_Docker-Image-2048x1325.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list"><li>Select the imported Image, click on &#8220;Run&#8221;</li></ul>



<ul class="wp-block-list"><li>Enter a Containername of your choice:</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="662" src="https://blog.xojo.com/wp-content/uploads/2021/05/9_Synology_Docker-Container-1-1024x662.png" alt="" class="wp-image-8518" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/9_Synology_Docker-Container-1-1024x662.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/9_Synology_Docker-Container-1-300x194.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/9_Synology_Docker-Container-1-768x497.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/9_Synology_Docker-Container-1-1536x994.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/9_Synology_Docker-Container-1-2048x1325.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list"><li>Click the Button &#8220;Advanced Settings&#8221;: Same story here &#8211; Map the Local&lt;-&gt;Container Port. In this example: Local 8099 &lt;-&gt; Container 80</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="662" src="https://blog.xojo.com/wp-content/uploads/2021/05/10_Synology_Docker-Container-2-1024x662.png" alt="" class="wp-image-8522" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/10_Synology_Docker-Container-2-1024x662.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/10_Synology_Docker-Container-2-300x194.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/10_Synology_Docker-Container-2-768x497.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/10_Synology_Docker-Container-2-1536x994.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/10_Synology_Docker-Container-2-2048x1325.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list"><li>Finish the assistant. The Container should now be up and running:</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="662" src="https://blog.xojo.com/wp-content/uploads/2021/05/11_Synology_Docker-Container-Running-1024x662.png" alt="" class="wp-image-8523" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/11_Synology_Docker-Container-Running-1024x662.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/11_Synology_Docker-Container-Running-300x194.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/11_Synology_Docker-Container-Running-768x497.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/11_Synology_Docker-Container-Running-1536x994.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/11_Synology_Docker-Container-Running-2048x1325.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Let&#8217;s access our Xojo built Web App running in the Docker Container of the Synology NAS using Safari:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="662" src="https://blog.xojo.com/wp-content/uploads/2021/05/12_Safari-Test-1024x662.png" alt="" class="wp-image-8524" srcset="https://blog.xojo.com/wp-content/uploads/2021/05/12_Safari-Test-1024x662.png 1024w, https://blog.xojo.com/wp-content/uploads/2021/05/12_Safari-Test-300x194.png 300w, https://blog.xojo.com/wp-content/uploads/2021/05/12_Safari-Test-768x497.png 768w, https://blog.xojo.com/wp-content/uploads/2021/05/12_Safari-Test-1536x994.png 1536w, https://blog.xojo.com/wp-content/uploads/2021/05/12_Safari-Test-2048x1325.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><strong>What next?</strong></h2>



<p>There are a lot of features and possibilities which we won&#8217;t cover here. Let&#8217;s just pick a couple and briefly explain without going into detail. You&#8217;ll find excellent documentation on Docker&#8217;s Website if you want or need to dig in further.</p>



<h3 class="wp-block-heading"><strong>Docker and Persisted Storage</strong></h3>



<p>Note that this example has no persisted storage. Which means that you can save files within a Container &#8211; but once you stop or remove the Container (e.g. to run a new Container with a newer Image version) the created data is gone. That&#8217;s a good thing &#8211; as a Container will always behave the same when deployed, not being cluttered with data that has come from somewhere.</p>



<p>If your Web App requires to store data on the filesystem you should add a Volume. In the Dockerfile add a line like this:</p>



<pre class="wp-block-preformatted">VOLUME /data</pre>



<p>You then can have your WebApp save data to the folder /data.</p>



<p>If you run a Container from such an Image &#8211; have a look at the Advanced Settings. Since the Image exposes a Volume, you can choose a local folder (on the machine where Docker is serving the Container) to be attached to /data. Same story on the Synology NAS.</p>



<p>Once you remove the Docker Container, the Data will still be there. So you can run another Container (e.g. with a newer version of your app), attach the same/existing data-folder. That way you can continue and keep existing data.</p>



<h3 class="wp-block-heading"><strong>Environment Variables</strong></h3>



<p>Especially if you&#8217;re going to Deploy the Docker Image on various environments, you might want some &#8220;settings&#8221;. One approach is to use Environment Variables in the Dockerfile:</p>



<pre class="wp-block-preformatted">ENV MY_CUSTOM_SETTING=4430</pre>



<p>Again in the Advanced options when running a Container you can override these Environment Variables to fit your needs.</p>



<h3 class="wp-block-heading"><strong>Build Automation</strong></h3>



<p>If you&#8217;re building regularly and don&#8217;t want to enter commands in the command line after every build you could think about a Post Build Script which builds the Docker Image and optionally even pushes it to a Registry (e.g. Docker Hub).</p>



<p>An example is available here: <a href="https://www.jo-tools.ch/xojo/xojowebapp2docker/">Example Project &#8211; Xojo Web App 2 Docker</a></p>



<h3 class="wp-block-heading"><strong>Docker Registry</strong></h3>



<p>The easiest way is to distribute a local Docker Image is to use a Registry such as Docker Hub. That obviously requires a registration and your Docker Client to be signed in. You can then push the Docker Image to the Registry, and pull it from there on the Docker Clients.</p>



<pre class="wp-block-preformatted">docker push jotools/crccalculator:1.0.0-dev</pre>



<pre class="wp-block-preformatted">docker pull jotools/crccalculator:1.0.0-dev</pre>



<h3 class="wp-block-heading"><strong>Restart policy</strong></h3>



<p>In order to automatically launch a Docker Container after a reboot (of the host machine; of the Docker daemon): see Docker&#8217;s <a href="https://docs.docker.com/config/containers/start-containers-automatically/">Restart Policy Documentation</a>.&nbsp;</p>



<p>This command changes the restart policy for an already running container named crccalculator:</p>



<pre class="wp-block-preformatted">docker update --restart unless-stopped crccalculator</pre>



<p>And this command will ensure all currently running containers will be restarted unless stopped:</p>



<pre class="wp-block-preformatted">docker update --restart unless-stopped $(docker ps -q)</pre>



<h2 class="wp-block-heading"><strong>That&#8217;s all Folks!</strong></h2>



<p>I hope this brief introduction of how a Xojo built Web Application can be used with Docker has been helpful to some, food for thought to others.</p>



<p>I wish you all the best and I&#8217;m curious if the Xojo Forum will get new posts in the near future with Docker Hub Links to interesting Xojo Web Apps which you do provide to the community.</p>



<p><em><em>Jürg Otter is a long term user of Xojo and working for </em><a href="https://www.cmiag.ch/"><em>CM Informatik AG</em></a><em>. Their Application </em><a href="https://cmi-bildung.ch/"><em>CMI LehrerOffice</em></a><em> is a Xojo Design Award Winner 2018. In his leisure time Jürg provides some </em><a href="https://www.jo-tools.ch/xojo/"><em>bits and pieces for Xojo Developers</em></a><em>.</em></em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Setting up puTTY to create a SSH tunnel from Windows to Xojo Cloud</title>
		<link>https://blog.xojo.com/2020/10/29/setting-up-putty-to-create-a-ssh-tunnel-from-windows-to-xojo-cloud/</link>
		
		<dc:creator><![CDATA[Wayne Golding ]]></dc:creator>
		<pubDate>Thu, 29 Oct 2020 10:00:52 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Guest Post]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=7644</guid>

					<description><![CDATA[Here’s the configuration document for getting puTTY to connect to the Xojo Cloud database.  You might want to note that while Windows 10 now includes a SSH client it doesn’t support SSH tunnels very well due to always executing a connection command.]]></description>
										<content:encoded><![CDATA[
<p>There are just a few steps to get puTTY to connect to your Xojo Cloud database.&nbsp; You might want to note that while Windows 10 now includes a SSH client, it doesn’t support SSH tunnels very well due to always executing a connection command.</p>



<p>First, expand the SSH tree in the categories list and select tunnels.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="678" height="662" src="https://blog.xojo.com/wp-content/uploads/2020/10/image.png" alt="" class="wp-image-7645" srcset="https://blog.xojo.com/wp-content/uploads/2020/10/image.png 678w, https://blog.xojo.com/wp-content/uploads/2020/10/image-300x293.png 300w" sizes="auto, (max-width: 678px) 100vw, 678px" /></figure>



<p>Add a new forwarded port, here we are using port 5432 for Postgres, but you could also use 3306 for mySQL.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="678" height="664" src="https://blog.xojo.com/wp-content/uploads/2020/10/image-1.png" alt="" class="wp-image-7646" srcset="https://blog.xojo.com/wp-content/uploads/2020/10/image-1.png 678w, https://blog.xojo.com/wp-content/uploads/2020/10/image-1-300x294.png 300w" sizes="auto, (max-width: 678px) 100vw, 678px" /></figure>



<p>Press the &#8220;Add&#8221; button to save the forward and tick the &#8220;Local ports accept connections from other hosts&#8221; checkbox.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="678" height="664" src="https://blog.xojo.com/wp-content/uploads/2020/10/image-2.png" alt="" class="wp-image-7650" srcset="https://blog.xojo.com/wp-content/uploads/2020/10/image-2.png 678w, https://blog.xojo.com/wp-content/uploads/2020/10/image-2-300x294.png 300w" sizes="auto, (max-width: 678px) 100vw, 678px" /></figure>



<p>Select the SSH tree and tick the “Don’t start a shell or command at all&#8221; checkbox. This is the bit missing from the Windows native SSH client.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="678" height="664" src="https://blog.xojo.com/wp-content/uploads/2020/10/image-3.png" alt="" class="wp-image-7651" srcset="https://blog.xojo.com/wp-content/uploads/2020/10/image-3.png 678w, https://blog.xojo.com/wp-content/uploads/2020/10/image-3-300x294.png 300w" sizes="auto, (max-width: 678px) 100vw, 678px" /></figure>



<p>Select &#8220;Session&#8221; at the very top of the categories list and enter your Xojo Cloud IP address along with a session name and Save so you’ll have this configuration available to you next time.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="678" height="664" src="https://blog.xojo.com/wp-content/uploads/2020/10/image-4.png" alt="" class="wp-image-7652" srcset="https://blog.xojo.com/wp-content/uploads/2020/10/image-4.png 678w, https://blog.xojo.com/wp-content/uploads/2020/10/image-4-300x294.png 300w" sizes="auto, (max-width: 678px) 100vw, 678px" /></figure>



<p>Now you can open the connection where you will be prompted for your SSH Username (dbadmin) &amp; password.&nbsp; If this is successful, you will be left with a terminal window that appears to do nothing – leave it open until you want to disconnect.</p>



<p>Once the tunnel is established you can use localhost as the host address of your Postgres or MySQL database. </p>



<p><em>Wayne Golding has been a Xojo developer since 2005 and is a Xojo MVP. He operates the IT Company <a href="http://www.axisdirect.nz">Axis Direct Ltd </a>which primarily develops applications using Xojo that integrate with Xero www.xero.com. Wayne’s hobby is robotics where he uses Xojo to build applications for his Raspberry Pi, often implementing IoT for remote control.</em></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Quick Tips: Xojo Cloud and Databases</title>
		<link>https://blog.xojo.com/2020/09/02/quick-tips-xojo-cloud-and-databases/</link>
		
		<dc:creator><![CDATA[Javier Menendez]]></dc:creator>
		<pubDate>Wed, 02 Sep 2020 10:00:00 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=7209</guid>

					<description><![CDATA[Based on recent conversations with a couple Xojo users, here are a few quick tip for uploading and working with SQLite and MySQL databases on Xojo Cloud.]]></description>
										<content:encoded><![CDATA[<p>Based on recent conversations with a couple Xojo users, here are a few quick tips for uploading and working with SQLite and MySQL databases on Xojo Cloud.</p>
<p>If you aren&#8217;t already familiar with <a href="https://www.xojo.com/cloud/">Xojo Cloud</a>, it&#8217;s simple, secure, maintenance-free hosting for your Xojo web apps. </p>
<p><span id="more-7209"></span></p>
<h3>SQLite Database Tip</h3>
<p>For the first tip, which involves SQLite databases, this is the scenario: Let&#8217;s say you added a SQLite database to the project using a Build step and set the proper Folder/Subfolder, and then you connect to it from the <code>Session.Opening</code> event (or any other, for this case) in order to access its tables.</p>
<p>Even if you are running your Web app in local or debug mode (from the IDE) the connection to the SQLite database works, no matter if you&#8217;re typing the database file name in either upper or lowercase. Remember, when you are deploying the database to Xojo Cloud, you need to pass along the database name using the proper lowercase and uppercase characters in its original name.</p>
<p>Let&#8217;s suposse that the original database name on disk is &#8220;MyPrettyDatabase.sqlite&#8221;, then you&#8217;re using the following code in order to connect to it:</p>
<pre>#if DebugBuild then
    f=SpecialFolder.Desktop.Child("myprettydatabase.sqlite")
#else
    f=specialfolder.documents.child("myprettydatabase.sqlite")
#EndIf

BBDD.DatabaseFile=f

Try

    BBDD.Connect

catch e as IODatabaseException

End Try</pre>
<p>In this case, when running the web app from your computer everything will work fine (because most desktop operating systems use a case-insensitive file system, although Linux is often case-sensitive); but if you deploy the web app to Xojo Cloud you&#8217;ll find yourself with a database that does not connect. Fixing this is as simple as typing the string representing the database filename observing the uppercase characters existing in its original name:</p>
<pre>#if DebugBuild then
    f=SpecialFolder.Desktop.Child("myprettydatabase.sqlite")
#else
    f=specialfolder.documents.child("MyPrettyDatabase.sqlite")
#EndIf

    BBDD.DatabaseFile=f

Try

    BBDD.Connect

catch e as DatabaseException

End Try</pre>
<p><em><strong>SQLite Tip</strong>: Xojo 2020r1 updated to SQLite 3.31.1, which adds some <a href="https://blog.xojo.com/2020/08/31/sqlite-3-31-1-new-features/">cool new features</a>!</em></p>
<h3>MySQL/MariaDB Database Tip</h3>
<p>The second problem we&#8217;re solving involves the connection with MySQL/MariaDB databases hosted on a remote server from your Xojo Cloud app.</p>
<p>Although connecting to a remote MySQL database is <a href="https://documentation.xojo.com/api/databases/mysqlcommunityserver.html">well documented here</a>, let&#8217;s review. If you need to establish this kind of connection, remember to open the Xojo Cloud firewall port first.</p>
<p>For example, something like this code snippet will let the web app work when deployed on Xojo Cloud and when you are doing a local test running it from the IDE (debug mode):</p>
<pre>#If TargetXojoCloud
    Var fwp As New XojoCloud.FirewallPort(3306, XojoCloud.FirewallPort.Direction.Outgoing)
    fwp.Open
    If fwp.isOpen Then
        connectDatabase
    End If
#Else
    ConnectDatabase
#EndIf</pre>
<p>Where, in this case, ConnectDatabase is the method in charge of doing the real connection setting the usual parameters agains the MySQLCommunityServer instance.</p>


<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Modern Control Panel + 4 More Powerful Features New in Xojo Cloud</title>
		<link>https://blog.xojo.com/2020/08/27/modern-control-panel-powerful-features-new-xojo-cloud/</link>
		
		<dc:creator><![CDATA[Geoff Perlman]]></dc:creator>
		<pubDate>Thu, 27 Aug 2020 11:17:00 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[App Hosting]]></category>
		<category><![CDATA[CGI]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=7389</guid>

					<description><![CDATA[Our vision for Xojo Cloud is a simple, one-click deployment option for your web app. Xojo Cloud allows you to focus on developing your app instead of dealing with the nitty gritty details of web hosting and security. Xojo Cloud has tons of new stuff to compliment apps built with Xojo 2020r1! ]]></description>
										<content:encoded><![CDATA[
<p>Our vision for Xojo Cloud has always been a simple, safe, one-click deployment option for your web apps. Xojo Cloud allows you to focus on developing your apps instead of dealing with the nitty gritty details of web hosting and security. Xojo Cloud has tons of new stuff to compliment apps built with Xojo 2020r1! </p>



<p>Here&#8217;s what&#8217;s new:</p>



<ul class="wp-block-list"><li>Apps deployed to Xojo Cloud are now 64-bit stand-alone apps for better security and faster performance*</li><li>Apps deployed to Xojo Cloud are now automatically load-balanced to support more concurrent users</li><li>Domains can now be <a href="https://documentation.xojo.com/index.php?title=UserGuide:Xojo_Cloud_General_Information&amp;oldid=71856#Pointing_Your_Domain_or_SubDomain_at_A_Specific_Xojo_Cloud_App">pointed at individual web apps</a></li><li>Unique <a href="https://documentation.xojo.com/index.php?title=UserGuide:Xojo_Cloud_General_Information&amp;oldid=71856#Using_A_XojoCloud.Net_Subdomain">subdomains are available</a> on the xojocloud.net domain for users who don&#8217;t have dedicated app domains</li><li>Manage team members and grant access to your server directly from the all-new, made-with-Xojo, <a href="https://documentation.xojo.com/topics/xojo_cloud/introduction_to_xojo_cloud.html_Control_Panel">Xojo Cloud Control Panel</a></li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="484" src="https://blog.xojo.com/wp-content/uploads/2020/08/Xojo-Cloud-Control-Panel.jpg" alt="" class="wp-image-7390" srcset="https://blog.xojo.com/wp-content/uploads/2020/08/Xojo-Cloud-Control-Panel.jpg 800w, https://blog.xojo.com/wp-content/uploads/2020/08/Xojo-Cloud-Control-Panel-300x182.jpg 300w, https://blog.xojo.com/wp-content/uploads/2020/08/Xojo-Cloud-Control-Panel-768x465.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p>Xojo Cloud eliminates the complicated process of deploying a web application; it requires no configuration, includes security, automatic backups and predictable pricing. Xojo Cloud servers are available in locations around the globe and start at <a href="https://www.xojo.com/store/#cloud">just $49/month</a>. More details about using Xojo Cloud can be found in the <a href="https://documentation.xojo.com/topics/xojo_cloud/introduction_to_xojo_cloud.html">User&#8217;s Guide</a>.</p>



<p>*CGI-based web apps built with previous versions of Xojo are still supported.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Best Practices for Working with a Xojo Cloud Server</title>
		<link>https://blog.xojo.com/2020/06/29/best-practices-for-working-with-a-xojo-cloud-server/</link>
		
		<dc:creator><![CDATA[Greg O'Lone]]></dc:creator>
		<pubDate>Mon, 29 Jun 2020 19:52:26 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=6062</guid>

					<description><![CDATA[Since I&#8217;ve been asked about this by new and current Xojo Cloud users, let&#8217;s cover some basic best practices for everyone. Don&#8217;t ping or port&#8230;]]></description>
										<content:encoded><![CDATA[<p>Since I&#8217;ve been asked about this by new and current Xojo Cloud users, let&#8217;s cover some basic best practices for everyone.</p>
<ol>
<li><strong>Don&#8217;t ping or port scan the server. </strong>Our adaptive firewall is designed to look for behavior which looks like the type of traffic that comes just before an attack. Pings and Port Scans will get you blocked from your own server for a period of time. If your server isn&#8217;t accessible, head on over to https://downforeveryoneorjustme.com and type in your server&#8217;s IP address. That will help us understand if the problem is on your end or ours. Restarting or Deploying to your server will clear this up for you.</li>
<li><strong>Stats only work after you have deployed. </strong>Displaying stats in the IDE can be processor intensive for your Xojo Cloud server, especially if there is more than one user requesting them. To prevent this, statistics are only available to users who have been specifically whitelisted on the firewall and the easiest way to do that is to deploy, even if it&#8217;s a simple empty app.</li>
<li><strong>Databases require memory and processor cores.</strong> When adding a database to your Xojo Cloud server, it&#8217;s important to remember that they do require memory and CPU processor cores to run. For the best experience, we recommend that users upgrade to a Xojo Cloud server with at least 4 vCPUs.</li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Setting up SSL in Xojo Cloud</title>
		<link>https://blog.xojo.com/2019/04/19/setting-up-ssl-in-xojo-cloud/</link>
		
		<dc:creator><![CDATA[Xojo]]></dc:creator>
		<pubDate>Fri, 19 Apr 2019 10:00:17 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[App Hosting]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=5683</guid>

					<description><![CDATA[Setting up SSL in Xojo Cloud is as simple as adding your domain name. ]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5684" src="https://blog.xojo.com/wp-content/uploads/2019/04/XojoCloudSSL.gif" alt="" width="1232" height="1080" /></p>
<p><span id="more-5683"></span></p>
<p>that&#8217;s the simplicity of Xojo Cloud.</p>
<ol>
<li>click &#8220;Set Up SSL&#8221;,</li>
<li>type your domain,</li>
<li>click &#8220;Enable SSL&#8221;</li>
</ol>
<p>SSL Done.</p>
<p>Learn more about <a href="https://www.xojo.com/cloud/">Xojo Cloud</a>, read the <a href="https://documentation.xojo.com/topics/xojo_cloud/introduction_to_xojo_cloud.html_Control_Panel">User Guide</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Change your DNS settings for a smooth transition to a bigger, better server</title>
		<link>https://blog.xojo.com/2019/03/13/change-your-dns-settings-for-a-smooth-transition-to-a-bigger-better-server/</link>
		
		<dc:creator><![CDATA[Jason Parsley]]></dc:creator>
		<pubDate>Wed, 13 Mar 2019 10:00:51 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=5516</guid>

					<description><![CDATA[But moving your projects from one server to another is easier said than done. You'll need to plan carefully to avoid downtime. Here is a simple change you can make to your DNS settings in order to limit downtime, making the move to a better server smoother.]]></description>
										<content:encoded><![CDATA[<p>Most <a href="https://www.xojo.com/cloud/">Xojo Cloud</a> users have already switched to the newer Xojo Cloud servers. These new servers have more RAM and SSDs and are the priced lower or the same as our previous servers. But moving your projects from one server to another is easier said than done. You&#8217;ll need to plan carefully to avoid downtime. Here is a simple change you can make to your DNS settings in order to limit downtime, making the move to a better server smoother.</p>
<p><span id="more-5516"></span></p>
<p>The current A record in your DNS settings points to your existing Xojo Cloud server&#8217;s IP address and probably has a TTL (time to live) of 24 hours. At least 24 hours before you plan to move your server data and change the IP address, set the TTL to 5 minutes. Doing this means that you can change the IP address to your new server IP address and most of the DNS servers out there should pick up on the change in around 5 minutes.</p>
<p>After you have made the move to the new server, you should set your TTL back to 24 hours, or whatever it was set to previously. And that&#8217;s it!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>5 Reasons to Rely on Cloud Services</title>
		<link>https://blog.xojo.com/2018/04/23/5-reasons-to-rely-on-cloud-services/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Mon, 23 Apr 2018 10:00:02 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<guid isPermaLink="false">http://blog.xojo.com/?p=2730</guid>

					<description><![CDATA[The Cloud is everywhere these days. And lots of companies offer Cloud products or services. Why should you use them?]]></description>
										<content:encoded><![CDATA[<p>The Cloud is everywhere these days. And lots of companies offer Cloud products or services. Why should you use them?</p>
<p><span id="more-2730"></span></p>
<p><strong>1. Synchronized Data</strong><br />
A big benefit of using a cloud product over something installed on your computer (or device) is that your data is available anywhere you have an Internet connection. You can work on a document in the cloud when you are working from home and it will be immediately available to you when you go back to the office.</p>
<p align="center"><img loading="lazy" decoding="async" src="https://www.xojo.com/cloud/cloud10.jpg" alt="Cloud Hosting" width="300" height="197" /></p>
<p><strong>2. Easy Installation</strong><br />
Or more precisely, no installation. To use cloud software, you just have to enter the URL in your web browser. You don’t have to download and install software. Nor do you have to worry about upgrading anything. It’s all transparent and easy for you.</p>
<p><strong>3. No Administration</strong><br />
Sometimes you can install software on your own web server to get cloud benefits without having to pay for a service. This is useful, but you still are left with having to do the installation, manage security and handle upgrades yourself all of which can take significant time and expertise. If you go with a cloud service, you let the service provider do all that work for you.</p>
<p><strong>4. Consistent Pricing</strong><br />
With a cloud service, pricing is typically a small amount per month. This has the benefit of being a predictable expense that can be far easier to justify to management than something with a large up-front cost. And many cloud services providers offer an alternative up-front yearly payment at a reduced rate for those that want to save money.</p>
<p><strong>5. No Worries</strong><br />
Essentially, with cloud services you don’t have to worry about maintaining the software you use to do your job. You only have to worry about doing your job.</p>
<p>Want to create your own cloud software or services? Consider using <a href="http://www.xojo.com/cloud">Xojo with Xojo Cloud hosting</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Do I need a Xojo Cloud server during development?</title>
		<link>https://blog.xojo.com/2017/10/10/do-i-need-a-xojo-cloud-server-during-development/</link>
		
		<dc:creator><![CDATA[Geoff Perlman]]></dc:creator>
		<pubDate>Tue, 10 Oct 2017 10:00:00 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">http://blogtemp.xojo.com/2015/06/10/do-i-need-a-xojo-cloud-server-during-development/</guid>

					<description><![CDATA[You can develop your application on your own computer and sign up for a Xojo Cloud server when you are getting close to deployment and are ready to test in as close to a real world situation as possible. There are differences of course between how a web app will execute on your computer with a single user (you) versus on a server that is anywhere from hundreds to thousands of miles away with many users connected all at the same time. For the most part, you don't have to think very much about this but there are areas where you should.]]></description>
										<content:encoded><![CDATA[<p>If you are just starting the development of your first web app you may be wondering if you need to get a <a href="http://www.xojo.com/cloud">Xojo Cloud</a> server right away. In most cases, the answer is no. You can develop your application on your own computer and sign up for a Xojo Cloud server when you are getting close to deployment and are ready to test in as close to a real world situation as possible.</p>
<p>There are differences of course between how a web app will execute on your computer with a single user (you) versus on a server that is anywhere from hundreds to thousands of miles away with many users connected all at the same time. For the most part, you don&#8217;t have to think very much about this but there are areas where you should.</p>
<p>Keep the following 3 things in mind when developing without a cloud server.</p>
<p><span id="more-241"></span></p>
<h3>Database Connections</h3>
<p>If your application is accessing a database server, your code should test the database connection each time you use it. Some servers, such as MySQL, will drop idle connections in low memory situations. That&#8217;s something you may never run into while testing your app on your own. During development testing you can load thousands of rows into a listbox and not even notice it. In the real world, that&#8217;s likely to be a problem so you&#8217;ll want to find a way to reduce the number of rows you load into a listbox.</p>
<h3>Data Processing</h3>
<p>If you have a function that is processor-intensive and takes a while to finish, you may want to move that to a separate console app. Xojo web apps execute on a single core so creating helper apps for data processing jobs allows you to move this work to other available cores and will keep your app more responsive. Even if your particular Xojo Cloud server has a single core, by building it to take advantage of multiple cores, you can easily upgrade to a larger, multicore server when you need the extra power.</p>
<h3>Installing Updates</h3>
<p>You&#8217;ll also want to think about what you want the user experience to be when you update the app. When you install an update to your web app, Xojo Cloud will quit your existing app to install the update and all users will be unexpectedly disconnected. <span style="line-height: 1.62;">If your app has a login you&#8217;ll want to provide a way to prevent new users from logging in and notify existing users that the app will be down for a few minutes.</span></p>
<p><span style="line-height: 1.62;">If your app writes out files, you will want to update your code so that when it&#8217;s running on Xojo Cloud, it writes these files out to the Shared Documents directory if you want these files to remain when you install an update to your app. Use <a title="TargetXojoCloud" href="http://documentation.xojo.com/index.php/TargetXojoCloud" target="_blank" rel="noopener noreferrer">TargetXojoCloud</a> to determine if your app is running on Xojo Cloud or not.</span></p>
<p>If you keep these things in mind while developing your app, you should only need to set up a Xojo Cloud server when you are ready to start beta testing your application.*</p>
<p>*Though it&#8217;s a secure and easy option for hosting your web app, you&#8217;re never required to use Xojo Cloud and can deploy your web apps as <a href="http://developer.xojo.com/userguide/web-app-deployment-overview">CGI or Standalone</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>New Xojo Cloud Servers: Better, Stronger, Faster</title>
		<link>https://blog.xojo.com/2015/11/05/new-xojo-cloud-servers-better-stronger-faster/</link>
		
		<dc:creator><![CDATA[Geoff Perlman]]></dc:creator>
		<pubDate>Thu, 05 Nov 2015 00:00:00 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">http://blogtemp.xojo.com/2015/11/05/new-xojo-cloud-servers-better-stronger-faster/</guid>

					<description><![CDATA[Improved Xojo Cloud servers - easy set up, security, maintenance and deployment for web apps. More RAM to run MySQL and Postgres, SSD and more.]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" style="display: block; margin-left: auto; margin-right: auto;" title="RackspaceDataCenter.jpeg" src="https://blog.xojo.com/wp-content/uploads/2015/11/RackspaceDataCenter.jpegt1466486449161ampwidth640ampheight400" sizes="auto, (max-width: 640px) 100vw, 640px" alt="RackspaceDataCenter.jpeg" width="640" height="400" /></p>
<p>Xojo Cloud has always taken the headaches out of setting up, securing, maintaining and deploying servers for web apps. Now Xojo Cloud servers are better, stronger and faster- all for the same great price!</p>
<p><span id="more-305"></span></p>
<p>This week we made available our new Xojo Cloud servers which are better in just about every way. First, we doubled the amount of RAM in each server. For the Small servers, this means they now have enough RAM to run <a href="/2015/03/19/xojo_cloud_databases/" target="_blank">MySQL and Postgres</a>. Second, we increased the pipe size (which controls how much traffic a server can handle at the same time) by 10 times. Third, we switched the servers from fixed hard disks to faster SSD drives. Finally, for the Medium and Large servers we doubled the number of virtual CPUs to give you more computing power. We did all of this without changing the price of Xojo Cloud.</p>
<p>The change from fixed hard disks to SSDs is important to note because it means these servers no longer use virtual memory. SSDs are more expensive and virtual memory does a lot of writing to disk so virtual memory is no longer available. This means that if your app runs out of memory, it&#8217;s going to crash. If you start hearing from users that they have to log back in more often, it could be that your app is running out of memory either because you have a memory leak in your code or because your app simply needs more RAM.</p>
<p>In case of the former, you&#8217;ll want to look for places where you create large objects but perhaps never get rid of them. It may also be that your app simply needs more memory than your server has. The good news in this last case (which is more common) is that you can upgrade to a bigger server anytime.  Just contact <a href="../../../com/xojo/blog/index.html" target="_blank">Customer Service</a> to help you upgrade.</p>
<p>Xojo Cloud servers already save you money by saving you time. Now they give you even more bang for your buck. If you&#8217;re building a web app, check out <a href="http://www.xojo.com/cloud/" target="_blank">Xojo Cloud</a> today.</p>
<p><!--HubSpot Call-to-Action Code --> <span id="hs-cta-wrapper-55d62b7b-a129-4d37-b1a3-004c028acc9d" class="hs-cta-wrapper"> <span id="hs-cta-55d62b7b-a129-4d37-b1a3-004c028acc9d" class="hs-cta-node hs-cta-55d62b7b-a129-4d37-b1a3-004c028acc9d"><br />
<!-- [if lte IE 8]>


<div id="hs-cta-ie-element"></div>


<![endif]--> <a href="http://blog.xojo.com/2015/06/29/web-app-security-its-for-more-than-just-your-app/" target="_blank"><img loading="lazy" decoding="async" id="hs-cta-img-55d62b7b-a129-4d37-b1a3-004c028acc9d" class="hs-cta-img aligncenter" style="border-width: 0px; margin: 0 auto; display: block; margin-top: 20px; margin-bottom: 20px;" src="https://blog.xojo.com/wp-content/uploads/2015/10/55d62b7b-a129-4d37-b1a3-004c028acc9d.png" alt="Web App Security" width="468" height="70" align="middle" /></a> </span><script src="https://js.hscta.net/cta/current.js" charset="utf-8">// <![CDATA[
<script type="text/javascript"><![CDATA[ hbspt.cta.load(608515, '55d62b7b-a129-4d37-b1a3-004c028acc9d', {});
// ]]&gt;</script></span><br />
<!-- end HubSpot Call-to-Action Code --></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Xojo Cloud Lowers the Price of Security and Convenience</title>
		<link>https://blog.xojo.com/2014/03/12/xojo-cloud-lowers-the-price-of-security-and-convenience/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Wed, 12 Mar 2014 00:00:00 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Xojo Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[MySQL]]></category>
		<guid isPermaLink="false">http://blogtemp.xojo.com/2014/03/12/xojo-cloud-lowers-the-price-of-security-and-convenience/</guid>

					<description><![CDATA[Xojo Cloud Lowers the Price of Security and Convenience]]></description>
										<content:encoded><![CDATA[<p>Xojo Cloud is now available with plans starting at just $49 per month for a fully managed and secure cloud server for running your Xojo web apps. What does this mean for your web apps?</p>
<p><span id="more-106"></span></p>
<p>Without Xojo Cloud, you have to manage a Linux server to host your Xojo web apps. Have you ever managed a Linux server? If not, perhaps you have no idea how difficult it can be.</p>
<p>Here are just <em>some</em> of the things you&#8217;ll have to worry about when you have to manage a Linux server with other hosting services.</p>
<h2>Keeping your chosen version of Linux up-to-date</h2>
<p>This is a lot harder than it sounds. Linux distributions are updated often to fix bugs and security holes.</p>
<p>I&#8217;ve had a Linux virtual private server (VPS) for several years that I have used to run a few web sites and the occassional Xojo web app. It turns out that my version of Debian Linux is getting a bit old and I need to upgrade it. But my hosting company does not make this easy. The control panel I am using no longer supports Debian and my hosting company only offers it with Ubuntu. There is no way for me to fix this myself as I cannot just create a new VPS container using Ubuntu while retaining my existing files. Instead I have to back up everything, get a new VPS created with Ubuntu and then manually set everything back up. This is going to take a tremendous amount of time, so I&#8217;m actually working on moving my stuff away from the VPS. I no longer want to spend my valuable time managing my own Linux server. <a href="http://en.memory-alpha.org/wiki/I'm_a_doctor,_not_a...">I&#8217;m a programmer, not a Linux system administrator</a>.</p>
<p>With Xojo Cloud, we keep Linux updated for you.</p>
<h2>32-bit Libraries</h2>
<p>To run Xojo apps on your server, you&#8217;ll need either a 32-bit version of Linux or you&#8217;ll have to install the 32-bit compatibility libraries needed by Xojo apps. Few hosting companies offer 32-bit Linux distributions. For 64-bit distributions, finding and installing these libraries can be easy with some distributions and rather difficult with others. Regardless, you better be comfortable with the Terminal, SSH, apt-get, yum and other Linux tools and commands.</p>
<p>With Xojo Cloud, we ensure the proper libraries are installed so your Xojo apps runs smoothly.</p>
<h2>Firewall Management</h2>
<p>Are you familiar with <a href="http://en.wikipedia.org/wiki/Iptables">iptables</a>? You&#8217;ll need to learn how to use it to manage your firewall so that your server is not open to attacks if you leave the wrong port open.</p>
<p>Xojo Cloud has an smart, adaptive firewall that watches the traffic coming in to your Xojo Cloud server and looks for the patterns that indicate a hacker. It can then lock the hacker out before they get in.</p>
<h2>Secure Uploads</h2>
<p>How are you going to get files to your web server? FTP is the most common answer, but it&#8217;s not secure. You&#8217;ll want to ensure you configure <a href="http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol">SFTP</a> so that you can securely transfer files. Uploading is also an extra step when building and deploying your Xojo apps. You&#8217;ll have to do a the build and then use your FTP client to transfer the build over to the server. Although before you do that, make sure to head over to the server to stop (or quit) your web app if it is already running.</p>
<p>With Xojo Cloud, you can securely upload your web apps right from Xojo itself with one click. Or you can use the built-in SFTP server to upload files yourself.</p>
<h2>Permissions</h2>
<p>Once you have your web app (and any related files) uploaded, you&#8217;ll need to make sure that the permissions are set correctly. Often, the permissions set by an SFTP upload do not match the permissions needed by Apache to access and execute files. You&#8217;ll need to become quite intimate with the Terminal and the chown and chmod commands.</p>
<p>Your app permissions are set for you automatically when you upload directly from Xojo to Xojo Cloud.</p>
<h2>Apache</h2>
<p>Configuring the <a href="http://httpd.apache.org">Apache</a> web server can get pretty complex. There are <a href="http://www.apachebookstore.com/confluence/oss/display/BOOKS/Books+on+Apache+HTTP+Server+%28httpd%29">lots of books</a> written about it, but it might take some time to get through them all. Xojo web apps use <a href="http://en.wikipedia.org/wiki/Common_Gateway_Interface">CGI</a> in conjunction with <a href="http://en.wikipedia.org/wiki/Perl">Perl</a> to communicate with Apache, neither of which may be enabled by default.</p>
<p>With Xojo Cloud this is all automatically enabled and properly configured for you.</p>
<h2>SSL Certificates</h2>
<p>Does your host provide an easy way for you to add an <a href="http://en.wikipedia.org/wiki/SSL_certificate">SSL certificate</a> to your web site? You absolutely need this is your web app has a login page, otherwise all data, including user IDs and passwords, are sent in plain text.</p>
<p>Xojo Cloud has a simple wizard to walk you through the processing of obtaining an SSL Certificate and installing it.</p>
<h2>Database Support</h2>
<p>Hosting services sometimes have MySQL available as an option. But few offer PostgreSQL, a more powerful open-source database. And most hosting companies do not provide a way for you to access the DB from outside a web app running on the server.</p>
<p>With Xojo Cloud you can easily enable MySQL or PostgreSQL. Plus you can also turn on an SSH tunnel so you can connect to the DB from outside the server to use your favorite admin tools or even connect from a desktop app. You can even easily create a <a href="http://developer.xojo.com/eddies-electronics-web-service">Xojo Cloud web app that acts as a web service</a> to a DB so that you can easily connect from any type of app, even iOS.</p>
<h2>TL;DR: Why Xojo Cloud?</h2>
<p>We don&#8217;t want you to have to worry about any of the above, which is why we created Xojo Cloud: security and convenience. It goes without saying that you&#8217;ve heard a story of some major company or web service having its data compromised. We take security seriously and want you to as well. Security is complex, but Xojo Cloud makes it easy for you to have a secure server with very little effort on your part.</p>
<p><span style="line-height: 1.62;">We use a Xojo-optimized version of <a href="http://wiki.centos.org/HowTos/SELinux">Security Enhanced Linux</a> (SELinux), which is based on CentOS. You don&#8217;t have to worry about keeping it up-to-date and you don&#8217;t have to worry about installing libraries needed by Xojo.</span></p>
<p><span style="line-height: 1.62;">The Xojo Cloud firewall is an impressive piece of engineering. The firewall watches the traffic and uses heuristics to try to determine potential denial-of-service and other hacking attempts. Not to mention the additional layers of intrusion detection and file change detection.</span></p>
<p><span style="line-height: 1.62;">Since Xojo Cloud is integrated with Xojo itself, you get fast, easy and secure uploads of your web applications and associated files. The permissions are set for you automatically. This is all done by simply clicking the &#8220;Deploy&#8221; button on the main toolbar.</span></p>
<p><span style="line-height: 1.62;">You don&#8217;t even every have to worry about Apache. You just upload your web app, it goes into its own folder and then you can make it available for the world to use. How much easier could it be? We even have a wizard to walk you through getting and installing an SSL certificate, something that can be challenging with some VPS hosts.</span></p>
<p><span style="line-height: 22.68px;">Lastly, the Xojo Cloud database support gives you fast and easy access to MySQL and PostgreSQL for use in your own web, desktop and iOS apps.</span></p>
<h2><span style="line-height: 1.62;">Security &amp; Convenience<br />
</span></h2>
<p>So why does Xojo Cloud start at $49 per month when you can get hosting from &lt;insert other hosting provider&gt; for $25 per month? The reason is because security and convenience are not free. Most VPS hosting is not as fully managed as you might think. You are given access to a control panel but generally have to manage most things yourself. There is typically a list of specific tasks that the hosting company will also do for you if you file a support ticket. Of course, if you are comfortable doing this and have the free time, a VPS might be a reasonable option. Certainly, it was the best option available before Xojo Cloud. But for most people that want to spend their time creating great software and not acting as a Linux administrator, Xojo Cloud is a bargain.</p>
<p>We think Xojo with Xojo Cloud is the most secure and and easiest way yet to create web applications. We hope you do as well. Now go forth and create web apps!</p>
<p>Update: Xojo Cloud Database Support is here, click below to read about it!</p>
<p><!--HubSpot Call-to-Action Code --> <span id="hs-cta-wrapper-61f037c4-107a-426b-8728-b9201384f0c7" class="hs-cta-wrapper"> <span id="hs-cta-61f037c4-107a-426b-8728-b9201384f0c7" class="hs-cta-node hs-cta-61f037c4-107a-426b-8728-b9201384f0c7"><br />
<!-- [if lte IE 8]>


<div id="hs-cta-ie-element"></div>


<![endif]--> <a href="http://blog.xojo.com/2015/03/19/xojo-cloud-databases-add-connect-manage/" target="_blank" rel="noopener"><img loading="lazy" decoding="async" id="hs-cta-img-61f037c4-107a-426b-8728-b9201384f0c7" class="hs-cta-img aligncenter" style="border-width: 0px; margin: 0 auto; display: block; margin-top: 20px; margin-bottom: 20px;" src="https://blog.xojo.com/wp-content/uploads/2013/06/61f037c4-107a-426b-8728-b9201384f0c7.png" alt="Xojo Cloud Database Postgres MySQL" width="591" height="100" align="middle" /></a></span></span><br />
<!-- end HubSpot Call-to-Action Code --></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
